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,98 @@
<script setup>
import AccountSettingsAccount from '@/views/pages/account-settings/AccountSettingsAccount.vue'
import AccountSettingsBillingAndPlans from '@/views/pages/account-settings/AccountSettingsBillingAndPlans.vue'
import AccountSettingsConnections from '@/views/pages/account-settings/AccountSettingsConnections.vue'
import AccountSettingsNotification from '@/views/pages/account-settings/AccountSettingsNotification.vue'
import AccountSettingsSecurity from '@/views/pages/account-settings/AccountSettingsSecurity.vue'
const route = useRoute('pages-account-settings-tab')
const activeTab = computed({
get: () => route.params.tab,
set: () => route.params.tab,
})
// tabs
const tabs = [
{
title: 'Account',
icon: 'ri-group-line',
tab: 'account',
},
{
title: 'Security',
icon: 'ri-lock-line',
tab: 'security',
},
{
title: 'Billing & Plans',
icon: 'ri-bookmark-line',
tab: 'billing-plans',
},
{
title: 'Notifications',
icon: 'ri-notification-3-line',
tab: 'notification',
},
{
title: 'Connections',
icon: 'ri-link',
tab: 'connection',
},
]
definePage({ meta: { navActiveLink: 'pages-account-settings-tab' } })
</script>
<template>
<div>
<VTabs
v-model="activeTab"
class="v-tabs-pill"
>
<VTab
v-for="item in tabs"
:key="item.icon"
:value="item.tab"
:to="{ name: 'pages-account-settings-tab', params: { tab: item.tab } }"
>
<VIcon
start
:icon="item.icon"
/>
{{ item.title }}
</VTab>
</VTabs>
<VWindow
v-model="activeTab"
class="mt-5 disable-tab-transition"
:touch="false"
>
<!-- Account -->
<VWindowItem value="account">
<AccountSettingsAccount />
</VWindowItem>
<!-- Security -->
<VWindowItem value="security">
<AccountSettingsSecurity />
</VWindowItem>
<!-- Billing -->
<VWindowItem value="billing-plans">
<AccountSettingsBillingAndPlans />
</VWindowItem>
<!-- Notification -->
<VWindowItem value="notification">
<AccountSettingsNotification />
</VWindowItem>
<!-- Connections -->
<VWindowItem value="connection">
<AccountSettingsConnections />
</VWindowItem>
</VWindow>
</div>
</template>

View File

