first commit

This commit is contained in:
Inshal
2024-05-29 22:34:28 +05:00
commit e63fc41a20
1470 changed files with 174828 additions and 0 deletions

View File

@@ -0,0 +1,137 @@
<script setup>
import avatar1 from '@images/avatars/avatar-1.png'
import avatar6 from '@images/avatars/avatar-6.png'
import avatar8 from '@images/avatars/avatar-8.png'
import timelineCardHeader from '@images/cards/timeline-card-header.png'
import pdf from '@images/icons/project-icons/pdf.png'
</script>
<template>
<VCard>
<VImg
cover
height="210"
:src="timelineCardHeader"
/>
<VCardItem>
<VCardTitle>Activity Timeline</VCardTitle>
</VCardItem>
<VCardText>
<VTimeline
side="end"
align="start"
line-inset="8"
truncate-line="start"
density="compact"
>
<VTimelineItem
dot-color="primary"
size="x-small"
>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap mb-3">
<div class="app-timeline-title align-self-start">
12 Invoices have been paid
</div>
<div class="app-timeline-meta">
12 min ago
</div>
</div>
<p class="app-timeline-text mb-2">
Invoices have been paid to the company.
</p>
<div class="d-inline-flex align-center timeline-chip mb-4">
<img
:src="pdf"
height="20"
class="me-3"
alt="img"
>
<h6 class="text-h6 text-medium-emphasis">
invoice.pdf
</h6>
</div>
</VTimelineItem>
<VTimelineItem
dot-color="success"
size="x-small"
>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap mb-3">
<div class="app-timeline-title align-self-start">
Client Meeting
</div>
<div class="app-timeline-meta">
45 min ago
</div>
</div>
<p class="app-timeline-text mb-2">
Project meeting with john @10:15am
</p>
<div class="d-flex align-center mb-2">
<VAvatar
size="32"
:image="avatar1"
class="me-3"
/>
<div>
<div class="text-body-2 font-weight-medium">
Lester McCarthy (Client)
</div>
<div class="text-body-2">
CEO of ThemeSelection
</div>
</div>
</div>
</VTimelineItem>
<VTimelineItem
dot-color="info"
size="x-small"
>
<div class="d-flex justify-space-between align-center gap-2 flex-wrap mb-3">
<div class="app-timeline-title align-self-start">
Create a new project for client
</div>
<div class="app-timeline-meta">
2 Day Ago
</div>
</div>
<p class="mb-0 app-timeline-text mb-2">
6 team members in a project
</p>
<div class="v-avatar-group">
<VAvatar
:size="40"
:image="avatar1"
/>
<VAvatar
:size="40"
:image="avatar8"
/>
<VAvatar
:size="40"
:image="avatar6"
/>
<VAvatar
:color="$vuetify.theme.current.dark ? '#3A3B59' : '#F0EFF0'"
:size="40"
>
+3
</VAvatar>
</div>
</VTimelineItem>
</VTimeline>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,86 @@
<script setup>
import message from '@images/cards/comment-alt-lines.svg'
import chart from '@images/cards/graph-bar.svg'
import heart from '@images/cards/heart-medical.svg'
import user from '@images/cards/user.svg'
const analytics = [
{
title: '42.8k',
subtitle: 'Number of like',
img: heart,
color: 'primary',
},
{
title: '21.2k',
subtitle: 'Number of Followers',
img: chart,
color: 'warning',
},
{
title: '2.4k',
subtitle: 'Number of Comments',
img: message,
color: 'info',
},
{
title: '389.50k',
subtitle: 'Number of Visits',
img: user,
color: 'success',
},
]
</script>
<template>
<VCard>
<VCardItem>
<VCardTitle>
Analytics
</VCardTitle>
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<VCardText>
<VList class="card-list">
<VListItem
v-for="item in analytics"
:key="item.title"
>
<template #prepend>
<VAvatar
size="40"
:color="item.color"
variant="tonal"
>
<component :is="item.img" />
</VAvatar>
</template>
<VListItemTitle>
<h5 class="text-h5">
{{ item.title }}
</h5>
</VListItemTitle>
<VListItemSubtitle>
<div class="text-body-1">
{{ item.subtitle }}
</div>
</VListItemSubtitle>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 24px;
}
</style>

View File

