upgade package

This commit is contained in:
CHIEFSOFT\ameye
2024-04-23 14:04:21 -04:00
parent ede879d821
commit 44f6fb0816
966 changed files with 7972 additions and 88698 deletions
+195
View File
@@ -0,0 +1,195 @@
import {FC, useState} from 'react'
import clsx from 'clsx'
import {
toAbsoluteUrl,
defaultMessages,
defaultUserInfos,
MessageModel,
UserInfoModel,
messageFromClient,
} from '../../helpers'
type Props = {
isDrawer?: boolean
}
const bufferMessages = defaultMessages
const ChatInner: FC<Props> = ({isDrawer = false}) => {
const [chatUpdateFlag, toggleChatUpdateFlat] = useState<boolean>(false)
const [message, setMessage] = useState<string>('')
const [messages, setMessages] = useState<MessageModel[]>(bufferMessages)
const [userInfos] = useState<UserInfoModel[]>(defaultUserInfos)
const sendMessage = () => {
const newMessage: MessageModel = {
user: 2,
type: 'out',
text: message,
time: 'Just now',
}
bufferMessages.push(newMessage)
setMessages(bufferMessages)
toggleChatUpdateFlat(!chatUpdateFlag)
setMessage('')
setTimeout(() => {
bufferMessages.push(messageFromClient)
setMessages(() => bufferMessages)
toggleChatUpdateFlat((flag) => !flag)
}, 1000)
}
const onEnterPress = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
if (e.keyCode === 13 && e.shiftKey === false) {
e.preventDefault()
sendMessage()
}
}
return (
<div
className='card-body'
id={isDrawer ? 'kt_drawer_chat_messenger_body' : 'kt_chat_messenger_body'}
>
<div
className={clsx('scroll-y me-n5 pe-5', {'h-300px h-lg-auto': !isDrawer})}
data-kt-element='messages'
data-kt-scroll='true'
data-kt-scroll-activate='{default: false, lg: true}'
data-kt-scroll-max-height='auto'
data-kt-scroll-dependencies={
isDrawer
? '#kt_drawer_chat_messenger_header, #kt_drawer_chat_messenger_footer'
: '#kt_header, #kt_app_header, #kt_app_toolbar, #kt_toolbar, #kt_footer, #kt_app_footer, #kt_chat_messenger_header, #kt_chat_messenger_footer'
}
data-kt-scroll-wrappers={
isDrawer
? '#kt_drawer_chat_messenger_body'
: '#kt_content, #kt_app_content, #kt_chat_messenger_body'
}
data-kt-scroll-offset={isDrawer ? '0px' : '5px'}
>
{messages.map((message, index) => {
const userInfo = userInfos[message.user]
const state = message.type === 'in' ? 'info' : 'primary'
const templateAttr = {}
if (message.template) {
Object.defineProperty(templateAttr, 'data-kt-element', {
value: `template-${message.type}`,
})
}
const contentClass = `${isDrawer ? '' : 'd-flex'} justify-content-${
message.type === 'in' ? 'start' : 'end'
} mb-10`
return (
<div
key={`message${index}`}
className={clsx('d-flex', contentClass, 'mb-10', {'d-none': message.template})}
{...templateAttr}
>
<div
className={clsx(
'd-flex flex-column align-items',
`align-items-${message.type === 'in' ? 'start' : 'end'}`
)}
>
<div className='d-flex align-items-center mb-2'>
{message.type === 'in' ? (
<>
<div className='symbol symbol-35px symbol-circle '>
<img alt='Pic' src={toAbsoluteUrl(`media/${userInfo.avatar}`)} />
</div>
<div className='ms-3'>
<a
href='#'
className='fs-5 fw-bolder text-gray-900 text-hover-primary me-1'
>
{userInfo.name}
</a>
<span className='text-muted fs-7 mb-1'>{message.time}</span>
</div>
</>
) : (
<>
<div className='me-3'>
<span className='text-muted fs-7 mb-1'>{message.time}</span>
<a
href='#'
className='fs-5 fw-bolder text-gray-900 text-hover-primary ms-1'
>
You
</a>
</div>
<div className='symbol symbol-35px symbol-circle '>
<img alt='Pic' src={toAbsoluteUrl(`media/${userInfo.avatar}`)} />
</div>
</>
)}
</div>
<div
className={clsx(
'p-5 rounded',
`bg-light-${state}`,
'text-gray-900 fw-bold mw-lg-400px',
`text-${message.type === 'in' ? 'start' : 'end'}`
)}
data-kt-element='message-text'
dangerouslySetInnerHTML={{__html: message.text}}
></div>
</div>
</div>
)
})}
</div>
<div
className='card-footer pt-4'
id={isDrawer ? 'kt_drawer_chat_messenger_footer' : 'kt_chat_messenger_footer'}
>
<textarea
className='form-control form-control-flush mb-3'
rows={1}
data-kt-element='input'
placeholder='Type a message'
value={message}
onChange={(e) => setMessage(e.target.value)}
onKeyDown={onEnterPress}
></textarea>
<div className='d-flex flex-stack'>
<div className='d-flex align-items-center me-2'>
<button
className='btn btn-sm btn-icon btn-active-light-primary me-1'
type='button'
data-bs-toggle='tooltip'
title='Coming soon'
>
<i className='bi bi-paperclip fs-3'></i>
</button>
<button
className='btn btn-sm btn-icon btn-active-light-primary me-1'
type='button'
data-bs-toggle='tooltip'
title='Coming soon'
>
<i className='bi bi-upload fs-3'></i>
</button>
</div>
<button
className='btn btn-primary'
type='button'
data-kt-element='send'
onClick={sendMessage}
>
Send
</button>
</div>
</div>
</div>
)
}
export {ChatInner}
@@ -0,0 +1,103 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const Item1: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px me-4'>
<div className='symbol-label bg-light'>
<KTIcon iconName='message-text-2' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mb-10 mt-n1'>
<div className='pe-3 mb-5'>
<div className='fs-5 fw-bold mb-2'>
There are 2 new tasks for you in AirPlus Mobile APp project:
</div>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Added at 4:23 PM by</div>
<div
className='symbol symbol-circle symbol-25px'
data-bs-toggle='tooltip'
data-bs-boundary='window'
data-bs-placement='top'
title='Nina Nilson'
>
<img src={toAbsoluteUrl('media/avatars/300-14.jpg')} alt='img' />
</div>
</div>
</div>
<div className='overflow-auto pb-5'>
<div className='d-flex align-items-center border border-dashed border-gray-300 rounded min-w-750px px-7 py-3 mb-5'>
<a href='#' className='fs-5 text-gray-900 text-hover-primary fw-bold w-375px min-w-200px'>
Meeting with customer
</a>
<div className='min-w-175px pe-2'>
<span className='badge badge-light text-muted'>Application Design</span>
</div>
<div className='symbol-group symbol-hover flex-nowrap flex-grow-1 min-w-100px pe-2'>
<div className='symbol symbol-circle symbol-25px'>
<img src={toAbsoluteUrl('media/avatars/300-2.jpg')} alt='img' />
</div>
<div className='symbol symbol-circle symbol-25px'>
<img src={toAbsoluteUrl('media/avatars/300-14.jpg')} alt='img' />
</div>
<div className='symbol symbol-circle symbol-25px'>
<div className='symbol-label fs-8 fw-bold bg-primary text-inverse-primary'>A</div>
</div>
</div>
<div className='min-w-125px pe-2'>
<span className='badge badge-light-primary'>In Progress</span>
</div>
<a href='#' className='btn btn-sm btn-light btn-active-light-primary'>
View
</a>
</div>
<div className='d-flex align-items-center border border-dashed border-gray-300 rounded min-w-750px px-7 py-3 mb-0'>
<a href='#' className='fs-5 text-gray-900 text-hover-primary fw-bold w-375px min-w-200px'>
Project Delivery Preparation
</a>
<div className='min-w-175px'>
<span className='badge badge-light text-muted'>CRM System Development</span>
</div>
<div className='symbol-group symbol-hover flex-nowrap flex-grow-1 min-w-100px'>
<div className='symbol symbol-circle symbol-25px'>
<img src={toAbsoluteUrl('media/avatars/300-20.jpg')} alt='img' />
</div>
<div className='symbol symbol-circle symbol-25px'>
<div className='symbol-label fs-8 fw-bold bg-success text-inverse-primary'>B</div>
</div>
</div>
<div className='min-w-125px'>
<span className='badge badge-light-success'>Completed</span>
</div>
<a href='#' className='btn btn-sm btn-light btn-active-light-primary'>
View
</a>
</div>
</div>
</div>
</div>
)
}
export {Item1}
@@ -0,0 +1,40 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const Item2: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px'>
<div className='symbol-label bg-light'>
<KTIcon iconName='pointers' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mb-10 mt-n2'>
<div className='overflow-auto pe-3'>
<div className='fs-5 fw-bold mb-2'>
Invitation for crafting engaging designs that speak human workshop
</div>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Sent at 4:23 PM by</div>
<div
className='symbol symbol-circle symbol-25px'
data-bs-toggle='tooltip'
data-bs-boundary='window'
data-bs-placement='top'
title='Alan Nilson'
>
<img src={toAbsoluteUrl('media/avatars/300-1.jpg')} alt='img' />
</div>
</div>
</div>
</div>
</div>
)
}
export {Item2}
@@ -0,0 +1,81 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const Item3: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px'>
<div className='symbol-label bg-light'>
<KTIcon iconName='disconnect' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mb-10 mt-n1'>
<div className='mb-5 pe-3'>
<a href='#' className='fs-5 fw-bold text-gray-800 text-hover-primary mb-2'>
3 New Incoming Project Files:
</a>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Sent at 10:30 PM by</div>
<div
className='symbol symbol-circle symbol-25px'
data-bs-toggle='tooltip'
data-bs-boundary='window'
data-bs-placement='top'
title='Jan Hummer'
>
<img src={toAbsoluteUrl('media/avatars/300-23.jpg')} alt='img' />
</div>
</div>
</div>
<div className='overflow-auto pb-5'>
<div className='d-flex align-items-center border border-dashed border-gray-300 rounded min-w-700px p-5'>
<div className='d-flex flex-aligns-center pe-10 pe-lg-20'>
<img alt='' className='w-30px me-3' src={toAbsoluteUrl('media/svg/files/pdf.svg')} />
<div className='ms-1 fw-bold'>
<a href='#' className='fs-6 text-hover-primary fw-bolder'>
Finance KPI App Guidelines
</a>
<div className='text-gray-500'>1.9mb</div>
</div>
</div>
<div className='d-flex flex-aligns-center pe-10 pe-lg-20'>
<img alt='' className='w-30px me-3' src={toAbsoluteUrl('media/svg/files/doc.svg')} />
<div className='ms-1 fw-bold'>
<a href='#' className='fs-6 text-hover-primary fw-bolder'>
Client UAT Testing Results
</a>
<div className='text-gray-500'>18kb</div>
</div>
</div>
<div className='d-flex flex-aligns-center'>
<img alt='' className='w-30px me-3' src={toAbsoluteUrl('media/svg/files/css.svg')} />
<div className='ms-1 fw-bold'>
<a href='#' className='fs-6 text-hover-primary fw-bolder'>
Finance Reports
</a>
<div className='text-gray-500'>20mb</div>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export {Item3}
@@ -0,0 +1,49 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const Item4: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px'>
<div className='symbol-label bg-light'>
<KTIcon iconName='abstract-26' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mb-10 mt-n1'>
<div className='pe-3 mb-5'>
<div className='fs-5 fw-bold mb-2'>
Task{' '}
<a href='#' className='text-primary fw-bolder me-1'>
#45890
</a>
merged with{' '}
<a href='#' className='text-primary fw-bolder me-1'>
#45890
</a>{' '}
in Ads Pro Admin Dashboard project:
</div>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Initiated at 4:23 PM by</div>
<div
className='symbol symbol-circle symbol-25px'
data-bs-toggle='tooltip'
data-bs-boundary='window'
data-bs-placement='top'
title='Nina Nilson'
>
<img src={toAbsoluteUrl('media/avatars/300-14.jpg')} alt='img' />
</div>
</div>
</div>
</div>
</div>
)
}
export {Item4}
@@ -0,0 +1,91 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const Item5: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px'>
<div className='symbol-label bg-light'>
<KTIcon iconName='pencil' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mb-10 mt-n1'>
<div className='pe-3 mb-5'>
<div className='fs-5 fw-bold mb-2'>3 new application design concepts added:</div>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Created at 4:23 PM by</div>
<div
className='symbol symbol-circle symbol-25px'
data-bs-toggle='tooltip'
data-bs-boundary='window'
data-bs-placement='top'
title='Marcus Dotson'
>
<img src={toAbsoluteUrl('media/avatars/300-2.jpg')} alt='img' />
</div>
</div>
</div>
<div className='overflow-auto pb-5'>
<div className='d-flex align-items-center border border-dashed border-gray-300 rounded min-w-700px p-7'>
<div className='overlay me-10'>
<div className='overlay-wrapper'>
<img
alt='img'
className='rounded w-200px'
src={toAbsoluteUrl('media/stock/600x400/img-29.jpg')}
/>
</div>
<div className='overlay-layer bg-dark bg-opacity-10 rounded'>
<a href='#' className='btn btn-sm btn-primary btn-shadow'>
Explore
</a>
</div>
</div>
<div className='overlay me-10'>
<div className='overlay-wrapper'>
<img
alt='img'
className='rounded w-200px'
src={toAbsoluteUrl('media/stock/600x400/img-31.jpg')}
/>
</div>
<div className='overlay-layer bg-dark bg-opacity-10 rounded'>
<a href='#' className='btn btn-sm btn-primary btn-shadow'>
Explore
</a>
</div>
</div>
<div className='overlay'>
<div className='overlay-wrapper'>
<img
alt='img'
className='rounded w-200px'
src={toAbsoluteUrl('media/stock/600x400/img-40.jpg')}
/>
</div>
<div className='overlay-layer bg-dark bg-opacity-10 rounded'>
<a href='#' className='btn btn-sm btn-primary btn-shadow'>
Explore
</a>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export {Item5}
@@ -0,0 +1,41 @@
import {FC} from 'react'
import {KTIcon} from '../../../helpers'
const Item6: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px'>
<div className='symbol-label bg-light'>
<KTIcon iconName='sms' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mb-10 mt-n1'>
<div className='pe-3 mb-5'>
<div className='fs-5 fw-bold mb-2'>
New case{' '}
<a href='#' className='text-primary fw-bolder me-1'>
#67890
</a>
is assigned to you in Multi-platform Database Design project
</div>
<div className='overflow-auto pb-5'>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Added at 4:23 PM by</div>
<a href='#' className='text-primary fw-bolder me-1'>
Alice Tan
</a>
</div>
</div>
</div>
</div>
</div>
)
}
export {Item6}
@@ -0,0 +1,59 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const Item7: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px'>
<div className='symbol-label bg-light'>
<KTIcon iconName='pencil' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mb-10 mt-n1'>
<div className='pe-3 mb-5'>
<div className='fs-5 fw-bold mb-2'>You have received a new order:</div>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Placed at 5:05 AM by</div>
<div
className='symbol symbol-circle symbol-25px'
data-bs-toggle='tooltip'
data-bs-boundary='window'
data-bs-placement='top'
title='Robert Rich'
>
<img src={toAbsoluteUrl('media/avatars/300-4.jpg')} alt='img' />
</div>
</div>
</div>
<div className='overflow-auto pb-5'>
<div className='notice d-flex bg-light-primary rounded border-primary border border-dashed min-w-lg-600px flex-shrink-0 p-6'>
<KTIcon
iconName='chart-simple-3coding/cod004.svg'
className='fs-2tx text-primary me-4'
/>
<div className='d-flex flex-stack flex-grow-1 flex-wrap flex-md-nowrap'>
<div className='mb-3 mb-md-0 fw-bold'>
<h4 className='text-gray-800 fw-bolder'>Database Backup Process Completed!</h4>
<div className='fs-6 text-gray-600 pe-7'>
Login into Metronic Admin Dashboard to make sure the data integrity is OK
</div>
</div>
<a href='#' className='btn btn-primary px-6 align-self-center text-nowrap'>
Proceed
</a>
</div>
</div>
</div>
</div>
</div>
)
}
export {Item7}
@@ -0,0 +1,39 @@
import {FC} from 'react'
import {KTIcon} from '../../../helpers'
const Item8: FC = () => {
return (
<div className='timeline-item'>
<div className='timeline-line w-40px'></div>
<div className='timeline-icon symbol symbol-circle symbol-40px'>
<div className='symbol-label bg-light'>
<KTIcon iconName='basket' className='fs-2 text-gray-500' />
</div>
</div>
<div className='timeline-content mt-n1'>
<div className='pe-3 mb-5'>
<div className='fs-5 fw-bold mb-2'>
New order{' '}
<a href='#' className='text-primary fw-bolder me-1'>
#67890
</a>
is placed for Workshow Planning & Budget Estimation
</div>
<div className='d-flex align-items-center mt-1 fs-6'>
<div className='text-muted me-2 fs-7'>Placed at 4:23 PM by</div>
<a href='#' className='text-primary fw-bolder me-1'>
Jimmy Bold
</a>
</div>
</div>
</div>
</div>
)
}
export {Item8}
@@ -0,0 +1,68 @@
import {FC} from 'react'
import {toAbsoluteUrl} from '../../../helpers'
type Props = {
color?: string
avatar?: string
online?: boolean
name: string
job: string
avgEarnings: string
totalEarnings: string
}
const Card1: FC<Props> = ({
color = '',
avatar = '',
online = false,
name,
job,
avgEarnings,
totalEarnings,
}) => {
return (
<div className='card'>
<div className='card-body d-flex flex-center flex-column p-9'>
<div className='mb-5'>
<div className='symbol symbol-75px symbol-circle'>
{color ? (
<span className={`symbol-label bg-light-${color} text-${color} fs-5 fw-bolder`}>
{name.charAt(0)}
</span>
) : (
<img alt='Pic' src={toAbsoluteUrl(avatar)} />
)}
{online && (
<div className='symbol-badge bg-success start-100 top-100 border-4 h-15px w-15px ms-n3 mt-n3'></div>
)}
</div>
</div>
<a href='#' className='fs-4 text-gray-800 text-hover-primary fw-bolder mb-0'>
{name}
</a>
<div className='fw-bold text-gray-500 mb-6'>{job}</div>
<div className='d-flex flex-center flex-wrap mb-5'>
<div className='border border-gray-300 border-dashed rounded min-w-125px py-3 px-4 mx-3 mb-3'>
<div className='fs-6 fw-bolder text-gray-700'>{avgEarnings}</div>
<div className='fw-bold text-gray-500'>Avg. Earnings</div>
</div>
<div className='border border-gray-300 border-dashed rounded min-w-125px py-3 mx-3 px-4 mb-3'>
<div className='fs-6 fw-bolder text-gray-700'>{totalEarnings}</div>
<div className='fw-bold text-gray-500'>Total Sales</div>
</div>
</div>
<button className='btn btn-sm btn-light-primary fw-bolder' id='kt_drawer_chat_toggle'>
Send Message
</button>
</div>
</div>
)
}
export {Card1}
@@ -0,0 +1,87 @@
import {FC} from 'react'
import {Link} from 'react-router-dom'
import {IconUserModel} from '../../../../app/modules/profile/ProfileModels'
import {UsersList} from '../../../../app/modules/profile/components/UsersList'
import {toAbsoluteUrl} from '../../../helpers'
type Props = {
icon: string
badgeColor: string
status: string
statusColor: string
title: string
description: string
date: string
budget: string
progress: number
users?: Array<IconUserModel>
}
const Card2: FC<Props> = ({
icon,
badgeColor,
status,
statusColor,
title,
description,
date,
budget,
progress,
users = undefined,
}) => {
return (
<Link
to='/crafted/pages/profile/overview'
className='card border border-2 border-gray-300 border-hover'
>
<div className='card-header border-0 pt-9'>
<div className='card-title m-0'>
<div className='symbol symbol-50px w-50px bg-light'>
<img src={toAbsoluteUrl(icon)} alt='card2' className='p-3' />
</div>
</div>
<div className='card-toolbar'>
<span className={`badge badge-light-${badgeColor} fw-bolder me-auto px-4 py-3`}>
{status}
</span>
</div>
</div>
<div className='card-body p-9'>
<div className='fs-3 fw-bolder text-gray-900'>{title}</div>
<p className='text-gray-500 fw-bold fs-5 mt-1 mb-7'>{description}</p>
<div className='d-flex flex-wrap mb-5'>
<div className='border border-gray-300 border-dashed rounded min-w-125px py-3 px-4 me-7 mb-3'>
<div className='fs-6 text-gray-800 fw-bolder'>{date}</div>
<div className='fw-bold text-gray-500'>Due Date</div>
</div>
<div className='border border-gray-300 border-dashed rounded min-w-125px py-3 px-4 mb-3'>
<div className='fs-6 text-gray-800 fw-bolder'>{budget}</div>
<div className='fw-bold text-gray-500'>Budget</div>
</div>
</div>
<div
className='h-4px w-100 bg-light mb-5'
data-bs-toggle='tooltip'
title='This project completed'
>
<div
className={`bg-${statusColor} rounded h-4px`}
role='progressbar'
style={{width: `${progress}%`}}
></div>
</div>
<UsersList users={users} />
</div>
</Link>
)
}
export {Card2}
@@ -0,0 +1,69 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
type Props = {
color?: string
avatar?: string
online?: boolean
name: string
job: string
avgEarnings: string
totalEarnings: string
}
const Card3: FC<Props> = ({
color = '',
avatar = '',
online = false,
name,
job,
avgEarnings,
totalEarnings,
}) => {
return (
<div className='card'>
<div className='card-body d-flex flex-center flex-column p-9'>
<div className='mb-5'>
<div className='symbol symbol-75px symbol-circle'>
{color ? (
<span className={`symbol-label bg-light-${color} text-${color} fs-5 fw-bolder`}>
{name.charAt(0)}
</span>
) : (
<img alt='Pic' src={toAbsoluteUrl(avatar)} />
)}
{online && (
<div className='symbol-badge bg-success start-100 top-100 border-4 h-15px w-15px ms-n3 mt-n3'></div>
)}
</div>
</div>
<a href='#' className='fs-4 text-gray-800 text-hover-primary fw-bolder mb-0'>
{name}
</a>
<div className='fw-bold text-gray-500 mb-6'>{job}</div>
<div className='d-flex flex-center flex-wrap mb-5'>
<div className='border border-gray-300 border-dashed rounded min-w-125px py-3 px-4 mx-3 mb-3'>
<div className='fs-6 fw-bolder text-gray-700'>{avgEarnings}</div>
<div className='fw-bold text-gray-500'>Avg. Earnings</div>
</div>
<div className='border border-gray-300 border-dashed rounded min-w-125px py-3 mx-3 px-4 mb-3'>
<div className='fs-6 fw-bolder text-gray-700'>{totalEarnings}</div>
<div className='fw-bold text-gray-500'>Total Sales</div>
</div>
</div>
<a href='#' className='btn btn-sm btn-light'>
<KTIcon iconName='plus' className='fs-3' />
Connect
</a>
</div>
</div>
)
}
export {Card3}
@@ -0,0 +1,27 @@
import {FC} from 'react'
import {toAbsoluteUrl} from '../../../helpers'
type Props = {
icon: string
title: string
description: string
}
const Card4: FC<Props> = ({icon, title, description}) => {
return (
<div className='card h-100'>
<div className='card-body d-flex justify-content-center text-center flex-column p-8'>
<a href='#' className='text-gray-800 text-hover-primary d-flex flex-column'>
<div className='symbol symbol-75px mb-6'>
<img src={toAbsoluteUrl(icon)} alt='' />
</div>
<div className='fs-5 fw-bolder mb-2'>{title}</div>
</a>
<div className='fs-7 fw-bold text-gray-500 mt-auto'>{description}</div>
</div>
</div>
)
}
export {Card4}
@@ -0,0 +1,84 @@
import {FC} from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../dropdown/Dropdown1'
type Props = {
image: string
title: string
description: string
status: 'up' | 'down'
statusValue: number
statusDesc: string
progress: number
progressType: string
}
const Card5: FC<Props> = ({
image,
title,
description,
status,
statusValue,
statusDesc,
progress,
progressType,
}) => {
return (
<div className='card h-100'>
<div className='card-header flex-nowrap border-0 pt-9'>
<div className='card-title m-0'>
<div className='symbol symbol-45px w-45px bg-light me-5'>
<img src={toAbsoluteUrl(image)} alt='Metronic' className='p-3' />
</div>
<a href='#' className='fs-4 fw-bold text-hover-primary text-gray-600 m-0'>
{title}
</a>
</div>
<div className='card-toolbar m-0'>
<button
type='button'
className='btn btn-clean btn-sm btn-icon btn-icon-primary btn-active-light-primary me-n3'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-3 text-primary' />
</button>
<Dropdown1 />
</div>
</div>
<div className='card-body d-flex flex-column px-9 pt-6 pb-8'>
<div className='fs-2tx fw-bolder mb-3'>{description}</div>
<div className='d-flex align-items-center flex-wrap mb-5 mt-auto fs-6'>
{status === 'up' && (
<KTIcon iconName='arrow-up-right' className='fs-3 me-1 text-success' />
)}
{status === 'down' && (
<KTIcon iconName='arrow-down-right' className='fs-3 me-1 text-danger' />
)}
<div className={`fw-bolder me-2 ` + (status === 'up' ? 'text-success' : 'text-danger')}>
{status === 'up' ? '+' : '-'}
{statusValue}%
</div>
<div className='fw-bold text-gray-500'>{statusDesc}</div>
</div>
<div className='d-flex align-items-center fw-bold'>
<span className='badge bg-light text-gray-700 px-3 py-2 me-2'>{progress}%</span>
<span className='text-gray-500 fs-7'>{progressType}</span>
</div>
</div>
</div>
)
}
export {Card5}
@@ -0,0 +1,72 @@
import {useState, useEffect, useRef, FC} from 'react'
import {CopyToClipboard} from 'react-copy-to-clipboard'
import {Highlight} from 'prism-react-renderer'
import {OverlayTrigger, Tooltip} from 'react-bootstrap'
type Props = {
code: string
language: string
}
const CodeBlock: FC<Props> = ({code, language}) => {
const codeRef = useRef<HTMLDivElement | null>(null)
const [copied, setCopied] = useState(false)
useEffect(() => {
if (!copied) {
return
}
setTimeout(() => {
setCopied(false)
}, 1500)
}, [copied])
useEffect(() => {
if (!codeRef.current) {
return
}
const prismCodeElement = codeRef.current.querySelector('.prism-code ') as HTMLDivElement
if (prismCodeElement) {
prismCodeElement.style.background = 'none'
prismCodeElement.style.fontSize = '13px'
}
}, [])
return (
<div className='py-5'>
<div className='highlight'>
<OverlayTrigger
key='copy-to-clipboard'
placement='top'
overlay={<Tooltip id='tooltip-copy-to-clipboard'>Copy Code</Tooltip>}
>
<CopyToClipboard text={code} onCopy={() => setCopied(true)}>
<a className='highlight-copy btn'>{copied ? 'copied' : 'copy'}</a>
</CopyToClipboard>
</OverlayTrigger>
<div className='highlight-code' ref={codeRef}>
<Highlight code={code} language={language}>
{({className, style, tokens, getLineProps, getTokenProps}) => {
return (
<pre className={className} style={{maxHeight: '300px', ...style}}>
{tokens.map((line, i) => (
<div {...getLineProps({line, key: i})}>
{line.map((token, key) => (
<span {...getTokenProps({token, key})} />
))}
</div>
))}
</pre>
)
}}
</Highlight>
</div>
</div>
</div>
)
}
export {CodeBlock}
@@ -0,0 +1,79 @@
export function Dropdown1() {
return (
<div className='menu menu-sub menu-sub-dropdown w-250px w-md-300px' data-kt-menu='true'>
<div className='px-7 py-5'>
<div className='fs-5 text-gray-900 fw-bolder'>Filter Options</div>
</div>
<div className='separator border-gray-200'></div>
<div className='px-7 py-5'>
<div className='mb-10'>
<label className='form-label fw-bold'>Status:</label>
<div>
<select
className='form-select form-select-solid'
data-kt-select2='true'
data-placeholder='Select option'
data-allow-clear='true'
defaultValue={'1'}
>
<option></option>
<option value='1'>Approved</option>
<option value='2'>Pending</option>
<option value='3'>In Process</option>
<option value='4'>Rejected</option>
</select>
</div>
</div>
<div className='mb-10'>
<label className='form-label fw-bold'>Member Type:</label>
<div className='d-flex'>
<label className='form-check form-check-sm form-check-custom form-check-solid me-5'>
<input className='form-check-input' type='checkbox' value='1' />
<span className='form-check-label'>Author</span>
</label>
<label className='form-check form-check-sm form-check-custom form-check-solid'>
<input className='form-check-input' type='checkbox' value='2' defaultChecked={true} />
<span className='form-check-label'>Customer</span>
</label>
</div>
</div>
<div className='mb-10'>
<label className='form-label fw-bold'>Notifications:</label>
<div className='form-check form-switch form-switch-sm form-check-custom form-check-solid'>
<input
className='form-check-input'
type='checkbox'
value=''
name='notifications'
defaultChecked={true}
/>
<label className='form-check-label'>Enabled</label>
</div>
</div>
<div className='d-flex justify-content-end'>
<button
type='reset'
className='btn btn-sm btn-light btn-active-light-primary me-2'
data-kt-menu-dismiss='true'
>
Reset
</button>
<button type='submit' className='btn btn-sm btn-primary' data-kt-menu-dismiss='true'>
Apply
</button>
</div>
</div>
</div>
)
}
@@ -0,0 +1,79 @@
import {FC} from 'react'
const Dropdown2: FC = () => {
return (
<div
className='menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-bold w-200px'
data-kt-menu='true'
>
<div className='menu-item px-3'>
<div className='menu-content fs-6 text-gray-900 fw-bolder px-3 py-4'>Quick Actions</div>
</div>
<div className='separator mb-3 opacity-75'></div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
New Ticket
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
New Customer
</a>
</div>
<div
className='menu-item px-3'
data-kt-menu-trigger='hover'
data-kt-menu-placement='right-start'
data-kt-menu-flip='left-start, top'
>
<a href='#' className='menu-link px-3'>
<span className='menu-title'>New Group</span>
<span className='menu-arrow'></span>
</a>
<div className='menu-sub menu-sub-dropdown w-175px py-4'>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Admin Group
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Staff Group
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Member Group
</a>
</div>
</div>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
New Contact
</a>
</div>
<div className='separator mt-3 opacity-75'></div>
<div className='menu-item px-3'>
<div className='menu-content px-3 py-3'>
<a className='btn btn-primary btn-sm px-4' href='#'>
Generate Reports
</a>
</div>
</div>
</div>
)
}
export {Dropdown2}
@@ -0,0 +1,96 @@
import {FC} from 'react'
const Dropdown3: FC = () => {
return (
<div
className='menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary fw-bold w-200px py-3'
data-kt-menu='true'
>
<div className='menu-item px-3'>
<div className='menu-content text-muted pb-2 px-3 fs-7 text-uppercase'>Payments</div>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Create Invoice
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link flex-stack px-3'>
Create Payment
<i
className='fas fa-exclamation-circle ms-2 fs-7'
data-bs-toggle='tooltip'
title='Specify a target name for future usage and reference'
></i>
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Generate Bill
</a>
</div>
<div
className='menu-item px-3'
data-kt-menu-trigger='hover'
data-kt-menu-placement='left-start'
data-kt-menu-flip='center, top'
>
<a href='#' className='menu-link px-3'>
<span className='menu-title'>Subscription</span>
<span className='menu-arrow'></span>
</a>
<div className='menu-sub menu-sub-dropdown w-175px py-4'>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Plans
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Billing
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-3'>
Statements
</a>
</div>
<div className='separator my-2'></div>
<div className='menu-item px-3'>
<div className='menu-content px-3'>
<label className='form-check form-switch form-check-custom form-check-solid'>
<input
className='form-check-input w-30px h-20px'
type='checkbox'
value='1'
checked
name='notifications'
/>
<span className='form-check-label text-muted fs-6'>Recuring</span>
</label>
</div>
</div>
</div>
</div>
<div className='menu-item px-3 my-1'>
<a href='#' className='menu-link px-3'>
Settings
</a>
</div>
</div>
)
}
export {Dropdown3}
@@ -0,0 +1,52 @@
export const editorToolbarSettings = {
options: ['inline', 'fontSize', 'fontFamily', 'link', 'image'],
inline: {
inDropdown: false,
className: undefined,
component: undefined,
dropdownClassName: undefined,
options: ['bold', 'italic', 'underline', 'strikethrough'],
},
fontSize: {
options: [8, 9, 10, 11, 12, 14, 16, 18, 24, 30, 36, 48, 60, 72, 96],
className: undefined,
component: undefined,
dropdownClassName: undefined,
},
fontFamily: {
options: ['Arial', 'Georgia', 'Impact', 'Tahoma', 'Times New Roman', 'Verdana'],
className: undefined,
component: undefined,
dropdownClassName: undefined,
},
link: {
inDropdown: false,
className: undefined,
component: undefined,
popupClassName: undefined,
dropdownClassName: undefined,
showOpenOptionOnHover: true,
defaultTargetOption: '_self',
options: ['link', 'unlink'],
link: {className: undefined},
unlink: {className: undefined},
linkCallback: undefined,
},
image: {
className: undefined,
component: undefined,
popupClassName: undefined,
urlEnabled: true,
uploadEnabled: true,
alignmentEnabled: true,
uploadCallback: undefined,
previewImage: false,
inputAccept: 'image/gif,image/jpeg,image/jpg,image/png,image/svg',
alt: {present: false, mandatory: false},
defaultSize: {
height: 'auto',
width: 'auto',
},
},
}
@@ -0,0 +1,27 @@
import {FC, useState, useEffect} from 'react'
import {createPortal} from 'react-dom'
import {WithChildren} from '../../../helpers'
/**
* React portal based on https://stackoverflow.com/a/59154364
* @param children Child elements
* @param className CSS classname
* @param el HTML element to create. default: div
*/
const Portal: FC<{className?: string} & WithChildren> = ({children, className = ''}) => {
const [container] = useState(document.createElement('div'))
if (className) container.classList.add(className)
useEffect(() => {
document.body.appendChild(container)
return () => {
document.body.removeChild(container)
}
}, [container])
return createPortal(children, container)
}
export {Portal}
+32
View File
@@ -0,0 +1,32 @@
export * from './layout/quick-links/QuicLinks'
export * from './layout/search/Search'
export * from './layout/search/SearchInner'
export * from './layout/SearchModal'
export * from './layout/InboxCompose'
export * from './layout/header-menus/HeaderUserMenu'
export * from './layout/header-menus/HeaderNotificationsMenu'
export * from './layout/drawer-messenger/DrawerMessenger'
export * from './layout/activity-drawer/ActivityDrawer'
export * from './layout/create-app/CreateApp'
export * from './layout/theme-mode/ThemeModeProvider'
export * from './layout/theme-mode/ThemeModeSwitcher'
// dropdpwns
export * from './content/dropdown/Dropdown1'
export * from './content/dropdown/Dropdown2'
// editors
export * from './content/editor/EditorToolbar'
export * from './content/code-highlight/CodeBlock'
export * from './content/portal/Portal'
// modals
export * from './modals/create-app-stepper/CreateAppModal'
export * from './modals/select-location/SelectLocationModal'
export * from './modals/invite-users/InviteUsers'
export * from './modals/upgrade-plan/UpgradePlan'
// chat
export * from './chat/ChatInner'
@@ -0,0 +1,218 @@
import {useRef, useState, FC } from 'react'
import {Modal} from 'react-bootstrap'
import {KTIcon} from '../../helpers'
export type Props = {
show: boolean
handleClose: () => void
}
const InboxCompose: FC<Props> = ({show, handleClose}) => {
const composeToRef = useRef<HTMLInputElement | null>(null)
const formRef = useRef<HTMLFormElement | null>(null)
const [composeCC, setComposeCC] = useState('')
const [composeBCC, setComposeBCC] = useState('')
const [subject, setSubject] = useState('')
return (
<Modal
className='modal-sticky modal-sticky-lg modal-sticky-bottom-right'
id='kt_inbox_compose'
role='dialog'
data-backdrop='false'
aria-hidden='true'
tabIndex='-1'
show={show}
animation={false}
>
<div className='modal-content'>
{/* begin::Form */}
<form ref={formRef} id='kt_inbox_compose_form' onSubmit={() => console.log('submit')}>
{/*begin::Header*/}
<div className='d-flex align-items-center justify-content-between py-5 ps-8 pe-5 border-bottom'>
<h5 className='fw-bold m-0'>Compose</h5>
<div className='d-flex ms-2'>
{/*begin::Close*/}
<div
className='btn btn-icon btn-sm btn-light-primary ms-2'
data-bs-dismiss='modal'
onClick={handleClose}
>
<KTIcon className='fs-1' iconName='cross' />
</div>
{/*end::Close*/}
</div>
</div>
{/*end::Header*/}
{/*begin::Body*/}
<div className='d-block'>
{/*begin::To*/}
<div className='d-flex align-items-center border-bottom inbox-to px-8 min-h-45px'>
<div className='text-gray-600 w-75px'>To:</div>
<div className='d-flex align-items-center flex-grow-1'>
<input
type='text'
className='form-control border-0'
name='compose_to'
ref={composeToRef}
/>
</div>
<div className='ms-2'>
<span
className='text-muted fw-bold cursor-pointer text-hover-primary me-2'
data-inbox='cc-show'
>
Cc
</span>
<span
className='text-muted fw-bold cursor-pointer text-hover-primary'
data-inbox='bcc-show'
>
Bcc
</span>
</div>
</div>
{/*end::To*/}
{/*begin::CC*/}
<div className='d-none align-items-center border-bottom inbox-to-cc ps-8 pe-5 min-h-45px'>
<div className='text-gray-600 w-75px'>Cc:</div>
<div className='flex-grow-1'>
<input
type='text'
className='form-control border-0'
name='compose_cc'
value={composeCC}
onChange={(e) => setComposeCC(e.target.value)}
/>
</div>
<span className='btn btn-active-light-primary btn-sm btn-icon' data-inbox='cc-hide'>
<i className='la la-close '></i>
</span>
</div>
{/*end::CC*/}
{/*begin::BCC*/}
<div className='d-none align-items-center border-bottom inbox-to-bcc ps-8 pe-5 min-h-45px'>
<div className='text-gray-600 w-75px'>Bcc:</div>
<div className='flex-grow-1'>
<input
type='text'
className='form-control border-0'
name='compose_bcc'
value={composeBCC}
onChange={(e) => setComposeBCC(e.target.value)}
/>
</div>
<span className='btn btn-active-light-primary btn-sm btn-icon' data-inbox='bcc-hide'>
<i className='la la-close '></i>
</span>
</div>
{/*end::BCC*/}
{/*begin::Subject*/}
<div className='border-bottom'>
<input
className='form-control border-0 px-8 min-h-45px'
name='compose_subject'
placeholder='Subject'
value={subject}
onChange={(e) => setSubject(e.target.value)}
/>
</div>
{/*end::Subject*/}
{/*begin::Message*/}
<div id='kt_inbox_compose_editor' className='border-0 h-125px h-lg-250px'></div>
{/*end::Message*/}
{/*begin::Attachments*/}
<div className='dropzone dropzone-multi px-8 py-4' id='kt_inbox_compose_attachments'>
<div className='dropzone-items'>
<div className='dropzone-item' style={{display: 'none'}}>
<div className='dropzone-file'>
<div className='dropzone-filename' title='some_image_file_name.jpg'>
<span data-dz-name>some_image_file_name.jpg</span>{' '}
<strong>
(<span data-dz-size>340kb</span>)
</strong>
</div>
<div className='dropzone-error' data-dz-errormessage></div>
</div>
<div className='dropzone-progress'>
<div className='progress'>
<div
className='progress-bar bg-primary'
role='progressbar'
aria-valuemin={0}
aria-valuemax={100}
aria-valuenow={0}
data-dz-uploadprogress
></div>
</div>
</div>
<div className='dropzone-toolbar'>
<span className='dropzone-delete' data-dz-remove>
{/*begin::Close*/}
<span
className='btn btn-icon btn-sm btn-active-light-primary ms-2'
data-bs-dismiss='modal'
>
<KTIcon className='fs-1' iconName='cross' />
</span>
{/*end::Close*/}
</span>
</div>
</div>
</div>
</div>
{/*end::Attachments*/}
</div>
{/*end::Body*/}
{/*begin::Footer*/}
<div className='d-flex align-items-center justify-content-between py-5 ps-8 pe-5 border-top'>
{/*begin::Actions*/}
<div className='d-flex align-items-center me-3'>
{/*begin::Send*/}
<button className='btn btn-primary me-4 px-6'>Send</button>
{/*end::Send*/}
{/*begin::Other*/}
<a
href='#'
className='btn btn-icon btn-active-light-primary me-2'
id='kt_inbox_compose_attachments_select'
>
<KTIcon className='fs-1' iconName='cloud-add' />
</a>
<a href='#' className='btn btn-icon btn-active-light-primary'>
<KTIcon className='fs-1' iconName='geolocation' />
</a>
{/*end::Other*/}
</div>
{/*end::Actions*/}
{/*begin::Toolbar*/}
<div className='d-flex align-items-center'>
<button
className='btn btn-icon btn-active-light-primary me-2'
data-bs-toggle='tooltip'
title='More actions'
>
<KTIcon className='fs-1' iconName='setting-2' />
</button>
</div>
{/*end::Toolbar*/}
</div>
{/*end::Footer*/}
</form>
{/*end::Form*/}
</div>
</Modal>
)
}
export {InboxCompose}
@@ -0,0 +1,19 @@
import {FC} from 'react'
import {ToggleHelpDrawer} from './help-drawer/ToggleHelpDrawer'
import {HelpDrawer} from './help-drawer/HelpDrawer'
import {PurchaseButton} from './purchase/PurchaseButton'
const RightToolbar: FC = () => {
return (
<>
<div className='engage-toolbar d-flex position-fixed px-5 fw-bolder zindex-2 top-50 end-0 transform-90 mt-20 gap-2'>
<ToggleHelpDrawer />
<PurchaseButton />
</div>
<HelpDrawer />
</>
)
}
export {RightToolbar}
+152
View File
@@ -0,0 +1,152 @@
import { FC } from 'react'
import {Modal} from 'react-bootstrap'
import {KTIcon, toAbsoluteUrl} from '../../helpers'
// import {ListsWidget4, ListsWidget5} from '../widgets'
type Props = {
show: boolean
handleClose: () => void
}
const SearchModal: FC<Props> = ({show, handleClose}) => {
return (
<Modal
className='bg-body'
id='kt_header_search_modal'
aria-hidden='true'
dialogClassName='modal-fullscreen h-auto'
show={show}
>
<div className='modal-content shadow-none'>
<div className='container-xxl w-lg-800px'>
<div className='modal-header d-flex justify-content-end border-0'>
{/* begin::Close */}
<div className='btn btn-icon btn-sm btn-light-primary ms-2' onClick={handleClose}>
<KTIcon className='fs-2' iconName='cross' />
</div>
{/* end::Close */}
</div>
<div className='modal-body'>
{/* begin::Search */}
<form className='pb-10'>
<input
autoFocus
type='text'
className='form-control bg-transparent border-0 fs-4x text-center fw-normal'
name='query'
placeholder='Search...'
/>
</form>
{/* end::Search */}
{/* begin::Shop Goods */}
<div className='py-10'>
<h3 className='fw-bolder mb-8'>Shop Goods</h3>
{/* begin::Row */}
<div className='row g-5'>
<div className='col-sm-6'>
<div className='row g-5'>
<div className='col-sm-6'>
<div className='card card-custom overlay min-h-125px mb-5 shadow-none'>
<div className='card-body d-flex flex-column p-0'>
<div
className='overlay-wrapper flex-grow-1 bgi-no-repeat bgi-size-cover bgi-position-center card-rounded'
style={{
backgroundImage: `url('${toAbsoluteUrl(
'media/stock/600x400/img-17.jpg'
)}')`,
}}
/>
<div className='overlay-layer bg-body bg-opacity-50'>
<a href='#' className='btn btn-sm fw-bold btn-primary'>
Explore
</a>
</div>
</div>
</div>
<div className='card card-custom overlay min-h-125px mb-5 shadow-none'>
<div className='card-body d-flex flex-column p-0'>
<div
className='overlay-wrapper flex-grow-1 bgi-no-repeat bgi-size-cover bgi-position-center card-rounded'
style={{
backgroundImage: `url('${toAbsoluteUrl(
'media/stock/600x400/img-1.jpg'
)}')`,
}}
/>
<div className='overlay-layer bg-body bg-opacity-50'>
<a href='#' className='btn btn-sm fw-bold btn-primary'>
Explore
</a>
</div>
</div>
</div>
</div>
<div className='col-sm-6'>
<div className='card card-custom card-stretch overlay mb-5 shadow-none min-h-250px'>
<div className='card-body d-flex flex-column p-0'>
<div
className='overlay-wrapper flex-grow-1 bgi-no-repeat bgi-size-cover bgi-position-center card-rounded'
style={{
backgroundImage: `url('${toAbsoluteUrl(
'media/stock/600x400/img-23.jpg'
)}')`,
}}
/>
<div className='overlay-layer bg-body bg-opacity-50'>
<a href='#' className='btn btn-sm fw-bold btn-primary'>
Explore
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div className='col-sm-6'>
<div className='card card-custom card-stretch overlay mb-5 shadow-none min-h-250px'>
<div className='card-body d-flex flex-column p-0'>
<div
className='overlay-wrapper flex-grow-1 bgi-no-repeat bgi-size-cover bgi-position-center card-rounded'
style={{
backgroundImage: `url('${toAbsoluteUrl(
'media/stock/600x400/img-11.jpg'
)}')`,
}}
></div>
<div className='overlay-layer bg-body bg-opacity-50'>
<a href='#' className='btn btn-sm fw-bold btn-primary'>
Explore
</a>
</div>
</div>
</div>
</div>
</div>
{/* end::Row */}
</div>
{/* end::Shop Goods */}
{/* begin::Framework Users */}
<div>
<h3 className='text-gray-900 fw-bolder fs-1 mb-6'>Framework Users</h3>
{/*<ListsWidget4 className='bg-transparent mb-5 shadow-none' innerPadding='px-0' />*/}
</div>
{/* end::Framework Users */}
{/* begin::Tutorials */}
<div className='pb-10'>
<h3 className='text-gray-900 fw-bolder fs-1 mb-6'>Tutorials</h3>
{/*<ListsWidget5 className='mb-5 shadow-none' innerPadding='px-0' />*/}
</div>
{/* end::Tutorials */}
</div>
</div>
</div>
</Modal>
)
}
export {SearchModal}
@@ -0,0 +1,72 @@
import {FC} from 'react'
import {Link} from 'react-router-dom'
import {KTIcon} from '../../../helpers'
import {Item1} from '../../content/activity/Item1'
import {Item2} from '../../content/activity/Item2'
import {Item3} from '../../content/activity/Item3'
import {Item4} from '../../content/activity/Item4'
import {Item5} from '../../content/activity/Item5'
import {Item6} from '../../content/activity/Item6'
import {Item7} from '../../content/activity/Item7'
import {Item8} from '../../content/activity/Item8'
const ActivityDrawer: FC = () => (
<div
id='kt_activities'
className='bg-body'
data-kt-drawer='true'
data-kt-drawer-name='activities'
data-kt-drawer-activate='true'
data-kt-drawer-overlay='true'
data-kt-drawer-width="{default:'300px', 'lg': '900px'}"
data-kt-drawer-direction='end'
data-kt-drawer-toggle='#kt_activities_toggle'
data-kt-drawer-close='#kt_activities_close'
>
<div className='card shadow-none rounded-0'>
<div className='card-header' id='kt_activities_header'>
<h3 className='card-title fw-bolder text-gray-900'>Activity Logs</h3>
<div className='card-toolbar'>
<button
type='button'
className='btn btn-sm btn-icon btn-active-light-primary me-n5'
id='kt_activities_close'
>
<KTIcon iconName='cross' className='fs-1' />
</button>
</div>
</div>
<div className='card-body position-relative' id='kt_activities_body'>
<div
id='kt_activities_scroll'
className='position-relative scroll-y me-n5 pe-5'
data-kt-scroll='true'
data-kt-scroll-height='auto'
data-kt-scroll-wrappers='#kt_activities_body'
data-kt-scroll-dependencies='#kt_activities_header, #kt_activities_footer'
data-kt-scroll-offset='5px'
>
<div className='timeline'>
<Item1 />
<Item2 />
<Item3 />
<Item4 />
<Item5 />
<Item6 />
<Item7 />
<Item8 />
</div>
</div>
</div>
<div className='card-footer py-5 text-center' id='kt_activities_footer'>
<Link to='/crafted/pages/profile' className='btn btn-bg-body text-primary'>
View All Activities
<KTIcon iconName='arrow-right' className='fs-3 text-primary' />
</Link>
</div>
</div>
</div>
)
export {ActivityDrawer}
@@ -0,0 +1,7 @@
import { FC } from 'react'
const CreateApp: FC = () => {
return <></>
}
export {CreateApp}
@@ -0,0 +1,57 @@
import {FC} from 'react'
import {KTIcon} from '../../../helpers'
import {ChatInner} from '../../chat/ChatInner'
const DrawerMessenger: FC = () => (
<div
id='kt_drawer_chat'
className='bg-body'
data-kt-drawer='true'
data-kt-drawer-name='chat'
data-kt-drawer-activate='true'
data-kt-drawer-overlay='true'
data-kt-drawer-width="{default:'300px', 'md': '500px'}"
data-kt-drawer-direction='end'
data-kt-drawer-toggle='#kt_drawer_chat_toggle'
data-kt-drawer-close='#kt_drawer_chat_close'
>
<div className='card w-100 rounded-0' id='kt_drawer_chat_messenger'>
<div className='card-header pe-5' id='kt_drawer_chat_messenger_header'>
<div className='card-title'>
<div className='d-flex justify-content-center flex-column me-3'>
<a href='#' className='fs-4 fw-bolder text-gray-900 text-hover-primary me-1 mb-2 lh-1'>
Brian Cox
</a>
<div className='mb-0 lh-1'>
<span className='badge badge-success badge-circle w-10px h-10px me-1'></span>
<span className='fs-7 fw-bold text-gray-500'>Active</span>
</div>
</div>
</div>
<div className='card-toolbar'>
<div className='me-2'>
<button
className='btn btn-sm btn-icon btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<i className='bi bi-three-dots fs-3'></i>
</button>
</div>
<div className='btn btn-sm btn-icon btn-active-light-primary' id='kt_drawer_chat_close'>
<KTIcon iconName='cross' className='fs-2' />
</div>
</div>
</div>
<ChatInner isDrawer={true} />
</div>
</div>
)
export {DrawerMessenger}
@@ -0,0 +1,153 @@
import clsx from 'clsx'
import {FC} from 'react'
import {Link} from 'react-router-dom'
import {
defaultAlerts,
defaultLogs,
KTIcon,
toAbsoluteUrl,
useIllustrationsPath,
} from '../../../helpers'
const HeaderNotificationsMenu: FC = () => (
<div
className='menu menu-sub menu-sub-dropdown menu-column w-350px w-lg-375px'
data-kt-menu='true'
>
<div
className='d-flex flex-column bgi-no-repeat rounded-top'
style={{backgroundImage: `url('${toAbsoluteUrl('media/misc/menu-header-bg.jpg')}')`}}
>
<h3 className='text-white fw-bold px-9 mt-10 mb-6'>
Notifications <span className='fs-8 opacity-75 ps-3'>24 reports</span>
</h3>
<ul className='nav nav-line-tabs nav-line-tabs-2x nav-stretch fw-bold px-9'>
<li className='nav-item'>
<a
className='nav-link text-white opacity-75 opacity-state-100 pb-4'
data-bs-toggle='tab'
href='#kt_topbar_notifications_1'
>
Alerts
</a>
</li>
<li className='nav-item'>
<a
className='nav-link text-white opacity-75 opacity-state-100 pb-4 active'
data-bs-toggle='tab'
href='#kt_topbar_notifications_2'
>
Updates
</a>
</li>
<li className='nav-item'>
<a
className='nav-link text-white opacity-75 opacity-state-100 pb-4'
data-bs-toggle='tab'
href='#kt_topbar_notifications_3'
>
Logs
</a>
</li>
</ul>
</div>
<div className='tab-content'>
<div className='tab-pane fade' id='kt_topbar_notifications_1' role='tabpanel'>
<div className='scroll-y mh-325px my-5 px-8'>
{defaultAlerts.map((alert, index) => (
<div key={`alert${index}`} className='d-flex flex-stack py-4'>
<div className='d-flex align-items-center'>
<div className='symbol symbol-35px me-4'>
<span className={clsx('symbol-label', `bg-light-${alert.state}`)}>
{' '}
<KTIcon iconName={alert.icon} className={`fs-2 text-${alert.state}`} />
</span>
</div>
<div className='mb-0 me-2'>
<a href='#' className='fs-6 text-gray-800 text-hover-primary fw-bolder'>
{alert.title}
</a>
<div className='text-gray-500 fs-7'>{alert.description}</div>
</div>
</div>
<span className='badge badge-light fs-8'>{alert.time}</span>
</div>
))}
</div>
<div className='py-3 text-center border-top'>
<Link
to='/crafted/pages/profile'
className='btn btn-color-gray-600 btn-active-color-primary'
>
View All <KTIcon iconName='arrow-right' className='fs-5' />
</Link>
</div>
</div>
<div className='tab-pane fade show active' id='kt_topbar_notifications_2' role='tabpanel'>
<div className='d-flex flex-column px-9'>
<div className='pt-10 pb-0'>
<h3 className='text-gray-900 text-center fw-bolder'>Get Pro Access</h3>
<div className='text-center text-gray-600 fw-bold pt-1'>
Outlines keep you honest. They stoping you from amazing poorly about drive
</div>
<div className='text-center mt-5 mb-9'>
<a
href='#'
className='btn btn-sm btn-primary px-6'
data-bs-toggle='modal'
data-bs-target='#kt_modal_upgrade_plan'
>
Upgrade
</a>
</div>
</div>
<div className='text-center px-4'>
<img className='mw-100 mh-200px' alt='metronic' src={useIllustrationsPath('1.png')} />
</div>
</div>
</div>
<div className='tab-pane fade' id='kt_topbar_notifications_3' role='tabpanel'>
<div className='scroll-y mh-325px my-5 px-8'>
{defaultLogs.map((log, index) => (
<div key={`log${index}`} className='d-flex flex-stack py-4'>
<div className='d-flex align-items-center me-2'>
<span className={clsx('w-70px badge', `badge-light-${log.state}`, 'me-4')}>
{log.code}
</span>
<a href='#' className='text-gray-800 text-hover-primary fw-bold'>
{log.message}
</a>
<span className='badge badge-light fs-8'>{log.time}</span>
</div>
</div>
))}
</div>
<div className='py-3 text-center border-top'>
<Link
to='/crafted/pages/profile'
className='btn btn-color-gray-600 btn-active-color-primary'
>
View All <KTIcon iconName='arrow-right' className='fs-5' />
</Link>
</div>
</div>
</div>
</div>
)
export {HeaderNotificationsMenu}
@@ -0,0 +1,135 @@
import {FC} from 'react'
import {Link} from 'react-router-dom'
import {useAuth} from '../../../../app/modules/auth'
import {Languages} from './Languages'
import {toAbsoluteUrl} from '../../../helpers'
const HeaderUserMenu: FC = () => {
const {currentUser, logout} = useAuth()
return (
<div
className='menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg menu-state-primary fw-bold py-4 fs-6 w-275px'
data-kt-menu='true'
>
<div className='menu-item px-3'>
<div className='menu-content d-flex align-items-center px-3'>
<div className='symbol symbol-50px me-5'>
<img alt='Logo' src={toAbsoluteUrl('media/avatars/300-3.jpg')} />
</div>
<div className='d-flex flex-column'>
<div className='fw-bolder d-flex align-items-center fs-5'>
{currentUser?.first_name} {currentUser?.first_name}
<span className='badge badge-light-success fw-bolder fs-8 px-2 py-1 ms-2'>Pro</span>
</div>
<a href='#' className='fw-bold text-muted text-hover-primary fs-7'>
{currentUser?.email}
</a>
</div>
</div>
</div>
<div className='separator my-2'></div>
<div className='menu-item px-5'>
<Link to={'/crafted/pages/profile'} className='menu-link px-5'>
My Profile
</Link>
</div>
<div className='menu-item px-5'>
<a href='#' className='menu-link px-5'>
<span className='menu-text'>My Projects</span>
<span className='menu-badge'>
<span className='badge badge-light-danger badge-circle fw-bolder fs-7'>3</span>
</span>
</a>
</div>
<div
className='menu-item px-5'
data-kt-menu-trigger='hover'
data-kt-menu-placement='left-start'
data-kt-menu-flip='bottom'
>
<a href='#' className='menu-link px-5'>
<span className='menu-title'>My Subscription</span>
<span className='menu-arrow'></span>
</a>
<div className='menu-sub menu-sub-dropdown w-175px py-4'>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-5'>
Referrals
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-5'>
Billing
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link px-5'>
Payments
</a>
</div>
<div className='menu-item px-3'>
<a href='#' className='menu-link d-flex flex-stack px-5'>
Statements
<i
className='fas fa-exclamation-circle ms-2 fs-7'
data-bs-toggle='tooltip'
title='View your statements'
></i>
</a>
</div>
<div className='separator my-2'></div>
<div className='menu-item px-3'>
<div className='menu-content px-3'>
<label className='form-check form-switch form-check-custom form-check-solid'>
<input
className='form-check-input w-30px h-20px'
type='checkbox'
value='1'
defaultChecked={true}
name='notifications'
/>
<span className='form-check-label text-muted fs-7'>Notifications</span>
</label>
</div>
</div>
</div>
</div>
<div className='menu-item px-5'>
<a href='#' className='menu-link px-5'>
My Statements
</a>
</div>
<div className='separator my-2'></div>
<Languages />
<div className='menu-item px-5 my-1'>
<Link to='/crafted/account/settings' className='menu-link px-5'>
Account Settings
</Link>
</div>
<div className='menu-item px-5'>
<a onClick={logout} className='menu-link px-5'>
Sign Out
</a>
</div>
</div>
)
}
export {HeaderUserMenu}
@@ -0,0 +1,89 @@
import clsx from 'clsx'
import {FC} from 'react'
import {toAbsoluteUrl} from '../../../helpers'
import {useLang, setLanguage} from '../../../i18n/Metronici18n'
const languages = [
{
lang: 'en',
name: 'English',
flag: toAbsoluteUrl('media/flags/united-states.svg'),
},
{
lang: 'zh',
name: 'Mandarin',
flag: toAbsoluteUrl('media/flags/china.svg'),
},
{
lang: 'es',
name: 'Spanish',
flag: toAbsoluteUrl('media/flags/spain.svg'),
},
{
lang: 'ja',
name: 'Japanese',
flag: toAbsoluteUrl('media/flags/japan.svg'),
},
{
lang: 'de',
name: 'German',
flag: toAbsoluteUrl('media/flags/germany.svg'),
},
{
lang: 'fr',
name: 'French',
flag: toAbsoluteUrl('media/flags/france.svg'),
},
]
const Languages: FC = () => {
const lang = useLang()
const currentLanguage = languages.find((x) => x.lang === lang)
return (
<div
className='menu-item px-5'
data-kt-menu-trigger='hover'
data-kt-menu-placement='left-start'
data-kt-menu-flip='bottom'
>
<a href='#' className='menu-link px-5'>
<span className='menu-title position-relative'>
Language
<span className='fs-8 rounded bg-light px-3 py-2 position-absolute translate-middle-y top-50 end-0'>
{currentLanguage?.name}{' '}
<img
className='w-15px h-15px rounded-1 ms-2'
src={currentLanguage?.flag}
alt='metronic'
/>
</span>
</span>
</a>
<div className='menu-sub menu-sub-dropdown w-175px py-4'>
{languages.map((l) => (
<div
className='menu-item px-3'
key={l.lang}
onClick={() => {
setLanguage(l.lang)
}}
>
<a
href='#'
className={clsx('menu-link d-flex px-5', {active: l.lang === currentLanguage?.lang})}
>
<span className='symbol symbol-20px me-4'>
<img className='rounded-1' src={l.flag} alt='metronic' />
</span>
{l.name}
</a>
</div>
))}
</div>
</div>
)
}
export {Languages}
@@ -0,0 +1,217 @@
import {Link} from 'react-router-dom'
import {KTIcon} from '../../../helpers'
const HelpDrawer = () => {
return (
<div
id='kt_help'
className='bg-body'
data-kt-drawer='true'
data-kt-drawer-name='help'
data-kt-drawer-activate='true'
data-kt-drawer-overlay='true'
data-kt-drawer-width="{default:'350px', 'md': '525px'}"
data-kt-drawer-direction='end'
data-kt-drawer-toggle='#kt_help_toggle'
data-kt-drawer-close='#kt_help_close'
>
{/* begin::Card */}
<div className='card shadow-none rounded-0 w-100'>
{/* begin::Header */}
<div className='card-header' id='kt_help_header'>
<h5 className='card-title fw-bold text-gray-600'>Learn & Get Inspired</h5>
<div className='card-toolbar'>
<button
type='button'
className='btn btn-sm btn-icon explore-btn-dismiss me-n5'
id='kt_help_close'
>
<KTIcon iconName='cross' className='fs-2' />
</button>
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body' id='kt_help_body'>
{/* begin::Content */}
<div
id='kt_help_scroll'
className='hover-scroll-overlay-y'
data-kt-scroll='true'
data-kt-scroll-height='auto'
data-kt-scroll-wrappers='#kt_help_body'
data-kt-scroll-dependencies='#kt_help_header'
data-kt-scroll-offset='5px'
>
{/* begin::Support */}
<div className='rounded border border-dashed border-gray-300 p-6 p-lg-8 mb-10'>
{/* begin::Heading */}
<h2 className='fw-bolder mb-5'>
Support at{' '}
<a href='https://devs.keenthemes.com' className=''>
devs.keenthemes.com
</a>
</h2>
{/* end::Heading */}
{/* begin::Description */}
<div className='fs-5 fw-bold mb-5'>
<span className='text-gray-500'>
Join our developers community to find answer to your question and help others.
</span>
<a className='explore-link d-none' href='https://keenthemes.com/licensing'>
FAQs
</a>
</div>
{/* end::Description */}
{/* begin::Link */}
<a
href='https://devs.keenthemes.com'
className='btn btn-lg explore-btn-primary w-100'
>
Get Support
</a>
{/* end::Link */}
</div>
{/* end::Support */}
{/* begin::Link */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Icon */}
<div className='d-flex flex-center w-50px h-50px w-lg-75px h-lg-75px flex-shrink-0 rounded bg-light-warning'>
<KTIcon iconName='abstract-26' className='text-warning fs-2x text-lg-3x' />
</div>
{/* end::Icon */}
{/* begin::Info */}
<div className='d-flex flex-stack flex-grow-1 ms-4 ms-lg-6'>
{/* begin::Wrapper */}
<div className='d-flex flex-column me-2 me-lg-5'>
{/* begin::Title */}
<a
href='https://preview.keenthemes.com/metronic8/react/docs/quick-start'
className='text-gray-900 text-hover-primary fw-bolder fs-6 fs-lg-4 mb-1'
>
Documentation &amp; Videos
</a>
{/* end::Title */}
{/* begin::Description */}
<div className='text-muted fw-bold fs-7 fs-lg-6'>
From guides and video tutorials, to live demos and code examples to get started.
</div>
{/* end::Description */}
</div>
{/* end::Wrapper */}
<KTIcon iconName='arrow-right' className='text-gray-500 fs-2' />
</div>
{/* end::Info */}
</div>
{/* end::Link */}
{/* begin::Link */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Icon */}
<div className='d-flex flex-center w-50px h-50px w-lg-75px h-lg-75px flex-shrink-0 rounded bg-light-primary'>
<KTIcon iconName='gift' className='text-primary fs-2x text-lg-3x' />
</div>
{/* end::Icon */}
{/* begin::Info */}
<div className='d-flex flex-stack flex-grow-1 ms-4 ms-lg-6'>
{/* begin::Wrapper */}
<div className='d-flex flex-column me-2 me-lg-5'>
{/* begin::Title */}
<a
href='https://preview.keenthemes.com/metronic8/react/docs/utilities'
className='text-gray-900 text-hover-primary fw-bolder fs-6 fs-lg-4 mb-1'
>
Plugins &amp; Components
</a>
{/* end::Title */}
{/* begin::Description */}
<div className='text-muted fw-bold fs-7 fs-lg-6'>
Check out our 300+ in-house components and customized 3rd-party plugins.
</div>
{/* end::Description */}
</div>
{/* end::Wrapper */}
<KTIcon iconName='arrow-right' className='text-gray-500 fs-2' />
</div>
{/* end::Info */}
</div>
{/* end::Link */}
{/* begin::Link */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Icon */}
<div className='d-flex flex-center w-50px h-50px w-lg-75px h-lg-75px flex-shrink-0 rounded bg-light-info'>
<KTIcon iconName='design-frame' className='text-info fs-2x text-lg-3x' />
</div>
{/* end::Icon */}
{/* begin::Info */}
<div className='d-flex flex-stack flex-grow-1 ms-4 ms-lg-6'>
{/* begin::Wrapper */}
<div className='d-flex flex-column me-2 me-lg-5'>
{/* begin::Title */}
<Link
to='/builder'
className='text-gray-900 text-hover-primary fw-bolder fs-6 fs-lg-4 mb-1'
>
Layout Builder
</Link>
{/* end::Title */}
{/* begin::Description */}
<div className='text-muted fw-bold fs-7 fs-lg-6'>
Dynamically modify and preview layout
</div>
{/* end::Description */}
</div>
{/* end::Wrapper */}
<KTIcon iconName='arrow-right' className='text-gray-500 fs-2' />
</div>
{/* end::Info */}
</div>
{/* end::Link */}
{/* begin::Link */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Icon */}
<div className='d-flex flex-center w-50px h-50px w-lg-75px h-lg-75px flex-shrink-0 rounded bg-light-danger'>
<KTIcon iconName='phone' className='text-danger fs-2x text-lg-3x' />
</div>
{/* end::Icon */}
{/* begin::Info */}
<div className='d-flex flex-stack flex-grow-1 ms-4 ms-lg-6'>
{/* begin::Wrapper */}
<div className='d-flex flex-column me-2 me-lg-5'>
{/* begin::Title */}
<a
href='https://preview.keenthemes.com/metronic8/react/docs/changelog'
className='text-gray-900 text-hover-primary fw-bolder fs-6 fs-lg-4 mb-1'
>
What's New
</a>
{/* end::Title */}
{/* begin::Description */}
<div className='text-muted fw-bold fs-7 fs-lg-6'>
Latest features and improvements added with our users feedback in mind.
</div>
{/* end::Description */}
</div>
{/* end::Wrapper */}
<KTIcon iconName='arrow-right' className='text-gray-500 fs-2' />
</div>
{/* end::Info */}
</div>
{/* end::Link */}
</div>
{/* end::Content */}
</div>
{/* end::Body */}
</div>
{/* end::Card */}
</div>
)
}
export {HelpDrawer}
@@ -0,0 +1,17 @@
import { FC } from 'react'
const ToggleHelpDrawer: FC = () => (
<button
id='kt_help_toggle'
className='engage-help-toggle btn btn-flex h-35px bg-body btn-color-gray-700 btn-active-color-gray-900 shadow-sm px-5 rounded-top-0'
title='Learn & Get Inspired'
data-bs-toggle='tooltip'
data-bs-placement='left'
data-bs-dismiss='click'
data-bs-trigger='hover'
>
Help
</button>
)
export {ToggleHelpDrawer}
@@ -0,0 +1,12 @@
import {FC} from 'react'
const PurchaseButton: FC = () => (
<a
href={import.meta.env.VITE_APP_PURCHASE_URL}
className='engage-purchase-link btn btn-flex h-35px bg-body btn-color-gray-700 btn-active-color-gray-900 px-5 shadow-sm rounded-top-0'
>
Buy Now
</a>
)
export {PurchaseButton}
@@ -0,0 +1,68 @@
import { FC } from 'react'
import {Link} from 'react-router-dom'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const QuickLinks: FC = () => (
<div
className='menu menu-sub menu-sub-dropdown menu-column w-250px w-lg-325px'
data-kt-menu='true'
>
<div
className='d-flex flex-column flex-center bgi-no-repeat rounded-top px-9 py-10'
style={{backgroundImage: `url('${toAbsoluteUrl('media/misc/pattern-1.jpg')}')`}}
>
<h3 className='text-white fw-bold mb-3'>Quick Links</h3>
<span className='badge bg-primary py-2 px-3'>25 pending tasks</span>
</div>
<div className='row g-0'>
<div className='col-6'>
<a
href='#'
className='d-flex flex-column flex-center h-100 p-6 bg-hover-light border-end border-bottom'
>
<KTIcon iconName='euro' className='fs-3x text-primary mb-2' />
<span className='fs-5 fw-bold text-gray-800 mb-0'>Accounting</span>
<span className='fs-7 text-gray-500'>eCommerce</span>
</a>
</div>
<div className='col-6'>
<a
href='#'
className='d-flex flex-column flex-center h-100 p-6 bg-hover-light border-bottom'
>
<KTIcon iconName='sms' className='fs-3x text-primary mb-2' />
<span className='fs-5 fw-bold text-gray-800 mb-0'>Administration</span>
<span className='fs-7 text-gray-500'>Console</span>
</a>
</div>
<div className='col-6'>
<a href='#' className='d-flex flex-column flex-center h-100 p-6 bg-hover-light border-end'>
<KTIcon iconName='abstract-41' className='fs-3x text-primary mb-2' />
<span className='fs-5 fw-bold text-gray-800 mb-0'>Projects</span>
<span className='fs-7 text-gray-500'>Pending Tasks</span>
</a>
</div>
<div className='col-6'>
<a href='#' className='d-flex flex-column flex-center h-100 p-6 bg-hover-light'>
<KTIcon iconName='briefcase' className='fs-3x text-primary mb-2' />
<span className='fs-5 fw-bold text-gray-800 mb-0'>Customers</span>
<span className='fs-7 text-gray-500'>Latest cases</span>
</a>
</div>
</div>
<div className='py-2 text-center border-top'>
<Link to='/crafted/pages/profile' className='btn btn-color-gray-600 btn-active-color-primary'>
View All <KTIcon iconName='arrow-right' className='fs-5' />
</Link>
</div>
</div>
)
export {QuickLinks}
@@ -0,0 +1,754 @@
import {FC, useEffect, useRef, useState} from 'react'
import {SearchComponent} from '../../../assets/ts/components'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const Search: FC = () => {
const [menuState, setMenuState] = useState<'main' | 'advanced' | 'preferences'>('main')
const element = useRef<HTMLDivElement | null>(null)
const wrapperElement = useRef<HTMLDivElement | null>(null)
const resultsElement = useRef<HTMLDivElement | null>(null)
const suggestionsElement = useRef<HTMLDivElement | null>(null)
const emptyElement = useRef<HTMLDivElement | null>(null)
const processs = (search: SearchComponent) => {
setTimeout(function () {
const number = Math.floor(Math.random() * 6) + 1
// Hide recently viewed
suggestionsElement.current!.classList.add('d-none')
if (number === 3) {
// Hide results
resultsElement.current!.classList.add('d-none')
// Show empty message
emptyElement.current!.classList.remove('d-none')
} else {
// Show results
resultsElement.current!.classList.remove('d-none')
// Hide empty message
emptyElement.current!.classList.add('d-none')
}
// Complete search
search.complete()
}, 1500)
}
const clear = () => {
// Show recently viewed
suggestionsElement.current!.classList.remove('d-none')
// Hide results
resultsElement.current!.classList.add('d-none')
// Hide empty message
emptyElement.current!.classList.add('d-none')
}
useEffect(() => {
// Initialize search handler
const searchObject = SearchComponent.createInsance('#kt_header_search')
// Search handler
searchObject!.on('kt.search.process', processs)
// Clear handler
searchObject!.on('kt.search.clear', clear)
}, [])
return (
<>
<div
id='kt_header_search'
className='d-flex align-items-stretch'
data-kt-search-keypress='true'
data-kt-search-min-length='2'
data-kt-search-enter='enter'
data-kt-search-layout='menu'
data-kt-menu-trigger='auto'
data-kt-menu-overflow='false'
data-kt-menu-permanent='true'
data-kt-menu-placement='bottom-end'
ref={element}
>
<div
className='d-flex align-items-center'
data-kt-search-element='toggle'
id='kt_header_search_toggle'
>
<div className='btn btn-icon btn-custom btn-icon-muted btn-active-light btn-active-color-primary w-35px h-35px'>
<KTIcon iconName='magnifier' className='fs-2' />
</div>
</div>
<div
data-kt-search-element='content'
className='menu menu-sub menu-sub-dropdown p-7 w-325px w-md-375px'
>
<div
className={`${menuState === 'main' ? '' : 'd-none'}`}
ref={wrapperElement}
data-kt-search-element='wrapper'
>
<form
data-kt-search-element='form'
className='w-100 position-relative mb-3'
autoComplete='off'
>
<KTIcon
iconName='magnifier'
className='fs-2 text-lg-1 text-gray-500 position-absolute top-50 translate-middle-y ms-0'
/>
<input
type='text'
className='form-control form-control-flush ps-10'
name='search'
placeholder='Search...'
data-kt-search-element='input'
/>
<span
className='position-absolute top-50 end-0 translate-middle-y lh-0 d-none me-1'
data-kt-search-element='spinner'
>
<span className='spinner-border h-15px w-15px align-middle text-gray-500' />
</span>
<span
className='btn btn-flush btn-active-color-primary position-absolute top-50 end-0 translate-middle-y lh-0 d-none'
data-kt-search-element='clear'
>
<KTIcon iconName='cross' className='fs-2 text-lg-1 me-0' />
</span>
<div
className='position-absolute top-50 end-0 translate-middle-y'
data-kt-search-element='toolbar'
>
<div
data-kt-search-element='preferences-show'
className='btn btn-icon w-20px btn-sm btn-active-color-primary me-1'
data-bs-toggle='tooltip'
onClick={() => {
setMenuState('preferences')
}}
title='Show search preferences'
>
<KTIcon iconName='setting-2' className='fs-1' />
</div>
<div
data-kt-search-element='advanced-options-form-show'
className='btn btn-icon w-20px btn-sm btn-active-color-primary'
data-bs-toggle='tooltip'
onClick={() => {
setMenuState('advanced')
}}
title='Show more search options'
>
<KTIcon iconName='down' className='fs-2' />
</div>
</div>
</form>
<div ref={resultsElement} data-kt-search-element='results' className='d-none'>
<div className='scroll-y mh-200px mh-lg-350px'>
<h3 className='fs-5 text-muted m-0 pb-5' data-kt-search-element='category-title'>
Users
</h3>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<img src={toAbsoluteUrl('media/avatars/300-6.jpg')} alt='' />
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Karina Clark</span>
<span className='fs-7 fw-bold text-muted'>Marketing Manager</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<img src={toAbsoluteUrl('media/avatars/300-2.jpg')} alt='' />
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Olivia Bold</span>
<span className='fs-7 fw-bold text-muted'>Software Engineer</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<img src={toAbsoluteUrl('media/avatars/300-9.jpg')} alt='' />
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Ana Clark</span>
<span className='fs-7 fw-bold text-muted'>UI/UX Designer</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<img src={toAbsoluteUrl('media/avatars/300-14.jpg')} alt='' />
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Nick Pitola</span>
<span className='fs-7 fw-bold text-muted'>Art Director</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<img src={toAbsoluteUrl('media/avatars/300-11.jpg')} alt='' />
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Edward Kulnic</span>
<span className='fs-7 fw-bold text-muted'>System Administrator</span>
</div>
</a>
<h3
className='fs-5 text-muted m-0 pt-5 pb-5'
data-kt-search-element='category-title'
>
Customers
</h3>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<img
className='w-20px h-20px'
src={toAbsoluteUrl('media/svg/brand-logos/volicity-9.svg')}
alt=''
/>
</span>
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Company Rbranding</span>
<span className='fs-7 fw-bold text-muted'>UI Design</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<img
className='w-20px h-20px'
src={toAbsoluteUrl('media/svg/brand-logos/tvit.svg')}
alt=''
/>
</span>
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Company Re-branding</span>
<span className='fs-7 fw-bold text-muted'>Web Development</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<img
className='w-20px h-20px'
src={toAbsoluteUrl('media/svg/misc/infography.svg')}
alt=''
/>
</span>
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Business Analytics App</span>
<span className='fs-7 fw-bold text-muted'>Administration</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<img
className='w-20px h-20px'
src={toAbsoluteUrl('media/svg/brand-logos/leaf.svg')}
alt=''
/>
</span>
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>EcoLeaf App Launch</span>
<span className='fs-7 fw-bold text-muted'>Marketing</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<img
className='w-20px h-20px'
src={toAbsoluteUrl('media/svg/brand-logos/tower.svg')}
alt=''
/>
</span>
</div>
<div className='d-flex flex-column justify-content-start fw-bold'>
<span className='fs-6 fw-bold'>Tower Group Website</span>
<span className='fs-7 fw-bold text-muted'>Google Adwords</span>
</div>
</a>
<h3
className='fs-5 text-muted m-0 pt-5 pb-5'
data-kt-search-element='category-title'
>
Projects
</h3>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='document' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<span className='fs-6 fw-bold'>Si-Fi Project by AU Themes</span>
<span className='fs-7 fw-bold text-muted'>#45670</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='chart-simple' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<span className='fs-6 fw-bold'>Shopix Mobile App Planning</span>
<span className='fs-7 fw-bold text-muted'>#45690</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='message-text-2' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<span className='fs-6 fw-bold'>Finance Monitoring SAAS Discussion</span>
<span className='fs-7 fw-bold text-muted'>#21090</span>
</div>
</a>
<a
href='/#'
className='d-flex text-gray-900 text-hover-primary align-items-center mb-5'
>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='profile-circle' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<span className='fs-6 fw-bold'>Dashboard Analitics Launch</span>
<span className='fs-7 fw-bold text-muted'>#34560</span>
</div>
</a>
</div>
</div>
<div ref={suggestionsElement} className='mb-4' data-kt-search-element='main'>
<div className='d-flex flex-stack fw-bold mb-4'>
<span className='text-muted fs-6 me-2'>Recently Searched:</span>
</div>
<div className='scroll-y mh-200px mh-lg-325px'>
<div className='d-flex align-items-center mb-5'>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='phone' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<a href='/#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
BoomApp by Keenthemes
</a>
<span className='fs-7 text-muted fw-bold'>#45789</span>
</div>
</div>
<div className='d-flex align-items-center mb-5'>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='chart-simple' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<a href='/#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
"Kept API Project Meeting
</a>
<span className='fs-7 text-muted fw-bold'>#84050</span>
</div>
</div>
<div className='d-flex align-items-center mb-5'>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='chart' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<a href='/#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
"KPI Monitoring App Launch
</a>
<span className='fs-7 text-muted fw-bold'>#84250</span>
</div>
</div>
<div className='d-flex align-items-center mb-5'>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='chart-simple-3' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<a href='/#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
Project Reference FAQ
</a>
<span className='fs-7 text-muted fw-bold'>#67945</span>
</div>
</div>
<div className='d-flex align-items-center mb-5'>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='sms' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<a href='/#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
"FitPro App Development
</a>
<span className='fs-7 text-muted fw-bold'>#84250</span>
</div>
</div>
<div className='d-flex align-items-center mb-5'>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='bank' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<a href='/#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
Shopix Mobile App
</a>
<span className='fs-7 text-muted fw-bold'>#45690</span>
</div>
</div>
<div className='d-flex align-items-center mb-5'>
<div className='symbol symbol-40px me-4'>
<span className='symbol-label bg-light'>
<KTIcon iconName='chart-simple-3' className='fs-2 text-primary' />
</span>
</div>
<div className='d-flex flex-column'>
<a href='/#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
"Landing UI Design" Launch
</a>
<span className='fs-7 text-muted fw-bold'>#24005</span>
</div>
</div>
</div>
</div>
<div ref={emptyElement} data-kt-search-element='empty' className='text-center d-none'>
<div className='pt-10 pb-10'>
<KTIcon iconName='search-list' className='fs-4x opacity-50' />
</div>
<div className='pb-15 fw-bold'>
<h3 className='text-gray-600 fs-5 mb-2'>No result found</h3>
<div className='text-muted fs-7'>Please try again with a different query</div>
</div>
</div>
</div>
<form className={`pt-1 ${menuState === 'advanced' ? '' : 'd-none'}`}>
<h3 className='fw-bold text-gray-900 mb-7'>Advanced Search</h3>
<div className='mb-5'>
<input
type='text'
className='form-control form-control-sm form-control-solid'
placeholder='Contains the word'
name='query'
/>
</div>
<div className='mb-5'>
<div className='nav-group nav-group-fluid'>
<label>
<input
type='radio'
className='btn-check'
name='type'
value='has'
defaultChecked
/>
<span className='btn btn-sm btn-color-muted btn-active btn-active-primary'>
All
</span>
</label>
<label>
<input type='radio' className='btn-check' name='type' value='users' />
<span className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'>
Users
</span>
</label>
<label>
<input type='radio' className='btn-check' name='type' value='orders' />
<span className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'>
Orders
</span>
</label>
<label>
<input type='radio' className='btn-check' name='type' value='projects' />
<span className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'>
Projects
</span>
</label>
</div>
</div>
<div className='mb-5'>
<input
type='text'
name='assignedto'
className='form-control form-control-sm form-control-solid'
placeholder='Assigned to'
/>
</div>
<div className='mb-5'>
<input
type='text'
name='collaborators'
className='form-control form-control-sm form-control-solid'
placeholder='Collaborators'
/>
</div>
<div className='mb-5'>
<div className='nav-group nav-group-fluid'>
<label>
<input
type='radio'
className='btn-check'
name='attachment'
value='has'
defaultChecked
/>
<span className='btn btn-sm btn-color-muted btn-active btn-active-primary'>
Has attachment
</span>
</label>
<label>
<input type='radio' className='btn-check' name='attachment' value='any' />
<span className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'>
Any
</span>
</label>
</div>
</div>
<div className='mb-5'>
<select
name='timezone'
aria-label='Select a Timezone'
data-control='select2'
data-placeholder='date_period'
className='form-select form-select-sm form-select-solid'
>
<option value='next'>Within the next</option>
<option value='last'>Within the last</option>
<option value='between'>Between</option>
<option value='on'>On</option>
</select>
</div>
<div className='row mb-8'>
<div className='col-6'>
<input
type='number'
name='date_number'
className='form-control form-control-sm form-control-solid'
placeholder='Lenght'
/>
</div>
<div className='col-6'>
<select
name='date_typer'
aria-label='Select a Timezone'
data-control='select2'
data-placeholder='Period'
className='form-select form-select-sm form-select-solid'
>
<option value='days'>Days</option>
<option value='weeks'>Weeks</option>
<option value='months'>Months</option>
<option value='years'>Years</option>
</select>
</div>
</div>
<div className='d-flex justify-content-end'>
<button
onClick={(e) => {
e.preventDefault()
setMenuState('main')
}}
className='btn btn-sm btn-light fw-bolder btn-active-light-primary me-2'
>
Cancel
</button>
<a
href='/#'
className='btn btn-sm fw-bolder btn-primary'
data-kt-search-element='advanced-options-form-search'
>
Search
</a>
</div>
</form>
<form className={`pt-1 ${menuState === 'preferences' ? '' : 'd-none'}`}>
<h3 className='fw-bold text-gray-900 mb-7'>Search Preferences</h3>
<div className='pb-4 border-bottom'>
<label className='form-check form-switch form-switch-sm form-check-custom form-check-solid flex-stack'>
<span className='form-check-label text-gray-700 fs-6 fw-bold ms-0 me-2'>
Projects
</span>
<input className='form-check-input' type='checkbox' value='1' defaultChecked />
</label>
</div>
<div className='py-4 border-bottom'>
<label className='form-check form-switch form-switch-sm form-check-custom form-check-solid flex-stack'>
<span className='form-check-label text-gray-700 fs-6 fw-bold ms-0 me-2'>
Targets
</span>
<input className='form-check-input' type='checkbox' value='1' defaultChecked />
</label>
</div>
<div className='py-4 border-bottom'>
<label className='form-check form-switch form-switch-sm form-check-custom form-check-solid flex-stack'>
<span className='form-check-label text-gray-700 fs-6 fw-bold ms-0 me-2'>
Affiliate Programs
</span>
<input className='form-check-input' type='checkbox' value='1' />
</label>
</div>
<div className='py-4 border-bottom'>
<label className='form-check form-switch form-switch-sm form-check-custom form-check-solid flex-stack'>
<span className='form-check-label text-gray-700 fs-6 fw-bold ms-0 me-2'>
Referrals
</span>
<input className='form-check-input' type='checkbox' value='1' defaultChecked />
</label>
</div>
<div className='py-4 border-bottom'>
<label className='form-check form-switch form-switch-sm form-check-custom form-check-solid flex-stack'>
<span className='form-check-label text-gray-700 fs-6 fw-bold ms-0 me-2'>Users</span>
<input className='form-check-input' type='checkbox' />
</label>
</div>
<div className='d-flex justify-content-end pt-7'>
<button
onClick={(e) => {
e.preventDefault()
setMenuState('main')
}}
className='btn btn-sm btn-light fw-bolder btn-active-light-primary me-2'
>
Cancel
</button>
<button className='btn btn-sm fw-bolder btn-primary'>Save Changes</button>
</div>
</form>
</div>
</div>
</>
)
}
export {Search}
@@ -0,0 +1,37 @@
import {useState} from 'react'
import {KTIcon} from '../../../helpers'
const SearchInner = () => {
const [search, setSearch] = useState<string>('')
return (
<div
data-kt-search-element='content'
data-kt-menu='true'
className='menu menu-sub menu-sub-dropdown p-7 w-325px w-md-375px'
>
<div data-kt-search-element='wrapper'>
<form
data-kt-search-element='form'
className='w-100 position-relative mb-3'
autoComplete='off'
>
<KTIcon
iconName='magnifier'
className='fs-2 text-lg-1 text-gray-500 position-absolute top-50 translate-middle-y ms-0'
/>
<input
type='text'
className='form-control form-control-flush ps-10'
name='search'
value={search}
placeholder='Search...'
data-kt-search-element='input'
onChange={(e) => setSearch(e.target.value)}
/>
</form>
</div>
</div>
)
}
export {SearchInner}
@@ -0,0 +1,101 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable react-refresh/only-export-components */
import {createContext, useContext, useEffect, useState} from 'react'
import {ThemeModeComponent} from '../../../assets/ts/layout'
import {toAbsoluteUrl} from '../../../helpers'
export type ThemeModeType = 'dark' | 'light' | 'system'
export const themeModelSKey = 'kt_theme_mode_value'
export const themeMenuModeLSKey = 'kt_theme_mode_menu'
const systemMode = ThemeModeComponent.getSystemMode() as 'light' | 'dark'
type ThemeModeContextType = {
mode: ThemeModeType
menuMode: ThemeModeType
updateMode: (_mode: ThemeModeType) => void
updateMenuMode: (_mode: ThemeModeType) => void
}
const themeModeSwitchHelper = (_mode: ThemeModeType) => {
// change background image url
const mode = _mode !== 'system' ? _mode : systemMode
const imageUrl = 'media/patterns/header-bg' + (mode === 'light' ? '.jpg' : '-dark.jpg')
document.body.style.backgroundImage = `url("${toAbsoluteUrl(imageUrl)}")`
}
const getThemeModeFromLocalStorage = (lsKey: string): ThemeModeType => {
if (!localStorage) {
return 'light'
}
const data = localStorage.getItem(lsKey)
if (data === 'dark' || data === 'light' || data === 'system') {
return data
}
if (document.documentElement.hasAttribute('data-bs-theme')) {
const dataTheme = document.documentElement.getAttribute('data-bs-theme')
if (dataTheme && (dataTheme === 'dark' || dataTheme === 'light' || dataTheme === 'system')) {
return dataTheme
}
}
return 'system'
}
const defaultThemeMode: ThemeModeContextType = {
mode: getThemeModeFromLocalStorage(themeModelSKey),
menuMode: getThemeModeFromLocalStorage(themeMenuModeLSKey),
updateMode: (_mode: ThemeModeType) => {},
updateMenuMode: (_menuMode: ThemeModeType) => {},
}
const ThemeModeContext = createContext<ThemeModeContextType>({
mode: defaultThemeMode.mode,
menuMode: defaultThemeMode.menuMode,
updateMode: (_mode: ThemeModeType) => {},
updateMenuMode: (_menuMode: ThemeModeType) => {},
})
const useThemeMode = () => useContext(ThemeModeContext)
const ThemeModeProvider = ({children}: {children: React.ReactNode}) => {
const [mode, setMode] = useState<ThemeModeType>(defaultThemeMode.mode)
const [menuMode, setMenuMode] = useState<ThemeModeType>(defaultThemeMode.menuMode)
const updateMode = (_mode: ThemeModeType, saveInLocalStorage: boolean = true) => {
setMode(_mode)
// themeModeSwitchHelper(updatedMode)
if (saveInLocalStorage && localStorage) {
localStorage.setItem(themeModelSKey, _mode)
}
if (saveInLocalStorage) {
const updatedMode = _mode === 'system' ? systemMode : _mode
document.documentElement.setAttribute('data-bs-theme', updatedMode)
}
ThemeModeComponent.init()
}
const updateMenuMode = (_menuMode: ThemeModeType, saveInLocalStorage: boolean = true) => {
setMenuMode(_menuMode)
if (saveInLocalStorage && localStorage) {
localStorage.setItem(themeMenuModeLSKey, _menuMode)
}
}
useEffect(() => {
updateMode(mode, false)
updateMenuMode(menuMode, false)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
return (
<ThemeModeContext.Provider value={{mode, menuMode, updateMode, updateMenuMode}}>
{children}
</ThemeModeContext.Provider>
)
}
export {ThemeModeProvider, useThemeMode, systemMode, themeModeSwitchHelper}
@@ -0,0 +1,104 @@
import clsx from 'clsx'
import {KTIcon} from '../../../helpers'
import {ThemeModeComponent} from '../../../assets/ts/layout'
import {ThemeModeType, useThemeMode} from './ThemeModeProvider'
type Props = {
toggleBtnClass?: string
toggleBtnIconClass?: string
menuPlacement?: string
menuTrigger?: string
}
const systemMode = ThemeModeComponent.getSystemMode() as 'light' | 'dark'
const ThemeModeSwitcher = ({
toggleBtnClass = '',
toggleBtnIconClass = 'fs-1',
menuPlacement = 'bottom-end',
menuTrigger = "{default: 'click', lg: 'hover'}",
}: Props) => {
const {mode, menuMode, updateMode, updateMenuMode} = useThemeMode()
const calculatedMode = mode === 'system' ? systemMode : mode
const switchMode = (_mode: ThemeModeType) => {
updateMenuMode(_mode)
updateMode(_mode)
}
return (
<>
{/* begin::Menu toggle */}
<a
href='#'
className={clsx('btn btn-icon ', toggleBtnClass)}
data-kt-menu-trigger={menuTrigger}
data-kt-menu-attach='parent'
data-kt-menu-placement={menuPlacement}
>
{calculatedMode === 'dark' && (
<KTIcon iconName='moon' className={clsx('theme-light-hide', toggleBtnIconClass)} />
)}
{calculatedMode === 'light' && (
<KTIcon iconName='night-day' className={clsx('theme-dark-hide', toggleBtnIconClass)} />
)}
</a>
{/* begin::Menu toggle */}
{/* begin::Menu */}
<div
className='menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-title-gray-700 menu-icon-muted menu-active-bg menu-state-primary fw-semibold py-4 fs-base w-175px'
data-kt-menu='true'
>
{/* begin::Menu item */}
<div className='menu-item px-3 my-0'>
<a
href='#'
className={clsx('menu-link px-3 py-2', {active: menuMode === 'light'})}
onClick={() => switchMode('light')}
>
<span className='menu-icon' data-kt-element='icon'>
<KTIcon iconName='night-day' className='fs-1' />
</span>
<span className='menu-title'>Light</span>
</a>
</div>
{/* end::Menu item */}
{/* begin::Menu item */}
<div className='menu-item px-3 my-0'>
<a
href='#'
className={clsx('menu-link px-3 py-2', {active: menuMode === 'dark'})}
onClick={() => switchMode('dark')}
>
<span className='menu-icon' data-kt-element='icon'>
<KTIcon iconName='moon' className='fs-1' />
</span>
<span className='menu-title'>Dark</span>
</a>
</div>
{/* end::Menu item */}
{/* begin::Menu item */}
<div className='menu-item px-3 my-0'>
<a
href='#'
className={clsx('menu-link px-3 py-2', {active: menuMode === 'system'})}
onClick={() => switchMode('system')}
>
<span className='menu-icon' data-kt-element='icon'>
<KTIcon iconName='screen' className='fs-1' />
</span>
<span className='menu-title'>System</span>
</a>
</div>
{/* end::Menu item */}
</div>
{/* end::Menu */}
</>
)
}
export {ThemeModeSwitcher}
@@ -0,0 +1,308 @@
import {useRef, useState} from 'react'
import {createPortal} from 'react-dom'
import {Modal} from 'react-bootstrap'
import {defaultCreateAppData, ICreateAppData} from './IAppModels'
import {StepperComponent} from '../../../assets/ts/components'
import {KTIcon} from '../../../helpers'
import {Step1} from './steps/Step1'
import {Step2} from './steps/Step2'
import {Step3} from './steps/Step3'
import {Step4} from './steps/Step4'
import {Step5} from './steps/Step5'
type Props = {
show: boolean
handleClose: () => void
}
const modalsRoot = document.getElementById('root-modals') || document.body
const CreateAppModal = ({show, handleClose}: Props) => {
const stepperRef = useRef<HTMLDivElement | null>(null)
const [ stepper, setStepper ] = useState<StepperComponent | null>(null)
const [data, setData] = useState<ICreateAppData>(defaultCreateAppData)
const [hasError, setHasError] = useState(false)
const loadStepper = () => {
setStepper(StepperComponent.createInsance(stepperRef.current as HTMLDivElement))
}
const updateData = (fieldsToUpdate: Partial<ICreateAppData>) => {
const updatedData = {...data, ...fieldsToUpdate}
setData(updatedData)
}
const checkAppBasic = (): boolean => {
if (!data.appBasic.appName || !data.appBasic.appType) {
return false
}
return true
}
const checkAppDataBase = (): boolean => {
if (!data.appDatabase.databaseName || !data.appDatabase.databaseSolution) {
return false
}
return true
}
const prevStep = () => {
if (!stepper) {
return
}
stepper.goPrev()
}
const nextStep = () => {
setHasError(false)
if (!stepper) {
return
}
if (stepper.getCurrentStepIndex() === 1) {
if (!checkAppBasic()) {
setHasError(true)
return
}
}
if (stepper.getCurrentStepIndex() === 3) {
if (!checkAppDataBase()) {
setHasError(true)
return
}
}
stepper.goNext()
}
const submit = () => {
window.location.reload()
}
return createPortal(
<Modal
id='kt_modal_create_app'
tabIndex={-1}
aria-hidden='true'
dialogClassName='modal-dialog modal-dialog-centered mw-900px'
show={show}
onHide={handleClose}
onEntered={loadStepper}
backdrop={true}
>
<div className='modal-header'>
<h2>Create App</h2>
{/* begin::Close */}
<div className='btn btn-sm btn-icon btn-active-color-primary' onClick={handleClose}>
<KTIcon className='fs-1' iconName='cross' />
</div>
{/* end::Close */}
</div>
<div className='modal-body py-lg-10 px-lg-10'>
{/*begin::Stepper */}
<div
ref={stepperRef}
className='stepper stepper-pills stepper-column d-flex flex-column flex-xl-row flex-row-fluid'
id='kt_modal_create_app_stepper'
>
{/* begin::Aside*/}
<div className='d-flex justify-content-center justify-content-xl-start flex-row-auto w-100 w-xl-300px'>
{/* begin::Nav*/}
<div className='stepper-nav ps-lg-10'>
{/* begin::Step 1*/}
<div className='stepper-item current' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>1</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Details</h3>
<div className='stepper-desc'>Name your App</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 1*/}
{/* begin::Step 2*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>2</span>
</div>
{/* begin::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Frameworks</h3>
<div className='stepper-desc'>Define your app framework</div>
</div>
{/* begin::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 2*/}
{/* begin::Step 3*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>3</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Database</h3>
<div className='stepper-desc'>Select the app database type</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 3*/}
{/* begin::Step 4*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>4</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Storage</h3>
<div className='stepper-desc'>Provide storage details</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 4*/}
{/* begin::Step 5*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>5</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Completed</h3>
<div className='stepper-desc'>Review and Submit</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
</div>
{/* end::Step 5*/}
</div>
{/* end::Nav*/}
</div>
{/* begin::Aside*/}
{/*begin::Content */}
<div className='flex-row-fluid py-lg-5 px-lg-15'>
{/*begin::Form */}
<form noValidate id='kt_modal_create_app_form'>
<Step1 data={data} updateData={updateData} hasError={hasError} />
<Step2 data={data} updateData={updateData} hasError={hasError} />
<Step3 data={data} updateData={updateData} hasError={hasError} />
<Step4 data={data} updateData={updateData} hasError={hasError} />
<Step5 />
{/*begin::Actions */}
<div className='d-flex flex-stack pt-10'>
<div className='me-2'>
<button
type='button'
className='btn btn-lg btn-light-primary me-3'
data-kt-stepper-action='previous'
onClick={prevStep}
>
<KTIcon iconName='arrow-left' className='fs-3 me-1' /> Previous
</button>
</div>
<div>
<button
type='button'
className='btn btn-lg btn-primary'
data-kt-stepper-action='submit'
onClick={submit}
>
Submit <KTIcon iconName='arrow-right' className='fs-3 ms-2 me-0' />
</button>
<button
type='button'
className='btn btn-lg btn-primary'
data-kt-stepper-action='next'
onClick={nextStep}
>
Next Step <KTIcon iconName='arrow-right' className='fs-3 ms-1 me-0' />
</button>
</div>
</div>
{/*end::Actions */}
</form>
{/*end::Form */}
</div>
{/*end::Content */}
</div>
{/* end::Stepper */}
</div>
</Modal>,
modalsRoot
)
}
export {CreateAppModal}
@@ -0,0 +1,33 @@
export interface IAppBasic {
appName: string
appType: 'Quick Online Courses' | 'Face to Face Discussions' | 'Full Intro Training'
}
export type TAppFramework = 'HTML5' | 'ReactJS' | 'Angular' | 'Vue'
export interface IAppDatabase {
databaseName: string
databaseSolution: 'MySQL' | 'Firebase' | 'DynamoDB'
}
export type TAppStorage = 'Basic Server' | 'AWS' | 'Google'
export interface ICreateAppData {
appBasic: IAppBasic
appFramework: TAppFramework
appDatabase: IAppDatabase
appStorage: TAppStorage
}
export const defaultCreateAppData: ICreateAppData = {
appBasic: {appName: '', appType: 'Quick Online Courses'},
appFramework: 'HTML5',
appDatabase: {databaseName: 'db_name', databaseSolution: 'MySQL'},
appStorage: 'Basic Server',
}
export type StepProps = {
data: ICreateAppData
updateData: (fieldsToUpdate: Partial<ICreateAppData>) => void
hasError: boolean
}
@@ -0,0 +1,176 @@
import {KTIcon} from '../../../../helpers'
import {StepProps} from '../IAppModels'
const Step1 = ({data, updateData, hasError}: StepProps) => {
return (
<div className='current' data-kt-stepper-element='content'>
<div className='w-100'>
{/*begin::Form Group */}
<div className='fv-row mb-10'>
<label className='d-flex align-items-center fs-5 fw-semibold mb-2'>
<span className='required'>App Name</span>
<i
className='fas fa-exclamation-circle ms-2 fs-7'
data-bs-toggle='tooltip'
title='Specify your unique app name'
></i>
</label>
<input
type='text'
className='form-control form-control-lg form-control-solid'
name='appname'
placeholder=''
value={data.appBasic.appName}
onChange={(e) =>
updateData({
appBasic: {
appName: e.target.value,
appType: data.appBasic.appType,
},
})
}
/>
{!data.appBasic.appName && hasError && (
<div className='fv-plugins-message-container'>
<div data-field='appname' data-validator='notEmpty' className='fv-help-block'>
App name is required
</div>
</div>
)}
</div>
{/*end::Form Group */}
{/*begin::Form Group */}
<div className='fv-row'>
{/* begin::Label */}
<label className='d-flex align-items-center fs-5 fw-semibold mb-4'>
<span className='required'>Category</span>
<i
className='fas fa-exclamation-circle ms-2 fs-7'
data-bs-toggle='tooltip'
title='Select your app category'
></i>
</label>
{/* end::Label */}
<div>
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between mb-6 cursor-pointer'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-primary'>
<KTIcon iconName='compass' className='fs-1 text-primary' />
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Quick Online Courses</span>
<span className='fs-7 text-muted'>
Creating a clear text structure is just one SEO
</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appType'
value='Quick Online Courses'
checked={data.appBasic.appType === 'Quick Online Courses'}
onChange={() =>
updateData({
appBasic: {
appName: data.appBasic.appName,
appType: 'Quick Online Courses',
},
})
}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between mb-6 cursor-pointer'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-danger'>
<KTIcon iconName='category' className='fs-1 text-danger' />
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Face to Face Discussions</span>
<span className='fs-7 text-muted'>
Creating a clear text structure is just one aspect
</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appType'
value='Face to Face Discussions'
checked={data.appBasic.appType === 'Face to Face Discussions'}
onChange={() =>
updateData({
appBasic: {
appName: data.appBasic.appName,
appType: 'Face to Face Discussions',
},
})
}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between mb-6 cursor-pointer'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-success'>
<KTIcon iconName='timer' className='fs-1 text-success' />
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Full Intro Training</span>
<span className='fs-7 text-muted'>
Creating a clear text structure copywriting
</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appType'
value='Full Intro Training'
checked={data.appBasic.appType === 'Full Intro Training'}
onChange={() =>
updateData({
appBasic: {
appName: data.appBasic.appName,
appType: 'Full Intro Training',
},
})
}
/>
</span>
</label>
{/*end::Option */}
</div>
</div>
{/*end::Form Group */}
</div>
</div>
)
}
export {Step1}
@@ -0,0 +1,138 @@
import {StepProps} from '../IAppModels'
const Step2 = ({data, updateData}: StepProps) => {
return (
<div className='pb-5' data-kt-stepper-element='content'>
<div className='w-100'>
{/*begin::Form Group */}
<div className='fv-row'>
{/* begin::Label */}
<label className='d-flex align-items-center fs-5 fw-semibold mb-4'>
<span className='required'>Select Framework</span>
<i
className='fas fa-exclamation-circle ms-2 fs-7'
data-bs-toggle='tooltip'
title='Specify your apps framework'
></i>
</label>
{/* end::Label */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-warning'>
<i className='fab fa-html5 text-warning fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>HTML5</span>
<span className='fs-7 text-muted'>Base Web Projec</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appFramework'
value='HTML5'
checked={data.appFramework === 'HTML5'}
onChange={() => updateData({appFramework: 'HTML5'})}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-success'>
<i className='fab fa-react text-success fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>ReactJS</span>
<span className='fs-7 text-muted'>Robust and flexible app framework</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appFramework'
value='ReactJS'
checked={data.appFramework === 'ReactJS'}
onChange={() => updateData({appFramework: 'ReactJS'})}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-danger'>
<i className='fab fa-angular text-danger fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Angular</span>
<span className='fs-7 text-muted'>Powerful data mangement</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appFramework'
value='Angular'
checked={data.appFramework === 'Angular'}
onChange={() => updateData({appFramework: 'Angular'})}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-primary'>
<i className='fab fa-vuejs text-primary fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Vue</span>
<span className='fs-7 text-muted'>Lightweight and responsive framework</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appFramework'
value='Vue'
checked={data.appFramework === 'Vue'}
onChange={() => updateData({appFramework: 'Vue'})}
/>
</span>
</label>
{/*end::Option */}
</div>
{/*end::Form Group */}
</div>
</div>
)
}
export {Step2}
@@ -0,0 +1,164 @@
import {StepProps} from '../IAppModels'
const Step3 = ({data, updateData, hasError}: StepProps) => {
return (
<>
{/*begin::Step 3 */}
<div className='pb-5' data-kt-stepper-element='content'>
<div className='w-100'>
{/*begin::Form Group */}
<div className='fv-row mb-10'>
<label className='required fs-5 fw-semibold mb-2'>Database Name</label>
<input
type='text'
className='form-control form-control-lg form-control-solid'
name='dbname'
value={data.appDatabase.databaseName}
onChange={(e) =>
updateData({
appDatabase: {
databaseName: e.target.value,
databaseSolution: data.appDatabase.databaseSolution,
},
})
}
/>
{!data.appDatabase.databaseName && hasError && (
<div className='fv-plugins-message-container'>
<div data-field='appname' data-validator='notEmpty' className='fv-help-block'>
Database name is required
</div>
</div>
)}
</div>
{/*end::Form Group */}
{/*begin::Form Group */}
<div className='fv-row'>
<label className='d-flex align-items-center fs-5 fw-semibold mb-4'>
<span className='required'>Select Database Engine</span>
<i
className='fas fa-exclamation-circle ms-2 fs-7'
data-bs-toggle='tooltip'
title='Select your app database engine'
></i>
</label>
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-success'>
<i className='fas fa-database text-success fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>MySQL</span>
<span className='fs-7 text-muted'>Basic MySQL database</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='databaseSolution'
value='MySQL'
checked={data.appDatabase.databaseSolution === 'MySQL'}
onChange={() =>
updateData({
appDatabase: {
databaseName: data.appDatabase.databaseName,
databaseSolution: 'MySQL',
},
})
}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-danger'>
<i className='fab fa-google text-danger fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Firebase</span>
<span className='fs-7 text-muted'>Google based app data management</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='databaseSolution'
value='Firebase'
checked={data.appDatabase.databaseSolution === 'Firebase'}
onChange={() =>
updateData({
appDatabase: {
databaseName: data.appDatabase.databaseName,
databaseSolution: 'Firebase',
},
})
}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-warning'>
<i className='fab fa-amazon text-warning fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>DynamoDB</span>
<span className='fs-7 text-muted'>Amazon Fast NoSQL Database</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='databaseSolution'
value='DynamoDB'
checked={data.appDatabase.databaseSolution === 'DynamoDB'}
onChange={() =>
updateData({
appDatabase: {
databaseName: data.appDatabase.databaseName,
databaseSolution: 'DynamoDB',
},
})
}
/>
</span>
</label>
{/*end::Option */}
</div>
{/*end::Form Group */}
</div>
</div>
{/*end::Step 3 */}
</>
)
}
export {Step3}
@@ -0,0 +1,108 @@
import {StepProps} from '../IAppModels'
const Step4 = ({data, updateData}: StepProps) => {
return (
<>
{/*begin::Step 4 */}
<div className='pb-5' data-kt-stepper-element='content'>
<div className='w-100'>
{/*begin::Form Group */}
<div className='fv-row'>
<label className='fs-6 fw-bolder text-gray-900 mb-7d-flex align-items-center fs-5 fw-semibold mb-4'>
<span className='required'>Select Storage</span>
</label>
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-primary'>
<i className='fab fa-linux text-primary fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Basic Server</span>
<span className='fs-7 text-muted'>Linux based server storage</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appStorage'
value='Basic Server'
checked={data.appStorage === 'Basic Server'}
onChange={() => updateData({appStorage: 'Basic Server'})}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-warning'>
<i className='fab fa-aws text-warning fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>AWS</span>
<span className='fs-7 text-muted'>Amazon Web Services</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appStorage'
value='AWS'
checked={data.appStorage === 'AWS'}
onChange={() => updateData({appStorage: 'AWS'})}
/>
</span>
</label>
{/*end::Option */}
{/*begin:Option */}
<label className='d-flex align-items-center justify-content-between cursor-pointer mb-6'>
<span className='d-flex align-items-center me-2'>
<span className='symbol symbol-50px me-6'>
<span className='symbol-label bg-light-success '>
<i className='fab fa-google text-success fs-2x'></i>
</span>
</span>
<span className='d-flex flex-column'>
<span className='fw-bolder fs-6'>Google</span>
<span className='fs-7 text-muted'>Google Cloud Storage</span>
</span>
</span>
<span className='form-check form-check-custom form-check-solid'>
<input
className='form-check-input'
type='radio'
name='appStorage'
value='Google'
checked={data.appStorage === 'Google'}
onChange={() => updateData({appStorage: 'Google'})}
/>
</span>
</label>
{/*end::Option */}
</div>
{/*end::Form Group */}
</div>
</div>
{/*end::Step 4 */}
</>
)
}
export {Step4}
@@ -0,0 +1,30 @@
import {useIllustrationsPath} from '../../../../helpers'
const Step5 = () => {
return (
<>
<div data-kt-stepper-element='content'>
<div className='w-100 text-center'>
{/* begin::Heading */}
<h1 className='fw-bold text-gray-900 mb-3'>Release!</h1>
{/* end::Heading */}
{/* begin::Description */}
<div className='text-muted fw-semibold fs-3'>
Submit your app to kickstart your project.
</div>
{/* end::Description */}
{/* begin::Illustration */}
<div className='text-center px-4 py-15'>
<img src={useIllustrationsPath('9.png')} alt='' className='mw-100 mh-300px' />
</div>
{/* end::Illustration */}
</div>
</div>
</>
)
}
export {Step5}
@@ -0,0 +1,228 @@
import { FC } from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
const InviteUsers: FC = () => {
const users = [
{
avatar: 'media/avatars/300-6.jpg',
name: 'Emma Smith',
email: 'e.smith@kpmg.com.au',
access: '1',
},
{
state: 'danger',
name: 'Melody Macy',
email: 'melody@altbox.com',
access: '1',
},
{
avatar: 'media/avatars/300-1.jpg',
name: 'Max Smith',
email: 'max@kt.com',
access: '3',
},
{
avatar: 'media/avatars/300-1.jpg',
name: 'Sean Bean',
email: 'sean@dellito.com',
access: '2',
},
{
avatar: 'media/avatars/300-25.jpg',
name: 'Brian Cox',
email: 'brian@exchange.com',
access: '3',
},
{
state: 'warning',
name: 'Mikaela Collins',
email: 'mikaela@pexcom.com',
access: '2',
},
{
avatar: 'media/avatars/300-9.jpg',
name: 'Francis Mitcham',
email: 'f.mitcham@kpmg.com.au',
access: '3',
},
{
state: 'danger',
name: 'Olivia Wild',
email: 'olivia@corpmail.com',
access: '2',
},
{
state: 'info',
name: 'Neil Owen',
email: 'owen.neil@gmail.com',
access: '1',
},
{
avatar: 'media/avatars/300-23.jpg',
name: 'Dan Wilson',
email: 'dam@consilting.com',
access: '3',
},
{
state: 'danger',
name: 'Emma Bold',
email: 'emma@intenso.com',
access: '2',
},
{
avatar: 'media/avatars/300-12.jpg',
name: 'Ana Crown',
email: 'ana.cf@limtel.com',
access: '1',
},
{
state: 'primary',
name: 'Robert Doe',
email: 'robert@benko.com',
access: '3',
},
{
avatar: 'media/avatars/300-13.jpg',
name: 'John Miller',
email: 'miller@mapple.com',
access: '3',
},
{
state: 'success',
name: 'Lucy Kunic',
email: 'lucy.m@fentech.com',
access: '2',
},
{
avatar: 'media/avatars/300-21.jpg',
name: 'Ethan Wilder',
email: 'ethan@loop.com.au',
access: '1',
},
{
avatar: 'media/avatars/300-12.jpg',
name: 'Ana Crown',
email: 'ana.cf@limtel.com',
access: '3',
},
]
return (
<div className='modal fade' id='kt_modal_invite_friends' aria-hidden='true'>
<div className='modal-dialog mw-650px'>
<div className='modal-content'>
<div className='modal-header pb-0 border-0 justify-content-end'>
<div className='btn btn-sm btn-icon btn-active-color-primary' data-bs-dismiss='modal'>
<KTIcon iconName='cross' className='fs-1' />
</div>
</div>
<div className='modal-body scroll-y mx-5 mx-xl-18 pt-0 pb-15'>
<div className='text-center mb-13'>
<h1 className='mb-3'>Invite a Friend</h1>
<div className='text-muted fw-bold fs-5'>
If you need more info, please check out
<a href='#' className='link-primary fw-bolder'>
{' '}
FAQ Page
</a>
.
</div>
</div>
<div className='btn btn-light-primary fw-bolder w-100 mb-8'>
<img
alt='Logo'
src={toAbsoluteUrl('media/svg/brand-logos/google-icon.svg')}
className='h-20px me-3'
/>
Invite Gmail Contacts
</div>
<div className='separator d-flex flex-center mb-8'>
<span className='text-uppercase bg-body fs-7 fw-bold text-muted px-3'>or</span>
</div>
<textarea
className='form-control form-control-solid mb-8'
rows={3}
placeholder='Type or paste emails here'
></textarea>
<div className='mb-10'>
<div className='fs-6 fw-bold mb-2'>Your Invitations</div>
<div className='mh-300px scroll-y me-n7 pe-7'>
{users.map((user, i) => {
return (
<div
className='d-flex flex-stack py-4 border-bottom border-gray-300 border-bottom-dashed'
key={i}
>
<div className='d-flex align-items-center'>
<div className='symbol symbol-35px symbol-circle'>
{user.avatar && <img alt='Pic' src={toAbsoluteUrl(user.avatar)} />}
{user.state && (
<div className='symbol symbol-35px symbol-circle'>
<span
className={`symbol-label bg-light-${user.state} text-${user.state} fw-bold`}
>
{user.name.charAt(0)}
</span>
</div>
)}
</div>
<div className='ms-5'>
<a
href='#'
className='fs-5 fw-bolder text-gray-900 text-hover-primary mb-2'
>
{user.name}
</a>
<div className='fw-bold text-muted'>{user.email}</div>
</div>
</div>
<div className='ms-2 w-100px'>
<select
defaultValue={'2'}
className='form-select form-select-solid form-select-sm select2-hidden-accessible'
>
<option value='1'>Guest</option>
<option value='2' data-select2-id='select2-data-12-vz6w'>
Owner
</option>
<option value='3'>Can Edit</option>
</select>
</div>
</div>
)
})}
</div>
</div>
<div className='d-flex flex-stack'>
<div className='me-5 fw-bold'>
<label className='fs-6'>Adding Users by Team Members</label>
<div className='fs-7 text-muted'>
If you need more info, please check budget planning
</div>
</div>
<label className='form-check form-switch form-check-custom form-check-solid'>
<input className='form-check-input' type='checkbox' value='1' />
<span className='form-check-label fw-bold text-muted'>Allowed</span>
</label>
</div>
</div>
</div>
</div>
</div>
)
}
export {InviteUsers}
@@ -0,0 +1,67 @@
import {Dispatch, SetStateAction, useEffect, useState, FC} from 'react'
import {Modal} from 'react-bootstrap'
import {KTIcon} from '../../../helpers'
type Props = {
data: {location: string; setLocation: Dispatch<SetStateAction<string>>}
show: boolean
handleClose: () => void
}
const SelectLocationModal: FC<Props> = ({show, handleClose, data}) => {
useEffect(() => {
initMap()
}, [])
const [location, setLocation] = useState(data.location)
const dissmissLocation = () => {
setLocation(data.location)
handleClose()
}
const applyLocation = () => {
data.setLocation(location)
handleClose()
}
const initMap = () => {}
return (
<Modal
className='modal fade'
id='kt_modal_select_location'
data-backdrop='static'
tabIndex={-1}
role='dialog'
show={show}
dialogClassName='modal-xl'
aria-hidden='true'
onHide={dissmissLocation}
>
<div className='modal-content'>
<div className='modal-header'>
<h5 className='modal-title'>Select Location</h5>
<div
className='btn btn-icon btn-sm btn-active-light-primary ms-2'
onClick={dissmissLocation}
>
<KTIcon iconName='cross' className='fs-2x' />
</div>
</div>
<div className='modal-body'>
<input type='text' value={location} onChange={(e) => setLocation(e.target.value)} />
<div id='kt_modal_select_location_map' className='map h-450px'></div>
</div>
<div className='modal-footer'>
<button type='button' className='btn btn-light-primary' onClick={dissmissLocation}>
Cancel
</button>
<button id='submit' type='button' className='btn btn-primary' onClick={applyLocation}>
Apply
</button>
</div>
</div>
</Modal>
)
}
export {SelectLocationModal}
@@ -0,0 +1,340 @@
import { FC, useState } from 'react'
import {KTIcon} from '../../../helpers'
const plans = [
{
title: 'Startup',
subTitle: 'Best for startups',
description: 'Optimal for 10+ team size and new startup',
priceMonth: '39',
priceAnnual: '399',
default: true,
custom: false,
features: [
{
title: 'Up to 10 Active Users',
supported: true,
},
{
title: 'Up to 30 Project Integrations',
supported: true,
},
{
title: 'Analytics Module',
supported: true,
},
{
title: 'Finance Module',
supported: false,
},
{
title: 'Accounting Module',
supported: false,
},
{
title: 'Network Platform',
supported: false,
},
{
title: 'Unlimited Cloud Space',
supported: false,
},
],
},
{
title: 'Advanced',
subTitle: 'Best for 100+ team size',
description: 'Optimal for 100+ team size and grown company',
priceMonth: '339',
priceAnnual: '3399',
default: false,
custom: false,
features: [
{
title: 'Up to 10 Active Users',
supported: true,
},
{
title: 'Up to 30 Project Integrations',
supported: true,
},
{
title: 'Analytics Module',
supported: true,
},
{
title: 'Finance Module',
supported: true,
},
{
title: 'Accounting Module',
supported: true,
},
{
title: 'Network Platform',
supported: false,
},
{
title: 'Unlimited Cloud Space',
supported: false,
},
],
},
{
title: 'Enterprise',
subTitle: 'Best value for 1000+ team',
description: 'Optimal for 1000+ team and enterpise',
priceMonth: '999',
priceAnnual: '9999',
label: 'Most popular',
default: false,
custom: false,
features: [
{
title: 'Up to 10 Active Users',
supported: true,
},
{
title: 'Up to 30 Project Integrations',
supported: true,
},
{
title: 'Analytics Module',
supported: true,
},
{
title: 'Finance Module',
supported: true,
},
{
title: 'Accounting Module',
supported: true,
},
{
title: 'Network Platform',
supported: true,
},
{
title: 'Unlimited Cloud Space',
supported: true,
},
],
},
{
title: 'Custom',
subTitle: 'Requet a custom license',
default: false,
custom: true,
},
]
const UpgradePlan: FC = () => {
const [currentState, setCurrentState] = useState<'month' | 'annual'>('month')
const [selected, setSelected] = useState('Startup')
return (
<div className='modal fade' id='kt_modal_upgrade_plan' aria-hidden='true'>
<div className='modal-dialog modal-xl'>
<div className='modal-content rounded'>
<div className='modal-header justify-content-end border-0 pb-0'>
<div className='btn btn-sm btn-icon btn-active-color-primary' data-bs-dismiss='modal'>
<KTIcon iconName='cross' className='fs-1' />
</div>
</div>
<div className='modal-body pt-0 pb-15 px-5 px-xl-20'>
<div className='mb-13 text-center'>
<h1 className='mb-3'>Upgrade a Plan</h1>
<div className='text-muted fw-bold fs-5'>
If you need more info, please check{' '}
<a href='#' className='link-primary fw-bolder'>
Pricing Guidelines
</a>
.
</div>
</div>
<div className='d-flex flex-column'>
<div className='nav-group nav-group-outline mx-auto' data-kt-buttons='true'>
<a
href='#'
className={
'btn btn-color-gray-500 btn-active btn-active-secondary px-6 py-3 me-2 ' +
(currentState === 'month' && 'active')
}
onClick={() => {
setCurrentState('month')
}}
data-kt-plan='month'
>
Monthly
</a>
<a
href='#'
className={
'btn btn-color-gray-500 btn-active btn-active-secondary px-6 py-3 me-2 ' +
(currentState === 'annual' && 'active')
}
onClick={() => {
setCurrentState('annual')
}}
data-kt-plan='annual'
>
Annual
</a>
</div>
<div className='row mt-10'>
<div className='col-lg-6 mb-10 mb-lg-0'>
<div className='nav flex-column'>
{plans.map((plan, index) => {
return (
<div
onClick={() => {
setSelected(plan.title)
}}
className={
`nav-link btn btn-outline btn-outline-dashed btn-color-dark d-flex flex-stack text-start p-6 ` +
(index !== plans.length - 1 && 'mb-6 ') +
(plan.default && 'active ') +
(!plan.custom && 'btn-active btn-active-primary ')
}
data-bs-toggle='tab'
data-bs-target={`#kt_upgrade_plan_${index}`}
key={index}
>
<div className='d-flex align-items-center me-2'>
<div className='form-check form-check-custom form-check-solid form-check-success me-6'>
<input
className='form-check-input'
type='radio'
name='plan'
value={plan.title}
checked={selected === plan.title}
onChange={(e) => setSelected(e.target.value)}
/>
</div>
<div className='flex-grow-1'>
<h2 className='d-flex align-items-center fs-2 fw-bolder flex-wrap'>
{plan.title}
{plan.label && (
<span className='badge badge-light-success ms-2 fs-7'>
{plan.label}
</span>
)}
</h2>
<div className='fw-bold opacity-50'>{plan.subTitle}</div>
</div>
</div>
<div className='ms-5'>
{plan.custom && (
<button className='btn btn-sm btn-primary'>Contact Us</button>
)}
{!plan.custom && (
<>
<span className='mb-2'>$</span>
<span className='fs-3x fw-bolder'>
{currentState === 'month' ? plan.priceMonth : plan.priceAnnual}
</span>
<span className='fs-7 opacity-50'>
/<span data-kt-element='period'>Mon</span>
</span>
</>
)}
</div>
</div>
)
})}
</div>
</div>
<div className='col-lg-6'>
<div className='tab-content rounded h-100 bg-light p-10'>
{plans.map((plan, index) => {
return (
<div key={`custom${index}`}>
{plan.title === selected && !plan.custom && (
<>
<div
className={`tab-pane fade` + (plan.default && 'show active')}
id={`kt_upgrade_plan_${index}`}
key={index}
>
<div className='pb-5'>
<h2 className='fw-bolder text-gray-900'>Whats in Startup Plan?</h2>
<div className='text-gray-500 fw-bold'>{plan.description}</div>
</div>
<div className='pt-1'>
{plan.features!.map((feature, i) => {
return (
<div
className={
`d-flex align-items-center` +
(i !== plan.features!.length - 1 && ' mb-7')
}
key={`${i}-${feature.title}`}
>
{feature.supported && (
<>
<span className='fw-bold fs-5 text-gray-700 flex-grow-1'>
{feature.title}
</span>
<KTIcon
iconName='check-circle'
className='fs-1 text-success'
/>
</>
)}
{!feature.supported && (
<>
<span className='fw-bold fs-5 text-gray-500 flex-grow-1'>
{feature.title}
</span>
<KTIcon iconName='cross-circle' className='fs-1' />
</>
)}
</div>
)
})}
</div>
</div>
</>
)}
</div>
)
})}
</div>
</div>
</div>
</div>
<div className='d-flex flex-center flex-row-fluid pt-12'>
<button type='reset' className='btn btn-light me-3' data-bs-dismiss='modal'>
Cancel
</button>
<button type='submit' className='btn btn-primary'>
Upgrade Plan
</button>
</div>
</div>
</div>
</div>
</div>
)
}
export {UpgradePlan}
@@ -0,0 +1,150 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
import {FC, useEffect, useRef} from 'react'
import {KTIcon} from '../../../../helpers'
import {getCSSVariableValue} from '../../../../assets/ts/_utils'
import {useThemeMode} from '../../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartSize?: number
chartLine?: number
chartRotate?: number
}
const CardsWidget17: FC<Props> = ({
className,
chartSize = 70,
chartLine = 11,
chartRotate = 145,
}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
useEffect(() => {
refreshChart()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [mode])
const refreshChart = () => {
if (!chartRef.current) {
return
}
setTimeout(() => {
initChart(chartSize, chartLine, chartRotate)
}, 10)
}
return (
<div className={`card card-flush ${className}`}>
<div className='card-header pt-5'>
<div className='card-title d-flex flex-column'>
<div className='d-flex align-items-center'>
<span className='fs-4 fw-semibold text-gray-500 me-1 align-self-start'>$</span>
<span className='fs-2hx fw-bold text-gray-900 me-2 lh-1 ls-n2'>69,700</span>
<span className='badge badge-light-success fs-base'>
<KTIcon iconName='arrow-up' className='fs-5 text-success ms-n1' /> 2.2%
</span>
</div>
<span className='text-gray-500 pt-1 fw-semibold fs-6'>Projects Earnings in April</span>
</div>
</div>
<div className='card-body pt-2 pb-4 d-flex flex-wrap align-items-center'>
<div className='d-flex flex-center me-5 pt-2'>
<div
id='kt_card_widget_17_chart'
ref={chartRef}
style={{minWidth: chartSize + 'px', minHeight: chartSize + 'px'}}
data-kt-size={chartSize}
data-kt-line={chartLine}
></div>
</div>
<div className='d-flex flex-column content-justify-center flex-row-fluid'>
<div className='d-flex fw-semibold align-items-center'>
<div className='bullet w-8px h-3px rounded-2 bg-success me-3'></div>
<div className='text-gray-500 flex-grow-1 me-4'>Leaf CRM</div>
<div className='fw-bolder text-gray-700 text-xxl-end'>$7,660</div>
</div>
<div className='d-flex fw-semibold align-items-center my-3'>
<div className='bullet w-8px h-3px rounded-2 bg-primary me-3'></div>
<div className='text-gray-500 flex-grow-1 me-4'>Mivy App</div>
<div className='fw-bolder text-gray-700 text-xxl-end'>$2,820</div>
</div>
<div className='d-flex fw-semibold align-items-center'>
<div
className='bullet w-8px h-3px rounded-2 me-3'
style={{backgroundColor: '#E4E6EF'}}
></div>
<div className='text-gray-500 flex-grow-1 me-4'>Others</div>
<div className=' fw-bolder text-gray-700 text-xxl-end'>$45,257</div>
</div>
</div>
</div>
</div>
)
}
const initChart = function (
chartSize: number = 70,
chartLine: number = 11,
chartRotate: number = 145
) {
const el = document.getElementById('kt_card_widget_17_chart')
if (!el) {
return
}
el.innerHTML = ''
const options = {
size: chartSize,
lineWidth: chartLine,
rotate: chartRotate,
//percent: el.getAttribute('data-kt-percent') ,
}
const canvas = document.createElement('canvas')
const span = document.createElement('span')
//@ts-ignore
if (typeof G_vmlCanvasManager !== 'undefined') {
//@ts-ignore
G_vmlCanvasManager.initElement(canvas)
}
const ctx = canvas.getContext('2d')
canvas.width = canvas.height = options.size
el.appendChild(span)
el.appendChild(canvas)
ctx?.translate(options.size / 2, options.size / 2) // change center
ctx?.rotate((-1 / 2 + options.rotate / 180) * Math.PI) // rotate -90 deg
//imd = ctx.getImageData(0, 0, 240, 240);
const radius = (options.size - options.lineWidth) / 2
const drawCircle = function (color: string, lineWidth: number, percent: number) {
percent = Math.min(Math.max(0, percent || 1), 1)
if (!ctx) {
return
}
ctx.beginPath()
ctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, false)
ctx.strokeStyle = color
ctx.lineCap = 'round' // butt, round or square
ctx.lineWidth = lineWidth
ctx.stroke()
}
// Init 2
drawCircle('#E4E6EF', options.lineWidth, 100 / 100)
drawCircle(getCSSVariableValue('--bs-primary'), options.lineWidth, 100 / 150)
drawCircle(getCSSVariableValue('--bs-success'), options.lineWidth, 100 / 250)
}
export {CardsWidget17}
@@ -0,0 +1,44 @@
type Props = {
className: string
description: string
color: string
img: string
}
const CardsWidget20 = ({className, description, color, img}: Props) => (
<div
className={`card card-flush bgi-no-repeat bgi-size-contain bgi-position-x-end ${className}`}
style={{
backgroundColor: color,
backgroundImage: `url('${img}')`,
}}
>
<div className='card-header pt-5'>
<div className='card-title d-flex flex-column'>
<span className='fs-2hx fw-bold text-white me-2 lh-1 ls-n2'>69</span>
<span className='text-white opacity-75 pt-1 fw-semibold fs-6'>{description}</span>
</div>
</div>
<div className='card-body d-flex align-items-end pt-0'>
<div className='d-flex align-items-center flex-column mt-3 w-100'>
<div className='d-flex justify-content-between fw-bold fs-6 text-white opacity-75 w-100 mt-auto mb-2'>
<span>43 Pending</span>
<span>72%</span>
</div>
<div className='h-8px mx-3 w-100 bg-white bg-opacity-50 rounded'>
<div
className='bg-white rounded h-8px'
role='progressbar'
style={{width: '72%'}}
aria-valuenow={50}
aria-valuemin={0}
aria-valuemax={100}
></div>
</div>
</div>
</div>
</div>
)
export {CardsWidget20}
@@ -0,0 +1,74 @@
import clsx from 'clsx'
import {toAbsoluteUrl} from '../../../../helpers'
type Props = {
className: string
description: string
icon: boolean
stats: number
labelColor: string
textColor: string
}
const items: Array<{
name: string
initials?: string
src?: string
state?: string
}> = [
{name: 'Alan Warden', initials: 'A', state: 'warning'},
{name: 'Michael Eberon', src: toAbsoluteUrl('media/avatars/300-11.jpg')},
{name: 'Susan Redwood', initials: 'S', state: 'primary'},
{name: 'Melody Macy', src: toAbsoluteUrl('media/avatars/300-2.jpg')},
{name: 'Perry Matthew', initials: 'P', state: 'danger'},
{name: 'Barry Walter', src: toAbsoluteUrl('media/avatars/300-12.jpg')},
]
const CardsWidget7 = ({className, description, stats, labelColor, textColor}: Props) => (
<div className={`card card-flush ${className}`}>
<div className='card-header pt-5'>
<div className='card-title d-flex flex-column'>
<div className='card-title d-flex flex-column'>
<span className='fs-2hx fw-bold text-gray-900 me-2 lh-1 ls-n2'>{stats}</span>
<span className='text-gray-500 pt-1 fw-semibold fs-6'>{description}</span>
</div>
</div>
</div>
<div className='card-body d-flex flex-column justify-content-end pe-0'>
<span className='fs-6 fw-bolder text-gray-800 d-block mb-2'>Todays Heroes</span>
<div className='symbol-group symbol-hover flex-nowrap'>
{items.map((item, index) => (
<div
className='symbol symbol-35px symbol-circle'
data-bs-toggle='tooltip'
title={item.name}
key={`cw7-item-${index}`}
>
{item.src && <img alt='Pic' src={item.src} />}
{item.state && item.initials && (
<span
className={clsx(
'symbol-label fw-bold',
'bg-' + item.state,
'text-inverse-' + item.state
)}
>
{item.initials}
</span>
)}
</div>
))}
<a href='#' className='symbol symbol-35px symbol-circle'>
<span
className={clsx('symbol-label fs-8 fw-bold', 'bg-' + labelColor, 'text-' + textColor)}
>
+42
</span>
</a>
</div>
</div>
</div>
)
export {CardsWidget7}
@@ -0,0 +1,55 @@
import {Link} from 'react-router-dom'
import {toAbsoluteUrl} from '../../../../helpers'
type Props = {
className: string
}
const EngageWidget10 = ({className}: Props) => (
<div className={`card card-flush ${className}`}>
<div
className='card-body d-flex flex-column justify-content-between mt-9 bgi-no-repeat bgi-size-cover bgi-position-x-center pb-0'
style={{
backgroundPosition: '100% 50%',
backgroundImage: `url('${toAbsoluteUrl('media/stock/900x600/42.png')}')`,
}}
>
<div className='mb-10'>
<div className='fs-2hx fw-bold text-gray-800 text-center mb-13'>
<span className='me-2'>
Try our all new Enviroment with
<br />
<span className='position-relative d-inline-block text-danger'>
<Link
to='/crafted/pages/profile/overview'
className='text-danger
opacity-75-hover'
>
Pro Plan
</Link>
<span className='position-absolute opacity-15 bottom-0 start-0 border-4 border-danger border-bottom w-100'></span>
</span>
</span>
for Free
</div>
<div className='text-center'>
<a href='#'>Upgrade Now</a>
</div>
</div>
<img
className='mx-auto h-150px h-lg-200px theme-light-show'
src={toAbsoluteUrl('media/illustrations/misc/upgrade.svg')}
alt=''
/>
<img
className='mx-auto h-150px h-lg-200px theme-dark-show'
src={toAbsoluteUrl('media/illustrations/misc/upgrade-dark.svg')}
alt=''
/>
</div>
</div>
)
export {EngageWidget10}
@@ -0,0 +1,41 @@
import {Fragment} from 'react'
import {KTIcon} from '../../../../helpers'
type Props = {
className: string
}
const rows: Array<{description: string}> = [
{description: 'Avg. Client Rating'},
{description: 'Instagram Followers'},
{description: 'Google Ads CPC'},
]
const ListsWidget26 = ({className}: Props) => (
<div className={`card card-flush ${className}`}>
<div className='card-header pt-5'>
<h3 className='card-title text-gray-800 fw-bold'>External Links</h3>
<div className='card-toolbar'></div>
</div>
<div className='card-body pt-5'>
{rows.map((row, index) => (
<Fragment key={`lw26-rows-${index}`}>
<div className='d-flex flex-stack'>
<a href='#' className='text-primary fw-semibold fs-6 me-2'>
{row.description}
</a>
<button
type='button'
className='btn btn-icon btn-sm h-auto btn-color-gray-500 btn-active-color-primary justify-content-end'
>
<KTIcon iconName='exit-right-corner' className='fs-2' />
</button>
</div>
{rows.length - 1 > index && <div className='separator separator-dashed my-3' />}
</Fragment>
))}
</div>
</div>
)
export {ListsWidget26}
@@ -0,0 +1,197 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {KTIcon} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget1: FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const chart = new ApexCharts(chartRef.current, getChartOptions(height))
if (chart) {
chart.render()
}
return chart
}
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
{/* begin::Title */}
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Statistics</span>
<span className='text-muted fw-semibold fs-7'>More than 400 new members</span>
</h3>
{/* end::Title */}
{/* begin::Toolbar */}
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div ref={chartRef} id='kt_charts_widget_1_chart' style={{height: '350px'}} />
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget1}
function getChartOptions(height: number): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const baseColor = getCSSVariableValue('--bs-primary')
const secondaryColor = getCSSVariableValue('--bs-gray-300')
return {
series: [
{
name: 'Net Profit',
data: [44, 55, 57, 56, 61, 58],
},
{
name: 'Revenue',
data: [76, 85, 101, 98, 87, 105],
},
],
chart: {
fontFamily: 'inherit',
type: 'bar',
height: height,
toolbar: {
show: false,
},
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '30%',
borderRadius: 5,
},
},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
stroke: {
show: true,
width: 2,
colors: ['transparent'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
fill: {
opacity: 1,
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [baseColor, secondaryColor],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
},
}
}
@@ -0,0 +1,200 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget2: FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const chart = new ApexCharts(chartRef.current, getChartOptions(height))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Orders</span>
<span className='text-muted fw-semibold fs-7'>More than 500 new orders</span>
</h3>
{/* begin::Toolbar */}
<div className='card-toolbar' data-kt-buttons='true'>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary active px-4 me-1'
id='kt_charts_widget_2_year_btn'
>
Year
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4 me-1'
id='kt_charts_widget_2_month_btn'
>
Month
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'
id='kt_charts_widget_2_week_btn'
>
Week
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div ref={chartRef} id='kt_charts_widget_2_chart' style={{height: '350px'}}></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget2}
function getChartOptions(height: number): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const baseColor = getCSSVariableValue('--bs-warning')
const secondaryColor = getCSSVariableValue('--bs-gray-300')
return {
series: [
{
name: 'Net Profit',
data: [44, 55, 57, 56, 61, 58],
},
{
name: 'Revenue',
data: [76, 85, 101, 98, 87, 105],
},
],
chart: {
fontFamily: 'inherit',
type: 'bar',
height: height,
toolbar: {
show: false,
},
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '30%',
borderRadius: 5,
},
},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
stroke: {
show: true,
width: 2,
colors: ['transparent'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
fill: {
opacity: 1,
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [baseColor, secondaryColor],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
},
}
}
@@ -0,0 +1,209 @@
import React, {useEffect, useRef} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget3: React.FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshMode = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, getChartOptions())
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshMode()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Transactions</span>
<span className='text-muted fw-semibold fs-7'>More than 1000 new records</span>
</h3>
{/* begin::Toolbar */}
<div className='card-toolbar' data-kt-buttons='true'>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary active px-4 me-1'
id='kt_charts_widget_3_year_btn'
>
Year
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4 me-1'
id='kt_charts_widget_3_month_btn'
>
Month
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'
id='kt_charts_widget_3_week_btn'
>
Week
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div ref={chartRef} id='kt_charts_widget_3_chart' style={{height: '350px'}}></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget3}
function getChartOptions(): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const baseColor = getCSSVariableValue('--bs-info')
const lightColor = getCSSVariableValue('--bs-info-light')
return {
series: [
{
name: 'Net Profit',
data: [30, 40, 40, 90, 90, 70, 70],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: 350,
toolbar: {
show: false,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
position: 'front',
stroke: {
color: baseColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: true,
formatter: undefined,
offsetY: 0,
style: {
fontSize: '12px',
},
},
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [lightColor],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
},
markers: {
strokeColors: baseColor,
strokeWidth: 3,
},
}
}
@@ -0,0 +1,218 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget4: FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const chart = new ApexCharts(chartRef.current, getChartOptions(height))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Customers</span>
<span className='text-muted fw-semibold fs-7'>More than 500 new customers</span>
</h3>
{/* begin::Toolbar */}
<div className='card-toolbar' data-kt-buttons='true'>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary active px-4 me-1'
id='kt_charts_widget_4_year_btn'
>
Year
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4 me-1'
id='kt_charts_widget_4_month_btn'
>
Month
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'
id='kt_charts_widget_4_week_btn'
>
Week
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div ref={chartRef} id='kt_charts_widget_4_chart' style={{height: '350px'}}></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget4}
function getChartOptions(height: number): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const baseColor = getCSSVariableValue('--bs-success')
const baseLightColor = getCSSVariableValue('--bs-success-light')
const secondaryColor = getCSSVariableValue('--bs-warning')
const secondaryLightColor = getCSSVariableValue('--bs-warning-light')
return {
series: [
{
name: 'Net Profit',
data: [60, 50, 80, 40, 100, 60],
},
{
name: 'Revenue',
data: [70, 60, 110, 40, 50, 70],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: height,
toolbar: {
show: false,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
position: 'front',
stroke: {
color: labelColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: true,
formatter: undefined,
offsetY: 0,
style: {
fontSize: '12px',
},
},
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [baseColor, secondaryColor],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
},
markers: {
colors: [baseLightColor, secondaryLightColor],
strokeColors: [baseLightColor, secondaryLightColor],
strokeWidth: 3,
},
}
}
@@ -0,0 +1,204 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget5: FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const chart = new ApexCharts(chartRef.current, getChartOptions(height))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Customers</span>
<span className='text-muted fw-semibold fs-7'>More than 500 new customers</span>
</h3>
{/* begin::Toolbar */}
<div className='card-toolbar' data-kt-buttons='true'>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary active px-4 me-1'
id='kt_charts_widget_5_year_btn'
>
Year
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4 me-1'
id='kt_charts_widget_5_month_btn'
>
Month
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'
id='kt_charts_widget_5_week_btn'
>
Week
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div ref={chartRef} id='kt_charts_widget_5_chart' style={{height: '350px'}}></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget5}
function getChartOptions(height: number): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const baseColor = getCSSVariableValue('--bs-primary')
const secondaryColor = getCSSVariableValue('--bs-info')
return {
series: [
{
name: 'Net Profit',
data: [40, 50, 65, 70, 50, 30],
},
{
name: 'Revenue',
data: [-30, -40, -55, -60, -40, -20],
},
],
chart: {
fontFamily: 'inherit',
type: 'bar',
stacked: true,
height: height,
toolbar: {
show: false,
},
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '12%',
borderRadius: 5,
},
},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
stroke: {
show: true,
width: 2,
colors: ['transparent'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
yaxis: {
min: -80,
max: 80,
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
fill: {
opacity: 1,
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [baseColor, secondaryColor],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
},
}
}
@@ -0,0 +1,210 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget6: FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const chart = new ApexCharts(chartRef.current, getChartOptions(height))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Orders</span>
<span className='text-muted fw-semibold fs-7'>More than 500+ new orders</span>
</h3>
{/* begin::Toolbar */}
<div className='card-toolbar' data-kt-buttons='true'>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary active px-4 me-1'
id='kt_charts_widget_6_sales_btn'
>
Sales
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4 me-1'
id='kt_charts_widget_6_expenses_btn'
>
Expenses
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div ref={chartRef} id='kt_charts_widget_6_chart' style={{height: '350px'}}></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget6}
function getChartOptions(height: number): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const baseColor = getCSSVariableValue('--bs-primary')
const baseLightColor = getCSSVariableValue('--bs-primary-light')
const secondaryColor = getCSSVariableValue('--bs-info')
return {
series: [
{
name: 'Net Profit',
type: 'bar',
data: [40, 50, 65, 70, 50, 30],
},
{
name: 'Revenue',
type: 'bar',
data: [20, 20, 25, 30, 30, 20],
},
{
name: 'Expenses',
type: 'area',
data: [50, 80, 60, 90, 50, 70],
},
],
chart: {
fontFamily: 'inherit',
stacked: true,
height: height,
toolbar: {
show: false,
},
},
plotOptions: {
bar: {
horizontal: false,
borderRadius: 5,
columnWidth: '12%',
},
},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
stroke: {
curve: 'smooth',
show: true,
width: 2,
colors: ['transparent'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
yaxis: {
max: 120,
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
fill: {
opacity: 1,
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [baseColor, secondaryColor, baseLightColor],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
padding: {
top: 0,
right: 0,
bottom: 0,
left: 0,
},
},
}
}
@@ -0,0 +1,242 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget7: FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const chart = new ApexCharts(chartRef.current, getChartOptions(height))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Users</span>
<span className='text-muted fw-semibold fs-7'>More than 500 new users</span>
</h3>
{/* begin::Toolbar */}
<div className='card-toolbar' data-kt-buttons='true'>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary active px-4 me-1'
id='kt_charts_widget_7_year_btn'
>
Year
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4 me-1'
id='kt_charts_widget_7_month_btn'
>
Month
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'
id='kt_charts_widget_7_week_btn'
>
Week
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div
ref={chartRef}
id='kt_charts_widget_7_chart'
style={{height: '350px'}}
className='card-rounded-bottom'
></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget7}
function getChartOptions(height: number): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const strokeColor = getCSSVariableValue('--bs-gray-300')
const color1 = getCSSVariableValue('--bs-warning')
const color1Light = getCSSVariableValue('--bs-warning-light')
const color2 = getCSSVariableValue('--bs-success')
const color2Light = getCSSVariableValue('--bs-success-light')
const color3 = getCSSVariableValue('--bs-primary')
const color3Light = getCSSVariableValue('--bs-primary-light')
return {
series: [
{
name: 'Net Profit',
data: [30, 30, 50, 50, 35, 35],
},
{
name: 'Revenue',
data: [55, 20, 20, 20, 70, 70],
},
{
name: 'Expenses',
data: [60, 60, 40, 40, 30, 30],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: height,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 2,
colors: [color1, 'transparent', 'transparent'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: strokeColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: true,
formatter: undefined,
offsetY: 0,
style: {
fontSize: '12px',
},
},
},
yaxis: {
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [color1, color2, color3],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
},
markers: {
colors: [color1Light, color2Light, color3Light],
strokeColors: [color1, color2, color3],
strokeWidth: 3,
},
}
}
@@ -0,0 +1,246 @@
import React, {useEffect, useRef} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
}
const ChartsWidget8: React.FC<Props> = ({className}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const chart = new ApexCharts(chartRef.current, getChartOptions(height))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Recent Orders</span>
<span className='text-muted fw-semibold fs-7'>More than 500 new orders</span>
</h3>
{/* begin::Toolbar */}
<div className='card-toolbar' data-kt-buttons='true'>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary active px-4 me-1'
id='kt_charts_widget_8_year_btn'
>
Year
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4 me-1'
id='kt_charts_widget_8_month_btn'
>
Month
</a>
<a
className='btn btn-sm btn-color-muted btn-active btn-active-primary px-4'
id='kt_charts_widget_8_week_btn'
>
Week
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body'>
{/* begin::Chart */}
<div
ref={chartRef}
id='kt_charts_widget_8_chart'
style={{height: '350px'}}
className='card-rounded-bottom'
></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
export {ChartsWidget8}
function getChartOptions(height: number): ApexOptions {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const strokeColor = getCSSVariableValue('--bs-gray-300')
const color1 = getCSSVariableValue('--bs-warning')
const color1Light = getCSSVariableValue('--bs-warning-light')
const color2 = getCSSVariableValue('--bs-success')
const color2Light = getCSSVariableValue('--bs-success-light')
const color3 = getCSSVariableValue('--bs-primary')
const color3Light = getCSSVariableValue('--bs-primary-light')
return {
series: [
{
name: 'Net Profit',
data: [30, 30, 50, 50, 35, 35],
},
{
name: 'Revenue',
data: [55, 20, 20, 20, 70, 70],
},
{
name: 'Expenses',
data: [60, 60, 40, 40, 30, 30],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: height,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 2,
colors: [color1, color2, color3],
},
xaxis: {
offsetX: 0,
offsetY: 0,
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: strokeColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: true,
formatter: undefined,
offsetY: 0,
style: {
fontSize: '12px',
},
},
},
yaxis: {
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [color1Light, color2Light, color3Light],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
padding: {
top: 0,
bottom: 0,
left: 0,
right: 0,
},
},
markers: {
colors: [color1, color2, color3],
strokeColors: [color1, color2, color3],
strokeWidth: 3,
},
}
}
@@ -0,0 +1,63 @@
import { FC } from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
// import { toAbsoluteUrl } from "../../../helpers";
// import { KTSVG } from "../../../helpers";
type Props = {
className: string
bgColor?: string
bgImage?: string
innerPadding?: string
bgHex?: string
lg?: string
}
const EngageWidget1: FC<Props> = ({
className,
bgHex = '',
bgColor = '',
lg = '',
bgImage = '',
}) => {
let bgImagePath = bgImage ? toAbsoluteUrl(`media/${bgImage}`) : ''
if (bgImagePath) {
bgImagePath = `url("${bgImagePath}")`
}
return (
<div className={`card ${className}`}>
<div
className={`card-body card-rounded p-0 d-flex bg-${bgColor}`}
style={{backgroundColor: bgHex}}
>
<div
className={`d-flex flex-column flex-lg-row-auto ${
lg ? 'py-10 py-md-14 px-10 px-md-20 pe-lg-0' : 'p-10 p-md-20'
}`}
>
<h1 className={`fw-bold text-gray-900 ${lg ? 'mb-0' : ''}`}>Search Goods</h1>
<div className='fs-3 mb-8'>Get Amazing Gadgets</div>
<form className='d-flex flex-center py-2 px-6 bg-body rounded'>
<KTIcon iconName='magnifier' className='fs-1 text-primary' />
<input
type='text'
className={`form-control border-0 fw-semibold ps-2 ${
lg ? 'w-xxl-600px' : 'w-xxl-350px'
}`}
placeholder='Search Goods'
/>
</form>
</div>
<div
className={`d-none d-md-flex flex-row-fluid mw-400px ml-auto ${
bgImage ? 'bgi-no-repeat bgi-position-y-center bgi-position-x-left bgi-size-cover' : ''
}`}
style={{backgroundImage: bgImagePath}}
></div>
</div>
</div>
)
}
export {EngageWidget1}
@@ -0,0 +1,42 @@
import clsx from 'clsx'
import React from 'react'
type Props = {
className: string
imagePath?: string
innerPadding?: string
color?: string
}
const EngageWidget2: React.FC<Props> = ({
className,
imagePath = '',
color = 'primary',
}) => {
return (
<div className={`card overflow-hidden ${className}`}>
<div className={`card-body p-0 d-flex card-rounded bg-light-${color}`}>
<div className='py-18 px-12'>
<h3 className='fs-2x'>
<a href='#' className='text-gray-900 text-hover-primary fw-bold'>
Nike Sneakers
</a>
</h3>
<div className={clsx('fs-3', `text-${color}`)}>Get Amazing Nike Sneakers</div>
</div>
{imagePath && (
<div
className='d-none d-md-flex flex-row-fluid bgi-no-repeat bgi-position-y-center bgi-position-x-right bgi-size-cover'
style={{
transform: 'translateX(10%) rotate(-26deg)',
backgroundImage: `url('${imagePath}')`,
}}
></div>
)}
</div>
</div>
)
}
export {EngageWidget2}
@@ -0,0 +1,81 @@
import { FC } from 'react'
import {toAbsoluteUrl} from '../../../helpers'
type Props = {
className: string
imagePath?: string
innerPadding?: string
color?: string
}
const EngageWidget3: FC<Props> = ({
className,
color = 'primary',
}) => {
return (
<div className={`card card-custom ${className}`}>
{/* begin::Card Body */}
<div
className={`card-body d-flex p-12 flex-column flex-md-row flex-lg-column flex-xxl-row bg-${color}`}
>
{/*begin::Image*/}
<div
className='bgi-no-repeat bgi-position-center bgi-size-cover h-300px h-md-auto h-lg-300px h-xxl-auto mw-100 w-650px mx-auto'
style={{
backgroundImage: `url('${toAbsoluteUrl('media/products/12.png')}'`,
}}
></div>
{/*end::Image*/}
{/*begin::Card*/}
<div className='card shadow-none w-auto w-md-300px w-lg-auto w-xxl-300px ml-auto'>
{/*begin::Card Body*/}
<div className='card-body bg-light px-12 py-10'>
<h3 className='fw-bold fs-1 mb-1'>
<a href='#' className='text-gray-800'>
Nike True Balance
</a>
</h3>
<div className='text-primary fs-3 mb-9'>$ 399.99</div>
<div className='fs-7 mb-8'>
Outlines keep you honest. They stop you from indulging in poorly ought out metaphorsy
about driving and keep you focused one the overall structure of your post
</div>
{/*begin::Info*/}
<table className='table table-borderless align-middle fw-semibold'>
<tbody>
<tr>
<td className='text-gray-600 ps-0'>Shoes Brand</td>
<td className='text-gray-900 pe-0'>Nike</td>
</tr>
<tr>
<td className='text-gray-600 ps-0'>SKU</td>
<td className='text-gray-900 pe-0'>NF3535</td>
</tr>
<tr>
<td className='text-gray-600 ps-0'>Color</td>
<td className='text-gray-900 pe-0'>White</td>
</tr>
<tr>
<td className='text-gray-600 ps-0'>Collection</td>
<td className='text-gray-900 pe-0'>2020 Spring</td>
</tr>
<tr>
<td className='text-gray-600 ps-0'>In Stock</td>
<td className='text-gray-900 pe-0'>280</td>
</tr>
</tbody>
</table>
{/*end::Info*/}
</div>
{/*end::Card Body*/}
</div>
{/*end::Card*/}
</div>
{/*end::Card Body*/}
</div>
)
}
export {EngageWidget3}
@@ -0,0 +1,114 @@
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const FeedsWidget2: React.FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body pb-0'>
{/* begin::Header */}
<div className='d-flex align-items-center mb-5'>
{/* begin::User */}
<div className='d-flex align-items-center flex-grow-1'>
{/* begin::Avatar */}
<div className='symbol symbol-45px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-23.jpg')} alt='' />
</div>
{/* end::Avatar */}
{/* begin::Info */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Nick Logan
</a>
<span className='text-gray-500 fw-semibold'>PHP, SQLite, Artisan CLI</span>
</div>
{/* end::Info */}
</div>
{/* end::User */}
{/* begin::Menu */}
<div className='my-0'>
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
</div>
{/* end::Menu */}
</div>
{/* end::Header */}
{/* begin::Post */}
<div className='mb-5'>
{/* begin::Text */}
<p className='text-gray-800 fw-normal mb-5'>
Outlines keep you honest. They stop you from indulging in poorly thought-out metaphors
about driving and keep you focused on the overall structure of your post
</p>
{/* end::Text */}
{/* begin::Toolbar */}
<div className='d-flex align-items-center mb-5'>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-success px-4 py-2 me-4'
>
<KTIcon iconName='message-text-2' className='fs-2' />
120
</a>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-danger px-4 py-2'
>
<KTIcon iconName='heart' className='fs-2' />
15
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Post */}
{/* begin::Separator */}
<div className='separator mb-4'></div>
{/* end::Separator */}
{/* begin::Reply input */}
<form className='position-relative mb-6'>
<textarea
className='form-control border-0 p-0 pe-10 resize-none min-h-25px'
rows={1}
placeholder='Reply..'
></textarea>
<div className='position-absolute top-0 end-0 me-n5'>
<span className='btn btn-icon btn-sm btn-active-color-primary pe-0 me-2'>
<KTIcon iconName='paper-clip' className='fs-3 mb-3' />
</span>
<span className='btn btn-icon btn-sm btn-active-color-primary ps-0'>
<KTIcon iconName='geolocation' className='fs-2 mb-3' />
</span>
</div>
</form>
{/* edit::Reply input */}
</div>
{/* end::Body */}
</div>
)
}
export {FeedsWidget2}
@@ -0,0 +1,187 @@
import { FC } from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown2} from '../../content/dropdown/Dropdown2'
type Props = {
className: string
}
const FeedsWidget3: FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body pb-0'>
{/* begin::Header */}
<div className='d-flex align-items-center mb-3'>
{/* begin::User */}
<div className='d-flex align-items-center flex-grow-1'>
{/* begin::Avatar */}
<div className='symbol symbol-45px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-21.jpg')} alt='' />
</div>
{/* end::Avatar */}
{/* begin::Info */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Carles Nilson
</a>
<span className='text-gray-500 fw-semibold'>Yestarday at 5:06 PM</span>
</div>
{/* end::Info */}
</div>
{/* end::User */}
{/* begin::Menu */}
<div className='my-0'>
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown2 />
</div>
{/* end::Menu */}
</div>
{/* end::Header */}
{/* begin::Post */}
<div className='mb-7'>
{/* begin::Text */}
<div className='text-gray-800 mb-5'>
Outlines keep you honest. They stop you from indulging in poorly thought-out metaphors
about driving and keep you focused on the overall structure of your post
</div>
{/* end::Text */}
{/* begin::Toolbar */}
<div className='d-flex align-items-center mb-5'>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-success px-4 py-2 me-4'
>
<KTIcon iconName='message-text-2' className='fs-2' />
12
</a>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-danger px-4 py-2'
>
<KTIcon iconName='heart' className='fs-2' />
150
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Post */}
{/* begin::Replies */}
<div className='mb-7 ps-10'>
{/* begin::Reply */}
<div className='d-flex mb-5'>
{/* begin::Avatar */}
<div className='symbol symbol-45px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-14.jpg')} alt='' />
</div>
{/* end::Avatar */}
{/* begin::Info */}
<div className='d-flex flex-column flex-row-fluid'>
{/* begin::Info */}
<div className='d-flex align-items-center flex-wrap mb-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold me-2'>
Alice Danchik
</a>
<span className='text-gray-500 fw-semibold fs-7'>1 day</span>
<a href='#' className='ms-auto text-gray-500 text-hover-primary fw-semibold fs-7'>
Reply
</a>
</div>
{/* end::Info */}
{/* begin::Post */}
<span className='text-gray-800 fs-7 fw-normal pt-1'>
Long before you sit dow to put digital pen to paper you need to make sure you have
to sit down and write.
</span>
{/* end::Post */}
</div>
{/* end::Info */}
</div>
{/* end::Reply */}
{/* begin::Reply */}
<div className='d-flex'>
{/* begin::Avatar */}
<div className='symbol symbol-45px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-9.jpg')} alt='' />
</div>
{/* end::Avatar */}
{/* begin::Info */}
<div className='d-flex flex-column flex-row-fluid'>
{/* begin::Info */}
<div className='d-flex align-items-center flex-wrap mb-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold me-2'>
Harris Bold
</a>
<span className='text-gray-500 fw-semibold fs-7'>2 days</span>
<a href='#' className='ms-auto text-gray-500 text-hover-primary fw-semibold fs-7'>
Reply
</a>
</div>
{/* end::Info */}
{/* begin::Post */}
<span className='text-gray-800 fs-7 fw-normal pt-1'>
Outlines keep you honest. They stop you from indulging in poorly
</span>
{/* end::Post */}
</div>
{/* end::Info */}
</div>
{/* end::Reply */}
</div>
{/* end::Replies */}
{/* begin::Separator */}
<div className='separator mb-4'></div>
{/* end::Separator */}
{/* begin::Reply input */}
<form className='position-relative mb-6'>
<textarea
className='form-control border-0 p-0 pe-10 resize-none min-h-25px'
data-kt-autosize='true'
rows={1}
placeholder='Reply..'
></textarea>
<div className='position-absolute top-0 end-0 me-n5'>
<span className='btn btn-icon btn-sm btn-active-color-primary pe-0 me-2'>
<KTIcon iconName='message-text-2' className='fs-3 mb-3' />
</span>
<span className='btn btn-icon btn-sm btn-active-color-primary ps-0'>
<KTIcon iconName='geolocation' className='fs-2 mb-3' />
</span>
</div>
</form>
{/* edit::Reply input */}
</div>
{/* end::Body */}
</div>
)
}
export {FeedsWidget3}
@@ -0,0 +1,113 @@
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const FeedsWidget4: React.FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body pb-0'>
{/* begin::Header */}
<div className='d-flex align-items-center mb-5'>
{/* begin::User */}
<div className='d-flex align-items-center flex-grow-1'>
{/* begin::Avatar */}
<div className='symbol symbol-45px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-7.jpg')} alt='' />
</div>
{/* end::Avatar */}
{/* begin::Info */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Carles Nilson
</a>
<span className='text-gray-500 fw-semibold'>Last week at 10:00 PM</span>
</div>
{/* end::Info */}
</div>
{/* end::User */}
{/* begin::Menu */}
<div className='my-0'>
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
</div>
{/* end::Menu */}
</div>
{/* end::Header */}
{/* begin::Post */}
<div className='mb-7'>
{/* begin::Text */}
<div className='text-gray-800 mb-5'>
Outlines keep you honest. They stop you from indulging in poorly thought-out metaphors
about driving and keep you focused on the overall structure of your post
</div>
{/* end::Text */}
{/* begin::Toolbar */}
<div className='d-flex align-items-center mb-5'>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-success px-4 py-2 me-4'
>
<KTIcon iconName='message-text-2' className='fs-3' />
22
</a>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-danger px-4 py-2'
>
<KTIcon iconName='heart' className='fs-2' />
59
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Post */}
{/* begin::Separator */}
<div className='separator mb-4'></div>
{/* end::Separator */}
{/* begin::Reply input */}
<form className='position-relative mb-6'>
<textarea
className='form-control border-0 p-0 pe-10 resize-none min-h-25px'
rows={1}
placeholder='Reply..'
></textarea>
<div className='position-absolute top-0 end-0 me-n5'>
<span className='btn btn-icon btn-sm btn-active-color-primary pe-0 me-2'>
<KTIcon iconName='paper-clip' className='fs-3 mb-3' />
</span>
<span className='btn btn-icon btn-sm btn-active-color-primary ps-0'>
<KTIcon iconName='geolocation' className='fs-2 mb-3' />
</span>
</div>
</form>
{/* edit::Reply input */}
</div>
{/* end::Body */}
</div>
)
}
export {FeedsWidget4}
@@ -0,0 +1,123 @@
import { FC } from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const FeedsWidget5: FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body pb-0'>
{/* begin::Header */}
<div className='d-flex align-items-center mb-5'>
{/* begin::User */}
<div className='d-flex align-items-center flex-grow-1'>
{/* begin::Avatar */}
<div className='symbol symbol-45px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-25.jpg')} alt='' />
</div>
{/* end::Avatar */}
{/* begin::Info */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Sam Logan
</a>
<span className='text-gray-500 fw-semibold'>Mango, Java, Python</span>
</div>
{/* end::Info */}
</div>
{/* end::User */}
{/* begin::Menu */}
<div className='my-0'>
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
</div>
{/* end::Menu */}
</div>
{/* end::Header */}
{/* begin::Post */}
<div className='mb-5'>
{/* begin::Image */}
<div
className='bgi-no-repeat bgi-size-cover rounded min-h-250px mb-5'
style={{
backgroundImage: `url('${toAbsoluteUrl('media/stock/900x600/20.jpg')}')`,
}}
></div>
{/* end::Image */}
{/* begin::Text */}
<div className='text-gray-800 mb-5'>
Outlines keep you honest. They stop you from indulging in poorly thought-out metaphors
about driving and keep you focused on the overall structure of your post
</div>
{/* end::Text */}
{/* begin::Toolbar */}
<div className='d-flex align-items-center mb-5'>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-success px-4 py-2 me-4'
>
<KTIcon iconName='message-text-2' className='fs-3' />
89
</a>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-danger px-4 py-2'
>
<KTIcon iconName='heart' className='fs-2' />
29
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Post */}
{/* begin::Separator */}
<div className='separator mb-4'></div>
{/* end::Separator */}
{/* begin::Reply input */}
<form className='position-relative mb-6'>
<textarea
className='form-control border-0 p-0 pe-10 resize-none min-h-25px'
rows={1}
placeholder='Reply..'
></textarea>
<div className='position-absolute top-0 end-0 me-n5'>
<span className='btn btn-icon btn-sm btn-active-color-primary pe-0 me-2'>
<KTIcon iconName='paper-clip' className='fs-3 mb-3' />
</span>
<span className='btn btn-icon btn-sm btn-active-color-primary ps-0'>
<KTIcon iconName='geolocation' className='fs-2 mb-3' />
</span>
</div>
</form>
{/* edit::Reply input */}
</div>
{/* end::Body */}
</div>
)
}
export {FeedsWidget5}
@@ -0,0 +1,124 @@
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const FeedsWidget6: React.FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body pb-0'>
{/* begin::Header */}
<div className='d-flex align-items-center mb-5'>
{/* begin::User */}
<div className='d-flex align-items-center flex-grow-1'>
{/* begin::Avatar */}
<div className='symbol symbol-45px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-13.jpg')} alt='' />
</div>
{/* end::Avatar */}
{/* begin::Info */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Mat Dillon
</a>
<span className='text-gray-500 fw-semibold'>Last month</span>
</div>
{/* end::Info */}
</div>
{/* end::User */}
{/* begin::Menu */}
<div className='my-0'>
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
</div>
{/* end::Menu */}
</div>
{/* end::Header */}
{/* begin::Post */}
<div className='mb-6'>
{/* begin::Text */}
<div className='text-gray-800 fs-6 fw-normal mb-5'>
Outlines keep you honest. They stop you from indulging in poorly thought-out metaphors
</div>
{/* end::Text */}
{/* begin::Video */}
<div className='mb-5'>
<iframe
title='widget11-video'
className='embed-responsive-item rounded h-300px w-100'
src='https://www.youtube.com/embed/qIHXpnASPAA'
allowFullScreen={true}
/>
</div>
{/* end::Video */}
{/* begin::Toolbar */}
<div className='d-flex align-items-center mb-5'>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-success px-4 py-2 me-4'
>
<KTIcon iconName='message-text-2' className='fs-3' />
189
</a>
<a
href='#'
className='btn btn-sm btn-light btn-color-muted btn-active-light-danger px-4 py-2'
>
<KTIcon iconName='heart' className='fs-2' />
229
</a>
</div>
{/* end::Toolbar */}
</div>
{/* end::Bottom */}
{/* begin::Separator */}
<div className='separator mb-4'></div>
{/* end::Separator */}
{/* begin::Reply input */}
<form className='position-relative mb-6'>
<textarea
className='form-control border-0 p-0 pe-10 resize-none min-h-25px'
data-kt-autosize='true'
rows={1}
placeholder='Reply..'
></textarea>
<div className='position-absolute top-0 end-0 me-n5'>
<span className='btn btn-icon btn-sm btn-active-color-primary pe-0 me-2'>
<KTIcon iconName='paper-clip' className='fs-3 mb-3' />
</span>
<span className='btn btn-icon btn-sm btn-active-color-primary ps-0'>
<KTIcon iconName='geolocation' className='fs-2 mb-3' />
</span>
</div>
</form>
{/* edit::Reply input */}
</div>
{/* end::Body */}
</div>
)
}
export {FeedsWidget6}
+92
View File
@@ -0,0 +1,92 @@
// charts
export * from './feeds/FeedsWidget2'
export * from './feeds/FeedsWidget3'
export * from './feeds/FeedsWidget4'
export * from './feeds/FeedsWidget5'
export * from './feeds/FeedsWidget6'
// mixed
export * from './mixed/MixedWidget1'
export * from './mixed/MixedWidget2'
export * from './mixed/MixedWidget3'
export * from './mixed/MixedWidget4'
export * from './mixed/MixedWidget5'
export * from './mixed/MixedWidget6'
export * from './mixed/MixedWidget7'
export * from './mixed/MixedWidget8'
export * from './mixed/MixedWidget9'
export * from './mixed/MixedWidget10'
export * from './mixed/MixedWidget11'
export * from './mixed/MixedWidget13'
export * from './mixed/MixedWidget14'
export * from './mixed/MixedWidget15'
// lists
export * from './lists/ListsWidget1'
export * from './lists/ListsWidget2'
export * from './lists/ListsWidget3'
export * from './lists/ListsWidget4'
export * from './lists/ListsWidget5'
export * from './lists/ListsWidget6'
export * from './lists/ListsWidget7'
export * from './lists/ListsWidget8'
export * from './lists/ListsWidget9'
// statistics
export * from './statistics/StatisticsWidget1'
export * from './statistics/StatisticsWidget2'
export * from './statistics/StatisticsWidget3'
export * from './statistics/StatisticsWidget4'
export * from './statistics/StatisticsWidget5'
export * from './statistics/StatisticsWidget6'
// charts
export * from './charts/ChartsWidget1'
export * from './charts/ChartsWidget2'
export * from './charts/ChartsWidget3'
export * from './charts/ChartsWidget4'
export * from './charts/ChartsWidget5'
export * from './charts/ChartsWidget6'
export * from './charts/ChartsWidget7'
export * from './charts/ChartsWidget8'
// tables
export * from './tables/TablesWidget1'
export * from './tables/TablesWidget2'
export * from './tables/TablesWidget3'
export * from './tables/TablesWidget4'
export * from './tables/TablesWidget5'
export * from './tables/TablesWidget6'
export * from './tables/TablesWidget7'
export * from './tables/TablesWidget8'
export * from './tables/TablesWidget9'
export * from './tables/TablesWidget10'
export * from './tables/TablesWidget11'
export * from './tables/TablesWidget12'
export * from './tables/TablesWidget13'
// engage
export * from './engage/EngageWidget1'
export * from './engage/EngageWidget2'
export * from './engage/EngageWidget3'
// feeds
export * from './feeds/FeedsWidget2'
export * from './feeds/FeedsWidget3'
export * from './feeds/FeedsWidget4'
// tiles
export * from './tiles/TilesWidget1'
export * from './tiles/TilesWidget2'
export * from './tiles/TilesWidget3'
export * from './tiles/TilesWidget4'
export * from './tiles/TilesWidget5'
// new
export * from './_new/cards/CardsWidget7'
export * from './_new/cards/CardsWidget17'
export * from './_new/cards/CardsWidget20'
export * from './_new/lists/ListsWidget26'
export * from './_new/engage/EngageWidget10'
@@ -0,0 +1,140 @@
import { FC } from 'react'
import {KTIcon} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget1: FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold text-gray-900'>Tasks Overview</span>
<span className='text-muted mt-1 fw-semibold fs-7'>Pending 10 tasks</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-5'>
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label bg-light-success'>
<KTIcon iconName='abstract-26' className='fs-2x text-success' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Text */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-900 text-hover-primary fs-6 fw-bold'>
Project Briefing
</a>
<span className='text-muted fw-semibold'>Project Manager</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label bg-light-warning'>
<KTIcon iconName='pencil' className='fs-2x text-warning' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Text */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-900 text-hover-primary fs-6 fw-bold'>
Concept Design
</a>
<span className='text-muted fw-semibold'>Art Director</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label bg-light-primary'>
<KTIcon iconName='message-text-2' className='fs-2x text-primary' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Text */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-900 text-hover-primary fs-6 fw-bold'>
Functional Logics
</a>
<span className='text-muted fw-semibold'>Lead Developer</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label bg-light-danger'>
<KTIcon iconName='disconnect' className='fs-2x text-danger' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Text */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-900 text-hover-primary fs-6 fw-bold'>
Development
</a>
<span className='text-muted fw-semibold'>DevOps</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label bg-light-info'>
<KTIcon iconName='security-user' className='fs-2x text-info' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Text */}
<div className='d-flex flex-column'>
<a href='#' className='text-gray-900 text-hover-primary fs-6 fw-bold'>
Testing
</a>
<span className='text-muted fw-semibold'>QA Managers</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget1}
@@ -0,0 +1,125 @@
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget2: React.FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0'>
<h3 className='card-title fw-bold text-gray-900'>Authors</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-2'>
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Avatar */}
<div className='symbol symbol-50px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-6.jpg')} className='' alt='' />
</div>
{/* end::Avatar */}
{/* begin::Text */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-900 fw-bold text-hover-primary fs-6'>
Emma Smith
</a>
<span className='text-muted d-block fw-semibold'>Project Manager</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Avatar */}
<div className='symbol symbol-50px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-5.jpg')} className='' alt='' />
</div>
{/* end::Avatar */}
{/* begin::Text */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-900 fw-bold text-hover-primary fs-6'>
Sean Bean
</a>
<span className='text-muted d-block fw-semibold'>PHP, SQLite, Artisan CLI</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Avatar */}
<div className='symbol symbol-50px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-11.jpg')} className='' alt='' />
</div>
{/* end::Avatar */}
{/* begin::Text */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-900 fw-bold text-hover-primary fs-6'>
Brian Cox
</a>
<span className='text-muted d-block fw-semibold'>PHP, SQLite, Artisan CLI</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-7'>
{/* begin::Avatar */}
<div className='symbol symbol-50px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-9.jpg')} className='' alt='' />
</div>
{/* end::Avatar */}
{/* begin::Text */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-900 fw-bold text-hover-primary fs-6'>
Francis Mitcham
</a>
<span className='text-muted d-block fw-semibold'>PHP, SQLite, Artisan CLI</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center'>
{/* begin::Avatar */}
<div className='symbol symbol-50px me-5'>
<img src={toAbsoluteUrl('media/avatars/300-23.jpg')} className='' alt='' />
</div>
{/* end::Avatar */}
{/* begin::Text */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-900 fw-bold text-hover-primary fs-6'>
Dan Wilson
</a>
<span className='text-muted d-block fw-semibold'>PHP, SQLite, Artisan CLI</span>
</div>
{/* end::Text */}
</div>
{/* end::Item */}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget2}
@@ -0,0 +1,166 @@
import React from 'react'
import {KTIcon} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget3: React.FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0'>
<h3 className='card-title fw-bold text-gray-900'>Todo</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-2'>
{/* begin::Item */}
<div className='d-flex align-items-center mb-8'>
{/* begin::Bullet */}
<span className='bullet bullet-vertical h-40px bg-success'></span>
{/* end::Bullet */}
{/* begin::Checkbox */}
<div className='form-check form-check-custom form-check-solid mx-5'>
<input className='form-check-input' type='checkbox' value='' />
</div>
{/* end::Checkbox */}
{/* begin::Description */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold fs-6'>
Create FireStone Logo
</a>
<span className='text-muted fw-semibold d-block'>Due in 2 Days</span>
</div>
{/* end::Description */}
<span className='badge badge-light-success fs-8 fw-bold'>New</span>
</div>
{/* end:Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-8'>
{/* begin::Bullet */}
<span className='bullet bullet-vertical h-40px bg-primary'></span>
{/* end::Bullet */}
{/* begin::Checkbox */}
<div className='form-check form-check-custom form-check-solid mx-5'>
<input className='form-check-input' type='checkbox' value='' />
</div>
{/* end::Checkbox */}
{/* begin::Description */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold fs-6'>
Stakeholder Meeting
</a>
<span className='text-muted fw-semibold d-block'>Due in 3 Days</span>
</div>
{/* end::Description */}
<span className='badge badge-light-primary fs-8 fw-bold'>New</span>
</div>
{/* end:Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-8'>
{/* begin::Bullet */}
<span className='bullet bullet-vertical h-40px bg-warning'></span>
{/* end::Bullet */}
{/* begin::Checkbox */}
<div className='form-check form-check-custom form-check-solid mx-5'>
<input className='form-check-input' type='checkbox' value='' />
</div>
{/* end::Checkbox */}
{/* begin::Description */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold fs-6'>
Scoping &amp; Estimations
</a>
<span className='text-muted fw-semibold d-block'>Due in 5 Days</span>
</div>
{/* end::Description */}
<span className='badge badge-light-warning fs-8 fw-bold'>New</span>
</div>
{/* end:Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-8'>
{/* begin::Bullet */}
<span className='bullet bullet-vertical h-40px bg-primary'></span>
{/* end::Bullet */}
{/* begin::Checkbox */}
<div className='form-check form-check-custom form-check-solid mx-5'>
<input className='form-check-input' type='checkbox' value='' />
</div>
{/* end::Checkbox */}
{/* begin::Description */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold fs-6'>
KPI App Showcase
</a>
<span className='text-muted fw-semibold d-block'>Due in 2 Days</span>
</div>
{/* end::Description */}
<span className='badge badge-light-primary fs-8 fw-bold'>New</span>
</div>
{/* end:Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-8'>
{/* begin::Bullet */}
<span className='bullet bullet-vertical h-40px bg-danger'></span>
{/* end::Bullet */}
{/* begin::Checkbox */}
<div className='form-check form-check-custom form-check-solid mx-5'>
<input className='form-check-input' type='checkbox' value='' />
</div>
{/* end::Checkbox */}
{/* begin::Description */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold fs-6'>
Project Meeting
</a>
<span className='text-muted fw-semibold d-block'>Due in 12 Days</span>
</div>
{/* end::Description */}
<span className='badge badge-light-danger fs-8 fw-bold'>New</span>
</div>
{/* end:Item */}
{/* begin::Item */}
<div className='d-flex align-items-center'>
{/* begin::Bullet */}
<span className='bullet bullet-vertical h-40px bg-success'></span>
{/* end::Bullet */}
{/* begin::Checkbox */}
<div className='form-check form-check-custom form-check-solid mx-5'>
<input className='form-check-input' type='checkbox' value='' />
</div>
{/* end::Checkbox */}
{/* begin::Description */}
<div className='flex-grow-1'>
<a href='#' className='text-gray-800 text-hover-primary fw-bold fs-6'>
Customers Update
</a>
<span className='text-muted fw-semibold d-block'>Due in 1 week</span>
</div>
{/* end::Description */}
<span className='badge badge-light-success fs-8 fw-bold'>New</span>
</div>
{/* end:Item */}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget3}
@@ -0,0 +1,204 @@
import { FC } from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
items?: number
}
const ListsWidget4: FC<Props> = ({items = 6}) => {
return (
<div className='card card-xl-stretch mb-xl-8'>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold text-gray-900'>Trends</span>
<span className='text-muted mt-1 fw-semibold fs-7'>Latest tech trends</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-5'>
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/plurk.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
{/* end::Symbol */}
{/* begin::Section */}
<div className='d-flex align-items-center flex-row-fluid flex-wrap'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Top Authors
</a>
<span className='text-muted fw-semibold d-block fs-7'>Mark, Rowling, Esther</span>
</div>
<span className='badge badge-light fw-bold my-2'>+82$</span>
</div>
{/* end::Section */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/telegram.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
{/* end::Symbol */}
{/* begin::Section */}
<div className='d-flex align-items-center flex-row-fluid flex-wrap'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Popular Authors
</a>
<span className='text-muted fw-semibold d-block fs-7'>Randy, Steve, Mike</span>
</div>
<span className='badge badge-light fw-bold my-2'>+280$</span>
</div>
{/* end::Section */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/vimeo.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
{/* end::Symbol */}
{/* begin::Section */}
<div className='d-flex align-items-center flex-row-fluid flex-wrap'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
New Users
</a>
<span className='text-muted fw-semibold d-block fs-7'>John, Pat, Jimmy</span>
</div>
<span className='badge badge-light fw-bold my-2'>+4500$</span>
</div>
{/* end::Section */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/bebo.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
{/* end::Symbol */}
{/* begin::Section */}
<div className='d-flex align-items-center flex-row-fluid flex-wrap'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Active Customers
</a>
<span className='text-muted fw-semibold d-block fs-7'>Mark, Rowling, Esther</span>
</div>
<span className='badge badge-light fw-bold my-2'>+4500$</span>
</div>
{/* end::Section */}
</div>
{/* end::Item */}
{items > 4 && (
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/kickstarter.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
{/* end::Symbol */}
{/* begin::Section */}
<div className='d-flex align-items-center flex-row-fluid flex-wrap'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Bestseller Theme
</a>
<span className='text-muted fw-semibold d-block fs-7'>Disco, Retro, Sports</span>
</div>
<span className='badge badge-light fw-bold my-2'>+4500$</span>
</div>
{/* end::Section */}
</div>
)}
{items > 5 && (
<div className='d-flex align-items-sm-center'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-5'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/fox-hub.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
{/* end::Symbol */}
{/* begin::Section */}
<div className='d-flex align-items-center flex-row-fluid flex-wrap'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 text-hover-primary fs-6 fw-bold'>
Fox Broker App
</a>
<span className='text-muted fw-semibold d-block fs-7'>
Finance, Corporate, Apps
</span>
</div>
<span className='badge badge-light fw-bold my-2'>+4500$</span>
</div>
{/* end::Section */}
</div>
)}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget4}
@@ -0,0 +1,195 @@
import React from 'react'
import {KTIcon} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget5: React.FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header align-items-center border-0 mt-4'>
<h3 className='card-title align-items-start flex-column'>
<span className='fw-bold mb-2 text-gray-900'>Activities</span>
<span className='text-muted fw-semibold fs-7'>890,344 Sales</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-5'>
{/* begin::Timeline */}
<div className='timeline-label'>
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>08:42</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-warning fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Text */}
<div className='fw-mormal timeline-content text-muted ps-3'>
Outlines keep you honest. And keep structure
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>10:00</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-success fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Content */}
<div className='timeline-content d-flex'>
<span className='fw-bold text-gray-800 ps-3'>AEOL meeting</span>
</div>
{/* end::Content */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>14:37</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-danger fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Desc */}
<div className='timeline-content fw-bold text-gray-800 ps-3'>
Make deposit
<a href='#' className='text-primary'>
USD 700
</a>
. to ESL
</div>
{/* end::Desc */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>16:50</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-primary fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Text */}
<div className='timeline-content fw-mormal text-muted ps-3'>
Indulging in poorly driving and keep structure keep great
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>21:03</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-danger fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Desc */}
<div className='timeline-content fw-semibold text-gray-800 ps-3'>
New order placed
<a href='#' className='text-primary'>
#XF-2356
</a>
.
</div>
{/* end::Desc */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>16:50</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-primary fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Text */}
<div className='timeline-content fw-mormal text-muted ps-3'>
Indulging in poorly driving and keep structure keep great
</div>
{/* end::Text */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>21:03</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-danger fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Desc */}
<div className='timeline-content fw-semibold text-gray-800 ps-3'>
New order placed
<a href='#' className='text-primary'>
#XF-2356
</a>
.
</div>
{/* end::Desc */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='timeline-item'>
{/* begin::Label */}
<div className='timeline-label fw-bold text-gray-800 fs-6'>10:30</div>
{/* end::Label */}
{/* begin::Badge */}
<div className='timeline-badge'>
<i className='fa fa-genderless text-success fs-1'></i>
</div>
{/* end::Badge */}
{/* begin::Text */}
<div className='timeline-content fw-mormal text-muted ps-3'>
Finance KPI Mobile app launch preparion meeting
</div>
{/* end::Text */}
</div>
{/* end::Item */}
</div>
{/* end::Timeline */}
</div>
{/* end: Card Body */}
</div>
)
}
export {ListsWidget5}
@@ -0,0 +1,120 @@
import { FC } from 'react'
import {KTIcon} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget6: FC<Props> = () => {
return (
<div className='card card-xl-stretch mb-5 mb-xl-8'>
{/* begin::Header */}
<div className='card-header border-0'>
<h3 className='card-title fw-bold text-gray-900'>Notifications</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-0'>
{/* begin::Item */}
<div className='d-flex align-items-center bg-light-warning rounded p-5 mb-7'>
{/* begin::Icon */}
<span className=' text-warning me-5'>
<KTIcon iconName='abstract-26' className='text-warning fs-1 me-5' />
</span>
{/* end::Icon */}
{/* begin::Title */}
<div className='flex-grow-1 me-2'>
<a href='#' className='fw-bold text-gray-800 text-hover-primary fs-6'>
Group lunch celebration
</a>
<span className='text-muted fw-semibold d-block'>Due in 2 Days</span>
</div>
{/* end::Title */}
{/* begin::Lable */}
<span className='fw-bold text-warning py-1'>+28%</span>
{/* end::Lable */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center bg-light-success rounded p-5 mb-7'>
{/* begin::Icon */}
<span className=' text-success me-5'>
<KTIcon iconName='abstract-26' className='text-success fs-1 me-5' />
</span>
{/* end::Icon */}
{/* begin::Title */}
<div className='flex-grow-1 me-2'>
<a href='#' className='fw-bold text-gray-800 text-hover-primary fs-6'>
Navigation optimization
</a>
<span className='text-muted fw-semibold d-block'>Due in 2 Days</span>
</div>
{/* end::Title */}
{/* begin::Lable */}
<span className='fw-bold text-success py-1'>+50%</span>
{/* end::Lable */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center bg-light-danger rounded p-5 mb-7'>
{/* begin::Icon */}
<span className=' text-danger me-5'>
<KTIcon iconName='abstract-26' className='text-danger fs-1 me-5' />
</span>
{/* end::Icon */}
{/* begin::Title */}
<div className='flex-grow-1 me-2'>
<a href='#' className='fw-bold text-gray-800 text-hover-primary fs-6'>
Rebrand strategy planning
</a>
<span className='text-muted fw-semibold d-block'>Due in 5 Days</span>
</div>
{/* end::Title */}
{/* begin::Lable */}
<span className='fw-bold text-danger py-1'>-27%</span>
{/* end::Lable */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center bg-light-info rounded p-5'>
{/* begin::Icon */}
<span className=' text-info me-5'>
<KTIcon iconName='abstract-26' className='text-info fs-1 me-5' />
</span>
{/* end::Icon */}
{/* begin::Title */}
<div className='flex-grow-1 me-2'>
<a href='#' className='fw-bold text-gray-800 text-hover-primary fs-6'>
Product goals strategy
</a>
<span className='text-muted fw-semibold d-block'>Due in 7 Days</span>
</div>
{/* end::Title */}
{/* begin::Lable */}
<span className='fw-bold text-info py-1'>+8%</span>
{/* end::Lable */}
</div>
{/* end::Item */}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget6}
@@ -0,0 +1,135 @@
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget7: React.FC<Props> = () => {
return (
<div className='card card-xl-stretch mb-xl-8'>
{/* begin::Header */}
<div className='card-header align-items-center border-0 mt-4'>
<h3 className='card-title align-items-start flex-column'>
<span className='fw-bold text-gray-900'>Latest Media</span>
<span className='text-muted mt-1 fw-semibold fs-7'>Articles and publications</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-3'>
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-20.jpg')})`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div className='d-flex flex-row-fluid flex-wrap align-items-center'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Cup &amp; Green
</a>
<span className='text-muted fw-semibold d-block pt-1'>Size: 87KB</span>
</div>
<span className='badge badge-light-success fs-8 fw-bold my-2'>Approved</span>
</div>
{/* end::Title */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-19.jpg')})`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div className='d-flex flex-row-fluid flex-wrap align-items-center'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Yellow Background
</a>
<span className='text-muted fw-semibold d-block pt-1'>Size: 1.2MB</span>
</div>
<span className='badge badge-light-warning fs-8 fw-bold my-2'>In Progress</span>
</div>
{/* end::Title */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-25.jpg')})`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div className='d-flex flex-row-fluid flex-wrap align-items-center'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Nike &amp; Blue
</a>
<span className='text-muted fw-semibold d-block pt-1'>Size: 87KB</span>
</div>
<span className='badge badge-light-success fs-8 fw-bold my-2'>Success</span>
</div>
{/* end::Title */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-24.jpg')}`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div className='d-flex flex-row-fluid flex-wrap align-items-center'>
<div className='flex-grow-1 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Red Boots
</a>
<span className='text-muted fw-semibold d-block pt-1'>Size: 345KB</span>
</div>
<span className='badge badge-light-danger fs-8 fw-bold my-2'>Rejected</span>
</div>
{/* end::Title */}
</div>
{/* end::Item */}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget7}
@@ -0,0 +1,186 @@
import { FC } from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget8: FC<Props> = () => {
return (
<div className='card card-xl-stretch mb-5 mb-xl-8'>
{/* begin::Header */}
<div className='card-header align-items-center border-0 mt-4'>
<h3 className='card-title align-items-start flex-column'>
<span className='fw-bold text-gray-900'>Latest Products</span>
<span className='text-muted mt-1 fw-semibold fs-7'>Gifts and more</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-3'>
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-17.jpg')})`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Content */}
<div className='d-flex flex-row-fluid align-items-center flex-wrap my-lg-0 me-2'>
{/* begin::Title */}
<div className='flex-grow-1 my-lg-0 my-2 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Cup &amp; Green
</a>
<span className='text-muted fw-semibold d-block pt-1'>Visually stunning</span>
</div>
{/* end::Title */}
{/* begin::Section */}
<div className='d-flex align-items-center'>
<div className='me-6'>
<i className='fa fa-star-half-alt me-1 text-warning fs-5'></i>
<span className='text-gray-800 fw-bold'>4.2</span>
</div>
<a href='#' className='btn btn-icon btn-light btn-sm border-0'>
<KTIcon iconName='arrow-right' className='fs-2 text-primary' />
</a>
</div>
{/* end::Section */}
</div>
{/* end::Content */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-10.jpg')})`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Content */}
<div className='d-flex flex-row-fluid align-items-center flex-wrap my-lg-0 me-2'>
{/* begin::Title */}
<div className='flex-grow-1 my-lg-0 my-2 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Pink Patterns
</a>
<span className='text-muted fw-semibold d-block pt-1'>Feminine all around</span>
</div>
{/* end::Title */}
{/* begin::Section */}
<div className='d-flex align-items-center'>
<div className='me-6'>
<i className='fa fa-star-half-alt me-1 text-warning fs-5'></i>
<span className='text-gray-800 fw-bold'>5.0</span>
</div>
<a href='#' className='btn btn-icon btn-light btn-sm border-0'>
<KTIcon iconName='arrow-right' className='fs-2 text-primary' />
</a>
</div>
{/* end::Section */}
</div>
{/* end::Content */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center mb-7'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-1.jpg')})`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Content */}
<div className='d-flex flex-row-fluid align-items-center flex-wrap my-lg-0 me-2'>
{/* begin::Title */}
<div className='flex-grow-1 my-lg-0 my-2 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Abstract Art
</a>
<span className='text-muted fw-semibold d-block pt-1'>
The will to capture readers
</span>
</div>
{/* end::Title */}
{/* begin::Section */}
<div className='d-flex align-items-center'>
<div className='me-6'>
<i className='fa fa-star-half-alt me-1 text-warning fs-5'></i>
<span className='text-gray-800 fw-bold'>5.7</span>
</div>
<a href='#' className='btn btn-icon btn-light btn-sm border-0'>
<KTIcon iconName='arrow-right' className='fs-2 text-primary' />
</a>
</div>
{/* end::Section */}
</div>
{/* end::Content */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-sm-center'>
{/* begin::Symbol */}
<div className='symbol symbol-60px symbol-2by3 me-4'>
<div
className='symbol-label'
style={{backgroundImage: `url(${toAbsoluteUrl('media/stock/600x400/img-9.jpg')})`}}
></div>
</div>
{/* end::Symbol */}
{/* begin::Content */}
<div className='d-flex flex-row-fluid align-items-center flex-wrap my-lg-0 me-2'>
{/* begin::Title */}
<div className='flex-grow-1 my-lg-0 my-2 me-2'>
<a href='#' className='text-gray-800 fw-bold text-hover-primary fs-6'>
Desserts platter
</a>
<span className='text-muted fw-semibold d-block pt-1'>
Food trends &amp; inspirations
</span>
</div>
{/* end::Title */}
{/* begin::Section */}
<div className='d-flex align-items-center'>
<div className='me-6'>
<i className='fa fa-star-half-alt me-1 text-warning fs-5'></i>
<span className='text-gray-800 fw-bold'>3.7</span>
</div>
<a href='#' className='btn btn-icon btn-light btn-sm border-0'>
<KTIcon iconName='arrow-right' className='fs-2 text-primary' />
</a>
</div>
{/* end::Section */}
</div>
{/* end::Content */}
</div>
{/* end::Item */}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget8}
@@ -0,0 +1,209 @@
import clsx from 'clsx'
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const ListsWidget9: React.FC<Props> = ({className}) => {
return (
<div className={clsx('card', className)}>
{/* begin::Header */}
<div className='card-header align-items-center border-0 mt-3'>
<h3 className='card-title align-items-start flex-column'>
<span className='fw-bolder text-gray-900 fs-3'>My Competitors</span>
<span className='text-gray-500 mt-2 fw-bold fs-6'>More than 400+ new members</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-clean btn-sm btn-icon btn-icon-primary btn-active-light-primary me-n3'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body pt-5'>
{/*begin::Item*/}
<div className='d-flex mb-7'>
{/*begin::Symbol*/}
<div className='symbol symbol-60px symbol-2by3 flex-shrink-0 me-4'>
<img src={toAbsoluteUrl('media/stock/600x400/img-3.jpg')} className='mw-100' alt='' />
</div>
{/*end::Symbol*/}
{/*begin::Section*/}
<div className='d-flex align-items-center flex-wrap flex-grow-1 mt-n2 mt-lg-n1'>
{/*begin::Title*/}
<div className='d-flex flex-column flex-grow-1 my-lg-0 my-2 pe-3'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bolder'>
Cup &amp; Green
</a>
<span className='text-gray-500 fw-bold fs-7 my-1'>Study highway types</span>
<span className='text-gray-500 fw-bold fs-7'>
By:
<a href='#' className='text-primary fw-bold'>
CoreAd
</a>
</span>
</div>
{/*end::Title*/}
{/*begin::Info*/}
<div className='text-end py-lg-0 py-2'>
<span className='text-gray-800 fw-boldest fs-3'>24,900</span>
<span className='text-gray-500 fs-7 fw-bold d-block'>Sales</span>
</div>
{/*end::Info*/}
</div>
{/*end::Section*/}
</div>
{/*end::Item*/}
{/*begin::Item*/}
<div className='d-flex mb-7'>
{/*begin::Symbol*/}
<div className='symbol symbol-60px symbol-2by3 flex-shrink-0 me-4'>
<img src={toAbsoluteUrl('media/stock/600x400/img-4.jpg')} className='mw-100' alt='' />
</div>
{/*end::Symbol*/}
{/*begin::Section*/}
<div className='d-flex align-items-center flex-wrap flex-grow-1 mt-n2 mt-lg-n1'>
{/*begin::Title*/}
<div className='d-flex flex-column flex-grow-1 my-lg-0 my-2 pe-3'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bolder'>
Yellow Hearts
</a>
<span className='text-gray-500 fw-bold fs-7 my-1'>Study highway types</span>
<span className='text-gray-500 fw-bold fs-7'>
By:
<a href='#' className='text-primary fw-bold'>
KeenThemes
</a>
</span>
</div>
{/*end::Title*/}
{/*begin::Info*/}
<div className='text-end py-lg-0 py-2'>
<span className='text-gray-800 fw-boldest fs-3'>70,380</span>
<span className='text-gray-500 fs-7 fw-bold d-block'>Sales</span>
</div>
{/*end::Info*/}
</div>
{/*end::Section*/}
</div>
{/*end::Item*/}
{/*begin::Item*/}
<div className='d-flex mb-7'>
{/*begin::Symbol*/}
<div className='symbol symbol-60px symbol-2by3 flex-shrink-0 me-4'>
<img src={toAbsoluteUrl('media/stock/600x400/img-5.jpg')} className='mw-100' alt='' />
</div>
{/*end::Symbol*/}
{/*begin::Section*/}
<div className='d-flex align-items-center flex-wrap flex-grow-1 mt-n2 mt-lg-n1'>
{/*begin::Title*/}
<div className='d-flex flex-column flex-grow-1 my-lg-0 my-2 pe-3'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bolder'>
Nike &amp; Blue
</a>
<span className='text-gray-500 fw-bold fs-7 my-1'>Study highway types</span>
<span className='text-gray-500 fw-bold fs-7'>
By:
<a href='#' className='text-primary fw-bold'>
Invision Inc.
</a>
</span>
</div>
{/*end::Title*/}
{/*begin::Info*/}
<div className='text-end py-lg-0 py-2'>
<span className='text-gray-800 fw-boldest fs-3'>7,200</span>
<span className='text-gray-500 fs-7 fw-bold d-block'>Sales</span>
</div>
{/*end::Info*/}
</div>
{/*end::Section*/}
</div>
{/*end::Item*/}
{/*begin::Item*/}
<div className='d-flex mb-7'>
{/*begin::Symbol*/}
<div className='symbol symbol-60px symbol-2by3 flex-shrink-0 me-4'>
<img src={toAbsoluteUrl('media/stock/600x400/img-6.jpg')} className='mw-100' alt='' />
</div>
{/*end::Symbol*/}
{/*begin::Section*/}
<div className='d-flex align-items-center flex-wrap flex-grow-1 mt-n2 mt-lg-n1'>
{/*begin::Title*/}
<div className='d-flex flex-column flex-grow-1 my-lg-0 my-2 pe-3'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bolder'>
Red Boots
</a>
<span className='text-gray-500 fw-bold fs-7 my-1'>Study highway types</span>
<span className='text-gray-500 fw-bold fs-7'>
By:
<a href='#' className='text-primary fw-bold'>
Figma Studio
</a>
</span>
</div>
{/*end::Title*/}
{/*begin::Info*/}
<div className='text-end py-lg-0 py-2'>
<span className='text-gray-800 fw-boldest fs-3'>36,450</span>
<span className='text-gray-500 fs-7 fw-bold d-block'>Sales</span>
</div>
{/*end::Info*/}
</div>
{/*end::Section*/}
</div>
{/*end::Item*/}
{/*begin::Item*/}
<div className='d-flex'>
{/*begin::Symbol*/}
<div className='symbol symbol-60px symbol-2by3 flex-shrink-0 me-4'>
<img src={toAbsoluteUrl('media/stock/600x400/img-7.jpg')} className='mw-100' alt='' />
</div>
{/*end::Symbol*/}
{/*begin::Section*/}
<div className='d-flex align-items-center flex-wrap flex-grow-1 mt-n2 mt-lg-n1'>
{/*begin::Title*/}
<div className='d-flex flex-column flex-grow-1 my-lg-0 my-2 pe-3'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bolder'>
Desserts platter
</a>
<span className='text-gray-500 fw-bold fs-7 my-1'>Food trends &amp; reviews</span>
<span className='text-gray-500 fw-bold fs-7'>
By:
<a href='#' className='text-primary fw-bold'>
Figma Studio
</a>
</span>
</div>
{/*end::Title*/}
{/*begin::Info*/}
<div className='text-end py-lg-0 py-2'>
<span className='text-gray-800 fw-boldest fs-3'>64,753</span>
<span className='text-gray-500 fs-7 fw-bold d-block'>Sales</span>
</div>
{/*end::Info*/}
</div>
{/*end::Section*/}
</div>
{/*end::Item*/}
</div>
{/* end::Body */}
</div>
)
}
export {ListsWidget9}
@@ -0,0 +1,174 @@
import { FC } from 'react'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import {KTIcon} from '../../../helpers'
type Props = {
className: string
color: string
}
const MixedWidget1: FC<Props> = ({className, color}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body p-0'>
{/* begin::Header */}
<div className={`px-9 pt-7 card-rounded h-275px w-100 bg-${color}`}>
{/* begin::Heading */}
<div className='d-flex flex-stack'>
<h3 className='m-0 text-white fw-bold fs-3'>Sales Summary</h3>
<div className='ms-1'>
{/* begin::Menu */}
<button
type='button'
className={`btn btn-sm btn-icon btn-color-white btn-active-white btn-active-color-${color} border-0 me-n3`}
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Heading */}
{/* begin::Balance */}
<div className='d-flex text-center flex-column text-white pt-8'>
<span className='fw-semibold fs-7'>You Balance</span>
<span className='fw-bold fs-2x pt-1'>$37,562.00</span>
</div>
{/* end::Balance */}
</div>
{/* end::Header */}
{/* begin::Items */}
<div
className='shadow-xs card-rounded mx-9 mb-9 px-6 py-9 position-relative z-index-1 bg-body'
style={{marginTop: '-100px'}}
>
{/* begin::Item */}
<div className='d-flex align-items-center mb-6'>
{/* begin::Symbol */}
<div className='symbol symbol-45px w-40px me-5'>
<span className='symbol-label bg-lighten'>
<KTIcon iconName='compass' className='fs-1' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Description */}
<div className='d-flex align-items-center flex-wrap w-100'>
{/* begin::Title */}
<div className='mb-1 pe-3 flex-grow-1'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bold'>
Sales
</a>
<div className='text-gray-500 fw-semibold fs-7'>100 Regions</div>
</div>
{/* end::Title */}
{/* begin::Label */}
<div className='d-flex align-items-center'>
<div className='fw-bold fs-5 text-gray-800 pe-1'>$2,5b</div>
<KTIcon iconName='arrow-up' className='fs-5 text-success ms-1' />
</div>
{/* end::Label */}
</div>
{/* end::Description */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-6'>
{/* begin::Symbol */}
<div className='symbol symbol-45px w-40px me-5'>
<span className='symbol-label bg-lighten'>
<KTIcon iconName='category' className='fs-1' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Description */}
<div className='d-flex align-items-center flex-wrap w-100'>
{/* begin::Title */}
<div className='mb-1 pe-3 flex-grow-1'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bold'>
Revenue
</a>
<div className='text-gray-500 fw-semibold fs-7'>Quarter 2/3</div>
</div>
{/* end::Title */}
{/* begin::Label */}
<div className='d-flex align-items-center'>
<div className='fw-bold fs-5 text-gray-800 pe-1'>$1,7b</div>
<KTIcon iconName='arrow-down' className='fs-5 text-danger ms-1' />
</div>
{/* end::Label */}
</div>
{/* end::Description */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center mb-6'>
{/* begin::Symbol */}
<div className='symbol symbol-45px w-40px me-5'>
<span className='symbol-label bg-lighten'>
<KTIcon iconName='phone' className='fs-1' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Description */}
<div className='d-flex align-items-center flex-wrap w-100'>
{/* begin::Title */}
<div className='mb-1 pe-3 flex-grow-1'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bold'>
Growth
</a>
<div className='text-gray-500 fw-semibold fs-7'>80% Rate</div>
</div>
{/* end::Title */}
{/* begin::Label */}
<div className='d-flex align-items-center'>
<div className='fw-bold fs-5 text-gray-800 pe-1'>$8,8m</div>
<KTIcon iconName='arrow-up' className='fs-5 text-success ms-1' />
</div>
{/* end::Label */}
</div>
{/* end::Description */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex align-items-center'>
{/* begin::Symbol */}
<div className='symbol symbol-45px w-40px me-5'>
<span className='symbol-label bg-lighten'>
<KTIcon iconName='document' className='fs-1' />
</span>
</div>
{/* end::Symbol */}
{/* begin::Description */}
<div className='d-flex align-items-center flex-wrap w-100'>
{/* begin::Title */}
<div className='mb-1 pe-3 flex-grow-1'>
<a href='#' className='fs-5 text-gray-800 text-hover-primary fw-bold'>
Dispute
</a>
<div className='text-gray-500 fw-semibold fs-7'>3090 Refunds</div>
</div>
{/* end::Title */}
{/* begin::Label */}
<div className='d-flex align-items-center'>
<div className='fw-bold fs-5 text-gray-800 pe-1'>$270m</div>
<KTIcon iconName='arrow-down' className='fs-5 text-danger ms-1' />
</div>
{/* end::Label */}
</div>
{/* end::Description */}
</div>
{/* end::Item */}
</div>
{/* end::Items */}
</div>
{/* end::Body */}
</div>
)
}
export {MixedWidget1}
@@ -0,0 +1,192 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartColor: string
chartHeight: string
}
const MixedWidget10: FC<Props> = ({className, chartColor, chartHeight}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartColor, chartHeight))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body d-flex flex-column p-0'>
{/* begin::Stats */}
<div className='flex-grow-1 card-p pb-0'>
<div className='d-flex flex-stack flex-wrap'>
<div className='me-2'>
<a href='#' className='text-gray-900 text-hover-primary fw-bold fs-3'>
Generate Reports
</a>
<div className='text-muted fs-7 fw-semibold'>Finance and accounting reports</div>
</div>
<div className={`fw-bold fs-3 text-${chartColor}`}>$24,500</div>
</div>
</div>
{/* end::Stats */}
{/* begin::Chart */}
<div ref={chartRef} className='mixed-widget-7-chart card-rounded-bottom'></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
const chartOptions = (chartColor: string, chartHeight: string): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-800')
const strokeColor = getCSSVariableValue('--bs-gray-300')
const baseColor = getCSSVariableValue('--bs-' + chartColor)
const lightColor = getCSSVariableValue('--bs-' + chartColor + '-light')
return {
series: [
{
name: 'Net Profit',
data: [15, 25, 15, 40, 20, 50],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: chartHeight,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: strokeColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: false,
},
},
yaxis: {
min: 0,
max: 60,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [lightColor],
markers: {
colors: [lightColor],
strokeColors: [baseColor],
strokeWidth: 3,
},
}
}
export {MixedWidget10}
@@ -0,0 +1,180 @@
import React, {useEffect, useRef} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartColor: string
chartHeight: string
}
const MixedWidget11: React.FC<Props> = ({className, chartColor, chartHeight}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartColor, chartHeight))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body p-0 d-flex justify-content-between flex-column overflow-hidden'>
{/* begin::Hidden */}
<div className='d-flex flex-stack flex-wrap flex-grow-1 px-9 pt-9 pb-3'>
<div className='me-2'>
<span className='fw-bold text-gray-800 d-block fs-3'>Sales</span>
<span className='text-gray-500 fw-semibold'>Oct 8 - Oct 26 2021</span>
</div>
<div className={`fw-bold fs-3 text-${chartColor}`}>$15,300</div>
</div>
{/* end::Hidden */}
{/* begin::Chart */}
<div ref={chartRef} className='mixed-widget-10-chart'></div>
{/* end::Chart */}
</div>
</div>
)
}
const chartOptions = (chartColor: string, chartHeight: string): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const secondaryColor = getCSSVariableValue('--bs-gray-300')
const baseColor = getCSSVariableValue('--bs-' + chartColor)
return {
series: [
{
name: 'Net Profit',
data: [50, 60, 70, 80, 60, 50, 70, 60],
},
{
name: 'Revenue',
data: [50, 60, 70, 80, 60, 50, 70, 60],
},
],
chart: {
fontFamily: 'inherit',
type: 'bar',
height: chartHeight,
toolbar: {
show: false,
},
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '50%',
borderRadius: 5,
},
},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
stroke: {
show: true,
width: 2,
colors: ['transparent'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
fill: {
type: 'solid',
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' revenue'
},
},
},
colors: [baseColor, secondaryColor],
grid: {
padding: {
top: 10,
},
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
},
}
}
export {MixedWidget11}
@@ -0,0 +1,222 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartHeight: string
backGroundColor: string
}
const MixedWidget13: FC<Props> = ({className, backGroundColor, chartHeight}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartHeight))
if (chart) {
chart.render()
}
return chart
}
return (
<div
className={`card ${className} theme-dark-bg-body`}
style={{backgroundColor: backGroundColor}}
>
{/* begin::Body */}
<div className='card-body d-flex flex-column'>
{/* begin::Wrapper */}
<div className='d-flex flex-column flex-grow-1'>
{/* begin::Title */}
<a href='#' className='text-gray-900 text-hover-primary fw-bolder fs-3'>
Earnings
</a>
{/* end::Title */}
<div
ref={chartRef}
className='mixed-widget-13-chart'
style={{height: chartHeight, minHeight: chartHeight}}
></div>
</div>
{/* end::Wrapper */}
{/* begin::Stats */}
<div className='pt-5'>
{/* begin::Symbol */}
<span className='text-gray-900 fw-bolder fs-2x lh-0'>$</span>
{/* end::Symbol */}
{/* begin::Number */}
<span className='text-gray-900 fw-bolder fs-3x me-2 lh-0'>560</span>
{/* end::Number */}
{/* begin::Text */}
<span className='text-gray-900 fw-bolder fs-6 lh-0'>+ 28% this week</span>
{/* end::Text */}
</div>
{/* end::Stats */}
</div>
</div>
)
}
const chartOptions = (chartHeight: string): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-800')
const strokeColor = getCSSVariableValue('--bs-gray-300') as string
return {
series: [
{
name: 'Net Profit',
data: [15, 25, 15, 40, 20, 50],
},
],
grid: {
show: false,
padding: {
top: 0,
bottom: 0,
left: 0,
right: 0,
},
},
chart: {
fontFamily: 'inherit',
type: 'area',
height: chartHeight,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'gradient',
gradient: {
opacityFrom: 0.4,
opacityTo: 0,
stops: [20, 120, 120, 120],
},
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: ['#FFFFFF'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: strokeColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: true,
formatter: undefined,
offsetY: 0,
style: {
fontSize: '12px',
},
},
},
yaxis: {
min: 0,
max: 60,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: ['#ffffff'],
markers: {
colors: [labelColor],
strokeColors: [strokeColor],
strokeWidth: 3,
},
}
}
export {MixedWidget13}
@@ -0,0 +1,185 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartHeight: string
backGroundColor: string
}
const MixedWidget14: FC<Props> = ({className, backGroundColor, chartHeight = '150px'}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartHeight))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div
className={`card ${className} theme-dark-bg-body`}
style={{backgroundColor: backGroundColor}}
>
{/* begin::Body */}
<div className='card-body d-flex flex-column'>
{/* begin::Wrapper */}
<div className='d-flex flex-column flex-grow-1'>
{/* begin::Title */}
<a href='#' className='text-gray-900 text-hover-primary fw-bolder fs-3'>
Contributors
</a>
{/* end::Title */}
<div
ref={chartRef}
className='mixed-widget-14-chart'
style={{height: chartHeight, minHeight: chartHeight}}
></div>
</div>
{/* end::Wrapper */}
{/* begin::Stats */}
<div className='pt-5'>
{/* begin::Symbol */}
<span className='text-gray-900 fw-bolder fs-2x lh-0'>$</span>
{/* end::Symbol */}
{/* begin::Number */}
<span className='text-gray-900 fw-bolder fs-3x me-2 lh-0'>47</span>
{/* end::Number */}
{/* begin::Text */}
<span className='text-gray-900 fw-bolder fs-6 lh-0'>- 12% this week</span>
{/* end::Text */}
</div>
{/* end::Stats */}
</div>
</div>
)
}
const chartOptions = (chartHeight: string): ApexOptions => {
// const labelColor = getCSSVariableValue('--bs-gray-800')
return {
series: [
{
name: 'Inflation',
data: [1, 2.1, 1, 2.1, 4.1, 6.1, 4.1, 4.1, 2.1, 4.1, 2.1, 3.1, 1, 1, 2.1],
},
],
chart: {
fontFamily: 'inherit',
height: chartHeight,
type: 'bar',
toolbar: {
show: false,
},
},
grid: {
show: false,
padding: {
top: 0,
bottom: 0,
left: 0,
right: 0,
},
},
colors: ['#ffffff'],
plotOptions: {
bar: {
borderRadius: 2.5,
dataLabels: {
position: 'top', // top, center, bottom
},
columnWidth: '20%',
},
},
dataLabels: {
enabled: false,
formatter: function (val) {
return val + '%'
},
offsetY: -20,
style: {
fontSize: '12px',
colors: ['#304758'],
},
},
xaxis: {
labels: {
show: false,
},
categories: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
'Jan',
'Feb',
'Mar',
],
position: 'top',
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
crosshairs: {
show: false,
},
tooltip: {
enabled: false,
},
},
yaxis: {
show: false,
axisBorder: {
show: false,
},
axisTicks: {
show: false,
// background: labelColor,
},
labels: {
show: false,
formatter: function (val) {
return val + '%'
},
},
},
}
}
export {MixedWidget14}
@@ -0,0 +1,115 @@
import {FC} from 'react'
import {KTIcon} from '../../../helpers'
type Props = {
className: string
backGroundColor: string
}
const MixedWidget15: FC<Props> = ({className, backGroundColor}) => (
<div
className={`card ${className} theme-dark-bg-body`}
style={{backgroundColor: backGroundColor}}
>
{/* begin::Body */}
<div className='card-body d-flex flex-column'>
{/* begin::Wrapper */}
<div className='d-flex flex-column mb-7'>
{/* begin::Title */}
<a href='#' className='text-gray-900 text-hover-primary fw-bolder fs-3'>
Summary
</a>
{/* end::Title */}
</div>
{/* end::Wrapper */}
<div className='row g-0'>
{/*begin::Col*/}
<div className='col-6'>
<div className='d-flex align-items-center mb-9 me-2'>
{/*begin::Symbol*/}
<div className='symbol symbol-40px me-3'>
<div className='symbol-label bg-body bg-opacity-50'>
<KTIcon iconName='abstract-42' className='fs-1 text-gray-900' />
</div>
</div>
{/*end::Symbol*/}
{/*begin::Title*/}
<div>
<div className='fs-5 text-gray-900 fw-bolder lh-1'>$50K</div>
<div className='fs-7 text-gray-600 fw-bold'>Sales</div>
</div>
{/*end::Title*/}
</div>
</div>
{/*end::Col*/}
{/*begin::Col*/}
<div className='col-6'>
<div className='d-flex align-items-center mb-9 ms-2'>
{/*begin::Symbol*/}
<div className='symbol symbol-40px me-3'>
<div className='symbol-label bg-body bg-opacity-50'>
<KTIcon iconName='abstract-45' className='fs-1 text-gray-900' />
</div>
</div>
{/*end::Symbol*/}
{/*begin::Title*/}
<div>
<div className='fs-5 text-gray-900 fw-bolder lh-1'>$4,5K</div>
<div className='fs-7 text-gray-600 fw-bold'>Revenue</div>
</div>
{/*end::Title*/}
</div>
</div>
{/*end::Col*/}
{/*begin::Col*/}
<div className='col-6'>
<div className='d-flex align-items-center me-2'>
{/*begin::Symbol*/}
<div className='symbol symbol-40px me-3'>
<div className='symbol-label bg-body bg-opacity-50'>
<KTIcon iconName='abstract-21' className='fs-1 text-gray-900' />
</div>
</div>
{/*end::Symbol*/}
{/*begin::Title*/}
<div>
<div className='fs-5 text-gray-900 fw-bolder lh-1'>40</div>
<div className='fs-7 text-gray-600 fw-bold'>Tasks</div>
</div>
{/*end::Title*/}
</div>
</div>
{/*end::Col*/}
{/*begin::Col*/}
<div className='col-6'>
<div className='d-flex align-items-center ms-2'>
{/*begin::Symbol*/}
<div className='symbol symbol-40px me-3'>
<div className='symbol-label bg-body bg-opacity-50'>
<KTIcon iconName='abstract-44' className='fs-1 text-gray-900' />
</div>
</div>
{/*end::Symbol*/}
{/*begin::Title*/}
<div>
<div className='fs-5 text-gray-900 fw-bolder lh-1'>$5.8M</div>
<div className='fs-7 text-gray-600 fw-bold'>Sales</div>
</div>
{/*end::Title*/}
</div>
</div>
{/*end::Col*/}
</div>
</div>
</div>
)
export {MixedWidget15}
@@ -0,0 +1,259 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {KTIcon} from '../../../helpers'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartColor: string
strokeColor: string
chartHeight: string
}
const MixedWidget2: FC<Props> = ({className, chartColor, chartHeight, strokeColor}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(
chartRef.current,
chartOptions(chartHeight, chartColor, strokeColor)
)
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className={`card-header border-0 py-5 bg-${chartColor}`}>
<h3 className='card-title fw-bold text-white'>Sales Statistics</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-white btn-active-white btn-active-color- border-0 me-n3'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body p-0'>
{/* begin::Chart */}
<div
ref={chartRef}
className={`mixed-widget-2-chart card-rounded-bottom bg-${chartColor}`}
></div>
{/* end::Chart */}
{/* begin::Stats */}
<div className='card-p mt-n20 position-relative'>
{/* begin::Row */}
<div className='row g-0'>
{/* begin::Col */}
<div className='col bg-light-warning px-6 py-8 rounded-2 me-7 mb-7'>
<KTIcon iconName='chart-simple' className='fs-3x text-warning d-block my-2' />
<a href='#' className='text-warning fw-semibold fs-6'>
Weekly Sales
</a>
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col bg-light-primary px-6 py-8 rounded-2 mb-7'>
<KTIcon iconName='plus' className='fs-3x text-primary d-block my-2' />
<a href='#' className='text-primary fw-semibold fs-6'>
New Users
</a>
</div>
{/* end::Col */}
</div>
{/* end::Row */}
{/* begin::Row */}
<div className='row g-0'>
{/* begin::Col */}
<div className='col bg-light-danger px-6 py-8 rounded-2 me-7'>
<KTIcon iconName='abstract-26' className='fs-3x text-danger d-block my-2' />
<a href='#' className='text-danger fw-semibold fs-6 mt-2'>
Item Orders
</a>
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col bg-light-success px-6 py-8 rounded-2'>
<KTIcon iconName='sms' className='fs-3x text-success d-block my-2' />
<a href='#' className='text-success fw-semibold fs-6 mt-2'>
Bug Reports
</a>
</div>
{/* end::Col */}
</div>
{/* end::Row */}
</div>
{/* end::Stats */}
</div>
{/* end::Body */}
</div>
)
}
const chartOptions = (
chartHeight: string,
chartColor: string,
strokeColor: string
): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
const color = getCSSVariableValue('--bs-' + chartColor)
return {
series: [
{
name: 'Net Profit',
data: [30, 45, 32, 70, 40, 40, 40],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: chartHeight,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
dropShadow: {
enabled: true,
enabledOnSeries: undefined,
top: 5,
left: 0,
blur: 3,
color: strokeColor,
opacity: 0.5,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 0,
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [strokeColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: borderColor,
width: 1,
dashArray: 3,
},
},
},
yaxis: {
min: 0,
max: 80,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
marker: {
show: false,
},
},
colors: ['transparent'],
markers: {
colors: [color],
strokeColors: [strokeColor],
strokeWidth: 3,
},
}
}
export {MixedWidget2}
@@ -0,0 +1,248 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {KTIcon} from '../../../helpers'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import clsx from 'clsx'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartColor: string
chartHeight: string
}
const MixedWidget3: FC<Props> = ({className, chartColor, chartHeight}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartHeight))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className={`card-header border-0 bg-${chartColor} py-5`}>
<h3 className='card-title fw-bold text-white'>Sales Progress</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className={clsx(
'btn btn-sm btn-icon btn-color-white btn-active-white',
`btn-active-color-${chartColor}`,
'border-0 me-n3'
)}
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body p-0'>
{/* begin::Chart */}
<div
ref={chartRef}
className={`mixed-widget-12-chart card-rounded-bottom bg-${chartColor}`}
></div>
{/* end::Chart */}
{/* begin::Stats */}
<div className='card-rounded bg-body mt-n10 position-relative card-px py-15'>
{/* begin::Row */}
<div className='row g-0 mb-7'>
{/* begin::Col */}
<div className='col mx-5'>
<div className='fs-6 text-gray-500'>Avarage Sale</div>
<div className='fs-2 fw-bold text-gray-800'>$650</div>
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col mx-5'>
<div className='fs-6 text-gray-500'>Comissions</div>
<div className='fs-2 fw-bold text-gray-800'>$29,500</div>
</div>
{/* end::Col */}
</div>
{/* end::Row */}
{/* begin::Row */}
<div className='row g-0'>
{/* begin::Col */}
<div className='col mx-5'>
<div className='fs-6 text-gray-500'>Revenue</div>
<div className='fs-2 fw-bold text-gray-800'>$55,000</div>
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col mx-5'>
<div className='fs-6 text-gray-500'>Expenses</div>
<div className='fs-2 fw-bold text-gray-800'>$1,130,600</div>
</div>
{/* end::Col */}
</div>
{/* end::Row */}
</div>
{/* end::Stats */}
</div>
{/* end::Body */}
</div>
)
}
const chartOptions = (chartHeight: string): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-500')
const borderColor = getCSSVariableValue('--bs-gray-200')
return {
series: [
{
name: 'Net Profit',
data: [35, 65, 75, 55, 45, 60, 55],
},
{
name: 'Revenue',
data: [40, 70, 80, 60, 50, 65, 60],
},
],
chart: {
fontFamily: 'inherit',
type: 'bar',
height: chartHeight,
toolbar: {
show: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '30%',
borderRadius: 5,
},
},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
stroke: {
show: true,
width: 1,
colors: ['transparent'],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
yaxis: {
min: 0,
max: 100,
labels: {
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
fill: {
type: ['solid', 'solid'],
opacity: [0.25, 1],
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
marker: {
show: false,
},
},
colors: ['#ffffff', '#ffffff'],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true,
},
},
padding: {
left: 20,
right: 20,
},
},
}
}
export {MixedWidget3}
@@ -0,0 +1,120 @@
import clsx from 'clsx'
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
color: string
image: string
title: string
date: string
progress: string
}
const MixedWidget4: React.FC<Props> = ({className, color, image, title, date, progress}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body'>
{/* begin::Heading */}
<div className='d-flex flex-stack'>
{/* begin:Info */}
<div className='d-flex align-items-center'>
{/* begin:Image */}
<div className='symbol symbol-60px me-5'>
<span className={clsx(`symbol-label`, `bg-${color}-light`)}>
<img src={toAbsoluteUrl(image)} className='h-50 align-self-center' alt='' />
</span>
</div>
{/* end:Image */}
{/* begin:Title */}
<div className='d-flex flex-column flex-grow-1 my-lg-0 my-2 pr-3'>
<a href='#' className='text-gray-900 fw-bold text-hover-primary fs-5'>
{title}
</a>
<span className='text-muted fw-semibold'>{date}</span>
</div>
{/* end:Title */}
</div>
{/* begin:Info */}
{/* begin:Menu */}
<div className='ms-1'>
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
</div>
{/* end::Menu */}
</div>
{/* end::Heading */}
{/* begin:Stats */}
<div className='d-flex flex-column w-100 mt-12'>
<span className='text-gray-900 me-2 fw-bold pb-3'>Progress</span>
<div className='progress h-5px w-100'>
<div
className={`progress-bar bg-${color}`}
role='progressbar'
style={{width: progress}}
></div>
</div>
</div>
{/* end:Stats */}
{/* begin:Team */}
<div className='d-flex flex-column mt-10'>
<div className='text-gray-900 me-2 fw-bold pb-4'>Team</div>
<div className='d-flex'>
<a
href='#'
className='symbol symbol-35px me-2'
data-bs-toggle='tooltip'
title='Ana Stone'
>
<img src={toAbsoluteUrl('media/avatars/300-6.jpg')} alt='' />
</a>
<a
href='#'
className='symbol symbol-35px me-2'
data-bs-toggle='tooltip'
title='Mark Larson'
>
<img src={toAbsoluteUrl('media/avatars/300-5.jpg')} alt='' />
</a>
<a
href='#'
className='symbol symbol-35px me-2'
data-bs-toggle='tooltip'
title='Sam Harris'
>
<img src={toAbsoluteUrl('media/avatars/300-9.jpg')} alt='' />
</a>
<a href='#' className='symbol symbol-35px' data-bs-toggle='tooltip' title='Alice Micto'>
<img src={toAbsoluteUrl('media/avatars/300-10.jpg')} alt='' />
</a>
</div>
</div>
{/* end:Team */}
</div>
{/* end::Body */}
</div>
)
}
export {MixedWidget4}
@@ -0,0 +1,78 @@
import { FC } from 'react'
import {toAbsoluteUrl} from '../../../helpers'
type Props = {
className: string
time: string
image: string
title: string
description: string
}
const MixedWidget5: FC<Props> = ({className, time, image, title, description}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body d-flex flex-column pb-10 pb-lg-15'>
<div className='flex-grow-1'>
{/* begin::Info */}
<div className='d-flex align-items-center pe-2 mb-5'>
<span className='text-muted fw-bold fs-5 flex-grow-1'>{time}</span>
<div className='symbol symbol-50px'>
<span className='symbol-label bg-light'>
<img src={toAbsoluteUrl(image)} className='h-50 align-self-center' alt='' />
</span>
</div>
</div>
{/* end::Info */}
{/* begin::Link */}
<a href='#' className='text-gray-900 fw-bold text-hover-primary fs-4'>
{title}
</a>
{/* end::Link */}
{/* begin::Desc */}
<p className='py-3' dangerouslySetInnerHTML={{__html: description}}></p>
{/* end::Desc */}
</div>
{/* begin::Team */}
<div className='d-flex align-items-center'>
<a
href='#'
className='symbol symbol-35px me-2'
data-bs-toggle='tooltip'
title='Ana Stone'
>
<img src={toAbsoluteUrl('media/avatars/300-6.jpg')} alt='' />
</a>
<a
href='#'
className='symbol symbol-35px me-2'
data-bs-toggle='tooltip'
title='Mark Larson'
>
<img src={toAbsoluteUrl('media/avatars/300-5.jpg')} alt='' />
</a>
<a
href='#'
className='symbol symbol-35px me-2'
data-bs-toggle='tooltip'
title='Sam Harris'
>
<img src={toAbsoluteUrl('media/avatars/300-9.jpg')} alt='' />
</a>
</div>
{/* end::Team */}
</div>
{/* end::Body */}
</div>
)
}
export {MixedWidget5}
@@ -0,0 +1,273 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {KTIcon} from '../../../helpers'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartHeight: string
chartColor: string
}
const MixedWidget6: FC<Props> = ({className, chartHeight, chartColor}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartHeight, chartColor))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Beader */}
<div className='card-header border-0 py-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Sales Overview</span>
<span className='text-muted fw-semibold fs-7'>Recent sales statistics</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body p-0 d-flex flex-column'>
{/* begin::Stats */}
<div className='card-p pt-5 bg-body flex-grow-1'>
{/* begin::Row */}
<div className='row g-0'>
{/* begin::Col */}
<div className='col mr-8'>
{/* begin::Label */}
<div className='fs-7 text-muted fw-semibold'>Average Sale</div>
{/* end::Label */}
{/* begin::Stat */}
<div className='d-flex align-items-center'>
<div className='fs-4 fw-bold'>$650</div>
<KTIcon iconName='arrow-up' className='fs-5 text-success ms-1' />
</div>
{/* end::Stat */}
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col'>
{/* begin::Label */}
<div className='fs-7 text-muted fw-semibold'>Commission</div>
{/* end::Label */}
{/* begin::Stat */}
<div className='fs-4 fw-bold'>$233,600</div>
{/* end::Stat */}
</div>
{/* end::Col */}
</div>
{/* end::Row */}
{/* begin::Row */}
<div className='row g-0 mt-8'>
{/* begin::Col */}
<div className='col mr-8'>
{/* begin::Label */}
<div className='fs-7 text-muted fw-semibold'>Annual Taxes 2019</div>
{/* end::Label */}
{/* begin::Stat */}
<div className='fs-4 fw-bold'>$29,004</div>
{/* end::Stat */}
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col'>
{/* begin::Label */}
<div className='fs-7 text-muted fw-semibold'>Annual Income</div>
{/* end::Label */}
{/* begin::Stat */}
<div className='d-flex align-items-center'>
<div className='fs-4 fw-bold'>$1,480,00</div>
<KTIcon iconName='arrow-down' className='fs-5 text-danger ms-1' />
</div>
{/* end::Stat */}
</div>
{/* end::Col */}
</div>
{/* end::Row */}
</div>
{/* end::Stats */}
{/* begin::Chart */}
<div
ref={chartRef}
className='mixed-widget-3-chart card-rounded-bottom'
data-kt-chart-color={chartColor}
style={{height: chartHeight}}
></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
const chartOptions = (chartHeight: string, chartColor: string): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-800')
const strokeColor = getCSSVariableValue('--bs-gray-300')
const baseColor = getCSSVariableValue('--bs-' + chartColor)
const lightColor = getCSSVariableValue('--bs-' + chartColor + '-light')
return {
series: [
{
name: 'Net Profit',
data: [30, 25, 45, 30, 55, 55],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: chartHeight,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: strokeColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: false,
},
},
yaxis: {
min: 0,
max: 60,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [lightColor],
markers: {
colors: [lightColor],
strokeColors: [baseColor],
strokeWidth: 3,
},
}
}
export {MixedWidget6}
@@ -0,0 +1,139 @@
import React, {useEffect, useRef} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {KTIcon} from '../../../helpers'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartColor: string
chartHeight: string
}
const MixedWidget7: React.FC<Props> = ({className, chartColor, chartHeight}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartColor, chartHeight))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Beader */}
<div className='card-header border-0 py-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Action Needed</span>
<span className='text-muted fw-semibold fs-7'>Complete your profile setup</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body d-flex flex-column'>
<div className='flex-grow-1'>
<div ref={chartRef} className='mixed-widget-4-chart'></div>
</div>
<div className='pt-5'>
<p className='text-center fs-6 pb-5 '>
<span className='badge badge-light-danger fs-8'>Notes:</span>&nbsp; Current sprint
requires stakeholders
<br />
to approve newly amended policies
</p>
<a href='#' className={`btn btn-${chartColor} w-100 py-3`}>
Take Action
</a>
</div>
</div>
{/* end::Body */}
</div>
)
}
const chartOptions = (chartColor: string, chartHeight: string): ApexOptions => {
const baseColor = getCSSVariableValue('--bs-' + chartColor)
const lightColor = getCSSVariableValue('--bs-' + chartColor + '-light')
const labelColor = getCSSVariableValue('--bs-gray-700')
return {
series: [74],
chart: {
fontFamily: 'inherit',
height: chartHeight,
type: 'radialBar',
},
plotOptions: {
radialBar: {
hollow: {
margin: 0,
size: '65%',
},
dataLabels: {
name: {
show: false,
fontWeight: '700',
},
value: {
color: labelColor,
fontSize: '30px',
fontWeight: '700',
offsetY: 12,
show: true,
formatter: function (val) {
return val + '%'
},
},
},
track: {
background: lightColor,
strokeWidth: '100%',
},
},
},
colors: [baseColor],
stroke: {
lineCap: 'round',
},
labels: ['Progress'],
}
}
export {MixedWidget7}
@@ -0,0 +1,325 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartColor: string
chartHeight: string
}
const MixedWidget8: FC<Props> = ({className, chartColor, chartHeight}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart1 = new ApexCharts(chartRef.current, chart1Options(chartColor, chartHeight))
if (chart1) {
chart1.render()
}
return chart1
}
useEffect(() => {
const chart1 = refreshChart()
return () => {
if (chart1) {
chart1.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Beader */}
<div className='card-header border-0 py-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Trends</span>
<span className='text-muted fw-semibold fs-7'>Latest trends</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body d-flex flex-column'>
{/* begin::Chart */}
<div ref={chartRef} className='mixed-widget-5-chart card-rounded-top'></div>
{/* end::Chart */}
{/* begin::Items */}
<div className='mt-5'>
{/* begin::Item */}
<div className='d-flex flex-stack mb-5'>
{/* begin::Section */}
<div className='d-flex align-items-center me-2'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-3'>
<div className='symbol-label bg-light'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/plurk.svg')}
alt=''
className='h-50'
/>
</div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div>
<a href='#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
Top Authors
</a>
<div className='fs-7 text-muted fw-semibold mt-1'>Ricky Hunt, Sandra Trepp</div>
</div>
{/* end::Title */}
</div>
{/* end::Section */}
{/* begin::Label */}
<div className='badge badge-light fw-semibold py-4 px-3'>+82$</div>
{/* end::Label */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex flex-stack mb-5'>
{/* begin::Section */}
<div className='d-flex align-items-center me-2'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-3'>
<div className='symbol-label bg-light'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/figma-1.svg')}
alt=''
className='h-50'
/>
</div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div>
<a href='#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
Top Sales
</a>
<div className='fs-7 text-muted fw-semibold mt-1'>PitStop Emails</div>
</div>
{/* end::Title */}
</div>
{/* end::Section */}
{/* begin::Label */}
<div className='badge badge-light fw-semibold py-4 px-3'>+82$</div>
{/* end::Label */}
</div>
{/* end::Item */}
{/* begin::Item */}
<div className='d-flex flex-stack'>
{/* begin::Section */}
<div className='d-flex align-items-center me-2'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-3'>
<div className='symbol-label bg-light'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/vimeo.svg')}
alt=''
className='h-50'
/>
</div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div className='py-1'>
<a href='#' className='fs-6 text-gray-800 text-hover-primary fw-bold'>
Top Engagement
</a>
<div className='fs-7 text-muted fw-semibold mt-1'>KT.com</div>
</div>
{/* end::Title */}
</div>
{/* end::Section */}
{/* begin::Label */}
<div className='badge badge-light fw-semibold py-4 px-3'>+82$</div>
{/* end::Label */}
</div>
{/* end::Item */}
</div>
{/* end::Items */}
</div>
{/* end::Body */}
</div>
)
}
const chart1Options = (chartColor: string, chartHeight: string): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-800')
const strokeColor = getCSSVariableValue('--bs-gray-300')
const baseColor = getCSSVariableValue('--bs-' + chartColor) as string
const lightColor = getCSSVariableValue('--bs-' + chartColor + '-light')
return {
series: [
{
name: 'Net Profit',
data: [30, 30, 60, 25, 25, 40],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: chartHeight,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
// fill1: {
// type: 'gradient',
// opacity: 1,
// gradient: {
// type: 'vertical',
// shadeIntensity: 0.5,
// gradientToColors: undefined,
// inverseColors: true,
// opacityFrom: 1,
// opacityTo: 0.375,
// stops: [25, 50, 100],
// colorStops: [],
// },
// },
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: strokeColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: true,
formatter: undefined,
offsetY: 0,
style: {
fontSize: '12px',
},
},
},
yaxis: {
min: 0,
max: 65,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [lightColor],
markers: {
colors: [lightColor],
strokeColors: [baseColor],
strokeWidth: 3,
},
}
}
export {MixedWidget8}
@@ -0,0 +1,297 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {KTIcon} from '../../../helpers'
import {getCSSVariableValue} from '../../../assets/ts/_utils'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
chartColor: string
chartHeight: string
}
const MixedWidget9: FC<Props> = ({className, chartColor, chartHeight}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const chart = new ApexCharts(chartRef.current, chartOptions(chartColor, chartHeight))
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Beader */}
<div className='card-header border-0 py-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Sales Statistics</span>
<span className='text-muted fw-semibold fs-7'>Recent sales statistics</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
<Dropdown1 />
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body p-0 d-flex flex-column'>
{/* begin::Stats */}
<div className='card-px pt-5 pb-10 flex-grow-1'>
{/* begin::Row */}
<div className='row g-0 mt-5 mb-10'>
{/* begin::Col */}
<div className='col'>
<div className='d-flex align-items-center me-2'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-3'>
<div className='symbol-label bg-light-info'>
<KTIcon iconName='bucket' className='fs-1 text-info' />
</div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div>
<div className='fs-4 text-gray-900 fw-bold'>$2,034</div>
<div className='fs-7 text-muted fw-semibold'>Author Sales</div>
</div>
{/* end::Title */}
</div>
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col'>
<div className='d-flex align-items-center me-2'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-3'>
<div className='symbol-label bg-light-danger'>
<KTIcon iconName='abstract-26' className='fs-1 text-danger' />
</div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div>
<div className='fs-4 text-gray-900 fw-bold'>$706</div>
<div className='fs-7 text-muted fw-semibold'>Commision</div>
</div>
{/* end::Title */}
</div>
</div>
{/* end::Col */}
</div>
{/* end::Row */}
{/* begin::Row */}
<div className='row g-0'>
{/* begin::Col */}
<div className='col'>
<div className='d-flex align-items-center me-2'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-3'>
<div className='symbol-label bg-light-success'>
<KTIcon iconName='basket' className='fs-1 text-success' />
</div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div>
<div className='fs-4 text-gray-900 fw-bold'>$49</div>
<div className='fs-7 text-muted fw-semibold'>Average Bid</div>
</div>
{/* end::Title */}
</div>
</div>
{/* end::Col */}
{/* begin::Col */}
<div className='col'>
<div className='d-flex align-items-center me-2'>
{/* begin::Symbol */}
<div className='symbol symbol-50px me-3'>
<div className='symbol-label bg-light-primary'>
<KTIcon iconName='cheque' className='fs-1 text-primary' />
</div>
</div>
{/* end::Symbol */}
{/* begin::Title */}
<div>
<div className='fs-4 text-gray-900 fw-bold'>$5.8M</div>
<div className='fs-7 text-muted fw-semibold'>All Time Sales</div>
</div>
{/* end::Title */}
</div>
</div>
{/* end::Col */}
</div>
{/* end::Row */}
</div>
{/* end::Stats */}
{/* begin::Chart */}
<div ref={chartRef} className='mixed-widget-6-chart card-rounded-bottom'></div>
{/* end::Chart */}
</div>
{/* end::Body */}
</div>
)
}
const chartOptions = (chartColor: string, chartHeight: string): ApexOptions => {
const labelColor = getCSSVariableValue('--bs-gray-800')
const strokeColor = getCSSVariableValue('--bs-gray-300')
const baseColor = getCSSVariableValue('--bs-' + chartColor)
const lightColor = getCSSVariableValue('--bs-' + chartColor + '-light')
return {
series: [
{
name: 'Net Profit',
data: [30, 25, 45, 30, 55, 55],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: chartHeight,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: strokeColor,
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: false,
},
},
yaxis: {
min: 0,
max: 60,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [lightColor],
markers: {
colors: [lightColor],
strokeColors: [baseColor],
strokeWidth: 3,
},
}
}
export {MixedWidget9}
@@ -0,0 +1,40 @@
import React from 'react'
import {toAbsoluteUrl} from '../../../helpers'
type Props = {
className: string
image: string
title: string
time: string
description: string
}
const StatisticsWidget1: React.FC<Props> = ({className, image, title, time, description}) => {
return (
<div
className={`card bgi-no-repeat ${className}`}
style={{
backgroundPosition: 'right top',
backgroundSize: '30% auto',
backgroundImage: `url(${toAbsoluteUrl('media/svg/shapes/' + image)})`,
}}
>
{/* begin::Body */}
<div className='card-body'>
<a href='#' className='card-title fw-bold text-muted text-hover-primary fs-4'>
{title}
</a>
<div className='fw-bold text-primary my-6'>{time}</div>
<p
className='text-gray-900-75 fw-semibold fs-5 m-0'
dangerouslySetInnerHTML={{__html: description}}
></p>
</div>
{/* end::Body */}
</div>
)
}
export {StatisticsWidget1}
@@ -0,0 +1,35 @@
import { FC } from 'react'
import {toAbsoluteUrl} from '../../../helpers'
type Props = {
className: string
title: string
description: string
avatar: string
}
const StatisticsWidget2: FC<Props> = ({className, title, description, avatar}) => {
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body d-flex align-items-center pt-3 pb-0'>
<div className='d-flex flex-column flex-grow-1 py-2 py-lg-13 me-2'>
<a href='#' className='fw-bold text-gray-900 fs-4 mb-2 text-hover-primary'>
{title}
</a>
<span
className='fw-semibold text-muted fs-5'
dangerouslySetInnerHTML={{__html: description}}
></span>
</div>
<img src={toAbsoluteUrl(avatar)} alt='' className='align-self-end h-100px' />
</div>
{/* end::Body */}
</div>
)
}
export {StatisticsWidget2}
@@ -0,0 +1,207 @@
import {useEffect, useRef, FC} from 'react'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
title: string
description: string
change: string
color: string
}
const StatisticsWidget3: FC<Props> = ({className, title, description, change, color}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const labelColor = getCSSVariableValue('--bs-gray-800')
const baseColor = getCSSVariableValue('--bs-' + color)
const lightColor = getCSSVariableValue('--bs-' + color + '-light')
const chart = new ApexCharts(
chartRef.current,
getChartOptions(height, labelColor, baseColor, lightColor)
)
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, mode])
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body d-flex flex-column p-0'>
<div className='d-flex flex-stack flex-grow-1 card-p'>
<div className='d-flex flex-column me-2'>
<a href='#' className='text-gray-900 text-hover-primary fw-bold fs-3'>
{title}
</a>
<span
className='text-muted fw-semibold mt-1'
dangerouslySetInnerHTML={{__html: description}}
></span>
</div>
<span className='symbol symbol-50px'>
<span className={`symbol-label fs-5 fw-bold bg-light-${color} text-${color}`}>
{change}
</span>
</span>
</div>
<div
ref={chartRef}
className='statistics-widget-3-chart card-rounded-bottom'
style={{height: '150px'}}
></div>
</div>
{/* end::Body */}
</div>
)
}
export {StatisticsWidget3}
function getChartOptions(
height: number,
labelColor: string,
baseColor: string,
lightColor: string
): ApexOptions {
const options: ApexOptions = {
series: [
{
name: 'Net Profit',
data: [30, 45, 32, 70, 40],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: height,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: '#E4E6EF',
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: false,
},
},
yaxis: {
min: 0,
max: 80,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [lightColor],
markers: {
colors: [lightColor],
strokeColors: [baseColor],
strokeWidth: 3,
},
}
return options
}
@@ -0,0 +1,203 @@
import React, {useEffect, useRef} from 'react'
import {KTIcon} from '../../../helpers'
import ApexCharts, {ApexOptions} from 'apexcharts'
import {getCSS, getCSSVariableValue} from '../../../assets/ts/_utils'
import clsx from 'clsx'
import {useThemeMode} from '../../layout/theme-mode/ThemeModeProvider'
type Props = {
className: string
svgIcon: string
color: string
change: string
description: string
}
const StatisticsWidget4: React.FC<Props> = ({className, svgIcon, color, change, description}) => {
const chartRef = useRef<HTMLDivElement | null>(null)
const {mode} = useThemeMode()
const refreshChart = () => {
if (!chartRef.current) {
return
}
const height = parseInt(getCSS(chartRef.current, 'height'))
const labelColor = getCSSVariableValue('--bs-gray-800')
const baseColor = getCSSVariableValue('--bs-' + color)
const lightColor = getCSSVariableValue('--bs-' + color + '-light')
const chart = new ApexCharts(
chartRef.current,
getChartOptions(height, labelColor, baseColor, lightColor)
)
if (chart) {
chart.render()
}
return chart
}
useEffect(() => {
const chart = refreshChart()
return () => {
if (chart) {
chart.destroy()
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartRef, color, mode])
return (
<div className={`card ${className}`}>
{/* begin::Body */}
<div className='card-body p-0'>
<div className='d-flex flex-stack card-p flex-grow-1'>
<span className={clsx('symbol symbol-50px', 'me-2')}>
<span className={clsx('symbol-label', `bg-light-${color}`)}>
<KTIcon iconName={svgIcon} className={`fs-2x text-${color}`} />
</span>
</span>
<div className='d-flex flex-column text-end'>
<span className='text-gray-900 fw-bold fs-2'>{change}</span>
<span className='text-muted fw-semibold mt-1'>{description}</span>
</div>
</div>
<div
ref={chartRef}
className='statistics-widget-4-chart card-rounded-bottom'
style={{height: '150px'}}
></div>
</div>
{/* end::Body */}
</div>
)
}
export {StatisticsWidget4}
function getChartOptions(
height: number,
labelColor: string,
baseColor: string,
lightColor: string
): ApexOptions {
return {
series: [
{
name: 'Net Profit',
data: [40, 40, 30, 30, 35, 35, 50],
},
],
chart: {
fontFamily: 'inherit',
type: 'area',
height: height,
toolbar: {
show: false,
},
zoom: {
enabled: false,
},
sparkline: {
enabled: true,
},
},
plotOptions: {},
legend: {
show: false,
},
dataLabels: {
enabled: false,
},
fill: {
type: 'solid',
opacity: 1,
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor],
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
axisBorder: {
show: false,
},
axisTicks: {
show: false,
},
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
crosshairs: {
show: false,
position: 'front',
stroke: {
color: '#E4E6EF',
width: 1,
dashArray: 3,
},
},
tooltip: {
enabled: false,
},
},
yaxis: {
min: 0,
max: 60,
labels: {
show: false,
style: {
colors: labelColor,
fontSize: '12px',
},
},
},
states: {
normal: {
filter: {
type: 'none',
value: 0,
},
},
hover: {
filter: {
type: 'none',
value: 0,
},
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0,
},
},
},
tooltip: {
style: {
fontSize: '12px',
},
y: {
formatter: function (val) {
return '$' + val + ' thousands'
},
},
},
colors: [lightColor],
markers: {
colors: [lightColor],
strokeColors: [baseColor],
strokeWidth: 3,
},
}
}
@@ -0,0 +1,39 @@
import React from 'react'
import {KTIcon} from '../../../helpers'
type Props = {
className: string
color: string
svgIcon: string
iconColor: string
title: string
titleColor?: string
description: string
descriptionColor?: string
}
const StatisticsWidget5: React.FC<Props> = ({
className,
color,
svgIcon,
iconColor,
title,
titleColor,
description,
descriptionColor,
}) => {
return (
<a href='#' className={`card bg-${color} hoverable ${className}`}>
<div className='card-body'>
<KTIcon iconName={svgIcon} className={`text-${iconColor} fs-3x ms-n1`} />
<div className={`text-${titleColor} fw-bold fs-2 mb-2 mt-5`}>{title}</div>
<div className={`fw-semibold text-${descriptionColor}`}>{description}</div>
</div>
</a>
)
}
export {StatisticsWidget5}
@@ -0,0 +1,40 @@
import { FC } from 'react'
type Props = {
className: string
color: string
title: string
description: string
progress: string
}
const StatisticsWidget6: FC<Props> = ({className, color, title, description, progress}) => {
return (
<div className={`card bg-light-${color} ${className}`}>
{/* begin::Body */}
<div className='card-body my-3'>
<a href='#' className={`card-title fw-bold text-${color} fs-5 mb-3 d-block`}>
{description}
</a>
<div className='py-1'>
<span className='text-gray-900 fs-1 fw-bold me-2'>{progress}</span>
<span className='fw-semibold text-muted fs-7'>{title}</span>
</div>
<div className={`progress h-7px bg-${color} bg-opacity-50 mt-7`}>
<div
className={`progress-bar bg-${color}`}
role='progressbar'
style={{width: progress}}
/>
</div>
</div>
{/* end:: Body */}
</div>
)
}
export {StatisticsWidget6}
@@ -0,0 +1,256 @@
import React from 'react'
import {KTIcon, toAbsoluteUrl} from '../../../helpers'
import {Dropdown1} from '../../content/dropdown/Dropdown1'
type Props = {
className: string
}
const TablesWidget1: React.FC<Props> = ({className}) => {
return (
<div className={`card ${className}`}>
{/* begin::Header */}
<div className='card-header border-0 pt-5'>
<h3 className='card-title align-items-start flex-column'>
<span className='card-label fw-bold fs-3 mb-1'>Tasks Overview</span>
<span className='text-muted fw-semibold fs-7'>Pending 10 tasks</span>
</h3>
<div className='card-toolbar'>
{/* begin::Menu */}
<button
type='button'
className='btn btn-sm btn-icon btn-color-primary btn-active-light-primary'
data-kt-menu-trigger='click'
data-kt-menu-placement='bottom-end'
data-kt-menu-flip='top-end'
>
<KTIcon iconName='category' className='fs-2' />
</button>
{/* begin::Menu 1 */}
<Dropdown1 />
{/* end::Menu 1 */}
{/* end::Menu */}
</div>
</div>
{/* end::Header */}
{/* begin::Body */}
<div className='card-body py-3'>
{/* begin::Table container */}
<div className='table-responsive'>
{/* begin::Table */}
<table className='table align-middle gs-0 gy-5'>
{/* begin::Table head */}
<thead>
<tr>
<th className='p-0 w-50px'></th>
<th className='p-0 min-w-200px'></th>
<th className='p-0 min-w-100px'></th>
<th className='p-0 min-w-40px'></th>
</tr>
</thead>
{/* end::Table head */}
{/* begin::Table body */}
<tbody>
<tr>
<th>
<div className='symbol symbol-50px me-2'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/plurk.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
</th>
<td>
<a href='#' className='text-gray-900 fw-bold text-hover-primary mb-1 fs-6'>
Top Authors
</a>
<span className='text-muted fw-semibold d-block fs-7'>Successful Fellas</span>
</td>
<td>
<div className='d-flex flex-column w-100 me-2'>
<div className='d-flex flex-stack mb-2'>
<span className='text-muted me-2 fs-7 fw-semibold'>70%</span>
</div>
<div className='progress h-6px w-100'>
<div
className='progress-bar bg-primary'
role='progressbar'
style={{width: '70%'}}
></div>
</div>
</div>
</td>
<td className='text-end'>
<a href='#' className='btn btn-sm btn-icon btn-bg-light btn-active-color-primary'>
<KTIcon iconName='arrow-right' className='fs-2' />
</a>
</td>
</tr>
<tr>
<th>
<div className='symbol symbol-50px me-2'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/telegram.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
</th>
<td>
<a href='#' className='text-gray-900 fw-bold text-hover-primary mb-1 fs-6'>
Popular Authors
</a>
<span className='text-muted fw-semibold d-block fs-7'>Most Successful</span>
</td>
<td>
<div className='d-flex flex-column w-100 me-2'>
<div className='d-flex flex-stack mb-2'>
<span className='text-muted me-2 fs-7 fw-semibold'>50%</span>
</div>
<div className='progress h-6px w-100'>
<div
className='progress-bar bg-primary'
role='progressbar'
style={{width: '50%'}}
></div>
</div>
</div>
</td>
<td className='text-end'>
<a href='#' className='btn btn-sm btn-icon btn-bg-light btn-active-color-primary'>
<KTIcon iconName='arrow-right' className='fs-2' />
</a>
</td>
</tr>
<tr>
<th>
<div className='symbol symbol-50px me-2'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/vimeo.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
</th>
<td>
<a href='#' className='text-gray-900 fw-bold text-hover-primary mb-1 fs-6'>
New Users
</a>
<span className='text-muted fw-semibold d-block fs-7'>Awesome Users</span>
</td>
<td>
<div className='d-flex flex-column w-100 me-2'>
<div className='d-flex flex-stack mb-2'>
<span className='text-muted me-2 fs-7 fw-semibold'>80%</span>
</div>
<div className='progress h-6px w-100'>
<div
className='progress-bar bg-primary'
role='progressbar'
style={{width: '80%'}}
></div>
</div>
</div>
</td>
<td className='text-end'>
<a href='#' className='btn btn-sm btn-icon btn-bg-light btn-active-color-primary'>
<KTIcon iconName='arrow-right' className='fs-2' />
</a>
</td>
</tr>
<tr>
<th>
<div className='symbol symbol-50px me-2'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/bebo.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
</th>
<td>
<a href='#' className='text-gray-900 fw-bold text-hover-primary mb-1 fs-6'>
Active Customers
</a>
<span className='text-muted fw-semibold d-block fs-7'>Best Customers</span>
</td>
<td>
<div className='d-flex flex-column w-100 me-2'>
<div className='d-flex flex-stack mb-2'>
<span className='text-muted me-2 fs-7 fw-semibold'>90%</span>
</div>
<div className='progress h-6px w-100'>
<div
className='progress-bar bg-primary'
role='progressbar'
style={{width: '90%'}}
></div>
</div>
</div>
</td>
<td className='text-end'>
<a href='#' className='btn btn-sm btn-icon btn-bg-light btn-active-color-primary'>
<KTIcon iconName='arrow-right' className='fs-2' />
</a>
</td>
</tr>
<tr>
<th>
<div className='symbol symbol-50px me-2'>
<span className='symbol-label'>
<img
src={toAbsoluteUrl('media/svg/brand-logos/kickstarter.svg')}
className='h-50 align-self-center'
alt=''
/>
</span>
</div>
</th>
<td>
<a href='#' className='text-gray-900 fw-bold text-hover-primary mb-1 fs-6'>
Bestseller Theme
</a>
<span className='text-muted fw-semibold d-block fs-7'>Amazing Templates</span>
</td>
<td>
<div className='d-flex flex-column w-100 me-2'>
<div className='d-flex flex-stack mb-2'>
<span className='text-muted me-2 fs-7 fw-semibold'>70%</span>
</div>
<div className='progress h-6px w-100'>
<div
className='progress-bar bg-primary'
role='progressbar'
style={{width: '70%'}}
></div>
</div>
</div>
</td>
<td className='text-end'>
<a href='#' className='btn btn-sm btn-icon btn-bg-light btn-active-color-primary'>
<KTIcon iconName='arrow-right' className='fs-2' />
</a>
</td>
</tr>
</tbody>
{/* end::Table body */}
</table>
{/* end::Table */}
</div>
{/* end::Table container */}
</div>
</div>
)
}
export {TablesWidget1}

Some files were not shown because too many files have changed in this diff Show More