@@ -0,0 +1,115 @@
<script setup>
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({ meta: { layout: 'blank' } })
const form = ref({ email: '' })
</script>
<template>
<div class="auth-wrapper d-flex align-center justify-center pa-4">
<VCard
class="auth-card pa-sm-4 pa-md-7 pa-0"
max-width="460"
>
<VCardText>
<div class="d-flex align-center gap-x-3 justify-center mb-6">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
<h4 class="text-h4 mb-1">
Forgot Password? 🔒
</h4>
<p class="mb-0">
Enter your email and we'll send you instructions to reset your password
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- email -->
<VCol cols="12">
<VTextField
v-model="form.email"
autofocus
label="Email"
type="email"
placeholder="johndoe@email.com"
/>
</VCol>
<!-- reset password -->
<VCol cols="12">
<VBtn
block
type="submit"
>
Send Reset Link
</VBtn>
</VCol>
<!-- back to login -->
<VCol cols="12">
<RouterLink
class="d-flex align-center justify-center"
:to="{ name: 'pages-authentication-login-v1' }"
>
<VIcon
icon="ri-arrow-left-s-line"
size="20"
class="flip-in-rtl me-2"
/>
<span>Back to login</span>
</RouterLink>
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
<div class="d-flex gap-x-2 auth-footer-start-tree">
<img
class="d-none d-md-block"
:src="tree3"
:height="120"
:width="67"
>
<img
class="d-none d-md-block align-self-end"
:src="tree3"
:height="70"
:width="40"
>
</div>
<img
:src="tree1"
class="auth-footer-end-tree d-none d-md-block"
:width="97"
:height="210"
>
<!-- bg img -->
<img
class="auth-footer-mask d-none d-md-block"
:src="authThemeMask"
height="172"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,132 @@
<script setup>
import authV2ForgotPasswordIllustrationBorderedDark from '@images/pages/auth-v2-forgot-password-illustration-dark-border.png'
import authV2ForgotPasswordIllustrationDark from '@images/pages/auth-v2-forgot-password-illustration-dark.png'
import authV2ForgotPasswordIllustrationBorderedLight from '@images/pages/auth-v2-forgot-password-illustration-light-border.png'
import authV2ForgotPasswordIllustrationLight from '@images/pages/auth-v2-forgot-password-illustration-light.png'
import tree1 from '@images/misc/tree1.png'
import authV2MaskDark from '@images/pages/mask-v2-dark.png'
import authV2MaskLight from '@images/pages/mask-v2-light.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
const authThemeImg = useGenerateImageVariant(authV2ForgotPasswordIllustrationLight, authV2ForgotPasswordIllustrationDark, authV2ForgotPasswordIllustrationBorderedLight, authV2ForgotPasswordIllustrationBorderedDark, true)
const authThemeMask = useGenerateImageVariant(authV2MaskLight, authV2MaskDark)
definePage({ meta: { layout: 'blank' } })
const email = ref('')
</script>
<template>
<RouterLink to="/">
<div class="auth-logo d-flex align-center gap-x-3">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
</RouterLink>
<VRow
class="auth-wrapper"
no-gutters
>
<VCol
cols="12"
md="8"
class="d-none d-md-flex position-relative"
>
<div
class="d-flex align-center justify-end w-100 h-100 pa-10"
:class="$vuetify.locale.isRtl ? 'pe-10' : 'pe-0'"
>
<VImg
width="853"
height="684"
:src="authThemeImg"
class="auth-illustration"
/>
</div>
<img
class="auth-footer-mask"
height="360"
:src="authThemeMask"
>
<img
:src="tree1"
alt="tree image"
height="140"
class="auth-footer-tree"
>
</VCol>
<VCol
cols="12"
md="4"
class="auth-card-v2 d-flex align-center justify-center"
style="background-color: rgb(var(--v-theme-surface));"
>
<VCard
flat
:max-width="500"
class="mt-12 mt-sm-0 pa-4"
>
<VCardText>
<h4 class="text-h4 mb-1">
Forgot Password? 🔒
</h4>
<p class="mb-0">
Enter your email and we'll send you instructions to reset your password
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- email -->
<VCol cols="12">
<VTextField
v-model="email"
autofocus
label="Email"
placeholder="johndoe@email.com"
type="email"
/>
</VCol>
<!-- Reset link -->
<VCol cols="12">
<VBtn
block
type="submit"
>
Send Reset Link
</VBtn>
</VCol>
<!-- back to login -->
<VCol cols="12">
<RouterLink
class="d-flex align-center justify-center"
:to="{ name: 'pages-authentication-login-v2' }"
>
<VIcon
icon="ri-arrow-left-s-line"
class="flip-in-rtl"
/>
<span>Back to login</span>
</RouterLink>
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,158 @@
<script setup>
import AuthProvider from '@/views/pages/authentication/AuthProvider.vue'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({ meta: { layout: 'blank' } })
const form = ref({
email: '',
password: '',
remember: false,
})
const isPasswordVisible = ref(false)
</script>
<template>
<div class="auth-wrapper d-flex align-center justify-center pa-4">
<VCard
class="auth-card pa-sm-4 pa-md-7 pa-0"
max-width="448"
>
<VCardText>
<div class="d-flex align-center gap-x-3 justify-center mb-6">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
<h4 class="text-h4 mb-1">
Welcome to <span class="text-capitalize">{{ themeConfig.app.title }}!</span> 👋🏻
</h4>
<p class="mb-0">
Please sign-in to your account and start the adventure
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- email -->
<VCol cols="12">
<VTextField
v-model="form.email"
autofocus
label="Email"
type="email"
placeholder="johndoe@email.com"
/>
</VCol>
<!-- password -->
<VCol cols="12">
<VTextField
v-model="form.password"
label="Password"
placeholder="············"
:type="isPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isPasswordVisible = !isPasswordVisible"
/>
<div class="d-flex align-center flex-wrap justify-space-between my-5 gap-4">
<VCheckbox
v-model="form.remember"
label="Remember me"
/>
<RouterLink
class="text-primary"
:to="{ name: 'pages-authentication-forgot-password-v2' }"
>
Forgot Password?
</RouterLink>
</div>
<VBtn
block
type="submit"
>
Login
</VBtn>
</VCol>
<!-- create account -->
<VCol
cols="12"
class="text-center text-base"
>
<span>New on our platform?</span> <RouterLink
class="text-primary d-inline-block"
:to="{ name: 'pages-authentication-register-v2' }"
>
Create an account
</RouterLink>
</VCol>
<VCol
cols="12"
class="d-flex align-center"
>
<VDivider />
<span class="mx-2 text-high-emphasis">or</span>
<VDivider />
</VCol>
<!-- auth providers -->
<VCol
cols="12"
class="text-center"
>
<AuthProvider />
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
<div class="d-flex gap-x-2 auth-footer-start-tree">
<img
class="d-none d-md-block"
:src="tree3"
:height="120"
:width="67"
>
<img
class="d-none d-md-block align-self-end"
:src="tree3"
:height="70"
:width="40"
>
</div>
<img
:src="tree1"
class="auth-footer-end-tree d-none d-md-block"
:width="97"
:height="210"
>
<!-- bg img -->
<img
class="auth-footer-mask d-none d-md-block"
:src="authThemeMask"
height="172"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,175 @@
<script setup>
import AuthProvider from '@/views/pages/authentication/AuthProvider.vue'
import { themeConfig } from '@themeConfig'
import tree1 from '@images/misc/tree1.png'
import authV2LoginIllustrationBorderedDark from '@images/pages/auth-v2-login-illustration-bordered-dark.png'
import authV2LoginIllustrationBorderedLight from '@images/pages/auth-v2-login-illustration-bordered-light.png'
import authV2LoginIllustrationDark from '@images/pages/auth-v2-login-illustration-dark.png'
import authV2LoginIllustrationLight from '@images/pages/auth-v2-login-illustration-light.png'
import authV2MaskDark from '@images/pages/mask-v2-dark.png'
import authV2MaskLight from '@images/pages/mask-v2-light.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
const authThemeImg = useGenerateImageVariant(authV2LoginIllustrationLight, authV2LoginIllustrationDark, authV2LoginIllustrationBorderedLight, authV2LoginIllustrationBorderedDark, true)
const authThemeMask = useGenerateImageVariant(authV2MaskLight, authV2MaskDark)
definePage({ meta: { layout: 'blank' } })
const form = ref({
email: '',
password: '',
remember: false,
})
const isPasswordVisible = ref(false)
</script>
<template>
<RouterLink to="/">
<div class="auth-logo d-flex align-center gap-x-3">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
</RouterLink>
<VRow
no-gutters
class="auth-wrapper"
>
<VCol
md="8"
class="d-none d-md-flex position-relative"
>
<div
class="d-flex align-center justify-end w-100 h-100 pa-10"
:class="$vuetify.locale.isRtl ? 'pe-10' : 'pe-0'"
>
<VImg
max-width="797"
:src="authThemeImg"
class="auth-illustration"
/>
</div>
<img
class="auth-footer-mask"
height="360"
:src="authThemeMask"
>
<VImg
:src="tree1"
alt="tree image"
height="190"
width="90"
class="auth-footer-tree"
/>
</VCol>
<VCol
cols="12"
md="4"
class="auth-card-v2 d-flex align-center justify-center"
style="background-color: rgb(var(--v-theme-surface));"
>
<VCard
flat
:max-width="500"
class="mt-12 mt-sm-0 pa-4"
>
<VCardText>
<h4 class="text-h4 mb-1">
Welcome to <span class="text-capitalize">{{ themeConfig.app.title }}!</span> 👋🏻
</h4>
<p class="mb-0">
Please sign-in to your account and start the adventure
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- email -->
<VCol cols="12">
<VTextField
v-model="form.email"
autofocus
label="Email"
type="email"
placeholder="johndoe@email.com"
/>
</VCol>
<!-- password -->
<VCol cols="12">
<VTextField
v-model="form.password"
label="Password"
placeholder="············"
:type="isPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isPasswordVisible = !isPasswordVisible"
/>
<div class="d-flex align-center flex-wrap justify-space-between my-5 gap-2">
<VCheckbox
v-model="form.remember"
label="Remember me"
/>
<RouterLink
class="text-primary"
:to="{ name: 'pages-authentication-forgot-password-v2' }"
>
Forgot Password?
</RouterLink>
</div>
<VBtn
block
type="submit"
>
Login
</VBtn>
</VCol>
<!-- create account -->
<VCol
cols="12"
class="text-center text-base"
>
<span>New on our platform?</span> <RouterLink
class="text-primary d-inline-block"
:to="{ name: 'pages-authentication-register-v2' }"
>
Create an account
</RouterLink>
</VCol>
<VCol
cols="12"
class="d-flex align-center"
>
<VDivider />
<span class="mx-2 text-high-emphasis">or</span>
<VDivider />
</VCol>
<!-- auth providers -->
<VCol
cols="12"
class="text-center"
>
<AuthProvider />
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,430 @@
<script setup>
import registerMultiStepIllustration from '@images/pages/register-multi-step-illustration.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
definePage({ meta: { layout: 'blank' } })
const currentStep = ref(0)
const isPasswordVisible = ref(false)
const isConfirmPasswordVisible = ref(false)
const radioContent = [
{
title: 'Starter',
desc: 'A simple start for everyone.',
value: '0',
},
{
title: 'Standard',
desc: 'For small to medium businesses.',
value: '99',
},
{
title: 'Enterprise',
desc: 'Solution for big organizations.',
value: '499',
},
]
const items = [
{
title: 'Account',
subtitle: 'Account Details',
},
{
title: 'Personal',
subtitle: 'Enter Information',
},
{
title: 'Billing',
subtitle: 'Payment Details',
},
]
const form = ref({
username: '',
email: '',
password: '',
confirmPassword: '',
link: '',
firstName: '',
lastName: '',
mobile: '',
pincode: '',
address: '',
landmark: '',
city: '',
state: null,
selectedPlan: '0',
cardNumber: '',
cardName: '',
expiryDate: '',
cvv: '',
})
const onSubmit = () => {
// eslint-disable-next-line no-alert
alert('Submitted..!!')
}
</script>
<template>
<RouterLink to="/">
<div class="auth-logo d-flex align-center gap-x-3">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
</RouterLink>
<VRow
no-gutters
class="auth-wrapper"
>
<VCol
md="4"
class="d-none d-md-flex"
>
<!-- here your illustration -->
<div
class="d-flex align-center w-100 h-100 justify-end pa-10"
:class="$vuetify.locale.isRtl ? 'pe-10 ps-0' : 'pe-0'"
>
<VImg
max-width="359"
:src="registerMultiStepIllustration"
class="auth-illustration"
/>
</div>
</VCol>
<VCol
cols="12"
md="8"
class="auth-card-v2 d-flex align-center justify-center pa-10"
style="background-color: rgb(var(--v-theme-surface));"
>
<VCard
flat
class="mt-12 mt-sm-0"
>
<AppStepper
v-model:current-step="currentStep"
:items="items"
:direction="$vuetify.display.smAndUp ? 'horizontal' : 'vertical'"
class="mb-12"
/>
<VWindow
v-model="currentStep"
class="disable-tab-transition"
style="max-inline-size: 650px;"
>
<VForm>
<VWindowItem>
<h4 class="text-h4">
Account Information
</h4>
<p class="mb-5">
Enter Your Account Details
</p>
<VRow>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.username"
label="Username"
placeholder="Johndoe"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.email"
label="Email"
placeholder="johndoe@email.com"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.password"
label="Password"
placeholder="············"
:type="isPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isPasswordVisible = !isPasswordVisible"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.confirmPassword"
label="Confirm Password"
placeholder="············"
:type="isConfirmPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isConfirmPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isConfirmPasswordVisible = !isConfirmPasswordVisible"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="form.link"
label="Profile Link"
placeholder="https://profile.com/johndoe"
type="url"
/>
</VCol>
</VRow>
</VWindowItem>
<VWindowItem>
<h4 class="text-h4">
Personal Information
</h4>
<p class="mb-5">
Enter Your Personal Information
</p>
<VRow>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.firstName"
label="First Name"
placeholder="John"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.lastName"
label="Last Name"
placeholder="Doe"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.mobile"
type="number"
label="Mobile"
placeholder="+1 123 456 7890"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.pincode"
type="number"
label="Pincode"
placeholder="123456"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="form.address"
label="Address"
placeholder="1234 Main St, New York, NY 10001, USA"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="form.landmark"
label="Landmark"
placeholder="Near Central Park"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.city"
label="City"
placeholder="New York"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VSelect
v-model="form.state"
label="State"
placeholder="Select State"
:items="['New York', 'California', 'Florida', 'Washington', 'Texas']"
/>
</VCol>
</VRow>
</VWindowItem>
<VWindowItem>
<h4 class="text-h4">
Select Plan
</h4>
<p class="mb-5">
Select plan as per your requirement
</p>
<CustomRadiosWithIcon
v-model:selected-radio="form.selectedPlan"
:radio-content="radioContent"
:grid-column="{ sm: '4', cols: '12' }"
>
<template #default="{ item }">
<div class="text-center">
<h6 class="text-h6 mb-2">
{{ item.title }}
</h6>
<p class="clamp-text text-body-2 mb-2">
{{ item.desc }}
</p>
<div class="d-flex align-center justify-center">
<div class="text-primary mb-2">
$
</div>
<h4 class="text-h4 text-primary">
{{ item.value }}
</h4>
<div class="text-body-2 text-disabled mt-2">
/month
</div>
</div>
</div>
</template>
</CustomRadiosWithIcon>
<h4 class="text-h4 mt-12">
Payment Information
</h4>
<p class="mb-5">
Enter your card information
</p>
<VRow>
<VCol cols="12">
<VTextField
v-model="form.cardNumber"
type="number"
label="Card Number"
placeholder="1234 1234 1234 1234"
/>
</VCol>
<VCol
cols="12"
md="6"
>
<VTextField
v-model="form.cardName"
label="Name on Card"
placeholder="John Doe"
/>
</VCol>
<VCol
cols="6"
md="3"
>
<VTextField
v-model="form.expiryDate"
label="Expiry"
placeholder="MM/YY"
/>
</VCol>
<VCol
cols="6"
md="3"
>
<VTextField
v-model="form.cvv"
type="number"
label="CVV"
placeholder="123"
/>
</VCol>
</VRow>
</VWindowItem>
</VForm>
</VWindow>
<div class="d-flex flex-wrap justify-space-between gap-x-4 gap-y-2 mt-5">
<VBtn
color="secondary"
variant="outlined"
:disabled="currentStep === 0"
@click="currentStep--"
>
<VIcon
icon="ri-arrow-left-line"
start
class="flip-in-rtl"
/>
Previous
</VBtn>
<VBtn
v-if="items.length - 1 === currentStep"
color="success"
append-icon="ri-check-line"
@click="onSubmit"
>
submit
</VBtn>
<VBtn
v-else
@click="currentStep++"
>
Next
<VIcon
icon="ri-arrow-right-line"
end
class="flip-in-rtl"
/>
</VBtn>
</div>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,165 @@
<script setup>
import AuthProvider from '@/views/pages/authentication/AuthProvider.vue'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({ meta: { layout: 'blank' } })
const form = ref({
username: '',
email: '',
password: '',
privacyPolicies: false,
})
const isPasswordVisible = ref(false)
</script>
<template>
<div class="auth-wrapper d-flex align-center justify-center pa-4">
<VCard
class="auth-card pa-sm-4 pa-md-7 pa-0"
style="inline-size: 460px;"
>
<VCardText>
<div class="d-flex align-center gap-x-3 justify-center mb-6">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
<h4 class="text-h4 mb-1">
Adventure starts here 🚀
</h4>
<p class="mb-0">
Make your app management easy and fun!
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- Username -->
<VCol cols="12">
<VTextField
v-model="form.username"
autofocus
label="Username"
placeholder="Johndoe"
/>
</VCol>
<!-- email -->
<VCol cols="12">
<VTextField
v-model="form.email"
label="Email"
type="email"
placeholder="johndoe@email.com"
/>
</VCol>
<!-- password -->
<VCol cols="12">
<VTextField
v-model="form.password"
label="Password"
placeholder="············"
:type="isPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isPasswordVisible = !isPasswordVisible"
/>
<div class="d-flex align-center my-5">
<VCheckbox
id="privacy-policy"
v-model="form.privacyPolicies"
inline
/>
<VLabel
for="privacy-policy"
style="opacity: 1;"
>
<span class="me-1 text-high-emphasis">I agree to</span>
<a
href="javascript:void(0)"
class="text-primary"
>privacy policy & terms</a>
</VLabel>
</div>
<VBtn
block
type="submit"
>
Sign up
</VBtn>
</VCol>
</VRow>
<!-- create account -->
<div class="text-center text-base my-5">
<span class="d-inline-block">Already have an account?</span> <RouterLink
class="text-primary d-inline-block"
:to="{ name: 'pages-authentication-login-v2' }"
>
Sign in instead
</RouterLink>
</div>
<div class="d-flex align-center mb-5">
<VDivider />
<span class="mx-4 text-high-emphasis">or</span>
<VDivider />
</div>
<!-- auth providers -->
<div class="text-center">
<AuthProvider />
</div>
</VForm>
</VCardText>
</VCard>
<div class="d-flex gap-x-2 auth-footer-start-tree">
<img
class="d-none d-md-block"
:src="tree3"
:height="120"
:width="67"
>
<img
class="d-none d-md-block align-self-end"
:src="tree3"
:height="70"
:width="40"
>
</div>
<img
:src="tree1"
class="auth-footer-end-tree d-none d-md-block"
:width="97"
:height="210"
>
<!-- bg img -->
<img
class="auth-footer-mask d-none d-md-block"
:src="authThemeMask"
height="172"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,189 @@
<script setup>
import AuthProvider from '@/views/pages/authentication/AuthProvider.vue'
import authV2RegisterIllustrationDark from '@images/pages/auth-v2-register-illustration-dark.png'
import authV2RegisterIllustrationLight from '@images/pages/auth-v2-register-illustration-light.png'
import { themeConfig } from '@themeConfig'
import tree2 from '@images/misc/tree2.png'
import authV2RegisterIllustrationBorderedDark from '@images/pages/auth-v2-register-illustration-bordered-dark.png'
import authV2RegisterIllustrationBorderedLight from '@images/pages/auth-v2-register-illustration-bordered-light.png'
import authV2MaskDark from '@images/pages/mask-v2-dark.png'
import authV2MaskLight from '@images/pages/mask-v2-light.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
const authThemeMask = useGenerateImageVariant(authV2MaskLight, authV2MaskDark)
const authThemeImg = useGenerateImageVariant(authV2RegisterIllustrationLight, authV2RegisterIllustrationDark, authV2RegisterIllustrationBorderedLight, authV2RegisterIllustrationBorderedDark, true)
definePage({ meta: { layout: 'blank' } })
const form = ref({
username: '',
email: '',
password: '',
privacyPolicies: false,
})
const isPasswordVisible = ref(false)
</script>
<template>
<RouterLink to="/">
<div class="auth-logo d-flex align-center gap-x-3">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
</RouterLink>
<VRow
no-gutters
class="auth-wrapper"
>
<VCol
cols="12"
md="8"
class="d-none d-md-flex position-relative"
>
<div
class="d-flex align-center justify-end w-100 h-100 pa-10"
:class="$vuetify.locale.isRtl ? 'pe-10' : 'pe-0'"
>
<VImg
max-width="797"
:src="authThemeImg"
class="auth-illustration"
/>
</div>
<img
class="auth-footer-mask"
height="360"
:src="authThemeMask"
>
<div class="d-flex gap-x-2 auth-footer-tree">
<img
:src="tree2"
alt="tree image"
height="180"
>
<img
:src="tree2"
alt="tree image"
height="120"
class="align-self-end"
>
</div>
</VCol>
<VCol
cols="12"
md="4"
class="auth-card-v2 d-flex align-center justify-center"
style="background-color: rgb(var(--v-theme-surface));"
>
<VCard
flat
:max-width="500"
class="mt-12 mt-sm-0 pa-4"
>
<VCardText>
<h4 class="text-h4 mb-1">
Adventure starts here 🚀
</h4>
<p class="mb-0">
Make your app management easy and fun!
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- Username -->
<VCol cols="12">
<VTextField
v-model="form.username"
autofocus
label="Username"
placeholder="Johndoe"
/>
</VCol>
<!-- email -->
<VCol cols="12">
<VTextField
v-model="form.email"
label="Email"
type="email"
placeholder="johndoe@email.com"
/>
</VCol>
<!-- password -->
<VCol cols="12">
<VTextField
v-model="form.password"
label="Password"
placeholder="············"
:type="isPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isPasswordVisible = !isPasswordVisible"
/>
<div class="d-flex align-center my-5">
<VCheckbox
id="privacy-policy"
v-model="form.privacyPolicies"
inline
/>
<VLabel
for="privacy-policy"
style="opacity: 1;"
>
<span class="me-1 text-high-emphasis">I agree to</span>
<a
href="javascript:void(0)"
class="text-primary"
>privacy policy & terms</a>
</VLabel>
</div>
<VBtn
block
type="submit"
>
Sign up
</VBtn>
</VCol>
</VRow>
<!-- create account -->
<div class="text-center text-base my-5">
<span class="d-inline-block">Already have an account?</span> <RouterLink
class="text-primary d-inline-block"
:to="{ name: 'pages-authentication-login-v2' }"
>
Sign in instead
</RouterLink>
</div>
<div class="d-flex align-center mb-5">
<VDivider />
<span class="mx-4 text-high-emphasis">or</span>
<VDivider />
</div>
<!-- auth providers -->
<div class="text-center">
<AuthProvider />
</div>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,134 @@
<script setup>
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({ meta: { layout: 'blank' } })
const form = ref({
newPassword: '',
confirmPassword: '',
})
const isPasswordVisible = ref(false)
const isConfirmPasswordVisible = ref(false)
</script>
<template>
<div class="auth-wrapper d-flex align-center justify-center pa-4">
<VCard
class="auth-card pa-sm-4 pa-md-7 pa-0"
max-width="460"
>
<VCardText>
<div class="d-flex align-center gap-x-3 justify-center mb-6">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
<h4 class="text-h4 mb-1">
Reset Password 🔒
</h4>
<p class="mb-0">
Enter your email and we'll send you instructions to reset your password
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- password -->
<VCol cols="12">
<VTextField
v-model="form.newPassword"
autofocus
label="New Password"
placeholder="············"
:type="isPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isPasswordVisible = !isPasswordVisible"
/>
</VCol>
<!-- Confirm Password -->
<VCol cols="12">
<VTextField
v-model="form.confirmPassword"
label="Confirm Password"
placeholder="············"
:type="isConfirmPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isConfirmPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isConfirmPasswordVisible = !isConfirmPasswordVisible"
/>
</VCol>
<!-- reset password -->
<VCol cols="12">
<VBtn
block
type="submit"
>
Set New Password
</VBtn>
</VCol>
<!-- back to login -->
<VCol>
<div class="d-flex align-center justify-center">
<RouterLink :to="{ name: 'pages-authentication-login-v1' }">
<VIcon
icon="ri-arrow-left-s-line"
size="20"
class="flip-in-rtl me-2"
/>
<span>Back to login</span>
</RouterLink>
</div>
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
<div class="d-flex gap-x-2 auth-footer-start-tree">
<img
class="d-none d-md-block"
:src="tree3"
:height="120"
:width="67"
>
<img
class="d-none d-md-block align-self-end"
:src="tree3"
:height="70"
:width="40"
>
</div>
<img
:src="tree1"
class="auth-footer-end-tree d-none d-md-block"
:width="97"
:height="210"
>
<!-- bg img -->
<img
class="auth-footer-mask d-none d-md-block"
:src="authThemeMask"
height="172"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,158 @@
<script setup>
import tree3 from '@images/misc/tree3.png'
import authV2ResetPasswordIllustrationBorderedDark from '@images/pages/auth-v2-reset-password-illustration-bordered-dark.png'
import authV2ResetPasswordIllustrationBorderedLight from '@images/pages/auth-v2-reset-password-illustration-bordered-light.png'
import authV2ResetPasswordIllustrationDark from '@images/pages/auth-v2-reset-password-illustration-dark.png'
import authV2ResetPasswordIllustrationLight from '@images/pages/auth-v2-reset-password-illustration-light.png'
import authV2MaskDark from '@images/pages/mask-v2-dark.png'
import authV2MaskLight from '@images/pages/mask-v2-light.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
const authThemeImg = useGenerateImageVariant(authV2ResetPasswordIllustrationLight, authV2ResetPasswordIllustrationDark, authV2ResetPasswordIllustrationBorderedLight, authV2ResetPasswordIllustrationBorderedDark, true)
const authThemeMask = useGenerateImageVariant(authV2MaskLight, authV2MaskDark)
definePage({ meta: { layout: 'blank' } })
const form = ref({
newPassword: '',
confirmPassword: '',
})
const isPasswordVisible = ref(false)
const isConfirmPasswordVisible = ref(false)
</script>
<template>
<RouterLink to="/">
<div class="auth-logo d-flex align-center gap-x-3">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
</RouterLink>
<VRow
no-gutters
class="auth-wrapper"
>
<VCol
md="8"
class="d-none d-md-flex position-relative"
>
<div
class="d-flex align-center justify-end w-100 h-100 pa-10"
:class="$vuetify.locale.isRtl ? 'pe-10' : 'pe-0'"
>
<VImg
max-width="857"
:src="authThemeImg"
class="auth-illustration"
/>
</div>
<img
class="auth-footer-mask"
height="360"
:src="authThemeMask"
>
<div class="d-flex gap-x-2 auth-footer-tree">
<img
:src="tree3"
alt="tree image"
height="140"
>
<img
:src="tree3"
alt="tree image"
height="90"
width="50"
class="align-self-end"
>
</div>
</VCol>
<VCol
cols="12"
md="4"
class="auth-card-v2 d-flex align-center justify-center"
style="background-color: rgb(var(--v-theme-surface));"
>
<VCard
flat
:max-width="500"
class="mt-12 mt-sm-0 pa-4"
>
<VCardText>
<h4 class="text-h4 mb-1">
Reset Password 🔒
</h4>
<p class="mb-0">
Enter your email and we'll send you instructions to reset your password
</p>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- password -->
<VCol cols="12">
<VTextField
v-model="form.newPassword"
autofocus
label="New Password"
placeholder="············"
:type="isPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isPasswordVisible = !isPasswordVisible"
/>
</VCol>
<!-- Confirm Password -->
<VCol cols="12">
<VTextField
v-model="form.confirmPassword"
label="Confirm Password"
placeholder="············"
:type="isConfirmPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isConfirmPasswordVisible ? 'ri-eye-off-line' : 'ri-eye-line'"
@click:append-inner="isConfirmPasswordVisible = !isConfirmPasswordVisible"
/>
</VCol>
<!-- Set password -->
<VCol cols="12">
<VBtn
block
type="submit"
>
Set New Password
</VBtn>
</VCol>
<!-- back to login -->
<VCol cols="12">
<RouterLink
class="d-flex align-center justify-center"
:to="{ name: 'pages-authentication-login-v2' }"
>
<VIcon
icon="ri-arrow-left-s-line"
class="flip-in-rtl"
/>
<span>Back to login</span>
</RouterLink>
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,125 @@
<script setup>
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({ meta: { layout: 'blank' } })
const router = useRouter()
const otp = ref('')
const isOtpInserted = ref(false)
const onFinish = () => {
isOtpInserted.value = true
setTimeout(() => {
isOtpInserted.value = false
router.push('/')
}, 2000)
}
</script>
<template>
<div class="auth-wrapper d-flex align-center justify-center pa-4">
<VCard
class="auth-card pa-sm-4 pa-md-7 pa-0"
max-width="460"
>
<VCardText>
<div class="d-flex align-center gap-x-3 justify-center mb-6">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
<h4 class="text-h4 mb-1">
Two Step Verification 💬
</h4>
<p class="mb-1">
We sent a verification code to your mobile. Enter the code from the mobile in the field below.
</p>
<h6 class="text-h6">
******1234
</h6>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- email -->
<VCol cols="12">
<div>Type your 6 digit security code</div>
<VOtpInput
v-model="otp"
:disabled="isOtpInserted"
type="number"
class="pa-0"
@finish="onFinish"
/>
</VCol>
<!-- reset password -->
<VCol cols="12">
<VBtn
block
:loading="isOtpInserted"
:disabled="isOtpInserted"
type="submit"
>
Verify my account
</VBtn>
</VCol>
<!-- back to login -->
<VCol cols="12">
<div class="d-flex justify-center align-center flex-wrap">
<span class="me-1">Didn't get the code?</span>
<a href="#">Resend</a>
</div>
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
<div class="d-flex gap-x-2 auth-footer-start-tree">
<img
class="d-none d-md-block"
:src="tree3"
:height="120"
:width="67"
>
<img
class="d-none d-md-block align-self-end"
:src="tree3"
:height="70"
:width="40"
>
</div>
<img
:src="tree1"
class="auth-footer-end-tree d-none d-md-block"
:width="97"
:height="210"
>
<!-- bg img -->
<img
class="auth-footer-mask d-none d-md-block"
:src="authThemeMask"
height="172"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,154 @@
<script setup>
import tree2 from '@images/misc/tree2.png'
import authV2MaskDark from '@images/pages/mask-v2-dark.png'
import authV2MaskLight from '@images/pages/mask-v2-light.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
import authV2TwoStepsIllustrationBorderedDark from '@images/pages/auth-v2-two-steps-illustration-border-dark.png'
import authV2TwoStepsIllustrationBorderedLight from '@images/pages/auth-v2-two-steps-illustration-border-light.png'
import authV2TwoStepsIllustrationDark from '@images/pages/auth-v2-two-steps-illustration-dark.png'
import authV2TwoStepsIllustrationLight from '@images/pages/auth-v2-two-steps-illustration-light.png'
const authThemeImg = useGenerateImageVariant(authV2TwoStepsIllustrationLight, authV2TwoStepsIllustrationDark, authV2TwoStepsIllustrationBorderedLight, authV2TwoStepsIllustrationBorderedDark, true)
const authThemeMask = useGenerateImageVariant(authV2MaskLight, authV2MaskDark)
definePage({ meta: { layout: 'blank' } })
const router = useRouter()
const otp = ref('')
const isOtpInserted = ref(false)
const onFinish = () => {
isOtpInserted.value = true
setTimeout(() => {
isOtpInserted.value = false
router.push('/')
}, 2000)
}
</script>
<template>
<RouterLink to="/">
<div class="auth-logo d-flex align-center gap-x-3">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
</RouterLink>
<div>
<VRow
class="auth-wrapper"
no-gutters
>
<VCol
md="8"
class="d-none d-md-flex position-relative"
>
<!-- Here your illustrator -->
<div class="d-flex align-center justify-end w-100 h-100 pa-10 pe-0">
<VImg
max-width="753"
:src="authThemeImg"
class="auth-illustration"
/>
</div>
<img
class="auth-footer-mask"
height="360"
:src="authThemeMask"
>
<div class="d-flex gap-x-2 auth-footer-tree">
<img
:src="tree2"
alt="tree image"
height="180"
width="48"
>
<img
:src="tree2"
alt="tree image"
height="120"
width="32"
class="align-self-end"
>
</div>
</VCol>
<VCol
cols="12"
md="4"
class="auth-card-v2 d-flex align-center justify-center"
style="background-color: rgb(var(--v-theme-surface));"
>
<VCard
flat
:max-width="500"
class="mt-12 mt-sm-0 pa-4"
>
<VCardText>
<h4 class="text-h4 mb-1">
Two Step Verification 💬
</h4>
<p class="mb-1">
We sent a verification code to your mobile. Enter the code from the mobile in the field below.
</p>
<h6 class="text-h6">
******1234
</h6>
</VCardText>
<VCardText>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- email -->
<VCol cols="12">
<div>Type your 6 digit security code</div>
<VOtpInput
v-model="otp"
:disabled="isOtpInserted"
type="number"
class="pa-0"
@finish="onFinish"
/>
</VCol>
<!-- reset password -->
<VCol cols="12">
<VBtn
block
:loading="isOtpInserted"
:disabled="isOtpInserted"
type="submit"
>
Verify my account
</VBtn>
</VCol>
<!-- back to login -->
<VCol cols="12">
<div class="d-flex justify-center align-center flex-wrap">
<span class="me-1">Didn't get the code?</span>
<a href="#">Resend</a>
</div>
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
// .auth-illustration{
// inset-block-end: 11.5rem;
// inset-inline-end: 1.25rem;
// }
</style>