@@ -0,0 +1,59 @@
<script setup>
import cafeBadilico from '@images/cards/cafe-badilico.png'
</script>
<template>
<VCard>
<VImg
cover
height="168"
:src="cafeBadilico"
/>
<VCardText>
<div class="d-flex justify-space-between align-center mb-2">
<h5 class="text-h5">
Cafe Badilico
</h5>
<MoreBtn density="compact" />
</div>
<div class="d-flex gap-x-2 align-center mb-5">
<VRating
:model-value="4"
:size="24"
background-color="warning"
/>
<div class="text-body-1">
4 Star (12.4k)
</div>
</div>
<p>Italian Cafe</p>
<p>
The refrigerated dairy aisle of your local grocery store can be a great source tasty, convenient selections for your.
</p>
<VDivider />
<p class="my-4">
Tonight's availability
</p>
<div class="d-flex gap-x-2 mb-5">
<VChip size="small">
5:30PM
</VChip>
<VChip size="small">
7:00PM
</VChip>
<VChip size="small">
7:15PM
</VChip>
</div>
<VBtn block>
Book Now
</VBtn>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,206 @@
<script setup>
import americanBank from '@images/logos/american-bank.png'
import aws from '@images/logos/aws.png'
import citiBank from '@images/logos/citi-bank.png'
import digitalOcean from '@images/logos/digital-ocean.png'
import github from '@images/logos/github.png'
import google from '@images/logos/google.png'
import gumroad from '@images/logos/gumroad.png'
import mastercardLabel from '@images/logos/mastercard-label.png'
import slack from '@images/logos/slack.png'
import stripe from '@images/logos/stripe.png'
const deposits = [
{
title: 'Gumroad Account',
subtitle: 'Sell UI Kit',
amount: '+$4,650',
logo: gumroad,
},
{
title: 'Mastercard',
subtitle: 'Wallet deposit',
amount: '+$92,705',
logo: mastercardLabel,
},
{
title: 'Stripe Account',
subtitle: 'iOS Application',
amount: '+$957',
logo: stripe,
},
{
title: 'American Bank',
subtitle: 'American Bank',
amount: '+$6,837',
logo: americanBank,
},
{
title: 'Bank Account',
subtitle: 'Wallet deposit',
amount: '+$8,934',
logo: citiBank,
},
{
title: 'Gumroad Account',
subtitle: 'Sell Admin template',
amount: '+$8,190',
logo: gumroad,
},
]
const withdraws = [
{
title: 'Google Adsense',
subtitle: 'PayPal deposit',
amount: '-$145',
logo: google,
},
{
title: 'GitHub Enterprise',
subtitle: 'Security & compliance',
amount: '-$1870',
logo: github,
},
{
title: 'Upgrade Slack Plan',
subtitle: 'Debit card deposit',
amount: '-$450',
logo: slack,
},
{
title: 'DigitalOcean',
subtitle: 'Cloud Hosting',
amount: '-$540',
logo: digitalOcean,
},
{
title: 'AWS Account',
subtitle: 'Choosing a Cloud Platform',
amount: '-$21',
logo: aws,
},
{
title: 'DigitalOcean',
subtitle: 'Cloud Hosting',
amount: '-$1030',
logo: digitalOcean,
},
]
</script>
<template>
<VCard>
<VRow no-gutters>
<VCol
cols="12"
md="6"
>
<VCardItem>
<VCardTitle>Deposit</VCardTitle>
<template #append>
<h6 class="text-h6">
<a
href="javascript:void(0)"
class="text-primary"
>View All</a>
</h6>
</template>
</VCardItem>
<VCardText>
<VList class="card-list">
<VListItem
v-for="deposit in deposits"
:key="deposit.logo"
>
<template #prepend>
<div class="me-4">
<VImg
:height="30"
:width="30"
:src="deposit.logo"
/>
</div>
</template>
<VListItemTitle class="font-weight-medium">
{{ deposit.title }}
</VListItemTitle>
<VListItemSubtitle class="text-body-1">
{{ deposit.subtitle }}
</VListItemSubtitle>
<template #append>
<VListItemAction class="text-success font-weight-medium">
{{ deposit.amount }}
</VListItemAction>
</template>
</VListItem>
</VList>
</VCardText>
</VCol>
<VDivider :vertical="$vuetify.display.mdAndUp" />
<VCol
cols="12"
md="6"
>
<VCardItem>
<VCardTitle>Withdraw</VCardTitle>
<template #append>
<h6 class="text-h6">
<a
href="javascript:void(0)"
class="text-primary"
>View All</a>
</h6>
</template>
</VCardItem>
<VCardText>
<VList class="card-list">
<VListItem
v-for="withdraw in withdraws"
:key="withdraw.logo"
>
<template #prepend>
<div class="me-4">
<VImg
:height="30"
:width="30"
:src="withdraw.logo"
/>
</div>
</template>
<VListItemTitle class="font-weight-medium">
{{ withdraw.title }}
</VListItemTitle>
<VListItemSubtitle class="text-body-1 me-1">
{{ withdraw.subtitle }}
</VListItemSubtitle>
<template #append>
<VListItemAction>
<span class="text-error font-weight-medium">
{{ withdraw.amount }}
</span>
</VListItemAction>
</template>
</VListItem>
</VList>
</VCardText>
</VCol>
</VRow>
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 1.25rem;
}
</style>

View File

@@ -0,0 +1,133 @@
<script setup>
import cardMeetup from '@images/cards/meetup-img.png'
const developerMeetup = [
{
icon: 'ri-time-line',
title: 'Tuesday, 24 january, 10:20 - 12:30',
subtitle: 'After 1 week',
},
{
icon: 'ri-map-pin-line',
title: 'The Richard NYC',
subtitle: '1305 Lexington Ave, New York',
},
]
</script>
<template>
<VCard>
<VImg
cover
:height="160"
:src="cardMeetup"
/>
<VCardText>
<div class="d-flex align-center pb-4">
<div class="me-4">
<VAvatar
rounded
size="58"
color="primary"
variant="tonal"
>
<div class="py-2">
<div class="text-body-1 text-primary">
Jan
</div>
<h5 class="text-h5 text-primary">
24
</h5>
</div>
</VAvatar>
</div>
<div>
<h6 class="text-h6 mb-1">
Developer Meetup
</h6>
<div class="text-body-2">
The WordPress open source,free software project is the community behind the
</div>
</div>
</div>
<VDivider />
<div class="d-flex justify-space-between align-center my-4">
<div class="text-center">
<VIcon
size="24"
icon="ri-star-smile-line"
/>
<div class="text-body-1">
Interested
</div>
</div>
<div class="text-center">
<VIcon
size="24"
icon="ri-check-double-line"
/>
<div class="text-body-1">
Joined
</div>
</div>
<div class="text-center">
<VIcon
size="24"
icon="ri-group-line"
color="primary"
/>
<div class="text-body-1 text-primary">
Invited
</div>
</div>
<div class="text-center">
<div class="mb-1">
<VIcon
size="24"
icon="ri-more-line"
/>
</div>
<span class="text-xs text-no-wrap">
More
</span>
</div>
</div>
<VDivider class="mb-4" />
<div
v-for="(meetup, index) in developerMeetup"
:key="meetup.icon"
class="d-flex align-start gap-x-2"
:class="index !== developerMeetup.length - 1 ? 'mb-2' : ''"
>
<VIcon
:icon="meetup.icon"
size="20"
/>
<div>
<div>{{ meetup.title }}</div>
<div>{{ meetup.subtitle }}</div>
</div>
</div>
</VCardText>
</VCard>
</template>
<style lang="scss">
.text-two-line-ellipsis {
/* stylelint-disable-next-line value-no-vendor-prefix */
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
text-overflow: ellipsis;
}
</style>

