export const actionAndItemGroup = { ts: `<template> <VList lines="three" density="compact" select-strategy="classic" > <VListSubheader>General</VListSubheader> <VListItem value="notifications"> <template #prepend="{ isActive }"> <VListItemAction> <VCheckbox :model-value="isActive" color="primary" class="mt-2" /> </VListItemAction> </template> <VListItemTitle>Notifications</VListItemTitle> <VListItemSubtitle>Notify me about updates to apps or games that I downloaded</VListItemSubtitle> </VListItem> <VListItem value="sound"> <template #prepend="{ isActive }"> <VListItemAction> <VCheckbox :model-value="isActive" color="primary" class="mt-2" /> </VListItemAction> </template> <VListItemTitle>Sound</VListItemTitle> <VListItemSubtitle>Auto-update apps at any time. Data charges may apply</VListItemSubtitle> </VListItem> <VListItem value="widgets"> <template #prepend="{ isActive }"> <VListItemAction> <VCheckbox :model-value="isActive" color="primary" class="mt-2" /> </VListItemAction> </template> <VListItemTitle>Auto-add widgets</VListItemTitle> <VListItemSubtitle>Automatically add home screen widgets when downloads complete</VListItemSubtitle> </VListItem> </VList> </template> `, js: `<template> <VList lines="three" density="compact" select-strategy="classic" > <VListSubheader>General</VListSubheader> <VListItem value="notifications"> <template #prepend="{ isActive }"> <VListItemAction> <VCheckbox :model-value="isActive" color="primary" class="mt-2" /> </VListItemAction> </template> <VListItemTitle>Notifications</VListItemTitle> <VListItemSubtitle>Notify me about updates to apps or games that I downloaded</VListItemSubtitle> </VListItem> <VListItem value="sound"> <template #prepend="{ isActive }"> <VListItemAction> <VCheckbox :model-value="isActive" color="primary" class="mt-2" /> </VListItemAction> </template> <VListItemTitle>Sound</VListItemTitle> <VListItemSubtitle>Auto-update apps at any time. Data charges may apply</VListItemSubtitle> </VListItem> <VListItem value="widgets"> <template #prepend="{ isActive }"> <VListItemAction> <VCheckbox :model-value="isActive" color="primary" class="mt-2" /> </VListItemAction> </template> <VListItemTitle>Auto-add widgets</VListItemTitle> <VListItemSubtitle>Automatically add home screen widgets when downloads complete</VListItemSubtitle> </VListItem> </VList> </template> ` } export const basic = { ts: `<script setup lang="ts"> const items = ['Cras justo odio', 'Dapibus ac facilisis in', 'Morbi leo risus', 'Porta ac consectetur ac'] </script> <template> <VList :items="items" /> </template> `, js: `<script setup> const items = [ 'Cras justo odio', 'Dapibus ac facilisis in', 'Morbi leo risus', 'Porta ac consectetur ac', ] </script> <template> <VList :items="items" /> </template> ` } export const density = { ts: `<script lang="ts" setup> const items = [ { title: 'halvah icing marshmallow', value: 1 }, { title: 'Cake caramels donut danish muffin biscuit', value: 2 }, { title: 'Chocolate cake pie lollipop', value: 3 }, { title: 'Apple pie toffee pudding gummi bears', value: 4 }, { title: 'Jujubes chupa chups cheesecake tart', value: 5 }, { title: 'Candy fruitcake bonbon sesame snaps dessert', value: 6 }, { title: 'Candy wafer tiramisu sugar plum sweet.', value: 7 }, { title: 'Toffee gingerbread muffin macaroon cotton candy bonbon lollipop.', value: 8 }, ] </script> <template> <VList density="compact" :items="items" /> </template> `, js: `<script setup> const items = [ { title: 'halvah icing marshmallow', value: 1, }, { title: 'Cake caramels donut danish muffin biscuit', value: 2, }, { title: 'Chocolate cake pie lollipop', value: 3, }, { title: 'Apple pie toffee pudding gummi bears', value: 4, }, { title: 'Jujubes chupa chups cheesecake tart', value: 5, }, { title: 'Candy fruitcake bonbon sesame snaps dessert', value: 6, }, { title: 'Candy wafer tiramisu sugar plum sweet.', value: 7, }, { title: 'Toffee gingerbread muffin macaroon cotton candy bonbon lollipop.', value: 8, }, ] </script> <template> <VList density="compact" :items="items" /> </template> ` } export const nav = { ts: `<script lang="ts" setup> const items = [ { title: 'My Files', value: 1, prependIcon: 'ri-folder-line' }, { title: 'Shared with me', value: 2, prependIcon: 'ri-group-line' }, { title: 'Starred', value: 3, prependIcon: 'ri-star-line' }, { title: 'Recent', value: 4, prependIcon: 'ri-history-line' }, { title: 'Offline', value: 5, prependIcon: 'ri-checkbox-circle-line' }, { title: 'Uploads', value: 6, prependIcon: 'ri-upload-line' }, { title: 'Backups', value: 7, prependIcon: 'ri-upload-cloud-line' }, ] </script> <template> <VList nav :lines="false" > <VListItem v-for="item in items" :key="item.value" :value="item.value" > <template #prepend> <VIcon :icon="item.prependIcon" class="me-3" /> </template> <VListItemTitle> {{ item.title }} </VListItemTitle> </VListItem> </VList> </template> `, js: `<script setup> const items = [ { title: 'My Files', value: 1, prependIcon: 'ri-folder-line', }, { title: 'Shared with me', value: 2, prependIcon: 'ri-group-line', }, { title: 'Starred', value: 3, prependIcon: 'ri-star-line', }, { title: 'Recent', value: 4, prependIcon: 'ri-history-line', }, { title: 'Offline', value: 5, prependIcon: 'ri-checkbox-circle-line', }, { title: 'Uploads', value: 6, prependIcon: 'ri-upload-line', }, { title: 'Backups', value: 7, prependIcon: 'ri-upload-cloud-line', }, ] </script> <template> <VList nav :lines="false" > <VListItem v-for="item in items" :key="item.value" :value="item.value" > <template #prepend> <VIcon :icon="item.prependIcon" class="me-3" /> </template> <VListItemTitle> {{ item.title }} </VListItemTitle> </VListItem> </VList> </template> ` } export const progressList = { ts: `<script setup lang="ts"> interface Language { 'react': string 'bootstrap': string 'vue': string 'angular': string 'javascript': string } interface Progress { avatar: string title: string language: keyof Language amount: number } const languageProgress: Progress[] = [ { avatar: 'ri-reactjs-line', title: 'React is a JavaScript library for building user interfaces', language: 'react', amount: 90, }, { avatar: 'ri-bootstrap-line', title: 'Bootstrap is an open source toolkit', language: 'bootstrap', amount: 80, }, { avatar: 'ri-vuejs-line', title: 'Vue.js is the Progressive JavaScript Framework', language: 'vue', amount: 65, }, { avatar: 'ri-angularjs-line', title: 'Angular implements Functional Programming concepts', language: 'angular', amount: 75, }, { avatar: 'ri-javascript-line', title: 'JavaScript is the programming language of the Web', language: 'javascript', amount: 70, }, ] const resolveStatusColor: Language = { react: 'info', bootstrap: 'primary', vue: 'success', angular: 'error', javascript: 'warning', } </script> <template> <VList lines="two" border rounded > <template v-for="(progress, index) of languageProgress" :key="progress.language" > <VListItem> <template #prepend> <VAvatar size="36" rounded variant="tonal" :icon="progress.avatar" :color="resolveStatusColor[progress.language]" /> </template> <VListItemTitle> {{ progress.title }} </VListItemTitle> <VListItemSubtitle class="mt-2"> <VProgressLinear height="6" rounded :model-value="progress.amount" bg-color="secondary" :color="resolveStatusColor[progress.language]" /> </VListItemSubtitle> </VListItem> <VDivider v-if="index !== languageProgress.length - 1" /> </template> </VList> </template> `, js: `<script setup> const languageProgress = [ { avatar: 'ri-reactjs-line', title: 'React is a JavaScript library for building user interfaces', language: 'react', amount: 90, }, { avatar: 'ri-bootstrap-line', title: 'Bootstrap is an open source toolkit', language: 'bootstrap', amount: 80, }, { avatar: 'ri-vuejs-line', title: 'Vue.js is the Progressive JavaScript Framework', language: 'vue', amount: 65, }, { avatar: 'ri-angularjs-line', title: 'Angular implements Functional Programming concepts', language: 'angular', amount: 75, }, { avatar: 'ri-javascript-line', title: 'JavaScript is the programming language of the Web', language: 'javascript', amount: 70, }, ] const resolveStatusColor = { react: 'info', bootstrap: 'primary', vue: 'success', angular: 'error', javascript: 'warning', } </script> <template> <VList lines="two" border rounded > <template v-for="(progress, index) of languageProgress" :key="progress.language" > <VListItem> <template #prepend> <VAvatar size="36" rounded variant="tonal" :icon="progress.avatar" :color="resolveStatusColor[progress.language]" /> </template> <VListItemTitle> {{ progress.title }} </VListItemTitle> <VListItemSubtitle class="mt-2"> <VProgressLinear height="6" rounded :model-value="progress.amount" bg-color="secondary" :color="resolveStatusColor[progress.language]" /> </VListItemSubtitle> </VListItem> <VDivider v-if="index !== languageProgress.length - 1" /> </template> </VList> </template> ` } export const rounded = { ts: `<script lang="ts" setup> const items = [ { title: 'Cupcake sesame snaps dessert marzipan.', value: 1, props: { prependIcon: 'ri-dribbble-line', rounded: 'xl', }, }, { title: 'Jelly beans jelly-o gummi bears chupa chups marshmallow.', value: 2, props: { prependIcon: 'ri-facebook-circle-line', rounded: 'xl', }, }, { title: 'Bonbon macaroon gummies pie jelly', value: 3, props: { prependIcon: 'ri-twitter-line', rounded: 'xl', }, }, { title: 'halvah icing marshmallow', value: 4, props: { prependIcon: 'ri-instagram-line', rounded: 'xl', }, }, ] </script> <template> <VList :items="items" /> </template> `, js: `<script setup> const items = [ { title: 'Cupcake sesame snaps dessert marzipan.', value: 1, props: { prependIcon: 'ri-dribbble-line', rounded: 'xl', }, }, { title: 'Jelly beans jelly-o gummi bears chupa chups marshmallow.', value: 2, props: { prependIcon: 'ri-facebook-circle-line', rounded: 'xl', }, }, { title: 'Bonbon macaroon gummies pie jelly', value: 3, props: { prependIcon: 'ri-twitter-line', rounded: 'xl', }, }, { title: 'halvah icing marshmallow', value: 4, props: { prependIcon: 'ri-instagram-line', rounded: 'xl', }, }, ] </script> <template> <VList :items="items" /> </template> ` } export const shaped = { ts: `<script lang="ts" setup> const items = [ { text: 'Cupcake sesame snaps dessert marzipan.', icon: 'ri-instagram-line' }, { text: 'Jelly beans jelly-o gummi bears chupa chups marshmallow.', icon: 'ri-facebook-circle-line' }, { text: 'Bonbon macaroon gummies pie jelly', icon: 'ri-twitter-line' }, ] </script> <template> <VList> <VListItem v-for="(item, i) in items" :key="i" :value="item.text" rounded="shaped" > <template #prepend> <VIcon :icon="item.icon" /> </template> <!-- eslint-disable-next-line vue/no-v-text-v-html-on-component --> <VListItemTitle v-text="item.text" /> </VListItem> </VList> </template> `, js: `<script setup> const items = [ { text: 'Cupcake sesame snaps dessert marzipan.', icon: 'ri-instagram-line', }, { text: 'Jelly beans jelly-o gummi bears chupa chups marshmallow.', icon: 'ri-facebook-circle-line', }, { text: 'Bonbon macaroon gummies pie jelly', icon: 'ri-twitter-line', }, ] </script> <template> <VList> <VListItem v-for="(item, i) in items" :key="i" :value="item.text" rounded="shaped" > <template #prepend> <VIcon :icon="item.icon" /> </template> <!-- eslint-disable-next-line vue/no-v-text-v-html-on-component --> <VListItemTitle v-text="item.text" /> </VListItem> </VList> </template> ` } export const subGroup = { ts: `<script lang="ts" setup> const open = ref(['Users', 'Admin']) const admins = [ ['Management', 'ri-group-line'], ['Settings', 'ri-settings-5-line'], ] const cruds = [ ['Create', 'ri-add-line'], ['Read', 'ri-file-line'], ['Update', 'ri-refresh-line'], ['Delete', 'ri-delete-bin-line'], ] </script> <template> <VList v-model:opened="open"> <VListItem prepend-icon="ri-home-line" title="Home" value="Home" /> <VListGroup value="Users"> <template #activator="{ props }"> <VListItem v-bind="props" prepend-icon="ri-user-line" title="Users" /> </template> <VListGroup value="Admin"> <template #activator="{ props }"> <VListItem v-bind="props" title="Admin" /> </template> <VListItem v-for="([title, icon], i) in admins" :key="i" :value="title" :title="title" :prepend-icon="icon" /> </VListGroup> <VListGroup value="Actions"> <template #activator="{ props }"> <VListItem v-bind="props" title="Actions" /> </template> <VListItem v-for="([title, icon], i) in cruds" :key="i" :value="title" :title="title" :prepend-icon="icon" /> </VListGroup> </VListGroup> </VList> </template> `, js: `<script setup> const open = ref([ 'Users', 'Admin', ]) const admins = [ [ 'Management', 'ri-group-line', ], [ 'Settings', 'ri-settings-5-line', ], ] const cruds = [ [ 'Create', 'ri-add-line', ], [ 'Read', 'ri-file-line', ], [ 'Update', 'ri-refresh-line', ], [ 'Delete', 'ri-delete-bin-line', ], ] </script> <template> <VList v-model:opened="open"> <VListItem prepend-icon="ri-home-line" title="Home" value="Home" /> <VListGroup value="Users"> <template #activator="{ props }"> <VListItem v-bind="props" prepend-icon="ri-user-line" title="Users" /> </template> <VListGroup value="Admin"> <template #activator="{ props }"> <VListItem v-bind="props" title="Admin" /> </template> <VListItem v-for="([title, icon], i) in admins" :key="i" :value="title" :title="title" :prepend-icon="icon" /> </VListGroup> <VListGroup value="Actions"> <template #activator="{ props }"> <VListItem v-bind="props" title="Actions" /> </template> <VListItem v-for="([title, icon], i) in cruds" :key="i" :value="title" :title="title" :prepend-icon="icon" /> </VListGroup> </VListGroup> </VList> </template> ` } export const threeLine = { ts: `<script lang="ts" setup> import avatar1 from '@images/avatars/avatar-1.png' import avatar2 from '@images/avatars/avatar-2.png' import avatar3 from '@images/avatars/avatar-3.png' import avatar4 from '@images/avatars/avatar-4.png' const items = [ { type: 'subheader', title: 'Today' }, { prependAvatar: avatar1, title: 'Brunch this weekend?', subtitle: '<span class="text-primary">Ali Connors</span> — I\'ll be in your neighborhood doing errands this weekend. Do you want to hang out?', }, { type: 'divider', inset: true }, { prependAvatar: avatar2, title: 'Summer BBQ', subtitle: '<span class="text-primary">to Alex, Scott, Jennifer</span> — Wish I could come, but I\'m out of town this weekend.', }, { type: 'divider', inset: true }, { prependAvatar: avatar3, title: 'Oui oui', subtitle: '<span class="text-primary">Sandra Adams</span> — Do you have Paris recommendations? Have you ever been?', }, { type: 'divider', inset: true }, { prependAvatar: avatar4, title: 'Birthday gift', subtitle: '<span class="text-primary">Trevor Hansen</span> — Have any ideas about what we should get Heidi for her birthday?', }, ] </script> <template> <VList lines="three" :items="items" item-props > <template #subtitle="{ subtitle }"> <!-- eslint-disable-next-line vue/no-v-html --> <div v-html="subtitle" /> </template> </VList> </template> `, js: `<script setup> import avatar1 from '@images/avatars/avatar-1.png' import avatar2 from '@images/avatars/avatar-2.png' import avatar3 from '@images/avatars/avatar-3.png' import avatar4 from '@images/avatars/avatar-4.png' const items = [ { type: 'subheader', title: 'Today', }, { prependAvatar: avatar1, title: 'Brunch this weekend?', subtitle: '<span class="text-primary">Ali Connors</span> — I\'ll be in your neighborhood doing errands this weekend. Do you want to hang out?', }, { type: 'divider', inset: true, }, { prependAvatar: avatar2, title: 'Summer BBQ', subtitle: '<span class="text-primary">to Alex, Scott, Jennifer</span> — Wish I could come, but I\'m out of town this weekend.', }, { type: 'divider', inset: true, }, { prependAvatar: avatar3, title: 'Oui oui', subtitle: '<span class="text-primary">Sandra Adams</span> — Do you have Paris recommendations? Have you ever been?', }, { type: 'divider', inset: true, }, { prependAvatar: avatar4, title: 'Birthday gift', subtitle: '<span class="text-primary">Trevor Hansen</span> — Have any ideas about what we should get Heidi for her birthday?', }, ] </script> <template> <VList lines="three" :items="items" item-props > <template #subtitle="{ subtitle }"> <!-- eslint-disable-next-line vue/no-v-html --> <div v-html="subtitle" /> </template> </VList> </template> ` } export const twoLinesAndSubheader = { ts: `<script lang="ts" setup> const files = [ { color: 'blue', icon: 'ri-clipboard-line', subtitle: 'Jan 20, 2014', title: 'Vacation itinerary', }, { color: 'amber', icon: 'ri-hard-drive-2-line', subtitle: 'Jan 10, 2014', title: 'Kitchen remodel', }, ] const folders = [ { subtitle: 'Jan 9, 2014', title: 'Photos', }, { subtitle: 'Jan 17, 2014', title: 'Recipes', }, { subtitle: 'Jan 28, 2014', title: 'Work', }, ] </script> <template> <VList lines="two"> <VListSubheader inset> Folders </VListSubheader> <VListItem v-for="folder in folders" :key="folder.title" :title="folder.title" :subtitle="folder.subtitle" > <template #prepend> <VAvatar color="secondary" variant="tonal" > <VIcon :size="26" icon="ri-folder-line" /> </VAvatar> </template> <template #append> <VBtn variant="text" color="default" icon="ri-information-line" /> </template> </VListItem> <VDivider inset /> <VListSubheader inset> Files </VListSubheader> <VListItem v-for="file in files" :key="file.title" :title="file.title" :subtitle="file.subtitle" > <template #prepend> <VAvatar color="secondary" variant="tonal" > <VIcon :size="26" :icon="file.icon" /> </VAvatar> </template> <template #append> <VBtn variant="text" color="default" icon="ri-information-line" /> </template> </VListItem> </VList> </template> `, js: `<script setup> const files = [ { color: 'blue', icon: 'ri-clipboard-line', subtitle: 'Jan 20, 2014', title: 'Vacation itinerary', }, { color: 'amber', icon: 'ri-hard-drive-2-line', subtitle: 'Jan 10, 2014', title: 'Kitchen remodel', }, ] const folders = [ { subtitle: 'Jan 9, 2014', title: 'Photos', }, { subtitle: 'Jan 17, 2014', title: 'Recipes', }, { subtitle: 'Jan 28, 2014', title: 'Work', }, ] </script> <template> <VList lines="two"> <VListSubheader inset> Folders </VListSubheader> <VListItem v-for="folder in folders" :key="folder.title" :title="folder.title" :subtitle="folder.subtitle" > <template #prepend> <VAvatar color="secondary" variant="tonal" > <VIcon :size="26" icon="ri-folder-line" /> </VAvatar> </template> <template #append> <VBtn variant="text" color="default" icon="ri-information-line" /> </template> </VListItem> <VDivider inset /> <VListSubheader inset> Files </VListSubheader> <VListItem v-for="file in files" :key="file.title" :title="file.title" :subtitle="file.subtitle" > <template #prepend> <VAvatar color="secondary" variant="tonal" > <VIcon :size="26" :icon="file.icon" /> </VAvatar> </template> <template #append> <VBtn variant="text" color="default" icon="ri-information-line" /> </template> </VListItem> </VList> </template> ` } export const userList = { ts: `<script setup lang="ts"> import avatar1 from '@images/avatars/avatar-1.png' import avatar2 from '@images/avatars/avatar-2.png' import avatar3 from '@images/avatars/avatar-3.png' import avatar4 from '@images/avatars/avatar-4.png' interface Status { 'Online': string 'Away': string 'Offline': string 'In Meeting': string } interface Users { avatar: string name: string status: keyof Status lastVisited: string } const users: Users[] = [ { avatar: avatar1, name: 'Caroline Black', status: 'Online', lastVisited: '13 minutes ago', }, { avatar: avatar2, name: 'Alfred Copeland', status: 'Away', lastVisited: '11 minutes ago', }, { avatar: avatar3, name: 'Celia Schneider', status: 'Offline', lastVisited: '9 minutes ago', }, { avatar: avatar4, name: 'Max Rogan', status: 'In Meeting', lastVisited: '28 minutes ago', }, ] const resolveStatusColor: Status = { 'Online': 'success', 'Away': 'warning', 'Offline': 'secondary', 'In Meeting': 'error', } </script> <template> <VList lines="two" border rounded > <template v-for="(user, index) of users" :key="user.name" > <VListItem> <template #prepend> <VAvatar :image="user.avatar" /> </template> <VListItemTitle> {{ user.name }} </VListItemTitle> <VListItemSubtitle class="mt-1"> <VBadge dot location="start center" offset-x="2" :color="resolveStatusColor[user.status]" class="me-3" > <span class="ms-4">{{ user.status }}</span> </VBadge> <span class="text-xs text-disabled">{{ user.lastVisited }}</span> </VListItemSubtitle> <template #append> <VBtn size="small"> Add </VBtn> </template> </VListItem> <VDivider v-if="index !== users.length - 1" /> </template> </VList> </template> `, js: `<script setup> import avatar1 from '@images/avatars/avatar-1.png' import avatar2 from '@images/avatars/avatar-2.png' import avatar3 from '@images/avatars/avatar-3.png' import avatar4 from '@images/avatars/avatar-4.png' const users = [ { avatar: avatar1, name: 'Caroline Black', status: 'Online', lastVisited: '13 minutes ago', }, { avatar: avatar2, name: 'Alfred Copeland', status: 'Away', lastVisited: '11 minutes ago', }, { avatar: avatar3, name: 'Celia Schneider', status: 'Offline', lastVisited: '9 minutes ago', }, { avatar: avatar4, name: 'Max Rogan', status: 'In Meeting', lastVisited: '28 minutes ago', }, ] const resolveStatusColor = { 'Online': 'success', 'Away': 'warning', 'Offline': 'secondary', 'In Meeting': 'error', } </script> <template> <VList lines="two" border rounded > <template v-for="(user, index) of users" :key="user.name" > <VListItem> <template #prepend> <VAvatar :image="user.avatar" /> </template> <VListItemTitle> {{ user.name }} </VListItemTitle> <VListItemSubtitle class="mt-1"> <VBadge dot location="start center" offset-x="2" :color="resolveStatusColor[user.status]" class="me-3" > <span class="ms-4">{{ user.status }}</span> </VBadge> <span class="text-xs text-disabled">{{ user.lastVisited }}</span> </VListItemSubtitle> <template #append> <VBtn size="small"> Add </VBtn> </template> </VListItem> <VDivider v-if="index !== users.length - 1" /> </template> </VList> </template> ` }