View File

@@ -0,0 +1,82 @@
<script setup>
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({ meta: { layout: 'blank' } })
</script>
<template>
<div class="auth-wrapper d-flex align-center justify-center pa-4">
<VCard
class="auth-card pa-sm-4 pa-md-7 pa-0"
max-width="460"
>
<VCardText>
<div class="d-flex align-center gap-x-3 justify-center mb-6">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
<h4 class="text-h4 mb-1">
Verify your email
</h4>
<p class="mb-5">
Account activation link sent to your email address: hello@example.com Please follow the link inside to continue.
</p>
<VBtn
block
to="/"
class="mb-5"
>
Skip for now
</VBtn>
<div class="d-flex align-center justify-center">
<span class="me-1">Didn't get the mail? </span><a href="#">Resend</a>
</div>
</VCardText>
</VCard>
<div class="d-flex gap-x-2 auth-footer-start-tree">
<img
class="d-none d-md-block"
:src="tree3"
:height="120"
:width="67"
>
<img
class="d-none d-md-block align-self-end"
:src="tree3"
:height="70"
:width="40"
>
</div>
<img
:src="tree1"
class="auth-footer-end-tree d-none d-md-block"
:width="97"
:height="210"
>
<!-- bg img -->
<img
class="auth-footer-mask d-none d-md-block"
:src="authThemeMask"
height="172"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,109 @@
<script setup>
import tree2 from '@images/misc/tree2.png'
import authV2MaskDark from '@images/pages/mask-v2-dark.png'
import authV2MaskLight from '@images/pages/mask-v2-light.png'
import { VNodeRenderer } from '@layouts/components/VNodeRenderer'
import { themeConfig } from '@themeConfig'
import authV2VerifyEmailIllustrationBorderedDark from '@images/pages/auth-v2-verify-email-illustration-border-dark.png'
import authV2VerifyEmailIllustrationBorderedLight from '@images/pages/auth-v2-verify-email-illustration-border-light.png'
import authV2VerifyEmailIllustrationDark from '@images/pages/auth-v2-verify-email-illustration-dark.png'
import authV2VerifyEmailIllustrationLight from '@images/pages/auth-v2-verify-email-illustration-light.png'
const authThemeImg = useGenerateImageVariant(authV2VerifyEmailIllustrationLight, authV2VerifyEmailIllustrationDark, authV2VerifyEmailIllustrationBorderedLight, authV2VerifyEmailIllustrationBorderedDark, true)
const authThemeMask = useGenerateImageVariant(authV2MaskLight, authV2MaskDark)
definePage({ meta: { layout: 'blank' } })
</script>
<template>
<RouterLink to="/">
<div class="auth-logo d-flex align-center gap-x-3">
<VNodeRenderer :nodes="themeConfig.app.logo" />
<h1 class="auth-title">
{{ themeConfig.app.title }}
</h1>
</div>
</RouterLink>
<VRow
class="auth-wrapper"
no-gutters
>
<VCol
md="8"
class="d-none d-md-flex position-relative"
>
<!-- here your illustration -->
<div
class="d-flex align-center justify-end w-100 h-100 pa-10 "
:class="$vuetify.locale.isRtl ? 'pe-10' : 'pe-0'"
>
<VImg
max-width="808"
:src="authThemeImg"
class="auth-illustration"
/>
</div>
<img
class="auth-footer-mask"
height="360"
:src="authThemeMask"
>
<div class="d-flex gap-x-2 auth-footer-tree">
<img
:src="tree2"
alt="tree image"
height="180"
width="48"
>
<img
:src="tree2"
alt="tree image"
height="120"
width="32"
class="align-self-end"
>
</div>
</VCol>
<VCol
cols="12"
md="4"
class="auth-card-v2 d-flex align-center justify-center"
style="background-color: rgb(var(--v-theme-surface));"
>
<VCard
flat
:max-width="500"
class="mt-12 mt-sm-0 pa-4"
>
<VCardText>
<h4 class="text-h4 mb-1">
Verify your email
</h4>
<p class="mb-5">
Account activation link sent to your email address: hello@example.com Please follow the link inside to continue.
</p>
<VBtn
block
to="/"
class="mb-5"
>
Skip for now
</VBtn>
<div class="d-flex align-center justify-center">
<span class="me-1">Didn't get the mail? </span><a href="#">Resend</a>
</div>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/pages/page-auth.scss";
</style>