View File

@@ -0,0 +1,110 @@
<script setup>
import avatar6 from '@images/avatars/avatar-6.png'
import avatar7 from '@images/avatars/avatar-7.png'
import avatar8 from '@images/avatars/avatar-8.png'
</script>
<template>
<VCard>
<VCardItem>
<VCardTitle>Finance Summary</VCardTitle>
<VCardSubtitle>Check out each Column for more details</VCardSubtitle>
<template #append>
<VAvatar
size="44"
color="primary"
variant="tonal"
>
<VIcon
size="28"
icon="ri-question-line"
/>
</VAvatar>
</template>
</VCardItem>
<VCardText>
<div class="d-flex flex-column gap-y-6">
<div class="d-flex flex-wrap gap-y-4">
<div style="min-inline-size: 210px;">
<div class="mb-1">
Annual Companies Taxes
</div>
<h5 class="text-h5">
$1450.35
</h5>
</div>
<div>
<div class="mb-1">
Next Tax Review Date
</div>
<h5 class="text-h5">
July 14, 2021
</h5>
</div>
</div>
<div class="d-flex flex-wrap gap-y-4">
<div style="min-inline-size: 210px;">
<div class="mb-1">
Average Product Price
</div>
<h5 class="text-h5">
$85.50
</h5>
</div>
<div>
<div class="mb-1">
Satisfaction Rate
</div>
<div
class="d-flex align-center gap-5"
style="inline-size: 130px;"
>
<div class="flex-grow-1">
<VProgressLinear
color="primary"
rounded
rounded-bar
:model-value="75"
:height="6"
/>
</div>
<span>75%</span>
</div>
</div>
</div>
<div class="d-flex justify-space-between align-center">
<div class="v-avatar-group">
<VAvatar
:size="40"
:image="avatar7"
/>
<VAvatar
:size="40"
:image="avatar8"
/>
<VAvatar
:size="40"
:image="avatar6"
/>
<VAvatar
:color="$vuetify.theme.current.dark ? '#3A3B59' : '#F0EFF0'"
:size="40"
>
+3
</VAvatar>
</div>
<VChip
color="primary"
size="small"
>
5 days Ago
</VChip>
</div>
</div>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,128 @@
<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'
import avatar7 from '@images/avatars/avatar-7.png'
import avatar8 from '@images/avatars/avatar-8.png'
const meetingSchedules = [
{
profile: avatar4,
with: 'Call with Woods',
dateTime: '21 Jul | 08:20-10:30',
type: 'Business',
},
{
profile: avatar8,
with: 'Call with hilda',
dateTime: '24 Jul | 11:30-12:00',
type: 'Meditation',
},
{
profile: avatar7,
with: 'Conference call',
dateTime: '28 Jul | 05:00-6:45',
type: 'Dinner',
},
{
profile: avatar3,
with: 'Meeting with Mark',
dateTime: '03 Aug | 07:00-8:30',
type: 'Meetup',
},
{
profile: avatar2,
with: 'Meeting in Oakland',
dateTime: '14 Aug | 04:15-05:30',
type: 'Dinner',
},
{
profile: avatar1,
with: 'Meeting with Carl',
dateTime: '05 Oct | 10:00-12:45',
type: 'Business',
},
]
const meetingTypeUiColors = {
Business: 'primary',
Meditation: 'success',
Meetup: 'secondary',
Dinner: 'error',
}
</script>
<template>
<VCard>
<!-- SECTION Card Header and Menu -->
<VCardItem>
<!-- 👉 Title -->
<VCardTitle>Meeting Schedule</VCardTitle>
<!-- 👉 menu -->
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<!-- !SECTION -->
<!-- SECTION Meting Schedule -->
<VCardText>
<VList
lines="two"
class="card-list"
>
<VListItem
v-for="meeting in meetingSchedules"
:key="meeting.type"
>
<!-- 👉 Avatar -->
<template #prepend>
<VAvatar
start
:size="38"
:image="meeting.profile"
/>
</template>
<!-- 👉 Title and Subtitle -->
<VListItemTitle class="font-weight-medium mb-1">
{{ meeting.with }}
</VListItemTitle>
<VListItemSubtitle class="me-2">
<VIcon
size="16"
start
icon="ri-calendar-line"
/>
{{ meeting.dateTime }}
</VListItemSubtitle>
<!-- 👉 Business Types -->
<template #append>
<VListItemAction>
<VChip
size="small"
:color="meetingTypeUiColors[meeting.type]"
>
{{ meeting.type }}
</VChip>
</VListItemAction>
</template>
</VListItem>
</VList>
</VCardText>
<!-- !SECTION -->
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 1.5rem;
}
</style>

View File

