mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-30 11:47:55 +01:00
docs(drawer): update
This commit is contained in:
@@ -0,0 +1,34 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
const searchTerm = ref('')
|
||||||
|
|
||||||
|
const { data: users, status } = await useFetch('https://jsonplaceholder.typicode.com/users', {
|
||||||
|
params: { q: searchTerm },
|
||||||
|
transform: (data: any[]) => {
|
||||||
|
return data?.map(user => ({ id: user.id, label: user.name, suffix: user.email, avatar: { src: `https://i.pravatar.cc/120?img=${user.id}` } })) || []
|
||||||
|
},
|
||||||
|
lazy: true
|
||||||
|
})
|
||||||
|
|
||||||
|
const groups = computed(() => [{
|
||||||
|
id: 'users',
|
||||||
|
label: searchTerm.value ? `Users matching “${searchTerm.value}”...` : 'Users',
|
||||||
|
items: users.value || [],
|
||||||
|
filter: false
|
||||||
|
}])
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UDrawer>
|
||||||
|
<UButton label="Search users..." color="gray" variant="subtle" icon="i-heroicons-magnifying-glass" />
|
||||||
|
|
||||||
|
<template #content>
|
||||||
|
<UCommandPalette
|
||||||
|
v-model:search-term="searchTerm"
|
||||||
|
:loading="status === 'pending'"
|
||||||
|
:groups="groups"
|
||||||
|
placeholder="Search users..."
|
||||||
|
class="h-96 border-t border-gray-200 dark:border-gray-800"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</UDrawer>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
const open = ref(false)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UDrawer v-model:open="open" title="Drawer with actions" description="This is useful when you want a form in a drawer.">
|
||||||
|
<UButton label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid" />
|
||||||
|
|
||||||
|
<template #body>
|
||||||
|
<Placeholder class="h-48" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<UButton label="Submit" color="gray" class="justify-center" />
|
||||||
|
<UButton label="Cancel" color="gray" variant="outline" class="justify-center" @click="open = false" />
|
||||||
|
</template>
|
||||||
|
</UDrawer>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
const open = ref(false)
|
||||||
|
|
||||||
|
defineShortcuts({
|
||||||
|
o: () => open.value = !open.value
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UDrawer v-model:open="open">
|
||||||
|
<UButton label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid" />
|
||||||
|
|
||||||
|
<template #content>
|
||||||
|
<Placeholder class="h-48 m-4" />
|
||||||
|
</template>
|
||||||
|
</UDrawer>
|
||||||
|
</template>
|
||||||
@@ -85,15 +85,15 @@ Use the `slot` property to customize a specific item.
|
|||||||
|
|
||||||
You will have access to the following slots:
|
You will have access to the following slots:
|
||||||
|
|
||||||
- `{{ item.slot }}`{lang="ts-type"}
|
- `#{{ item.slot }}`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-leading`{lang="ts-type"}
|
- `#{{ item.slot }}-leading`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-label`{lang="ts-type"}
|
- `#{{ item.slot }}-label`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-trailing`{lang="ts-type"}
|
- `#{{ item.slot }}-trailing`{lang="ts-type"}
|
||||||
|
|
||||||
:component-example{name="breadcrumb-custom-slot-example"}
|
:component-example{name="breadcrumb-custom-slot-example"}
|
||||||
|
|
||||||
::tip{to="#slots"}
|
::tip{to="#slots"}
|
||||||
You can also use the `item`, `item-leading`, `item-label` and `item-trailing` slots to customize all items.
|
You can also use the `#item`, `#item-leading`, `#item-label` and `#item-trailing` slots to customize all items.
|
||||||
::
|
::
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class: 'justify-center'
|
|||||||
::
|
::
|
||||||
|
|
||||||
::note
|
::note
|
||||||
In this example, press :kbd{value="O" color="blue"} to toggle the Collapsible.
|
In this example, press :kbd{value="O"} to toggle the Collapsible.
|
||||||
::
|
::
|
||||||
|
|
||||||
### With rotating icon
|
### With rotating icon
|
||||||
|
|||||||
@@ -179,10 +179,10 @@ Use the `slot` property to customize a specific item.
|
|||||||
|
|
||||||
You will have access to the following slots:
|
You will have access to the following slots:
|
||||||
|
|
||||||
- `{{ item.slot }}`{lang="ts-type"}
|
- `#{{ item.slot }}`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-leading`{lang="ts-type"}
|
- `#{{ item.slot }}-leading`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-label`{lang="ts-type"}
|
- `#{{ item.slot }}-label`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-trailing`{lang="ts-type"}
|
- `#{{ item.slot }}-trailing`{lang="ts-type"}
|
||||||
|
|
||||||
::component-example
|
::component-example
|
||||||
---
|
---
|
||||||
@@ -192,7 +192,7 @@ class: 'justify-center'
|
|||||||
::
|
::
|
||||||
|
|
||||||
::tip{to="#slots"}
|
::tip{to="#slots"}
|
||||||
You can also use the `item`, `item-leading`, `item-label` and `item-trailing` slots to customize all items.
|
You can also use the `#item`, `#item-leading`, `#item-label` and `#item-trailing` slots to customize all items.
|
||||||
::
|
::
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|||||||
@@ -7,15 +7,184 @@ links:
|
|||||||
- label: GitHub
|
- label: GitHub
|
||||||
icon: i-simple-icons-github
|
icon: i-simple-icons-github
|
||||||
to: https://github.com/benjamincanac/ui3/tree/dev/src/runtime/components/Drawer.vue
|
to: https://github.com/benjamincanac/ui3/tree/dev/src/runtime/components/Drawer.vue
|
||||||
navigation:
|
|
||||||
badge:
|
|
||||||
label: Todo
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
Use a [Button](/components/button) or any other component in the default slot of the Drawer.
|
||||||
|
|
||||||
|
Then, use the `#content` slot to add the content displayed when the Drawer is open.
|
||||||
|
|
||||||
|
::component-code
|
||||||
|
---
|
||||||
|
prettier: true
|
||||||
|
class: 'justify-center'
|
||||||
|
slots:
|
||||||
|
default: |
|
||||||
|
|
||||||
|
<UButton label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid" />
|
||||||
|
|
||||||
|
content: |
|
||||||
|
|
||||||
|
<Placeholder class="h-48" />
|
||||||
|
---
|
||||||
|
|
||||||
|
:u-button{label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid"}
|
||||||
|
|
||||||
|
#content
|
||||||
|
:placeholder{class="h-48 m-4"}
|
||||||
|
::
|
||||||
|
|
||||||
|
You can also use the `#header`, `#body` and `#footer` slots to customize the Drawer's content.
|
||||||
|
|
||||||
|
### Title
|
||||||
|
|
||||||
|
Use the `title` prop to set the title of the Drawer's header.
|
||||||
|
|
||||||
|
::component-code
|
||||||
|
---
|
||||||
|
prettier: true
|
||||||
|
class: 'justify-center'
|
||||||
|
props:
|
||||||
|
title: 'Title'
|
||||||
|
slots:
|
||||||
|
default: |
|
||||||
|
|
||||||
|
<UButton label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid" />
|
||||||
|
|
||||||
|
body: |
|
||||||
|
|
||||||
|
<Placeholder class="h-48" />
|
||||||
|
---
|
||||||
|
|
||||||
|
:u-button{label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid"}
|
||||||
|
|
||||||
|
#body
|
||||||
|
:placeholder{class="h-48"}
|
||||||
|
::
|
||||||
|
|
||||||
|
### Description
|
||||||
|
|
||||||
|
Use the `description` prop to set the description of the Drawer's header.
|
||||||
|
|
||||||
|
::component-code
|
||||||
|
---
|
||||||
|
prettier: true
|
||||||
|
class: 'justify-center'
|
||||||
|
ignore:
|
||||||
|
- title
|
||||||
|
props:
|
||||||
|
title: 'Title'
|
||||||
|
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
|
slots:
|
||||||
|
default: |
|
||||||
|
|
||||||
|
<UButton label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid" />
|
||||||
|
|
||||||
|
body: |
|
||||||
|
|
||||||
|
<Placeholder class="h-48" />
|
||||||
|
---
|
||||||
|
|
||||||
|
:u-button{label="Open" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid"}
|
||||||
|
|
||||||
|
#body
|
||||||
|
:placeholder{class="h-48"}
|
||||||
|
::
|
||||||
|
|
||||||
|
### Scale background
|
||||||
|
|
||||||
|
Use the `should-scale-background` prop to scale the background when the Drawer is open, creating a visual depth effect.
|
||||||
|
|
||||||
|
::component-code
|
||||||
|
---
|
||||||
|
prettier: true
|
||||||
|
class: 'justify-center'
|
||||||
|
props:
|
||||||
|
shouldScaleBackground: true
|
||||||
|
slots:
|
||||||
|
default: |
|
||||||
|
|
||||||
|
<UButton label="Open with scale" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid" />
|
||||||
|
|
||||||
|
content: |
|
||||||
|
|
||||||
|
<Placeholder class="h-48" />
|
||||||
|
---
|
||||||
|
|
||||||
|
:u-button{label="Open with scale" color="gray" variant="subtle" trailing-icon="i-heroicons-chevron-up-20-solid"}
|
||||||
|
|
||||||
|
#content
|
||||||
|
:placeholder{class="h-screen m-4"}
|
||||||
|
::
|
||||||
|
|
||||||
|
::important
|
||||||
|
Make sure to add the `vaul-drawer-wrapper` directive to a parent element of your app to make this work.
|
||||||
|
|
||||||
|
```vue [app.vue]
|
||||||
|
<template>
|
||||||
|
<UApp>
|
||||||
|
<div class="bg-white dark:bg-gray-900" vaul-drawer-wrapper>
|
||||||
|
<NuxtLayout>
|
||||||
|
<NuxtPage />
|
||||||
|
</NuxtLayout>
|
||||||
|
</div>
|
||||||
|
</UApp>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
```ts [nuxt.config.ts]
|
||||||
|
export default defineNuxtConfig({
|
||||||
|
app: {
|
||||||
|
rootAttrs: {
|
||||||
|
'vaul-drawer-wrapper': '',
|
||||||
|
'class': 'bg-white dark:bg-gray-900'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
::
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
### Control open state
|
||||||
|
|
||||||
|
You can control the open state by using the `default-open` prop or the `v-model:open` directive.
|
||||||
|
|
||||||
|
::component-example
|
||||||
|
---
|
||||||
|
name: 'drawer-open-example'
|
||||||
|
class: 'justify-center'
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
|
::note
|
||||||
|
In this example, press :kbd{value="O"} to toggle the Drawer.
|
||||||
|
::
|
||||||
|
|
||||||
|
### With footer slot
|
||||||
|
|
||||||
|
Use the `#footer` slot to add content after the Drawer's body.
|
||||||
|
|
||||||
|
::component-example
|
||||||
|
---
|
||||||
|
name: 'drawer-footer-slot-example'
|
||||||
|
class: 'justify-center'
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
|
### With command palette
|
||||||
|
|
||||||
|
You can use the [CommandPalette](/components/command-palette) component inside the Drawer.
|
||||||
|
|
||||||
|
::component-example
|
||||||
|
---
|
||||||
|
collapse: true
|
||||||
|
name: 'drawer-command-palette-example'
|
||||||
|
class: 'justify-center'
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
### Props
|
### Props
|
||||||
|
|||||||
@@ -278,10 +278,10 @@ Use the `slot` property to customize a specific item.
|
|||||||
|
|
||||||
You will have access to the following slots:
|
You will have access to the following slots:
|
||||||
|
|
||||||
- `{{ item.slot }}`{lang="ts-type"}
|
- `#{{ item.slot }}`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-leading`{lang="ts-type"}
|
- `#{{ item.slot }}-leading`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-label`{lang="ts-type"}
|
- `#{{ item.slot }}-label`{lang="ts-type"}
|
||||||
- `{{ item.slot }}-trailing`{lang="ts-type"}
|
- `#{{ item.slot }}-trailing`{lang="ts-type"}
|
||||||
|
|
||||||
::component-example
|
::component-example
|
||||||
---
|
---
|
||||||
@@ -291,7 +291,7 @@ class: 'justify-center'
|
|||||||
::
|
::
|
||||||
|
|
||||||
::tip{to="#slots"}
|
::tip{to="#slots"}
|
||||||
You can also use the `item`, `item-leading`, `item-label` and `item-trailing` slots to customize all items.
|
You can also use the `#item`, `#item-leading`, `#item-label` and `#item-trailing` slots to customize all items.
|
||||||
::
|
::
|
||||||
|
|
||||||
### Extract shortcuts
|
### Extract shortcuts
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ export default defineNuxtConfig({
|
|||||||
bodyAttrs: {
|
bodyAttrs: {
|
||||||
class: 'antialiased font-sans text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-900'
|
class: 'antialiased font-sans text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-900'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
rootAttrs: {
|
||||||
|
'vaul-drawer-wrapper': '',
|
||||||
|
'class': 'bg-white dark:bg-gray-900'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -129,6 +133,7 @@ export default defineNuxtConfig({
|
|||||||
'UChip',
|
'UChip',
|
||||||
'UCollapsible',
|
'UCollapsible',
|
||||||
'UContextMenu',
|
'UContextMenu',
|
||||||
|
'UDrawer',
|
||||||
'UDropdownMenu',
|
'UDropdownMenu',
|
||||||
'UFormField',
|
'UFormField',
|
||||||
'UIcon',
|
'UIcon',
|
||||||
|
|||||||
Reference in New Issue
Block a user