View File

@@ -0,0 +1,179 @@
<script setup>
const tableData = [
{
action: 'Collapse',
icon: 'ri-arrow-up-s-line',
details: 'Collapse card content using collapse action.',
},
{
action: 'Refresh Content',
icon: 'ri-refresh-line',
details: 'Refresh your card content using refresh action.',
},
{
action: 'Remove Card',
icon: 'ri-close-line',
details: 'Remove card from page using remove card action',
},
]
const isLoading = ref(true)
setTimeout(() => {
isLoading.value = false
}, 3000)
const refetchData = hideOverlay => {
setTimeout(hideOverlay, 3000)
}
</script>
<template>
<VRow>
<VCol cols="12">
<!-- 👉 Main Card -->
<AppCardActions
title="Cards Actions"
@refresh="refetchData"
>
<VCardText>
<VTable>
<thead>
<tr>
<th scope="col">
ACTION
</th>
<th scope="col">
ICON
</th>
<th scope="col">
DETAILS
</th>
</tr>
</thead>
<tbody>
<tr
v-for="data in tableData"
:key="data.icon"
>
<td>
{{ data.action }}
</td>
<td>
<VIcon
size="20"
:icon="data.icon"
/>
</td>
<td>
{{ data.details }}
</td>
</tr>
</tbody>
</VTable>
</VCardText>
</AppCardActions>
</VCol>
<VCol
cols="12"
md="6"
>
<!-- 👉 Initial Load -->
<AppCardActions
v-model:loading="isLoading"
title="Initial Load"
no-actions
>
<VCardText>
<p>You can specifically add Initial Load action using <code>loading</code> prop</p>
<span>Refresh the page to see it again in action.</span>
</VCardText>
</AppCardActions>
</VCol>
<VCol
cols="12"
md="6"
>
<!-- 👉 Collapsible -->
<AppCardActions
action-collapsed
title="Collapsible"
>
<VCardText>
<p>You can specifically add collapsible action using <code>actionCollapse</code> prop</p>
<span>Click on <VIcon
size="20"
icon="ri-arrow-up-s-line"
/> icon to see it in action</span>
</VCardText>
</AppCardActions>
</VCol>
<VCol
cols="12"
md="6"
>
<!-- 👉 Refresh Content -->
<AppCardActions
title="Refresh Content"
action-refresh
@refresh="refetchData"
>
<VCardText>
<p>You can specifically add refresh action using <code>actionRefresh</code> prop</p>
<span>Click on <VIcon
size="20"
icon="ri-refresh-line"
/> icon to see it in action</span>
</VCardText>
</AppCardActions>
</VCol>
<VCol
cols="12"
md="6"
>
<!-- 👉 Remove Card -->
<AppCardActions
title="Remove Card"
action-remove
>
<VCardText>
<p>You can specifically add remove action using <code>actionRemove</code> prop</p>
<span>Click on <VIcon
size="20"
icon="ri-close-line"
/> icon to see it in action</span>
</VCardText>
</AppCardActions>
</VCol>
<VCol
cols="12"
md="6"
>
<!-- 👉 Slots -->
<AppCardActions
title="Slots"
@refresh="refetchData"
>
<template #before-actions>
<VChip
class="me-3"
color="primary"
size="small"
>
3 Updates
</VChip>
</template>
<VCardText>
<p><code>app-card-actions</code> also provides <code>before-actions</code> and <code>after-actions</code> slot</p>
<span>You can find more details in our documentation</span>
</VCardText>
</AppCardActions>
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,175 @@
<script setup>
import CardAdvanceActivityTimeline from '@/views/pages/cards/card-advance/CardActivityTimeline.vue'
import CardAdvanceAnalytics from '@/views/pages/cards/card-advance/CardAdvanceAnalytics.vue'
import CardAdvanceCafeBadilico from '@/views/pages/cards/card-advance/CardAdvanceCafeBadilico.vue'
import CardAdvanceDepositWithdraw from '@/views/pages/cards/card-advance/CardAdvanceDepositWithdraw.vue'
import CardAdvanceDeveloperMeetup from '@/views/pages/cards/card-advance/CardAdvanceDeveloperMeetup.vue'
import CardAdvanceFinanceSummary from '@/views/pages/cards/card-advance/CardAdvanceFinanceSummary.vue'
import CardAdvanceMeetingSchedule from '@/views/pages/cards/card-advance/CardAdvanceMeetingSchedule.vue'
import CardAdvanceSalesByCountries from '@/views/pages/cards/card-advance/CardAdvanceSalesByCountries.vue'
import CardAdvanceTeamMembers from '@/views/pages/cards/card-advance/CardAdvanceTeamMembers.vue'
import CardAdvanceTotalEarning from '@/views/pages/cards/card-advance/CardAdvanceTotalEarning.vue'
import CardAdvanceTransactions from '@/views/pages/cards/card-advance/CardAdvanceTransactions.vue'
import CardAdvanceUpgradeYourPlan from '@/views/pages/cards/card-advance/CardAdvanceUpgradeYourPlan.vue'
import CardAdvanceWebsiteStatistics from '@/views/pages/cards/card-advance/CardAdvanceWebsiteStatistics.vue'
import CardAdvancedAssignmentProgress from '@/views/pages/cards/card-advance/CardAdvancedAssignmentProgress.vue'
import CardAdvancedDeliveryPerformance from '@/views/pages/cards/card-advance/CardAdvancedDeliveryPerformance.vue'
import CardAdvancedOrderByCountries from '@/views/pages/cards/card-advance/CardAdvancedOrderByCountries.vue'
import CardAdvancedPopularInstructors from '@/views/pages/cards/card-advance/CardAdvancedPopularInstructors.vue'
import CardAdvancedTopCourses from '@/views/pages/cards/card-advance/CardAdvancedTopCourses.vue'
import CardAdvancedUpcomingWebinar from '@/views/pages/cards/card-advance/CardAdvancedUpcomingWebinar.vue'
</script>
<template>
<VRow class="match-height">
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvanceTransactions />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvanceUpgradeYourPlan />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvanceMeetingSchedule />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvancedTopCourses />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvancedUpcomingWebinar />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvancedAssignmentProgress />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvancedPopularInstructors />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvancedOrderByCountries />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvancedDeliveryPerformance />
</VCol>
<VCol
cols="12"
md="6"
lg="5"
>
<CardAdvanceTeamMembers />
</VCol>
<VCol
cols="12"
lg="7"
>
<CardAdvanceDepositWithdraw />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvanceTotalEarning />
</VCol>
<VCol
cols="12"
md="6"
lg="5"
>
<CardAdvanceFinanceSummary />
</VCol>
<VCol
cols="12"
md="6"
lg="3"
>
<CardAdvanceAnalytics />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvanceWebsiteStatistics />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvanceDeveloperMeetup />
</VCol>
<VCol
cols="12"
md="6"
lg="4"
>
<CardAdvanceSalesByCountries />
</VCol>
</VRow>
<VRow>
<VCol
cols="12"
md="8"
>
<CardAdvanceActivityTimeline />
</VCol>
<VCol
cols="12"
md="4"
>
<CardAdvanceCafeBadilico />
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,27 @@
<script setup>
import CardBasic from '@/views/pages/cards/card-basic/CardBasic.vue'
import CardNavigation from '@/views/pages/cards/card-basic/CardNavigation.vue'
import CardSolid from '@/views/pages/cards/card-basic/CardSolid.vue'
</script>
<template>
<div>
<p class="text-2xl mb-6">
Basic Cards
</p>
<CardBasic />
<p class="text-2xl mb-6 mt-14">
Navigation Cards
</p>
<CardNavigation />
<p class="text-2xl mt-14 mb-6 ">
Solid Cards
</p>
<CardSolid />
</div>
</template>