@@ -0,0 +1,125 @@
<script setup>
const salesByCountries = [
{
abbr: 'US',
amount: '$8,656k',
country: 'United states of america',
change: '+25.8%',
sales: '894k',
color: 'success',
},
{
abbr: 'UK',
amount: '$2,415k',
country: 'United kingdom',
change: '-6.2%',
sales: '645k',
color: 'error',
},
{
abbr: 'IN',
amount: '$865k',
country: 'India',
change: '+12.4%',
sales: '148k',
color: 'warning',
},
{
abbr: 'JA',
amount: '$745k',
country: 'Japan',
change: '-11.9%',
sales: '86k',
color: 'secondary',
},
{
abbr: 'KO',
amount: '$45k',
country: 'Korea',
change: '+16.2%',
sales: '42k',
color: 'error',
},
{
abbr: 'CH',
amount: '$12k',
country: 'China',
change: '+14.8%',
sales: '8k',
color: 'info',
},
]
</script>
<template>
<VCard>
<VCardItem>
<VCardTitle>Sales by Countries</VCardTitle>
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<VCardText>
<VList class="card-list">
<VListItem
v-for="data in salesByCountries"
:key="data.country"
>
<template #prepend>
<VAvatar
:color="data.color"
variant="tonal"
size="40"
>
{{ data.abbr }}
</VAvatar>
</template>
<VListItemTitle class="mb-1 d-flex align-center">
<h6 class="text-h6">
{{ data.amount }}
</h6>
<VIcon
size="24"
:color="data.change.charAt(0) === '+' ? 'success' : 'error'"
class="mx-1"
>
{{ data.change.charAt(0) === '+' ? 'ri-arrow-up-s-line' : 'ri-arrow-down-s-line' }}
</VIcon>
<div
:class="`${data.change.charAt(0) === '+' ? 'text-success' : 'text-error'}`"
class="text-body-1"
>
{{ data.change.slice(1) }}
</div>
</VListItemTitle>
<VListItemSubtitle class="text-body-1 me-2">
{{ data.country }}
</VListItemSubtitle>
<template #append>
<div>
<h6 class="text-h6 mb-1">
{{ data.sales }}
</h6>
<div class="text-body-2 text-disabled">
Sales
</div>
</div>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 1.5rem;
}
</style>

View File