View File

@@ -0,0 +1,40 @@
<script setup>
import CardAward from '@/views/pages/cards/gamification/CardAward.vue'
import CardCongratulations from '@/views/pages/cards/gamification/CardCongratulations.vue'
import CardUpgrade from '@/views/pages/cards/gamification/CardUpgrade.vue'
import CardWelcome from '@/views/pages/cards/gamification/CardWelcome.vue'
</script>
<template>
<VRow>
<VCol
cols="12"
md="4"
>
<CardAward />
</VCol>
<VCol
cols="12"
md="8"
class="align-self-end mt-sm-10 mt-md-0"
>
<CardCongratulations />
</VCol>
<VCol
cols="12"
md="8"
class="align-self-end mt-sm-10 mt-md-0"
>
<CardWelcome />
</VCol>
<VCol
cols="12"
md="4"
>
<CardUpgrade />
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,302 @@
<script setup>
import CardStatisticsLogistics from '@/views/pages/cards/card-statistics/CardStatisticsLogistics.vue'
import CardStatisticsSessionsBarCharts from '@/views/pages/cards/card-statistics/CardStatisticsSessionsBarCharts.vue'
import CardStatisticsSessionsBarWithGapCharts from '@/views/pages/cards/card-statistics/CardStatisticsSessionsBarWithGapCharts.vue'
import CardStatisticsTotalGrowthAreaCharts from '@/views/pages/cards/card-statistics/CardStatisticsTotalGrowthAreaCharts.vue'
import CardStatisticsTotalProfitLineCharts from '@/views/pages/cards/card-statistics/CardStatisticsTotalProfitLineCharts.vue'
import CardStatisticsTotalRevenueLineCharts from '@/views/pages/cards/card-statistics/CardStatisticsTotalRevenueLineCharts.vue'
import CardStatisticsTotalRevenueRadialBarCharts from '@/views/pages/cards/card-statistics/CardStatisticsTotalRevenueRadialBarCharts.vue'
import CardStatisticsTotalSalesCharts from '@/views/pages/cards/card-statistics/CardStatisticsTotalSalesCharts.vue'
import CardStatisticsTransactions from '@/views/pages/cards/card-statistics/CardStatisticsTransactions.vue'
import illustration1 from '@images/cards/illustration-1.png'
import illustration2 from '@images/cards/illustration-2.png'
import illustration3 from '@images/cards/illustration-3.png'
import illustration4 from '@images/cards/illustration-4.png'
const statisticsHorizontal = [
{
title: 'New Customers',
color: 'primary',
icon: 'ri-group-line',
stats: 2856,
change: -11.9,
},
{
title: 'Total Revenue',
color: 'success',
icon: 'ri-money-dollar-circle-line',
stats: 28600,
change: 25.8,
},
{
title: 'New Transactions',
color: 'info',
icon: 'ri-pie-chart-2-line',
stats: 13600,
change: -42.4,
},
{
title: 'Total Profit',
color: 'warning',
icon: 'ri-bar-chart-line',
stats: 2856,
change: 18.2,
},
]
const statisticsWithIcon = [
{
title: 'Session',
value: '21,459',
change: 29,
desc: 'Total Users',
icon: 'ri-group-line',
iconColor: 'primary',
},
{
title: 'Paid Users',
value: '4,567',
change: 18,
desc: 'Last Week Analytics',
icon: 'ri-user-add-line',
iconColor: 'error',
},
{
title: 'Active Users',
value: '19,860',
change: -14,
desc: 'Last Week Analytics',
icon: 'ri-user-follow-line',
iconColor: 'success',
},
{
title: 'Pending Users',
value: '237',
change: 42,
desc: 'Last Week Analytics',
icon: 'ri-user-search-line',
iconColor: 'warning',
},
]
const statisticsVertical = [
{
title: 'New Project',
color: 'primary',
icon: 'ri-file-word-2-line',
stats: '862',
change: -18,
subtitle: 'Yearly Project',
},
{
title: 'Total Profit',
color: 'secondary',
icon: 'ri-pie-chart-2-line',
stats: '$25.6k',
change: 42,
subtitle: 'Weekly Project',
},
{
title: 'Revenue',
color: 'success',
icon: 'ri-money-dollar-circle-line',
stats: '$95.2k',
change: 12,
subtitle: 'Revenue Increase',
},
{
title: 'Logistics',
color: 'error',
icon: 'ri-car-line',
stats: '44.10k',
change: 12,
subtitle: 'Revenue Increase',
},
{
title: 'Reports',
color: 'warning',
icon: 'ri-file-chart-line',
stats: '268',
change: -8,
subtitle: 'System Bugs',
},
{
title: 'Transactions',
color: 'info',
icon: 'ri-bank-card-line',
stats: '12k',
change: 32,
subtitle: 'Daily Transactions',
},
]
const statisticsWithImages = [
{
title: 'Ratings',
subtitle: 'Year of 2021',
stats: '13k',
change: 38,
image: illustration1,
color: 'primary',
},
{
title: 'Sessions',
subtitle: 'Last Week',
stats: '24.5k',
change: -22,
image: illustration2,
color: 'secondary',
},
{
title: 'Customers',
subtitle: 'Daily Customers',
stats: '2,856',
change: 59,
image: illustration3,
color: 'info',
},
{
title: 'Total Orders',
subtitle: 'Last Month',
stats: '42.5k',
change: 26,
image: illustration4,
color: 'warning',
},
]
</script>
<template>
<VRow class="match-height">
<!-- 👉 Horizontal Cards -->
<VCol
v-for="statistics in statisticsHorizontal"
:key="statistics.title"
cols="12"
sm="6"
md="3"
>
<CardStatisticsHorizontal v-bind="statistics" />
</VCol>
<VCol cols="12">
<CardStatisticsLogistics />
</VCol>
<VCol
v-for="statistics in statisticsWithIcon"
:key="statistics.title"
cols="12"
sm="6"
md="3"
>
<CardStatisticsWithIcon v-bind="statistics" />
</VCol>
<!-- 👉 Transition Card -->
<VCol
cols="12"
md="8"
>
<CardStatisticsTransactions />
</VCol>
<!-- 👉 Total sales -->
<VCol
cols="12"
md="4"
>
<CardStatisticsTotalSalesCharts />
</VCol>
<!-- 👉 Vertical Cards -->
<VCol
v-for="statistics in statisticsVertical"
:key="statistics.title"
cols="12"
sm="4"
lg="2"
>
<CardStatisticsVertical v-bind="statistics" />
</VCol>
<!-- 👉 Blank Column for make space above the Images cards -->
<!-- 👉 Images Cards -->
<VCol
v-for="statistics in statisticsWithImages"
:key="statistics.title"
class="pt-8"
cols="12"
lg="3"
sm="6"
>
<CardStatisticsWithImages v-bind="statistics" />
</VCol>
<!-- 👉 Total Revenue Line Chart -->
<VCol
cols="12"
sm="6"
md="4"
lg="2"
>
<CardStatisticsTotalRevenueLineCharts />
</VCol>
<!-- 👉 Sessions Bar Chart with Gaps -->
<VCol
cols="12"
sm="6"
md="4"
lg="2"
>
<CardStatisticsSessionsBarWithGapCharts />
</VCol>
<!-- 👉 Total Growth Area Chart -->
<VCol
cols="12"
sm="6"
md="4"
lg="2"
>
<CardStatisticsTotalGrowthAreaCharts />
</VCol>
<!-- 👉 Total Revenue Radial Bar Chart -->
<VCol
cols="12"
sm="6"
md="4"
lg="2"
>
<CardStatisticsTotalRevenueRadialBarCharts />
</VCol>
<!-- 👉 Session Bar Chart -->
<VCol
cols="12"
sm="6"
md="4"
lg="2"
>
<CardStatisticsSessionsBarCharts />
</VCol>
<!-- 👉 Total Profit Line Chart -->
<VCol
cols="12"
sm="6"
md="4"
lg="2"
>
<CardStatisticsTotalProfitLineCharts />
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/libs/apex-chart.scss";
</style>

View File

@@ -0,0 +1,149 @@
<script setup>
import CardWidgetsActivityTimeline from '@/views/pages/cards/card-widgets/CardWidgetsActivityTimeline.vue'
import CardWidgetsAnalytics from '@/views/pages/cards/card-widgets/CardWidgetsAnalytics.vue'
import CardWidgetsDeliveryExceptions from '@/views/pages/cards/card-widgets/CardWidgetsDeliveryExceptions.vue'
import CardWidgetsPerformance from '@/views/pages/cards/card-widgets/CardWidgetsPerformance.vue'
import CardWidgetsRevenueReport from '@/views/pages/cards/card-widgets/CardWidgetsRevenueReport.vue'
import CardWidgetsSalesOverview from '@/views/pages/cards/card-widgets/CardWidgetsSalesOverview.vue'
import CardWidgetsSalesState from '@/views/pages/cards/card-widgets/CardWidgetsSalesState.vue'
import CardWidgetsTotalProfit from '@/views/pages/cards/card-widgets/CardWidgetsTotalProfit.vue'
import CardWidgetsTotalProfitRadialBar from '@/views/pages/cards/card-widgets/CardWidgetsTotalProfitRadialBar.vue'
import CardWidgetsTotalRevenue from '@/views/pages/cards/card-widgets/CardWidgetsTotalRevenue.vue'
import CardWidgetsTotalSales from '@/views/pages/cards/card-widgets/CardWidgetsTotalSales.vue'
import CardWidgetsTotalVisitors from '@/views/pages/cards/card-widgets/CardWidgetsTotalVisitors.vue'
import CardWidgetsTotalVisits from '@/views/pages/cards/card-widgets/CardWidgetsTotalVisits.vue'
import CardWidgetsWeeklyOverview from '@/views/pages/cards/card-widgets/CardWidgetsWeeklyOverview.vue'
import CardWidgetsWeeklySales from '@/views/pages/cards/card-widgets/CardWidgetsWeeklySales.vue'
import CardWidgetsInterestedTopics from '@/views/pages/cards/card-widgets/cardWidgetsInterestedTopics.vue'
</script>
<template>
<VRow>
<VCol
cols="12"
md="8"
>
<CardWidgetsTotalProfit />
</VCol>
<VCol
cols="12"
sm="6"
md="4"
>
<CardWidgetsTotalVisitors />
</VCol>
<VCol
cols="12"
sm="6"
md="4"
>
<CardWidgetsWeeklySales />
</VCol>
<VCol
cols="12"
sm="6"
md="4"
>
<CardWidgetsTotalRevenue />
</VCol>
<VCol
cols="12"
sm="6"
md="4"
>
<CardWidgetsWeeklyOverview />
</VCol>
<VCol
cols="12"
sm="6"
md="4"
>
<CardWidgetsPerformance />
</VCol>
<VCol
cols="12"
sm="6"
md="4"
>
<CardWidgetsAnalytics />
</VCol>
<VCol
cols="12"
sm="6"
md="4"
>
<CardWidgetsSalesState />
</VCol>
<VCol
cols="12"
sm="6"
md="3"
>
<CardWidgetsTotalProfitRadialBar />
</VCol>
<VCol
cols="12"
sm="4"
md="3"
>
<CardWidgetsTotalSales />
</VCol>
<VCol
cols="12"
sm="4"
md="3"
>
<CardWidgetsTotalVisits />
</VCol>
<VCol
cols="12"
sm="4"
md="3"
>
<CardWidgetsRevenueReport />
</VCol>
<VCol
cols="12"
md="6"
>
<CardWidgetsActivityTimeline />
</VCol>
<VCol
cols="12"
md="6"
>
<CardWidgetsSalesOverview />
</VCol>
<VCol
cols="12"
md="8"
>
<CardWidgetsInterestedTopics />
</VCol>
<VCol
cols="12"
md="4"
>
<CardWidgetsDeliveryExceptions />
</VCol>
</VRow>
</template>
<style lang="scss">
@use "@core-scss/template/libs/apex-chart.scss";
</style>