@@ -0,0 +1,215 @@
<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 avatar5 from '@images/avatars/avatar-5.png'
import avatar8 from '@images/avatars/avatar-8.png'
const teamMembers = [
{
profilePic: avatar1,
name: 'Dean Hogan',
designation: 'IOS developer',
project: 'Zipper',
projectIndication: 'primary',
task: '87/135',
progress: 65,
},
{
profilePic: avatar8,
name: 'Hilda Rice',
designation: 'Laravel developer',
project: 'Brandi',
projectIndication: 'success',
task: '340/420',
progress: 75,
},
{
profilePic: avatar5,
name: 'Andrew O\'Brien',
designation: 'React developer',
project: 'Payers',
projectIndication: 'warning',
task: '50/82',
progress: 55,
},
{
profilePic: avatar2,
name: 'Eleanor Price',
designation: 'Angular developer',
project: 'Citibank',
projectIndication: 'error',
task: '98/260',
progress: 60,
},
{
profilePic: avatar3,
name: 'Carl Oliver',
designation: 'VueJs developer',
project: 'Aviator',
projectIndication: 'secondary',
task: '12/25',
progress: 60,
},
]
</script>
<template>
<VCard>
<!-- SECTION Card Header and Menu -->
<VCardItem>
<!-- 👉 Title -->
<VCardTitle>Team Members</VCardTitle>
<!-- 👉 menu -->
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<!-- !SECTION -->
<!-- TODO try to remove table border -->
<VTable class="text-no-wrap team-members-table">
<thead>
<tr>
<th scope="col">
Name
</th>
<th scope="col">
Project
</th>
<th scope="col">
Tasks
</th>
<th scope="col">
Progress
</th>
</tr>
</thead>
<tbody>
<tr
v-for="member in teamMembers"
:key="member.name"
>
<td>
<div class="d-flex align-center">
<div class="me-3">
<VAvatar
size="38"
:image="member.profilePic"
/>
</div>
<div>
<h6 class="text-h6">
{{ member.name }}
</h6>
<div class="text-body-1">
{{ member.designation }}
</div>
</div>
</div>
</td>
<td>
<VChip
:color="member.projectIndication"
size="small"
>
{{ member.project }}
</VChip>
</td>
<td>
<div class="d-flex font-weight-medium">
<div class="text-primary">
{{ member.task.split('/')[0] }}
</div>
<div class="text-primary">
/
</div>
<h6 class="text-h6 text-medium-emphasis">
{{ member.task.split('/')[1] }}
</h6>
</div>
</td>
<td class="text-center">
<VProgressCircular
:color="member.projectIndication"
:model-value="member.progress"
/>
</td>
</tr>
</tbody>
</VTable>
</VCard>
</template>
<style lang="scss">
.team-members-table {
&.v-table{
--v-table-header-height: 2rem;
.v-table__wrapper{
table{
thead{
tr{
th{
background: none !important;
border-block-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)) !important;
margin-block-end: 0.75rem !important;
&:first-child{
padding-inline-start: 1.25rem;
}
&:last-child{
padding-inline-end: 1.25rem;
}
}
}
}
tbody{
tr{
td{
padding-block: 0.5rem;
padding-inline: 1rem;
&:first-child{
padding-inline-start: 1.25rem;
}
&:last-child{
padding-inline-end: 1.25rem;
}
}
&:not(:last-child){
td{
border-block-end: none ;
}
}
&:last-child{
td{
padding-block-end: 1.25rem;
}
}
&:first-child{
td{
padding-block-start: 1.25rem;
}
}
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,99 @@
<script setup>
import aviato from '@images/logos/aviato.png'
import bitbank from '@images/logos/bitbank.png'
import zipcar from '@images/logos/zipcar.png'
const earnings = [
{
avatar: zipcar,
title: 'Zipcar',
subtitle: 'Vuejs, React & HTML',
amount: '$24,895.65',
progress: 'primary',
},
{
avatar: bitbank,
title: 'Bitbank',
subtitle: 'Sketch, Figma & XD',
amount: '$8,6500.20',
progress: 'info',
},
{
avatar: aviato,
title: 'Aviato',
subtitle: 'HTML & Anguler',
amount: '$1,2450.80',
progress: 'secondary',
},
]
</script>
<template>
<VCard>
<VCardItem>
<VCardTitle>Total Earning</VCardTitle>
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<VCardText>
<div class="d-flex align-center">
<h3 class="text-h3">
$24,895
</h3>
<VIcon
size="24"
icon="ri-arrow-up-s-line"
color="success"
/>
<div class="text-success">
10%
</div>
</div>
<div class="text-body-1 mb-6">
Compared to $84,325 last year
</div>
<VList class="card-list">
<VListItem
v-for="earning in earnings"
:key="earning.title"
>
<template #prepend>
<VAvatar
rounded
:image="earning.avatar"
variant="tonal"
/>
</template>
<VListItemTitle class="font-weight-medium">
{{ earning.title }}
</VListItemTitle>
<VListItemSubtitle class="text-body-1">
{{ earning.subtitle }}
</VListItemSubtitle>
<template #append>
<div>
<h6 class="text-h6 mb-2">
{{ earning.amount }}
</h6>
<VProgressLinear
:color="earning.progress"
model-value="80"
rounded
rounded-bar
/>
</div>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,140 @@
<script setup>
import { kFormatter } from '@core/utils/formatters'
import arrowGrowth from '@images/cards/arrow-growth.png'
import atmCard from '@images/cards/atm-card.png'
import creditCard from '@images/cards/credit-card.png'
import paypal from '@images/cards/paypal.png'
import wallet from '@images/cards/wallet.png'
const transactions = [
{
gateway: 'PayPal',
for: 'Received Money',
amount: 2482,
img: paypal,
imgHeight: 22,
},
{
gateway: 'Credit Card',
for: 'DigitalOcean',
amount: -1250,
img: creditCard,
imgHeight: 15,
},
{
gateway: 'Mastercard',
for: 'Netflix',
amount: -99,
img: atmCard,
imgHeight: 15,
},
{
gateway: 'Wallet',
for: 'Mac\'D',
amount: -82,
img: wallet,
imgHeight: 18,
},
{
gateway: 'Transfer',
for: 'Refund',
amount: 8934,
img: arrowGrowth,
imgHeight: 12,
},
{
gateway: 'Wallet',
for: 'Buy Apple Watch',
amount: -399,
img: wallet,
imgHeight: 18,
},
]
const transactionsColors = {
'PayPal': 'error',
'Credit Card': 'success',
'Mastercard': 'warning',
'Wallet': 'primary',
'Transfer': 'info',
}
const formateAmount = amount => {
return Math.sign(amount) === 1 ? `+${ kFormatter(amount) }` : `-${ Math.abs(amount) }`
}
</script>
<template>
<VCard>
<!-- SECTION Card Header and Menu -->
<VCardItem>
<!-- 👉 Title -->
<VCardTitle>Transactions</VCardTitle>
<!-- 👉 menu -->
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<!-- !SECTION -->
<!-- SECTION Transactions List -->
<VCardText>
<VList class="card-list">
<VListItem
v-for="transaction in transactions"
:key="transaction.for"
>
<!-- 👉 Avatar -->
<template #prepend>
<VAvatar
rounded
variant="tonal"
:color="transactionsColors[transaction.gateway]"
>
<img
:src="transaction.img"
:height="transaction.imgHeight"
>
</VAvatar>
</template>
<!-- 👉 Title and Subtitle -->
<VListItemTitle>
<h6 class="text-h6">
{{ transaction.gateway }}
</h6>
</VListItemTitle>
<VListItemSubtitle>
<div class="text-body-1 me-2">
{{ transaction.for }}
</div>
</VListItemSubtitle>
<!-- 👉 Amounts -->
<template #append>
<VListItemAction>
<h6 class="text-h6 me-2">
{{ formateAmount(transaction.amount) }}
</h6>
<VIcon
:size="24"
:color="Math.sign(transaction.amount) === 1 ? 'success' : 'error'"
:icon="Math.sign(transaction.amount) === 1 ? 'ri-arrow-up-s-line' : 'ri-arrow-down-s-line'"
/>
</VListItemAction>
</template>
</VListItem>
</VList>
</VCardText>
<!-- !SECTION -->
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 1.5rem;
}
</style>

View File

@@ -0,0 +1,157 @@
<script setup>
import briefcase from '@images/cards/briefcase.png'
import logoCreditCard2 from '@images/cards/logo-credit-card-2.png'
import logoMastercardSmall from '@images/cards/logo-mastercard-small.png'
const savedCards = [
{
logo: logoMastercardSmall,
type: 'Credit card',
number: '2566 xxxx xxxx 8908',
},
{
logo: logoCreditCard2,
type: 'Credit card',
number: '8990 xxxx xxxx 6852',
},
]
</script>
<template>
<VCard>
<!-- SECTION Card Header and Menu -->
<VCardItem>
<!-- 👉 Title -->
<VCardTitle>Upgrade Your Plan</VCardTitle>
<!-- 👉 menu -->
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<!-- !SECTION -->
<VCardText>
<p class="text-body-2">
Please make the payment to start enjoying all the features of our premium plan as soon as possible.
</p>
<!-- SECTION Upgrade plan banner -->
<div class="plan-upgrade-banner pa-4 d-flex rounded align-center">
<VAvatar
rounded
size="40"
class="plan-details me-2 border-opacity-100 border-primary"
>
<VImg
:src="briefcase"
alt="briefcase"
height="20"
/>
</VAvatar>
<div class="d-flex flex-column">
<h6 class="text-h6">
Platinum
</h6>
<span class="text-primary text-body-2">Upgrade Plan</span>
</div>
<VSpacer />
<div class="d-flex align-center">
<sup>
<div class="text-body-2 text-high-emphasis">$</div>
</sup>
<h4 class="text-h4">
5250
</h4>
<sub>
<div class="text-body-2 text-high-emphasis">/Year</div>
</sub>
</div>
</div>
<!-- !SECTION -->
<!-- SECTION Payment Details -->
<VList class="card-list mt-1">
<h6 class="text-h6 my-2">
Payment details
</h6>
<VListItem
v-for="card in savedCards"
:key="card.logo"
class="mb-2"
>
<!-- 👉 Avatar -->
<template #prepend>
<img
:src="card.logo"
height="30"
width="42"
class="me-3"
>
</template>
<!-- 👉 Title and Subtitle -->
<VListItemTitle class="font-weight-medium mb-1">
{{ card.type }}
</VListItemTitle>
<VListItemSubtitle class="me-2">
{{ card.number }}
</VListItemSubtitle>
<!-- 👉 Action -->
<template #append>
<VListItemAction>
<VTextField
density="compact"
label="CVV"
placeholder="123"
style="inline-size: 5rem;"
/>
</VListItemAction>
</template>
</VListItem>
<!-- 👉 Add Payment -->
<VListItem class="mb-3 text-body-1">
<a href="javascript:void(0)">Add Payment Method</a>
</VListItem>
</VList>
<!-- !SECTION -->
<!-- 👉 Email -->
<VForm>
<VRow>
<VCol cols="12">
<VTextField
placeholder="Email Address"
density="compact"
class="mb-3"
/>
<VBtn block>
Contact Now
</VBtn>
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.plan-upgrade-banner {
.plan-details {
border: 1px solid rgb(var(--v-theme-primary));
}
background-color: rgba(var(--v-theme-primary), 0.16);
}
.card-list {
--v-card-list-gap: 0;
}
</style>

View File

@@ -0,0 +1,155 @@
<script setup>
const chartOptions = {
chart: {
type: 'bar',
parentHeightOffset: 0,
toolbar: { show: false },
sparkline: { enabled: true },
},
grid: { show: false },
colors: ['rgba(var(--v-theme-primary))'],
plotOptions: {
bar: {
barHeight: '85%',
columnWidth: '35px',
borderRadius: 3,
distributed: true,
},
},
legend: { show: false },
dataLabels: { enabled: false },
xaxis: {
labels: { show: false },
axisBorder: { show: false },
axisTicks: { show: false },
},
yaxis: { show: false },
tooltip: { enabled: false },
}
const series = [{
name: '2020',
data: [
50,
40,
110,
80,
40,
60,
40,
],
}]
const websiteStatistics = [
{
title: 'Direct',
color: 'success',
traffic: '86,471',
percentage: '-15',
},
{
title: 'Organic Search',
color: 'primary',
traffic: '57,484',
percentage: '+85',
},
{
title: 'Referral',
color: 'warning',
traffic: '2,534',
percentage: '+48',
},
{
title: 'Mail',
color: 'error',
traffic: '977',
percentage: '-36',
},
{
title: 'Social',
color: 'info',
traffic: '92',
percentage: '+55',
},
{
title: 'Other',
color: 'secondary',
traffic: '28',
percentage: '+12',
},
]
</script>
<template>
<VCard>
<VCardItem>
<VCardTitle>Transactions</VCardTitle>
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<VCardText class="pt-3">
<div class="d-flex align-center justify-space-between mb-5">
<div>
<h1 class="text-h1 mb-2">
4,590
</h1>
<div class="text-body-2">
Total Traffic
</div>
</div>
<div>
<VueApexCharts
:options="chartOptions"
:series="series"
height="80"
width="120"
/>
</div>
</div>
<div
v-for="(data, index) in websiteStatistics"
:key="data.title"
>
<div class="d-flex py-3 align-center">
<div
class="bubble"
:class="`bg-${data.color}`"
/>
<div class="text-body-1 text-high-emphasis">
{{ data.title }}
</div>
<VSpacer />
<h6 class="text-h6 me-6">
{{ data.traffic }}
</h6>
<h6 class="text-h6 me-1">
{{ data.percentage.slice(1) }}%
</h6>
<VIcon
:size="24"
:color="data.percentage.charAt(0) === '+' ? 'success' : 'error'"
>
{{ data.percentage.charAt(0) === '+' ? 'ri-arrow-up-s-line' : 'ri-arrow-down-s-line' }}
</VIcon>
</div>
<VDivider v-if="index !== websiteStatistics.length - 1" />
</div>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.bubble {
border-radius: 50%;
block-size: 1rem;
inline-size: 1rem;
margin-inline-end: 0.5rem;
}
</style>

View File

@@ -0,0 +1,86 @@
<script setup>
const assignmentData = [
{
title: 'User Experience Design',
tasks: 120,
progress: 72,
color: 'primary',
},
{
title: 'Basic fundamentals',
tasks: 32,
progress: 48,
color: 'success',
},
{
title: 'React Native components',
tasks: 182,
progress: 15,
color: 'error',
},
{
title: 'Basic of music theory',
tasks: 56,
progress: 24,
color: 'info',
},
]
</script>
<template>
<VCard>
<VCardItem title="Assignment progress">
<template #append>
<MoreBtn />
</template>
</VCardItem>
<VCardText>
<VList class="card-list">
<VListItem
v-for="assignment in assignmentData"
:key="assignment.title"
>
<template #prepend>
<VProgressCircular
v-model="assignment.progress"
:size="54"
class="me-4"
:color="assignment.color"
>
<h6 class="text-h6">
{{ assignment.progress }}%
</h6>
</VProgressCircular>
</template>
<template #title>
<div class="text-h6 me-4 mb-2 text-truncate">
{{ assignment.title }}
</div>
</template>
<VListItemSubtitle>{{ assignment.tasks }} Tasks</VListItemSubtitle>
<template #append>
<VBtn
variant="tonal"
color="secondary"
class="rounded"
size="34"
>
<VIcon
icon="ri-arrow-right-s-line"
size="20"
class="flip-in-rtl"
/>
</VBtn>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 1.5rem;
}
</style>

View File

@@ -0,0 +1,103 @@
<script setup>
const deliveryData = [
{
title: 'Packages in transit',
value: '10k',
change: 25.8,
icon: 'ri-gift-line',
color: 'primary',
},
{
title: 'Packages out for delivery',
value: '5k',
change: 4.3,
icon: 'ri-car-line',
color: 'info',
},
{
title: 'Packages delivered',
value: '15k',
change: -12.5,
icon: 'ri-check-line',
color: 'success',
},
{
title: 'Delivery success rate',
value: '95%',
change: 35.6,
icon: 'ri-home-line',
color: 'warning',
},
{
title: 'Average delivery time',
value: '2.5 Days',
change: -2.15,
icon: 'ri-timer-line',
color: 'secondary',
},
{
title: 'Customer satisfaction',
value: '4.5/5',
change: 5.7,
icon: 'ri-user-line',
color: 'error',
},
]
</script>
<template>
<VCard>
<VCardItem
title="Delivery performance"
subtitle="12% increase in this month"
>
<template #append>
<MoreBtn class="mt-n5" />
</template>
</VCardItem>
<VCardText>
<VList class="card-list">
<VListItem
v-for="(data, index) in deliveryData"
:key="index"
>
<template #prepend>
<VAvatar
:color="data.color"
variant="tonal"
rounded
size="42"
>
<VIcon
:icon="data.icon"
size="26"
/>
</VAvatar>
</template>
<VListItemTitle class="me-1">
{{ data.title }}
</VListItemTitle>
<VListItemSubtitle>
<div
:class="data.change > 0 ? 'text-success' : 'text-error'"
class="d-flex align-center"
>
<VIcon
:icon="data.change > 0 ? 'ri-arrow-up-s-line' : 'ri-arrow-down-s-line'"
size="24"
class="me-1"
/>
<span>{{ data.change }}%</span>
</div>
</VListItemSubtitle>
<template #append>
<span class="text-high-emphasis text-body-1 font-weight-medium">
{{ data.value }}
</span>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,347 @@
<script setup>
const currentTab = ref('New')
const tabsData = [
'New',
'Preparing',
'Shipping',
]
</script>
<template>
<VCard>
<VCardItem
title="Orders by countries"
subtitle="62 deliveries in progress"
>
<template #append>
<MoreBtn class="mt-n5" />
</template>
</VCardItem>
<VTabs
v-model="currentTab"
grow
class="disable-tab-transition"
>
<VTab
v-for="(tab, index) in tabsData"
:key="index"
>
{{ tab }}
</VTab>
</VTabs>
<VCardText>
<VWindow v-model="currentTab">
<VWindowItem>
<div>
<VTimeline
align="start"
truncate-line="both"
side="end"
density="compact"
line-thickness="1"
class="v-timeline--variant-outlined"
>
<VTimelineItem
icon="ri-checkbox-circle-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="success"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-uppercase text-success">
Sender
</div>
<div class="app-timeline-title">
Myrtle Ullrich
</div>
<div class="text-body-2 mb-1">
101 Boulder, California(CA), 95959
</div>
</VTimelineItem>
<VTimelineItem
icon="ri-map-pin-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="primary"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-primary text-uppercase">
Receiver
</div>
<div class="app-timeline-title">
Barry Schowalter
</div>
<div class="text-body-2">
939 Orange, California(CA), 92118
</div>
</VTimelineItem>
</VTimeline>
<VDivider
class="my-4"
style="border-style: dashed;"
/>
<VTimeline
align="start"
truncate-line="both"
side="end"
density="compact"
line-thickness="1"
class="v-timeline--variant-outlined"
>
<VTimelineItem
icon="ri-checkbox-circle-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="success"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-uppercase text-success">
Sender
</div>
<div class="app-timeline-title">
Veronica Herman
</div>
<div class="text-body-2 mb-1">
162 Windsor, California(CA), 95492
</div>
</VTimelineItem>
<VTimelineItem
icon="ri-map-pin-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="primary"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-primary text-uppercase">
Receiver
</div>
<div class="app-timeline-title">
Helen Jacobs
</div>
<div class="text-body-2">
487 Sunset, California(CA), 94043
</div>
</VTimelineItem>
</VTimeline>
</div>
</VWindowItem>
<VWindowItem>
<div>
<VTimeline
align="start"
truncate-line="both"
side="end"
density="compact"
line-thickness="1"
class="v-timeline--variant-outlined"
>
<VTimelineItem
icon="ri-checkbox-circle-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="success"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-uppercase text-success">
Sender
</div>
<div class="app-timeline-title">
Barry Schowalter
</div>
<div class="text-body-2">
939 Orange, California(CA), 92118
</div>
</VTimelineItem>
<VTimelineItem
icon="ri-map-pin-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="primary"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-primary text-uppercase">
Receiver
</div>
<div class="app-timeline-title">
Myrtle Ullrich
</div>
<div class="text-body-2">
101 Boulder, California(CA), 95959
</div>
</VTimelineItem>
</VTimeline>
<VDivider
class="my-4"
style="border-style: dashed;"
/>
<VTimeline
align="start"
truncate-line="both"
side="end"
density="compact"
line-thickness="1"
class="v-timeline--variant-outlined"
>
<VTimelineItem
icon="ri-checkbox-circle-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="success"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-uppercase text-success">
Sender
</div>
<div class="app-timeline-title">
Veronica Herman
</div>
<div class="text-body-2">
162 Windsor, California(CA), 95492
</div>
</VTimelineItem>
<VTimelineItem
icon="ri-map-pin-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="primary"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-primary text-uppercase">
Receiver
</div>
<div class="app-timeline-title">
Helen Jacobs
</div>
<div class="text-body-2">
487 Sunset, California(CA), 94043
</div>
</VTimelineItem>
</VTimeline>
</div>
</VWindowItem>
<VWindowItem>
<div>
<VTimeline
align="start"
truncate-line="both"
side="end"
density="compact"
line-thickness="1"
class="v-timeline--variant-outlined"
>
<VTimelineItem
icon="ri-checkbox-circle-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="success"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-uppercase text-success">
Sender
</div>
<div class="app-timeline-title">
Myrtle Ullrich
</div>
<div class="text-body-2">
101 Boulder, California(CA), 95959
</div>
</VTimelineItem>
<VTimelineItem
icon="ri-map-pin-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="primary"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-primary text-uppercase">
Receiver
</div>
<div class="app-timeline-title">
Barry Schowalter
</div>
<div class="text-body-2">
939 Orange, California(CA), 92118
</div>
</VTimelineItem>
</VTimeline>
<VDivider
class="my-4"
style="border-style: dashed;"
/>
<VTimeline
align="start"
truncate-line="both"
side="end"
density="compact"
line-thickness="1"
class="v-timeline--variant-outlined"
>
<VTimelineItem
icon="ri-checkbox-circle-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="success"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-uppercase text-success">
Sender
</div>
<div class="app-timeline-title">
Veronica Herman
</div>
<div class="text-body-2">
162 Windsor, California(CA), 95492
</div>
</VTimelineItem>
<VTimelineItem
icon="ri-map-pin-line"
dot-color="rgba(var(--v-theme-surface))"
icon-color="primary"
fill-dot
size="20"
:elevation="0"
>
<div class="text-caption text-primary text-uppercase">
Receiver
</div>
<div class="app-timeline-title">
Helen Jacobs
</div>
<div class="text-body-2">
487 Sunset, California(CA), 94043
</div>
</VTimelineItem>
</VTimeline>
</div>
</VWindowItem>
</VWindow>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,66 @@
<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'
import avatar5 from '@images/avatars/avatar-5.png'
import avatar6 from '@images/avatars/avatar-6.png'
</script>
<template>
<VCard>
<VCardItem title="Popular Instructors">
<template #append>
<MoreBtn />
</template>
</VCardItem>
<VDivider />
<div class="text-overline d-flex justify-space-between px-5 py-4">
<div>instructors</div>
<div>Courses</div>
</div>
<VDivider />
<VCardText>
<VList class="card-list">
<VListItem
v-for="instructor in [
{ name: 'Jordan Stevenson', profession: 'Business Intelligence', totalCourses: 33, avatar: avatar1 },
{ name: 'Bentlee Emblin', profession: 'Digital Marketing', totalCourses: 52, avatar: avatar2 },
{ name: 'Benedetto Rossiter', profession: 'UI/UX Design', totalCourses: 12, avatar: avatar3 },
{ name: 'Beverlie Krabbe', profession: 'Vue', totalCourses: 8, avatar: avatar4 },
{ name: 'Benette Rose', profession: 'React', totalCourses: 20, avatar: avatar5 },
{ name: 'John Doe', profession: 'Public speaking', totalCourses: 30, avatar: avatar6 },
]"
:key="instructor.name"
>
<template #prepend>
<VAvatar
size="34"
:image="instructor.avatar"
/>
</template>
<h6 class="text-h6">
{{ instructor.name }}
</h6>
<div class="text-caption text-medium-emphasis">
{{ instructor.profession }}
</div>
<template #append>
<h6 class="text-h6">
{{ instructor.totalCourses }}
</h6>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.card-list{
--v-card-list-gap: 16px;
}
</style>

View File

@@ -0,0 +1,81 @@
<script setup>
const coursesData = [
{
title: 'Videography Basic Design Course',
views: '1.2k',
icon: 'ri-video-download-line',
color: 'primary',
},
{
title: 'Basic Front-end Development Course',
views: '834',
icon: 'ri-code-view',
color: 'info',
},
{
title: 'Basic Fundamentals of Photography',
views: '3.7k',
icon: 'ri-image-2-line',
color: 'success',
},
{
title: 'Advance Dribble Base Visual Design',
views: '2.5k',
icon: 'ri-palette-line',
color: 'warning',
},
{
title: 'Your First Singing Lesson',
views: '948',
icon: 'ri-music-2-line',
color: 'error',
},
]
</script>
<template>
<VCard>
<VCardItem title="Top Courses">
<template #append>
<MoreBtn />
</template>
</VCardItem>
<VCardText>
<VList class="card-list">
<VListItem
v-for="(course, index) in coursesData"
:key="index"
>
<template #prepend>
<VAvatar
rounded
variant="tonal"
:color="course.color"
>
<VIcon
:icon="course.icon"
size="24"
/>
</VAvatar>
</template>
<template #title>
<div class="text-h6 clamp-text text-wrap me-4">
{{ course.title }}
</div>
</template>
<template #append>
<VChip
variant="tonal"
size="small"
>
{{ course.views }} Views
</VChip>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,51 @@
<script setup>
import girlWithLaptop from '@images/pages/pose-fs-9.png'
</script>
<template>
<VCard>
<VCardText>
<div class="d-flex justify-center align-start pb-0 px-3 pt-3 mb-4 bg-light-primary rounded">
<VImg
:src="girlWithLaptop"
width="145"
height="140"
/>
</div>
<div>
<h5 class="text-h5 mb-2">
Upcoming Webinar
</h5>
<div class="text-body-1">
Next Generation Frontend Architecture Using Layout Engine And Vue.
</div>
<div class="d-flex justify-space-between my-4 gap-4 flex-wrap">
<div
v-for="{ icon, title, value } in [{ icon: 'ri-calendar-line', title: '17 Nov 23', value: 'Date' }, { icon: 'ri-time-line', title: '32 Minutes', value: 'Duration' }]"
:key="title"
class="d-flex gap-x-4 align-center"
>
<VAvatar
color="primary"
variant="tonal"
rounded
>
<VIcon :icon="icon" />
</VAvatar>
<div>
<h6 class="text-h6">
{{ title }}
</h6>
<div class="text-body-1">
{{ value }}
</div>
</div>
</div>
</div>
<VBtn block>
Join the event
</VBtn>
</div>
</VCardText>
</VCard>
</template>