View File

@@ -0,0 +1,362 @@
<script setup>
const isCardAddDialogVisible = ref(false)
const isPricingPlanDialogVisible = ref(false)
const isEditAddressDialogVisible = ref(false)
const isTwoFactorDialogOpen = ref(false)
const isUserInfoEditDialogVisible = ref(false)
const isShareProjectDialogVisible = ref(false)
const isReferAndEarnDialogVisible = ref(false)
const isPaymentProvidersDialogVisible = ref(false)
const isAddPaymentMethodsDialogVisible = ref(false)
const isCreateAppVisible = ref(false)
const userData = {
id: 110,
fullName: 'Salena Kyle',
company: 'Wayne Enterprises',
firstName: 'Selena',
lastName: 'Kyle',
username: 'charwomen1940',
role: 'Admin',
currentPlan: 'Pro',
country: 'USA',
contact: '(829) 537-0057',
email: 'salenakyle@gmail.com',
isBillingAddress: true,
status: 'active',
taxId: 'Tax-8894',
language: ['English'],
}
</script>
<template>
<VRow>
<!-- 👉 Share Project Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-file-pdf-line"
/>
<h5 class="text-h5">
Share Project
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Quickly collect the credit card details, built in input mask and form validation support.
</p>
<VBtn @click="isShareProjectDialogVisible = !isShareProjectDialogVisible">
Show
</VBtn>
</VCardText>
<ShareProjectDialog v-model:isDialogVisible="isShareProjectDialogVisible" />
</VCard>
</VCol>
<!-- 👉 Add New Card Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-bank-card-line"
/>
<h5 class="text-h5">
Add New Card
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Quickly collect the credit card details, built in input mask and form validation support.
</p>
<VBtn @click="isCardAddDialogVisible = !isCardAddDialogVisible">
Show
</VBtn>
</VCardText>
<CardAddEditDialog v-model:isDialogVisible="isCardAddDialogVisible" />
</VCard>
</VCol>
<!-- 👉 Pricing Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-money-dollar-circle-line"
/>
<h5 class="text-h5">
Pricing
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Elegant pricing options dialog popup example, easy to use in any page.
</p>
<VBtn @click="isPricingPlanDialogVisible = !isPricingPlanDialogVisible">
Show
</VBtn>
</VCardText>
<!-- 👉 plan and pricing dialog -->
<PricingPlanDialog v-model:is-dialog-visible="isPricingPlanDialogVisible" />
</VCard>
</VCol>
<!-- 👉 Refer And Earn Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-gift-line"
/>
<h5 class="text-h5">
Refer & Earn
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Use Refer & Earn modal to encourage your exiting customers refer their friends & colleague.
</p>
<VBtn @click="isReferAndEarnDialogVisible = !isReferAndEarnDialogVisible">
Show
</VBtn>
</VCardText>
<!-- 👉 plan and pricing dialog -->
<ReferAndEarnDialog v-model:is-dialog-visible="isReferAndEarnDialogVisible" />
</VCard>
</VCol>
<!-- 👉 Add New Address Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-home-3-line"
/>
<h5 class="text-h5">
Add New Address
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Ready to use form to collect user address data with validation and custom input support.
</p>
<VBtn @click="isEditAddressDialogVisible = !isEditAddressDialogVisible">
Show
</VBtn>
</VCardText>
<!-- 👉 Edit Address dialog -->
<AddEditAddressDialog v-model:isDialogVisible="isEditAddressDialogVisible" />
</VCard>
</VCol>
<!-- 👉 Create app dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-box-3-line"
/>
<h5 class="text-h5">
Create App
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Provide application data with this form to create the app dialog popup example, easy to use in any page.
</p>
<VBtn @click="isCreateAppVisible = !isCreateAppVisible">
Show
</VBtn>
</VCardText>
</VCard>
<CreateAppDialog v-model:is-dialog-visible="isCreateAppVisible" />
</VCol>
<!-- 👉 Two Factor Auth Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-lock-line"
/>
<h5 class="text-h5">
Two Factor Auth
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Enhance your application security by enabling two factor authentication.
</p>
<VBtn @click="isTwoFactorDialogOpen = !isTwoFactorDialogOpen">
Show
</VBtn>
</VCardText>
<!-- 👉 Enable One Time Password Dialog -->
<TwoFactorAuthDialog v-model:isDialogVisible="isTwoFactorDialogOpen" />
</VCard>
</VCol>
<!-- 👉 Edit User Info Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-user-line"
/>
<h5 class="text-h5">
Edit User Info
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Enhance your application security by enabling two factor authentication.
</p>
<VBtn @click="isUserInfoEditDialogVisible = !isUserInfoEditDialogVisible">
Show
</VBtn>
</VCardText>
<!-- 👉 Edit user info dialog -->
<UserInfoEditDialog
v-model:isDialogVisible="isUserInfoEditDialogVisible"
:user-data="userData"
/>
</VCard>
</VCol>
<!-- 👉 Payment Providers Dialog -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-bank-card-line"
/>
<h5 class="text-h5">
Payment Providers
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Elegant payment options modal popup example, easy to use in any page.
</p>
<VBtn @click="isPaymentProvidersDialogVisible = !isPaymentProvidersDialogVisible">
Show
</VBtn>
</VCardText>
<!-- 👉 plan and pricing dialog -->
<PaymentProvidersDialog v-model:is-dialog-visible="isPaymentProvidersDialogVisible" />
</VCard>
</VCol>
<!-- 👉 Add Payment Methods -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard class="text-high-emphasis text-center">
<VCardText class="d-flex flex-column align-center gap-2">
<VIcon
size="28"
icon="ri-bank-card-2-line"
/>
<h5 class="text-h5">
Add Payment Methods
</h5>
</VCardText>
<VCardText>
<p class="text-base clamp-text">
Elegant payment methods modal popup example, easy to use in any page.
</p>
<VBtn @click="isAddPaymentMethodsDialogVisible = !isAddPaymentMethodsDialogVisible">
Show
</VBtn>
</VCardText>
<!-- 👉 plan and pricing dialog -->
<AddPaymentMethodDialog v-model:is-dialog-visible="isAddPaymentMethodsDialogVisible" />
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
.pricing-dialog {
.pricing-title {
font-size: 1.5rem !important;
}
}
</style>

View File

@@ -0,0 +1,229 @@
<script setup>
import illustrationJohn from '@images/pages/illustration-john.png'
const faqSearchQuery = ref('')
const faqs = ref([])
const fetchFaqs = async () => {
const data = await $api('/pages/faq', { query: { q: faqSearchQuery.value } }).catch(err => console.log(err))
faqs.value = data
}
const activeTab = ref('Payment')
const activeQuestion = ref(1)
watch(activeTab, () => activeQuestion.value = 0)
watch(faqSearchQuery, fetchFaqs, { immediate: true })
const contactUs = [
{
icon: 'ri-phone-line',
via: '+ (810) 2548 2568',
tagLine: 'We are always happy to help!',
},
{
icon: 'ri-mail-line',
via: 'hello@help.com',
tagLine: 'Best way to get answer faster!',
},
]
</script>
<template>
<section>
<!-- 👉 Search -->
<AppSearchHeader
v-model="faqSearchQuery"
custom-class="mb-6"
>
<template #default>
<h4 class="text-h4 text-primary mb-3">
Hello, how can we help?
</h4>
<p class="text-body-1 mb-7">
or choose a category to quickly find the help you need
</p>
<!-- 👉 Search Input -->
<VTextField
placeholder="search articles..."
class="search-header-input mx-auto my-4"
>
<template #prepend-inner>
<VIcon
icon="ri-search-line"
size="18"
/>
</template>
</VTextField>
</template>
</AppSearchHeader>
<!-- 👉 Faq sections and questions -->
<VRow>
<VCol
v-show="faqs.length"
cols="12"
md="3"
sm="5"
class="position-relative"
>
<!-- 👉 Tabs -->
<VTabs
v-model="activeTab"
direction="vertical"
class="v-tabs-pill"
>
<VTab
v-for="faq in faqs"
:key="faq.faqTitle"
:value="faq.faqTitle"
>
<VIcon
:icon="faq.faqIcon"
start
/>
{{ faq.faqTitle }}
</VTab>
</VTabs>
<VImg
:src="illustrationJohn"
class="d-none d-sm-block mt-8"
/>
</VCol>
<VCol
cols="12"
md="9"
sm="7"
>
<!-- 👉 Windows -->
<VWindow
v-model="activeTab"
class="faq-v-window disable-tab-transition"
>
<VWindowItem
v-for="faq in faqs"
:key="faq.faqTitle"
:value="faq.faqTitle"
>
<div class="d-flex align-center mb-4 gap-x-4">
<VAvatar
rounded
color="primary"
variant="tonal"
size="50"
>
<VIcon
:size="30"
:icon="faq.faqIcon"
/>
</VAvatar>
<div>
<h5 class="text-h5">
{{ faq.faqTitle }}
</h5>
<div class="text-body-1">
{{ faq.faqSubtitle }}
</div>
</div>
</div>
<VExpansionPanels
v-model="activeQuestion"
multiple
>
<VExpansionPanel
v-for="item in faq.faqs"
:key="item.question"
:title="item.question"
:text="item.answer"
/>
</VExpansionPanels>
</VWindowItem>
</VWindow>
</VCol>
<VCol
v-show="!faqs.length"
cols="12"
:class="!faqs.length ? 'd-flex justify-center align-center' : ''"
>
<VIcon
icon="ri-question-line"
start
size="20"
/>
<span class="text-base font-weight-medium">
No Results Found!!
</span>
</VCol>
</VRow>
<!-- 👉 You still have a question? -->
<div class="text-center mt-6">
<div class="py-6">
<VChip
color="primary"
size="small"
>
Question
</VChip>
<h4 class="text-h4 my-2">
You still have a question?
</h4>
<p class="text-body-1 mb-0">
If you cannot find a question in our FAQ, you can always contact us. We will answer to you shortly!
</p>
</div>
<!-- contacts -->
<VRow class="mt-3">
<VCol
v-for="contact in contactUs"
:key="contact.icon"
sm="6"
cols="12"
>
<VCard
flat
color="rgba(var(--v-theme-on-surface), var(--v-hover-opacity))"
>
<VCardText class="pa-6">
<VAvatar
rounded
color="primary"
variant="tonal"
size="50"
class="mb-4"
>
<VIcon
:icon="contact.icon"
size="30"
/>
</VAvatar>
<h5 class="text-h5 mb-1">
{{ contact.via }}
</h5>
<div class="text-body-1">
{{ contact.tagLine }}
</div>
</VCardText>
</VCard>
</VCol>
</VRow>
</div>
</section>
</template>
<style lang="scss">
.faq-v-window {
.v-window__container {
z-index: 0;
}
}
</style>

View File

@@ -0,0 +1,97 @@
<script setup>
const iconsList = [
'ri-arrow-left-up-line',
'ri-arrow-left-up-fill',
'ri-arrow-up-line',
'ri-arrow-up-fill',
'ri-arrow-right-up-line',
'ri-arrow-right-up-fill',
'ri-corner-down-left-line',
'ri-corner-down-left-fill',
'ri-corner-left-up-line',
'ri-corner-left-up-fill',
'ri-corner-left-down-line',
'ri-corner-left-down-fill',
'ri-corner-down-right-line',
'ri-corner-down-right-fill',
'ri-arrow-up-circle-line',
'ri-arrow-up-circle-fill',
'ri-arrow-right-circle-line',
'ri-arrow-right-circle-fill',
'ri-arrow-down-circle-line',
'ri-arrow-down-circle-fill',
'ri-arrow-left-circle-line',
'ri-arrow-left-circle-fill',
'ri-arrow-up-s-line',
'ri-arrow-up-s-fill',
'ri-arrow-right-s-line',
'ri-arrow-right-s-fill',
'ri-arrow-down-s-line',
'ri-arrow-down-s-fill',
'ri-arrow-left-s-line',
'ri-arrow-left-s-fill',
'ri-arrow-drop-right-fill',
' ri-arrow-drop-down-line',
' ri-arrow-drop-down-fill',
' ri-arrow-drop-left-line',
' ri-arrow-drop-left-fill',
' ri-arrow-up-double-line',
' ri-arrow-up-double-fill',
' ri-arrow-right-double-line',
' ri-arrow-right-double-fill',
' ri-arrow-down-double-line',
' ri-arrow-down-double-fill',
' ri-arrow-left-double-line',
' ri-arrow-left-double-fill',
' ri-corner-up-left-double-line',
' ri-corner-up-left-double-fill',
' ri-corner-up-right-double-line',
' ri-corner-up-right-double-fill',
' ri-expand-left-line',
' ri-expand-left-fill',
' ri-expand-right-line',
' ri-expand-right-fill',
' ri-contract-left-line',
' ri-contract-left-fill',
' ri-contract-right-line',
]
</script>
<template>
<div>
<div class="d-flex align-center flex-wrap">
<VCard
v-for="icon in iconsList"
:key="icon"
class="mb-6 me-6"
>
<VCardText class="py-3 px-4">
<VIcon
size="30"
:icon="icon"
/>
</VCardText>
<!-- tooltips -->
<VTooltip
location="top"
activator="parent"
>
{{ icon }}
</VTooltip>
</VCard>
</div>
<!-- more icons -->
<div class="text-center">
<VBtn
href="https://remixicon.com/"
rel="noopener noreferrer"
color="primary"
target="_blank"
>
View All Remix Icons
</VBtn>
</div>
</div>
</template>

View File

@@ -0,0 +1,108 @@
<script setup>
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
import miscComingSoon from '@images/pages/misc-coming-soon.png'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({ meta: { layout: 'blank' } })
const email = ref('')
</script>
<template>
<div class="misc-wrapper">
<div>
<!-- 👉 Title and subtitle -->
<div class="text-center mb-10">
<h4 class="text-h4 mb-2">
We are launching soon 🚀
</h4>
<p class="text-body-1">
Our website is opening soon. Please register to get notified when it's ready!
</p>
</div>
<!-- 👉 Email input -->
<VForm
class="d-flex align-center justify-center flex-wrap gap-4"
@submit.prevent="() => {}"
>
<VTextField
v-model="email"
density="compact"
autofocus
placeholder="Enter your email or username"
class="misc-email-input"
/>
<VBtn type="submit">
Notify
</VBtn>
</VForm>
</div>
<!-- 👉 Image -->
<div class="misc-avatar w-100 mt-10">
<VImg
:src="miscComingSoon"
alt="Coming Soon"
:max-width="700"
height="500"
class="mx-auto"
/>
</div>
<div class="d-md-flex gap-x-2 misc-footer-tree d-none">
<img
:src="tree3"
alt="tree"
height="120"
width="68"
>
<img
:src="tree3"
alt="tree"
height="70"
width="40"
class="align-self-end"
>
</div>
<img
height="210"
:src="tree1"
class="misc-footer-tree-1 d-none d-md-block"
>
<img
cover
:src="authThemeMask"
height="172"
class="misc-footer-img d-none d-md-block flip-in-rtl"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/misc.scss";
.misc-email-input {
max-inline-size: 21.875rem;
min-inline-size: 16rem;
}
.misc-footer-tree, .misc-footer-tree-1 {
position: absolute;
}
.misc-footer-tree {
inset-block-end: 3.75rem;
inset-inline-start: 3.75rem;
}
.misc-footer-tree-1 {
inset-block-end: 5rem;
inset-inline-end: 4.75rem;
}
</style>

View File

@@ -0,0 +1,93 @@
<script setup>
import miscMaskDark from '@images/misc/misc-mask-dark.png'
import miscMaskLight from '@images/misc/misc-mask-light.png'
import miscUnderMaintenance from '@images/misc/misc-under-maintenance.png'
import tree1 from '@images/misc/tree1.png'
import tree3 from '@images/misc/tree3.png'
const authThemeMask = useGenerateImageVariant(miscMaskLight, miscMaskDark)
definePage({
meta: {
layout: 'blank',
public: false,
},
})
</script>
<template>
<div class="misc-wrapper">
<div class="text-center mb-10">
<!-- 👉 Title and subtitle -->
<h4 class="text-h4 mb-2">
Under Maintenance! 🚧
</h4>
<p class="mb-0 text-body-1">
Sorry for the inconvenience but we're performing some maintenance at the moment
</p>
</div>
<!-- 👉 Image -->
<div class="misc-avatar w-100 text-center">
<VImg
:src="miscUnderMaintenance"
alt="Coming Soon"
max-width="750"
class="mx-auto"
/>
<VBtn
to="/"
class="mt-10"
style="z-index: 1;"
>
Back to Home
</VBtn>
</div>
<div class="d-md-flex gap-x-2 misc-footer-tree d-none">
<img
:src="tree3"
alt="tree"
height="120"
width="68"
>
<img
:src="tree3"
alt="tree"
height="70"
width="40"
class="align-self-end"
>
</div>
<img
height="210"
:src="tree1"
class="misc-footer-tree-1 d-none d-md-block"
>
<img
cover
:src="authThemeMask"
height="172"
class="misc-footer-img d-none d-md-block flip-in-rtl"
>
</div>
</template>
<style lang="scss">
@use "@core-scss/template/pages/misc.scss";
.misc-footer-tree, .misc-footer-tree-1 {
position: absolute;
}
.misc-footer-tree {
inset-block-end: 3.75rem;
inset-inline-start: 3.75rem;
}
.misc-footer-tree-1 {
inset-block-end: 5rem;
inset-inline-end: 4.75rem;
}
</style>

View File

@@ -0,0 +1,11 @@
<template>
<VCard>
<VCardText class="pt-12 pb-16 mx-5">
<!-- 👉 App Pricing components -->
<AppPricing
md="4"
cols="12"
/>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,16 @@
<script setup>
import TypographyHeadlines from '@/views/pages/typography/TypographyHeadlines.vue'
import TypographyTexts from '@/views/pages/typography/TypographyTexts.vue'
</script>
<template>
<VRow>
<VCol cols="12">
<TypographyHeadlines />
</VCol>
<VCol cols="12">
<TypographyTexts />
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,95 @@
<script setup>
import UserProfileHeader from '@/views/pages/user-profile/UserProfileHeader.vue'
import UserConnections from '@/views/pages/user-profile/connections/index.vue'
import UserProfile from '@/views/pages/user-profile/profile/index.vue'
import UserProjects from '@/views/pages/user-profile/projects/index.vue'
import UserTeam from '@/views/pages/user-profile/team/index.vue'
definePage({
meta: {
navActiveLink: 'pages-user-profile-tab',
key: 'tab',
},
})
const route = useRoute('pages-user-profile-tab')
const activeTab = computed({
get: () => route.params.tab,
set: () => route.params.tab,
})
// tabs
const tabs = [
{
title: 'Profile',
icon: 'ri-user-line',
tab: 'profile',
},
{
title: 'Team',
icon: 'ri-team-line',
tab: 'teams',
},
{
title: 'Projects',
icon: 'ri-computer-line',
tab: 'projects',
},
{
title: 'Connections',
icon: 'ri-link',
tab: 'connections',
},
]
</script>
<template>
<div>
<UserProfileHeader class="mb-5" />
<VTabs
v-model="activeTab"
class="v-tabs-pill"
>
<VTab
v-for="item in tabs"
:key="item.icon"
:value="item.tab"
:to="{ name: 'pages-user-profile-tab', params: { tab: item.tab } }"
>
<VIcon
start
:icon="item.icon"
/>
{{ item.title }}
</VTab>
</VTabs>
<VWindow
v-model="activeTab"
class="mt-5 disable-tab-transition"
:touch="false"
>
<!-- Profile -->
<VWindowItem value="profile">
<UserProfile />
</VWindowItem>
<!-- Teams -->
<VWindowItem value="teams">
<UserTeam />
</VWindowItem>
<!-- Projects -->
<VWindowItem value="projects">
<UserProjects />
</VWindowItem>
<!-- Connections -->
<VWindowItem value="connections">
<UserConnections />
</VWindowItem>
</VWindow>
</div>
</template>