first commit
154
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,154 @@
|
||||
name: Deploy to Cloudflare Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'deploy-*' # 只在推送 deploy-* 标签时触发
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: swr.cn-south-1.myhuaweicloud.com/bws/node:20.19.6-bookworm-slim-ci
|
||||
|
||||
steps:
|
||||
# 1. 拉取代码
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# 2. 设置 pnpm(使用 corepack,避免从 GitHub 拉取 action)
|
||||
- name: Setup pnpm
|
||||
run: |
|
||||
corepack enable
|
||||
corepack prepare pnpm@10.23.0 --activate
|
||||
pnpm --version
|
||||
|
||||
- name: Parse tag to env
|
||||
shell: bash
|
||||
run: |
|
||||
# 获取 tag 名称(Gitea Actions 使用 GITHUB_REF_NAME)
|
||||
TAG_NAME="${GITHUB_REF_NAME}"
|
||||
echo "TAG_NAME=$TAG_NAME"
|
||||
|
||||
# Tag 格式: deploy-{project_name}-{deploymentId_no_dashes}
|
||||
# 例如: deploy-b7ea026a-cf09-4e31-9f29-b55d7c652b71-123e4567e89b12d3a456426614174000
|
||||
|
||||
# 去掉 "deploy-" 前缀
|
||||
PREFIX="deploy-"
|
||||
REST="${TAG_NAME#$PREFIX}"
|
||||
|
||||
# deploymentId(无破折号)固定是最后32个字符
|
||||
DEPLOYMENT_ID="${REST: -32}"
|
||||
|
||||
# project_name 是剩余部分(去掉最后的 "-" 和 deploymentId)
|
||||
PROJECT_NAME="${REST%-${DEPLOYMENT_ID}}"
|
||||
|
||||
echo "PROJECT_NAME=$PROJECT_NAME" >> "$GITHUB_ENV"
|
||||
echo "DEPLOYMENT_ID=$DEPLOYMENT_ID" >> "$GITHUB_ENV"
|
||||
#echo "DOMAIN=${PROJECT_NAME}-preview.turingflowai.com" >> "$GITHUB_ENV"
|
||||
|
||||
# 调试输出
|
||||
echo "Parsed PROJECT_NAME: $PROJECT_NAME"
|
||||
echo "Parsed DEPLOYMENT_ID: $DEPLOYMENT_ID"
|
||||
|
||||
- name: Check toolchain (debug only, 可选)
|
||||
run: |
|
||||
node -v || echo "node not found"
|
||||
pnpm -v || echo "pnpm not found"
|
||||
curl --version || echo "curl not found"
|
||||
|
||||
- name: Use CN npm registry
|
||||
run: |
|
||||
pnpm config set registry http://repo.myhuaweicloud.com/repository/npm/
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm install --frozen-lockfile
|
||||
|
||||
- name: Build
|
||||
run: pnpm run build
|
||||
|
||||
- name: Deploy to Cloudflare Pages
|
||||
shell: bash
|
||||
env:
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
|
||||
PROJECT_NAME: ${{ env.PROJECT_NAME }}
|
||||
DOMAIN: ${{ env.DOMAIN }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
echo "[deploy] project: $PROJECT_NAME"
|
||||
#echo "[deploy] domain: $DOMAIN"
|
||||
|
||||
# 部署到 Cloudflare Pages (假定构建产物在 dist/)
|
||||
# 使用项目本地安装的 wrangler
|
||||
npx wrangler pages deploy dist \
|
||||
--project-name "$PROJECT_NAME" \
|
||||
--branch main
|
||||
|
||||
# 绑定自定义域名:<project_name>-preview.turingflowai.com
|
||||
#echo "[deploy] 正在绑定自定义域名..."
|
||||
#DOMAIN_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
|
||||
# "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/domains" \
|
||||
# -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \
|
||||
# -H "Content-Type: application/json" \
|
||||
# -d '{"name":"'"${DOMAIN}"'"}')
|
||||
|
||||
#HTTP_CODE=$(echo "$DOMAIN_RESPONSE" | tail -n1)
|
||||
#RESPONSE_BODY=$(echo "$DOMAIN_RESPONSE" | sed '$d')
|
||||
|
||||
#if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "409" ]; then
|
||||
# echo "[deploy] 域名绑定成功或已存在 (HTTP $HTTP_CODE)"
|
||||
#else
|
||||
# echo "[deploy] 警告: 域名绑定失败 (HTTP $HTTP_CODE)"
|
||||
# echo "[deploy] 响应: $RESPONSE_BODY"
|
||||
# echo "[deploy] 继续执行,但域名可能未绑定成功"
|
||||
#fi
|
||||
|
||||
- name: Notify Deploy Service (success)
|
||||
if: success()
|
||||
shell: bash
|
||||
env:
|
||||
DEPLOY_SERVICE_CALLBACK_URL: ${{ secrets.DEPLOY_SERVICE_CALLBACK_URL }}
|
||||
DEPLOY_SERVICE_TOKEN: ${{ secrets.DEPLOY_SERVICE_TOKEN }}
|
||||
DEPLOYMENT_ID: ${{ env.DEPLOYMENT_ID }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
# 获取当前 commit SHA (Gitea Actions 使用 GITHUB_SHA)
|
||||
COMMIT_SHA="${GITHUB_SHA}"
|
||||
|
||||
curl -X POST "$DEPLOY_SERVICE_CALLBACK_URL" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer $DEPLOY_SERVICE_TOKEN" \
|
||||
-d '{
|
||||
"deploymentId": "'"${DEPLOYMENT_ID}"'",
|
||||
"status": "deployed",
|
||||
"commitSha": "'"${COMMIT_SHA}"'",
|
||||
"cfDeploymentId": "",
|
||||
"errorMessage": null
|
||||
}'
|
||||
|
||||
- name: Notify Deploy Service (failure)
|
||||
if: failure()
|
||||
shell: bash
|
||||
env:
|
||||
DEPLOY_SERVICE_CALLBACK_URL: ${{ secrets.DEPLOY_SERVICE_CALLBACK_URL }}
|
||||
DEPLOY_SERVICE_TOKEN: ${{ secrets.DEPLOY_SERVICE_TOKEN }}
|
||||
DEPLOYMENT_ID: ${{ env.DEPLOYMENT_ID }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
# 获取当前 commit SHA
|
||||
COMMIT_SHA="${GITHUB_SHA}"
|
||||
|
||||
curl -X POST "$DEPLOY_SERVICE_CALLBACK_URL" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer $DEPLOY_SERVICE_TOKEN" \
|
||||
-d '{
|
||||
"deploymentId": "'"${DEPLOYMENT_ID}"'",
|
||||
"status": "failed",
|
||||
"commitSha": "'"${COMMIT_SHA}"'",
|
||||
"cfDeploymentId": "",
|
||||
"errorMessage": "see Gitea Actions logs"
|
||||
}'
|
||||
157
.gitignore
vendored
Normal file
@@ -0,0 +1,157 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# ===================
|
||||
# Dependencies
|
||||
# ===================
|
||||
node_modules/
|
||||
/.pnp
|
||||
.pnp.js
|
||||
.yarn/install-state.gz
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
pnpm-lock.yaml
|
||||
bun.lockb
|
||||
|
||||
# ===================
|
||||
# Next.js
|
||||
# ===================
|
||||
/.next/
|
||||
/out/
|
||||
/build/
|
||||
.next
|
||||
out
|
||||
|
||||
# ===================
|
||||
# Production
|
||||
# ===================
|
||||
/dist/
|
||||
*.min.js
|
||||
*.min.css
|
||||
|
||||
# ===================
|
||||
# Testing
|
||||
# ===================
|
||||
/coverage/
|
||||
.nyc_output
|
||||
*.lcov
|
||||
jest-results.json
|
||||
|
||||
# ===================
|
||||
# TypeScript
|
||||
# ===================
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
tsconfig.tsbuildinfo
|
||||
|
||||
# ===================
|
||||
# Environment Variables
|
||||
# ===================
|
||||
.env
|
||||
.env.*
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
!.env.example
|
||||
|
||||
# ===================
|
||||
# IDE & Editors
|
||||
# ===================
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
*.sublime-workspace
|
||||
*.sublime-project
|
||||
.project
|
||||
.classpath
|
||||
.c9/
|
||||
*.launch
|
||||
.settings/
|
||||
*.code-workspace
|
||||
|
||||
# ===================
|
||||
# OS Generated Files
|
||||
# ===================
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# ===================
|
||||
# Logs
|
||||
# ===================
|
||||
logs/
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
# ===================
|
||||
# Cache
|
||||
# ===================
|
||||
.cache/
|
||||
.parcel-cache/
|
||||
.eslintcache
|
||||
.stylelintcache
|
||||
*.cache
|
||||
.turbo/
|
||||
.pnpm-store/
|
||||
|
||||
# ===================
|
||||
# Vercel
|
||||
# ===================
|
||||
.vercel
|
||||
|
||||
# ===================
|
||||
# Debug
|
||||
# ===================
|
||||
*.pem
|
||||
*.key
|
||||
*.crt
|
||||
*.p12
|
||||
|
||||
# ===================
|
||||
# Misc
|
||||
# ===================
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
*.orig
|
||||
.temp/
|
||||
.tmp/
|
||||
tmp/
|
||||
temp/
|
||||
|
||||
# ===================
|
||||
# Storybook
|
||||
# ===================
|
||||
storybook-static/
|
||||
|
||||
# ===================
|
||||
# PWA
|
||||
# ===================
|
||||
public/sw.js
|
||||
public/workbox-*.js
|
||||
public/sw.js.map
|
||||
public/workbox-*.js.map
|
||||
|
||||
# ===================
|
||||
# Sentry
|
||||
# ===================
|
||||
.sentryclirc
|
||||
|
||||
# ===================
|
||||
# Docker
|
||||
# ===================
|
||||
docker-compose.override.yml
|
||||
406
README.md
Normal file
@@ -0,0 +1,406 @@
|
||||
# si-educational
|
||||
|
||||
在线教育平台着陆页模板,适用于教育机构、在线课程平台、培训中心展示课程和服务。
|
||||
|
||||
## 技术栈
|
||||
|
||||
- Next.js 15.5.9 (已锁定版本,App Router)
|
||||
- React 19.2.3 (已锁定版本,修复 CVE-2025-55182 漏洞)
|
||||
- TypeScript 5
|
||||
- Tailwind CSS 4
|
||||
- next-auth (身份认证)
|
||||
- next-themes (深色/浅色主题切换)
|
||||
- Framer Motion (高级动画)
|
||||
- AOS (滚动动画)
|
||||
- react-slick (轮播组件)
|
||||
- @headlessui/react (无头 UI 组件)
|
||||
- @iconify/react (图标库)
|
||||
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## 目录结构
|
||||
|
||||
```text
|
||||
src/
|
||||
├── app/ # Next.js App Router 入口
|
||||
│ ├── layout.tsx # 根布局 (Header + Footer + 主题Provider)
|
||||
│ ├── page.tsx # 首页 (Hero + 课程 + 导师 + 评价)
|
||||
│ ├── not-found.tsx # 404 页面
|
||||
│ ├── globals.css # 全局样式 + Tailwind 主题变量
|
||||
│ ├── (site)/ # 路由分组 (共享布局)
|
||||
│ │ ├── (auth)/ # 认证路由组
|
||||
│ │ │ ├── signin/page.tsx # 登录页面
|
||||
│ │ │ └── signup/page.tsx # 注册页面
|
||||
│ │ └── documentation/page.tsx # 文档页面
|
||||
│ ├── api/ # API 路由
|
||||
│ │ ├── auth/[...nextauth]/route.ts # NextAuth 认证 API
|
||||
│ │ └── data/route.ts # 静态数据 API (菜单、课程、导师)
|
||||
│ ├── components/ # 可复用组件
|
||||
│ │ ├── Layout/ # 布局组件
|
||||
│ │ │ ├── Header/index.tsx # 导航栏 (Logo + 菜单 + 主题切换)
|
||||
│ │ │ │ ├── Logo/index.tsx # Logo 组件
|
||||
│ │ │ │ ├── ThemeToggler.tsx # 主题切换按钮
|
||||
│ │ │ │ └── Navigation/ # 导航链接
|
||||
│ │ │ │ ├── HeaderLink.tsx # 桌面导航
|
||||
│ │ │ │ └── MobileHeaderLink.tsx # 移动导航
|
||||
│ │ │ └── Footer/index.tsx # 页脚
|
||||
│ │ ├── Home/ # 首页专用组件
|
||||
│ │ │ ├── Hero/index.tsx # Hero 区域 (主标题 + 下拉选择器)
|
||||
│ │ │ │ ├── Dropdownone.tsx # 课程类型选择
|
||||
│ │ │ │ └── Dropdowntwo.tsx # 学习时长选择
|
||||
│ │ │ ├── Companies/index.tsx # 公司 Logo 轮播
|
||||
│ │ │ ├── Courses/index.tsx # 课程列表 (分类过滤)
|
||||
│ │ │ ├── Mentor/index.tsx # 导师卡片网格
|
||||
│ │ │ ├── Testimonial/index.tsx # 学生评价轮播
|
||||
│ │ │ └── Newsletter/index.tsx # 邮件订阅区
|
||||
│ │ ├── Auth/ # 认证相关组件
|
||||
│ │ │ ├── SignIn/index.tsx # 登录表单
|
||||
│ │ │ ├── SignUp/index.tsx # 注册表单
|
||||
│ │ │ ├── ForgotPassword/index.tsx # 忘记密码
|
||||
│ │ │ ├── MagicLink/index.tsx # 魔法链接登录
|
||||
│ │ │ ├── ResetPassword/index.tsx # 重置密码
|
||||
│ │ │ ├── SocialSignIn.tsx # 社交登录按钮
|
||||
│ │ │ └── SocialSignUp.tsx # 社交注册按钮
|
||||
│ │ ├── Contact/ # 联系表单
|
||||
│ │ │ └── Form/index.tsx
|
||||
│ │ ├── Documentation/ # 文档相关组件
|
||||
│ │ │ ├── Documentation.tsx # 主文档组件
|
||||
│ │ │ ├── Introduction.tsx # 介绍
|
||||
│ │ │ ├── QuickStart.tsx # 快速开始
|
||||
│ │ │ ├── Configuration.tsx # 配置说明
|
||||
│ │ │ ├── ColorConfiguraion.tsx # 颜色配置
|
||||
│ │ │ ├── TypographyConfiguration.tsx # 字体配置
|
||||
│ │ │ ├── LogoConfiguration.tsx # Logo 配置
|
||||
│ │ │ ├── PackageStructure.tsx # 包结构说明
|
||||
│ │ │ └── DocNavigation.tsx # 文档侧边导航
|
||||
│ │ ├── Common/ # 通用组件
|
||||
│ │ │ ├── Breadcrumb.tsx # 面包屑
|
||||
│ │ │ ├── Loader.tsx # 加载动画
|
||||
│ │ │ ├── PreLoader.tsx # 页面预加载
|
||||
│ │ │ └── ScrollUp.tsx # 回到顶部按钮
|
||||
│ │ ├── Skeleton/ # 骨架屏组件
|
||||
│ │ │ ├── CourseDetail/index.tsx # 课程加载骨架
|
||||
│ │ │ ├── Mentor/index.tsx # 导师加载骨架
|
||||
│ │ │ └── Testimonial/index.tsx # 评价加载骨架
|
||||
│ │ ├── SharedComponent/ # 共享组件
|
||||
│ │ │ ├── HeroSub/index.tsx # 子页面 Hero
|
||||
│ │ │ └── Volunteer/index.tsx # 志愿者组件
|
||||
│ │ ├── Breadcrumb/index.tsx # 面包屑导航
|
||||
│ │ ├── NotFound/index.tsx # 404 组件
|
||||
│ │ └── ScrollToTop/index.tsx # 滚动到顶部
|
||||
│ └── types/ # TypeScript 类型定义
|
||||
│ ├── blog.ts # 博客类型
|
||||
│ ├── breadcrumb.ts # 面包屑类型
|
||||
│ ├── course.ts # 课程分类类型
|
||||
│ ├── coursedetail.ts # 课程详情类型
|
||||
│ ├── footerlinks.ts # 页脚链接类型
|
||||
│ ├── hour.ts # 学习时长类型
|
||||
│ ├── menu.ts # 菜单类型
|
||||
│ ├── mentor.ts # 导师类型
|
||||
│ └── testimonial.ts # 评价类型
|
||||
├── utils/ # 工具函数
|
||||
│ ├── aos.tsx # AOS 动画初始化
|
||||
│ └── validateEmail.ts # 邮箱验证
|
||||
|
||||
public/ # 静态资源
|
||||
└── images/
|
||||
├── logo/ # Logo 图片
|
||||
├── banner/ # Hero 区域背景
|
||||
├── courses/ # 课程卡片图片
|
||||
├── mentor/ # 导师头像
|
||||
├── testimonial/ # 评价用户头像
|
||||
├── slickCompany/ # 公司 Logo 轮播
|
||||
├── newsletter/ # 新闻订阅图片
|
||||
├── documentation/ # 文档图片
|
||||
└── 404-*.svg # 404 页面图片
|
||||
```
|
||||
|
||||
## 路由配置
|
||||
|
||||
| 路径 | 页面 | 说明 |
|
||||
|------|------|------|
|
||||
| `/` | Home | 首页 (Hero + 公司轮播 + 课程 + 导师 + 评价 + 订阅) |
|
||||
| `/signin` | SignIn | 登录页面 |
|
||||
| `/signup` | SignUp | 注册页面 |
|
||||
| `/documentation` | Documentation | 模板文档 |
|
||||
|
||||
## API 路由
|
||||
|
||||
| 端点 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| `/api/data` | GET | 获取所有前端数据 (导航、课程、导师、评价) |
|
||||
| `/api/auth/*` | - | NextAuth 认证端点 |
|
||||
| `/api/register` | POST | 用户注册 |
|
||||
|
||||
## 数据结构
|
||||
|
||||
### 导航菜单数据 (src/app/api/data/route.ts)
|
||||
|
||||
```typescript
|
||||
const HeaderData = [
|
||||
{
|
||||
label: 'Home',
|
||||
href: '/',
|
||||
},
|
||||
{
|
||||
label: 'Pages',
|
||||
href: '#',
|
||||
submenu: [
|
||||
{ label: 'Sign In', href: '/signin' },
|
||||
{ label: 'Sign Up', href: '/signup' },
|
||||
]
|
||||
},
|
||||
// ...
|
||||
];
|
||||
```
|
||||
|
||||
### 课程数据 (src/app/api/data/route.ts)
|
||||
|
||||
```typescript
|
||||
const CourseDetailData = [
|
||||
{
|
||||
course: 'HTML, CSS & Javascript Course for Web Developers',
|
||||
imageSrc: '/images/courses/courses1.svg',
|
||||
profession: 'Web Development',
|
||||
price: '$70.00',
|
||||
category: 'webdevelopment' // 用于分类过滤
|
||||
},
|
||||
// ...
|
||||
];
|
||||
|
||||
// 课程分类
|
||||
const CourseData = [
|
||||
{ name: 'Web Development' },
|
||||
{ name: 'Mobile Development' },
|
||||
{ name: 'Data Science' },
|
||||
{ name: 'Cloud Computing' },
|
||||
];
|
||||
```
|
||||
|
||||
### 导师数据 (src/app/api/data/route.ts)
|
||||
|
||||
```typescript
|
||||
const MentorData = [
|
||||
{
|
||||
name: 'Brooklyn Simmons',
|
||||
href: '#',
|
||||
imageSrc: '/images/mentor/mentor1.svg',
|
||||
imageAlt: 'Brooklyn Simmons',
|
||||
color: 'bg-success' // 颜色标签
|
||||
},
|
||||
// ...
|
||||
];
|
||||
```
|
||||
|
||||
### 评价数据 (src/app/api/data/route.ts)
|
||||
|
||||
```typescript
|
||||
const TestimonialData = [
|
||||
{
|
||||
profession: 'UI/UX Designer',
|
||||
name: 'Robert Fox',
|
||||
imgSrc: '/images/testimonial/testimonial1.svg',
|
||||
starimg: '/images/testimonial/stars.svg',
|
||||
detail: '评价内容...'
|
||||
},
|
||||
// ...
|
||||
];
|
||||
```
|
||||
|
||||
### 类型定义
|
||||
|
||||
```typescript
|
||||
// src/app/types/coursedetail.ts
|
||||
type CourseDetailType = {
|
||||
course: string;
|
||||
imageSrc: string;
|
||||
profession: string;
|
||||
price: string;
|
||||
category: 'mobiledevelopment' | 'webdevelopment' | 'datascience' | 'cloudcomputing';
|
||||
};
|
||||
|
||||
// src/app/types/mentor.ts
|
||||
type MentorType = {
|
||||
name: string;
|
||||
href: string;
|
||||
imageSrc: string;
|
||||
imageAlt: string;
|
||||
color: string;
|
||||
};
|
||||
|
||||
// src/app/types/testimonial.ts
|
||||
type TestimonialType = {
|
||||
profession: string;
|
||||
name: string;
|
||||
imgSrc: string;
|
||||
starimg: string;
|
||||
detail: string;
|
||||
};
|
||||
|
||||
// src/app/types/menu.ts
|
||||
type HeaderItem = {
|
||||
label: string;
|
||||
href: string;
|
||||
submenu?: SubmenuItem[];
|
||||
};
|
||||
```
|
||||
|
||||
## 核心组件说明
|
||||
|
||||
### 布局系统
|
||||
|
||||
- `RootLayout` (src/app/layout.tsx): 根布局,包含主题Provider、认证Provider、Header和Footer
|
||||
- 使用 `next-themes` 实现深色/浅色模式切换
|
||||
- 使用 `next-auth` 实现用户认证
|
||||
|
||||
### 主题切换
|
||||
|
||||
主题通过 `next-themes` 的 `ThemeProvider` 管理,支持:
|
||||
|
||||
- `light` - 浅色主题
|
||||
- `dark` - 深色主题
|
||||
- `system` - 跟随系统
|
||||
|
||||
### 主题颜色 (src/app/globals.css)
|
||||
|
||||
```css
|
||||
--color-primary: #611f69; /* 紫色 - 主色 */
|
||||
--color-cream: #fcf5ef; /* 奶油色 - 背景 */
|
||||
--color-success: #6b9f36; /* 绿色 - 成功状态 */
|
||||
--color-orange: #f9cd92; /* 橙色 - 强调 */
|
||||
```
|
||||
|
||||
### 动画效果
|
||||
|
||||
- **AOS (Animate On Scroll)**: 在 `src/utils/aos.tsx` 初始化,页面滚动时的进入动画
|
||||
- **Framer Motion**: 高级动画库,支持复杂过渡效果
|
||||
- **react-slick**: 轮播组件动画
|
||||
|
||||
### 认证系统
|
||||
|
||||
使用 `next-auth` v4,配置文件位于 `src/app/api/auth/[...nextauth]/route.ts`。
|
||||
|
||||
启用社交登录需要:
|
||||
|
||||
1. 在 `.env.local` 中配置环境变量:
|
||||
|
||||
```bash
|
||||
NEXTAUTH_SECRET=your-secret-key
|
||||
NEXTAUTH_URL=http://localhost:3000
|
||||
|
||||
# Google 登录
|
||||
GOOGLE_CLIENT_ID=your-google-client-id
|
||||
GOOGLE_CLIENT_SECRET=your-google-client-secret
|
||||
|
||||
# GitHub 登录
|
||||
GITHUB_ID=your-github-id
|
||||
GITHUB_SECRET=your-github-secret
|
||||
```
|
||||
|
||||
2. 在 `route.ts` 中取消对应 provider 的注释
|
||||
|
||||
### 数据获取模式
|
||||
|
||||
所有页面数据从 `/api/data` 集中获取:
|
||||
|
||||
```typescript
|
||||
// 组件中的数据获取示例
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
const res = await fetch('/api/data');
|
||||
const data = await res.json();
|
||||
setCourses(data.CourseDetailData);
|
||||
};
|
||||
fetchData();
|
||||
}, []);
|
||||
```
|
||||
|
||||
## 常见修改任务
|
||||
|
||||
### 修改网站信息
|
||||
|
||||
1. 修改 `src/app/components/Layout/Header/Logo/index.tsx` 中的 Logo
|
||||
2. 修改 `src/app/components/Layout/Footer/index.tsx` 中的版权信息
|
||||
3. 修改 `src/app/layout.tsx` 中的 metadata
|
||||
|
||||
### 修改导航菜单
|
||||
|
||||
编辑 `src/app/api/data/route.ts` 中的 `HeaderData` 数组
|
||||
|
||||
### 添加新页面
|
||||
|
||||
1. 在 `src/app/(site)/` 目录下创建新文件夹和 `page.tsx`
|
||||
2. 在 `HeaderData` 中添加导航项
|
||||
|
||||
### 修改样式主题
|
||||
|
||||
1. 编辑 `src/app/globals.css` 中的 CSS 变量
|
||||
2. 主要颜色: `--color-primary`, `--color-cream`, `--color-success`, `--color-orange`
|
||||
|
||||
### 修改课程/导师/评价数据
|
||||
|
||||
编辑 `src/app/api/data/route.ts` 中对应的数据数组:
|
||||
- `CourseDetailData` - 课程列表
|
||||
- `MentorData` - 导师列表
|
||||
- `TestimonialData` - 评价列表
|
||||
- `CourseData` - 课程分类
|
||||
|
||||
### 添加新的课程分类
|
||||
|
||||
1. 在 `CourseData` 添加新分类
|
||||
2. 在 `CourseDetailType` 类型中添加新的 category 值
|
||||
3. 在课程数据中使用新分类
|
||||
|
||||
## 组件使用示例
|
||||
|
||||
### 课程列表组件 (Courses)
|
||||
|
||||
```tsx
|
||||
// 支持分类过滤
|
||||
const categories = ['webdevelopment', 'mobiledevelopment', 'datascience', 'cloudcomputing'];
|
||||
|
||||
// 过滤逻辑
|
||||
const filteredCourses = courses.filter(
|
||||
course => selectedCategory === 'all' || course.category === selectedCategory
|
||||
);
|
||||
```
|
||||
|
||||
### 轮播组件 (Companies/Testimonial)
|
||||
|
||||
```tsx
|
||||
// react-slick 配置
|
||||
const settings = {
|
||||
dots: false,
|
||||
infinite: true,
|
||||
slidesToShow: 4,
|
||||
slidesToScroll: 1,
|
||||
autoplay: true,
|
||||
autoplaySpeed: 2000,
|
||||
responsive: [
|
||||
{ breakpoint: 1024, settings: { slidesToShow: 3 } },
|
||||
{ breakpoint: 768, settings: { slidesToShow: 2 } },
|
||||
]
|
||||
};
|
||||
```
|
||||
|
||||
## 图片资源
|
||||
|
||||
- 存放在 `public/images/` 目录
|
||||
- 引用路径:`/images/xxx.svg`
|
||||
- 课程图片:`/images/courses/`
|
||||
- 导师头像:`/images/mentor/`
|
||||
- 评价头像:`/images/testimonial/`
|
||||
|
||||
## 安全说明
|
||||
|
||||
以下依赖版本已锁定以修复安全漏洞:
|
||||
|
||||
- **Next.js 15.5.9** - 锁定版本,修复漏洞编号为:CVE-2025-66478
|
||||
- **React 19.2.3** - 修复 React Server Components 远程代码执行漏洞 (CVE-2025-55182)
|
||||
|
||||
请勿使用 `^` 或 `~` 前缀以避免自动升级到有漏洞的版本。
|
||||
16
eslint.config.mjs
Normal file
@@ -0,0 +1,16 @@
|
||||
import { dirname } from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
import { FlatCompat } from "@eslint/eslintrc";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname,
|
||||
});
|
||||
|
||||
const eslintConfig = [
|
||||
...compat.extends("next/core-web-vitals", "next/typescript"),
|
||||
];
|
||||
|
||||
export default eslintConfig;
|
||||
14
next.config.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import type { NextConfig } from 'next'
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
eslint: {
|
||||
ignoreDuringBuilds: true,
|
||||
},
|
||||
images: {
|
||||
unoptimized: true,
|
||||
},
|
||||
// 允许所有来源访问开发服务器
|
||||
allowedDevOrigins: ['*'],
|
||||
}
|
||||
|
||||
export default nextConfig
|
||||
44
package.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "sieducational_project",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev --turbopack -H 0.0.0.0 -p 3000",
|
||||
"build": "next build",
|
||||
"start": "next start -H 0.0.0.0 -p 3000",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@headlessui/react": "^2.2.0",
|
||||
"@iconify/icons-ion": "^1.2.10",
|
||||
"@iconify/react": "^5.2.1",
|
||||
"aos": "^2.3.4",
|
||||
"axios": "^1.8.4",
|
||||
"date-fns": "^4.1.0",
|
||||
"framer-motion": "^12.6.3",
|
||||
"gray-matter": "^4.0.3",
|
||||
"next": "15.5.9",
|
||||
"next-auth": "^4.24.11",
|
||||
"next-themes": "^0.4.6",
|
||||
"react": "19.2.3",
|
||||
"react-dom": "19.2.3",
|
||||
"react-hot-toast": "^2.5.2",
|
||||
"react-slick": "^0.30.3",
|
||||
"remark": "^15.0.1",
|
||||
"remark-html": "^16.0.1",
|
||||
"slick-carousel": "^1.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/eslintrc": "^3",
|
||||
"@tailwindcss/postcss": "^4",
|
||||
"@types/aos": "^3.0.7",
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"@types/react-slick": "^0.23.13",
|
||||
"eslint": "^9",
|
||||
"eslint-config-next": "15.5.9",
|
||||
"tailwindcss": "^4",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
5
postcss.config.mjs
Normal file
@@ -0,0 +1,5 @@
|
||||
const config = {
|
||||
plugins: ["@tailwindcss/postcss"],
|
||||
};
|
||||
|
||||
export default config;
|
||||
9
public/images/404-dark.svg
Normal file
|
After Width: | Height: | Size: 39 KiB |
66
public/images/404.svg
Normal file
@@ -0,0 +1,66 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="199" height="286" viewBox="0 0 199 286" fill="none">
|
||||
<path opacity="0.42" d="M112.923 285.703C154.831 285.703 188.805 278.705 188.805 270.072C188.805 261.439 154.831 254.441 112.923 254.441C71.0145 254.441 37.041 261.439 37.041 270.072C37.041 278.705 71.0145 285.703 112.923 285.703Z" fill="#14143F"/>
|
||||
<path d="M132.906 250.678C137.913 249.568 142.883 248.147 147.839 246.509L146.001 202.517C142.231 202.734 138.436 203.366 134.735 204.389L132.906 250.678Z" fill="#2196f3"/>
|
||||
<path d="M135.726 179.315L134.735 204.389C138.436 203.367 142.231 202.735 146.001 202.517L145.201 183.362C145.201 183.362 144.365 176.151 135.726 179.315Z" fill="#177bcf"/>
|
||||
<path d="M176.152 259.949C176.152 259.949 181.567 261.342 182.682 263.99C182.682 263.99 182.125 245.876 148.127 253.4L147.839 246.508C142.883 248.145 137.913 249.566 132.906 250.677L132.661 256.883C132.661 256.883 132.034 262.108 141.021 265.243C150.008 268.378 173.245 282.172 176.571 276.32C179.896 270.468 175.88 264.616 162.944 264.825C162.944 264.825 172.961 263.292 177.683 269.562C177.683 269.562 181.429 269.423 181.847 265.661C182.264 261.9 176.152 259.949 176.152 259.949Z" fill="#60e0fc"/>
|
||||
<path d="M148.127 253.401C148.127 253.401 162.862 247.166 166.937 250.092C171.013 253.018 159.517 254.481 159.517 254.481C159.517 254.481 167.25 251.973 168.609 255.839C169.968 259.706 157.666 258.765 157.666 258.765C157.666 258.765 165.892 259.705 162.234 262.214C158.576 264.722 134.75 265.035 132.66 256.884L133.234 242.356L147.635 241.643L148.127 253.401Z" fill="#2196f3"/>
|
||||
<path d="M162.944 264.826C162.944 264.826 176.15 263.731 177.5 271.071C177.5 271.071 181.39 263.009 162.944 264.826Z" fill="#2196f3"/>
|
||||
<path d="M181.779 264.56C181.779 264.56 180.522 260.751 171.43 258.243C171.43 258.243 185.824 260.588 181.779 264.56Z" fill="#2196f3"/>
|
||||
<path d="M96.993 250.678C91.986 249.568 87.016 248.147 82.06 246.509L83.898 202.517C87.668 202.734 91.463 203.366 95.164 204.389L96.993 250.678Z" fill="#2196f3"/>
|
||||
<path d="M94.173 179.315L95.164 204.389C91.463 203.367 87.668 202.735 83.898 202.517L84.698 183.362C84.698 183.362 85.535 176.151 94.173 179.315Z" fill="#177bcf"/>
|
||||
<path d="M53.747 259.949C53.747 259.949 48.332 261.342 47.217 263.99C47.217 263.99 47.774 245.876 81.772 253.4L82.06 246.508C87.016 248.145 91.986 249.566 96.993 250.677L97.238 256.883C97.238 256.883 97.865 262.108 88.878 265.243C79.891 268.378 56.654 282.172 53.329 276.32C50.004 270.468 54.02 264.616 66.956 264.825C66.956 264.825 56.939 263.292 52.217 269.562C52.217 269.562 48.471 269.423 48.053 265.661C47.635 261.9 53.747 259.949 53.747 259.949Z" fill="#60e0fc"/>
|
||||
<path d="M81.772 253.401C81.772 253.401 67.037 247.166 62.962 250.092C58.886 253.018 70.382 254.481 70.382 254.481C70.382 254.481 62.649 251.973 61.29 255.839C59.931 259.706 72.233 258.765 72.233 258.765C72.233 258.765 64.007 259.705 67.665 262.214C71.323 264.722 95.149 265.035 97.239 256.884L96.665 242.356L82.264 241.643L81.772 253.401Z" fill="#2196f3"/>
|
||||
<path d="M66.956 264.826C66.956 264.826 53.75 263.731 52.4 271.071C52.4 271.071 48.509 263.009 66.956 264.826Z" fill="#2196f3"/>
|
||||
<path d="M48.12 264.56C48.12 264.56 49.377 260.751 58.469 258.243C58.469 258.243 44.075 260.588 48.12 264.56Z" fill="#2196f3"/>
|
||||
<path d="M2.58002 201.148L37.051 195.537C37.051 195.537 37.297 193.988 37.337 192.145C25.033 193.66 12.733 195.148 0.528015 197.489C0.791015 198.728 1.38902 200.011 2.58002 201.148Z" fill="#9E4C15"/>
|
||||
<path d="M34.241 186.118L1.14102 191.974C1.14102 191.974 0.75002 192.818 0.52002 194.072C12.885 192.822 25.003 190.832 37.041 188.6C36.661 187 35.854 185.832 34.241 186.118Z" fill="#CE7132"/>
|
||||
<path d="M0.520011 194.071C0.344011 195.034 0.26201 196.239 0.52801 197.489C12.732 195.148 25.033 193.659 37.337 192.145C37.362 190.974 37.3 189.688 37.042 188.599C25.003 190.831 12.885 192.821 0.520011 194.071Z" fill="#B75D21"/>
|
||||
<path d="M73.766 75.337C67.303 78.867 49.436 90.465 39.354 115.129C53.657 104.281 65.954 91.133 73.766 75.337Z" fill="#2189f3"/>
|
||||
<path d="M39.354 115.129C35.042 125.676 32.151 138.607 32.19 154.326C32.19 154.326 31.692 191.857 38.595 197.517C38.595 197.517 40.42 198.28 42.16 197.211C42.16 197.211 44.495 197.809 46.534 195.572C46.534 195.572 50.557 197.034 52.877 193.748C52.877 193.748 49.744 184.051 54.883 182.165C54.883 182.165 56.136 178.716 52.022 177.847C52.022 177.847 42.094 132.3 64.602 111.949L76.185 74.117C76.185 74.117 75.293 74.502 73.766 75.336C65.954 91.133 53.657 104.281 39.354 115.129Z" fill="#2196f3"/>
|
||||
<path d="M47.589 195.818C47.589 195.818 46.205 196.066 45.845 193.008C45.845 193.008 44.95 195.965 47.589 195.818Z" fill="#3f51b5"/>
|
||||
<path d="M42.159 197.211C42.159 197.211 41.078 197.191 40.268 193.862C40.268 193.862 39.957 196.692 42.159 197.211Z" fill="#3f51b5"/>
|
||||
<path d="M64.602 111.949C64.602 111.949 48.641 119.359 44.043 149.247C39.445 179.135 50.364 180.64 50.364 180.64L52.022 177.847C52.022 177.847 41.85 141.198 64.602 111.949Z" fill="#3f51b5"/>
|
||||
<path d="M156.561 75.337C163.024 78.867 180.891 90.465 190.973 115.129C176.671 104.281 164.374 91.133 156.561 75.337Z" fill="#2189f3"/>
|
||||
<path d="M178.306 177.847C178.306 177.847 188.234 132.3 165.726 111.949L154.143 74.117C154.143 74.117 155.035 74.502 156.562 75.336C164.374 91.133 176.671 104.28 190.974 115.128C195.286 125.675 198.177 138.606 198.138 154.325C198.138 154.325 198.845 186.518 192.575 195.436C192.575 195.436 186.784 204.911 181.598 204.354C176.412 203.797 183.518 196.83 182.821 195.158C182.124 193.486 178.362 204.215 174.182 203.379C170.002 202.543 180.173 190.024 178.501 188.69C176.829 187.356 174.739 196.552 170.002 196.273C165.265 195.994 177.413 181.018 178.306 177.847Z" fill="#2196f3"/>
|
||||
<path d="M165.725 111.949C165.725 111.949 181.686 119.359 186.284 149.247C190.882 179.135 179.963 180.64 179.963 180.64L178.305 177.847C178.305 177.847 188.477 141.198 165.725 111.949Z" fill="#3f51b5"/>
|
||||
<path d="M80.395 24.025C80.395 24.025 74.648 21.866 74.018 18.448C74.018 18.448 77.976 8.464 72.579 2.797C67.182 -2.87 56.299 4.956 56.029 13.411C56.029 13.411 49.913 17.189 44.426 9.903C44.426 9.903 40.918 23.305 57.378 28.432C57.378 28.432 63.69 40.845 76.185 43.813C76.185 43.813 75.798 30.771 80.395 24.025Z" fill="#60e0fc"/>
|
||||
<path d="M84.668 22.048C84.668 22.048 80.524 19.228 78.485 24.969C76.446 30.71 72.804 46.458 78.283 48.307C83.762 50.157 86.893 23.942 84.668 22.048Z" fill="#3f51b5"/>
|
||||
<path d="M70.78 8.914C70.78 8.914 72.164 19.785 79.163 23.479C79.163 23.479 70.6 21.327 70.78 8.914Z" fill="#2196f3"/>
|
||||
<path d="M56.303 11.344C56.303 11.344 52.97 21.957 58.497 30.322C58.497 30.322 55.59 23.8 56.303 11.344Z" fill="#2196f3"/>
|
||||
<path d="M148.97 24.025C148.97 24.025 154.717 21.866 155.347 18.448C155.347 18.448 151.389 8.464 156.786 2.797C162.183 -2.87 173.066 4.956 173.336 13.411C173.336 13.411 179.452 17.189 184.939 9.903C184.939 9.903 188.447 23.305 171.987 28.432C171.987 28.432 165.675 40.845 153.18 43.813C153.18 43.813 153.567 30.771 148.97 24.025Z" fill="#60e0fc"/>
|
||||
<path d="M144.697 22.048C144.697 22.048 148.841 19.228 150.879 24.969C152.917 30.71 156.56 46.458 151.081 48.307C145.603 50.157 142.472 23.942 144.697 22.048Z" fill="#3f51b5"/>
|
||||
<path d="M158.585 8.914C158.585 8.914 157.201 19.785 150.202 23.479C150.202 23.479 158.765 21.327 158.585 8.914Z" fill="#2196f3"/>
|
||||
<path d="M173.062 11.344C173.062 11.344 176.394 21.957 170.868 30.322C170.868 30.322 173.775 23.8 173.062 11.344Z" fill="#2196f3"/>
|
||||
<path d="M154.028 74.221L115.231 78.072L76.363 74.221C76.363 74.221 45.745 102.849 51.022 149.382C55.356 187.596 99.563 190.383 115.231 190.159C130.899 190.384 175.107 187.596 179.44 149.382C184.717 102.849 154.028 74.221 154.028 74.221Z" fill="#2196f3"/>
|
||||
<path d="M150.466 64.591L150.439 64.605C150.986 62.347 151.283 59.995 151.283 57.576V40.306C151.283 31.46 147.406 23.479 141.27 17.968C141.185 18.045 141.106 18.125 141.02 18.201C124.918 31.375 101.127 33.015 85.915 20.317C81.152 25.636 78.245 32.646 78.245 40.305V57.575C78.245 60.054 78.555 62.463 79.128 64.771C78.111 65.19 76.453 66.579 76.206 71.187C75.846 77.903 79.924 80.422 79.924 80.422C79.924 80.422 93.596 92.175 114.763 91.335V87.617H115.625V91.335C136.793 92.174 150.465 80.422 150.465 80.422C150.465 80.422 154.543 77.903 154.183 71.187C153.824 64.471 150.466 64.591 150.466 64.591Z" fill="#2196f3"/>
|
||||
<path d="M141.021 18.201C141.107 18.125 141.186 18.044 141.271 17.968C135.945 13.185 128.919 10.264 121.241 10.264H118.474C119.568 8.46101 120.316 6.08801 117.583 5.10701C113.103 3.49901 113.574 7.02501 113.622 7.32601C113.567 6.99501 112.827 2.72301 110.867 3.06901C108.828 3.42901 110.028 7.26701 110.028 7.26701C110.028 7.26701 102.233 -0.767992 102.233 3.30901C102.233 5.67701 105.145 8.40801 107.587 10.283C99.004 10.483 91.282 14.327 85.917 20.319C101.128 33.015 124.919 31.375 141.021 18.201Z" fill="#3f51b5"/>
|
||||
<path d="M79.129 64.771C79.129 64.771 90.932 75.984 115.231 75.984C139.53 75.984 150.466 64.591 150.466 64.591C150.466 64.591 143.581 75.984 115.231 77.184C86.881 78.383 79.129 64.771 79.129 64.771Z" fill="#3f51b5"/>
|
||||
<path d="M79.129 77.439C79.129 77.439 90.932 88.652 115.231 88.652C139.53 88.652 150.466 77.259 150.466 77.259C150.466 77.259 143.581 88.652 115.231 89.852C86.881 91.051 79.129 77.439 79.129 77.439Z" fill="#3f51b5"/>
|
||||
<path d="M115.164 180.64C139.268 180.64 158.809 162.474 158.809 140.065C158.809 117.656 139.268 99.49 115.164 99.49C91.0595 99.49 71.519 117.656 71.519 140.065C71.519 162.474 91.0595 180.64 115.164 180.64Z" fill="#60e0fc"/>
|
||||
<path opacity="0.4" d="M174.142 106.264C167.672 123.519 155.967 138.769 140.129 150.221C115.756 167.593 88.019 172.445 59.881 170.972C74.667 188.742 103.268 190.329 115.231 190.158C130.899 190.383 175.107 187.595 179.44 149.381C181.358 132.472 178.525 117.93 174.142 106.264Z" fill="#3f51b5"/>
|
||||
<path d="M108.207 96.578C108.207 96.578 89.397 107.466 98.175 111.95C106.953 116.434 110.715 104.264 110.715 104.264C110.715 104.264 107.162 111.54 110.715 112.942C114.268 114.344 117.612 104.76 117.612 104.76C117.612 104.76 116.567 109.955 123.046 110.164C129.525 110.373 124.3 97.624 124.3 97.624C124.3 97.624 115.94 92.816 108.207 96.578Z" fill="#2196f3"/>
|
||||
<path d="M69.018 82.668C72.034 78.617 74.191 76.478 74.191 76.478C72.353 78.137 70.629 80.242 69.018 82.668Z" fill="#3f51b5"/>
|
||||
<path d="M48.777 144.866C48.777 144.866 54.5 104.786 67.384 85.391C60.12 95.149 47.872 116.01 48.777 144.866Z" fill="#3f51b5"/>
|
||||
<path d="M181.55 144.866C181.55 144.866 175.827 104.786 162.943 85.391C170.208 95.149 182.455 116.01 181.55 144.866Z" fill="#3f51b5"/>
|
||||
<path d="M96.305 215L83.711 188.69H81.309L96.305 215Z" fill="#878787"/>
|
||||
<path d="M83.892 165.649C83.892 165.649 80.824 169.741 81.309 178.429L80.033 178.673C80.033 178.673 78.615 170.506 83.892 165.649Z" fill="#878787"/>
|
||||
<path d="M51.965 190.272C52.149 191.298 52.443 192.451 52.876 193.748L65.273 191.254C65.273 191.254 64.754 190.21 64.395 188.406C60.257 189.094 56.113 189.705 51.965 190.272Z" fill="#9E4C15"/>
|
||||
<path d="M64.553 180.64L54.882 182.164C54.882 182.164 52.618 182.64 51.922 185.748C55.992 184.951 60.061 184.15 64.134 183.362C64.206 182.504 64.334 181.599 64.553 180.64Z" fill="#CE7132"/>
|
||||
<path d="M64.134 183.362C60.061 184.15 55.992 184.951 51.922 185.748C51.669 186.876 51.618 188.342 51.964 190.271C56.112 189.705 60.257 189.093 64.394 188.405C64.133 187.094 63.964 185.374 64.134 183.362Z" fill="#B75D21"/>
|
||||
<path d="M58.887 167.868C58.887 167.868 64.374 171.49 64.554 180.64C64.554 180.64 62.935 185.677 65.274 191.254C65.274 191.254 70.491 206.725 62.081 216.079C62.081 216.079 79.935 223.815 96.306 215L82.094 190.169C82.094 190.169 78.199 184.27 80.238 178.634C80.238 178.634 78.616 170.926 83.893 165.649C83.893 165.649 71.539 162.531 58.887 167.868Z" fill="#BCBCBC"/>
|
||||
<path d="M80.033 178.673L86.051 177.522C86.051 177.522 85.211 179.321 86.051 181.12L84.192 181.78L86.051 181.96C86.051 181.96 85.991 185.678 87.91 187.777L81.54 189.163C81.54 189.163 78.272 184.321 80.033 178.673Z" fill="#B75D21"/>
|
||||
<path d="M89.233 182.345C89.641 185.192 88.895 187.655 87.566 187.845C86.237 188.035 84.829 185.882 84.421 183.035C84.013 180.188 84.759 177.725 86.088 177.535C87.417 177.344 88.825 179.497 89.233 182.345Z" fill="#CC7236"/>
|
||||
<path d="M62.08 216.079C62.08 216.079 64.941 213.015 66.353 207.256C66.353 207.256 72.622 211.007 79.86 209.962L81.876 214.999V209.962C81.876 209.962 88.251 209.661 91.123 205.945L96.305 214.999C96.305 214.999 82.73 224.704 62.08 216.079Z" fill="#DDDDDD"/>
|
||||
<path d="M66.615 191.605L80.967 190.169C80.967 190.169 74.766 192.58 66.615 191.605Z" fill="#878787"/>
|
||||
<path d="M65.273 180.11L79.192 178.647C79.192 178.647 71.873 177.88 65.273 180.11Z" fill="#878787"/>
|
||||
<path d="M58.887 167.868C58.887 167.868 61.906 170.239 62.907 173.048C62.907 173.048 66.703 171.471 72.233 171.68V167.152L73.791 171.82H80.409C80.409 171.82 81.592 167.491 83.892 165.65C83.892 165.65 70.108 162.104 58.887 167.868Z" fill="#DDDDDD"/>
|
||||
<path d="M100.068 42.929C100.004 45.91 100.84 48.36 101.936 48.4C103.033 48.441 103.973 46.058 104.038 43.077C104.103 40.097 103.266 37.647 102.169 37.606C101.073 37.566 100.132 39.949 100.068 42.929Z" fill="#181818"/>
|
||||
<path d="M123.09 42.929C123.026 45.909 123.863 48.359 124.958 48.4C126.055 48.441 126.996 46.058 127.06 43.077C127.124 40.097 126.287 37.647 125.191 37.606C124.096 37.566 123.155 39.949 123.09 42.929Z" fill="#181818"/>
|
||||
<path d="M96.502 35.667C95.928 34.64 96.899 33.421 98.043 33.695C101.309 34.477 108.556 36.546 107.58 39.31C106.571 42.168 98.331 38.942 96.502 35.667Z" fill="#3f51b5"/>
|
||||
<path d="M131.696 35.667C132.27 34.64 131.299 33.421 130.155 33.695C126.889 34.477 119.642 36.546 120.618 39.31C121.626 42.168 129.867 38.942 131.696 35.667Z" fill="#3f51b5"/>
|
||||
<path d="M118.503 62.17C115.194 60.926 111.507 61.004 108.325 62.536C108.275 62.56 108.225 62.584 108.174 62.609C103.146 65.062 98.467 57.787 104.724 53.468C110.981 49.15 120.476 49.743 124.685 54.522C128.369 58.704 124.939 64.591 118.503 62.17Z" fill="#181818"/>
|
||||
<path d="M114.547 67.177C119.934 67.177 124.301 64.9626 124.301 62.231C124.301 59.4994 119.934 57.285 114.547 57.285C109.16 57.285 104.793 59.4994 104.793 62.231C104.793 64.9626 109.16 67.177 114.547 67.177Z" fill="#D04642"/>
|
||||
<path d="M108.625 64.591C108.625 64.591 113.955 62.074 119.493 64.591C119.493 64.591 114.791 60.611 108.625 64.591Z" fill="#3f51b5"/>
|
||||
<path d="M124.3 63.707C124.3 63.707 127.801 62.771 128.219 59.009C128.219 59.009 129.212 63.389 124.3 63.707Z" fill="#3f51b5"/>
|
||||
<path d="M103.719 63.707C103.719 63.707 100.218 62.771 99.8 59.009C99.8 59.009 98.808 63.389 103.719 63.707Z" fill="#3f51b5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
13
public/images/banner/Stars.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg width="70" height="12" viewBox="0 0 70 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6 0L7.34708 4.1459H11.7063L8.17963 6.7082L9.52671 10.8541L6 8.2918L2.47329 10.8541L3.82037 6.7082L0.293661 4.1459H4.65292L6 0Z" fill="black"/>
|
||||
<path d="M20.5 0L21.9593 4.1459H26.6819L22.8613 6.7082L24.3206 10.8541L20.5 8.2918L16.6794 10.8541L18.1387 6.7082L14.3181 4.1459H19.0407L20.5 0Z" fill="black"/>
|
||||
<path d="M35 0L36.3471 4.1459H40.7063L37.1796 6.7082L38.5267 10.8541L35 8.2918L31.4733 10.8541L32.8204 6.7082L29.2937 4.1459H33.6529L35 0Z" fill="black"/>
|
||||
<path d="M49.5 0L50.9593 4.1459H55.6819L51.8613 6.7082L53.3206 10.8541L49.5 8.2918L45.6794 10.8541L47.1387 6.7082L43.3181 4.1459H48.0407L49.5 0Z" fill="black"/>
|
||||
<path d="M64 1.61803L64.8716 4.30041L64.9838 4.6459H65.3471H68.1675L65.8857 6.3037L65.5918 6.51722L65.7041 6.86271L66.5757 9.54508L64.2939 7.88729L64 7.67376L63.7061 7.88729L61.4243 9.54508L62.2959 6.86271L62.4082 6.51722L62.1143 6.3037L59.8325 4.6459H62.6529H63.0162L63.1284 4.30041L64 1.61803Z" fill="black" stroke="black"/>
|
||||
<mask id="mask0_5_9713" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="58" y="0" width="12" height="11">
|
||||
<path d="M64 0L65.3471 4.1459H69.7063L66.1796 6.7082L67.5267 10.8541L64 8.2918L60.4733 10.8541L61.8204 6.7082L58.2937 4.1459H62.6529L64 0Z" fill="black"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_5_9713)">
|
||||
<rect x="65" y="-1" width="6" height="14" fill="#DCC9B8"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/images/banner/background.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
3
public/images/closed.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||
<path d="M4.707 3.293 3.293 4.707 10.586 12l-7.293 7.293 1.414 1.414L12 13.414l7.293 7.293 1.414-1.414L13.414 12l7.293-7.293-1.414-1.414L12 10.586z" fill="#fff" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 256 B |
3
public/images/courses/Star.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.5 0L10.4084 5.87336L16.584 5.87336L11.5878 9.50329L13.4962 15.3766L8.5 11.7467L3.50383 15.3766L5.41219 9.50329L0.416019 5.87336L6.59163 5.87336L8.5 0Z" fill="#F9CD92"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 284 B |
10
public/images/courses/account.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_3002_795)">
|
||||
<path d="M9 1.5C4.86 1.5 1.5 4.86 1.5 9C1.5 13.14 4.86 16.5 9 16.5C13.14 16.5 16.5 13.14 16.5 9C16.5 4.86 13.14 1.5 9 1.5ZM5.3025 13.71C5.625 13.035 7.59 12.375 9 12.375C10.41 12.375 12.3825 13.035 12.6975 13.71C11.6775 14.52 10.395 15 9 15C7.605 15 6.3225 14.52 5.3025 13.71ZM13.77 12.6225C12.6975 11.3175 10.095 10.875 9 10.875C7.905 10.875 5.3025 11.3175 4.23 12.6225C3.465 11.6175 3 10.365 3 9C3 5.6925 5.6925 3 9 3C12.3075 3 15 5.6925 15 9C15 10.365 14.535 11.6175 13.77 12.6225ZM9 4.5C7.545 4.5 6.375 5.67 6.375 7.125C6.375 8.58 7.545 9.75 9 9.75C10.455 9.75 11.625 8.58 11.625 7.125C11.625 5.67 10.455 4.5 9 4.5ZM9 8.25C8.3775 8.25 7.875 7.7475 7.875 7.125C7.875 6.5025 8.3775 6 9 6C9.6225 6 10.125 6.5025 10.125 7.125C10.125 7.7475 9.6225 8.25 9 8.25Z" fill="#F9CD92"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_3002_795">
|
||||
<rect width="18" height="18" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
52
public/images/courses/coursesFour.svg
Normal file
@@ -0,0 +1,52 @@
|
||||
<svg width="306" height="266" viewBox="0 0 306 266" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="306" height="266" rx="10" fill="#F3F3F3"/>
|
||||
<rect width="306" height="266" rx="10" fill="#FDC5C5"/>
|
||||
<g clip-path="url(#clip0_3002_1011)">
|
||||
<g clip-path="url(#clip1_3002_1011)">
|
||||
<path d="M144.706 139.181L151.489 150.916L158.272 162.651H131.14L137.923 150.916L144.706 139.181Z" fill="#6C63FF"/>
|
||||
<path d="M106.16 116.132H77.7129V144.546H106.16V116.132Z" fill="#E6E6E6"/>
|
||||
<path d="M126.553 98.0276C136.633 98.0276 144.804 89.8656 144.804 79.7972C144.804 69.7289 136.633 61.5668 126.553 61.5668C116.472 61.5668 108.301 69.7289 108.301 79.7972C108.301 89.8656 116.472 98.0276 126.553 98.0276Z" fill="#6C63FF"/>
|
||||
<path d="M142.979 110.237C142.979 109.64 143.156 109.057 143.488 108.561C143.82 108.065 144.291 107.678 144.843 107.449C145.395 107.221 146.003 107.161 146.589 107.278C147.175 107.394 147.713 107.682 148.136 108.104C148.558 108.526 148.846 109.063 148.962 109.649C149.079 110.234 149.019 110.841 148.791 111.392C148.562 111.943 148.175 112.415 147.678 112.746C147.181 113.078 146.597 113.255 145.999 113.255C145.198 113.255 144.43 112.937 143.863 112.371C143.297 111.805 142.979 111.037 142.979 110.237ZM143.482 110.237C143.482 110.735 143.63 111.221 143.906 111.634C144.183 112.048 144.576 112.37 145.036 112.56C145.496 112.751 146.002 112.8 146.491 112.703C146.979 112.606 147.428 112.367 147.78 112.015C148.132 111.664 148.371 111.216 148.469 110.728C148.566 110.24 148.516 109.734 148.325 109.275C148.135 108.815 147.812 108.423 147.398 108.146C146.984 107.87 146.497 107.723 145.999 107.723C145.332 107.723 144.691 107.988 144.219 108.459C143.747 108.931 143.482 109.57 143.482 110.237Z" fill="#CCCCCC"/>
|
||||
<path d="M116.97 162.725L112.523 157.963L117.291 153.521L121.738 158.283L116.97 162.725ZM113.232 157.987L116.995 162.017L121.029 158.259L117.266 154.229L113.232 157.987Z" fill="#CCCCCC"/>
|
||||
<path d="M80.2432 94.9818L76.624 91.1061L80.5052 87.4918L84.1244 91.3674L80.2432 94.9818ZM77.2008 91.1263L80.2643 94.4067L83.5476 91.3478L80.4851 88.0683L77.2008 91.1263Z" fill="#CCCCCC"/>
|
||||
<path d="M131.084 100.291C126.105 100.291 121.238 98.8159 117.098 96.0529C112.958 93.2899 109.731 89.3627 107.826 84.768C105.92 80.1733 105.422 75.1174 106.393 70.2397C107.364 65.362 109.762 60.8815 113.283 57.3649C116.803 53.8482 121.289 51.4533 126.173 50.4831C131.056 49.5129 136.118 50.0108 140.718 51.914C145.318 53.8172 149.25 57.0402 152.016 61.1753C154.782 65.3104 156.259 70.172 156.259 75.1453C156.259 81.8143 153.607 88.2101 148.885 92.9257C144.164 97.6414 137.761 100.291 131.084 100.291ZM131.084 50.5029C126.204 50.5029 121.435 51.9481 117.377 54.6559C113.32 57.3636 110.158 61.2122 108.291 65.715C106.423 70.2179 105.935 75.1726 106.887 79.9528C107.839 84.733 110.188 89.1238 113.639 92.5701C117.089 96.0164 121.485 98.3634 126.271 99.3142C131.057 100.265 136.017 99.7771 140.525 97.9119C145.033 96.0468 148.887 92.8883 151.597 88.8359C154.308 84.7835 155.755 80.0191 155.755 75.1453C155.755 68.6097 153.156 62.3418 148.529 57.7205C143.903 53.0991 137.627 50.5029 131.084 50.5029Z" fill="#3F3D56"/>
|
||||
<path d="M115.586 94.7094L109.083 108.228L109.537 108.446L116.04 94.9272L115.586 94.7094Z" fill="#3F3D56"/>
|
||||
<path d="M114.085 126.22L113.846 126.662L142.492 142.147L142.731 141.705L114.085 126.22Z" fill="#3F3D56"/>
|
||||
<path d="M114.217 144.798H77.4619V108.086H114.217V144.798ZM77.9654 144.295H113.714V108.589H77.9654V144.295Z" fill="#3F3D56"/>
|
||||
<path d="M168.723 162.903H130.704L149.713 130.016L168.723 162.903ZM131.576 162.4H167.851L149.713 131.022L131.576 162.4Z" fill="#3F3D56"/>
|
||||
<path d="M245 222.497H65V223H245V222.497Z" fill="#E6E6E6"/>
|
||||
<path d="M116.936 206.814C118.217 207.264 119.593 207.377 120.93 207.141C122.267 206.906 123.521 206.331 124.571 205.471C127.245 203.229 128.084 199.537 128.766 196.117L130.783 186.001L126.559 188.907C123.521 190.996 120.415 193.153 118.311 196.179C116.208 199.205 115.29 203.336 116.98 206.611" fill="#E6E6E6"/>
|
||||
<path d="M117.589 219.765C117.057 215.896 116.51 211.977 116.884 208.066C117.215 204.593 118.276 201.201 120.436 198.419C121.582 196.946 122.977 195.683 124.558 194.688C124.97 194.429 125.349 195.081 124.939 195.34C122.204 197.066 120.088 199.616 118.897 202.621C117.582 205.962 117.371 209.605 117.597 213.155C117.734 215.301 118.025 217.434 118.317 219.564C118.34 219.66 118.326 219.762 118.277 219.848C118.228 219.934 118.148 219.999 118.054 220.028C117.957 220.054 117.854 220.041 117.767 219.992C117.68 219.942 117.616 219.861 117.589 219.765L117.589 219.765Z" fill="#F2F2F2"/>
|
||||
<path d="M152.783 214.436C153.405 215.17 154.206 215.731 155.108 216.066C156.01 216.401 156.984 216.498 157.934 216.348C160.375 215.935 162.214 213.977 163.858 212.129L168.723 206.666L165.098 206.93C162.49 207.12 159.816 207.326 157.445 208.423C155.073 209.521 153.027 211.718 152.886 214.327" fill="#E6E6E6"/>
|
||||
<path d="M148.609 222.055C149.464 219.999 150.326 217.915 151.638 216.1C152.803 214.487 154.304 213.125 156.169 212.378C157.158 211.984 158.209 211.765 159.273 211.731C159.55 211.722 159.55 212.152 159.273 212.161C157.43 212.222 155.654 212.866 154.201 214.001C152.59 215.265 151.435 216.996 150.522 218.806C149.97 219.901 149.497 221.033 149.026 222.165C149.01 222.219 148.974 222.264 148.925 222.293C148.876 222.321 148.818 222.33 148.763 222.317C148.708 222.302 148.661 222.266 148.633 222.216C148.604 222.167 148.596 222.109 148.611 222.054L148.609 222.055Z" fill="#F2F2F2"/>
|
||||
<path d="M121.415 213.557C121.964 214.391 122.719 215.07 123.608 215.528C124.496 215.986 125.487 216.208 126.486 216.172C129.054 216.05 131.194 214.261 133.12 212.561L138.818 207.536L135.047 207.356C132.335 207.226 129.553 207.104 126.97 207.941C124.387 208.777 122.004 210.787 121.532 213.457" fill="#E6E6E6"/>
|
||||
<path d="M116.086 221.989C118.646 217.465 121.614 212.437 126.92 210.83C128.395 210.385 129.941 210.226 131.476 210.36C131.96 210.402 131.839 211.147 131.357 211.106C128.784 210.892 126.215 211.571 124.085 213.027C122.034 214.421 120.438 216.359 119.086 218.415C118.259 219.674 117.517 220.986 116.776 222.296C116.539 222.715 115.846 222.413 116.086 221.989Z" fill="#F2F2F2"/>
|
||||
<path d="M70.9122 213.976C71.8392 214.302 72.8345 214.383 73.8022 214.213C74.7699 214.043 75.6774 213.627 76.4373 213.004C78.3725 211.382 78.98 208.709 79.4729 206.234L80.933 198.914L77.876 201.016C75.6775 202.528 73.4297 204.089 71.9073 206.279C70.385 208.469 69.7207 211.459 70.9437 213.829" fill="#E6E6E6"/>
|
||||
<path d="M71.1734 222.839C70.864 220.588 70.5458 218.308 70.7628 216.032C70.9557 214.012 71.5727 212.038 72.8294 210.42C73.4964 209.562 74.3081 208.828 75.2278 208.249C75.4677 208.098 75.6883 208.478 75.4496 208.628C73.8582 209.632 72.6274 211.116 71.9345 212.864C71.1691 214.808 71.0463 216.928 71.1792 218.993C71.259 220.242 71.4279 221.482 71.5984 222.722C71.6121 222.778 71.6038 222.837 71.5753 222.888C71.5467 222.938 71.5001 222.975 71.4448 222.992C71.3886 223.007 71.3287 223 71.2781 222.971C71.2274 222.942 71.1902 222.895 71.1744 222.839L71.1734 222.839Z" fill="#F2F2F2"/>
|
||||
<path d="M93.9449 222.862C93.8784 222.753 92.3123 220.141 91.7695 214.718C91.2716 209.742 91.5918 201.354 95.9465 189.655C104.197 167.491 94.0453 149.607 93.9416 149.429L94.4423 149.139C94.4675 149.184 97.0882 153.744 98.6354 161.004C100.68 170.63 99.9355 180.638 96.489 189.856C88.2528 211.983 94.3761 222.457 94.4388 222.56L93.9449 222.862Z" fill="#3F3D56"/>
|
||||
<path d="M102.586 162.004C104.664 162.004 106.348 160.321 106.348 158.246C106.348 156.17 104.664 154.488 102.586 154.488C100.508 154.488 98.8232 156.17 98.8232 158.246C98.8232 160.321 100.508 162.004 102.586 162.004Z" fill="#6C63FF"/>
|
||||
<path d="M91.5876 191.201C93.6655 191.201 95.35 189.518 95.35 187.443C95.35 185.367 93.6655 183.685 91.5876 183.685C89.5097 183.685 87.8252 185.367 87.8252 187.443C87.8252 189.518 89.5097 191.201 91.5876 191.201Z" fill="#6C63FF"/>
|
||||
<path d="M95.8672 222.749C95.8672 222.749 92.6567 214.856 102.288 208.936L95.8672 222.749Z" fill="#E6E6E6"/>
|
||||
<path d="M91.9188 222.606C91.9188 222.606 90.9395 216.979 83.3594 217.028L91.9188 222.606Z" fill="#E6E6E6"/>
|
||||
<path d="M100.686 176.824C100.686 176.227 100.863 175.644 101.195 175.148C101.527 174.651 101.998 174.265 102.55 174.036C103.102 173.808 103.71 173.748 104.296 173.865C104.882 173.981 105.42 174.268 105.843 174.69C106.265 175.112 106.553 175.65 106.669 176.235C106.786 176.821 106.726 177.427 106.498 177.979C106.269 178.53 105.882 179.001 105.385 179.333C104.888 179.664 104.304 179.841 103.707 179.841C102.905 179.841 102.137 179.524 101.57 178.958C101.004 178.392 100.686 177.624 100.686 176.824ZM101.189 176.824C101.189 177.321 101.337 177.808 101.613 178.221C101.89 178.635 102.283 178.957 102.743 179.147C103.203 179.337 103.709 179.387 104.198 179.29C104.686 179.193 105.135 178.954 105.487 178.602C105.839 178.25 106.079 177.802 106.176 177.315C106.273 176.827 106.223 176.321 106.032 175.862C105.842 175.402 105.519 175.01 105.105 174.733C104.691 174.457 104.204 174.31 103.707 174.31C103.039 174.31 102.399 174.574 101.926 175.046C101.454 175.518 101.189 176.157 101.189 176.824Z" fill="#CCCCCC"/>
|
||||
<path d="M91.5869 167.51C91.5869 166.913 91.7641 166.33 92.096 165.834C92.428 165.338 92.8998 164.951 93.4518 164.723C94.0038 164.494 94.6112 164.434 95.1973 164.551C95.7833 164.667 96.3216 164.955 96.7441 165.377C97.1665 165.799 97.4543 166.336 97.5708 166.922C97.6874 167.507 97.6276 168.114 97.3989 168.665C97.1703 169.216 96.7831 169.688 96.2863 170.019C95.7895 170.351 95.2054 170.528 94.6079 170.528C93.8067 170.528 93.0383 170.21 92.4717 169.644C91.9052 169.078 91.5869 168.311 91.5869 167.51ZM92.0904 167.51C92.0904 168.008 92.2381 168.494 92.5147 168.907C92.7913 169.321 93.1845 169.643 93.6445 169.833C94.1045 170.024 94.6107 170.074 95.099 169.977C95.5874 169.879 96.036 169.64 96.388 169.288C96.7401 168.937 96.9799 168.489 97.077 168.001C97.1741 167.513 97.1243 167.007 96.9337 166.548C96.7432 166.089 96.4205 165.696 96.0065 165.42C95.5925 165.143 95.1058 164.996 94.6079 164.996C93.9402 164.996 93.2999 165.261 92.8278 165.732C92.3556 166.204 92.0904 166.843 92.0904 167.51Z" fill="#CCCCCC"/>
|
||||
<path d="M225.594 160.292C225.218 160.561 224.787 160.744 224.332 160.828C223.877 160.912 223.409 160.893 222.962 160.775C222.16 160.562 221.475 160.039 221.058 159.321C220.642 158.604 220.527 157.75 220.741 156.949C220.752 156.908 220.763 156.868 220.776 156.827C220.822 156.681 220.88 156.538 220.948 156.4L214.792 128.795C214.698 128.48 214.667 128.149 214.701 127.822C214.734 127.495 214.832 127.178 214.989 126.888C215.145 126.599 215.357 126.343 215.612 126.136C215.868 125.928 216.161 125.773 216.477 125.679C216.792 125.585 217.123 125.554 217.451 125.587C217.778 125.621 218.096 125.719 218.386 125.875C218.675 126.031 218.931 126.243 219.139 126.498C219.347 126.753 219.502 127.046 219.596 127.361C219.602 127.379 219.607 127.396 219.611 127.413L225.422 155.101C225.859 155.372 226.222 155.747 226.479 156.192C226.736 156.636 226.879 157.138 226.896 157.651C226.913 158.164 226.803 158.674 226.576 159.134C226.349 159.595 226.012 159.993 225.594 160.292L225.594 160.292Z" fill="#9F616A"/>
|
||||
<path d="M233.769 219.516H230.43L228.842 206.653H233.77L233.769 219.516Z" fill="#A0616A"/>
|
||||
<path d="M234.62 222.749H223.854V222.613C223.855 221.503 224.296 220.438 225.082 219.653C225.867 218.868 226.933 218.427 228.044 218.427H234.62V222.749Z" fill="#2F2E41"/>
|
||||
<path d="M200.296 219.411L197.119 218.384L199.571 205.657L204.26 207.172L200.296 219.411Z" fill="#A0616A"/>
|
||||
<path d="M200.11 222.749L189.868 219.439L189.91 219.31C190.252 218.254 191 217.377 191.99 216.871C192.979 216.366 194.129 216.274 195.186 216.616L201.442 218.637L200.11 222.749Z" fill="#2F2E41"/>
|
||||
<path d="M215.274 121.345C218.385 121.345 220.907 118.826 220.907 115.719C220.907 112.612 218.385 110.093 215.274 110.093C212.164 110.093 209.642 112.612 209.642 115.719C209.642 118.826 212.164 121.345 215.274 121.345Z" fill="#9F616A"/>
|
||||
<path d="M222.846 137.59C223.63 134.684 220.043 125.571 219.75 124.414C218.351 124.092 215.111 124.71 213.119 124.3C210.287 126.664 208.034 130.04 206.477 131.643C204.858 133.309 203.815 134.438 205.487 138.337C207.515 143.063 207.065 148.014 207.065 148.014L208.416 159.941C208.416 159.941 202.784 175.695 203.234 186.272L198.052 212.152C198.052 212.152 199.629 214.852 202.783 213.502C202.783 213.502 210.219 200.225 209.543 190.547L217.654 172.543C217.654 172.543 223.287 189.647 224.864 191.222L228.92 215.527C228.92 215.527 232.75 216.653 234.553 215.527C234.553 215.527 235.229 192.122 231.398 188.296C231.398 188.296 227.568 172.093 228.469 167.817C229.37 163.541 229.596 157.015 222.836 151.164C222.836 151.164 222.904 151.194 220.809 147.338L222.846 137.59Z" fill="#2F2E41"/>
|
||||
<path d="M218.213 107.023C217.898 107.024 217.583 107.055 217.273 107.116C216.713 106.845 216.099 106.704 215.476 106.703H215.313C212.17 106.703 209.622 109.544 209.622 113.048H210.675L210.846 111.755L211.095 113.048H211.972C211.699 114.086 211.562 115.155 211.565 116.228V122.686H213.157L214.079 120.293L213.848 122.686H224.084L224.922 120.511L224.712 122.686H225.865V117.615C225.865 111.765 222.439 107.023 218.213 107.023Z" fill="#2F2E41"/>
|
||||
<path d="M206.469 163.489C206.011 163.557 205.544 163.524 205.101 163.391C204.658 163.257 204.25 163.028 203.906 162.719C203.601 162.444 203.353 162.111 203.176 161.741C202.999 161.37 202.897 160.968 202.876 160.558C202.855 160.147 202.915 159.737 203.052 159.35C203.19 158.963 203.403 158.607 203.678 158.302C203.707 158.27 203.736 158.239 203.766 158.209C203.874 158.099 203.991 157.998 204.114 157.907L211.252 130.54C211.312 130.216 211.435 129.908 211.614 129.632C211.793 129.356 212.025 129.118 212.297 128.932C212.568 128.746 212.873 128.615 213.195 128.546C213.517 128.478 213.85 128.474 214.173 128.533C214.497 128.593 214.806 128.716 215.082 128.895C215.358 129.074 215.596 129.306 215.783 129.577C215.969 129.848 216.1 130.153 216.169 130.475C216.237 130.796 216.242 131.128 216.182 131.451C216.178 131.47 216.175 131.489 216.171 131.508L208.687 158.792C208.951 159.232 209.103 159.731 209.129 160.244C209.154 160.756 209.053 161.268 208.834 161.732C208.614 162.196 208.284 162.6 207.871 162.906C207.459 163.212 206.977 163.412 206.469 163.489Z" fill="#9F616A"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_3002_1011">
|
||||
<rect width="224" height="224" fill="white" transform="translate(43 25)"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip1_3002_1011">
|
||||
<rect width="180" height="173" fill="white" transform="translate(65 50)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
87
public/images/courses/coursesOne.svg
Normal file
@@ -0,0 +1,87 @@
|
||||
<svg width="306" height="266" viewBox="0 0 306 266" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="306" height="266" rx="10" fill="#F3F3F3"/>
|
||||
<rect width="306" height="266" rx="10" fill="#F9CD92"/>
|
||||
<g clip-path="url(#clip0_3002_699)">
|
||||
<g clip-path="url(#clip1_3002_699)">
|
||||
<path d="M196.578 125.337L197.902 124.82C198.029 124.77 198.154 124.716 198.287 124.665C195.835 123.766 193.764 122.063 192.414 119.836C191.063 117.609 190.514 114.991 190.855 112.411C191.197 109.832 192.41 107.445 194.294 105.644C196.179 103.842 198.623 102.733 201.224 102.498L200.301 107.132L203.804 102.552H203.835C206.858 102.966 209.593 104.559 211.437 106.981C213.281 109.403 214.084 112.455 213.67 115.466C213.641 115.683 213.595 115.893 213.554 116.106C214.633 115.258 215.644 114.321 216.401 113.234C217.939 111.024 218.46 108.302 218.991 104.968C220.042 98.3661 220.99 91.6914 221.844 85.0206C219.223 84.2329 216.97 82.54 215.49 80.2461C214.01 77.9522 213.4 75.2077 213.77 72.506C213.818 72.1575 213.885 71.8186 213.962 71.4835C213.981 71.3993 214 71.315 214.021 71.2327C214.104 70.9091 214.196 70.5913 214.304 70.2753C214.321 70.2236 214.344 70.1758 214.362 70.126C214.458 69.8637 214.554 69.6052 214.679 69.3601C214.721 69.2644 214.763 69.1686 214.808 69.0787C214.94 68.8048 215.081 68.5368 215.234 68.2764C215.286 68.1902 215.342 68.1079 215.394 68.0217C215.513 67.8303 215.638 67.6388 215.767 67.4607C215.836 67.365 215.903 67.2692 215.975 67.1754L216.026 67.1008C217.659 64.9729 219.988 63.482 222.609 62.8873C225.231 62.2927 227.979 62.6318 230.375 63.8457L229.176 69.8752L232.636 65.3488C234.497 66.9194 235.805 69.0415 236.37 71.4052C236.934 73.769 236.725 76.2506 235.773 78.4876H235.787C235.754 78.5641 235.714 78.6369 235.681 78.7135C235.617 78.8552 235.552 78.9949 235.489 79.1347C235.4 79.3128 235.296 79.487 235.21 79.6594C235.137 79.7896 235.066 79.9198 234.987 80.0423C234.873 80.2338 234.75 80.4061 234.627 80.5842C234.554 80.6876 234.487 80.7948 234.412 80.8963C234.22 81.1624 234.005 81.4171 233.785 81.6621C233.709 81.7483 233.626 81.8268 233.545 81.9111C233.389 82.0757 233.234 82.2385 233.068 82.3936C232.966 82.4893 232.859 82.585 232.753 82.6731C232.601 82.8071 232.446 82.9373 232.286 83.0561C232.173 83.146 232.057 83.2322 231.942 83.3165C231.775 83.4371 231.605 83.5501 231.434 83.663C231.319 83.7377 231.204 83.8124 231.086 83.8832C230.894 84 230.692 84.1072 230.49 84.2125C230.389 84.2642 230.298 84.3217 230.185 84.3715C229.881 84.5189 229.57 84.6548 229.252 84.7755C229.193 84.7984 229.129 84.8157 229.07 84.8367C228.805 84.9325 228.537 85.0282 228.266 85.0952C228.149 85.1278 228.03 85.1546 227.911 85.1833C227.69 85.2369 227.467 85.2867 227.242 85.3288C227.113 85.3518 226.981 85.3729 226.844 85.392C226.623 85.4246 226.4 85.4494 226.175 85.4686C226.042 85.4801 225.911 85.4916 225.777 85.4992C225.535 85.5107 225.29 85.5126 225.046 85.5107C225.03 85.5098 225.014 85.5098 224.998 85.5107C224.637 88.319 224.257 91.1272 223.86 93.9355C224.792 92.6819 225.972 91.6312 227.326 90.8479C228.681 90.0645 230.182 89.565 231.737 89.38C233.292 89.195 234.869 89.3283 236.371 89.7719C237.872 90.2154 239.267 90.9599 240.47 91.9595L237.455 97.0488L242.302 93.8723C244.134 96.2878 244.929 99.3288 244.512 102.328C244.37 103.381 244.079 104.408 243.647 105.38C242.722 107.483 241.184 109.261 239.231 110.483C237.279 111.705 235.003 112.314 232.698 112.232C230.394 112.149 228.168 111.379 226.309 110.02C224.45 108.662 223.043 106.778 222.272 104.614C222.228 104.897 222.186 105.188 222.142 105.468C221.672 108.407 221.09 112.066 219.022 115.041C217.62 117.063 215.69 118.557 213.814 119.87C212.594 120.725 211.345 121.541 210.069 122.315C208.729 123.553 207.113 124.455 205.353 124.946C203.303 125.992 201.208 126.937 199.069 127.782L197.733 128.303C196.532 128.77 195.301 129.249 194.081 129.758C194.273 129.775 194.465 129.79 194.657 129.815C197.076 130.146 199.327 131.234 201.084 132.922C202.842 134.61 204.015 136.811 204.434 139.207L196.301 143.632L204.409 143.27C204.085 145.061 203.332 146.747 202.214 148.187C200.381 150.551 197.693 152.109 194.724 152.528C191.754 152.948 188.738 152.197 186.316 150.435L186.72 151.183C186.989 151.677 187.254 152.17 187.512 152.658C191.035 159.31 191.291 165.054 188.233 168.835L185.734 166.834C188.711 163.154 186.349 157.305 184.676 154.146C184.422 153.667 184.161 153.188 183.907 152.698C181.645 148.518 179.078 143.781 180.107 138.74C181.645 131.138 189.92 127.922 196.578 125.337Z" fill="#F2F2F2"/>
|
||||
<path d="M100.827 161.376L99.7932 160.972C99.6932 160.933 99.601 160.889 99.4971 160.851C101.411 160.148 103.027 158.818 104.082 157.079C105.136 155.339 105.564 153.295 105.297 151.281C105.03 149.267 104.083 147.403 102.612 145.996C101.141 144.589 99.2331 143.722 97.2018 143.538L97.9227 147.157L95.1891 143.58H95.1641C93.9941 143.739 92.8671 144.127 91.8474 144.72C90.8277 145.313 89.9353 146.1 89.2212 147.037C88.5071 147.974 87.9853 149.041 87.6856 150.179C87.3859 151.316 87.3142 152.502 87.4746 153.667C87.4976 153.837 87.5342 154 87.5649 154.167C86.7168 153.532 85.9679 152.775 85.3426 151.921C84.145 150.198 83.7336 148.068 83.3184 145.466C82.5052 140.31 81.767 135.098 81.1038 129.894C83.1499 129.278 84.9083 127.955 86.063 126.163C87.2177 124.372 87.693 122.229 87.4034 120.119C87.365 119.847 87.3131 119.583 87.2516 119.321L87.2054 119.129C87.1401 118.877 87.0689 118.628 86.9844 118.386C86.9709 118.346 86.9536 118.308 86.9382 118.27C86.8632 118.065 86.7806 117.864 86.6922 117.667C86.6575 117.594 86.6249 117.519 86.5903 117.446C86.4865 117.234 86.3769 117.025 86.2577 116.822C86.2173 116.753 86.1731 116.688 86.1327 116.631C86.0385 116.481 85.9405 116.334 85.8405 116.192C85.7867 116.118 85.7348 116.041 85.6791 115.968L85.6387 115.911C84.3639 114.249 82.5454 113.084 80.4987 112.619C78.4519 112.153 76.3059 112.415 74.4331 113.36L75.3712 118.071L72.6664 114.536C71.213 115.763 70.1913 117.42 69.7503 119.266C69.3094 121.112 69.4723 123.05 70.2154 124.797H70.2058C70.2308 124.856 70.2615 124.914 70.2885 124.973C70.3384 125.084 70.3884 125.193 70.4422 125.302C70.5114 125.44 70.5845 125.576 70.6614 125.71C70.7171 125.814 70.7729 125.915 70.8344 126.015C70.9228 126.158 71.0266 126.298 71.1151 126.438C71.1727 126.518 71.2247 126.603 71.2842 126.681C71.438 126.888 71.6014 127.087 71.7725 127.28C71.8321 127.347 71.8975 127.409 71.9648 127.472C72.0859 127.6 72.2089 127.726 72.3377 127.855C72.4165 127.931 72.5011 128.002 72.5838 128.073C72.703 128.179 72.8241 128.28 72.9471 128.377C73.0355 128.446 73.1259 128.513 73.2162 128.58C73.347 128.674 73.4796 128.772 73.6123 128.85C73.7026 128.91 73.793 128.967 73.8852 129.023C74.0371 129.115 74.1928 129.197 74.3504 129.279C74.4312 129.321 74.5081 129.365 74.5888 129.406C74.8272 129.521 75.0694 129.626 75.3174 129.72C75.3635 129.739 75.4135 129.75 75.4597 129.768C75.6654 129.842 75.8749 129.911 76.0883 129.97C76.1786 129.995 76.2805 130.016 76.3651 130.038C76.5381 130.08 76.7111 130.12 76.888 130.152L77.1975 130.202C77.3705 130.227 77.5454 130.246 77.7204 130.262C77.8242 130.271 77.9261 130.279 78.0318 130.285C78.2241 130.294 78.4163 130.296 78.6085 130.294H78.6451C78.927 132.492 79.223 134.688 79.5332 136.883C78.8064 135.902 77.8861 135.08 76.8288 134.467C75.7715 133.853 74.5995 133.462 73.3847 133.316C72.1699 133.17 70.938 133.272 69.7646 133.618C68.5911 133.963 67.501 134.544 66.561 135.324L68.8947 139.276L65.1115 136.796C64.4018 137.73 63.8838 138.794 63.5869 139.927C63.2901 141.06 63.2202 142.24 63.3813 143.4C63.4929 144.224 63.7214 145.027 64.0599 145.786C64.7826 147.429 65.9842 148.817 67.5089 149.772C69.0337 150.726 70.8111 151.202 72.6107 151.137C74.4103 151.073 76.1489 150.471 77.601 149.41C79.053 148.35 80.1515 146.879 80.7539 145.189C80.7885 145.409 80.8212 145.633 80.8558 145.855C81.221 148.153 81.6767 151.009 83.2915 153.338C84.3872 154.915 85.8944 156.081 87.3592 157.108C88.3127 157.777 89.2874 158.415 90.2832 159.022C91.3301 159.989 92.5925 160.694 93.9664 161.079C95.5659 161.895 97.2037 162.637 98.8762 163.292L99.9181 163.7C100.856 164.064 101.817 164.437 102.765 164.835C102.615 164.849 102.463 164.86 102.312 164.881C100.423 165.139 98.6662 165.988 97.2937 167.305C95.9213 168.622 95.0045 170.339 94.6758 172.209L101.02 175.656L94.6873 175.374C94.9661 176.862 95.6189 178.255 96.5846 179.424C97.5504 180.592 98.7977 181.498 100.21 182.056C101.622 182.614 103.154 182.807 104.661 182.616C106.169 182.426 107.603 181.857 108.83 180.965C108.725 181.157 108.621 181.348 108.515 181.549C108.306 181.932 108.098 182.315 107.896 182.698C105.145 187.892 104.945 192.381 107.335 195.335L109.282 193.773C106.956 190.9 108.801 186.33 110.109 183.862C110.301 183.489 110.51 183.111 110.716 182.732C112.483 179.477 114.486 175.769 113.688 171.83C112.494 165.906 106.026 163.401 100.827 161.376Z" fill="#F2F2F2"/>
|
||||
<path d="M155.5 202C214.318 202 262 199.985 262 197.5C262 195.015 214.318 193.001 155.5 193.001C96.6817 193.001 49 195.015 49 197.5C49 199.985 96.6817 202 155.5 202Z" fill="#3F3D56"/>
|
||||
<path opacity="0.1" d="M155.5 202C214.318 202 262 199.985 262 197.5C262 195.015 214.318 193.001 155.5 193.001C96.6817 193.001 49 195.015 49 197.5C49 199.985 96.6817 202 155.5 202Z" fill="black"/>
|
||||
<path d="M155.5 199.511C214.318 199.511 262 197.496 262 195.011C262 192.526 214.318 190.512 155.5 190.512C96.6817 190.512 49 192.526 49 195.011C49 197.496 96.6817 199.511 155.5 199.511Z" fill="#3F3D56"/>
|
||||
<path d="M65.3403 193.411C64.7635 192.356 65.4172 191.063 66.163 190.121C66.9089 189.179 67.8182 188.206 67.799 187.002C67.7721 185.279 65.9343 184.262 64.4675 183.349C63.3792 182.67 62.3751 181.866 61.4763 180.953C61.1006 180.601 60.7896 180.187 60.5574 179.728C60.2536 179.054 60.2632 178.288 60.2825 177.549C60.3466 175.091 60.4683 172.635 60.6477 170.181" stroke="#3F3D56" stroke-width="4" stroke-miterlimit="10"/>
|
||||
<path d="M57.864 170.045C57.8848 169.596 58.0189 169.158 58.2541 168.774C58.4893 168.389 58.8179 168.07 59.2097 167.845L59.8133 169.034L59.796 167.595C60.0839 167.509 60.3841 167.473 60.6841 167.487C61.2153 167.513 61.7269 167.695 62.1542 168.01C62.5816 168.326 62.9057 168.76 63.0855 169.258C63.2653 169.757 63.2928 170.297 63.1645 170.811C63.0363 171.325 62.758 171.79 62.3648 172.147C61.9716 172.503 61.4812 172.736 60.9554 172.815C60.4295 172.894 59.8919 172.817 59.4104 172.592C58.9289 172.367 58.525 172.005 58.2498 171.552C57.9746 171.099 57.8403 170.575 57.864 170.045Z" fill="#6C63FF"/>
|
||||
<path d="M62.6759 188.235C62.944 188.767 63.382 189.194 63.9208 189.451C64.4597 189.707 65.0689 189.777 65.6524 189.651C66.236 189.525 66.7608 189.209 67.1442 188.753C67.5276 188.297 67.7478 187.727 67.7702 187.132C67.7894 186.761 67.7298 186.39 67.5953 186.043C67.4019 185.53 67.0552 185.088 66.6019 184.777C66.1486 184.466 65.6105 184.301 65.0602 184.304C64.5098 184.307 63.9737 184.478 63.524 184.794C63.0743 185.11 62.7327 185.556 62.5452 186.072L64.2311 187.437L62.3779 187.008C62.3769 187.435 62.4791 187.856 62.6759 188.235Z" fill="#6C63FF"/>
|
||||
<path d="M64.0079 183.018C64.6802 183.068 65.347 182.866 65.8766 182.45C66.4062 182.034 66.7598 181.436 66.8676 180.773C66.9754 180.11 66.8294 179.431 66.4587 178.87C66.0879 178.309 65.5192 177.908 64.8652 177.744L64.8787 178.853L64.2674 177.649C63.5523 177.615 62.8533 177.866 62.324 178.347C61.7948 178.827 61.4787 179.496 61.4453 180.209C61.4119 180.921 61.664 181.617 62.146 182.144C62.628 182.671 63.3005 182.986 64.0156 183.019L64.0079 183.018Z" fill="#6C63FF"/>
|
||||
<path d="M57.4585 178.677C57.812 178.693 58.1652 178.641 58.4981 178.521C58.831 178.402 59.1371 178.218 59.3988 177.981C59.6604 177.744 59.8727 177.458 60.0233 177.139C60.174 176.82 60.2601 176.475 60.2767 176.123C60.2934 175.771 60.2403 175.419 60.1204 175.087C60.0006 174.756 59.8163 174.451 59.5782 174.19C59.34 173.93 59.0527 173.718 58.7326 173.568C58.4124 173.418 58.0657 173.332 57.7123 173.316C57.2077 173.291 56.7064 173.409 56.2667 173.657L56.7434 174.959L55.7611 174.02C55.2357 174.5 54.9225 175.167 54.8902 175.876C54.8772 176.123 54.9005 176.372 54.9594 176.613C55.0936 177.181 55.4103 177.69 55.8613 178.062C56.3124 178.435 56.8732 178.651 57.4585 178.677Z" fill="#6C63FF"/>
|
||||
<path opacity="0.1" d="M58.2275 170.762C58.8504 170.83 59.4559 171.024 60.0807 171.062C60.7055 171.1 61.3918 170.951 61.7878 170.469C62.0012 170.206 62.1069 169.877 62.2857 169.594C62.4569 169.329 62.6905 169.11 62.9662 168.956C63.129 169.295 63.2184 169.664 63.2287 170.04C63.239 170.415 63.1699 170.789 63.0259 171.136C62.8819 171.483 62.6663 171.796 62.3929 172.055C62.1196 172.314 61.7946 172.513 61.4392 172.639C61.0837 172.764 60.7057 172.814 60.3296 172.785C59.9535 172.756 59.5878 172.649 59.2562 172.47C58.9245 172.291 58.6344 172.044 58.4045 171.746C58.1746 171.448 58.0102 171.106 57.9219 170.74C58.0238 170.744 58.1256 170.752 58.2275 170.762Z" fill="black"/>
|
||||
<path opacity="0.1" d="M57.4582 178.677C57.9235 178.7 58.387 178.603 58.8032 178.395C59.2195 178.186 59.5744 177.874 59.833 177.488C60.0917 177.102 60.2453 176.656 60.2789 176.193C60.3125 175.73 60.2248 175.266 60.0246 174.847C59.8104 174.991 59.6263 175.175 59.4824 175.389C59.2902 175.678 59.1729 176.012 58.948 176.278C58.527 176.77 57.81 176.931 57.1583 176.9C56.5066 176.869 55.878 176.687 55.2359 176.628C55.1455 176.628 55.0552 176.613 54.9648 176.611C55.0984 177.178 55.414 177.687 55.864 178.06C56.3139 178.433 56.8736 178.649 57.4582 178.677Z" fill="black"/>
|
||||
<path opacity="0.1" d="M64.0077 183.018C64.4689 183.041 64.9283 182.946 65.342 182.742C65.7556 182.537 66.1095 182.23 66.3696 181.85C66.6297 181.47 66.7872 181.03 66.8271 180.572C66.8669 180.114 66.7877 179.653 66.5972 179.234C66.373 179.379 66.1775 179.564 66.0204 179.78C65.8109 180.075 65.6802 180.414 65.4437 180.685C64.99 181.191 64.2249 181.369 63.5348 181.352C62.8447 181.335 62.2237 181.174 61.5586 181.124C61.7209 181.653 62.0434 182.118 62.4819 182.457C62.9203 182.796 63.4533 182.992 64.0077 183.018Z" fill="black"/>
|
||||
<path opacity="0.1" d="M62.6758 188.235C62.9439 188.767 63.3818 189.194 63.9207 189.451C64.4596 189.707 65.0687 189.777 65.6523 189.651C66.2358 189.525 66.7606 189.209 67.144 188.753C67.5275 188.297 67.7477 187.727 67.7701 187.132C67.7893 186.761 67.7297 186.39 67.5952 186.043C67.3729 186.188 67.1734 186.364 67.0031 186.567C66.7455 186.88 66.5782 187.232 66.2803 187.525C65.7285 188.065 64.8385 188.291 64.0464 188.308C63.5885 188.31 63.1309 188.285 62.6758 188.235Z" fill="black"/>
|
||||
<path d="M69.4139 192.197C69.4139 192.197 67.2839 192.132 66.6438 191.676C66.0036 191.22 63.3757 190.676 63.2085 191.408C63.0412 192.139 60.0077 195.046 62.4126 195.057C64.8175 195.069 67.999 194.674 68.6392 194.291C69.2793 193.908 69.4139 192.197 69.4139 192.197Z" fill="#656380"/>
|
||||
<path opacity="0.2" d="M62.3684 194.803C64.7733 194.822 67.9549 194.42 68.597 194.037C69.0833 193.742 69.2775 192.679 69.3428 192.189H69.414C69.414 192.189 69.2794 193.899 68.645 194.295C68.0106 194.692 64.8214 195.076 62.4184 195.061C61.7244 195.061 61.4841 194.81 61.4976 194.445C61.588 194.661 61.8532 194.803 62.3684 194.803Z" fill="black"/>
|
||||
<path d="M251.811 195.134C251.234 194.079 251.888 192.786 252.634 191.844C253.38 190.902 254.289 189.93 254.27 188.725C254.243 187.002 252.405 185.985 250.938 185.072C249.85 184.394 248.846 183.59 247.947 182.677C247.571 182.325 247.26 181.91 247.028 181.451C246.724 180.777 246.734 180.011 246.753 179.272C246.816 176.814 246.938 174.358 247.118 171.905" stroke="#3F3D56" stroke-width="4" stroke-miterlimit="10"/>
|
||||
<path d="M244.336 171.769C244.356 171.319 244.491 170.882 244.726 170.497C244.961 170.113 245.29 169.793 245.681 169.569L246.285 170.758L246.268 169.318C246.556 169.232 246.856 169.196 247.156 169.211C247.687 169.237 248.198 169.419 248.625 169.735C249.052 170.05 249.376 170.484 249.556 170.983C249.735 171.481 249.762 172.022 249.634 172.536C249.506 173.049 249.227 173.514 248.834 173.87C248.441 174.227 247.95 174.459 247.424 174.538C246.899 174.618 246.361 174.54 245.88 174.315C245.398 174.09 244.995 173.728 244.719 173.275C244.444 172.822 244.31 172.298 244.334 171.769H244.336Z" fill="#6C63FF"/>
|
||||
<path d="M249.147 189.958C249.415 190.49 249.853 190.917 250.392 191.174C250.93 191.43 251.54 191.501 252.123 191.374C252.707 191.248 253.231 190.932 253.615 190.476C253.998 190.02 254.219 189.45 254.241 188.855C254.26 188.484 254.201 188.113 254.066 187.766C253.873 187.253 253.526 186.811 253.073 186.5C252.619 186.189 252.081 186.024 251.531 186.027C250.981 186.03 250.444 186.202 249.995 186.518C249.545 186.834 249.203 187.279 249.016 187.795L250.702 189.16L248.849 188.731C248.848 189.158 248.95 189.579 249.147 189.958Z" fill="#6C63FF"/>
|
||||
<path d="M250.48 184.741C251.152 184.791 251.819 184.589 252.348 184.173C252.878 183.758 253.231 183.159 253.339 182.496C253.447 181.833 253.301 181.154 252.93 180.594C252.56 180.033 251.991 179.631 251.337 179.468L251.35 180.576L250.739 179.372C250.024 179.339 249.325 179.59 248.796 180.07C248.266 180.55 247.95 181.22 247.917 181.932C247.884 182.644 248.136 183.34 248.618 183.867C249.1 184.395 249.772 184.709 250.487 184.743L250.48 184.741Z" fill="#6C63FF"/>
|
||||
<path d="M243.929 180.4C244.643 180.434 245.341 180.183 245.869 179.704C246.398 179.225 246.714 178.557 246.747 177.846C246.781 177.135 246.53 176.44 246.049 175.913C245.568 175.387 244.897 175.073 244.183 175.039C243.678 175.014 243.177 175.132 242.737 175.38L243.214 176.682L242.232 175.744C241.706 176.223 241.393 176.89 241.361 177.599C241.348 177.847 241.371 178.095 241.43 178.336C241.564 178.904 241.881 179.413 242.332 179.786C242.783 180.158 243.344 180.374 243.929 180.4Z" fill="#6C63FF"/>
|
||||
<path opacity="0.1" d="M244.698 172.485C245.321 172.554 245.927 172.747 246.551 172.785C247.176 172.824 247.862 172.674 248.258 172.192C248.472 171.929 248.578 171.6 248.756 171.317C248.928 171.052 249.161 170.833 249.437 170.679C249.6 171.018 249.689 171.387 249.699 171.763C249.71 172.138 249.641 172.512 249.497 172.859C249.353 173.206 249.137 173.52 248.864 173.778C248.59 174.037 248.265 174.236 247.91 174.362C247.554 174.488 247.176 174.538 246.8 174.508C246.424 174.479 246.059 174.372 245.727 174.193C245.395 174.014 245.105 173.767 244.875 173.469C244.645 173.172 244.481 172.829 244.393 172.464C244.494 172.467 244.596 172.475 244.698 172.485Z" fill="black"/>
|
||||
<path opacity="0.1" d="M243.93 180.4C244.395 180.424 244.859 180.326 245.275 180.118C245.691 179.91 246.046 179.597 246.305 179.211C246.563 178.825 246.717 178.379 246.751 177.916C246.784 177.453 246.697 176.99 246.496 176.571C246.282 176.715 246.098 176.899 245.954 177.113C245.762 177.402 245.645 177.735 245.42 178.001C244.999 178.493 244.282 178.654 243.63 178.623C242.978 178.593 242.35 178.411 241.708 178.351C241.617 178.351 241.527 178.336 241.437 178.334C241.57 178.902 241.886 179.41 242.336 179.783C242.786 180.156 243.345 180.373 243.93 180.4Z" fill="black"/>
|
||||
<path opacity="0.1" d="M250.479 184.741C250.941 184.764 251.4 184.669 251.814 184.465C252.227 184.261 252.581 183.954 252.841 183.574C253.101 183.194 253.259 182.753 253.299 182.295C253.339 181.837 253.259 181.376 253.069 180.957C252.845 181.103 252.649 181.287 252.492 181.503C252.283 181.798 252.152 182.137 251.915 182.409C251.462 182.914 250.697 183.092 250.006 183.075C249.316 183.058 248.695 182.897 248.03 182.847C248.193 183.376 248.515 183.841 248.954 184.18C249.392 184.519 249.925 184.715 250.479 184.741Z" fill="black"/>
|
||||
<path opacity="0.1" d="M249.146 189.958C249.415 190.49 249.853 190.917 250.391 191.174C250.93 191.43 251.539 191.501 252.123 191.374C252.707 191.248 253.231 190.932 253.615 190.476C253.998 190.02 254.218 189.45 254.241 188.855C254.26 188.484 254.2 188.113 254.066 187.766C253.844 187.911 253.644 188.088 253.474 188.291C253.216 188.603 253.049 188.955 252.751 189.248C252.199 189.788 251.309 190.014 250.517 190.031C250.059 190.033 249.602 190.009 249.146 189.958Z" fill="black"/>
|
||||
<path d="M255.885 193.92C255.885 193.92 253.755 193.855 253.114 193.399C252.474 192.943 249.846 192.4 249.679 193.131C249.512 193.863 246.478 196.769 248.883 196.781C251.288 196.792 254.47 196.398 255.11 196.015C255.75 195.632 255.885 193.92 255.885 193.92Z" fill="#656380"/>
|
||||
<path opacity="0.2" d="M248.839 196.526C251.244 196.545 254.426 196.143 255.068 195.76C255.554 195.465 255.748 194.402 255.814 193.912H255.885C255.885 193.912 255.75 195.622 255.116 196.018C254.481 196.415 251.292 196.8 248.889 196.784C248.195 196.784 247.955 196.534 247.968 196.168C248.059 196.384 248.324 196.526 248.839 196.526Z" fill="black"/>
|
||||
<path d="M192.327 125.406C191.055 124.972 189.774 124.57 188.482 124.2C188.695 123.333 188.893 122.462 189.076 121.586C191.986 107.511 190.083 96.1719 183.584 92.4402C177.351 88.8596 167.159 92.5933 156.863 101.514C155.848 102.397 154.856 103.304 153.889 104.233C153.239 103.614 152.579 103.007 151.909 102.412C141.122 92.871 130.316 88.852 123.815 92.5952C117.588 96.1853 115.741 106.845 118.365 120.184C118.621 121.506 118.915 122.819 119.247 124.125C117.719 124.558 116.241 125.019 114.826 125.511C102.178 129.894 94.1006 136.787 94.1006 143.927C94.1006 151.3 102.772 158.697 115.947 163.181C117.015 163.542 118.092 163.878 119.176 164.188C118.825 165.592 118.512 167.008 118.238 168.435C115.739 181.543 117.692 191.952 123.901 195.519C130.316 199.206 141.082 195.415 151.563 186.29C152.391 185.568 153.222 184.802 154.062 184.002C155.11 185.009 156.186 185.987 157.289 186.935C167.443 195.637 177.474 199.153 183.676 195.574C190.083 191.881 192.165 180.699 189.462 167.097C189.257 166.058 189.018 164.998 188.745 163.916C189.503 163.694 190.243 163.464 190.968 163.225C204.663 158.706 213.575 151.4 213.575 143.927C213.575 136.76 205.235 129.831 192.332 125.406H192.327Z" fill="#53C1DE"/>
|
||||
<path d="M189.357 158.4C188.704 158.616 188.035 158.823 187.35 159.026C185.68 153.87 183.659 148.833 181.3 143.952C183.569 139.135 185.512 134.172 187.116 129.097C188.336 129.45 189.524 129.821 190.666 130.214C201.722 134.003 208.466 139.607 208.466 143.927C208.466 148.522 201.182 154.498 189.357 158.4ZM184.451 168.085C185.647 174.099 185.816 179.537 185.028 183.785C184.317 187.605 182.886 190.152 181.118 191.172C177.352 193.342 169.301 190.521 160.618 183.079C159.622 182.225 158.62 181.315 157.613 180.35C161.233 176.358 164.579 172.127 167.627 167.686C173.071 167.227 178.477 166.395 183.807 165.197C184.051 166.178 184.267 167.135 184.455 168.069L184.451 168.085ZM134.831 190.801C131.151 192.095 128.222 192.132 126.451 191.115C122.683 188.949 121.116 180.584 123.254 169.383C123.51 168.059 123.801 166.742 124.125 165.433C129.433 166.568 134.812 167.344 140.225 167.755C143.362 172.181 146.788 176.396 150.481 180.373C149.739 181.089 148.98 181.786 148.205 182.462C143.57 186.498 138.923 189.355 134.831 190.801ZM117.598 158.371C111.772 156.388 106.962 153.811 103.663 151C100.701 148.472 99.2051 145.962 99.2051 143.927C99.2051 139.594 105.691 134.066 116.507 130.311C117.865 129.84 119.236 129.411 120.618 129.023C122.225 134.154 124.17 139.174 126.441 144.049C124.142 148.995 122.173 154.086 120.547 159.29C119.555 159.008 118.572 158.702 117.598 158.371ZM123.375 119.208C121.13 107.779 122.62 99.1569 126.372 96.9971C130.369 94.6995 139.206 97.9775 148.522 106.216C149.118 106.743 149.716 107.294 150.314 107.863C146.647 111.816 143.248 116.007 140.138 120.408C134.776 120.887 129.451 121.712 124.196 122.876C123.89 121.661 123.616 120.439 123.375 119.21V119.208ZM174.916 131.881C173.749 129.872 172.538 127.888 171.285 125.93C175.097 126.411 178.748 127.047 182.177 127.828C181.076 131.305 179.8 134.725 178.353 138.073C177.25 135.986 176.104 133.922 174.916 131.881ZM153.893 111.495C156.377 114.193 158.724 117.014 160.923 119.947C156.218 119.726 151.512 119.726 146.803 119.947C149.124 116.899 151.502 114.065 153.893 111.497V111.495ZM132.747 131.916C131.574 133.942 130.45 135.993 129.373 138.07C127.887 134.56 126.616 131.108 125.578 127.774C128.987 127.008 132.622 126.394 136.409 125.921C135.138 127.892 133.916 129.89 132.743 131.916H132.747ZM136.517 162.293C132.82 161.893 129.147 161.304 125.511 160.529C126.566 157.138 127.866 153.611 129.385 150.025C130.465 152.104 131.593 154.157 132.77 156.183C133.967 158.249 135.215 160.286 136.513 162.293H136.517ZM154.037 176.716C151.615 174.124 149.202 171.252 146.849 168.148C149.137 168.239 151.467 168.284 153.839 168.284C156.274 168.284 158.678 168.23 161.05 168.123C158.86 171.105 156.518 173.973 154.033 176.716H154.037ZM178.392 149.843C179.914 153.26 181.256 156.753 182.413 160.309C178.733 161.134 175.011 161.766 171.264 162.203C172.526 160.208 173.749 158.189 174.932 156.146C176.134 154.071 177.287 151.97 178.392 149.843ZM170.51 153.608C168.7 156.737 166.79 159.807 164.779 162.817C161.235 163.07 157.572 163.2 153.839 163.2C150.106 163.2 146.505 163.085 143.022 162.859C140.96 159.86 139.012 156.785 137.18 153.636C135.347 150.487 133.648 147.291 132.084 144.047C133.656 140.789 135.35 137.591 137.164 134.455C138.977 131.32 140.907 128.256 142.957 125.264C146.511 124.996 150.152 124.856 153.835 124.856C157.519 124.856 161.183 124.998 164.733 125.266C166.76 128.249 168.682 131.3 170.5 134.42C172.319 137.54 174.036 140.723 175.651 143.969C174.055 147.239 172.343 150.45 170.516 153.6L170.51 153.608ZM181.039 96.844C185.039 99.1416 186.595 108.409 184.082 120.562C183.917 121.352 183.737 122.14 183.544 122.926C178.281 121.738 172.945 120.898 167.571 120.412C164.491 116.007 161.117 111.813 157.472 107.859C158.37 106.999 159.285 106.162 160.22 105.349C169.039 97.7037 177.283 94.6861 181.039 96.844Z" fill="#F9CD92"/>
|
||||
<path d="M153.835 133.3C155.945 133.3 158.008 133.923 159.763 135.091C161.517 136.259 162.885 137.918 163.692 139.86C164.5 141.802 164.711 143.939 164.299 146C163.888 148.061 162.872 149.955 161.38 151.441C159.887 152.927 157.986 153.939 155.917 154.349C153.847 154.759 151.702 154.549 149.752 153.745C147.803 152.94 146.136 151.578 144.964 149.831C143.792 148.083 143.166 146.029 143.166 143.927C143.166 142.531 143.442 141.149 143.978 139.86C144.514 138.57 145.3 137.399 146.29 136.412C147.281 135.425 148.457 134.642 149.752 134.109C151.047 133.575 152.434 133.3 153.835 133.3Z" fill="#53C1DE"/>
|
||||
<path d="M156.511 65.9061C156.511 66.5347 156.324 67.1492 155.973 67.6719C155.623 68.1946 155.124 68.602 154.541 68.8425C153.958 69.0831 153.317 69.1461 152.697 69.0234C152.078 68.9008 151.51 68.5981 151.064 68.1535C150.617 67.709 150.313 67.1427 150.19 66.5261C150.067 65.9096 150.13 65.2705 150.372 64.6897C150.613 64.109 151.022 63.6125 151.547 63.2633C152.072 62.914 152.689 62.7276 153.32 62.7276C153.74 62.7256 154.156 62.8064 154.544 62.9654C154.932 63.1245 155.284 63.3585 155.581 63.6541C155.878 63.9496 156.113 64.3008 156.272 64.6873C156.432 65.0739 156.513 65.4881 156.511 65.9061Z" fill="#3F3D56"/>
|
||||
<path d="M150.771 66.7083C150.518 66.253 150.381 65.7429 150.372 65.2226C150.363 64.7023 150.482 64.1878 150.719 63.724C150.956 63.2603 151.304 62.8615 151.731 62.5626C152.159 62.2637 152.654 62.0738 153.172 62.0096C152.732 61.9942 152.294 62.0696 151.885 62.231C151.476 62.3923 151.105 62.6361 150.795 62.9471C150.485 63.2581 150.243 63.6296 150.085 64.0382C149.926 64.4468 149.853 64.8837 149.872 65.3214C149.891 65.7592 150 66.1884 150.193 66.582C150.387 66.9757 150.659 67.3253 150.995 67.6089C151.33 67.8925 151.721 68.104 152.142 68.23C152.563 68.3561 153.006 68.3941 153.443 68.3415C152.894 68.3213 152.36 68.1604 151.892 67.8743C151.424 67.5882 151.038 67.1865 150.771 66.7083Z" fill="#3F3D56"/>
|
||||
<path d="M157.88 70.3329H149.331V83.6153H157.88V70.3329Z" fill="#3F3D56"/>
|
||||
<path opacity="0.1" d="M157.88 70.3329H149.331V83.6153H157.88V70.3329Z" fill="black"/>
|
||||
<path d="M135.827 118.522C135.827 118.522 134.914 121.021 132.751 121.362C130.588 121.703 129.331 122.269 129.331 122.269L134.46 125.561L137.196 125.22C137.196 125.22 137.538 121.701 138.678 120.906C139.818 120.112 135.827 118.522 135.827 118.522Z" fill="#A0616A"/>
|
||||
<path d="M172.867 118.522C172.867 118.522 173.78 121.021 175.943 121.362C178.106 121.703 179.363 122.269 179.363 122.269L174.234 125.561L171.498 125.22C171.498 125.22 171.156 121.701 170.016 120.906C168.876 120.112 172.867 118.522 172.867 118.522Z" fill="#A0616A"/>
|
||||
<path d="M147.906 96.4993C147.906 96.4993 146.54 97.1809 146.084 98.5442C146.084 98.5442 143.585 99.3388 142.208 101.495C142.208 101.495 140.498 103.312 140.271 104.219C140.044 105.127 137.429 110.576 137.429 110.576C137.429 110.576 134.807 119.091 133.44 119.999C133.44 119.999 137.772 119.091 138.569 123.405C138.569 123.405 139.594 123.405 140.734 119.432C141.874 115.459 144.609 110.576 144.609 110.576C144.609 110.576 145.521 107.172 146.318 106.603C147.116 106.035 148.37 103.425 149.51 104.114C150.65 104.803 158.172 103.999 158.172 103.999C158.172 103.999 162.613 106.036 162.724 107.398C162.836 108.759 163.635 108.874 163.749 110.009C163.862 111.145 168.08 120.112 168.08 120.112C168.08 120.112 168.878 122.601 169.106 123.175C169.106 123.175 171.605 117.159 174.92 120.565C174.92 120.565 174.804 118.294 173.78 116.927C172.755 115.56 168.309 104.895 168.309 104.895C168.309 104.895 167.853 103.306 167.397 102.852C166.942 102.398 163.407 98.7644 162.153 98.7644C162.153 98.7644 161.471 97.0622 160.673 96.8343L147.906 96.4993Z" fill="#3F3D56"/>
|
||||
<path d="M137.649 124.425C136.758 124.781 135.791 124.902 134.84 124.774C133.889 124.647 132.988 124.277 132.224 123.7C131.481 123.132 130.667 122.662 129.803 122.302C128.594 121.816 127.149 121.456 126.708 122.269C125.911 123.746 136.395 127.378 136.395 127.378C136.395 127.378 137.764 126.583 137.649 124.425Z" fill="#3F3D56"/>
|
||||
<path d="M171.044 124.425C171.934 124.781 172.902 124.902 173.852 124.774C174.803 124.647 175.705 124.277 176.469 123.7C177.212 123.132 178.025 122.662 178.889 122.302C180.098 121.816 181.544 121.456 181.984 122.269C182.782 123.746 172.297 127.378 172.297 127.378C172.297 127.378 170.929 126.583 171.044 124.425Z" fill="#3F3D56"/>
|
||||
<path d="M151.632 77.8289C151.59 78.2233 151.459 78.6503 151.121 78.859C150.844 79.0314 150.494 79.018 150.175 79.0831C149.84 79.1666 149.53 79.3275 149.268 79.5527C149.007 79.7778 148.803 80.061 148.672 80.3793C148.416 81.0218 148.366 81.7273 148.528 82.3993C148.603 82.7285 148.701 83.0521 148.82 83.3682C149.154 84.3102 149.558 85.2446 150.183 86.0277C150.716 86.6503 151.315 87.2133 151.971 87.7069C152.376 88.0363 152.795 88.3713 153.295 88.5264C153.634 88.6155 153.983 88.6618 154.333 88.6643C154.766 88.6834 155.227 88.6968 155.602 88.4824C156.179 88.1511 156.35 87.4197 156.663 86.8319C156.929 86.3341 157.325 85.9109 157.573 85.4035C157.749 85.0036 157.878 84.5847 157.957 84.1551L158.49 81.8C158.682 80.9442 158.859 79.9791 158.376 79.2458C158.341 79.1861 158.292 79.1356 158.234 79.0984C158.141 79.0619 158.04 79.052 157.942 79.0697C157.329 79.1093 156.717 78.9703 156.183 78.6695C156.099 78.6263 156.024 78.5678 155.962 78.4972C155.885 78.3745 155.839 78.2353 155.827 78.0912C155.775 77.7994 155.693 77.5139 155.581 77.2392C155.55 77.1402 155.492 77.0515 155.414 76.9826C155.332 76.9315 155.239 76.9007 155.143 76.8926C154.32 76.7596 153.49 76.6733 152.657 76.6341C152.384 76.6207 151.973 76.5116 151.784 76.7528C151.596 76.9941 151.655 77.5417 151.632 77.8289Z" fill="#A0616A"/>
|
||||
<path opacity="0.1" d="M151.632 77.8289C151.59 78.2233 151.459 78.6503 151.121 78.859C150.844 79.0314 150.494 79.018 150.175 79.0831C149.84 79.1666 149.53 79.3275 149.268 79.5527C149.007 79.7778 148.803 80.061 148.672 80.3793C148.416 81.0218 148.366 81.7273 148.528 82.3993C148.603 82.7285 148.701 83.0521 148.82 83.3682C149.154 84.3102 149.558 85.2446 150.183 86.0277C150.716 86.6503 151.315 87.2133 151.971 87.7069C152.376 88.0363 152.795 88.3713 153.295 88.5264C153.634 88.6155 153.983 88.6618 154.333 88.6643C154.766 88.6834 155.227 88.6968 155.602 88.4824C156.179 88.1511 156.35 87.4197 156.663 86.8319C156.929 86.3341 157.325 85.9109 157.573 85.4035C157.749 85.0036 157.878 84.5847 157.957 84.1551L158.49 81.8C158.682 80.9442 158.859 79.9791 158.376 79.2458C158.341 79.1861 158.292 79.1356 158.234 79.0984C158.141 79.0619 158.04 79.052 157.942 79.0697C157.329 79.1093 156.717 78.9703 156.183 78.6695C156.099 78.6263 156.024 78.5678 155.962 78.4972C155.885 78.3745 155.839 78.2353 155.827 78.0912C155.775 77.7994 155.693 77.5139 155.581 77.2392C155.55 77.1402 155.492 77.0515 155.414 76.9826C155.332 76.9315 155.239 76.9007 155.143 76.8926C154.32 76.7596 153.49 76.6733 152.657 76.6341C152.384 76.6207 151.973 76.5116 151.784 76.7528C151.596 76.9941 151.655 77.5417 151.632 77.8289Z" fill="black"/>
|
||||
<path d="M150.088 79.1826C149.643 79.0502 149.182 78.9781 148.718 78.9682C147.618 78.9414 146.442 79.3186 145.807 80.2127C145.375 80.8582 145.217 81.6477 145.367 82.4089C145.52 83.163 145.864 83.8656 146.367 84.45C146.657 84.7572 146.915 85.0934 147.135 85.4533C147.439 86.0277 147.449 86.7151 147.532 87.368C147.724 88.9228 148.389 90.3837 148.652 91.9289C148.916 93.474 148.689 95.2643 147.464 96.2465C147.259 96.4112 147.009 96.5855 146.991 96.8478C146.964 97.2671 147.512 97.4452 147.933 97.4854C149.192 97.6041 150.484 97.7209 151.707 97.3973C152.213 97.2633 152.701 97.0546 153.216 96.9588C154.523 96.7157 155.838 97.2154 157.147 97.4547C158.095 97.6105 159.053 97.688 160.014 97.6864C160.237 97.7063 160.462 97.6769 160.673 97.6003C160.777 97.5595 160.866 97.4866 160.926 97.3923C160.986 97.298 161.015 97.1871 161.007 97.0756C160.965 96.9313 160.887 96.7997 160.781 96.6927C160.119 95.8789 159.917 94.7971 159.737 93.7651L159.131 90.2975C158.806 88.4441 158.504 86.4298 159.385 84.7659C160.017 83.5692 161.184 82.7268 161.851 81.5492C162.084 81.1933 162.189 80.7696 162.149 80.3468C162.049 79.7551 161.513 79.332 160.963 79.085C159.905 78.6123 158.704 78.5684 157.614 78.9624C157.634 79.7915 157.422 80.6301 157.286 81.4516L157.053 82.7919C156.935 83.5817 156.761 84.3623 156.532 85.1278C156.449 85.4341 156.307 85.7214 156.115 85.9741C155.91 86.2015 155.659 86.3834 155.379 86.5083C154.772 86.8038 154.105 86.9558 153.429 86.9525C153.137 86.957 152.846 86.9123 152.568 86.8204C152.121 86.6252 151.718 86.3426 151.382 85.9894C151.264 85.8893 151.159 85.7755 151.069 85.6505C150.973 85.4914 150.901 85.3192 150.855 85.1393C150.7 84.671 150.577 84.1924 150.488 83.7071C150.43 83.3356 150.411 82.9584 150.384 82.5832C150.309 81.4745 150.309 80.2491 150.088 79.1826Z" fill="#6C63FF"/>
|
||||
<path d="M148.933 101.154C148.933 101.154 148.477 107.172 151.326 108.192C154.175 109.213 151.669 103.197 151.669 103.197L150.755 101.382L148.933 101.154Z" fill="#A0616A"/>
|
||||
<path d="M158.62 101.154C158.62 101.154 159.076 107.172 156.227 108.192C153.378 109.213 155.884 103.197 155.884 103.197L156.798 101.382L158.62 101.154Z" fill="#A0616A"/>
|
||||
<path opacity="0.1" d="M146.425 81.0686L145.514 82.5448C145.514 82.5448 146.311 87.6533 146.425 88.5609C146.523 89.2158 146.676 89.8613 146.882 90.4909C146.882 90.4909 146.996 93.2155 146.996 94.238C146.996 95.2605 147.573 96.9626 147.573 96.9626C147.653 97.9277 147.847 98.88 148.149 99.8002C148.605 101.049 149.06 102.525 149.06 102.525C149.06 102.525 149.637 100.936 151.909 103.319C152.164 103.062 152.307 102.716 152.307 102.354C152.307 101.993 152.164 101.647 151.909 101.389C151.909 101.389 151.227 98.3259 151.227 96.7348C151.227 95.1437 149.972 87.5442 149.972 87.5442C149.972 87.5442 149.157 78.905 146.425 81.0686Z" fill="black"/>
|
||||
<path d="M146.197 80.9479L145.286 82.4242C145.286 82.4242 146.084 87.5326 146.197 88.4402C146.296 89.0952 146.45 89.7408 146.657 90.3703C146.657 90.3703 146.77 93.0949 146.77 94.1154C146.77 95.136 147.347 96.8401 147.347 96.8401C147.427 97.8052 147.62 98.7576 147.924 99.6777C148.379 100.928 148.837 102.402 148.837 102.402C148.837 102.402 149.413 100.813 151.686 103.197C151.94 102.94 152.082 102.594 152.082 102.233C152.082 101.872 151.94 101.526 151.686 101.269C151.686 101.269 151.001 98.2053 151.001 96.6141C151.001 95.023 149.748 87.4235 149.748 87.4235C149.748 87.4235 148.933 78.7901 146.197 80.9479Z" fill="#6C63FF"/>
|
||||
<path opacity="0.1" d="M161.242 80.1534L161.819 80.8293C161.819 80.8293 162.49 84.6932 161.008 89.5757L160.552 94.0025C160.552 94.0025 159.754 97.7496 159.641 98.6572C159.527 99.5648 159.527 99.6777 159.299 100.019C159.229 100.098 159.191 100.2 159.191 100.306C159.191 100.411 159.229 100.513 159.299 100.593L158.614 103.082C158.614 103.082 157.59 101.834 155.538 103.423C155.538 103.423 154.962 102.515 155.423 101.721C155.884 100.926 155.879 100.585 155.765 100.357C155.652 100.13 156.221 98.9961 156.221 98.7682C156.221 98.5404 157.024 93.3228 157.024 93.3228C157.024 93.3228 157.367 88.2143 157.709 86.5122C157.918 85.4648 157.914 83.1308 157.878 81.488C157.841 79.7762 159.921 78.8495 161.146 80.0519C161.175 80.0826 161.209 80.1113 161.242 80.1534Z" fill="black"/>
|
||||
<path d="M161.584 79.9198L162.161 80.5957C162.161 80.5957 162.832 84.4615 161.35 89.3421L160.894 93.7689C160.894 93.7689 160.096 97.516 159.983 98.4236C159.869 99.3312 159.868 99.4461 159.641 99.7869C159.571 99.8664 159.533 99.9685 159.533 100.074C159.533 100.18 159.571 100.282 159.641 100.361L158.96 102.858C158.96 102.858 157.936 101.608 155.884 103.197C155.884 103.197 155.308 102.289 155.771 101.495C156.234 100.7 156.227 100.359 156.113 100.133C156 99.9075 156.569 98.7702 156.569 98.5442C156.569 98.3183 157.367 93.095 157.367 93.095C157.367 93.095 157.709 87.9865 158.051 86.2824C158.393 84.5783 158.164 79.4718 158.164 79.4718C158.164 79.4718 159.989 78.2234 161.584 79.9198Z" fill="#6C63FF"/>
|
||||
<path d="M153.947 78.3383C156.465 78.3383 158.506 76.3049 158.506 73.7966C158.506 71.2883 156.465 69.2549 153.947 69.2549C151.428 69.2549 149.387 71.2883 149.387 73.7966C149.387 76.3049 151.428 78.3383 153.947 78.3383Z" fill="#A0616A"/>
|
||||
<path opacity="0.1" d="M156.324 66.9783C156.105 67.5877 155.704 68.1159 155.176 68.4923C154.647 68.8686 154.015 69.0752 153.365 69.0844C152.715 69.0935 152.078 68.9048 151.539 68.5435C151 68.1822 150.584 67.6655 150.348 67.0625C152.128 66.3483 153.946 66.984 153.946 66.984C154.856 66.6662 155.644 66.6949 156.324 66.9783Z" fill="black"/>
|
||||
<path d="M153.946 67.2119C153.946 67.2119 145.171 64.1483 147.337 79.018C147.337 79.018 149.275 80.2664 150.755 79.4718C150.755 79.4718 149.731 69.1419 153.719 69.5957C157.708 70.0495 157.024 79.2458 157.024 79.2458C157.024 79.2458 159.304 79.9256 159.988 78.6714C160.673 77.4173 159.76 65.1765 153.946 67.2119Z" fill="#3F3D56"/>
|
||||
<path opacity="0.1" d="M153.72 68.914C150.982 68.6038 150.606 73.3696 150.644 76.391C150.677 73.3868 151.184 69.3065 153.72 69.5957C156.567 69.9192 157.034 74.7003 157.067 77.4077C157.099 74.9224 156.826 69.2682 153.72 68.914Z" fill="black"/>
|
||||
<path opacity="0.1" d="M147.338 78.3363C147.139 77.0347 147.026 75.7216 146.998 74.4054C146.988 75.9495 147.102 77.4918 147.338 79.0179C147.338 79.0179 149.276 80.2663 150.756 79.4717C150.756 79.4717 150.733 79.2266 150.706 78.815C149.231 79.556 147.338 78.3363 147.338 78.3363Z" fill="black"/>
|
||||
<path opacity="0.1" d="M159.989 78.0051C159.35 79.1692 157.33 78.658 157.057 78.5795C157.044 79.0008 157.024 79.2535 157.024 79.2535C157.024 79.2535 159.304 79.9332 159.989 78.6791C160.129 78.4225 160.202 77.6968 160.181 76.7261C160.162 77.3484 160.094 77.8136 159.989 78.0051Z" fill="black"/>
|
||||
<path d="M207.929 190.853C208.84 189.171 207.806 187.111 206.618 185.612C205.43 184.113 203.979 182.548 204.009 180.634C204.053 177.886 206.979 176.266 209.319 174.809C211.053 173.729 212.653 172.448 214.084 170.993C214.661 170.409 215.213 169.785 215.549 169.038C216.034 167.966 216.02 166.741 215.99 165.569C215.888 161.649 215.696 157.734 215.413 153.824" stroke="#3F3D56" stroke-width="4" stroke-miterlimit="10"/>
|
||||
<path d="M219.85 153.617C219.817 152.9 219.603 152.203 219.228 151.59C218.853 150.976 218.329 150.467 217.705 150.109L216.743 152.005L216.772 149.707C215.898 149.45 214.964 149.475 214.105 149.781C213.247 150.087 212.508 150.656 211.995 151.407C211.483 152.159 211.223 153.053 211.254 153.96C211.285 154.868 211.605 155.742 212.168 156.457C212.73 157.172 213.507 157.69 214.384 157.937C215.262 158.183 216.195 158.146 217.05 157.83C217.905 157.513 218.636 156.935 219.139 156.177C219.642 155.42 219.89 154.522 219.848 153.615L219.85 153.617Z" fill="#6C63FF"/>
|
||||
<path d="M212.184 182.604C211.733 183.478 210.994 184.17 210.091 184.565C209.188 184.961 208.176 185.035 207.225 184.775C206.274 184.516 205.441 183.938 204.867 183.14C204.292 182.341 204.011 181.37 204.07 180.39C204.129 179.409 204.525 178.479 205.191 177.754C205.857 177.03 206.753 176.556 207.729 176.411C208.704 176.267 209.7 176.461 210.549 176.961C211.398 177.461 212.048 178.236 212.391 179.157L209.7 181.334L212.655 180.651C212.656 181.33 212.495 182 212.184 182.604Z" fill="#6C63FF"/>
|
||||
<path d="M210.06 174.288C209.008 174.333 207.976 173.991 207.16 173.328C206.344 172.666 205.8 171.728 205.632 170.693C205.464 169.657 205.683 168.597 206.248 167.711C206.813 166.826 207.684 166.178 208.697 165.89L208.674 167.656L209.646 165.741H209.658C210.224 165.711 210.791 165.792 211.326 165.981C211.861 166.17 212.353 166.462 212.774 166.841C213.194 167.22 213.536 167.678 213.778 168.189C214.02 168.7 214.159 169.254 214.185 169.818C214.212 170.382 214.126 170.947 213.933 171.478C213.739 172.009 213.442 172.497 213.059 172.913C212.675 173.33 212.213 173.666 211.698 173.904C211.183 174.142 210.627 174.276 210.06 174.298V174.288Z" fill="#6C63FF"/>
|
||||
<path d="M220.498 167.37C219.833 167.401 219.169 167.278 218.56 167.01C217.951 166.743 217.413 166.338 216.987 165.828C216.562 165.317 216.262 164.716 216.11 164.07C215.958 163.424 215.958 162.752 216.111 162.107C216.264 161.462 216.566 160.861 216.992 160.351C217.418 159.841 217.957 159.437 218.567 159.171C219.176 158.904 219.84 158.782 220.505 158.814C221.17 158.846 221.818 159.031 222.399 159.355L221.63 161.429L223.193 159.936C223.818 160.507 224.26 161.251 224.462 162.072C224.665 162.893 224.618 163.756 224.329 164.551C224.04 165.346 223.521 166.038 222.837 166.54C222.153 167.042 221.336 167.331 220.488 167.37H220.498Z" fill="#6C63FF"/>
|
||||
<path opacity="0.1" d="M219.273 154.758C218.279 154.867 217.314 155.176 216.319 155.237C215.323 155.298 214.229 155.061 213.6 154.28C213.26 153.864 213.091 153.339 212.805 152.886C212.532 152.464 212.161 152.116 211.722 151.871C211.445 152.414 211.287 153.01 211.259 153.618C211.232 154.227 211.334 154.834 211.561 155.4C211.788 155.966 212.133 156.477 212.574 156.899C213.014 157.322 213.54 157.645 214.117 157.849C214.693 158.053 215.307 158.132 215.916 158.081C216.526 158.03 217.117 157.85 217.651 157.553C218.185 157.256 218.649 156.849 219.013 156.359C219.377 155.869 219.631 155.308 219.76 154.712C219.596 154.73 219.435 154.741 219.273 154.758Z" fill="black"/>
|
||||
<path opacity="0.1" d="M220.497 167.37C219.756 167.404 219.019 167.247 218.357 166.913C217.695 166.58 217.131 166.081 216.719 165.466C216.308 164.852 216.063 164.141 216.008 163.404C215.953 162.668 216.09 161.929 216.407 161.261C216.749 161.489 217.043 161.783 217.272 162.124C217.577 162.584 217.764 163.116 218.123 163.539C218.792 164.322 219.938 164.579 220.976 164.533C222.014 164.487 223.014 164.192 224.052 164.096C224.196 164.085 224.34 164.075 224.486 164.071C224.272 164.979 223.767 165.792 223.047 166.387C222.327 166.982 221.432 167.328 220.497 167.37Z" fill="black"/>
|
||||
<path opacity="0.1" d="M210.059 174.288C209.325 174.323 208.595 174.169 207.937 173.842C207.28 173.516 206.718 173.027 206.304 172.422C205.891 171.817 205.639 171.117 205.574 170.389C205.51 169.66 205.633 168.927 205.933 168.259C206.288 168.491 206.596 168.786 206.843 169.13C207.177 169.599 207.385 170.139 207.777 170.574C208.502 171.378 209.72 171.661 210.82 171.635C211.885 171.612 212.91 171.351 213.969 171.271C213.709 172.114 213.193 172.856 212.493 173.396C211.793 173.936 210.943 174.248 210.059 174.288Z" fill="black"/>
|
||||
<path opacity="0.1" d="M212.183 182.604C211.685 183.588 210.825 184.343 209.782 184.712C208.739 185.081 207.593 185.035 206.583 184.583C205.574 184.132 204.777 183.311 204.36 182.29C203.943 181.269 203.937 180.127 204.344 179.102C204.698 179.333 205.016 179.616 205.287 179.941C205.697 180.436 205.966 180.999 206.441 181.461C207.319 182.321 208.738 182.675 210.001 182.707C210.73 182.715 211.458 182.681 212.183 182.604Z" fill="black"/>
|
||||
<path d="M201.445 188.917C201.445 188.917 204.838 188.813 205.867 188.088C206.895 187.362 211.088 186.497 211.342 187.659C211.595 188.821 216.442 193.445 212.611 193.476C208.779 193.506 203.708 192.882 202.687 192.262C201.666 191.641 201.445 188.917 201.445 188.917Z" fill="#656380"/>
|
||||
<path opacity="0.2" d="M212.672 193.079C208.841 193.11 203.769 192.484 202.749 191.865C201.98 191.392 201.663 189.702 201.559 188.921H201.445C201.445 188.921 201.661 191.647 202.681 192.266C203.702 192.884 208.773 193.51 212.605 193.48C213.71 193.48 214.093 193.079 214.072 192.499C213.918 192.846 213.497 193.064 212.672 193.079Z" fill="black"/>
|
||||
<path d="M111.093 70.2064L107.585 72.4217L109.715 68.5636C109.113 68.0849 108.369 67.8195 107.6 67.8092H107.542C107.299 67.8126 107.056 67.7947 106.816 67.7556L105.626 68.5062L106.135 67.5833C105.293 67.2902 104.565 66.7401 104.055 66.0113L101.927 67.3516L103.273 64.9161C102.027 63.4283 100.351 62.515 98.5032 62.515C96.2905 62.515 94.3201 63.8266 93.0474 65.8696C92.6711 66.4804 92.1393 66.9814 91.506 67.3217C90.8727 67.6619 90.1603 67.8295 89.4411 67.8073H89.3219C86.8785 67.8073 84.9004 70.5664 84.9004 73.9707C84.9004 77.3751 86.8804 80.1323 89.3219 80.1323C89.8581 80.1307 90.3859 79.9993 90.8598 79.7493C92.4534 78.9241 94.545 78.9088 96.2136 79.646C96.929 79.9664 97.7043 80.133 98.4887 80.1346C99.2731 80.1363 100.049 79.973 100.766 79.6555C102.423 78.9337 104.489 78.949 106.074 79.7589C106.543 80.0066 107.066 80.1379 107.598 80.1419C110.041 80.1419 112.019 77.3828 112.019 73.9803C112.034 72.6648 111.715 71.3668 111.093 70.2064Z" fill="#F2F2F2"/>
|
||||
<path opacity="0.03" d="M104.478 79.2229C103.201 78.9811 101.882 79.1238 100.687 79.6326C99.9704 79.9498 99.1948 80.1129 98.4107 80.1113C97.6266 80.1096 96.8517 79.9432 96.1366 79.623C94.466 78.8859 92.3745 78.9012 90.7808 79.7264C90.3069 79.9764 89.7791 80.1078 89.2429 80.1094C87.0725 80.1094 85.2674 77.9304 84.8906 75.0584C85.3242 74.7438 85.6924 74.3484 85.9748 73.8942C87.2552 71.8531 89.2179 70.5377 91.4306 70.5377C93.6432 70.5377 95.5906 71.834 96.8632 73.854C97.243 74.4643 97.7745 74.9667 98.4063 75.3125C99.0381 75.6584 99.7488 75.8359 100.47 75.8281H100.52C102.25 75.83 103.749 77.2105 104.478 79.2229Z" fill="black"/>
|
||||
<path d="M202.804 74.7175L201.06 75.8223L202.123 73.9076C201.823 73.6658 201.45 73.531 201.064 73.5247H201.037C200.915 73.5264 200.794 73.5174 200.674 73.4979L200.08 73.8808L200.33 73.4098C199.909 73.264 199.546 72.99 199.292 72.6267L198.23 73.2968L198.901 72.0829C198.619 71.72 198.259 71.4242 197.848 71.2169C197.437 71.0096 196.984 70.896 196.523 70.8843C195.418 70.8843 194.436 71.5391 193.801 72.5577C193.613 72.8611 193.347 73.1095 193.031 73.2776C192.715 73.4457 192.36 73.5277 192.002 73.5151H191.942C190.723 73.5151 189.735 74.8918 189.735 76.5786C189.735 78.2655 190.723 79.6518 191.942 79.6518C192.21 79.6508 192.474 79.5851 192.711 79.4603C193.126 79.2596 193.58 79.151 194.041 79.1421C194.502 79.1331 194.959 79.2241 195.381 79.4086C195.739 79.567 196.125 79.6489 196.517 79.6489C196.908 79.6489 197.294 79.567 197.652 79.4086C198.071 79.2278 198.524 79.1388 198.981 79.1477C199.438 79.1566 199.887 79.2632 200.299 79.4603C200.536 79.5852 200.8 79.6509 201.068 79.6518C202.287 79.6518 203.275 78.277 203.275 76.5786C203.277 75.9288 203.115 75.2889 202.804 74.7175Z" fill="#F2F2F2"/>
|
||||
<path opacity="0.03" d="M199.507 79.2152C198.87 79.0955 198.213 79.1668 197.617 79.4201C197.26 79.5785 196.873 79.6603 196.482 79.6603C196.091 79.6603 195.704 79.5785 195.347 79.4201C194.924 79.2355 194.466 79.1445 194.005 79.1535C193.544 79.1624 193.09 79.271 192.675 79.4717C192.438 79.5971 192.174 79.6628 191.906 79.6632C190.821 79.6632 189.922 78.5776 189.733 77.1454C189.949 76.9898 190.133 76.7949 190.276 76.571C190.91 75.5523 191.894 74.8994 192.998 74.8994C194.101 74.8994 195.072 75.5447 195.706 76.5518C195.896 76.8565 196.161 77.1072 196.476 77.2796C196.791 77.4521 197.146 77.5404 197.506 77.536H197.534C198.398 77.5226 199.138 78.2119 199.507 79.2152Z" fill="black"/>
|
||||
<path d="M88.2823 103.331L91.1005 105.108L89.3934 102.016C89.8775 101.632 90.4761 101.42 91.0947 101.412H91.139C91.3321 101.415 91.525 101.401 91.7157 101.37L92.6672 101.972L92.2539 101.232C92.9281 100.996 93.511 100.556 93.9206 99.9726L95.6258 101.049L94.5608 99.0976C95.5585 97.9066 96.9022 97.1829 98.3806 97.1829C100.155 97.1829 101.733 98.2321 102.754 99.8635C103.055 100.352 103.48 100.753 103.986 101.026C104.493 101.299 105.062 101.433 105.638 101.416H105.734C107.691 101.416 109.277 103.626 109.277 106.352C109.277 109.079 107.691 111.29 105.734 111.29C105.303 111.289 104.879 111.183 104.498 110.982C103.831 110.66 103.103 110.485 102.362 110.471C101.622 110.457 100.887 110.603 100.209 110.9C99.6342 111.156 99.0119 111.288 98.3825 111.288C97.7531 111.288 97.1308 111.156 96.5562 110.9C95.8829 110.609 95.1547 110.466 94.4211 110.481C93.6874 110.495 92.9654 110.666 92.3039 110.982C91.9268 111.178 91.5083 111.281 91.0832 111.283C89.1243 111.283 87.5383 109.073 87.5383 106.345C87.5291 105.294 87.7849 104.258 88.2823 103.331Z" fill="#F2F2F2"/>
|
||||
<path opacity="0.03" d="M93.5781 110.555C94.601 110.363 95.6581 110.478 96.6155 110.885C97.1901 111.14 97.8124 111.273 98.4418 111.273C99.0711 111.273 99.6934 111.14 100.268 110.885C100.947 110.588 101.682 110.442 102.422 110.456C103.163 110.47 103.892 110.644 104.559 110.967C104.939 111.168 105.363 111.273 105.793 111.275C107.533 111.275 108.978 109.531 109.28 107.229C108.933 106.976 108.638 106.659 108.411 106.295C107.39 104.66 105.812 103.614 104.038 103.614C102.263 103.614 100.706 104.652 99.6855 106.272C99.3818 106.76 98.9568 107.162 98.4517 107.438C97.9466 107.715 97.3784 107.857 96.802 107.852H96.7577C95.3621 107.838 94.1625 108.945 93.5781 110.555Z" fill="black"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_3002_699">
|
||||
<rect width="224" height="224" fill="white" transform="translate(43 25)"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip1_3002_699">
|
||||
<rect width="213" height="140" fill="white" transform="translate(49 62)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 49 KiB |
46
public/images/courses/coursesThree.svg
Normal file
@@ -0,0 +1,46 @@
|
||||
<svg width="306" height="266" viewBox="0 0 306 266" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="306" height="266" rx="10" fill="#F3F3F3"/>
|
||||
<rect width="306" height="266" rx="10" fill="#82B352"/>
|
||||
<g clip-path="url(#clip0_3002_936)">
|
||||
<g clip-path="url(#clip1_3002_936)">
|
||||
<path d="M78.8493 211.928C95.3346 211.928 108.699 198.547 108.699 182.041C108.699 165.535 95.3346 152.154 78.8493 152.154C62.364 152.154 49 165.535 49 182.041C49 198.547 62.364 211.928 78.8493 211.928Z" fill="#F2F2F2"/>
|
||||
<path d="M114.957 195.297C100.366 195.297 86.2256 190.232 74.9463 180.963C63.6671 171.695 55.9463 158.798 53.0997 144.468C50.253 130.139 52.4566 115.265 59.3348 102.381C66.2131 89.4958 77.3405 79.3976 90.8211 73.8067C104.302 68.2157 119.301 67.4779 133.264 71.7189C147.227 75.9598 159.29 84.9173 167.396 97.0649C175.503 109.213 179.152 123.799 177.722 138.338C176.292 152.878 169.871 166.471 159.553 176.802C153.71 182.684 146.76 187.347 139.105 190.522C131.45 193.697 123.242 195.32 114.957 195.297ZM114.957 69.4821C80.4462 69.4821 52.3697 97.5941 52.3697 132.149C52.3697 166.703 80.4462 194.815 114.957 194.815C149.467 194.815 177.544 166.703 177.544 132.149C177.544 97.5941 149.467 69.4821 114.957 69.4821Z" fill="#2F2E41"/>
|
||||
<path d="M147.815 152.136L147.808 152.14L116.724 169.471L82.6852 152.43L82.0986 152.136L83.8652 116.76L114.604 94.8265L114.943 95.0389L146.755 114.991L147.815 152.136Z" fill="#6C63FF"/>
|
||||
<path opacity="0.3" d="M147.809 152.14L116.724 169.471L82.6855 152.43L112.837 131.264L147.809 152.14Z" fill="black"/>
|
||||
<path opacity="0.1" d="M147.815 152.136L112.837 131.264L114.943 95.0389L146.755 114.991L147.815 152.136Z" fill="black"/>
|
||||
<path d="M83.413 127.676L83.2402 127.431L114.322 105.465L147.155 126.076L146.996 126.331L114.331 105.825L83.413 127.676Z" fill="#F2F2F2"/>
|
||||
<path d="M82.8106 139.695L82.6426 139.447L113.566 118.425L113.647 118.471L147.183 137.502L147.035 137.762L113.581 118.778L82.8106 139.695Z" fill="#F2F2F2"/>
|
||||
<path d="M94.6099 158.487L94.4521 158.233L125.618 138.896V101.828H125.917V139.063L94.6099 158.487Z" fill="#F2F2F2"/>
|
||||
<path d="M106.842 164.611L106.683 164.357L136.692 145.511V108.773H136.991V145.677L106.842 164.611Z" fill="#F2F2F2"/>
|
||||
<path d="M136.58 158.491L101.679 139.075L101.684 138.982L103.521 102.621L103.82 102.636L101.987 138.903L136.725 158.229L136.58 158.491Z" fill="#F2F2F2"/>
|
||||
<path d="M125.599 164.617L91.0898 146.51L91.0952 146.413L93.1295 110.035L93.4284 110.052L91.3997 146.334L125.738 164.351L125.599 164.617Z" fill="#F2F2F2"/>
|
||||
<path d="M153.713 94.7897C160.36 94.7897 165.749 89.3942 165.749 82.7385C165.749 76.0827 160.36 70.6872 153.713 70.6872C147.065 70.6872 141.677 76.0827 141.677 82.7385C141.677 89.3942 147.065 94.7897 153.713 94.7897Z" fill="#3F3D56"/>
|
||||
<path d="M263 211.446H55.9805V211.928H263V211.446Z" fill="#2F2E41"/>
|
||||
<path d="M238.965 146.623L241.716 154.168C241.716 154.168 238.845 162.791 241.716 163.031C244.587 163.271 244.946 154.767 244.946 154.767L243.391 145.665L238.965 146.623Z" fill="#FFB9B9"/>
|
||||
<path d="M240.281 121.951L242.314 123.987V133.688C242.314 133.688 243.511 135.484 243.271 135.963C243.032 136.442 242.793 136.442 243.032 136.802C243.271 137.161 243.511 137.401 243.271 137.64C243.155 137.796 243.092 137.985 243.092 138.179C243.092 138.373 243.155 138.563 243.271 138.718C243.511 138.958 243.989 139.317 243.63 139.676C243.271 140.036 242.793 139.796 243.271 141.113C243.75 142.431 244.587 142.79 244.348 143.269C244.109 143.748 244.109 144.946 244.109 144.946L238.965 145.665L237.889 132.131L240.281 121.951Z" fill="#D0CDE1"/>
|
||||
<path d="M244.348 144.826L238.367 145.066L238.607 147.581L243.87 146.623L244.348 144.826Z" fill="#3F3D56"/>
|
||||
<path d="M227.9 109.435L227.183 116.621L234.479 117.699L235.017 113.567L235.556 109.435H227.9Z" fill="#FFB9B9"/>
|
||||
<path opacity="0.1" d="M227.9 109.435L227.183 116.621L234.479 117.699L235.017 113.567L235.556 109.435H227.9Z" fill="black"/>
|
||||
<path d="M212.052 143.629L216.119 152.372C216.119 152.372 216.836 156.444 217.913 156.564C218.99 156.683 220.066 152.372 220.066 152.372L218.631 150.096L216.956 143.629L212.052 143.629Z" fill="#FFB9B9"/>
|
||||
<path d="M220.544 151.533L217.195 156.803C217.195 156.803 213.965 206.986 214.444 206.627C214.922 206.267 216.477 206.147 217.075 205.189C217.674 204.231 221.382 205.189 221.382 205.189L223.535 202.914V201.117C223.535 200.758 227.841 173.331 227.841 173.331V180.278C227.841 180.278 226.525 205.788 228.678 205.549C230.831 205.309 235.257 203.872 235.257 203.872C235.257 203.872 241.597 156.204 239.683 154.408C237.769 152.611 236.932 148.539 236.932 148.539L220.544 151.533Z" fill="#2F2E41"/>
|
||||
<path d="M231.908 111.77C235.079 111.77 237.649 109.196 237.649 106.021C237.649 102.846 235.079 100.273 231.908 100.273C228.737 100.273 226.166 102.846 226.166 106.021C226.166 109.196 228.737 111.77 231.908 111.77Z" fill="#FFB9B9"/>
|
||||
<path d="M219.109 117.759L218.272 117.28C218.272 117.28 214.564 119.795 213.368 125.424C212.171 131.053 211.334 132.49 211.334 132.49C211.334 132.49 210.138 132.73 210.975 133.568C211.813 134.406 211.813 134.287 211.095 134.766C210.377 135.245 209.899 134.287 210.377 135.245C210.856 136.203 211.454 135.963 210.975 136.562C210.497 137.161 209.66 137.161 210.138 137.64C210.616 138.119 209.66 139.197 210.258 139.676C210.856 140.155 211.095 140.275 211.095 141.113C211.091 141.603 211.172 142.089 211.334 142.551H217.554C217.554 142.551 216.358 140.275 216.717 139.796C217.076 139.317 217.195 138.838 216.956 138.598C216.717 138.359 215.999 138.838 216.717 138.239C217.435 137.64 217.674 137.999 217.435 137.281C217.195 136.562 216.717 136.922 217.195 136.562C217.674 136.203 218.033 136.323 217.793 135.963C217.554 135.604 217.076 135.604 217.554 135.365C218.033 135.125 218.391 135.365 218.272 134.766C218.152 134.167 218.033 134.406 218.272 134.167C218.511 133.927 221.023 125.783 221.023 125.544C221.023 125.304 219.109 117.759 219.109 117.759Z" fill="#D0CDE1"/>
|
||||
<path d="M217.913 142.072L210.377 142.551L212.291 144.347L217.554 144.467L217.913 142.072Z" fill="#3F3D56"/>
|
||||
<path d="M220.066 151.054L218.511 153.929C218.511 153.929 223.176 154.527 224.85 155.126C226.525 155.725 230.831 156.563 230.831 156.563L231.908 152.372L220.066 151.054Z" fill="#3F3D56"/>
|
||||
<path d="M233.702 152.372L235.018 156.324L240.281 155.246L239.683 151.533L233.702 152.372Z" fill="#3F3D56"/>
|
||||
<path d="M235.855 113.687C235.855 113.687 235.496 113.447 234.659 113.926C233.822 114.405 231.07 114.645 229.755 113.208C228.439 111.77 227.482 110.573 227.123 110.812C226.764 111.052 226.525 113.806 226.525 113.806L225.329 114.765L218.271 117.28L218.87 133.448L219.946 137.161C219.946 137.161 219.109 140.036 220.185 141.712C221.262 143.389 219.587 143.988 219.587 143.988C219.587 143.988 219.228 144.467 219.468 145.665C219.707 146.862 219.228 151.294 219.228 151.294C219.228 151.294 229.396 155.845 240.042 151.893L238.845 147.341L238.247 137.161C238.247 137.161 238.845 135.484 238.726 134.766C238.606 134.047 242.314 123.987 242.314 123.987C242.314 123.987 241.716 118.956 238.606 117.878C235.496 116.801 235.018 115.723 235.018 115.723C235.018 115.723 236.453 114.166 235.855 113.687Z" fill="#D0CDE1"/>
|
||||
<path d="M226.126 106.758C226.126 106.758 225.53 105.862 225.76 104.898C225.897 104.35 225.951 103.785 225.92 103.222C226.177 102.386 226.499 101.573 226.883 100.788C227.365 99.9155 227.135 99.5481 228.649 99.2725C230.162 98.997 229.543 97.0224 233.533 99.1577C233.668 99.3459 233.855 99.49 234.072 99.5717C234.288 99.6535 234.524 99.6692 234.749 99.617C235.574 99.4562 235.873 100.604 235.873 100.604C235.873 100.604 236.423 100.283 236.629 100.742C236.836 101.201 238.307 100.466 238.307 103.566C238.307 106.666 236.633 109.435 236.633 109.435C236.633 109.435 236.755 104.221 234.027 103.693C231.298 103.164 228.362 101.626 227.651 103.601C227.268 104.709 226.756 105.769 226.126 106.758Z" fill="#2F2E41"/>
|
||||
<path d="M236.693 107.998C236.99 107.998 237.231 107.676 237.231 107.279C237.231 106.882 236.99 106.56 236.693 106.56C236.395 106.56 236.154 106.882 236.154 107.279C236.154 107.676 236.395 107.998 236.693 107.998Z" fill="#FFB9B9"/>
|
||||
<path d="M233.642 203.447L234.483 205.974C234.483 205.974 234.483 208.501 235.324 209.765C236.166 211.028 237.007 213.766 233.642 213.976C230.277 214.187 228.805 212.923 228.805 212.923C228.805 212.923 229.436 211.239 228.805 210.607C228.174 209.975 228.805 208.712 228.805 208.712L229.436 203.658L233.642 203.447Z" fill="#F9CD92"/>
|
||||
<path d="M217.255 203.447L216.414 205.974C216.414 205.974 216.414 208.501 215.573 209.765C214.731 211.028 213.89 213.766 217.255 213.976C220.62 214.187 222.092 212.923 222.092 212.923C222.092 212.923 221.461 211.239 222.092 210.607C222.723 209.975 222.092 208.712 222.092 208.712L221.461 203.658L217.255 203.447Z" fill="#2F2E41"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_3002_936">
|
||||
<rect width="224" height="224" fill="white" transform="translate(43 25)"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip1_3002_936">
|
||||
<rect width="214" height="145" fill="white" transform="translate(49 69)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.8 KiB |
68
public/images/courses/coursesTwo.svg
Normal file
@@ -0,0 +1,68 @@
|
||||
<svg width="306" height="266" viewBox="0 0 306 266" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="306" height="266" rx="10" fill="#F3F3F3"/>
|
||||
<rect width="306" height="266" rx="10" fill="#BAE2EF"/>
|
||||
<g clip-path="url(#clip0_3002_1373)">
|
||||
<g clip-path="url(#clip1_3002_1373)">
|
||||
<path d="M265 162.383C265 152.296 256.788 128.36 246.658 128.36C236.528 128.36 228.316 152.296 228.316 162.383C228.32 167.228 230.254 171.873 233.693 175.298C237.132 178.723 241.796 180.647 246.658 180.647C251.52 180.647 256.184 178.723 259.623 175.298C263.063 171.873 264.996 167.228 265 162.383Z" fill="#F2F2F2"/>
|
||||
<path d="M246.659 206.817C246.678 206.817 246.698 206.813 246.716 206.806C246.735 206.798 246.751 206.787 246.765 206.773C246.779 206.759 246.79 206.743 246.798 206.725C246.806 206.706 246.809 206.687 246.809 206.667V143.698C246.809 143.659 246.793 143.621 246.765 143.593C246.737 143.565 246.699 143.549 246.659 143.549C246.619 143.549 246.58 143.565 246.552 143.593C246.524 143.621 246.508 143.659 246.508 143.698V206.667C246.508 206.687 246.512 206.706 246.519 206.725C246.527 206.743 246.538 206.759 246.552 206.773C246.566 206.787 246.583 206.798 246.601 206.806C246.619 206.813 246.639 206.817 246.659 206.817Z" fill="#CCCCCC"/>
|
||||
<path d="M246.659 155.855C246.678 155.855 246.698 155.851 246.716 155.844C246.735 155.836 246.751 155.825 246.765 155.811L254.025 148.582C254.053 148.554 254.069 148.516 254.069 148.476C254.069 148.436 254.053 148.398 254.025 148.37C253.996 148.342 253.958 148.326 253.918 148.326C253.878 148.326 253.84 148.342 253.812 148.37L246.552 155.599C246.531 155.62 246.517 155.646 246.511 155.676C246.505 155.705 246.508 155.735 246.519 155.762C246.531 155.79 246.55 155.813 246.575 155.83C246.6 155.846 246.629 155.855 246.659 155.855Z" fill="#CCCCCC"/>
|
||||
<path d="M246.658 168.37C246.688 168.37 246.717 168.361 246.742 168.344C246.766 168.328 246.786 168.304 246.797 168.277C246.809 168.25 246.812 168.219 246.806 168.19C246.8 168.161 246.786 168.134 246.765 168.113L234.607 156.007C234.593 155.993 234.576 155.982 234.558 155.975C234.54 155.967 234.52 155.963 234.5 155.963C234.481 155.963 234.461 155.967 234.443 155.975C234.424 155.982 234.408 155.993 234.394 156.007C234.38 156.021 234.369 156.038 234.361 156.056C234.354 156.074 234.35 156.094 234.35 156.113C234.35 156.133 234.353 156.153 234.361 156.171C234.369 156.189 234.38 156.206 234.394 156.22L246.551 168.326C246.565 168.34 246.582 168.351 246.6 168.358C246.618 168.366 246.638 168.37 246.658 168.37Z" fill="#CCCCCC"/>
|
||||
<path d="M262.662 207H202.676C202.62 207 202.567 206.978 202.527 206.939C202.488 206.9 202.466 206.846 202.466 206.791C202.466 206.736 202.488 206.682 202.527 206.643C202.567 206.604 202.62 206.582 202.676 206.582H262.662C262.718 206.582 262.771 206.604 262.81 206.643C262.85 206.682 262.872 206.736 262.872 206.791C262.872 206.846 262.85 206.9 262.81 206.939C262.771 206.978 262.718 207 262.662 207Z" fill="#CCCCCC"/>
|
||||
<path d="M220.311 204.33L217.74 204.33L216.517 194.447L220.312 194.447L220.311 204.33Z" fill="#FFB8B8"/>
|
||||
<path d="M215.904 203.598H220.863V206.709H212.781C212.781 205.884 213.11 205.093 213.696 204.509C214.281 203.926 215.076 203.598 215.904 203.598Z" fill="#2F2E41"/>
|
||||
<path d="M238.969 201.428L236.63 202.492L231.396 194.009L234.849 192.438L238.969 201.428Z" fill="#FFB8B8"/>
|
||||
<path d="M234.655 202.587L239.166 200.534L240.463 203.364L233.112 206.709C232.941 206.338 232.846 205.936 232.831 205.528C232.817 205.12 232.883 204.713 233.026 204.33C233.17 203.947 233.387 203.596 233.666 203.297C233.946 202.998 234.282 202.756 234.655 202.587Z" fill="#2F2E41"/>
|
||||
<path d="M220.147 201.724H217.691C217.452 201.723 217.223 201.633 217.049 201.471C216.874 201.31 216.767 201.089 216.749 200.852L215.41 165.206C215.4 165.069 215.42 164.932 215.469 164.804C215.517 164.676 215.594 164.56 215.692 164.464C215.79 164.369 215.909 164.295 216.038 164.25C216.168 164.205 216.306 164.188 216.443 164.201L230.65 165.705C230.88 165.727 231.094 165.833 231.251 166.002C231.408 166.172 231.497 166.392 231.502 166.623L231.799 182.347C231.801 182.432 231.818 182.517 231.848 182.596L237.676 197.655C237.721 197.772 237.743 197.896 237.739 198.02C237.736 198.145 237.707 198.268 237.656 198.381C237.604 198.495 237.53 198.597 237.439 198.682C237.347 198.767 237.239 198.833 237.122 198.876L234.633 199.79C234.416 199.869 234.178 199.867 233.964 199.784C233.749 199.7 233.572 199.542 233.467 199.338L226.308 185.467C226.269 185.391 226.24 185.311 226.223 185.228L225 179.356C224.965 179.186 224.869 179.034 224.732 178.927C224.594 178.821 224.422 178.766 224.248 178.774C224.074 178.782 223.908 178.852 223.78 178.97C223.653 179.089 223.572 179.249 223.552 179.422L221.085 200.891C221.059 201.12 220.949 201.332 220.776 201.486C220.603 201.639 220.379 201.724 220.147 201.724Z" fill="#2F2E41"/>
|
||||
<path d="M221.37 137.334C224.215 137.334 226.522 135.035 226.522 132.2C226.522 129.365 224.215 127.067 221.37 127.067C218.525 127.067 216.219 129.365 216.219 132.2C216.219 135.035 218.525 137.334 221.37 137.334Z" fill="#FFB8B8"/>
|
||||
<path d="M224.923 168.458C220.366 168.458 216.798 166.568 215.506 165.777H215.506C215.36 165.687 215.241 165.559 215.162 165.406C215.084 165.254 215.049 165.083 215.062 164.912L216.315 147.069C216.395 145.865 216.757 144.696 217.372 143.656C217.987 142.617 218.837 141.735 219.855 141.081C220.828 140.44 221.938 140.034 223.096 139.896C224.254 139.759 225.428 139.893 226.524 140.289C227.008 140.455 227.465 140.691 227.881 140.989C230.656 143.049 231.993 146.15 231.55 149.498C230.632 156.441 231.672 165.806 231.794 166.851L231.803 166.926L231.734 166.958C229.6 167.946 227.275 168.458 224.923 168.458Z" fill="#6C63FF"/>
|
||||
<path d="M231.481 171.007C231.727 170.822 231.93 170.586 232.075 170.315C232.22 170.043 232.303 169.744 232.319 169.437C232.335 169.13 232.283 168.823 232.167 168.539C232.052 168.254 231.875 167.998 231.649 167.789L234.672 160.954L230.831 161.603L228.55 167.993C228.222 168.395 228.054 168.902 228.076 169.418C228.099 169.935 228.311 170.426 228.672 170.797C229.033 171.169 229.519 171.395 230.036 171.434C230.554 171.473 231.068 171.321 231.481 171.007Z" fill="#FFB8B8"/>
|
||||
<path d="M231.77 166.785C231.639 166.785 231.51 166.758 231.39 166.706C231.27 166.653 231.163 166.576 231.075 166.48L229.948 165.255C229.838 165.135 229.762 164.989 229.725 164.832C229.688 164.674 229.693 164.509 229.739 164.353L232.32 155.649L228.393 147.432C228.22 147.071 228.178 146.662 228.273 146.273C228.357 145.932 228.542 145.624 228.805 145.39C229.068 145.156 229.396 145.007 229.745 144.963C230.095 144.918 230.45 144.98 230.763 145.141C231.076 145.302 231.334 145.553 231.501 145.862L236.809 154.445C237.016 154.779 237.137 155.157 237.162 155.548C237.187 155.939 237.116 156.331 236.954 156.688L232.631 166.232C232.567 166.374 232.468 166.497 232.344 166.592C232.22 166.687 232.074 166.749 231.92 166.773C231.87 166.781 231.82 166.785 231.77 166.785Z" fill="#6C63FF"/>
|
||||
<path d="M225.615 136.726C225.081 136.817 224.641 136.076 224.575 135.555C224.508 135.034 224.699 134.535 224.72 134.017C224.74 133.5 224.495 132.87 223.956 132.717C223.39 132.556 222.865 133.008 222.286 132.954C221.479 132.878 221.074 131.937 220.976 131.175C220.878 130.414 220.802 129.512 220.103 129.078C219.406 128.645 218.544 128.96 217.743 128.974C216.39 128.997 215.013 127.968 214.696 126.699C214.86 126.747 215.036 126.738 215.194 126.675C215.353 126.611 215.486 126.497 215.572 126.35C215.64 126.193 215.653 126.018 215.611 125.853C215.569 125.687 215.473 125.541 215.338 125.435L216.872 126.183C216.662 125.758 216.979 125.274 217.415 125.113C217.851 124.952 218.358 125.024 218.838 125.099C221.24 125.471 224.022 125.287 225.615 127.112C226.718 128.376 227.627 130.781 227.503 132.337C227.379 133.893 225.615 136.726 225.615 136.726Z" fill="#2F2E41"/>
|
||||
<path d="M198.3 145.477C198.568 145.325 198.866 145.233 199.173 145.208C199.481 145.183 199.79 145.226 200.079 145.333C200.368 145.44 200.63 145.609 200.846 145.828C201.062 146.047 201.228 146.31 201.331 146.6L208.826 146.546L206.705 149.801L199.913 149.353C199.414 149.494 198.88 149.447 198.412 149.221C197.945 148.995 197.577 148.607 197.379 148.129C197.18 147.651 197.164 147.117 197.333 146.629C197.503 146.14 197.847 145.73 198.3 145.477Z" fill="#FFB8B8"/>
|
||||
<path d="M202.199 149.025C202.173 148.897 202.173 148.766 202.2 148.638C202.228 148.511 202.281 148.391 202.358 148.285L203.331 146.936C203.427 146.805 203.554 146.7 203.702 146.632C203.85 146.564 204.013 146.535 204.175 146.548L212.942 146.182L220.525 141.784C220.845 141.543 221.238 141.418 221.64 141.431C221.992 141.443 222.332 141.562 222.615 141.77C222.899 141.979 223.112 142.268 223.227 142.6C223.342 142.932 223.353 143.291 223.259 143.629C223.166 143.968 222.971 144.27 222.701 144.496L215.351 151.425C215.066 151.694 214.718 151.89 214.339 151.994C213.96 152.098 213.561 152.108 213.177 152.023L202.919 149.752C202.767 149.719 202.625 149.648 202.507 149.546C202.388 149.444 202.297 149.315 202.242 149.169C202.224 149.122 202.21 149.074 202.199 149.025Z" fill="#6C63FF"/>
|
||||
<path d="M165.976 101.947L163.105 106.901L153.286 89.9542L123.143 141.971H143.551C143.551 143.285 144.075 144.545 145.008 145.474C145.94 146.403 147.205 146.925 148.523 146.925H123.143C122.27 146.925 121.413 146.696 120.657 146.261C119.901 145.826 119.274 145.201 118.838 144.448C118.401 143.695 118.172 142.841 118.172 141.971C118.172 141.102 118.402 140.247 118.838 139.494L148.981 87.4771C149.417 86.724 150.045 86.0986 150.801 85.6638C151.557 85.2289 152.414 85 153.287 85C154.159 85 155.017 85.2289 155.773 85.6638C156.528 86.0986 157.156 86.724 157.592 87.4771L165.976 101.947Z" fill="#00C58E"/>
|
||||
<path d="M187.736 139.494L168.847 106.901L165.976 101.947L163.105 106.901L144.219 139.494C143.782 140.247 143.553 141.102 143.553 141.971C143.553 142.841 143.782 143.695 144.219 144.448C144.655 145.201 145.282 145.826 146.038 146.261C146.794 146.696 147.651 146.925 148.523 146.925H183.425C184.298 146.926 185.155 146.697 185.911 146.262C186.667 145.827 187.295 145.202 187.731 144.449C188.168 143.696 188.398 142.841 188.398 141.972C188.398 141.102 188.168 140.248 187.731 139.494H187.736V139.494ZM148.523 141.971L165.976 111.855L183.425 141.971H148.523V141.971Z" fill="#2F495E"/>
|
||||
<path d="M201.239 144.448C200.803 145.201 200.176 145.827 199.42 146.261C198.664 146.696 197.807 146.925 196.935 146.925H183.424C184.077 146.925 184.724 146.797 185.327 146.548C185.93 146.299 186.478 145.934 186.94 145.474C187.401 145.014 187.768 144.468 188.017 143.867C188.267 143.266 188.396 142.622 188.396 141.971H196.924L172.725 100.207L168.847 106.901L165.976 101.947L168.42 97.7299C168.856 96.9768 169.484 96.3513 170.24 95.9165C170.996 95.4817 171.853 95.2527 172.726 95.2527C173.598 95.2527 174.456 95.4817 175.212 95.9165C175.967 96.3513 176.595 96.9768 177.031 97.7299L201.239 139.494C201.676 140.247 201.905 141.102 201.905 141.971C201.905 142.841 201.676 143.695 201.239 144.448Z" fill="#108775"/>
|
||||
<path d="M103.036 206.582C103.036 204.531 103.854 202.564 105.309 201.114C106.765 199.664 108.738 198.849 110.797 198.849C112.855 198.849 114.829 199.664 116.284 201.114C117.74 202.564 118.557 204.531 118.557 206.582" fill="#F2F2F2"/>
|
||||
<path d="M98.1337 159.12L54.3718 170.199C53.8227 170.337 53.2409 170.253 52.7541 169.964C52.2673 169.676 51.9152 169.206 51.7751 168.66L45.3935 143.631C45.2918 143.23 45.3538 142.805 45.5659 142.45C45.7781 142.094 46.123 141.837 46.5251 141.735L91.3681 130.382C91.7774 130.279 92.211 130.342 92.5738 130.557C92.9366 130.772 93.199 131.122 93.3034 131.529L99.6783 156.532C99.8172 157.079 99.7326 157.659 99.443 158.144C99.1534 158.629 98.6826 158.98 98.1337 159.12Z" fill="#F2F2F2"/>
|
||||
<path d="M55.8534 167.627L95.5995 157.565C96.132 157.43 96.589 157.09 96.8699 156.619C97.1508 156.149 97.2326 155.586 97.0973 155.056L92.2017 135.855C92.0664 135.324 91.7251 134.869 91.2528 134.589C90.7806 134.309 90.2162 134.228 89.6836 134.362L49.9375 144.425C49.405 144.559 48.948 144.899 48.6672 145.37C48.3863 145.841 48.3045 146.403 48.4398 146.934L53.3354 166.135C53.4707 166.665 53.812 167.121 54.2842 167.4C54.7564 167.68 55.3209 167.762 55.8534 167.627Z" fill="white"/>
|
||||
<path d="M93.2376 131.393L45.3341 143.52L45.0663 142.47C44.9272 141.92 45.0123 141.339 45.3029 140.852C45.5936 140.366 46.0661 140.014 46.6168 139.874L90.3639 128.799C90.9148 128.66 91.4986 128.744 91.9871 129.034C92.4756 129.323 92.829 129.794 92.9698 130.342L93.2376 131.393Z" fill="#E6E6E6"/>
|
||||
<path d="M48.7138 141.56C49.0201 141.56 49.2684 141.312 49.2684 141.007C49.2684 140.702 49.0201 140.454 48.7138 140.454C48.4075 140.454 48.1592 140.702 48.1592 141.007C48.1592 141.312 48.4075 141.56 48.7138 141.56Z" fill="white"/>
|
||||
<path d="M50.7538 141.043C51.0602 141.043 51.3085 140.796 51.3085 140.49C51.3085 140.185 51.0602 139.938 50.7538 139.938C50.4475 139.938 50.1992 140.185 50.1992 140.49C50.1992 140.796 50.4475 141.043 50.7538 141.043Z" fill="white"/>
|
||||
<path d="M52.7949 140.527C53.1012 140.527 53.3495 140.279 53.3495 139.974C53.3495 139.669 53.1012 139.421 52.7949 139.421C52.4885 139.421 52.2402 139.669 52.2402 139.974C52.2402 140.279 52.4885 140.527 52.7949 140.527Z" fill="white"/>
|
||||
<path d="M91.6713 151.068L55.9208 160.119C55.789 160.152 55.6518 160.159 55.5172 160.14C55.3826 160.12 55.2531 160.075 55.1362 160.005C55.0193 159.936 54.9172 159.845 54.8358 159.736C54.7544 159.627 54.6953 159.504 54.6618 159.372C54.6283 159.241 54.6211 159.104 54.6406 158.97C54.6601 158.836 54.7059 158.707 54.7755 158.591C54.845 158.474 54.9369 158.372 55.0459 158.291C55.1549 158.21 55.2788 158.151 55.4107 158.118L91.1612 149.067C91.4274 149 91.7097 149.04 91.9458 149.18C92.1819 149.32 92.3526 149.548 92.4202 149.813C92.4879 150.079 92.447 150.36 92.3065 150.595C92.1661 150.83 91.9376 151 91.6713 151.068Z" fill="#E6E6E6"/>
|
||||
<path d="M91.7183 154.917L81.1923 157.582C81.0604 157.615 80.9233 157.622 80.7887 157.603C80.654 157.583 80.5246 157.538 80.4077 157.468C80.2908 157.399 80.1887 157.308 80.1073 157.199C80.0259 157.09 79.9668 156.967 79.9333 156.835C79.8998 156.704 79.8926 156.567 79.9121 156.433C79.9316 156.299 79.9774 156.17 80.047 156.054C80.1165 155.937 80.2084 155.835 80.3174 155.754C80.4264 155.673 80.5503 155.614 80.6822 155.581L91.2082 152.916C91.4745 152.849 91.7567 152.889 91.9928 153.029C92.2289 153.169 92.3996 153.397 92.4672 153.662C92.5349 153.927 92.494 154.209 92.3535 154.444C92.2131 154.679 91.9846 154.849 91.7183 154.917Z" fill="#F9CD92"/>
|
||||
<path d="M90.0036 141.906L67.3046 147.652C67.0383 147.72 66.7561 147.679 66.52 147.539C66.2839 147.399 66.1132 147.171 66.0456 146.906C65.9779 146.641 66.0188 146.359 66.1593 146.124C66.2997 145.889 66.5282 145.719 66.7945 145.651L89.4935 139.905C89.6254 139.871 89.7626 139.864 89.8973 139.883C90.032 139.903 90.1615 139.948 90.2785 140.018C90.3955 140.087 90.4976 140.179 90.5791 140.287C90.6605 140.396 90.7197 140.519 90.7532 140.651C90.7867 140.782 90.7939 140.919 90.7744 141.053C90.7548 141.187 90.709 141.316 90.6393 141.433C90.5697 141.55 90.4778 141.651 90.3687 141.732C90.2596 141.813 90.1356 141.872 90.0036 141.906Z" fill="#E6E6E6"/>
|
||||
<path d="M90.9285 145.532L68.2294 151.279C67.9631 151.346 67.6809 151.305 67.4448 151.165C67.2087 151.025 67.038 150.798 66.9704 150.532C66.9027 150.267 66.9436 149.986 67.0841 149.751C67.2245 149.515 67.453 149.345 67.7193 149.278L90.4183 143.531C90.6846 143.464 90.9668 143.505 91.2029 143.644C91.439 143.784 91.6097 144.012 91.6773 144.277C91.745 144.543 91.7041 144.824 91.5637 145.059C91.4232 145.295 91.1947 145.465 90.9285 145.532Z" fill="#E6E6E6"/>
|
||||
<path d="M64.726 154.096L54.8119 156.606C54.5956 156.66 54.3664 156.627 54.1746 156.513C53.9828 156.399 53.8441 156.215 53.789 155.999L51.8441 148.371C51.7894 148.156 51.8227 147.927 51.9368 147.736C52.0509 147.545 52.2363 147.407 52.4525 147.352L62.3666 144.842C62.583 144.788 62.8122 144.821 63.0039 144.934C63.1957 145.048 63.3344 145.233 63.3896 145.448L65.3345 153.076C65.3892 153.292 65.3558 153.52 65.2418 153.711C65.1277 153.902 64.9422 154.041 64.726 154.096Z" fill="#E6E6E6"/>
|
||||
<path d="M68.8733 165.996C68.9993 166.213 69.1671 166.403 69.3671 166.555C69.567 166.708 69.7951 166.819 70.0383 166.884C70.2816 166.948 70.5352 166.964 70.7847 166.931C71.0342 166.898 71.2746 166.816 71.4923 166.69C71.7099 166.564 71.9005 166.396 72.0532 166.197C72.2058 165.998 72.3175 165.77 72.3819 165.528C72.4462 165.285 72.462 165.032 72.4282 164.784C72.3944 164.535 72.3118 164.296 72.1851 164.079C72.1316 163.99 72.0713 163.904 72.0048 163.824L73.6156 152.384L73.6639 152.041L73.9911 149.706L74.0393 149.37L73.861 149.378L70.7401 149.52L69.9031 149.558L69.7983 151.688L69.2047 163.661C68.8945 163.957 68.6932 164.348 68.6331 164.771C68.573 165.195 68.6576 165.626 68.8733 165.996Z" fill="#FFB8B8"/>
|
||||
<path d="M73.655 152.145L69.692 151.783C69.4864 151.763 69.2969 151.664 69.1647 151.506C69.0325 151.348 68.9684 151.144 68.9864 150.939L69.7214 142.727C69.7571 142.328 69.8726 141.94 70.0613 141.587C70.2499 141.233 70.5078 140.921 70.8197 140.669C71.1316 140.416 71.4912 140.228 71.8771 140.117C72.2631 140.005 72.6676 139.972 73.0666 140.019C73.4657 140.066 73.8513 140.192 74.2006 140.39C74.5498 140.588 74.8557 140.854 75.1 141.172C75.3444 141.49 75.5222 141.853 75.6231 142.241C75.7239 142.629 75.7457 143.032 75.6871 143.429L74.4988 151.483C74.4715 151.668 74.3786 151.837 74.237 151.959C74.0954 152.081 73.9145 152.148 73.7273 152.148C73.7034 152.148 73.6792 152.147 73.655 152.145Z" fill="#6C63FF"/>
|
||||
<path d="M70.6508 145.51C70.2499 144.379 70.2314 143.148 70.5979 142.005C70.9644 140.862 71.6958 139.87 72.6808 139.18C74.1752 138.161 76.2202 137.796 78.4225 140.408C82.8271 145.633 83.9807 151.38 83.9807 151.38L74.9617 152.843C74.9617 152.843 71.8943 149.108 70.6508 145.51Z" fill="#6C63FF"/>
|
||||
<path d="M85.2377 204.365L87.8092 204.365L89.0324 194.482L85.2373 194.482L85.2377 204.365Z" fill="#FFB8B8"/>
|
||||
<path d="M92.7686 206.744L84.687 206.745L84.6869 203.633L89.646 203.633C90.056 203.633 90.4621 203.713 90.8409 203.87C91.2197 204.026 91.564 204.255 91.8539 204.544C92.1439 204.833 92.3739 205.176 92.5308 205.554C92.6878 205.931 92.7685 206.336 92.7686 206.744Z" fill="#2F2E41"/>
|
||||
<path d="M64.0967 202.131L66.5381 202.935L70.8127 193.934L67.2093 192.747L64.0967 202.131Z" fill="#FFB8B8"/>
|
||||
<path d="M70.498 206.745L62.8248 204.217L63.8047 201.263L68.5133 202.814C69.2996 203.073 69.9504 203.633 70.3226 204.37C70.6948 205.107 70.7579 205.961 70.498 206.745L70.498 206.745Z" fill="#2F2E41"/>
|
||||
<path d="M76.3126 136.589C79.1577 136.589 81.4642 134.291 81.4642 131.456C81.4642 128.621 79.1577 126.323 76.3126 126.323C73.4675 126.323 71.1611 128.621 71.1611 131.456C71.1611 134.291 73.4675 136.589 76.3126 136.589Z" fill="#FFB8B8"/>
|
||||
<path d="M80.8229 201.614L78.4349 185.909C78.4094 185.741 78.3263 185.588 78.1997 185.474C78.0732 185.361 77.9111 185.295 77.7411 185.288C77.5711 185.28 77.4038 185.332 77.2679 185.434C77.1319 185.536 77.0356 185.681 76.9956 185.846L73.3591 200.813C73.3018 201.042 73.1606 201.242 72.9631 201.373C72.7657 201.504 72.5263 201.556 72.2919 201.52L62.261 199.914C62.128 199.893 62.0011 199.843 61.8888 199.769C61.7766 199.695 61.6816 199.598 61.6102 199.484C61.5388 199.37 61.4927 199.242 61.475 199.109C61.4573 198.976 61.4684 198.841 61.5075 198.712L74.5872 155.743C74.6244 155.621 74.6288 155.491 74.6 155.367L74.1645 153.486C74.1167 153.282 74.1388 153.068 74.2272 152.879C74.3157 152.689 74.4654 152.534 74.6525 152.438C76.4336 151.533 80.9438 149.65 84.3492 151.712C84.4597 151.78 84.5554 151.868 84.6304 151.974C84.7053 152.079 84.7581 152.198 84.7853 152.324L95.0032 200.177C95.031 200.308 95.0308 200.442 95.0025 200.572C94.9743 200.702 94.9187 200.825 94.8394 200.932C94.7601 201.039 94.6589 201.128 94.5425 201.193C94.4262 201.258 94.2972 201.298 94.1642 201.31L81.8403 202.41C81.8119 202.412 81.7837 202.413 81.7557 202.413C81.5301 202.413 81.312 202.332 81.141 202.185C80.9699 202.039 80.8571 201.836 80.8229 201.614Z" fill="#2F2E41"/>
|
||||
<path d="M72.8966 127.829C73.2849 127.596 73.6295 127.298 73.9149 126.947C74.0557 126.77 74.1483 126.56 74.1839 126.336C74.2196 126.113 74.197 125.885 74.1183 125.673C73.858 125.101 73.0846 124.919 72.4853 125.114C71.8861 125.31 71.4231 125.777 70.9851 126.229C70.5993 126.627 70.2025 127.043 70.0195 127.565C69.8365 128.087 69.9305 128.75 70.3857 129.067C70.8324 129.378 71.4746 129.25 71.9042 128.916C72.3338 128.582 72.5998 128.086 72.8534 127.606L72.8966 127.829Z" fill="#2F2E41"/>
|
||||
<path d="M71.152 126.366C71.1234 124.92 69.4689 123.883 68.0401 124.139C66.6112 124.395 65.5129 125.609 64.9631 126.948C63.8015 129.777 64.6735 133.005 65.7928 135.851C66.912 138.697 68.297 141.585 68.1338 144.638C68.0234 146.287 67.4679 147.877 66.526 149.238C65.584 150.6 64.2905 151.682 62.7822 152.371C64.3948 153.1 66.3223 152.347 67.6774 151.212C70.6868 148.69 71.8484 144.201 70.4378 140.544C69.7421 138.74 68.5159 137.197 67.5587 135.516C66.6014 133.835 65.8991 131.855 66.3933 129.986C66.8875 128.118 68.9908 126.604 70.7889 127.328L71.152 126.366Z" fill="#2F2E41"/>
|
||||
<path d="M76.6217 133.734C76.1726 132.977 75.7192 131.985 76.5403 131.324C76.7188 131.186 76.923 131.086 77.1409 131.029C77.3588 130.971 77.5861 130.958 77.8093 130.989C78.7348 131.1 79.7425 131.146 80.6382 130.811C80.9742 130.696 81.2835 130.515 81.5477 130.278C81.812 130.042 82.0259 129.754 82.1766 129.434C82.639 128.342 82.06 127.015 81.0932 126.325C80.5018 125.918 79.803 125.695 79.0844 125.682C78.3658 125.669 77.6595 125.868 77.054 126.254C75.8019 125.703 74.2827 125.948 73.1451 126.707C72.0076 127.465 71.2292 128.68 70.8063 129.977C70.4168 131.094 70.3497 132.297 70.6127 133.45C70.8244 134.252 71.2269 134.991 71.7861 135.605C72.3454 136.219 73.0449 136.69 73.8254 136.977C74.1294 137.097 74.4597 137.134 74.7829 137.087C75.1062 137.039 75.4112 136.907 75.6674 136.705C75.6674 136.705 76.3774 136.087 76.5996 135.344C76.7702 134.772 76.8616 134.138 76.6217 133.734Z" fill="#2F2E41"/>
|
||||
<path d="M144.786 207H56.4842C56.4285 207 56.3752 206.978 56.3358 206.939C56.2965 206.9 56.2744 206.846 56.2744 206.791C56.2744 206.736 56.2965 206.682 56.3358 206.643C56.3752 206.604 56.4285 206.582 56.4842 206.582H144.786C144.842 206.582 144.895 206.604 144.934 206.643C144.974 206.682 144.996 206.736 144.996 206.791C144.996 206.846 144.974 206.9 144.934 206.939C144.895 206.978 144.842 207 144.786 207Z" fill="#CCCCCC"/>
|
||||
<path d="M91.9033 138.314C91.8776 138.427 91.8608 138.541 91.8531 138.657L82.8431 143.836L80.653 142.58L78.3184 145.625L81.9785 148.225C82.2741 148.435 82.6302 148.543 82.9932 148.535C83.3562 148.526 83.7065 148.4 83.9916 148.176L93.2825 140.872C93.7018 141.027 94.1584 141.051 94.5916 140.94C95.0248 140.83 95.4141 140.591 95.7076 140.255C96.0011 139.919 96.185 139.502 96.2348 139.059C96.2846 138.616 96.198 138.169 95.9864 137.777C95.7748 137.384 95.4483 137.065 95.0504 136.862C94.6524 136.659 94.2019 136.582 93.7586 136.64C93.3154 136.698 92.9004 136.89 92.569 137.189C92.2376 137.488 92.0054 137.88 91.9033 138.314V138.314Z" fill="#FFB8B8"/>
|
||||
<path d="M82.5423 144.081L79.6303 147.842C79.5474 147.949 79.4424 148.037 79.3223 148.1C79.2023 148.163 79.0701 148.199 78.9346 148.207C78.7992 148.214 78.6638 148.192 78.5375 148.143C78.4113 148.093 78.2973 148.017 78.2032 147.92L74.9066 144.509C74.3592 144.084 74.0036 143.459 73.9176 142.773C73.8317 142.086 74.0225 141.394 74.4481 140.848C74.8738 140.301 75.4995 139.946 76.1881 139.858C76.8767 139.771 77.5719 139.96 78.1213 140.382L82.2559 142.686C82.3743 142.752 82.477 142.843 82.557 142.952C82.6371 143.061 82.6926 143.186 82.7197 143.318C82.7469 143.451 82.7451 143.588 82.7145 143.719C82.6839 143.851 82.6252 143.974 82.5423 144.081H82.5423Z" fill="#6C63FF"/>
|
||||
<path d="M110.797 207C110.741 207 110.688 206.978 110.648 206.939C110.609 206.9 110.587 206.846 110.587 206.791V202.716C110.587 202.66 110.609 202.607 110.648 202.568C110.688 202.529 110.741 202.507 110.797 202.507C110.852 202.507 110.906 202.529 110.945 202.568C110.984 202.607 111.006 202.66 111.006 202.716V206.791C111.006 206.846 110.984 206.9 110.945 206.939C110.906 206.978 110.852 207 110.797 207Z" fill="#CCCCCC"/>
|
||||
<path d="M110.797 205.182C110.747 205.182 110.698 205.164 110.66 205.131L108.143 202.979C108.122 202.961 108.105 202.939 108.092 202.915C108.08 202.89 108.072 202.863 108.07 202.836C108.068 202.808 108.071 202.781 108.08 202.754C108.088 202.728 108.102 202.704 108.12 202.683C108.138 202.662 108.16 202.645 108.185 202.633C108.209 202.62 108.236 202.613 108.264 202.611C108.291 202.609 108.319 202.612 108.345 202.621C108.371 202.63 108.396 202.643 108.417 202.661L110.934 204.814C110.966 204.842 110.989 204.879 111 204.92C111.011 204.962 111.008 205.005 110.994 205.045C110.979 205.085 110.952 205.12 110.917 205.144C110.881 205.169 110.84 205.182 110.797 205.182H110.797Z" fill="#CCCCCC"/>
|
||||
<path d="M121.284 206.582C121.284 204.531 122.102 202.564 123.557 201.114C125.013 199.664 126.986 198.849 129.045 198.849C131.103 198.849 133.077 199.664 134.532 201.114C135.988 202.564 136.805 204.531 136.805 206.582" fill="#F2F2F2"/>
|
||||
<path d="M129.045 207C128.989 207 128.936 206.978 128.896 206.939C128.857 206.9 128.835 206.846 128.835 206.791V202.716C128.835 202.66 128.857 202.607 128.896 202.568C128.936 202.529 128.989 202.507 129.045 202.507C129.1 202.507 129.154 202.529 129.193 202.568C129.232 202.607 129.254 202.66 129.254 202.716V206.791C129.254 206.846 129.232 206.9 129.193 206.939C129.154 206.978 129.1 207 129.045 207Z" fill="#CCCCCC"/>
|
||||
<path d="M129.045 205.182C128.995 205.182 128.946 205.164 128.908 205.131L126.391 202.979C126.349 202.943 126.323 202.891 126.319 202.836C126.315 202.781 126.333 202.726 126.369 202.684C126.405 202.642 126.457 202.616 126.512 202.612C126.568 202.607 126.623 202.625 126.665 202.662L129.182 204.814C129.214 204.842 129.237 204.879 129.248 204.92C129.259 204.962 129.257 205.005 129.242 205.045C129.227 205.085 129.2 205.12 129.165 205.144C129.13 205.169 129.088 205.182 129.045 205.182Z" fill="#CCCCCC"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_3002_1373">
|
||||
<rect width="224" height="224" fill="white" transform="translate(43 25)"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip1_3002_1373">
|
||||
<rect width="220" height="122" fill="white" transform="translate(45 85)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 26 KiB |
20
public/images/documentation/Categories=Nextjs.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_23122_21590)">
|
||||
<path d="M20 40C31.0457 40 40 31.0457 40 20C40 8.9543 31.0457 0 20 0C8.9543 0 0 8.9543 0 20C0 31.0457 8.9543 40 20 40Z" fill="black"/>
|
||||
<path d="M33.2241 35.0044L15.3647 12H12V27.9934H14.6919V15.4184L31.1106 36.6322C31.8505 36.1372 32.5566 35.5934 33.2241 35.0044Z" fill="url(#paint0_linear_23122_21590)"/>
|
||||
<path d="M25.5557 12H28.2222V28H25.5557V12Z" fill="url(#paint1_linear_23122_21590)"/>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_23122_21590" x1="24.2222" y1="25.8888" x2="32.1111" y2="35.6666" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_23122_21590" x1="26.8889" y1="12" x2="26.8442" y2="23.75" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_23122_21590">
|
||||
<rect width="40" height="40" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
4
public/images/documentation/Categories=React.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 23.5625C21.9675 23.5625 23.5625 21.9675 23.5625 20C23.5625 18.0325 21.9675 16.4375 20 16.4375C18.0325 16.4375 16.4375 18.0325 16.4375 20C16.4375 21.9675 18.0325 23.5625 20 23.5625Z" fill="#61DAFB"/>
|
||||
<path d="M33.5313 14.125C32.8438 13.875 32.125 13.625 31.375 13.4063C31.5625 12.6563 31.7187 11.9062 31.8438 11.1875C32.5 7.0625 31.7813 4.15625 29.7813 3.03125C29.1875 2.6875 28.5313 2.53125 27.7812 2.53125C25.5938 2.53125 22.8125 4.15625 20 6.875C17.1875 4.15625 14.4062 2.53125 12.2187 2.53125C11.4687 2.53125 10.8125 2.6875 10.2188 3.03125C8.21875 4.1875 7.5 7.09375 8.15625 11.1875C8.28125 11.9062 8.4375 12.6563 8.625 13.4063C7.875 13.625 7.15625 13.8437 6.46875 14.125C2.5625 15.625 0.4375 17.6875 0.4375 20C0.4375 22.3125 2.59375 24.375 6.46875 25.875C7.15625 26.125 7.875 26.375 8.625 26.5938C8.4375 27.3438 8.28125 28.0937 8.15625 28.8125C7.5 32.9375 8.21875 35.8438 10.2188 36.9688C10.8125 37.3125 11.4687 37.4688 12.2187 37.4688C14.4375 37.4688 17.2187 35.8438 20 33.125C22.8125 35.8438 25.5938 37.4688 27.7812 37.4688C28.5313 37.4688 29.1875 37.3125 29.7813 36.9688C31.7813 35.8125 32.5 32.9062 31.8438 28.8125C31.7187 28.0937 31.5625 27.3438 31.375 26.5938C32.125 26.375 32.8438 26.1563 33.5313 25.875C37.4375 24.375 39.5625 22.3125 39.5625 20C39.5625 17.6875 37.4375 15.625 33.5313 14.125ZM28.9062 4.59375C30.1875 5.34375 30.625 7.65625 30.0938 10.9375C30 11.5937 29.8438 12.2813 29.6562 13C28.0313 12.625 26.3125 12.375 24.5 12.2187C23.4375 10.7187 22.3437 9.375 21.25 8.15625C23.5625 5.875 25.9062 4.3125 27.8125 4.3125C28.2187 4.3125 28.5937 4.40625 28.9062 4.59375ZM25.4063 23.125C24.8438 24.125 24.1875 25.125 23.5 26.125C22.3437 26.2188 21.1875 26.25 20 26.25C18.7812 26.25 17.625 26.2188 16.5 26.125C15.8125 25.125 15.1875 24.125 14.625 23.125C14.0312 22.0938 13.4687 21.0313 12.9687 20C13.4687 18.9688 14.0312 17.9063 14.625 16.875C15.1875 15.875 15.8437 14.875 16.5312 13.875C17.6875 13.7813 18.8437 13.75 20.0312 13.75C21.25 13.75 22.4063 13.7813 23.5313 13.875C24.2188 14.875 24.8438 15.875 25.4063 16.875C26 17.9063 26.5625 18.9688 27.0625 20C26.5312 21.0313 26 22.0625 25.4063 23.125ZM28 22.0937C28.4687 23.1875 28.8437 24.25 29.1875 25.3125C28.125 25.5625 27 25.75 25.8125 25.9063C26.1875 25.3125 26.5937 24.6875 26.9375 24.0313C27.3125 23.375 27.6562 22.7187 28 22.0937ZM20 30.5625C19.25 29.75 18.5312 28.875 17.8437 27.9688C18.5625 28 19.2812 28.0312 20 28.0312C20.7187 28.0312 21.4375 28 22.1562 27.9688C21.4687 28.875 20.75 29.75 20 30.5625ZM14.1875 25.875C13 25.7188 11.875 25.5313 10.8125 25.2813C11.1562 24.25 11.5312 23.1562 12 22.0625C12.3438 22.6875 12.6875 23.3437 13.0625 23.9687C13.4375 24.6562 13.8125 25.25 14.1875 25.875ZM12 17.9062C11.5312 16.8125 11.1562 15.75 10.8125 14.6875C11.875 14.4375 13 14.25 14.1875 14.0938C13.8125 14.6875 13.4062 15.3125 13.0625 15.9688C12.6875 16.625 12.3438 17.2812 12 17.9062ZM20 9.4375C20.75 10.25 21.4687 11.125 22.1562 12.0312C21.4375 12 20.7187 11.9687 20 11.9687C19.2812 11.9687 18.5625 12 17.8437 12.0312C18.5312 11.125 19.25 10.25 20 9.4375ZM26.9375 16L25.8125 14.125C27 14.2812 28.125 14.4687 29.1875 14.7188C28.8437 15.75 28.4687 16.8438 28 17.9375C27.6562 17.2813 27.3125 16.625 26.9375 16ZM9.90625 10.9375C9.375 7.65625 9.8125 5.34375 11.0937 4.59375C11.4062 4.40625 11.7812 4.3125 12.1875 4.3125C14.0625 4.3125 16.4062 5.84375 18.75 8.15625C17.6562 9.34375 16.5625 10.7187 15.5 12.2187C13.6875 12.375 11.9687 12.6562 10.3437 13C10.1562 12.2813 10.0313 11.5937 9.90625 10.9375ZM2.1875 20C2.1875 18.5313 3.96875 16.9688 7.09375 15.8125C7.71875 15.5625 8.40625 15.3438 9.09375 15.1563C9.59375 16.7188 10.2187 18.375 10.9687 20.0312C10.2187 21.6875 9.5625 23.3125 9.09375 24.875C4.78125 23.625 2.1875 21.75 2.1875 20ZM11.0937 35.4063C9.8125 34.6563 9.375 32.3438 9.90625 29.0625C10 28.4063 10.1562 27.7188 10.3437 27C11.9687 27.375 13.6875 27.625 15.5 27.7813C16.5625 29.2813 17.6562 30.625 18.75 31.8438C16.4375 34.125 14.0937 35.6875 12.1875 35.6875C11.7812 35.6875 11.4062 35.5938 11.0937 35.4063ZM30.0938 29.0625C30.625 32.3438 30.1875 34.6563 28.9062 35.4063C28.5937 35.5938 28.2187 35.6875 27.8125 35.6875C25.9375 35.6875 23.5937 34.1563 21.25 31.8438C22.3437 30.6563 23.4375 29.2813 24.5 27.7813C26.3125 27.625 28.0313 27.3438 29.6562 27C29.8438 27.7188 29.9688 28.4063 30.0938 29.0625ZM32.9063 24.1875C32.2813 24.4375 31.5938 24.6563 30.9062 24.8438C30.4062 23.2813 29.7813 21.625 29.0312 19.9688C29.7813 18.3125 30.4375 16.6875 30.9062 15.125C35.2188 16.375 37.8125 18.25 37.8125 20C37.8125 21.4688 36 23.0313 32.9063 24.1875Z" fill="#61DAFB"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
3
public/images/documentation/Categories=Tailwind.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="41" height="40" viewBox="0 0 41 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.1942 8.4375C14.8604 8.4375 11.5277 11.0883 10.1937 16.39C12.1939 13.7392 14.5273 12.7453 17.1938 13.4076C18.7152 13.7854 19.8031 14.8827 21.0063 16.0976C22.9673 18.076 25.2373 20.3655 30.194 20.3655C35.5271 20.3655 38.8606 17.7146 40.1938 12.4138C38.1944 15.0646 35.861 16.0585 33.1945 15.3954C31.6723 15.0176 30.5844 13.9202 29.3812 12.7061C27.4202 10.7262 25.151 8.4375 20.1942 8.4375ZM10.1937 20.3655C4.86063 20.3655 1.5271 23.0163 0.193848 28.318C2.19412 25.6671 4.52751 24.6733 7.19324 25.3356C8.71539 25.7134 9.80332 26.8107 11.0065 28.0256C12.9675 30.004 15.2367 32.2935 20.1942 32.2935C25.5273 32.2935 28.8608 29.6434 30.194 24.3417C28.1938 26.9926 25.8604 27.9864 23.1939 27.3241C21.6725 26.9455 20.5846 25.8482 19.3814 24.6341C17.4203 22.6558 15.1504 20.3655 10.1937 20.3655Z" fill="#38BDF8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 960 B |
11
public/images/documentation/Categories=Typescript.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_23122_21594)">
|
||||
<path d="M7.08447 14.6875H38.2313V37.7094H7.08447V14.6875Z" fill="white"/>
|
||||
<path d="M0.46875 19.9727V39.5039H39.5312V0.441406H0.46875V19.9727ZM31.9469 18.4102C32.8825 18.6273 33.7328 19.1166 34.3906 19.8164C34.7527 20.1935 35.0675 20.6132 35.3281 21.0664C35.3281 21.1164 33.6406 22.257 32.6125 22.8945C32.575 22.9195 32.425 22.757 32.2594 22.5102C32.0717 22.1863 31.805 21.9153 31.4842 21.7224C31.1635 21.5295 30.799 21.421 30.425 21.407C29.2406 21.3258 28.4781 21.9477 28.4844 22.9695C28.4749 23.2239 28.5331 23.4763 28.6531 23.7008C28.9125 24.2414 29.3969 24.5633 30.9156 25.2195C33.7125 26.4227 34.9094 27.2164 35.6531 28.3445C36.4844 29.5945 36.6688 31.6133 36.1063 33.107C35.4813 34.732 33.95 35.8352 31.7844 36.2008C30.7953 36.3141 29.7959 36.3036 28.8094 36.1695C27.2974 35.9203 25.9046 35.1944 24.8344 34.0977C24.475 33.7008 23.775 32.6664 23.8188 32.5914C23.9326 32.5064 24.0527 32.4301 24.1781 32.3633L25.625 31.5633L26.7469 30.9133L26.9812 31.2602C27.3769 31.8259 27.8803 32.308 28.4625 32.6789C29.7125 33.3352 31.4187 33.2445 32.2625 32.4852C32.5458 32.2069 32.7225 31.8381 32.7619 31.443C32.8013 31.0478 32.7009 30.6514 32.4781 30.3227C32.1656 29.8883 31.5406 29.5227 29.7937 28.7602C27.7781 27.8914 26.9094 27.3539 26.1156 26.4977C25.6203 25.9325 25.2544 25.2659 25.0437 24.5445C24.8867 23.7203 24.8635 22.8761 24.975 22.0445C25.3906 20.0977 26.85 18.7383 28.9812 18.3352C29.9683 18.2132 30.968 18.2406 31.9469 18.4164V18.4102ZM22.7781 20.0477V21.6477H17.7062V36.0945H14.1094V21.6445H9.025V20.082C9.00905 19.5432 9.02157 19.0039 9.0625 18.4664C9.0875 18.4383 12.1875 18.4383 15.9375 18.4383H22.7594L22.7781 20.0477Z" fill="#007ACC"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_23122_21594">
|
||||
<rect width="40" height="40" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
8
public/images/documentation/axios.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg width="188" height="28" viewBox="0 0 188 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M93.295 3.65206L86.356 9.30495H90.8876V27.68L93.295 25.7411V3.65206Z" fill="#5A29E4"/>
|
||||
<path d="M95.295 24.0997L102.356 18.305H97.6975V0.350052L95.295 2.02275V24.0997Z" fill="#5A29E4"/>
|
||||
<path d="M182.695 6.95295C183.495 7.36895 184.071 7.72095 184.423 8.00895L186.919 3.25695C185.671 2.48895 184.167 1.80095 182.407 1.19295C180.679 0.584955 178.807 0.280952 176.791 0.280952C174.871 0.280952 173.095 0.600952 171.463 1.24095C169.863 1.88095 168.583 2.82495 167.623 4.07295C166.695 5.32095 166.231 6.87295 166.231 8.72895C166.231 10.809 166.887 12.409 168.199 13.529C169.543 14.617 171.591 15.513 174.343 16.217C176.551 16.793 178.327 17.321 179.671 17.801C181.047 18.249 181.735 19.001 181.735 20.057C181.735 21.625 180.263 22.409 177.319 22.409C175.847 22.409 174.455 22.233 173.143 21.881C171.831 21.529 170.679 21.097 169.687 20.585C168.727 20.073 168.039 19.609 167.623 19.193L165.031 24.233C166.695 25.289 168.599 26.121 170.743 26.729C172.887 27.337 175.047 27.641 177.223 27.641C179.111 27.641 180.871 27.385 182.503 26.873C184.135 26.329 185.447 25.465 186.439 24.281C187.463 23.065 187.975 21.4649 187.975 19.4809C187.975 17.8489 187.591 16.537 186.823 15.545C186.087 14.521 185.015 13.705 183.607 13.097C182.231 12.489 180.599 11.945 178.711 11.465C176.567 10.953 174.935 10.489 173.815 10.073C172.727 9.65695 172.183 8.95295 172.183 7.96095C172.183 6.26495 173.687 5.41695 176.695 5.41695C177.815 5.41695 178.903 5.57695 179.959 5.89695C181.015 6.18495 181.927 6.53695 182.695 6.95295Z" fill="#5A29E4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M132.182 27.497C130.07 27.497 128.15 27.129 126.422 26.393C124.694 25.625 123.205 24.601 121.957 23.321C120.709 22.009 119.749 20.537 119.077 18.905C118.406 17.273 118.069 15.593 118.069 13.865C118.069 12.105 118.421 10.409 119.125 8.77695C119.829 7.14495 120.822 5.70496 122.102 4.45695C123.382 3.17695 124.885 2.16895 126.613 1.43295C128.341 0.696953 130.229 0.328949 132.277 0.328949C134.389 0.328949 136.31 0.728952 138.038 1.52895C139.766 2.29695 141.238 3.33695 142.454 4.64895C143.702 5.92895 144.661 7.38495 145.333 9.01695C146.005 10.649 146.342 12.3129 146.342 14.0089C146.342 15.7689 145.99 17.465 145.286 19.097C144.582 20.697 143.589 22.137 142.309 23.417C141.061 24.665 139.574 25.657 137.846 26.393C136.118 27.129 134.23 27.497 132.182 27.497ZM123.925 13.913C123.925 15.353 124.262 16.729 124.934 18.041C125.605 19.321 126.549 20.361 127.765 21.161C129.013 21.961 130.501 22.361 132.229 22.361C133.989 22.361 135.477 21.945 136.693 21.113C137.91 20.249 138.837 19.177 139.477 17.8969C140.117 16.5849 140.438 15.241 140.438 13.865C140.438 12.425 140.102 11.0649 139.43 9.78495C138.758 8.50495 137.798 7.48095 136.549 6.71295C135.333 5.91295 133.878 5.51295 132.182 5.51295C130.422 5.51295 128.917 5.92895 127.669 6.76095C126.453 7.59295 125.525 8.64896 124.885 9.92896C124.245 11.209 123.925 12.537 123.925 13.913Z" fill="#5A29E4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 27.305L11.712 0.472954H16.464L28.128 27.305H21.984L19.296 21.017H8.88L6.192 27.305H0ZM14.112 7.52895L10.176 15.977H17.904L14.112 7.52895Z" fill="#5A29E4"/>
|
||||
<path d="M50.8211 0.472954L58.2131 9.97695L65.6051 0.472954H71.8931L61.2851 14.057L71.5571 27.305H65.2691L58.2131 18.185L51.2051 27.305H44.8211L55.1411 14.057L44.4851 0.472954H50.8211Z" fill="#5A29E4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
BIN
public/images/documentation/nextauth.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
4
public/images/logo/logo.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="48" height="48" rx="8" fill="#611F69"/>
|
||||
<path d="M23.4435 20.0472H27.1278C27.0746 16.8068 24.4112 14.5696 20.3629 14.5696C16.3768 14.5696 13.456 16.7713 13.4737 20.0739C13.4648 22.755 15.3558 24.2908 18.4276 25.0277L20.4073 25.5249C22.3871 26.0043 23.4879 26.5724 23.4968 27.7976C23.4879 29.1293 22.2273 30.0348 20.2741 30.0348C18.2766 30.0348 16.8384 29.1115 16.7141 27.2915H12.9943C13.092 31.2244 15.9062 33.2575 20.3185 33.2575C24.7575 33.2575 27.3675 31.1357 27.3764 27.8065C27.3675 24.7791 25.0859 23.1722 21.9254 22.462L20.2919 22.0714C18.7116 21.7074 17.3888 21.1214 17.4155 19.8164C17.4155 18.6445 18.4542 17.7834 20.3363 17.7834C22.174 17.7834 23.3015 18.6179 23.4435 20.0472ZM29.8911 33H33.673V19.3636H29.8911V33ZM31.7909 17.6058C32.9184 17.6058 33.8417 16.7447 33.8417 15.6882C33.8417 14.6406 32.9184 13.7795 31.7909 13.7795C30.6723 13.7795 29.749 14.6406 29.749 15.6882C29.749 16.7447 30.6723 17.6058 31.7909 17.6058Z" fill="#F9CD92"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
4
public/images/logo/logo2.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="48" height="48" rx="8" fill="#F9CD92" fill-opacity="0.2"/>
|
||||
<path d="M23.4435 20.0472H27.1278C27.0746 16.8068 24.4112 14.5696 20.3629 14.5696C16.3768 14.5696 13.456 16.7713 13.4737 20.0739C13.4648 22.755 15.3558 24.2908 18.4276 25.0277L20.4073 25.5249C22.3871 26.0043 23.4879 26.5724 23.4968 27.7976C23.4879 29.1293 22.2273 30.0348 20.2741 30.0348C18.2766 30.0348 16.8384 29.1115 16.7141 27.2915H12.9943C13.092 31.2244 15.9062 33.2575 20.3185 33.2575C24.7575 33.2575 27.3675 31.1357 27.3764 27.8065C27.3675 24.7791 25.0859 23.1722 21.9254 22.462L20.2919 22.0714C18.7116 21.7074 17.3888 21.1214 17.4155 19.8164C17.4155 18.6445 18.4542 17.7834 20.3363 17.7834C22.174 17.7834 23.3015 18.6179 23.4435 20.0472ZM29.8911 33H33.673V19.3636H29.8911V33ZM31.7909 17.6058C32.9184 17.6058 33.8417 16.7447 33.8417 15.6882C33.8417 14.6406 32.9184 13.7795 31.7909 13.7795C30.6723 13.7795 29.749 14.6406 29.749 15.6882C29.749 16.7447 30.6723 17.6058 31.7909 17.6058Z" fill="#F9CD92"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
11
public/images/mentor/boy1.svg
Normal file
|
After Width: | Height: | Size: 205 KiB |
11
public/images/mentor/boy2.svg
Normal file
|
After Width: | Height: | Size: 268 KiB |
11
public/images/mentor/boy3.svg
Normal file
|
After Width: | Height: | Size: 193 KiB |
11
public/images/mentor/boy4.svg
Normal file
|
After Width: | Height: | Size: 168 KiB |
11
public/images/mentor/boy5.svg
Normal file
|
After Width: | Height: | Size: 226 KiB |
11
public/images/mentor/girl1.svg
Normal file
|
After Width: | Height: | Size: 203 KiB |
4
public/images/newsletter/Free.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="174" height="235" viewBox="0 0 174 235" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 10C0 4.47715 4.47715 0 10 0H164C169.523 0 174 4.47715 174 10V225C174 230.523 169.498 235.014 164.07 233.996C139.642 229.415 109.557 210.364 97.2038 201.984C93.73 199.628 89.1953 199.526 85.6225 201.729C72.0734 210.085 37.6823 229.91 9.95066 234.181C4.49215 235.021 0 230.523 0 225V10Z" fill="#FF7A59"/>
|
||||
<path d="M28.9689 84.9894H35.8883L35.5884 71.4736H48.8998L48.7733 65.7701H35.4618L35.2889 57.9737H50.0385L49.912 52.2702H28.2429L28.9689 84.9894ZM55.5921 84.9894H62.5115L62.2542 73.3907H67.3039L73.7615 84.9894H81.4L74.1665 72.2724C77.8544 70.6748 79.8439 67.4316 79.7447 62.9583C79.6004 56.456 75.2089 52.2702 67.7781 52.2702H54.8662L55.5921 84.9894ZM62.1308 67.831L61.9111 57.9258H66.5772C70.5723 57.9258 72.5452 59.6991 72.6175 62.9583C72.6895 66.2014 70.792 67.831 66.829 67.831H62.1308ZM85.4234 84.9894H107.54L107.413 79.2859H92.2162L92.0429 71.4736H106.041L105.915 65.7701H91.9163L91.7434 57.9737L106.877 57.9737L106.75 52.2702L84.6974 52.2702L85.4234 84.9894ZM113.277 84.9894H135.394L135.267 79.2859H120.07L119.897 71.4736H133.895L133.769 65.7701H119.77L119.597 57.9737H134.73L134.604 52.2702H112.551L113.277 84.9894ZM31.9252 118.981H35.2189L35.0476 111.259H42.6026L42.5414 108.499H34.9863L34.8768 103.564H43.2309L43.1697 100.804H31.5219L31.9252 118.981ZM62.1185 109.892C61.9881 104.017 58.3246 100.555 53.5572 100.555C48.781 100.555 45.28 104.017 45.4104 109.892C45.5405 115.759 49.1953 119.23 53.9716 119.23C58.739 119.23 62.2488 115.768 62.1185 109.892ZM58.807 109.892C58.8988 114.028 56.8712 116.274 53.906 116.274C50.9497 116.274 48.8136 114.028 48.7218 109.892C48.63 105.756 50.6665 103.511 53.6228 103.511C56.588 103.511 58.7153 105.756 58.807 109.892ZM64.934 118.981H68.2277L68.08 112.324H71.4358L75.1524 118.981H78.8278L74.735 111.774C76.8555 110.913 77.9424 109.085 77.8877 106.617C77.8107 103.147 75.5215 100.804 71.3489 100.804H64.5307L64.934 118.981ZM68.0193 109.591L67.8854 103.555H70.9039C73.3631 103.555 74.4889 104.682 74.5319 106.617C74.5748 108.552 73.497 109.591 71.0556 109.591H68.0193ZM100.933 100.804H97.6571L97.932 113.194H97.7722L88.9391 100.804H85.9917L86.3949 118.981H89.6886L89.4139 106.6H89.5648L98.4067 118.981H101.336L100.933 100.804ZM104.425 118.981H116.322L116.26 116.221H107.658L107.548 111.259H115.467L115.405 108.499H107.486L107.377 103.564H115.908L115.847 100.804H104.022L104.425 118.981ZM122.937 118.981H126.186L129.552 106.227H129.694L133.617 118.981H136.866L141.595 100.804H138.052L135.073 114.17H134.913L131.11 100.804H127.887L124.686 114.162H124.517L120.945 100.804H117.402L122.937 118.981ZM59.5401 134.795L59.7975 146.396C59.8481 148.677 58.2952 150.31 55.8005 150.31C53.297 150.31 51.6805 148.677 51.6299 146.396L51.3725 134.795H48.0788L48.3423 146.671C48.4289 150.576 51.4179 153.248 55.8657 153.248C60.2958 153.248 63.1839 150.576 63.0973 146.671L62.8338 134.795H59.5401ZM75.9057 139.792H79.0751C78.9448 136.721 76.2776 134.547 72.4068 134.547C68.5894 134.547 65.7695 136.695 65.8497 139.908C65.9075 142.517 67.7963 144.017 70.8053 144.789L72.8856 145.322C74.8586 145.819 76.1684 146.431 76.2086 147.843C76.2342 149.396 74.7835 150.434 72.635 150.434C70.5754 150.434 68.9569 149.511 68.7814 147.603H65.541C65.7543 151.215 68.4894 153.248 72.7241 153.248C77.0831 153.248 79.5651 151.073 79.5029 147.869C79.4241 144.718 76.791 143.28 74.0422 142.633L72.3282 142.207C70.8289 141.851 69.1991 141.221 69.1832 139.704C69.1617 138.337 70.3646 137.334 72.4243 137.334C74.3863 137.334 75.7027 138.248 75.9057 139.792ZM82.0524 152.973H93.9487L93.8875 150.212H85.2849L85.1748 145.251H93.0938L93.0326 142.491H85.1135L85.0041 137.556H93.5357L93.4744 134.795H81.6491L82.0524 152.973ZM96.738 152.973H100.032L99.884 146.316H103.24L106.956 152.973H110.632L106.539 145.766C108.659 144.905 109.746 143.076 109.692 140.609C109.615 137.139 107.325 134.795 103.153 134.795H96.3347L96.738 152.973ZM99.8233 143.582L99.6894 137.547H102.708C105.167 137.547 106.293 138.674 106.336 140.609C106.379 142.544 105.301 143.582 102.86 143.582H99.8233ZM122.086 139.792H125.256C125.125 136.721 122.458 134.547 118.588 134.547C114.77 134.547 111.95 136.695 112.03 139.908C112.088 142.517 113.977 144.017 116.986 144.789L119.066 145.322C121.039 145.819 122.349 146.431 122.389 147.843C122.415 149.396 120.964 150.434 118.816 150.434C116.756 150.434 115.138 149.511 114.962 147.603H111.722C111.935 151.215 114.67 153.248 118.905 153.248C123.264 153.248 125.746 151.073 125.684 147.869C125.605 144.718 122.972 143.28 120.223 142.633L118.509 142.207C117.01 141.851 115.38 141.221 115.364 139.704C115.342 138.337 116.545 137.334 118.605 137.334C120.567 137.334 121.883 138.248 122.086 139.792Z" fill="#FAFAF9"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
9
public/images/newsletter/hands.svg
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
3
public/images/newsletter/pinkBackground.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="174" height="235" viewBox="0 0 174 235" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 10C0 4.47715 4.47715 0 10 0H164C169.523 0 174 4.47715 174 10V225C174 230.523 169.498 235.014 164.07 233.996C139.642 229.415 109.557 210.364 97.2038 201.984C93.73 199.628 89.1953 199.526 85.6225 201.729C72.0734 210.085 37.6823 229.91 9.95066 234.181C4.49215 235.021 0 230.523 0 225V10Z" fill="#FF7A59"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 422 B |
3
public/images/slickCompany/airbnb.svg
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
5
public/images/slickCompany/fedex.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="80" height="26" viewBox="0 0 80 26" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M59.5225 24.2279L66.1941 16.8386L59.5225 9.44836H66.5618L69.8661 13.0381L73.048 9.44836H79.8418L73.2018 16.8081L79.9329 24.2279H72.8647L69.5903 20.6087L66.3468 24.2279H59.5225Z" fill="#FF6600"/>
|
||||
<path d="M59.522 6.13531H51.9659V9.44834H59.522V14.4414H51.9659V19.0243H59.522V24.2279H46.4121V0.946167H59.522V6.13531Z" fill="#FF6600"/>
|
||||
<path d="M40.882 0.946167V10.4742H40.8212C39.5968 9.08697 38.0671 8.60491 36.2921 8.60491C32.6563 8.60491 29.9175 11.0413 28.9561 14.2624C27.8598 10.7131 25.0323 8.53839 20.8396 8.53839C17.4347 8.53839 14.746 10.0449 13.3429 12.4998V9.44868H6.30499V6.136H13.9853V0.946167H0.03125V24.2282H6.30499V14.4414H12.5582C12.3718 15.1603 12.2723 15.9301 12.2723 16.7423C12.2723 21.5989 16.0361 25.0065 20.8396 25.0065C24.8789 25.0065 27.5408 23.1373 28.9488 19.7293H23.5725C22.8452 20.753 22.2935 21.0571 20.8396 21.0571C19.1537 21.0571 17.7001 19.6072 17.7001 17.8885H28.6476C29.1224 21.7459 32.1707 25.0727 36.354 25.0727C38.1586 25.0727 39.8107 24.1977 40.8212 22.7203H40.882V24.2275H46.4125V0.946167H40.882ZM17.8747 14.511C18.2236 13.0322 19.3871 12.0657 20.8396 12.0657C22.4386 12.0657 23.5429 13.0024 23.8333 14.511C23.9558 14.511 17.8747 14.511 17.8747 14.511ZM37.5259 20.6831C35.4873 20.6831 34.2205 18.8107 34.2205 16.8558C34.2205 14.7661 35.3224 12.7566 37.5259 12.7566C39.8107 12.7566 40.721 14.7661 40.721 16.8558C40.7206 18.8375 39.7561 20.6831 37.5259 20.6831Z" fill="#652C8F"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
8
public/images/slickCompany/google.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg width="85" height="28" viewBox="0 0 85 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M36.4145 14.7185C36.4145 18.605 33.3294 21.4689 29.5432 21.4689C25.757 21.4689 22.6719 18.605 22.6719 14.7185C22.6719 10.8045 25.757 7.96802 29.5432 7.96802C33.3294 7.96802 36.4145 10.8045 36.4145 14.7185ZM33.4066 14.7185C33.4066 12.2898 31.6185 10.628 29.5432 10.628C27.4679 10.628 25.6798 12.2898 25.6798 14.7185C25.6798 17.1228 27.4679 18.8089 29.5432 18.8089C31.6185 18.8089 33.4066 17.1198 33.4066 14.7185Z" fill="#EA4335"/>
|
||||
<path d="M51.2378 14.7185C51.2378 18.605 48.1526 21.4689 44.3664 21.4689C40.5803 21.4689 37.4951 18.605 37.4951 14.7185C37.4951 10.8076 40.5803 7.96802 44.3664 7.96802C48.1526 7.96802 51.2378 10.8045 51.2378 14.7185ZM48.2298 14.7185C48.2298 12.2898 46.4417 10.628 44.3664 10.628C42.2911 10.628 40.5031 12.2898 40.5031 14.7185C40.5031 17.1228 42.2911 18.8089 44.3664 18.8089C46.4417 18.8089 48.2298 17.1198 48.2298 14.7185Z" fill="#FBBC05"/>
|
||||
<path d="M65.4437 8.37584V20.495C65.4437 25.4802 62.4604 27.5163 58.9337 27.5163C55.6138 27.5163 53.6157 25.328 52.8622 23.5385L55.481 22.4641C55.9474 23.5628 57.09 24.8593 58.9306 24.8593C61.1881 24.8593 62.5871 23.4867 62.5871 20.9028V19.9319H62.4821C61.8088 20.7506 60.5118 21.4658 58.875 21.4658C55.4501 21.4658 52.3125 18.5258 52.3125 14.7428C52.3125 10.9324 55.4501 7.96802 58.875 7.96802C60.5087 7.96802 61.8057 8.68323 62.4821 9.47758H62.5871V8.37889H65.4437V8.37584ZM62.8002 14.7428C62.8002 12.3658 61.1912 10.628 59.1437 10.628C57.0684 10.628 55.3297 12.3658 55.3297 14.7428C55.3297 17.0954 57.0684 18.8089 59.1437 18.8089C61.1912 18.8089 62.8002 17.0954 62.8002 14.7428Z" fill="#4285F4"/>
|
||||
<path d="M70.1535 1.27246V21.0551H67.2197V1.27246H70.1535Z" fill="#34A853"/>
|
||||
<path d="M81.5856 16.9403L83.9203 18.4742C83.1667 19.5729 81.3509 21.466 78.2132 21.466C74.322 21.466 71.416 18.5016 71.416 14.7155C71.416 10.7012 74.3468 7.96509 77.8766 7.96509C81.4312 7.96509 83.1698 10.7529 83.7381 12.2594L84.05 13.0264L74.8934 16.7638C75.5944 18.1181 76.6845 18.809 78.2132 18.809C79.745 18.809 80.8073 18.0664 81.5856 16.9403ZM74.3993 14.5116L80.5201 12.0068C80.1835 11.1638 79.1706 10.5764 77.9785 10.5764C76.4498 10.5764 74.322 11.9064 74.3993 14.5116Z" fill="#EA4335"/>
|
||||
<path d="M11.5665 12.9624V10.0985H21.3593C21.455 10.5977 21.5044 11.1881 21.5044 11.8272C21.5044 13.9759 20.9084 16.6329 18.9875 18.5259C17.1192 20.4433 14.7319 21.4659 11.5696 21.4659C5.70812 21.4659 0.779297 16.7607 0.779297 10.9842C0.779297 5.20766 5.70812 0.502441 11.5696 0.502441C14.8122 0.502441 17.1222 1.75635 18.8578 3.3907L16.8072 5.41157C15.5627 4.26114 13.8765 3.36635 11.5665 3.36635C7.28621 3.36635 3.93856 6.76592 3.93856 10.9842C3.93856 15.2024 7.28621 18.602 11.5665 18.602C14.3428 18.602 15.924 17.5033 16.9369 16.505C17.7584 15.6955 18.2989 14.539 18.5119 12.9594L11.5665 12.9624Z" fill="#4285F4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
9
public/images/slickCompany/hubspot.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="91" height="29" viewBox="0 0 91 29" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.5258 4.64087V12.5389H3.91694V4.64087H0.779297V23.4943H3.91694V15.8527H10.5258V23.4943H13.6635V4.64087H10.5258Z" fill="#33475B"/>
|
||||
<path d="M23.7048 17.3999C23.7048 18.1555 23.4313 18.8801 22.9445 19.4144C22.4577 19.9487 21.7975 20.2488 21.1091 20.2488C20.4206 20.2488 19.7604 19.9487 19.2736 19.4144C18.7868 18.8801 18.5133 18.1555 18.5133 17.3999V9.32471H15.5371V17.3999C15.5371 19.0203 16.1236 20.5743 17.1675 21.72C18.2115 22.8658 19.6273 23.5095 21.1037 23.5095C22.58 23.5095 23.9959 22.8658 25.0399 21.72C26.0838 20.5743 26.6703 19.0203 26.6703 17.3999V9.32471H23.7048V17.3999Z" fill="#33475B"/>
|
||||
<path d="M45.7564 10.1565C45.7564 8.50131 46.7541 7.97657 47.8472 7.97657C48.728 7.97657 49.8918 8.71222 50.6527 9.60477L52.602 7.08402C51.6289 5.63972 49.655 4.64087 48.0393 4.64087C44.811 4.64087 42.4758 6.71619 42.4758 10.1565C42.4758 16.5394 49.5843 14.5147 49.5843 18.0866C49.5843 19.1884 48.6097 20.1619 47.4936 20.1619C45.7334 20.1619 45.163 19.2171 44.3544 18.2182L42.1914 20.6867C43.575 22.5511 45.2814 23.4976 47.326 23.4976C50.3929 23.4976 52.8603 21.397 52.8603 18.1136C52.8603 11.0271 45.7518 13.229 45.7518 10.1565" fill="#33475B"/>
|
||||
<path d="M89.7321 20.4825C87.9734 20.4825 87.4738 19.6473 87.4738 18.3684V12.7077H90.2071V9.83932H87.4738V6.05481L84.4561 7.54128V19.072C84.4561 22.0213 86.31 23.5078 88.8527 23.5078C89.2515 23.5157 89.6501 23.4807 90.0426 23.4032L90.779 20.4285C90.4469 20.4538 90.0657 20.4792 89.7321 20.4792" fill="#33475B"/>
|
||||
<path d="M35.0339 9.41917C33.5596 9.41917 32.5311 9.88822 31.5365 10.9596V4.75391H28.5557V16.2559C28.5557 20.5618 31.392 23.5111 34.5788 23.5111C38.1146 23.5111 41.2246 20.5095 41.2246 16.4668C41.2246 12.4748 38.3621 9.42085 35.0339 9.42085V9.41917ZM35.0154 20.2193C34.3465 20.2193 33.6926 20.0016 33.1364 19.5937C32.5803 19.1858 32.1468 18.6061 31.8908 17.9278C31.6348 17.2496 31.5678 16.5032 31.6983 15.7832C31.8288 15.0631 32.1509 14.4017 32.6239 13.8826C33.0969 13.3634 33.6996 13.0099 34.3556 12.8667C35.0117 12.7235 35.6917 12.797 36.3097 13.0779C36.9277 13.3589 37.4559 13.8346 37.8275 14.4451C38.1991 15.0555 38.3975 15.7732 38.3975 16.5073C38.3975 17.4918 38.0412 18.4359 37.4069 19.1321C36.7726 19.8282 35.9124 20.2193 35.0154 20.2193Z" fill="#33475B"/>
|
||||
<path d="M67.3994 16.2948C67.3994 12.2454 64.2956 9.25049 60.7536 9.25049C57.5668 9.25049 54.7305 12.1998 54.7305 16.5057V28.0144H57.7113V21.8003C58.7044 22.87 59.7344 23.3407 61.2071 23.3407C64.5354 23.3407 67.3979 20.2885 67.3979 16.2948H67.3994ZM64.5769 16.2543C64.5769 16.9884 64.3785 17.7061 64.0069 18.3165C63.6353 18.927 63.1071 19.4027 62.4891 19.6837C61.8711 19.9646 61.1911 20.0381 60.535 19.8949C59.879 19.7517 59.2763 19.3982 58.8033 18.879C58.3304 18.3599 58.0082 17.6985 57.8777 16.9784C57.7473 16.2584 57.8142 15.512 58.0702 14.8338C58.3262 14.1555 58.7597 13.5758 59.3159 13.1679C59.872 12.76 60.5259 12.5423 61.1948 12.5423C62.0918 12.5423 62.9521 12.9334 63.5863 13.6295C64.2206 14.3257 64.5769 15.2698 64.5769 16.2543Z" fill="#33475B"/>
|
||||
<path d="M77.03 9.09207V5.8053C77.4257 5.60234 77.7608 5.28019 77.9962 4.87634C78.2316 4.47249 78.3577 4.00356 78.3597 3.52413V3.4482C78.3597 2.77697 78.1168 2.13323 77.6843 1.6586C77.2519 1.18397 76.6653 0.917321 76.0538 0.917321H75.9846C75.373 0.917321 74.7865 1.18397 74.354 1.6586C73.9216 2.13323 73.6786 2.77697 73.6786 3.4482V3.52413C73.6807 4.00356 73.8067 4.47249 74.0421 4.87634C74.2776 5.28019 74.6127 5.60234 75.0084 5.8053V9.09207C73.871 9.28306 72.7997 9.80051 71.903 10.592L63.6908 3.57137C63.7489 3.33986 63.7799 3.10116 63.783 2.86104C63.7839 2.297 63.6324 1.74534 63.3476 1.27583C63.0628 0.806315 62.6576 0.440047 62.1831 0.223351C61.7086 0.00665611 61.1863 -0.0507316 60.6821 0.0584472C60.1779 0.167626 59.7145 0.438466 59.3506 0.83671C58.9867 1.23495 58.7385 1.74271 58.6376 2.29575C58.5366 2.8488 58.5873 3.42229 58.7834 3.94368C58.9794 4.46506 59.3119 4.91093 59.7388 5.22489C60.1658 5.53884 60.668 5.70677 61.1819 5.70744C61.6313 5.70523 62.0723 5.57376 62.4609 5.32612L70.5487 12.2321C69.822 13.4367 69.4428 14.8537 69.4606 16.2984C69.4784 17.743 69.8924 19.1483 70.6486 20.3309L68.1889 23.0305C67.99 22.9608 67.7828 22.9238 67.574 22.9208C67.1521 22.9211 66.7398 23.0587 66.3891 23.3162C66.0384 23.5737 65.7652 23.9394 65.6039 24.3673C65.4426 24.7952 65.4005 25.2659 65.4828 25.72C65.5652 26.1741 65.7684 26.5913 66.0667 26.9187C66.365 27.2461 66.7451 27.4691 67.1589 27.5596C67.5726 27.65 68.0016 27.6037 68.3914 27.4267C68.7812 27.2496 69.1145 26.9497 69.3491 26.5649C69.5836 26.18 69.709 25.7275 69.7093 25.2644C69.7067 25.0352 69.673 24.8078 69.6094 24.5895L72.0429 21.9186C72.8365 22.5888 73.7592 23.0508 74.7405 23.2692C75.7219 23.4875 76.7357 23.4565 77.7044 23.1785C78.6731 22.9004 79.571 22.3827 80.3293 21.6651C81.0876 20.9474 81.6861 20.0487 82.0791 19.038C82.4721 18.0272 82.6491 16.9311 82.5965 15.8337C82.544 14.7362 82.2633 13.6665 81.7759 12.7066C81.2886 11.7466 80.6075 10.9217 79.7849 10.2952C78.9623 9.6687 78.0199 9.25715 77.03 9.09207ZM76.0215 19.9006C75.3558 19.9 74.7053 19.6827 74.1521 19.2764C73.5988 18.87 73.1678 18.2928 72.9134 17.6176C72.659 16.9425 72.5927 16.1997 72.7228 15.4832C72.8529 14.7667 73.1737 14.1086 73.6445 13.5921C74.1153 13.0756 74.7151 12.7239 75.3679 12.5814C76.0208 12.4389 76.6976 12.512 77.3126 12.7916C77.9276 13.0711 78.4534 13.5444 78.8233 14.1518C79.1933 14.7591 79.391 15.4732 79.3913 16.2039C79.3913 17.1838 79.0366 18.1237 78.4052 18.8167C77.7738 19.5096 76.9175 19.8989 76.0246 19.8989" fill="#FF7A59"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
7
public/images/slickCompany/microsoft.svg
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
4
public/images/slickCompany/walmart.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="112" height="27" viewBox="0 0 112 27" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M39.5322 9.2573V10.7308H39.5772C40.1074 9.94188 40.9876 9.0128 42.9387 9.0128C44.4565 9.0128 45.6209 9.7854 46.1199 10.9524H46.1649C46.5912 10.3624 47.0798 9.9158 47.6273 9.59959C48.2754 9.2247 48.9961 9.00954 49.9041 9.00954C51.9591 9.00954 53.7784 10.3461 53.7784 13.7168V20.1095H50.6457V14.1635C50.6457 12.4553 50.0288 11.4675 48.7466 11.4675C47.8075 11.4675 47.1248 12.0608 46.8649 12.791C46.7748 13.042 46.7333 13.3843 46.7333 13.6712V20.1128H43.6005V13.9222C43.6005 12.4716 43.008 11.4643 41.7431 11.4643C40.7312 11.4643 40.097 12.214 39.8371 12.8562C39.7262 13.1301 39.6916 13.4463 39.6916 13.7429V20.1095H36.5554V9.2573H39.5322ZM69.9479 9.2573V11.3045H70.0345C70.6097 9.73976 71.9751 9.0128 73.1741 9.0128C73.4756 9.0128 73.642 9.03562 73.8845 9.08126V11.9239C73.5969 11.8848 73.3301 11.8457 72.9558 11.8457C71.5974 11.8457 70.6513 12.5889 70.4122 13.7527C70.3602 13.9939 70.3429 14.2547 70.3429 14.5546V20.1128H67.127V9.2573H69.9479ZM78.2509 5.66162V9.078H80.9678V11.8424H78.2509V15.9205C78.2509 17.2408 78.6079 17.8797 79.6683 17.8797C80.1673 17.8797 80.5346 17.8211 80.8534 17.7461L80.895 20.0378C80.4688 20.1878 79.5608 20.3508 78.639 20.3508C77.5544 20.3508 76.6499 19.9954 76.0989 19.4445C75.4682 18.8153 75.1771 17.7852 75.1771 16.3182V5.66162H78.2509ZM34.3722 20.1095H31.2534V5.66162H34.3722V20.1095ZM26.0553 16.2335C26.0553 16.4323 26.038 16.641 25.9791 16.8203C25.7365 17.5733 24.9083 18.209 23.8756 18.209C23.0127 18.209 22.3266 17.7493 22.3266 16.7746C22.3266 15.2849 24.0731 14.8709 26.0588 14.8806V16.2335H26.0553ZM29.1707 13.6353C29.1707 11.1741 28.0548 9.0128 24.281 9.0128C22.3439 9.0128 20.8053 9.52461 19.9666 9.981L20.58 11.9565C21.3458 11.5001 22.5691 11.1252 23.7266 11.1252C25.6429 11.122 25.9548 12.1456 25.9548 12.8008V12.9573C21.779 12.9508 19.1419 14.3101 19.1419 17.0811C19.1419 18.773 20.483 20.3573 22.8186 20.3573C24.2568 20.3573 25.4558 19.8194 26.1766 18.9555H26.2459C26.2459 18.9555 26.7241 20.83 29.3509 20.1128C29.2123 19.3304 29.1672 18.4991 29.1672 17.4983V13.6353H29.1707ZM3.47486 5.66162C3.79715 7.19052 4.71201 11.6305 4.71201 11.6305C5.09666 13.4561 5.45013 15.3696 5.71697 16.8822H5.76548C6.02539 15.2751 6.4343 13.7527 6.87094 11.8685L8.41304 5.66162H11.8264L13.268 12.0282C13.6458 13.7983 13.9473 15.1642 14.1864 16.8105H14.2314C14.4913 15.1479 14.8309 13.7266 15.2017 11.9076L16.5879 5.66162H19.8627L15.8047 20.1095C13.2195 20.6409 12.2284 19.6629 11.875 18.1112C11.5215 16.5562 10.8284 13.5995 10.8284 13.5995C10.4715 11.9793 10.1942 10.8384 10.0002 9.1758H9.95167C9.67444 10.8221 9.38334 11.9761 8.95364 13.5962L7.25213 20.1128C4.61151 20.6083 3.69665 19.8748 3.1907 17.883C2.75407 16.1781 0.0302734 5.66488 0.0302734 5.66488H3.47486V5.66162ZM61.929 16.2335C61.929 16.4323 61.9116 16.641 61.8527 16.8203C61.6101 17.5733 60.7819 18.209 59.7492 18.209C58.8864 18.209 58.2002 17.7493 58.2002 16.7746C58.2002 15.2849 59.9468 14.8709 61.9324 14.8806V16.2335H61.929ZM65.0443 13.6353C65.0443 11.1741 63.9285 9.0128 60.1547 9.0128C58.2175 9.0128 56.6789 9.52461 55.8403 9.981L56.4537 11.9565C57.2195 11.5001 58.4428 11.1252 59.6002 11.1252C61.5131 11.122 61.8285 12.1456 61.8285 12.8008V12.9573C57.6561 12.9508 55.019 14.3101 55.019 17.0811C55.019 18.773 56.3636 20.3573 58.6958 20.3573C60.1304 20.3573 61.3329 19.8194 62.0503 18.9555H62.123C62.123 18.9555 62.6012 20.83 65.228 20.1128C65.0894 19.3304 65.0443 18.4991 65.0443 17.4983V13.6353Z" fill="#041E42"/>
|
||||
<path d="M93.6105 15.1335C93.9179 15.6611 93.8972 16.25 93.5691 16.519L87.8972 20.437C87.3065 20.774 86.4222 20.3655 85.9214 19.5111C85.417 18.6533 85.5068 17.6968 86.0975 17.3598L92.3773 14.4799C92.7711 14.3302 93.3031 14.6059 93.6105 15.1335ZM101.075 15.1335C101.386 14.6059 101.915 14.3336 102.308 14.4765L108.592 17.3563C109.182 17.6933 109.269 18.6499 108.768 19.5077C108.263 20.3621 107.376 20.7672 106.788 20.4336L101.117 16.5156C100.792 16.25 100.768 15.6577 101.075 15.1335ZM97.3411 17.2576C97.9594 17.2576 98.4672 17.5708 98.5363 17.9827L99.1477 24.7839C99.1477 25.4579 98.3497 26.0094 97.3446 26.0094C96.3428 26.0094 95.5414 25.4579 95.5414 24.7839L96.1494 17.9827C96.2185 17.5708 96.7262 17.2576 97.3411 17.2576ZM101.117 9.50325L106.788 5.5818C107.376 5.2448 108.263 5.64988 108.768 6.5077C109.269 7.36551 109.182 8.32205 108.592 8.65905L102.308 11.5423C101.915 11.6852 101.383 11.4129 101.075 10.8853C100.768 10.3577 100.792 9.76876 101.117 9.50325ZM92.3773 11.5423L86.0975 8.65905C85.5103 8.32205 85.4205 7.36551 85.9214 6.5077C86.4222 5.64988 87.31 5.2448 87.8972 5.5818L93.5691 9.50325C93.8972 9.76536 93.9179 10.3577 93.6105 10.8853C93.3031 11.4129 92.7711 11.6852 92.3773 11.5423ZM96.1494 8.03611L95.5414 1.23485C95.5414 0.560853 96.3394 0.00939941 97.3446 0.00939941C98.3497 0.00939941 99.1477 0.560853 99.1477 1.23485L98.5363 8.03611C98.4672 8.44459 97.9594 8.76117 97.3411 8.76117C96.7262 8.76117 96.2185 8.44459 96.1494 8.03611ZM110.301 20.4098V20.2396H110.457C110.509 20.2396 110.543 20.2736 110.543 20.3247C110.543 20.3723 110.509 20.4098 110.457 20.4098H110.301ZM110.174 20.7195C110.174 20.7366 110.187 20.7536 110.208 20.7536H110.274C110.291 20.7536 110.308 20.7366 110.308 20.7195V20.5255H110.415L110.502 20.7297C110.509 20.7434 110.519 20.7536 110.533 20.7536H110.612C110.637 20.7536 110.654 20.7297 110.643 20.7059C110.612 20.6446 110.581 20.58 110.55 20.5153C110.602 20.4983 110.681 20.4472 110.681 20.3247C110.681 20.1953 110.574 20.1204 110.467 20.1204H110.208C110.191 20.1204 110.174 20.1374 110.174 20.1545V20.7195ZM109.894 20.437C109.894 20.1613 110.122 19.9366 110.402 19.9366C110.681 19.9366 110.909 20.1579 110.909 20.437C110.909 20.7127 110.685 20.9374 110.402 20.9374C110.118 20.9374 109.894 20.7127 109.894 20.437ZM109.773 20.437C109.773 20.7774 110.053 21.0565 110.402 21.0565C110.747 21.0565 111.03 20.7774 111.03 20.437C111.03 20.0966 110.747 19.8175 110.402 19.8175C110.053 19.8175 109.773 20.0966 109.773 20.437Z" fill="#FFC124"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
3
public/images/testimonial/austin.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect y="-17.3334" width="64" height="95.9883"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 152 B |
11
public/images/testimonial/greenpic.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="26" height="28" viewBox="0 0 26 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.10769 22.0207L4.6077 21.1547L4.1077 22.0207L10.5 25.7113C12.047 26.6045 13.953 26.6045 15.5 25.7113L21.8923 22.0207C23.4393 21.1276 24.3923 19.4769 24.3923 17.6906V10.3094C24.3923 8.52307 23.4393 6.87244 21.8923 5.97927L15.5 2.28868C13.953 1.39551 12.047 1.39551 10.5 2.28868L4.1077 5.97927C2.56069 6.87244 1.6077 8.52307 1.6077 10.3094V17.6906C1.6077 19.4769 2.56069 21.1276 4.10769 22.0207Z" fill="#45B36B" stroke="#FCFCFD" stroke-width="2"/>
|
||||
<path d="M12.1019 9.56332C12.2065 9.38035 12.0517 9.15804 11.8438 9.19269L10.8721 9.35464C10.7236 9.37939 10.6305 9.52885 10.6737 9.67307L10.9764 10.682C11.0395 10.8924 11.3239 10.9249 11.4329 10.7342L12.1019 9.56332Z" fill="#777E91"/>
|
||||
<path d="M9.81713 10.2957C9.76139 10.1099 9.52537 10.0565 9.39878 10.2034C9.00622 10.6592 8.63545 11.138 8.25151 11.5988C8.23014 11.6244 8.20976 11.6506 8.19035 11.6773C8.08623 11.8204 8.20453 12 8.38153 12H9.99239C10.1599 12 10.28 11.8385 10.2318 11.6781L9.81713 10.2957Z" fill="#777E91"/>
|
||||
<path d="M8.30819 13C8.14002 13 8.02062 13.1639 8.10483 13.3095C8.13185 13.3562 8.1616 13.4018 8.1941 13.4461L11.7907 18.3506C11.8508 18.4326 11.9172 18.5064 11.9886 18.5719C12.1439 18.7145 12.3386 18.5502 12.2765 18.3487L10.6826 13.1764C10.6503 13.0715 10.5534 13 10.4437 13H8.30819Z" fill="#777E91"/>
|
||||
<path d="M13.7238 18.3488C13.6617 18.5503 13.8563 18.7147 14.0116 18.5721C14.0831 18.5065 14.1495 18.4327 14.2097 18.3506L17.8063 13.4461C17.8388 13.4018 17.8686 13.3562 17.8956 13.3095C17.9798 13.1639 17.8604 13 17.6922 13H15.5567C15.4469 13 15.35 13.0715 15.3177 13.1764L13.7238 18.3488Z" fill="#777E91"/>
|
||||
<path d="M17.6189 11.9999C17.7959 11.9999 17.9142 11.8204 17.8101 11.6772C17.7907 11.6505 17.7703 11.6244 17.7489 11.5987C17.365 11.138 16.9942 10.6591 16.6016 10.2033C16.475 10.0563 16.239 10.1098 16.1833 10.2956L15.7685 11.6781C15.7204 11.8385 15.8405 11.9999 16.008 11.9999H17.6189Z" fill="#777E91"/>
|
||||
<path d="M15.1277 9.35465C15.2762 9.37941 15.3693 9.52887 15.3261 9.67309L15.0234 10.682C14.9603 10.8925 14.6759 10.925 14.5669 10.7342L13.8978 9.56332C13.7932 9.38035 13.9481 9.15804 14.1559 9.19269L15.1277 9.35465Z" fill="#777E91"/>
|
||||
<path d="M13 10.0078L13.9247 11.626C14.0199 11.7927 13.8996 12 13.7076 12H12.2924C12.1004 12 11.9801 11.7927 12.0753 11.626L13 10.0078Z" fill="#777E91"/>
|
||||
<path d="M13.2393 16.5232C13.1669 16.7586 12.8338 16.7586 12.7614 16.5232L11.7769 13.3235C11.7274 13.1628 11.8476 13 12.0158 13H13.9849C14.1531 13 14.2733 13.1628 14.2238 13.3235L13.2393 16.5232Z" fill="#777E91"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
11
public/images/testimonial/smallAvatar.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="26" height="28" viewBox="0 0 26 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.10769 22.0207L4.6077 21.1547L4.1077 22.0207L10.5 25.7113C12.047 26.6045 13.953 26.6045 15.5 25.7113L21.8923 22.0207C23.4393 21.1276 24.3923 19.4769 24.3923 17.6906V10.3094C24.3923 8.52307 23.4393 6.87244 21.8923 5.97927L15.5 2.28868C13.953 1.39551 12.047 1.39551 10.5 2.28868L4.1077 5.97927C2.56069 6.87244 1.6077 8.52307 1.6077 10.3094V17.6906C1.6077 19.4769 2.56069 21.1276 4.10769 22.0207Z" fill="#45B36B" stroke="#FCFCFD" stroke-width="2"/>
|
||||
<path d="M12.1019 9.56332C12.2065 9.38035 12.0517 9.15804 11.8438 9.19269L10.8721 9.35464C10.7236 9.37939 10.6305 9.52885 10.6737 9.67307L10.9764 10.682C11.0395 10.8924 11.3239 10.9249 11.4329 10.7342L12.1019 9.56332Z" fill="#777E91"/>
|
||||
<path d="M9.81713 10.2957C9.76139 10.1099 9.52537 10.0565 9.39878 10.2034C9.00622 10.6592 8.63545 11.138 8.25151 11.5988C8.23014 11.6244 8.20976 11.6506 8.19035 11.6773C8.08623 11.8204 8.20453 12 8.38153 12H9.99239C10.1599 12 10.28 11.8385 10.2318 11.6781L9.81713 10.2957Z" fill="#777E91"/>
|
||||
<path d="M8.30819 13C8.14002 13 8.02062 13.1639 8.10483 13.3095C8.13185 13.3562 8.1616 13.4018 8.1941 13.4461L11.7907 18.3506C11.8508 18.4326 11.9172 18.5064 11.9886 18.5719C12.1439 18.7145 12.3386 18.5502 12.2765 18.3487L10.6826 13.1764C10.6503 13.0715 10.5534 13 10.4437 13H8.30819Z" fill="#777E91"/>
|
||||
<path d="M13.7238 18.3488C13.6617 18.5503 13.8563 18.7147 14.0116 18.5721C14.0831 18.5065 14.1495 18.4327 14.2097 18.3506L17.8063 13.4461C17.8388 13.4018 17.8686 13.3562 17.8956 13.3095C17.9798 13.1639 17.8604 13 17.6922 13H15.5567C15.4469 13 15.35 13.0715 15.3177 13.1764L13.7238 18.3488Z" fill="#777E91"/>
|
||||
<path d="M17.6189 11.9999C17.7959 11.9999 17.9142 11.8204 17.8101 11.6772C17.7907 11.6505 17.7703 11.6244 17.7489 11.5987C17.365 11.138 16.9942 10.6591 16.6016 10.2033C16.475 10.0563 16.239 10.1098 16.1833 10.2956L15.7685 11.6781C15.7204 11.8385 15.8405 11.9999 16.008 11.9999H17.6189Z" fill="#777E91"/>
|
||||
<path d="M15.1277 9.35465C15.2762 9.37941 15.3693 9.52887 15.3261 9.67309L15.0234 10.682C14.9603 10.8925 14.6759 10.925 14.5669 10.7342L13.8978 9.56332C13.7932 9.38035 13.9481 9.15804 14.1559 9.19269L15.1277 9.35465Z" fill="#777E91"/>
|
||||
<path d="M13 10.0078L13.9247 11.626C14.0199 11.7927 13.8996 12 13.7076 12H12.2924C12.1004 12 11.9801 11.7927 12.0753 11.626L13 10.0078Z" fill="#777E91"/>
|
||||
<path d="M13.2393 16.5232C13.1669 16.7586 12.8338 16.7586 12.7614 16.5232L11.7769 13.3235C11.7274 13.1628 11.8476 13 12.0158 13H13.9849C14.1531 13 14.2733 13.1628 14.2238 13.3235L13.2393 16.5232Z" fill="#777E91"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
BIN
public/images/testimonial/stars.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/images/testimonial/user-1.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/images/testimonial/user-2.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/images/testimonial/user-3.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
20
src/app/(site)/(auth)/signin/page.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import Signin from "@/app/components/Auth/SignIn";
|
||||
import Breadcrumb from "@/app/components/Common/Breadcrumb";
|
||||
import { Metadata } from "next";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title:
|
||||
"Sign In | Property",
|
||||
};
|
||||
|
||||
const SigninPage = () => {
|
||||
return (
|
||||
<>
|
||||
<Breadcrumb pageName="Sign In Page" />
|
||||
|
||||
<Signin />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default SigninPage;
|
||||
20
src/app/(site)/(auth)/signup/page.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import SignUp from "@/app/components/Auth/SignUp";
|
||||
import Breadcrumb from "@/app/components/Common/Breadcrumb";
|
||||
import { Metadata } from "next";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title:
|
||||
"Sign Up | Property",
|
||||
};
|
||||
|
||||
const SignupPage = () => {
|
||||
return (
|
||||
<>
|
||||
<Breadcrumb pageName="Sign Up Page" />
|
||||
|
||||
<SignUp />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default SignupPage;
|
||||
13
src/app/(site)/documentation/page.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Documentation } from '@/app/components/Documentation/Documentation'
|
||||
import { Metadata } from 'next'
|
||||
export const metadata: Metadata = {
|
||||
title: 'Featurs | SiEducational',
|
||||
}
|
||||
|
||||
export default function Page() {
|
||||
return (
|
||||
<>
|
||||
<Documentation />
|
||||
</>
|
||||
)
|
||||
}
|
||||
36
src/app/api/auth/[...nextauth]/route.js
Normal file
@@ -0,0 +1,36 @@
|
||||
import NextAuth from 'next-auth';
|
||||
import CredentialsProvider from 'next-auth/providers/credentials';
|
||||
import GoogleProvider from 'next-auth/providers/google';
|
||||
import GitHubProvider from 'next-auth/providers/github';
|
||||
|
||||
const handler = NextAuth({
|
||||
site: process.env.NEXTAUTH_URL || 'http://localhost:3000',
|
||||
providers: [
|
||||
GoogleProvider({
|
||||
clientId: process.env.GOOGLE_CLIENT_ID,
|
||||
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
||||
}),
|
||||
GitHubProvider({
|
||||
clientId: process.env.GITHUB_ID,
|
||||
clientSecret: process.env.GITHUB_SECRET,
|
||||
}),
|
||||
CredentialsProvider({
|
||||
name: 'credentials',
|
||||
credentials: {
|
||||
username: { label: 'Username', type: 'text' },
|
||||
password: { label: 'Password', type: 'password' },
|
||||
},
|
||||
authorize: async (credentials) => {
|
||||
// Add your own authentication logic here
|
||||
if (credentials.username === 'admin' && credentials.password === 'admin123') {
|
||||
// Return user object if credentials are valid
|
||||
return Promise.resolve({ id: 1, name: 'Admin', email: 'admin@example.com' });
|
||||
} else {
|
||||
// Return null if credentials are invalid
|
||||
return Promise.resolve(null);
|
||||
}
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
export { handler as GET, handler as POST };
|
||||
1
src/app/api/auth/[...nextauth]/users.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
286
src/app/api/data/route.ts
Normal file
@@ -0,0 +1,286 @@
|
||||
import { NextResponse } from 'next/server'
|
||||
|
||||
import { HeaderItem } from '@/app/types/menu'
|
||||
import { CourseType } from '@/app/types/course'
|
||||
import { Hourtype } from '@/app/types/hour'
|
||||
import { CourseDetailType } from '@/app/types/coursedetail'
|
||||
import { MentorType } from '@/app/types/mentor'
|
||||
import { TestimonialType } from '@/app/types/testimonial'
|
||||
import { FooterLinkType } from '@/app/types/footerlinks'
|
||||
|
||||
const HeaderData: HeaderItem[] = [
|
||||
{ label: 'Home', href: '/#Home' },
|
||||
{ label: 'Courses', href: '/#Courses' },
|
||||
{ label: 'Mentors', href: '/#mentors-section' },
|
||||
{ label: 'Testimonial', href: '/#testimonial-section' },
|
||||
{ label: 'Join', href: '/#join-section' },
|
||||
{ label: 'Contact Us', href: '/#contact' },
|
||||
{ label: 'Docs', href: '/documentation' },
|
||||
]
|
||||
|
||||
const CourseData: CourseType[] = [
|
||||
{ name: 'Mobile Development' },
|
||||
{ name: 'Web Development' },
|
||||
{ name: 'Data Science' },
|
||||
{ name: 'Cloud Computing' },
|
||||
]
|
||||
|
||||
const HourData: Hourtype[] = [
|
||||
{ name: '20hrs in a Month' },
|
||||
{ name: '30hrs in a Month' },
|
||||
{ name: '40hrs in a Month' },
|
||||
{ name: '50hrs in a Month' },
|
||||
]
|
||||
|
||||
const Companiesdata: { imgSrc: string }[] = [
|
||||
{
|
||||
imgSrc: '/images/slickCompany/airbnb.svg',
|
||||
},
|
||||
{
|
||||
imgSrc: '/images/slickCompany/hubspot.svg',
|
||||
},
|
||||
{
|
||||
imgSrc: '/images/slickCompany/microsoft.svg',
|
||||
},
|
||||
{
|
||||
imgSrc: '/images/slickCompany/google.svg',
|
||||
},
|
||||
{
|
||||
imgSrc: '/images/slickCompany/walmart.svg',
|
||||
},
|
||||
{
|
||||
imgSrc: '/images/slickCompany/fedex.svg',
|
||||
},
|
||||
]
|
||||
|
||||
const CourseDetailData: CourseDetailType[] = [
|
||||
{
|
||||
course: 'HTML, CSS, JS',
|
||||
imageSrc: '/images/courses/coursesOne.svg',
|
||||
profession: 'HTML, CSS, Javascript Development',
|
||||
price: '40',
|
||||
category: 'webdevelopment',
|
||||
},
|
||||
{
|
||||
course: 'Node.js',
|
||||
imageSrc: '/images/courses/coursesTwo.svg',
|
||||
profession: 'Backend with Node.js and Express.js',
|
||||
price: '21',
|
||||
category: 'webdevelopment',
|
||||
},
|
||||
{
|
||||
course: 'Database',
|
||||
imageSrc: '/images/courses/coursesThree.svg',
|
||||
profession: 'Learn Mongodb with Mongoose',
|
||||
price: '21',
|
||||
category: 'webdevelopment',
|
||||
},
|
||||
{
|
||||
course: 'React.js',
|
||||
imageSrc: '/images/courses/coursesFour.svg',
|
||||
profession: 'Learn React with Redux toolkit',
|
||||
price: '99',
|
||||
category: 'webdevelopment',
|
||||
},
|
||||
{
|
||||
course: 'React Native',
|
||||
imageSrc: '/images/courses/coursesOne.svg',
|
||||
profession: 'Learn React Native with Node.js',
|
||||
price: '89',
|
||||
category: 'mobiledevelopment',
|
||||
},
|
||||
{
|
||||
course: 'Swift',
|
||||
imageSrc: '/images/courses/coursesThree.svg',
|
||||
profession: 'Learn Swift from Scratch',
|
||||
price: '89',
|
||||
category: 'mobiledevelopment',
|
||||
},
|
||||
{
|
||||
course: 'Flutter',
|
||||
imageSrc: '/images/courses/coursesFour.svg',
|
||||
profession: 'Flutter App Development',
|
||||
price: '69',
|
||||
category: 'mobiledevelopment',
|
||||
},
|
||||
{
|
||||
course: 'Onsen UI',
|
||||
imageSrc: '/images/courses/coursesTwo.svg',
|
||||
profession: 'Learn Onsen Ui with HTML, CSS',
|
||||
price: '69',
|
||||
category: 'mobiledevelopment',
|
||||
},
|
||||
{
|
||||
course: 'TensorFlow',
|
||||
imageSrc: '/images/courses/coursesTwo.svg',
|
||||
profession: 'Learn TensorFlow with SQL',
|
||||
price: '99',
|
||||
category: 'datascience',
|
||||
},
|
||||
{
|
||||
course: 'AWS',
|
||||
imageSrc: '/images/courses/coursesFour.svg',
|
||||
profession: 'AWS Deep Learning AMI',
|
||||
price: '99',
|
||||
category: 'datascience',
|
||||
},
|
||||
{
|
||||
course: 'Bokeh',
|
||||
imageSrc: '/images/courses/coursesOne.svg',
|
||||
profession: 'Learn Bokeh with Python',
|
||||
price: '99',
|
||||
category: 'datascience',
|
||||
},
|
||||
{
|
||||
course: 'Scikit',
|
||||
imageSrc: '/images/courses/coursesThree.svg',
|
||||
profession: 'Scikit with Python Development',
|
||||
price: '89',
|
||||
category: 'datascience',
|
||||
},
|
||||
{
|
||||
course: 'Laas',
|
||||
imageSrc: '/images/courses/coursesThree.svg',
|
||||
profession: 'Infra-as-a-Service',
|
||||
price: '21',
|
||||
category: 'cloudcomputing',
|
||||
},
|
||||
{
|
||||
course: 'Iaas',
|
||||
imageSrc: '/images/courses/coursesFour.svg',
|
||||
profession: 'Info-as-a-Service',
|
||||
price: '29',
|
||||
category: 'cloudcomputing',
|
||||
},
|
||||
{
|
||||
course: 'Paas',
|
||||
imageSrc: '/images/courses/coursesOne.svg',
|
||||
profession: 'Platform-as-a-Service',
|
||||
price: '99',
|
||||
category: 'cloudcomputing',
|
||||
},
|
||||
{
|
||||
course: 'Saas',
|
||||
imageSrc: '/images/courses/coursesTwo.svg',
|
||||
profession: 'Software-as-a-Service',
|
||||
price: '58',
|
||||
category: 'cloudcomputing',
|
||||
},
|
||||
]
|
||||
|
||||
const MentorData: MentorType[] = [
|
||||
{
|
||||
name: 'Senior UX Designer',
|
||||
href: '#',
|
||||
imageSrc: '/images/mentor/boy1.svg',
|
||||
imageAlt: "Front of men's Basic Tee in black.",
|
||||
color: 'Shoo Thar Mein',
|
||||
},
|
||||
{
|
||||
name: 'Photoshop Instructor',
|
||||
href: '#',
|
||||
imageSrc: '/images/mentor/boy2.svg',
|
||||
imageAlt: "Front of men's Basic Tee in black.",
|
||||
color: 'Cristian Doru Barin',
|
||||
},
|
||||
{
|
||||
name: 'SEO Expert',
|
||||
href: '#',
|
||||
imageSrc: '/images/mentor/boy3.svg',
|
||||
imageAlt: "Front of men's Basic Tee in black.",
|
||||
color: 'Tanzeel Ur Rehman',
|
||||
},
|
||||
{
|
||||
name: 'UI/UX Designer',
|
||||
href: '#',
|
||||
imageSrc: '/images/mentor/boy4.svg',
|
||||
imageAlt: "Front of men's Basic Tee in black.",
|
||||
color: 'Andrew Williams',
|
||||
},
|
||||
{
|
||||
name: 'Web Development / Web Design',
|
||||
href: '#',
|
||||
imageSrc: '/images/mentor/boy5.svg',
|
||||
imageAlt: "Front of men's Basic Tee in black.",
|
||||
color: 'Brad Schiff',
|
||||
},
|
||||
{
|
||||
name: 'Adobe Certified Instructor',
|
||||
href: '#',
|
||||
imageSrc: '/images/mentor/girl1.svg',
|
||||
imageAlt: "Front of men's Basic Tee in black.",
|
||||
color: 'Daniel Walter Scott',
|
||||
},
|
||||
]
|
||||
|
||||
const TestimonialData: TestimonialType[] = [
|
||||
{
|
||||
profession: 'UX/UI Designer',
|
||||
name: 'Andrew Williams',
|
||||
imgSrc: '/images/testimonial/user-1.jpg',
|
||||
starimg: '/images/testimonial/stars.png',
|
||||
detail:
|
||||
"I have been a Junior Graphic Designer for more then 10 years. Some things are problem that I had and teach how to solve them. That's why this course is so great!",
|
||||
},
|
||||
{
|
||||
profession: 'UX/UI Designer',
|
||||
name: 'Cristian Doru Barin',
|
||||
imgSrc: '/images/testimonial/user-2.jpg',
|
||||
starimg: '/images/testimonial/stars.png',
|
||||
detail:
|
||||
"I have been a Junior Graphic Designer for more then 10 years. Some things are problem that I had and teach how to solve them. That's why this course is so great!",
|
||||
},
|
||||
{
|
||||
profession: 'UX/UI Designer',
|
||||
name: 'Tanzeel Ur Rehman',
|
||||
imgSrc: '/images/testimonial/user-3.jpg',
|
||||
starimg: '/images/testimonial/stars.png',
|
||||
detail:
|
||||
"I have been a Junior Graphic Designer for more then 10 years. Some things are problem that I had and teach how to solve them. That's why this course is so great!",
|
||||
},
|
||||
{
|
||||
profession: 'UX/UI Designer',
|
||||
name: 'Andrew Williams',
|
||||
imgSrc: '/images/testimonial/user-1.jpg',
|
||||
starimg: '/images/testimonial/stars.png',
|
||||
detail:
|
||||
"I have been a Junior Graphic Designer for more then 10 years. Some things are problem that I had and teach how to solve them. That's why this course is so great!",
|
||||
},
|
||||
]
|
||||
|
||||
const FooterLinkData: FooterLinkType[] = [
|
||||
{
|
||||
section: 'Company',
|
||||
links: [
|
||||
{ label: 'Home', href: '/#Home' },
|
||||
{ label: 'Courses', href: '/#Courses' },
|
||||
{ label: 'Mentors', href: '/#mentors-section' },
|
||||
{ label: 'Testimonial', href: '/#testimonial-section' },
|
||||
{ label: 'Join', href: '/#join-section' },
|
||||
{ label: 'Contact Us', href: '/#contact' },
|
||||
],
|
||||
},
|
||||
{
|
||||
section: 'Support',
|
||||
links: [
|
||||
{ label: 'Help center', href: '/' },
|
||||
{ label: 'Terms of service', href: '/' },
|
||||
{ label: 'Legal', href: '/' },
|
||||
{ label: 'Privacy Policy', href: '/' },
|
||||
{ label: 'Status', href: '/' },
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export const GET = () => {
|
||||
return NextResponse.json({
|
||||
HeaderData,
|
||||
CourseData,
|
||||
HourData,
|
||||
Companiesdata,
|
||||
CourseDetailData,
|
||||
MentorData,
|
||||
TestimonialData,
|
||||
FooterLinkData,
|
||||
})
|
||||
}
|
||||
324
src/app/components/Auth/ForgotPassword/index.tsx
Normal file
@@ -0,0 +1,324 @@
|
||||
"use client";
|
||||
import React from "react";
|
||||
import { useState } from "react";
|
||||
import toast from "react-hot-toast";
|
||||
import axios from "axios";
|
||||
import Loader from "@/app/components/Common/Loader";
|
||||
import Link from "next/link";
|
||||
import Image from "next/image";
|
||||
|
||||
const ForgotPassword = () => {
|
||||
const [email, setEmail] = useState("");
|
||||
const [loader, setLoader] = useState(false);
|
||||
|
||||
const handleSubmit = async (e: any) => {
|
||||
e.preventDefault();
|
||||
|
||||
if (!email) {
|
||||
toast.error("Please enter your email address.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
setLoader(true);
|
||||
|
||||
try {
|
||||
const res = await axios.post("/api/forgot-password/reset", {
|
||||
email: email.toLowerCase(),
|
||||
});
|
||||
|
||||
if (res.status === 404) {
|
||||
toast.error("User not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (res.status === 200) {
|
||||
toast.success(res.data);
|
||||
setEmail("");
|
||||
}
|
||||
|
||||
setEmail("");
|
||||
setLoader(false);
|
||||
} catch (error: any) {
|
||||
toast.error(error?.response.data);
|
||||
setLoader(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<section className="bg-[#F4F7FF] py-14 dark:bg-dark lg:py-20">
|
||||
<div className="container">
|
||||
<div className="-mx-4 flex flex-wrap">
|
||||
<div className="w-full px-4">
|
||||
<div
|
||||
className="wow fadeInUp relative mx-auto max-w-[525px] overflow-hidden rounded-lg bg-white px-8 py-14 text-center dark:bg-dark-2 sm:px-12 md:px-[60px]"
|
||||
data-wow-delay=".15s"
|
||||
>
|
||||
<div className="mb-10 text-center">
|
||||
<Link href="/" className="mx-auto inline-block max-w-[160px]">
|
||||
<Image
|
||||
src="/images/logo/logo.svg"
|
||||
alt="logo"
|
||||
width={140}
|
||||
height={30}
|
||||
className="dark:hidden"
|
||||
/>
|
||||
<Image
|
||||
src="/images/logo/logo-white.svg"
|
||||
alt="logo"
|
||||
width={140}
|
||||
height={30}
|
||||
className="hidden dark:block"
|
||||
/>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<form onSubmit={handleSubmit}>
|
||||
<div className="mb-[22px]">
|
||||
<input
|
||||
type="email"
|
||||
placeholder="Email"
|
||||
name="email"
|
||||
value={email}
|
||||
onChange={(e) => setEmail(e.target.value)}
|
||||
required
|
||||
className="w-full rounded-md border border-stroke bg-transparent px-5 py-3 text-base text-dark outline-hidden transition placeholder:text-dark-6 focus:border-primary focus-visible:shadow-none dark:border-dark-3 dark:text-white dark:focus:border-primary"
|
||||
/>
|
||||
</div>
|
||||
<div className="">
|
||||
<button
|
||||
type="submit"
|
||||
className="flex w-full cursor-pointer items-center justify-center rounded-md border border-primary bg-primary px-5 py-3 text-base text-white transition duration-300 ease-in-out hover:bg-blue-dark"
|
||||
>
|
||||
Send Email {loader && <Loader />}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<span className="absolute right-1 top-1">
|
||||
<svg
|
||||
width="40"
|
||||
height="40"
|
||||
viewBox="0 0 40 40"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<span className="absolute bottom-1 left-1">
|
||||
<svg
|
||||
width="29"
|
||||
height="40"
|
||||
viewBox="0 0 29 40"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="25.9912"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 25.9912)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="25.9911"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 25.9911)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="25.9911"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 25.9911)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="13.6944"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 13.6944)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="13.6943"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 13.6943)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="13.6943"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 13.6943)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="38.0087"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 38.0087)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="1.39739"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 1.39739)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="38.0089"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 38.0089)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="38.0089"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 38.0089)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="1.39761"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 1.39761)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="1.39761"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 1.39761)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default ForgotPassword;
|
||||
67
src/app/components/Auth/MagicLink/index.tsx
Normal file
@@ -0,0 +1,67 @@
|
||||
"use client";
|
||||
import { useState } from "react";
|
||||
import { signIn } from "next-auth/react";
|
||||
import toast from "react-hot-toast";
|
||||
import { validateEmail } from "@/utils/validateEmail";
|
||||
|
||||
const MagicLink = () => {
|
||||
const [email, setEmail] = useState("");
|
||||
const [loader, setLoader] = useState(false);
|
||||
|
||||
const handleSubmit = (e: any) => {
|
||||
e.preventDefault();
|
||||
|
||||
if (!email) {
|
||||
return toast.error("Please enter your email address.");
|
||||
}
|
||||
|
||||
setLoader(true);
|
||||
if (!validateEmail(email)) {
|
||||
setLoader(false);
|
||||
return toast.error("Please enter a valid email address.");
|
||||
} else {
|
||||
signIn("email", {
|
||||
redirect: false,
|
||||
email: email,
|
||||
})
|
||||
.then((callback) => {
|
||||
if (callback?.ok) {
|
||||
toast.success("Email sent");
|
||||
setEmail("");
|
||||
setLoader(false);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
toast.error("Unable to send email!");
|
||||
setLoader(false);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit}>
|
||||
<div className="mb-[22px]">
|
||||
<input
|
||||
type="email"
|
||||
placeholder="Email"
|
||||
name="email"
|
||||
required
|
||||
value={email}
|
||||
onChange={(e) => setEmail(e.target.value.toLowerCase())}
|
||||
className="w-full rounded-md border border-stroke bg-transparent px-5 py-3 text-base text-dark outline-hidden transition placeholder:text-dark-6 focus:border-primary focus-visible:shadow-none dark:border-dark-3 dark:text-white dark:focus:border-primary"
|
||||
/>
|
||||
</div>
|
||||
<div className="mb-9">
|
||||
<button
|
||||
type="submit"
|
||||
className="flex w-full cursor-pointer items-center justify-center rounded-md border border-primary bg-[#102C46] px-5 py-3 text-base text-white transition duration-300 ease-in-out hover:bg-[#102C46]"
|
||||
>
|
||||
Send Magic Link
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
);
|
||||
};
|
||||
|
||||
export default MagicLink;
|
||||
368
src/app/components/Auth/ResetPassword/index.tsx
Normal file
@@ -0,0 +1,368 @@
|
||||
"use client";
|
||||
import React, { useState, useEffect } from "react";
|
||||
import axios from "axios";
|
||||
import { useRouter } from "next/navigation";
|
||||
import toast from "react-hot-toast";
|
||||
import Loader from "@/app/components/Common/Loader";
|
||||
import Link from "next/link";
|
||||
import Image from "next/image";
|
||||
|
||||
const ResetPassword = ({ token }: { token: string }) => {
|
||||
const [data, setData] = useState({
|
||||
newPassword: "",
|
||||
ReNewPassword: "",
|
||||
});
|
||||
const [loader, setLoader] = useState(false);
|
||||
|
||||
const [user, setUser] = useState({
|
||||
email: "",
|
||||
});
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
useEffect(() => {
|
||||
const verifyToken = async () => {
|
||||
try {
|
||||
const res = await axios.post(`/api/forgot-password/verify-token`, {
|
||||
token,
|
||||
});
|
||||
|
||||
if (res.status === 200) {
|
||||
setUser({
|
||||
email: res.data.email,
|
||||
});
|
||||
}
|
||||
} catch (error: any) {
|
||||
toast.error(error?.response?.data);
|
||||
router.push("/forgot-password");
|
||||
}
|
||||
};
|
||||
|
||||
verifyToken();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
|
||||
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
setData({
|
||||
...data,
|
||||
[e.target.name]: e.target.value,
|
||||
});
|
||||
};
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
|
||||
e.preventDefault();
|
||||
setLoader(true);
|
||||
|
||||
if (data.newPassword === "") {
|
||||
toast.error("Please enter your password.");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const res = await axios.post(`/api/forgot-password/update`, {
|
||||
email: user?.email,
|
||||
password: data.newPassword,
|
||||
});
|
||||
|
||||
if (res.status === 200) {
|
||||
toast.success(res.data);
|
||||
setData({ newPassword: "", ReNewPassword: "" });
|
||||
router.push("/signin");
|
||||
}
|
||||
|
||||
setLoader(false);
|
||||
} catch (error: any) {
|
||||
toast.error(error.response.data);
|
||||
setLoader(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<section className="bg-[#F4F7FF] py-14 dark:bg-dark lg:py-20">
|
||||
<div className="container">
|
||||
<div className="-mx-4 flex flex-wrap">
|
||||
<div className="w-full px-4">
|
||||
<div
|
||||
className="wow fadeInUp relative mx-auto max-w-[525px] overflow-hidden rounded-lg bg-white px-8 py-14 text-center dark:bg-dark-2 sm:px-12 md:px-[60px]"
|
||||
data-wow-delay=".15s"
|
||||
>
|
||||
<div className="mb-10 text-center">
|
||||
<Link href="/" className="mx-auto inline-block max-w-[160px]">
|
||||
<Image
|
||||
src="/images/logo/logo.svg"
|
||||
alt="logo"
|
||||
width={140}
|
||||
height={30}
|
||||
className="dark:hidden"
|
||||
/>
|
||||
<Image
|
||||
src="/images/logo/logo-white.svg"
|
||||
alt="logo"
|
||||
width={140}
|
||||
height={30}
|
||||
className="hidden dark:block"
|
||||
/>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<form onSubmit={handleSubmit}>
|
||||
<div className="mb-[22px]">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="New password"
|
||||
name="newPassword"
|
||||
value={data?.newPassword}
|
||||
onChange={handleChange}
|
||||
required
|
||||
className="w-full rounded-md border border-stroke bg-transparent px-5 py-3 text-base text-dark outline-hidden transition placeholder:text-dark-6 focus:border-primary focus-visible:shadow-none dark:border-dark-3 dark:text-white dark:focus:border-primary"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="mb-[22px]">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="New password"
|
||||
name="newPassword"
|
||||
value={data?.newPassword}
|
||||
onChange={handleChange}
|
||||
required
|
||||
className="w-full rounded-md border border-stroke bg-transparent px-5 py-3 text-base text-dark outline-hidden transition placeholder:text-dark-6 focus:border-primary focus-visible:shadow-none dark:border-dark-3 dark:text-white dark:focus:border-primary"
|
||||
/>
|
||||
</div>
|
||||
<div className="">
|
||||
<button
|
||||
type="submit"
|
||||
className="flex w-full cursor-pointer items-center justify-center rounded-md border border-primary bg-primary px-5 py-3 text-base text-white transition duration-300 ease-in-out hover:bg-blue-dark"
|
||||
>
|
||||
Save Password {loader && <Loader />}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div>
|
||||
<span className="absolute right-1 top-1">
|
||||
<svg
|
||||
width="40"
|
||||
height="40"
|
||||
viewBox="0 0 40 40"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="38.6026"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 38.6026)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="1.99122"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 1.99122)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="26.3057"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 26.3057)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="1.39737"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 1.39737 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="13.6943"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 13.6943 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="25.9911"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 25.9911 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="38.288"
|
||||
cy="14.0086"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 38.288 14.0086)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<span className="absolute bottom-1 left-1">
|
||||
<svg
|
||||
width="29"
|
||||
height="40"
|
||||
viewBox="0 0 29 40"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="25.9912"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 25.9912)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="25.9911"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 25.9911)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="25.9911"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 25.9911)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="13.6944"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 13.6944)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="13.6943"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 13.6943)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="13.6943"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 13.6943)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="38.0087"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 38.0087)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="2.288"
|
||||
cy="1.39739"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 2.288 1.39739)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="38.0089"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 38.0089)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="38.0089"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 38.0089)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="14.5849"
|
||||
cy="1.39761"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 14.5849 1.39761)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
<circle
|
||||
cx="26.7216"
|
||||
cy="1.39761"
|
||||
r="1.39737"
|
||||
transform="rotate(-90 26.7216 1.39761)"
|
||||
fill="#3056D3"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default ResetPassword;
|
||||
107
src/app/components/Auth/SignIn/index.tsx
Normal file
@@ -0,0 +1,107 @@
|
||||
'use client'
|
||||
import { signIn } from 'next-auth/react'
|
||||
import Link from 'next/link'
|
||||
import { useRouter } from 'next/navigation'
|
||||
import { useState } from 'react'
|
||||
import toast from 'react-hot-toast'
|
||||
import SocialSignIn from '../SocialSignIn'
|
||||
import Logo from '@/app/components/Layout/Header/Logo'
|
||||
import Loader from '@/app/components/Common/Loader'
|
||||
|
||||
const Signin = () => {
|
||||
const router = useRouter()
|
||||
|
||||
const [loginData, setLoginData] = useState({
|
||||
email: '',
|
||||
password: '',
|
||||
checkboxToggle: false,
|
||||
})
|
||||
const [loading, setLoading] = useState(false)
|
||||
|
||||
const loginUser = (e: any) => {
|
||||
e.preventDefault()
|
||||
|
||||
setLoading(true)
|
||||
signIn('credentials', { ...loginData, redirect: false })
|
||||
.then((callback) => {
|
||||
if (callback?.error) {
|
||||
toast.error(callback?.error)
|
||||
console.log(callback?.error)
|
||||
setLoading(false)
|
||||
return
|
||||
}
|
||||
|
||||
if (callback?.ok && !callback?.error) {
|
||||
toast.success('Login successful')
|
||||
setLoading(false)
|
||||
router.push('/')
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
setLoading(false)
|
||||
console.log(err.message)
|
||||
toast.error(err.message)
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className='mb-10 text-center mx-auto inline-block max-w-[160px]'>
|
||||
<Logo />
|
||||
</div>
|
||||
|
||||
<SocialSignIn />
|
||||
|
||||
<span className="z-1 relative my-8 block text-center before:content-[''] before:absolute before:h-px before:w-[40%] before:bg-black/20 before:left-0 before:top-3 after:content-[''] after:absolute after:h-px after:w-[40%] after:bg-black/20 after:top-3 after:right-0">
|
||||
<span className='text-body-secondary relative z-10 inline-block px-3 text-base text-black'>
|
||||
OR
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<form onSubmit={(e) => e.preventDefault()}>
|
||||
<div className='mb-[22px]'>
|
||||
<input
|
||||
type='email'
|
||||
placeholder='Email'
|
||||
onChange={(e) =>
|
||||
setLoginData({ ...loginData, email: e.target.value })
|
||||
}
|
||||
className='w-full rounded-md border border-solid bg-transparent px-5 py-3 text-base text-dark outline-hidden transition border-gray-200 placeholder:text-black/30 focus:border-primary focus-visible:shadow-none text-black'
|
||||
/>
|
||||
</div>
|
||||
<div className='mb-[22px]'>
|
||||
<input
|
||||
type='password'
|
||||
placeholder='Password'
|
||||
onChange={(e) =>
|
||||
setLoginData({ ...loginData, password: e.target.value })
|
||||
}
|
||||
className='w-full rounded-md border border-solid bg-transparent px-5 py-3 text-base text-dark outline-hidden transition border-gray-200 placeholder:text-black/30 focus:border-primary focus-visible:shadow-none text-black'
|
||||
/>
|
||||
</div>
|
||||
<div className='mb-9'>
|
||||
<button
|
||||
onClick={loginUser}
|
||||
type='submit'
|
||||
className='bg-primary w-full py-3 rounded-lg text-18 font-medium border text-white border-primary hover:text-primary hover:bg-transparent hover:cursor-pointer transition duration-300 ease-in-out'>
|
||||
Sign In {loading && <Loader />}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<Link
|
||||
href='/'
|
||||
className='mb-2 inline-block text-base text-primary hover:underline'>
|
||||
Forgot Password?
|
||||
</Link>
|
||||
<p className='text-body-secondary text-black text-base'>
|
||||
Not a member yet?{' '}
|
||||
<Link href='/' className='text-primary hover:underline'>
|
||||
Sign Up
|
||||
</Link>
|
||||
</p>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Signin
|
||||
112
src/app/components/Auth/SignUp/index.tsx
Normal file
@@ -0,0 +1,112 @@
|
||||
'use client'
|
||||
import Link from 'next/link'
|
||||
import { useRouter } from 'next/navigation'
|
||||
import toast from 'react-hot-toast'
|
||||
import SocialSignUp from '../SocialSignUp'
|
||||
import Logo from '@/app/components/Layout/Header/Logo'
|
||||
import { useState } from 'react'
|
||||
import Loader from '@/app/components/Common/Loader'
|
||||
const SignUp = () => {
|
||||
const router = useRouter()
|
||||
const [loading, setLoading] = useState(false)
|
||||
|
||||
const handleSubmit = (e: any) => {
|
||||
e.preventDefault()
|
||||
|
||||
setLoading(true)
|
||||
const data = new FormData(e.currentTarget)
|
||||
const value = Object.fromEntries(data.entries())
|
||||
const finalData = { ...value }
|
||||
|
||||
fetch('/api/register', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(finalData),
|
||||
})
|
||||
.then((res) => res.json())
|
||||
.then((data) => {
|
||||
toast.success('Successfully registered')
|
||||
setLoading(false)
|
||||
router.push('/signin')
|
||||
})
|
||||
.catch((err) => {
|
||||
toast.error(err.message)
|
||||
setLoading(false)
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className='mb-10 text-center mx-auto inline-block max-w-[160px]'>
|
||||
<Logo />
|
||||
</div>
|
||||
|
||||
<SocialSignUp />
|
||||
|
||||
<span className="z-1 relative my-8 block text-center before:content-[''] before:absolute before:h-px before:w-[40%] before:bg-black/20 before:left-0 before:top-3 after:content-[''] after:absolute after:h-px after:w-[40%] after:bg-black/20 after:top-3 after:right-0">
|
||||
<span className='text-body-secondary relative z-10 inline-block px-3 text-base text-black'>
|
||||
OR
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<form onSubmit={handleSubmit}>
|
||||
<div className='mb-[22px]'>
|
||||
<input
|
||||
type='text'
|
||||
placeholder='Name'
|
||||
name='name'
|
||||
required
|
||||
className='w-full rounded-md border border-solid bg-transparent px-5 py-3 text-base text-dark outline-hidden transition border-gray-200 placeholder:text-black/30 focus:border-primary focus-visible:shadow-none text-black'
|
||||
/>
|
||||
</div>
|
||||
<div className='mb-[22px]'>
|
||||
<input
|
||||
type='email'
|
||||
placeholder='Email'
|
||||
name='email'
|
||||
required
|
||||
className='w-full rounded-md border border-solid bg-transparent px-5 py-3 text-base text-dark outline-hidden transition border-gray-200 placeholder:text-black/30 focus:border-primary focus-visible:shadow-none text-black'
|
||||
/>
|
||||
</div>
|
||||
<div className='mb-[22px]'>
|
||||
<input
|
||||
type='password'
|
||||
placeholder='Password'
|
||||
name='password'
|
||||
required
|
||||
className='w-full rounded-md border border-solid bg-transparent px-5 py-3 text-base text-dark outline-hidden transition border-gray-200 placeholder:text-black/30 focus:border-primary focus-visible:shadow-none text-black'
|
||||
/>
|
||||
</div>
|
||||
<div className='mb-9'>
|
||||
<button
|
||||
type='submit'
|
||||
className='flex w-full items-center text-18 font-medium justify-center rounded-md text-white bg-primary px-5 py-3 text-darkmode transition duration-300 ease-in-out hover:bg-transparent hover:text-primary border-primary border hover:cursor-pointer'>
|
||||
Sign Up {loading && <Loader />}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<p className='text-body-secondary mb-4 text-black text-base'>
|
||||
By creating an account you are agree with our{' '}
|
||||
<Link href='/#' className='text-primary hover:underline'>
|
||||
Privacy
|
||||
</Link>{' '}
|
||||
and{' '}
|
||||
<Link href='/#' className='text-primary hover:underline'>
|
||||
Policy
|
||||
</Link>
|
||||
</p>
|
||||
|
||||
<p className='text-body-secondary text-black text-base'>
|
||||
Already have an account?
|
||||
<Link href='/' className='pl-2 text-primary hover:underline'>
|
||||
Sign In
|
||||
</Link>
|
||||
</p>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default SignUp
|
||||
70
src/app/components/Auth/SocialSignIn.tsx
Normal file
@@ -0,0 +1,70 @@
|
||||
import React from 'react'
|
||||
import { signIn } from 'next-auth/react'
|
||||
|
||||
const SocialSignIn = () => {
|
||||
return (
|
||||
<>
|
||||
<div className='flex gap-4'>
|
||||
<button
|
||||
onClick={() => signIn('google')}
|
||||
className='flex w-full items-center justify-center gap-2.5 rounded-lg p-3.5 border border-gray-200 text-black hover:bg-neutral-100 hover:cursor-pointer'>
|
||||
Sign In
|
||||
<svg
|
||||
width='23'
|
||||
height='22'
|
||||
viewBox='0 0 23 22'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'>
|
||||
<g clipPath='url(#clip0_709_8846)'>
|
||||
<path
|
||||
d='M22.5001 11.2438C22.5134 10.4876 22.4338 9.73256 22.2629 8.995H11.7246V13.0771H17.9105C17.7933 13.7929 17.5296 14.478 17.1352 15.0914C16.7409 15.7047 16.224 16.2335 15.6158 16.646L15.5942 16.7827L18.9264 19.3124L19.1571 19.335C21.2772 17.4161 22.4997 14.5926 22.4997 11.2438'
|
||||
fill='#4285F4'
|
||||
/>
|
||||
<path
|
||||
d='M11.7245 22C14.755 22 17.2992 21.0221 19.1577 19.3355L15.6156 16.6464C14.6679 17.2944 13.3958 17.7467 11.7245 17.7467C10.3051 17.7385 8.92433 17.2926 7.77814 16.472C6.63195 15.6515 5.77851 14.4981 5.33892 13.1755L5.20737 13.1865L1.74255 15.8142L1.69727 15.9376C2.63043 17.7602 4.06252 19.2925 5.83341 20.3631C7.60429 21.4337 9.64416 22.0005 11.7249 22'
|
||||
fill='#34A853'
|
||||
/>
|
||||
<path
|
||||
d='M5.33889 13.1755C5.09338 12.4753 4.96669 11.7404 4.96388 11C4.9684 10.2608 5.09041 9.52685 5.32552 8.8245L5.31927 8.67868L1.81196 6.00867L1.69724 6.06214C0.910039 7.5938 0.5 9.28491 0.5 10.9999C0.5 12.7148 0.910039 14.406 1.69724 15.9376L5.33889 13.1755Z'
|
||||
fill='#FBBC05'
|
||||
/>
|
||||
<path
|
||||
d='M11.7249 4.25337C13.3333 4.22889 14.8888 4.8159 16.065 5.89121L19.2329 2.86003C17.2011 0.992106 14.5106 -0.0328008 11.7249 3.27798e-05C9.64418 -0.000452376 7.60433 0.566279 5.83345 1.63686C4.06256 2.70743 2.63046 4.23965 1.69727 6.06218L5.32684 8.82455C5.77077 7.50213 6.62703 6.34962 7.77491 5.5295C8.9228 4.70938 10.3044 4.26302 11.7249 4.25337Z'
|
||||
fill='#EB4335'
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id='clip0_709_8846'>
|
||||
<rect
|
||||
width='22'
|
||||
height='22'
|
||||
fill='white'
|
||||
transform='translate(0.5)'
|
||||
/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={() => signIn('github')}
|
||||
className='flex w-full items-center justify-center gap-2.5 rounded-lg p-3.5 border border-gray-200 text-black hover:bg-neutral-100 hover:cursor-pointer'>
|
||||
Sign In
|
||||
<svg
|
||||
width='22'
|
||||
height='22'
|
||||
viewBox='0 0 22 22'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'>
|
||||
<path
|
||||
d='M10.9997 1.83331C5.93773 1.83331 1.83301 6.04119 1.83301 11.232C1.83301 15.3847 4.45954 18.9077 8.10178 20.1505C8.55988 20.2375 8.72811 19.9466 8.72811 19.6983C8.72811 19.4743 8.71956 18.7338 8.71567 17.9485C6.16541 18.517 5.6273 16.8395 5.6273 16.8395C5.21032 15.7532 4.60951 15.4644 4.60951 15.4644C3.77785 14.8811 4.6722 14.893 4.6722 14.893C5.59272 14.9593 6.07742 15.8615 6.07742 15.8615C6.89499 17.2984 8.22184 16.883 8.74493 16.6429C8.82718 16.0353 9.06478 15.6208 9.32694 15.3861C7.2909 15.1484 5.15051 14.3425 5.15051 10.7412C5.15051 9.71509 5.5086 8.87661 6.09503 8.21844C5.99984 7.98167 5.68611 7.02577 6.18382 5.73115C6.18382 5.73115 6.95358 5.47855 8.70532 6.69458C9.43648 6.48627 10.2207 6.3819 10.9997 6.37836C11.7787 6.3819 12.5635 6.48627 13.2961 6.69458C15.0457 5.47855 15.8145 5.73115 15.8145 5.73115C16.3134 7.02577 15.9995 7.98167 15.9043 8.21844C16.4921 8.87661 16.8477 9.715 16.8477 10.7412C16.8477 14.351 14.7033 15.146 12.662 15.3786C12.9909 15.6702 13.2838 16.2423 13.2838 17.1191C13.2838 18.3766 13.2732 19.3888 13.2732 19.6983C13.2732 19.9485 13.4382 20.2415 13.9028 20.1492C17.5431 18.905 20.1663 15.3833 20.1663 11.232C20.1663 6.04119 16.0621 1.83331 10.9997 1.83331Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default SocialSignIn
|
||||
70
src/app/components/Auth/SocialSignUp.tsx
Normal file
@@ -0,0 +1,70 @@
|
||||
import React from 'react'
|
||||
import { signIn } from 'next-auth/react'
|
||||
|
||||
const SocialSignUp = () => {
|
||||
return (
|
||||
<>
|
||||
<div className='flex gap-4'>
|
||||
<button
|
||||
onClick={() => signIn('google')}
|
||||
className='flex w-full items-center justify-center gap-2.5 rounded-lg p-3.5 border border-gray-200 text-black hover:bg-neutral-100 hover:cursor-pointer'>
|
||||
Sign Up
|
||||
<svg
|
||||
width='23'
|
||||
height='22'
|
||||
viewBox='0 0 23 22'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'>
|
||||
<g clipPath='url(#clip0_709_8846)'>
|
||||
<path
|
||||
d='M22.5001 11.2438C22.5134 10.4876 22.4338 9.73256 22.2629 8.995H11.7246V13.0771H17.9105C17.7933 13.7929 17.5296 14.478 17.1352 15.0914C16.7409 15.7047 16.224 16.2335 15.6158 16.646L15.5942 16.7827L18.9264 19.3124L19.1571 19.335C21.2772 17.4161 22.4997 14.5926 22.4997 11.2438'
|
||||
fill='#4285F4'
|
||||
/>
|
||||
<path
|
||||
d='M11.7245 22C14.755 22 17.2992 21.0221 19.1577 19.3355L15.6156 16.6464C14.6679 17.2944 13.3958 17.7467 11.7245 17.7467C10.3051 17.7385 8.92433 17.2926 7.77814 16.472C6.63195 15.6515 5.77851 14.4981 5.33892 13.1755L5.20737 13.1865L1.74255 15.8142L1.69727 15.9376C2.63043 17.7602 4.06252 19.2925 5.83341 20.3631C7.60429 21.4337 9.64416 22.0005 11.7249 22'
|
||||
fill='#34A853'
|
||||
/>
|
||||
<path
|
||||
d='M5.33889 13.1755C5.09338 12.4753 4.96669 11.7404 4.96388 11C4.9684 10.2608 5.09041 9.52685 5.32552 8.8245L5.31927 8.67868L1.81196 6.00867L1.69724 6.06214C0.910039 7.5938 0.5 9.28491 0.5 10.9999C0.5 12.7148 0.910039 14.406 1.69724 15.9376L5.33889 13.1755Z'
|
||||
fill='#FBBC05'
|
||||
/>
|
||||
<path
|
||||
d='M11.7249 4.25337C13.3333 4.22889 14.8888 4.8159 16.065 5.89121L19.2329 2.86003C17.2011 0.992106 14.5106 -0.0328008 11.7249 3.27798e-05C9.64418 -0.000452376 7.60433 0.566279 5.83345 1.63686C4.06256 2.70743 2.63046 4.23965 1.69727 6.06218L5.32684 8.82455C5.77077 7.50213 6.62703 6.34962 7.77491 5.5295C8.9228 4.70938 10.3044 4.26302 11.7249 4.25337Z'
|
||||
fill='#EB4335'
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id='clip0_709_8846'>
|
||||
<rect
|
||||
width='22'
|
||||
height='22'
|
||||
fill='white'
|
||||
transform='translate(0.5)'
|
||||
/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={() => signIn('github')}
|
||||
className='flex w-full items-center justify-center gap-2.5 rounded-lg p-3.5 border border-gray-200 text-black hover:bg-neutral-100 hover:cursor-pointer'>
|
||||
Sign Up
|
||||
<svg
|
||||
width='22'
|
||||
height='22'
|
||||
viewBox='0 0 22 22'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'>
|
||||
<path
|
||||
d='M10.9997 1.83331C5.93773 1.83331 1.83301 6.04119 1.83301 11.232C1.83301 15.3847 4.45954 18.9077 8.10178 20.1505C8.55988 20.2375 8.72811 19.9466 8.72811 19.6983C8.72811 19.4743 8.71956 18.7338 8.71567 17.9485C6.16541 18.517 5.6273 16.8395 5.6273 16.8395C5.21032 15.7532 4.60951 15.4644 4.60951 15.4644C3.77785 14.8811 4.6722 14.893 4.6722 14.893C5.59272 14.9593 6.07742 15.8615 6.07742 15.8615C6.89499 17.2984 8.22184 16.883 8.74493 16.6429C8.82718 16.0353 9.06478 15.6208 9.32694 15.3861C7.2909 15.1484 5.15051 14.3425 5.15051 10.7412C5.15051 9.71509 5.5086 8.87661 6.09503 8.21844C5.99984 7.98167 5.68611 7.02577 6.18382 5.73115C6.18382 5.73115 6.95358 5.47855 8.70532 6.69458C9.43648 6.48627 10.2207 6.3819 10.9997 6.37836C11.7787 6.3819 12.5635 6.48627 13.2961 6.69458C15.0457 5.47855 15.8145 5.73115 15.8145 5.73115C16.3134 7.02577 15.9995 7.98167 15.9043 8.21844C16.4921 8.87661 16.8477 9.715 16.8477 10.7412C16.8477 14.351 14.7033 15.146 12.662 15.3786C12.9909 15.6702 13.2838 16.2423 13.2838 17.1191C13.2838 18.3766 13.2732 19.3888 13.2732 19.6983C13.2732 19.9485 13.4382 20.2415 13.9028 20.1492C17.5431 18.905 20.1663 15.3833 20.1663 11.232C20.1663 6.04119 16.0621 1.83331 10.9997 1.83331Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default SocialSignUp
|
||||
27
src/app/components/Breadcrumb/index.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import React, { FC } from 'react';
|
||||
import Link from 'next/link';
|
||||
|
||||
interface BreadcrumbProps {
|
||||
links: { href: string; text: string }[];
|
||||
}
|
||||
|
||||
const Breadcrumb: FC<BreadcrumbProps> = ({ links }) => {
|
||||
const lastIndex = links.length - 1;
|
||||
return (
|
||||
<div className="flex items-baseline flex-wrap justify-center my-[0.9375rem] mx-0">
|
||||
{links.map((link, index) => (
|
||||
<React.Fragment key={index}>
|
||||
{index !== lastIndex ? (
|
||||
<Link href={link.href} className="no-underline flex items-center text-midnight_text dark:text-white dark:text-opacity-70 font-normal md:text-21 text-18 hover:underline after:relative after:content-[''] after:ml-2.5 after:mr-[0.8125rem] after:my-0 after:inline-block after:top-[0.0625rem] after:w-2 after:h-2 after:border-r-2 after:border-solid after:border-b-2 after:border-midnight_text dark:after:border-white after:-rotate-45">
|
||||
{link.text}
|
||||
</Link>
|
||||
) : (
|
||||
<span className="dark:text-white text-midnight_text md:text-21 text-18 mx-2.5">{link.text}</span>
|
||||
)}
|
||||
</React.Fragment>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Breadcrumb;
|
||||
46
src/app/components/Common/Breadcrumb.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
import Link from "next/link";
|
||||
import { BreadcrumbProps } from "../../types/breadcrumb"; // Adjust the import path based on your project structure
|
||||
|
||||
const Breadcrumb: React.FC<BreadcrumbProps> = ({
|
||||
pageName,
|
||||
pageDescription,
|
||||
}) => {
|
||||
return (
|
||||
<div className="dark:bg-darkmode relative z-10 overflow-hidden pb-[60px] pt-[120px] md:pt-[130px] lg:pt-[160px]">
|
||||
<div className="from-stroke/0 via-stroke to-stroke/0 dark:via-dark-3 absolute bottom-0 left-0 h-px w-full bg-linear-to-r"></div>
|
||||
<div className="container mx-auto">
|
||||
<div className="-mx-4 flex flex-wrap items-center">
|
||||
<div className="w-full px-4">
|
||||
<div className="text-center">
|
||||
<h1 className="text-black mb-4 text-3xl font-bold sm:text-4xl md:text-[40px] md:leading-[1.2] dark:text-white">
|
||||
{pageName}
|
||||
</h1>
|
||||
<p className="text-black dark:text-black-6 mb-5 text-base">
|
||||
{pageDescription}
|
||||
</p>
|
||||
|
||||
<ul className="flex items-center justify-center gap-[10px]">
|
||||
<li>
|
||||
<Link
|
||||
href="/"
|
||||
className="text-black flex items-center gap-[10px] text-base font-medium dark:text-white dark:text-opacity-50"
|
||||
>
|
||||
Home
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<p className="text-body-color flex items-center gap-[10px] text-base font-medium">
|
||||
<span className="text-body-color dark:text-white dark:text-opacity-50"> / </span>
|
||||
{pageName}
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Breadcrumb;
|
||||
11
src/app/components/Common/Loader.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import React from "react";
|
||||
|
||||
const Loader = () => {
|
||||
return (
|
||||
<span
|
||||
className={`ml-1.5 h-4 w-4 animate-spin rounded-full border-2 border-solid border-white border-t-transparent dark:border-t-transparent`}
|
||||
></span>
|
||||
);
|
||||
};
|
||||
|
||||
export default Loader;
|
||||
11
src/app/components/Common/PreLoader.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import React from "react";
|
||||
|
||||
const PreLoader = () => {
|
||||
return (
|
||||
<div className="fixed left-0 top-0 z-999999 flex h-screen w-screen items-center justify-center bg-white">
|
||||
<div className="h-16 w-16 animate-spin rounded-full border-4 border-solid border-primary border-t-transparent"></div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default PreLoader;
|
||||
9
src/app/components/Common/ScrollUp.tsx
Normal file
@@ -0,0 +1,9 @@
|
||||
"use client";
|
||||
|
||||
import { useEffect } from "react";
|
||||
|
||||
export default function ScrollUp() {
|
||||
useEffect(() => window.document.scrollingElement?.scrollTo(0, 0), []);
|
||||
|
||||
return null;
|
||||
}
|
||||
181
src/app/components/Contact/Form/index.tsx
Normal file
@@ -0,0 +1,181 @@
|
||||
'use client'
|
||||
import React from 'react'
|
||||
import { useState, useEffect } from 'react'
|
||||
|
||||
const ContactForm = () => {
|
||||
const [formData, setFormData] = useState({
|
||||
firstname: '',
|
||||
lastname: '',
|
||||
email: '',
|
||||
phnumber: '',
|
||||
Message: '',
|
||||
})
|
||||
const [submitted, setSubmitted] = useState(false)
|
||||
const [showThanks, setShowThanks] = useState(false)
|
||||
const [loader, setLoader] = useState(false)
|
||||
const [isFormValid, setIsFormValid] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
const isValid = Object.values(formData).every(
|
||||
(value) => value.trim() !== ''
|
||||
)
|
||||
setIsFormValid(isValid)
|
||||
}, [formData])
|
||||
const handleChange = (e: any) => {
|
||||
const { name, value } = e.target
|
||||
setFormData((prevData) => ({
|
||||
...prevData,
|
||||
[name]: value,
|
||||
}))
|
||||
}
|
||||
const reset = () => {
|
||||
formData.firstname = ''
|
||||
formData.lastname = ''
|
||||
formData.email = ''
|
||||
formData.phnumber = ''
|
||||
formData.Message = ''
|
||||
}
|
||||
const handleSubmit = async (e: any) => {
|
||||
e.preventDefault()
|
||||
setLoader(true)
|
||||
|
||||
// TODO: 替换为你自己的邮箱地址
|
||||
fetch('https://formsubmit.co/ajax/your-email@example.com', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
Name: formData.firstname,
|
||||
LastName: formData.lastname,
|
||||
Email: formData.email,
|
||||
PhoneNo: formData.phnumber,
|
||||
Message: formData.Message,
|
||||
}),
|
||||
})
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
if (data.success) {
|
||||
setSubmitted(true)
|
||||
setShowThanks(true)
|
||||
reset()
|
||||
|
||||
setTimeout(() => {
|
||||
setShowThanks(false)
|
||||
}, 5000)
|
||||
}
|
||||
|
||||
reset()
|
||||
})
|
||||
.catch((error) => {
|
||||
setLoader(false)
|
||||
console.log(error.message)
|
||||
})
|
||||
}
|
||||
return (
|
||||
<section id='contact'>
|
||||
<div className='container'>
|
||||
<div className='relative'>
|
||||
<h2 className='mb-9 font-bold tracking-tight'>Get in Touch</h2>
|
||||
<form
|
||||
onSubmit={handleSubmit}
|
||||
className='flex flex-wrap w-full m-auto justify-between'>
|
||||
<div className='sm:flex gap-3 w-full'>
|
||||
<div className='mx-0 my-2.5 flex-1'>
|
||||
<label htmlFor='fname' className='pb-3 inline-block text-base'>
|
||||
First Name
|
||||
</label>
|
||||
<input
|
||||
id='fname'
|
||||
type='text'
|
||||
name='firstname'
|
||||
value={formData.firstname}
|
||||
onChange={handleChange}
|
||||
placeholder='John'
|
||||
className='w-full text-base px-4 rounded-2xl py-2.5 border-solid border transition-all duration-500 focus:border-primary focus:outline-0'
|
||||
/>
|
||||
</div>
|
||||
<div className='mx-0 my-2.5 flex-1'>
|
||||
<label htmlFor='lname' className='pb-3 inline-block text-base'>
|
||||
Last Name
|
||||
</label>
|
||||
<input
|
||||
id='lname'
|
||||
type='text'
|
||||
name='lastname'
|
||||
value={formData.lastname}
|
||||
onChange={handleChange}
|
||||
placeholder='Doe'
|
||||
className='w-full text-base px-4 rounded-2xl py-2.5 border-solid border transition-all duration-500 focus:border-primary focus:outline-0'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className='sm:flex gap-3 w-full'>
|
||||
<div className='mx-0 my-2.5 flex-1'>
|
||||
<label htmlFor='email' className='pb-3 inline-block text-base'>
|
||||
Email address
|
||||
</label>
|
||||
<input
|
||||
id='email'
|
||||
type='email'
|
||||
name='email'
|
||||
value={formData.email}
|
||||
onChange={handleChange}
|
||||
placeholder='john.doe@example.com'
|
||||
className='w-full text-base px-4 rounded-2xl py-2.5 border-solid border transition-all duration-500 focus:border-primary focus:outline-0'
|
||||
/>
|
||||
</div>
|
||||
<div className='mx-0 my-2.5 flex-1'>
|
||||
<label
|
||||
htmlFor='Phnumber'
|
||||
className='pb-3 inline-block text-base'>
|
||||
Phone Number
|
||||
</label>
|
||||
<input
|
||||
id='Phnumber'
|
||||
type='tel'
|
||||
name='phnumber'
|
||||
placeholder='+1234567890'
|
||||
value={formData.phnumber}
|
||||
onChange={handleChange}
|
||||
className='w-full text-base px-4 rounded-2xl py-2.5 border-solid border transition-all duration-500 focus:border-primary focus:outline-0'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className='w-full mx-0 my-2.5 flex-1'>
|
||||
<label htmlFor='message' className='text-base inline-block'>
|
||||
Message
|
||||
</label>
|
||||
<textarea
|
||||
id='message'
|
||||
name='Message'
|
||||
value={formData.Message}
|
||||
onChange={handleChange}
|
||||
className='w-full mt-2 rounded-2xl px-5 py-3 border-solid border transition-all duration-500 focus:border-primary focus:outline-0'
|
||||
placeholder='Anything else you wanna communicate'></textarea>
|
||||
</div>
|
||||
<div className='mx-0 my-2.5 w-full'>
|
||||
<button
|
||||
type='submit'
|
||||
disabled={!isFormValid || loader}
|
||||
className={`border leading-none px-6 text-lg font-medium py-4 rounded-full
|
||||
${
|
||||
!isFormValid || loader
|
||||
? 'bg-gray-300 text-gray-500 cursor-not-allowed'
|
||||
: 'bg-primary border-primary text-white hover:bg-transparent hover:text-primary cursor-pointer'
|
||||
}`}>
|
||||
Submit
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
{showThanks && (
|
||||
<div className='text-white bg-primary rounded-full px-4 text-lg mb-4.5 mt-1 absolute flex items-center gap-2'>
|
||||
Thank you for contacting us! We will get back to you soon.
|
||||
<div className='w-3 h-3 rounded-full animate-spin border-2 border-solid border-white border-t-transparent'></div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default ContactForm
|
||||
38
src/app/components/Documentation/ColorConfiguraion.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
export const ColorConfiguration = () => {
|
||||
return (
|
||||
<>
|
||||
<h3 className=" text-xl font-semibold mt-8 text-black">Colors</h3>
|
||||
<div className="p-6 rounded-md border mt-4 border-dark_border border-opacity-60">
|
||||
<p className="text-base font-medium text-muted text-opacity-60">
|
||||
<span className="font-semibold text-lg text-black">
|
||||
1. Override Colors
|
||||
</span>{" "}
|
||||
<br />
|
||||
For any change in colors : tailwind.config.ts
|
||||
</p>
|
||||
<div className="py-4 px-5 rounded-md bg-black mt-8">
|
||||
<p className="text-sm text-white/60 flex flex-col gap-2">
|
||||
<span>--color-primary: #611f69;</span>
|
||||
<span>--color-cream: #fcf5ef;</span>
|
||||
<span>--color-success: #6b9f36;</span>
|
||||
<span>--color-orange: #f9cd92;</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-6 rounded-md border mt-4 border-dark_border border-opacity-60">
|
||||
<p className="text-base font-medium text-muted text-opacity-60">
|
||||
<span className="font-semibold text-lg text-black">
|
||||
2. Override Theme Colors
|
||||
</span>{" "}
|
||||
<br />
|
||||
For change , go to : tailwind.config.ts
|
||||
</p>
|
||||
<div className="py-4 px-5 rounded-md bg-black mt-8">
|
||||
<p className="text-sm text-white/60 flex flex-col gap-2">
|
||||
<span>--color-primary: #611f69;</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
16
src/app/components/Documentation/Configuration.tsx
Normal file
@@ -0,0 +1,16 @@
|
||||
import { ColorConfiguration } from "./ColorConfiguraion"
|
||||
import { LogoConfiguration } from "./LogoConfiguration"
|
||||
import { TypographyConfiguration } from "./TypographyConfiguration"
|
||||
|
||||
export const Configuration = () => {
|
||||
return (
|
||||
<>
|
||||
<div className="pb-10 md:scroll-m-[180px] scroll-m-28" id="configuration">
|
||||
<h3 className="text-2xl font-semibold mt-4 text-black" >Project Configuration</h3>
|
||||
<ColorConfiguration />
|
||||
<TypographyConfiguration />
|
||||
<LogoConfiguration />
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
58
src/app/components/Documentation/DocNavigation.tsx
Normal file
@@ -0,0 +1,58 @@
|
||||
"use client";
|
||||
import Link from "next/link";
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
export const DocNavigation = () => {
|
||||
const [navItem, setNavItem] = useState("version");
|
||||
|
||||
function getNavItem(item: string) {
|
||||
setNavItem(item);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
console.log(navItem);
|
||||
}, [navItem]);
|
||||
|
||||
const DocsNav = [
|
||||
{
|
||||
id: 1,
|
||||
navItem: "Package Versions",
|
||||
hash: "version",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
navItem: "Pacakge Structure",
|
||||
hash: "structure",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
navItem: "Quick Start",
|
||||
hash: "start",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
navItem: "Project Configuration",
|
||||
hash: "configuration",
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-0.5 mt-4 items-start fixed pe-4">
|
||||
{DocsNav.map((item) => {
|
||||
return (
|
||||
<Link
|
||||
key={item.id}
|
||||
href={`#${item.hash}`}
|
||||
onClick={() => getNavItem(item.hash)}
|
||||
className={`py-2.5 hover:bg-primary/20 hover:text-primary dark:hover:text-primary xl:min-w-60 lg:min-w-52 min-w-full px-4 rounded-md text-base font-medium ${item.hash === navItem
|
||||
? "bg-primary text-white"
|
||||
: "text-black/60"
|
||||
}`}
|
||||
>
|
||||
{item.navItem}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
25
src/app/components/Documentation/Documentation.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
import { Configuration } from './Configuration'
|
||||
import { DocNavigation } from './DocNavigation'
|
||||
import { Introduction } from './Introduction'
|
||||
import { PackageStructure } from './PackageStructure'
|
||||
import { QuickStart } from './QuickStart'
|
||||
|
||||
export const Documentation = () => {
|
||||
return (
|
||||
<div className=''>
|
||||
<div className='container mx-auto max-w-7xl p-6 lg:pt-44 pt-16'>
|
||||
<div className='grid grid-cols-12 gap-6'>
|
||||
<div className='lg:col-span-3 col-span-12 lg:block hidden'>
|
||||
<DocNavigation />
|
||||
</div>
|
||||
<div className='lg:col-span-9 col-span-12'>
|
||||
<Introduction />
|
||||
<PackageStructure />
|
||||
<QuickStart />
|
||||
<Configuration />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
139
src/app/components/Documentation/Introduction.tsx
Normal file
@@ -0,0 +1,139 @@
|
||||
'use client'
|
||||
import Image from 'next/image'
|
||||
// import nextImg from '/public/images/documentation/Categories=Nextjs.svg'
|
||||
// import reactImg from '/public/images/documentation/Categories=React.svg'
|
||||
// import tailwindImg from '/public/images/documentation/Categories=Tailwind.svg'
|
||||
// import nextauthImg from '/public/images/documentation/nextauth.png'
|
||||
// import typescriptImg from '/public/images/documentation/Categories=Typescript.svg'
|
||||
// import axiosImg from '/public/images/documentation/axios.svg'
|
||||
import { Icon } from '@iconify/react/dist/iconify.js'
|
||||
import { useState } from 'react'
|
||||
import { DocNavigation } from './DocNavigation'
|
||||
|
||||
export const Introduction = () => {
|
||||
const [docNavbarOpen, setDocNavbarOpen] = useState(false)
|
||||
const PackageVersions = [
|
||||
{
|
||||
id: '1',
|
||||
packageName: 'NextJs',
|
||||
img: '/images/documentation/Categories=Nextjs.svg',
|
||||
version: '15.5.9',
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
packageName: 'React',
|
||||
img: '/images/documentation/Categories=React.svg',
|
||||
version: '19.2.3',
|
||||
},
|
||||
{
|
||||
id: '3',
|
||||
packageName: 'Tailwindcss',
|
||||
img: '/images/documentation/Categories=Tailwind.svg',
|
||||
version: '4',
|
||||
},
|
||||
{
|
||||
id: '4',
|
||||
packageName: 'NextAuth',
|
||||
img: '/images/documentation/nextauth.png',
|
||||
version: '4.24.11',
|
||||
},
|
||||
{
|
||||
id: '5',
|
||||
packageName: 'Typescript',
|
||||
img: '/images/documentation/Categories=Typescript.svg',
|
||||
version: '5',
|
||||
},
|
||||
]
|
||||
return (
|
||||
<>
|
||||
<div id='version' className='md:scroll-m-[180px] scroll-m-28'>
|
||||
{docNavbarOpen && (
|
||||
<div
|
||||
className='fixed top-0 left-0 w-full h-full bg-black bg-opacity-50 z-40'
|
||||
onClick={() => setDocNavbarOpen(false)}
|
||||
/>
|
||||
)}
|
||||
|
||||
<div className='flex item-center justify-between'>
|
||||
<h3 className=' text-2xl mt-4 font-semibold mb-6 text-black'>
|
||||
Package Versions
|
||||
</h3>
|
||||
<button onClick={() => setDocNavbarOpen(true)} className='p-0'>
|
||||
{' '}
|
||||
<Icon icon='gg:menu-right' className='text-3xl lg:hidden block' />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div className='w-full flex justify-between lg:gap-0 gap-6 lg:flex-nowrap flex-wrap p-6 rounded-md border border-dark_border border-opacity-60'>
|
||||
{PackageVersions &&
|
||||
PackageVersions.map((item) => {
|
||||
return (
|
||||
<div
|
||||
key={item.id}
|
||||
className='lg:w-1/5 md:w-full text-center lg:border-b-0 border-b lg:border-e lg:last:border-e-0 last:border-b-0 border-dark_border border-opacity-60'>
|
||||
<Image
|
||||
src={item.img}
|
||||
width={64}
|
||||
height={64}
|
||||
alt='npm-package'
|
||||
className=' mx-auto w-10 h-10 '
|
||||
/>
|
||||
<h5 className='text-2xl font-bold mt-3.5 text-black'>{`v${item.version}`}</h5>
|
||||
<p className='text-base font-medium text-muted'>
|
||||
{item.packageName}
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
<div className='mt-5'>
|
||||
<p className='text-base font-medium text-muted text-opacity-60'>
|
||||
SiEducational Tailwind NextJs Template is built with Tailwindcss and
|
||||
Nextjs.
|
||||
</p>
|
||||
<p className='text-base font-medium text-muted text-opacity-60'>
|
||||
These theme is ready to use and you can totally customize as per
|
||||
your requirement.
|
||||
</p>
|
||||
<p className='text-base font-medium text-muted text-opacity-60'>
|
||||
For Customize, You should have knowledge of NextJs, ReactJs,
|
||||
Tailwind and JSX to be able to modify these template.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={`lg:hidden block fixed top-0 right-0 h-full w-full bg-white dark:bg-dark shadow-lg transform transition-transform duration-300 max-w-xs ${
|
||||
docNavbarOpen ? 'translate-x-0' : 'translate-x-full'
|
||||
} z-50`}>
|
||||
<div className='flex items-center justify-between p-4'>
|
||||
<h2 className='text-lg font-bold text-midnight_text dark:text-black'>
|
||||
Docs Menu
|
||||
</h2>
|
||||
<button
|
||||
onClick={() => setDocNavbarOpen(false)}
|
||||
aria-label='Close mobile menu'>
|
||||
<svg
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
width='24'
|
||||
height='24'
|
||||
viewBox='0 0 24 24'
|
||||
className='dark:text-black'>
|
||||
<path
|
||||
fill='none'
|
||||
stroke='currentColor'
|
||||
strokeLinecap='round'
|
||||
strokeLinejoin='round'
|
||||
strokeWidth='2'
|
||||
d='M6 18L18 6M6 6l12 12'
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<nav className='px-4'>
|
||||
<DocNavigation />
|
||||
</nav>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
32
src/app/components/Documentation/LogoConfiguration.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
export const LogoConfiguration = () => {
|
||||
return (
|
||||
<>
|
||||
<h3 className=" text-xl font-semibold mt-8 text-black">Logo</h3>
|
||||
<div className="p-6 rounded-md border mt-4 border-dark_border border-opacity-60">
|
||||
<p className="text-base font-medium text-muted text-opacity-60 flex lg:flex-row flex-col">
|
||||
1. Change Logo over here :{" "}
|
||||
<span className="font-semibold text-base overflow-x-auto">
|
||||
{" "}
|
||||
src/components/Layout/Header/Logo/index.tsx
|
||||
</span>{" "}
|
||||
</p>
|
||||
<div className="py-4 px-3 rounded-md bg-black mt-8">
|
||||
<div className="text-sm text-white/60">
|
||||
<p><Link href="/"></p>
|
||||
<p><Image</p>
|
||||
<p>src="/images/logo/logo.svg"</p>
|
||||
<p>alt="logo"</p>
|
||||
<p>width={160}</p>
|
||||
<p>height={50}</p>
|
||||
<p>quality={100}</p>
|
||||
<p>
|
||||
style={width: "auto", height:
|
||||
"auto"}
|
||||
</p>
|
||||
<p>/></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
469
src/app/components/Documentation/PackageStructure.tsx
Normal file
@@ -0,0 +1,469 @@
|
||||
import { Icon } from "@iconify/react/dist/iconify.js";
|
||||
import Image from "next/image";
|
||||
import tline from "/public/images/svgs/T-Line.svg";
|
||||
import t_half_line from "/public/images/svgs/T-half_line.svg";
|
||||
import straight_line from "/public/images/svgs/straight_group.svg";
|
||||
import small_straight_line from "/public/images/svgs/smal_straight_line.svg";
|
||||
|
||||
export const PackageStructure = () => {
|
||||
const Counts = [
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
|
||||
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
|
||||
];
|
||||
return (
|
||||
<div id="structure" className="md:scroll-m-[130px] scroll-m-28">
|
||||
<h3 className="text-2xl font-semibold mt-8 text-black">
|
||||
Pacakge Structure
|
||||
</h3>
|
||||
<div className="rounded-md p-6 pt-3 border border-dark_border border-opacity-60 mt-6">
|
||||
<div className="flex items-center gap-4">
|
||||
<h5 className="text-base font-medium text-muted mt-3 mb-1">
|
||||
SiEducational Tailwind NextJs Template
|
||||
</h5>
|
||||
</div>
|
||||
<ul className="ps-0 md:ps-5 list-unstyled">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
packages
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col justify-between gap-2 mt-2">
|
||||
{Counts.slice(0, 22).map((item) => {
|
||||
return <p className="text-xl text-black">|</p>;
|
||||
})}
|
||||
</div>
|
||||
<ul className="ps-5 md:ps-5 list-unstyled">
|
||||
<li className="py-0">
|
||||
<ul className="ps-2 ps-md-3 list-unstyled">
|
||||
<li className="py-2">
|
||||
<ul className="ps-0 md:ps-5 list-unstyled">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
markdown
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
public
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
src
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col justify-between gap-2 mt-2">
|
||||
{Counts.slice(0, 22).map((item) => {
|
||||
return <p className="text-xl text-black">|</p>;
|
||||
})}
|
||||
</div>
|
||||
<ul className="ps-5 md:ps-12 list-unstyled">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
app
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col justify-between gap-2 mt-2">
|
||||
{Counts.slice(0, 16).map((item) => {
|
||||
return (
|
||||
<p className="text-xl text-black">|</p>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<ul className="ps-5 md:ps-12 list-unstyled red">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
(site)
|
||||
</span>{" "}
|
||||
<span className="fs-9 text-muted ms-4">
|
||||
(Contains all the pages)
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col justify-between gap-2 mt-2">
|
||||
{Counts.slice(0, 5).map(
|
||||
(item, index) => {
|
||||
return (
|
||||
<p
|
||||
key={index}
|
||||
className="text-xl text-black"
|
||||
>
|
||||
|
|
||||
</p>
|
||||
);
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
|
||||
<ul className="ps-5 md:ps-12 list-unstyled">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">
|
||||
|—
|
||||
</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
(auth)
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col justify-between gap-1 mt-2">
|
||||
{Counts.slice(0, 2).map(
|
||||
(item) => {
|
||||
return (
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
);
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
<ul className="ps-5 md:ps-12 list-unstyled">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-8">
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">
|
||||
|—
|
||||
</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
signin
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-8">
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">
|
||||
|—
|
||||
</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
signup
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">
|
||||
|—
|
||||
</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
documentation
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
api
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col justify-between gap-2 mt-2">
|
||||
{Counts.slice(0, 2).map((item) => {
|
||||
return (
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<ul className="ps-5 md:ps-12 list-unstyled">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-8">
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">
|
||||
|—
|
||||
</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
auth
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-8">
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">
|
||||
|—
|
||||
</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
contex
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
Context
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col justify-between gap-2 mt-2">
|
||||
{Counts.slice(0, 1).map((item) => {
|
||||
return (
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<ul className="ps-5 md:ps-12 list-unstyled">
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-8">
|
||||
<p className="text-xl text-black">
|
||||
|
|
||||
</p>
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">
|
||||
|—
|
||||
</p>
|
||||
<span className="font-medium text-muted flex items-center flex-wrap">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
<p className="max-w-12 lg:max-w-full truncate">
|
||||
authDialogContext.tsx
|
||||
</p>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
global.css
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
layout.tsx
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
not-found.tsx
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
page.tsx
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center flex-wrap gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
components
|
||||
</span>{" "}
|
||||
<span className="fs-9 text-muted ms-4">
|
||||
(All the Components of this template.)
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
styles
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
types
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<Icon
|
||||
icon="tabler:folder"
|
||||
className="text-primary text-base inline-block me-2"
|
||||
/>
|
||||
utils
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<i className="ti ti-file me-2 text-primary font-bold" />
|
||||
next.config.mjs
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<i className="ti ti-file me-2 text-primary font-bold" />
|
||||
postcss.config.mjs
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<i className="ti ti-file me-2 text-primary font-bold" />
|
||||
package.json
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
<li className="py-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<p className="text-xl text-black">|—</p>
|
||||
<span className="font-medium text-muted">
|
||||
<i className="ti ti-file me-2 text-primary font-bold" />
|
||||
tsconfig.json
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
87
src/app/components/Documentation/QuickStart.tsx
Normal file
@@ -0,0 +1,87 @@
|
||||
export const QuickStart = () => {
|
||||
return (
|
||||
<div className="pb-10 md:scroll-m-[180px] scroll-m-28" id="start">
|
||||
<h3 className=" text-black text-2xl font-semibold mt-8">Quick Start</h3>
|
||||
<div className="p-6 rounded-md border mt-6 border-dark_border border-opacity-60">
|
||||
<h6 className="text-black text-lg font-medium">1. Requirements</h6>
|
||||
<p className="text-base font-medium text-muted text-opacity-60">
|
||||
Before proceeding, you need to have the latest stable{" "}
|
||||
<a href="https://nodejs.org/" className="text-primary">
|
||||
node.js
|
||||
</a>{" "}
|
||||
</p>
|
||||
<h6 className="mt-4 mb-2 text-black font-medium text-base">
|
||||
Recommended environment:
|
||||
</h6>
|
||||
<ul className="list-disc text-muted text-opacity-60 ps-6">
|
||||
<li>node js 20+</li>
|
||||
<li>npm js 10+</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="p-6 rounded-md border mt-6 border-dark_border border-opacity-60">
|
||||
<h6 className="text-black text-lg font-medium">2. Install</h6>
|
||||
<p className="text-base font-medium text-muted text-opacity-60">
|
||||
Open package folder and install its dependencies. We recommanded yarn
|
||||
or npm.{" "}
|
||||
</p>
|
||||
<h6 className="mt-4 mb-2 text-black text-dark font-medium text-base">
|
||||
1) Install with npm:
|
||||
</h6>
|
||||
<div className="py-4 px-3 rounded-md bg-black">
|
||||
<p className="text-sm text-white/60">
|
||||
<span className="text-yellow-500">cd</span> project-folder
|
||||
</p>
|
||||
<p className="text-sm text-white/60 mt-2">npm install</p>
|
||||
</div>
|
||||
<h6 className="mt-4 mb-2 text-black text-dark font-medium text-base">
|
||||
1) Install with yarn:
|
||||
</h6>
|
||||
<div className="py-4 px-3 rounded-md bg-black">
|
||||
<p className="text-sm text-white/60">
|
||||
<span className="text-yellow-500">cd</span> project-folder
|
||||
</p>
|
||||
<p className="text-sm text-white/60 mt-2">yarn install</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-6 rounded-md border mt-6 border-dark_border border-opacity-60">
|
||||
<h6 className="text-black text-lg font-medium">3. Start</h6>
|
||||
<p className="text-base font-medium text-muted text-opacity-60 mb-4">
|
||||
Once npm install is done now you an run the app.
|
||||
</p>
|
||||
|
||||
<div className="py-4 px-3 rounded-md bg-black">
|
||||
<p className="text-sm text-white/60">npm run dev or yarn run dev</p>
|
||||
</div>
|
||||
<p className="text-base font-medium text-muted text-opacity-60 my-4">
|
||||
This command will start a local webserver{" "}
|
||||
<span className="dark:text-black">http://localhost:3000:</span>
|
||||
</p>
|
||||
<div className="py-4 px-3 rounded-md bg-black">
|
||||
<p className="text-sm text-white/60">
|
||||
{"> sieducational_project@2.0.0 dev"}
|
||||
</p>
|
||||
<p className="text-sm text-white/60 mt-1">{"> next dev"}</p>
|
||||
<p className="text-sm text-white/60 mt-6">{"-Next.js 14.2.4"}</p>
|
||||
<p className="text-sm text-white/60 mt-1">
|
||||
{"-Local: http://localhost:3000"}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-6 rounded-md border mt-6 border-dark_border border-opacity-60">
|
||||
<h6 className="text-black text-lg font-medium">
|
||||
4. Build / Deployment
|
||||
</h6>
|
||||
<p className="text-base font-medium text-muted text-opacity-60 mb-4">
|
||||
After adding url run below command for build a app.
|
||||
</p>
|
||||
|
||||
<div className="py-4 px-3 rounded-md bg-black">
|
||||
<p className="text-sm text-white/60">npm run build or yarn build</p>
|
||||
</div>
|
||||
<p className="text-base font-medium text-muted text-opacity-60 mt-6">
|
||||
Finally, Your webiste is ready to be deployed.🥳
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
21
src/app/components/Documentation/TypographyConfiguration.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
export const TypographyConfiguration = () => {
|
||||
return (
|
||||
<>
|
||||
<h3 className="text-xl font-semibold mt-8 text-black">Typography</h3>
|
||||
<div className="p-6 rounded-md border mt-4 border-dark_border border-opacity-60">
|
||||
<p className="text-base font-medium text-muted text-opacity-60">
|
||||
1. Change Font family over here :{" "}
|
||||
<span className="font-semibold text-base">src/app/layout.tsx</span>{" "}
|
||||
</p>
|
||||
<div className="py-4 px-3 rounded-md bg-black mt-8">
|
||||
<p className="text-sm text-white/60 flex flex-col gap-2 mb-3">
|
||||
{`import { Inter } from "next/font/google";`}
|
||||
</p>
|
||||
<p className="text-sm text-white/60 flex flex-col gap-2">
|
||||
{`const font = Inter({ subsets: ["latin"] });`}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
92
src/app/components/Home/Companies/index.tsx
Normal file
@@ -0,0 +1,92 @@
|
||||
'use client'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import Slider from 'react-slick'
|
||||
import 'slick-carousel/slick/slick.css'
|
||||
import 'slick-carousel/slick/slick-theme.css'
|
||||
import Image from 'next/image'
|
||||
|
||||
const Companies = () => {
|
||||
const settings = {
|
||||
dots: false,
|
||||
infinite: true,
|
||||
slidesToShow: 4,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
autoplay: true,
|
||||
speed: 2000,
|
||||
autoplaySpeed: 2000,
|
||||
cssEase: 'linear',
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1024,
|
||||
settings: {
|
||||
slidesToShow: 4,
|
||||
slidesToScroll: 1,
|
||||
infinite: true,
|
||||
dots: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
breakpoint: 700,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
infinite: true,
|
||||
dots: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
breakpoint: 500,
|
||||
settings: {
|
||||
slidesToShow: 1,
|
||||
slidesToScroll: 1,
|
||||
infinite: true,
|
||||
dots: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
const [companies, setCompianes] = useState<{ imgSrc: string }[]>([])
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch')
|
||||
const data = await res.json()
|
||||
setCompianes(data.Companiesdata)
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<section>
|
||||
<div className='container mx-auto max-w-7xl px-4'>
|
||||
<h2 className='text-lg mb-10 text-black/40 text-center'>
|
||||
Trusted by companies of all sizes
|
||||
</h2>
|
||||
<div>
|
||||
<Slider {...settings}>
|
||||
{companies.map((item, i) => (
|
||||
<div key={i}>
|
||||
<Image
|
||||
src={item.imgSrc}
|
||||
alt={item.imgSrc}
|
||||
width={100}
|
||||
height={50}
|
||||
className='w-auto'
|
||||
/>
|
||||
</div>
|
||||
))}
|
||||
</Slider>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default Companies
|
||||
252
src/app/components/Home/Courses/index.tsx
Normal file
@@ -0,0 +1,252 @@
|
||||
'use client'
|
||||
import { useEffect, useState } from 'react'
|
||||
import { Icon } from '@iconify/react/dist/iconify.js'
|
||||
import Image from 'next/image'
|
||||
import { CourseDetailType } from '@/app/types/coursedetail'
|
||||
import CourseDetailSkeleton from '../../Skeleton/CourseDetail'
|
||||
import Link from 'next/link'
|
||||
|
||||
interface Name {
|
||||
imageSrc: string
|
||||
course: string
|
||||
price: string
|
||||
profession: string
|
||||
category:
|
||||
| 'webdevelopment'
|
||||
| 'mobiledevelopment'
|
||||
| 'datascience'
|
||||
| 'cloudcomputing'
|
||||
}
|
||||
|
||||
const NamesList = () => {
|
||||
// -------------------------------------------------------------
|
||||
const [courseDetail, setCourseDetail] = useState<CourseDetailType[]>([])
|
||||
const [loading, setLoading] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch.')
|
||||
const data = await res.json()
|
||||
setCourseDetail(data.CourseDetailData)
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
// -------------------------------------------------------------
|
||||
|
||||
const [selectedButton, setSelectedButton] = useState<
|
||||
| 'mobiledevelopment'
|
||||
| 'webdevelopment'
|
||||
| 'datascience'
|
||||
| 'cloudcomputing'
|
||||
| 'all'
|
||||
| null
|
||||
>('webdevelopment')
|
||||
const mobileDevelopment = courseDetail.filter(
|
||||
(name) => name.category === 'mobiledevelopment'
|
||||
)
|
||||
const webDevelopment = courseDetail.filter(
|
||||
(name) => name.category === 'webdevelopment'
|
||||
)
|
||||
const dataScience = courseDetail.filter(
|
||||
(name) => name.category === 'datascience'
|
||||
)
|
||||
const cloudComputing = courseDetail.filter(
|
||||
(name) => name.category === 'cloudcomputing'
|
||||
)
|
||||
|
||||
let selectedNames: Name[] = []
|
||||
if (selectedButton === 'mobiledevelopment') {
|
||||
selectedNames = mobileDevelopment
|
||||
} else if (selectedButton === 'webdevelopment') {
|
||||
selectedNames = webDevelopment
|
||||
} else if (selectedButton === 'datascience') {
|
||||
selectedNames = dataScience
|
||||
} else if (selectedButton === 'cloudcomputing') {
|
||||
selectedNames = cloudComputing
|
||||
}
|
||||
|
||||
const nameElements = selectedNames.map((name, index) => (
|
||||
<div id='Courses' key={index} className='shadow-lg rounded-xl group flex'>
|
||||
<div className='py-5 lg:py-0 flex flex-col'>
|
||||
<div className='overflow-hidden rounded-lg bg-gray-100'>
|
||||
<Image
|
||||
src={name.imageSrc}
|
||||
alt={name.course}
|
||||
width={700}
|
||||
height={700}
|
||||
className='h-full w-full object-cover object-center group-hover:scale-125 transition duration-300 ease-in-out'
|
||||
/>
|
||||
</div>
|
||||
<div className='p-4 flex flex-col justify-between gap-5 flex-1'>
|
||||
<div className="flex flex-col gap-5">
|
||||
<div className='flex items-center justify-between'>
|
||||
<p className='block font-normal text-gray-900'>{name.course}</p>
|
||||
<div className='block text-lg font-semibold text-success border-solid border-2 border-success rounded-md px-1'>
|
||||
<p>${name.price}</p>
|
||||
</div>
|
||||
</div>
|
||||
<Link href={'/'}>
|
||||
<p
|
||||
aria-hidden='true'
|
||||
className='text-xl font-semibold group-hover:text-primary group-hover:cursor-pointer'>
|
||||
{name.profession}
|
||||
</p>
|
||||
</Link>
|
||||
</div>
|
||||
<div className='flex justify-between border-solid border-2 rounded-md p-2'>
|
||||
<p>12 Classes</p>
|
||||
<div className='flex flex-row space-x-4'>
|
||||
<div className='flex'>
|
||||
<Image
|
||||
src={'/images/courses/account.svg'}
|
||||
width={18}
|
||||
height={20}
|
||||
alt='circle'
|
||||
/>
|
||||
<p className='text-lightgrey ml-1'>120</p>
|
||||
</div>
|
||||
<div className='flex'>
|
||||
<Image
|
||||
src={'/images/courses/Star.svg'}
|
||||
width={18}
|
||||
height={20}
|
||||
alt='star'
|
||||
/>
|
||||
<p className='ml-1'>4.5</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))
|
||||
|
||||
return (
|
||||
<section id='courses-section'>
|
||||
<div className='container mx-auto max-w-7xl px-4'>
|
||||
<div className='flex flex-col sm:flex-row justify-between sm:items-center gap-5 mb-4'>
|
||||
<h2 className='font-bold tracking-tight'>Popular Courses</h2>
|
||||
<div>
|
||||
<button className='bg-transparent cursor-pointer hover:bg-primary text-primary font-medium hover:text-white py-3 px-4 border border-primary hover:border-transparent rounded-sm duration-300'>
|
||||
Explore Classes
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className='flex nowhitespace space-x-5 rounded-xl bg-white p-1 overflow-x-auto mb-4'>
|
||||
{/* FOR DESKTOP VIEW */}
|
||||
<button
|
||||
onClick={() => setSelectedButton('webdevelopment')}
|
||||
className={
|
||||
'bg-white' +
|
||||
(selectedButton === 'webdevelopment'
|
||||
? 'text-black border-b-2 border-yellow-200'
|
||||
: 'text-black/40') +
|
||||
' pb-2 text-lg hidden sm:block hover:cursor-pointer'
|
||||
}>
|
||||
Web Development
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setSelectedButton('mobiledevelopment')}
|
||||
className={
|
||||
'bg-white ' +
|
||||
(selectedButton === 'mobiledevelopment'
|
||||
? 'text-black border-b-2 border-yellow-200'
|
||||
: 'text-black/40') +
|
||||
' pb-2 text-lg hidden sm:block hover:cursor-pointer'
|
||||
}>
|
||||
Mobile Development
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setSelectedButton('datascience')}
|
||||
className={
|
||||
'bg-white ' +
|
||||
(selectedButton === 'datascience'
|
||||
? 'text-black border-b-2 border-yellow-200'
|
||||
: 'text-black/40') +
|
||||
' pb-2 text-lg hidden sm:block hover:cursor-pointer'
|
||||
}>
|
||||
Data Science
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setSelectedButton('cloudcomputing')}
|
||||
className={
|
||||
'bg-white ' +
|
||||
(selectedButton === 'cloudcomputing'
|
||||
? 'text-black border-b-2 border-yellow-200'
|
||||
: 'text-black/40') +
|
||||
' pb-2 text-lg hidden sm:block hover:cursor-pointer'
|
||||
}>
|
||||
Cloud Computing
|
||||
</button>
|
||||
|
||||
{/* FOR MOBILE VIEW */}
|
||||
<Icon
|
||||
icon='solar:global-line-duotone'
|
||||
onClick={() => setSelectedButton('webdevelopment')}
|
||||
className={
|
||||
'text-5xl sm:hidden block ' +
|
||||
(selectedButton === 'webdevelopment'
|
||||
? 'border-b-2 border-yellow-200'
|
||||
: 'text-gray-400')
|
||||
}
|
||||
/>
|
||||
|
||||
<Icon
|
||||
icon='solar:smartphone-line-duotone'
|
||||
onClick={() => setSelectedButton('mobiledevelopment')}
|
||||
className={
|
||||
'text-5xl sm:hidden block ' +
|
||||
(selectedButton === 'mobiledevelopment'
|
||||
? 'border-b-2 border-yellow-200'
|
||||
: 'text-gray-400')
|
||||
}
|
||||
/>
|
||||
|
||||
<Icon
|
||||
icon='solar:database-line-duotone'
|
||||
onClick={() => setSelectedButton('datascience')}
|
||||
className={
|
||||
'text-5xl sm:hidden block ' +
|
||||
(selectedButton === 'datascience'
|
||||
? 'border-b-2 border-yellow-200'
|
||||
: 'text-gray-400')
|
||||
}
|
||||
/>
|
||||
|
||||
<Icon
|
||||
icon='solar:cloud-line-duotone'
|
||||
onClick={() => setSelectedButton('cloudcomputing')}
|
||||
className={
|
||||
'text-5xl sm:hidden block ' +
|
||||
(selectedButton === 'cloudcomputing'
|
||||
? 'border-b-2 border-yellow-200'
|
||||
: 'text-gray-400')
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<div className='grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8'>
|
||||
{loading ? (
|
||||
Array.from({ length: 4 }).map((_, i) => (
|
||||
<CourseDetailSkeleton key={i} />
|
||||
))
|
||||
) : nameElements.length > 0 ? (
|
||||
nameElements
|
||||
) : (
|
||||
<p>No data to show</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default NamesList
|
||||
91
src/app/components/Home/Hero/Dropdownone.tsx
Normal file
@@ -0,0 +1,91 @@
|
||||
'use client'
|
||||
import { Fragment, useEffect, useState } from 'react'
|
||||
import {
|
||||
Listbox,
|
||||
ListboxButton,
|
||||
ListboxOptions,
|
||||
ListboxOption,
|
||||
Transition,
|
||||
} from '@headlessui/react'
|
||||
import { Icon } from '@iconify/react/dist/iconify.js'
|
||||
import { CourseType } from '@/app/types/course'
|
||||
|
||||
const Dropdown = () => {
|
||||
const [course, setCourse] = useState<CourseType[]>([])
|
||||
const [selected, setSelected] = useState<CourseType | null>(null)
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch')
|
||||
const data = await res.json()
|
||||
setCourse(data.CourseData)
|
||||
setSelected(data.CourseData[0])
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div className='w-full'>
|
||||
<p className='text-lg text-gray-500'>What do you want to learn?</p>
|
||||
<Listbox value={selected} onChange={setSelected}>
|
||||
<div className='relative mt-1'>
|
||||
<ListboxButton className='relative w-full cursor-default rounded-lg bg-white text-xl py-2 pr-10 text-left focus:outline-hidden focus-visible:border-indigo-500 focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75 focus-visible:ring-offset-2 focus-visible:ring-offset-orange-300 sm:text-sm hover:cursor-pointer'>
|
||||
<span className='block truncate text-xl font-semibold '>
|
||||
{selected?.name}
|
||||
</span>
|
||||
<span className='pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2'>
|
||||
<Icon
|
||||
icon='tabler:chevron-down'
|
||||
className='text-gray-400 text-xl inline-block me-2'
|
||||
/>
|
||||
</span>
|
||||
</ListboxButton>
|
||||
<Transition
|
||||
as={Fragment}
|
||||
leave='transition ease-in duration-100'
|
||||
leaveFrom='opacity-100'
|
||||
leaveTo='opacity-0'>
|
||||
<ListboxOptions className='absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-hidden sm:text-sm'>
|
||||
{course.map((person, personIdx) => (
|
||||
<ListboxOption
|
||||
key={personIdx}
|
||||
className={({ active }) =>
|
||||
`relative cursor-default select-none py-2 pl-10 pr-4 ${
|
||||
active ? 'bg-amber-100 text-amber-900' : 'text-gray-900'
|
||||
}`
|
||||
}
|
||||
value={person}>
|
||||
{({ selected }) => (
|
||||
<>
|
||||
<span
|
||||
className={`block truncate ${
|
||||
selected ? 'font-medium' : 'font-normal'
|
||||
}`}>
|
||||
{person.name}
|
||||
</span>
|
||||
{selected ? (
|
||||
<span className='absolute inset-y-0 left-0 flex items-center pl-3 text-amber-600'>
|
||||
<Icon
|
||||
icon='tabler:check'
|
||||
className='text-xl inline-block me-2'
|
||||
/>
|
||||
</span>
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
</ListboxOption>
|
||||
))}
|
||||
</ListboxOptions>
|
||||
</Transition>
|
||||
</div>
|
||||
</Listbox>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Dropdown
|
||||
91
src/app/components/Home/Hero/Dropdowntwo.tsx
Normal file
@@ -0,0 +1,91 @@
|
||||
'use client'
|
||||
import { Fragment, useEffect, useState } from 'react'
|
||||
import {
|
||||
Listbox,
|
||||
ListboxButton,
|
||||
ListboxOptions,
|
||||
ListboxOption,
|
||||
Transition,
|
||||
} from '@headlessui/react'
|
||||
import { Icon } from '@iconify/react/dist/iconify.js'
|
||||
import { Hourtype } from '@/app/types/hour'
|
||||
|
||||
const Dropdown = () => {
|
||||
const [hour, setHour] = useState<Hourtype[]>([])
|
||||
const [selected, setSelected] = useState<Hourtype | null>(null)
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch')
|
||||
const data = await res.json()
|
||||
setHour(data.HourData)
|
||||
setSelected(data.HourData[0])
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div className='w-full'>
|
||||
<p className='text-lg text-gray-500'>Hours you going to invest?</p>
|
||||
<Listbox value={selected} onChange={setSelected}>
|
||||
<div className='relative mt-1'>
|
||||
<ListboxButton className='relative w-full cursor-default rounded-lg bg-white text-xl py-2 pr-10 text-left focus:outline-hidden focus-visible:border-indigo-500 focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75 focus-visible:ring-offset-2 focus-visible:ring-offset-orange-300 sm:text-sm hover:cursor-pointer'>
|
||||
<span className='block truncate text-xl font-semibold '>
|
||||
{selected?.name}
|
||||
</span>
|
||||
<span className='pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2'>
|
||||
<Icon
|
||||
icon='tabler:chevron-down'
|
||||
className='text-gray-400 text-xl inline-block me-2'
|
||||
/>
|
||||
</span>
|
||||
</ListboxButton>
|
||||
<Transition
|
||||
as={Fragment}
|
||||
leave='transition ease-in duration-100'
|
||||
leaveFrom='opacity-100'
|
||||
leaveTo='opacity-0'>
|
||||
<ListboxOptions className='absolute mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-hidden sm:text-sm'>
|
||||
{hour.map((person, personIdx) => (
|
||||
<ListboxOption
|
||||
key={personIdx}
|
||||
className={({ active }) =>
|
||||
`relative cursor-default select-none py-2 pl-10 pr-4 ${
|
||||
active ? 'bg-amber-100 text-amber-900' : 'text-gray-900'
|
||||
}`
|
||||
}
|
||||
value={person}>
|
||||
{({ selected }) => (
|
||||
<>
|
||||
<span
|
||||
className={`block truncate ${
|
||||
selected ? 'font-medium' : 'font-normal'
|
||||
}`}>
|
||||
{person.name}
|
||||
</span>
|
||||
{selected ? (
|
||||
<span className='absolute inset-y-0 left-0 flex items-center pl-3 text-amber-600'>
|
||||
<Icon
|
||||
icon='tabler:check'
|
||||
className='text-xl inline-block me-2'
|
||||
/>
|
||||
</span>
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
</ListboxOption>
|
||||
))}
|
||||
</ListboxOptions>
|
||||
</Transition>
|
||||
</div>
|
||||
</Listbox>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Dropdown
|
||||
103
src/app/components/Home/Hero/index.tsx
Normal file
@@ -0,0 +1,103 @@
|
||||
import Link from 'next/link'
|
||||
import Dropdownone from './Dropdownone'
|
||||
import Dropdowntwo from './Dropdowntwo'
|
||||
import Image from 'next/image'
|
||||
|
||||
const Banner = () => {
|
||||
return (
|
||||
<section id='Home' className='bg-banner-image pt-28 pb-20'>
|
||||
<div className='relative px-6 lg:px-8'>
|
||||
<div className='container'>
|
||||
<div className='flex flex-col gap-4 text-center'>
|
||||
<h1 className='leading-tight font-bold tracking-tight max-w-4xl mx-auto'>
|
||||
Advance your engineering skills with our courses
|
||||
</h1>
|
||||
<p className='text-lg leading-8 text-black'>
|
||||
Build skills with our courses and mentor from world-class
|
||||
companies.
|
||||
</p>
|
||||
<div className='backdrop-blur-md bg-white/30 border border-white/30 rounded-lg shadow-lg p-6 w-fit mx-auto'>
|
||||
<div className='flex items-center justify-center gap-8'>
|
||||
<div className='hidden sm:block -space-x-2 overflow-hidden'>
|
||||
<Image
|
||||
className='inline-block h-12 w-12 rounded-full ring-2 ring-white'
|
||||
src='https://images.unsplash.com/photo-1491528323818-fdd1faba62cc?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80'
|
||||
alt='img1'
|
||||
width={12}
|
||||
height={12}
|
||||
/>
|
||||
|
||||
<Image
|
||||
className='inline-block h-12 w-12 rounded-full ring-2 ring-white'
|
||||
src='https://images.unsplash.com/photo-1550525811-e5869dd03032?ixlib=rb-1.2.1&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80'
|
||||
alt='img2'
|
||||
width={12}
|
||||
height={12}
|
||||
/>
|
||||
<Image
|
||||
className='inline-block h-12 w-12 rounded-full ring-2 ring-white'
|
||||
src='https://images.unsplash.com/photo-1500648767791-00dcc994a43e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2.25&w=256&h=256&q=80'
|
||||
alt='img3'
|
||||
width={12}
|
||||
height={12}
|
||||
/>
|
||||
<Image
|
||||
className='inline-block h-12 w-12 rounded-full ring-2 ring-white'
|
||||
src='https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80'
|
||||
alt='img4'
|
||||
width={12}
|
||||
height={12}
|
||||
/>
|
||||
<Image
|
||||
className='inline-block h-12 w-12 rounded-full ring-2 ring-white'
|
||||
src='https://images.unsplash.com/photo-1550525811-e5869dd03032?ixlib=rb-1.2.1&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80'
|
||||
alt='img5'
|
||||
width={12}
|
||||
height={12}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<div className='flex justify-center sm:justify-start'>
|
||||
<h3 className='text-2xl font-semibold mr-2'>4.6</h3>
|
||||
<Image
|
||||
src={'/images/banner/Stars.svg'}
|
||||
alt='stars-icon'
|
||||
width={32}
|
||||
height={32}
|
||||
className='w-[60%]'
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className='text-sm'>Rated by 25k on google.</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* DROPDOWN BUTTONS */}
|
||||
|
||||
<div className='mx-auto max-w-4xl mt-12 p-6 lg:max-w-4xl lg:px-8 bg-white rounded-lg boxshadow'>
|
||||
<div className='grid grid-cols-1 gap-y-10 gap-x-6 sm:grid-cols-2 lg:grid-cols-8 xl:gap-x-8'>
|
||||
<div className='col-span-3'>
|
||||
<Dropdownone />
|
||||
</div>
|
||||
<div className='col-span-3'>
|
||||
<Dropdowntwo />
|
||||
</div>
|
||||
<div className='col-span-3 sm:col-span-2 mt-2'>
|
||||
<Link href={'/#courses-section'}>
|
||||
<button className='bg-primary w-full hover:bg-transparent hover:text-primary duration-300 border border-primary text-white font-bold py-4 px-3 rounded-sm hover:cursor-pointer'>
|
||||
Start
|
||||
</button>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default Banner
|
||||
79
src/app/components/Home/Mentor/index.tsx
Normal file
@@ -0,0 +1,79 @@
|
||||
'use client'
|
||||
|
||||
import Image from 'next/image'
|
||||
import Link from 'next/link'
|
||||
import { useEffect, useState } from 'react'
|
||||
import { MentorType } from '@/app/types/mentor'
|
||||
import MentorSkeleton from '../../Skeleton/Mentor'
|
||||
|
||||
const Mentor = () => {
|
||||
const [mentor, setMentor] = useState<MentorType[]>([])
|
||||
const [loading, setLoading] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch')
|
||||
const data = await res.json()
|
||||
setMentor(data.MentorData)
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<section id='mentors-section'>
|
||||
<div className='container'>
|
||||
<div className='flex flex-col sm:flex-row gap-5 justify-between sm:items-center mb-12'>
|
||||
<h2 className='font-bold tracking-tight'>Meet with our Mentors</h2>
|
||||
<div>
|
||||
<button className='bg-transparent cursor-pointer hover:bg-primary text-primary font-medium hover:text-white py-3 px-4 border border-primary hover:border-transparent rounded-sm duration-300'>
|
||||
Explore 10+ our Mentor
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 xl:gap-8'>
|
||||
{loading
|
||||
? Array.from({ length: 6 }).map((_, i) => (
|
||||
<MentorSkeleton key={i} />
|
||||
))
|
||||
: mentor.map((item, index) => (
|
||||
<div key={index} className='group relative shadow-lg'>
|
||||
<div className='min-h-80 w-full overflow-hidden rounded-lg bg-gray-200 lg:h-80'>
|
||||
<Image
|
||||
src={item.imageSrc}
|
||||
alt={item.imageAlt}
|
||||
width={700}
|
||||
height={700}
|
||||
className='h-full w-full object-cover object-center lg:h-full lg:w-full '
|
||||
/>
|
||||
</div>
|
||||
<div className='my-4 flex justify-center '>
|
||||
<div>
|
||||
<div className='border border-white rounded-lg -mt-8 bg-white p-2 shadow-mentorShadow flex items-center justify-center'>
|
||||
<Link
|
||||
href='/'
|
||||
className='text-sm text-gray-700 text-center'>
|
||||
{item.name}
|
||||
</Link>
|
||||
</div>
|
||||
<p className='mt-3 text-2xl font-semibold text-black/80 text-center'>
|
||||
{item.color}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default Mentor
|
||||
45
src/app/components/Home/Newsletter/index.tsx
Normal file
@@ -0,0 +1,45 @@
|
||||
import Image from 'next/image'
|
||||
|
||||
const Newsletter = () => {
|
||||
return (
|
||||
<section id='join-section' className='-mb-64'>
|
||||
<div className='relative z-10'>
|
||||
<div className='mx-auto max-w-2xl py-16 md:py-24 px-4 sm:px-6 md:max-w-7xl lg:px-24 bg-orange rounded-lg bg-newsletter bg-contain bg-no-repeat bg-right-bottom'>
|
||||
<div className='grid grid-cols-1 gap-y-10 gap-x-6 sm:grid-cols-2 xl:gap-x-8'>
|
||||
<div>
|
||||
<h3 className='text-5xl font-bold mb-3'> Join Our Newsletter </h3>
|
||||
<h4 className='text-lg font-medium mb-7'>
|
||||
Subscribe our newsletter for discounts, promo and many more.
|
||||
</h4>
|
||||
<div className='flex gap-2'>
|
||||
<input
|
||||
type='Email address'
|
||||
name='q'
|
||||
className='py-4 w-full text-base px-4 bg-white transition-all duration-500 focus:border-primary focus:outline-1 rounded-lg pl-4'
|
||||
placeholder='Enter your email'
|
||||
autoComplete='off'
|
||||
/>
|
||||
<button className='bg-primary cursor-pointer hover:bg-transparent border border-primary hover:text-primary text-white font-medium py-2 px-4 rounded-sm'>
|
||||
Subscribe
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className='hidden sm:block'>
|
||||
<div className='float-right -mt-32'>
|
||||
<Image
|
||||
src={'/images/newsletter/Free.svg'}
|
||||
alt='bgimg'
|
||||
width={64}
|
||||
height={64}
|
||||
className='w-auto'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default Newsletter
|
||||
110
src/app/components/Home/Testimonial/index.tsx
Normal file
@@ -0,0 +1,110 @@
|
||||
'use client'
|
||||
import { useEffect, useState } from 'react'
|
||||
import Image from 'next/image'
|
||||
import Slider from 'react-slick'
|
||||
import 'slick-carousel/slick/slick.css'
|
||||
import 'slick-carousel/slick/slick-theme.css'
|
||||
import { TestimonialType } from '@/app/types/testimonial'
|
||||
import TestimonialSkeleton from '../../Skeleton/Testimonial'
|
||||
|
||||
// CAROUSEL SETTINGS
|
||||
|
||||
const Testimonial = () => {
|
||||
const [testimonial, setTestimonial] = useState<TestimonialType[]>([])
|
||||
const [loading, setLoading] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch')
|
||||
const data = await res.json()
|
||||
setTestimonial(data.TestimonialData)
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
|
||||
const settings = {
|
||||
dots: true,
|
||||
infinite: true,
|
||||
slidesToShow: 3,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
autoplay: false,
|
||||
cssEase: 'linear',
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1200,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
},
|
||||
},
|
||||
{
|
||||
breakpoint: 800,
|
||||
settings: {
|
||||
slidesToShow: 1,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
return (
|
||||
<section id='testimonial-section' className='bg-cream'>
|
||||
<div className='container'>
|
||||
<div className='flex flex-col sm:flex-row gap-5 justify-between sm:items-center mb-6'>
|
||||
<h2 className='font-bold tracking-tight'>
|
||||
What Our Happy <br /> Students Says
|
||||
</h2>
|
||||
<div>
|
||||
<button className='bg-transparent cursor-pointer hover:bg-primary text-primary font-semibold hover:text-white py-3 px-4 border border-primary hover:border-transparent rounded-sm duration-300'>
|
||||
Give Your Review
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<p className='text-lg font-medium mb-6'>
|
||||
Build skills with our courses and mentor <br /> from world-class
|
||||
companies.
|
||||
</p>
|
||||
<Slider {...settings}>
|
||||
{loading
|
||||
? Array.from({ length: 3 }).map((_, i) => (
|
||||
<TestimonialSkeleton key={i} />
|
||||
))
|
||||
: testimonial.map((items, i) => (
|
||||
<div key={i}>
|
||||
<div className='bg-white m-4 pt-8 px-12 pb-10 text-center rounded-lg'>
|
||||
<div className="relative z-0 flex justify-center items-center before:absolute before:bg-[url('/images/testimonial/greenpic.svg')] before:h-6 before:w-6 before:bottom-0 before:z-10 before:left-54%">
|
||||
<Image
|
||||
src={items.imgSrc}
|
||||
alt='gaby'
|
||||
width={64}
|
||||
height={64}
|
||||
className='inline-block rounded-full ring-2 ring-white relative'
|
||||
/>
|
||||
</div>
|
||||
<p className='text-sm pt-4 pb-2'>{items.profession}</p>
|
||||
<p className='text-2xl font-semibold pb-3'>{items.name}</p>
|
||||
<Image
|
||||
src={items.starimg}
|
||||
alt='stars-img'
|
||||
className='m-auto pb-6 w-[30%]'
|
||||
width={32}
|
||||
height={32}
|
||||
/>
|
||||
<p className='text-lg font-medium leading-7'>
|
||||
{items.detail}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</Slider>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default Testimonial
|
||||
139
src/app/components/Layout/Footer/index.tsx
Normal file
@@ -0,0 +1,139 @@
|
||||
'use client'
|
||||
|
||||
import Link from 'next/link'
|
||||
import Image from 'next/image'
|
||||
import { Icon } from '@iconify/react/dist/iconify.js'
|
||||
import { useEffect, useState } from 'react'
|
||||
import { FooterLinkType } from '@/app/types/footerlinks'
|
||||
|
||||
const Footer = () => {
|
||||
const [footerlink, SetFooterlink] = useState<FooterLinkType[]>([])
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch')
|
||||
const data = await res.json()
|
||||
SetFooterlink(data.FooterLinkData)
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div className='bg-primary' id='first-section'>
|
||||
<div className='container pt-60 pb-10'>
|
||||
<div className='grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-12 gap-16 xl:gap-8'>
|
||||
<div className='col-span-4 flex flex-col gap-5'>
|
||||
<div>
|
||||
<Image
|
||||
src='/images/logo/logo2.svg'
|
||||
alt='Logo'
|
||||
width={48}
|
||||
height={64}
|
||||
/>
|
||||
</div>
|
||||
<p className='text-white text-lg font-medium leading-7'>
|
||||
{' '}
|
||||
Level up your skills, and get dream <br /> job with passion.{' '}
|
||||
</p>
|
||||
<div className='flex gap-4'>
|
||||
<Link
|
||||
href='/'
|
||||
className='bg-white/20 rounded-full p-2 text-white hover:bg-cream hover:text-primary duration-300'>
|
||||
<Icon
|
||||
icon='tabler:brand-instagram'
|
||||
className='text-2xl inline-block'
|
||||
/>
|
||||
</Link>
|
||||
<Link
|
||||
href='/'
|
||||
className='bg-white/20 rounded-full p-2 text-white hover:bg-cream hover:text-primary duration-300'>
|
||||
<Icon
|
||||
icon='tabler:brand-dribbble'
|
||||
className='text-2xl inline-block'
|
||||
/>
|
||||
</Link>
|
||||
<Link
|
||||
href='/'
|
||||
className='bg-white/20 rounded-full p-2 text-white hover:bg-cream hover:text-primary duration-300'>
|
||||
<Icon
|
||||
icon='tabler:brand-twitter-filled'
|
||||
className='text-2xl inline-block'
|
||||
/>
|
||||
</Link>
|
||||
<Link
|
||||
href='/'
|
||||
className='bg-white/20 rounded-full p-2 text-white hover:bg-cream hover:text-primary duration-300'>
|
||||
<Icon
|
||||
icon='tabler:brand-youtube-filled'
|
||||
className='text-2xl inline-block'
|
||||
/>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* CLOUMN-2/3 */}
|
||||
<div className='col-span-4'>
|
||||
<div className='flex gap-20'>
|
||||
{footerlink.map((product, i) => (
|
||||
<div key={i} className='group relative col-span-2'>
|
||||
<p className='text-white text-xl font-semibold mb-9'>
|
||||
{product.section}
|
||||
</p>
|
||||
<ul>
|
||||
{product.links.map((item, i) => (
|
||||
<li key={i} className='mb-3'>
|
||||
<Link
|
||||
href={item.href}
|
||||
className='text-white/60 hover:text-white text-sm font-normal mb-6'>
|
||||
{item.label}
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
{/* CLOUMN-4 */}
|
||||
|
||||
<div className='col-span-4'>
|
||||
<h3 className='text-white text-xl font-semibold mb-6'>
|
||||
Stay up to date
|
||||
</h3>
|
||||
<div className='relative text-white focus-within:text-white flex flex-row-reverse w-[50%] lg:w-full'>
|
||||
<input
|
||||
type='Email address'
|
||||
name='q'
|
||||
className='py-4 text-sm w-full text-white bg-white/15 rounded-md pl-4 focus:outline-hidden bg-emailbg focus:text-white'
|
||||
placeholder='Your email address'
|
||||
autoComplete='off'
|
||||
/>
|
||||
<div className='absolute inset-y-0 right-0 flex items-center pr-2'>
|
||||
<button
|
||||
type='submit'
|
||||
className='p-1 focus:outline-hidden focus:shadow-outline'>
|
||||
<Icon
|
||||
icon='tabler:send'
|
||||
className='text-white text-2xl inline-block me-2'
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className='py-3'>
|
||||
<h3 className='text-center text-white/60'>
|
||||
@2025 - All Rights Reserved
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Footer
|
||||
19
src/app/components/Layout/Header/Logo/index.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
const Logo: React.FC = () => {
|
||||
return (
|
||||
<Link href="/">
|
||||
<Image
|
||||
src="/images/logo/logo.svg"
|
||||
alt="logo"
|
||||
width={160}
|
||||
height={50}
|
||||
style={{ width: "auto", height: "auto" }}
|
||||
quality={100}
|
||||
/>
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
|
||||
export default Logo;
|
||||
70
src/app/components/Layout/Header/Navigation/HeaderLink.tsx
Normal file
@@ -0,0 +1,70 @@
|
||||
'use client'
|
||||
import { useState } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { HeaderItem } from '../../../../types/menu'
|
||||
import { usePathname } from 'next/navigation'
|
||||
|
||||
const HeaderLink: React.FC<{ item: HeaderItem }> = ({ item }) => {
|
||||
const [submenuOpen, setSubmenuOpen] = useState(false)
|
||||
const path = usePathname()
|
||||
const handleMouseEnter = () => {
|
||||
if (item.submenu) {
|
||||
setSubmenuOpen(true)
|
||||
}
|
||||
}
|
||||
const handleMouseLeave = () => {
|
||||
setSubmenuOpen(false)
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
className='relative'
|
||||
onMouseEnter={handleMouseEnter}
|
||||
onMouseLeave={handleMouseLeave}>
|
||||
<Link
|
||||
href={item.href}
|
||||
className={`text-base flex font-medium hover:text-primary capitalized ${
|
||||
path === item.href ? 'text-primary ' : 'text-black'
|
||||
}`}>
|
||||
{item.label}
|
||||
{item.submenu && (
|
||||
<svg
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
width='1.5em'
|
||||
height='1.5em'
|
||||
viewBox='0 0 24 24'>
|
||||
<path
|
||||
fill='none'
|
||||
stroke='currentColor'
|
||||
strokeLinecap='round'
|
||||
strokeLinejoin='round'
|
||||
strokeWidth='1.5'
|
||||
d='m7 10l5 5l5-5'
|
||||
/>
|
||||
</svg>
|
||||
)}
|
||||
</Link>
|
||||
{submenuOpen && (
|
||||
<div
|
||||
className={`absolute py-2 left-0 mt-0.5 w-60 bg-white dark:bg-darklight dark:text-white shadow-lg rounded-lg `}
|
||||
data-aos='fade-up'
|
||||
data-aos-duration='500'>
|
||||
{item.submenu?.map((subItem, index) => (
|
||||
<Link
|
||||
key={index}
|
||||
href={subItem.href}
|
||||
className={`block px-4 py-2 ${
|
||||
path === subItem.href
|
||||
? 'bg-primary text-white'
|
||||
: 'text-black dark:text-white hover:bg-primary'
|
||||
}`}>
|
||||
{subItem.label}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default HeaderLink
|
||||
@@ -0,0 +1,52 @@
|
||||
import { useState } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { HeaderItem } from '../../../../types/menu'
|
||||
|
||||
const MobileHeaderLink: React.FC<{ item: HeaderItem }> = ({ item }) => {
|
||||
const [submenuOpen, setSubmenuOpen] = useState(false)
|
||||
|
||||
const handleToggle = () => {
|
||||
setSubmenuOpen(!submenuOpen)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='relative w-full'>
|
||||
<Link
|
||||
href={item.href}
|
||||
onClick={item.submenu ? handleToggle : undefined}
|
||||
className='flex items-center justify-between w-full py-2 text-black focus:outline-hidden'>
|
||||
{item.label}
|
||||
{item.submenu && (
|
||||
<svg
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
width='1.5em'
|
||||
height='1.5em'
|
||||
viewBox='0 0 24 24'>
|
||||
<path
|
||||
fill='none'
|
||||
stroke='currentColor'
|
||||
strokeLinecap='round'
|
||||
strokeLinejoin='round'
|
||||
strokeWidth='1.5'
|
||||
d='m7 10l5 5l5-5'
|
||||
/>
|
||||
</svg>
|
||||
)}
|
||||
</Link>
|
||||
{submenuOpen && item.submenu && (
|
||||
<div className='bg-white p-2 w-full'>
|
||||
{item.submenu.map((subItem, index) => (
|
||||
<Link
|
||||
key={index}
|
||||
href={subItem.href}
|
||||
className='block py-2 text-gray-500 hover:bg-gray-200'>
|
||||
{subItem.label}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default MobileHeaderLink
|
||||
33
src/app/components/Layout/Header/ThemeToggler.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
'use client'
|
||||
import { useTheme } from "next-themes";
|
||||
|
||||
const ThemeToggler = () => {
|
||||
const { theme, setTheme } = useTheme();
|
||||
return (
|
||||
<button
|
||||
aria-label="theme toggler"
|
||||
onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
|
||||
className="text-body-color flex h-8 w-8 items-center justify-center duration-300 dark:text-white"
|
||||
>
|
||||
<span>
|
||||
<svg
|
||||
viewBox="0 0 16 16"
|
||||
className="hidden h-[22px] w-[22px] fill-current dark:block"
|
||||
>
|
||||
<path d="M4.50663 3.2267L3.30663 2.03337L2.36663 2.97337L3.55996 4.1667L4.50663 3.2267ZM2.66663 7.00003H0.666626V8.33337H2.66663V7.00003ZM8.66663 0.366699H7.33329V2.33337H8.66663V0.366699V0.366699ZM13.6333 2.97337L12.6933 2.03337L11.5 3.2267L12.44 4.1667L13.6333 2.97337ZM11.4933 12.1067L12.6866 13.3067L13.6266 12.3667L12.4266 11.1734L11.4933 12.1067ZM13.3333 7.00003V8.33337H15.3333V7.00003H13.3333ZM7.99996 3.6667C5.79329 3.6667 3.99996 5.46003 3.99996 7.6667C3.99996 9.87337 5.79329 11.6667 7.99996 11.6667C10.2066 11.6667 12 9.87337 12 7.6667C12 5.46003 10.2066 3.6667 7.99996 3.6667ZM7.33329 14.9667H8.66663V13H7.33329V14.9667ZM2.36663 12.36L3.30663 13.3L4.49996 12.1L3.55996 11.16L2.36663 12.36Z" />
|
||||
</svg>
|
||||
|
||||
<svg
|
||||
viewBox="0 0 23 23"
|
||||
className="h-[30px] w-[30px] fill-current dark:hidden"
|
||||
>
|
||||
<g clipPath="url(#clip0_40_125)">
|
||||
<path d="M16.6111 15.855C17.591 15.1394 18.3151 14.1979 18.7723 13.1623C16.4824 13.4065 14.1342 12.4631 12.6795 10.4711C11.2248 8.47905 11.0409 5.95516 11.9705 3.84818C10.8449 3.9685 9.72768 4.37162 8.74781 5.08719C5.7759 7.25747 5.12529 11.4308 7.29558 14.4028C9.46586 17.3747 13.6392 18.0253 16.6111 15.855Z" />
|
||||
</g>
|
||||
</svg>
|
||||
</span>
|
||||
</button>
|
||||
);
|
||||
};
|
||||
|
||||
export default ThemeToggler;
|
||||
213
src/app/components/Layout/Header/index.tsx
Normal file
@@ -0,0 +1,213 @@
|
||||
'use client'
|
||||
|
||||
import { useEffect, useRef, useState } from 'react'
|
||||
import Logo from './Logo'
|
||||
import HeaderLink from '../Header/Navigation/HeaderLink'
|
||||
import MobileHeaderLink from '../Header/Navigation/MobileHeaderLink'
|
||||
import Signin from '@/app/components/Auth/SignIn'
|
||||
import SignUp from '@/app/components/Auth/SignUp'
|
||||
import { Icon } from '@iconify/react/dist/iconify.js'
|
||||
import { HeaderItem } from '@/app/types/menu'
|
||||
|
||||
const Header: React.FC = () => {
|
||||
const [headerData, setHeaderData] = useState<HeaderItem[]>([])
|
||||
|
||||
const [navbarOpen, setNavbarOpen] = useState(false)
|
||||
const [sticky, setSticky] = useState(false)
|
||||
const [isSignInOpen, setIsSignInOpen] = useState(false)
|
||||
const [isSignUpOpen, setIsSignUpOpen] = useState(false)
|
||||
|
||||
const navbarRef = useRef<HTMLDivElement>(null)
|
||||
const signInRef = useRef<HTMLDivElement>(null)
|
||||
const signUpRef = useRef<HTMLDivElement>(null)
|
||||
const mobileMenuRef = useRef<HTMLDivElement>(null)
|
||||
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const res = await fetch('/api/data')
|
||||
if (!res.ok) throw new Error('Failed to fetch')
|
||||
const data = await res.json()
|
||||
setHeaderData(data.HeaderData)
|
||||
} catch (error) {
|
||||
console.error('Error fetching services:', error)
|
||||
}
|
||||
}
|
||||
fetchData()
|
||||
}, [])
|
||||
|
||||
const handleScroll = () => {
|
||||
setSticky(window.scrollY >= 10)
|
||||
}
|
||||
|
||||
const handleClickOutside = (event: MouseEvent) => {
|
||||
if (
|
||||
signInRef.current &&
|
||||
!signInRef.current.contains(event.target as Node)
|
||||
) {
|
||||
setIsSignInOpen(false)
|
||||
}
|
||||
if (
|
||||
signUpRef.current &&
|
||||
!signUpRef.current.contains(event.target as Node)
|
||||
) {
|
||||
setIsSignUpOpen(false)
|
||||
}
|
||||
if (
|
||||
mobileMenuRef.current &&
|
||||
!mobileMenuRef.current.contains(event.target as Node) &&
|
||||
navbarOpen
|
||||
) {
|
||||
setNavbarOpen(false)
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener('scroll', handleScroll)
|
||||
document.addEventListener('mousedown', handleClickOutside)
|
||||
return () => {
|
||||
window.removeEventListener('scroll', handleScroll)
|
||||
document.removeEventListener('mousedown', handleClickOutside)
|
||||
}
|
||||
}, [navbarOpen, isSignInOpen, isSignUpOpen])
|
||||
|
||||
useEffect(() => {
|
||||
if (isSignInOpen || isSignUpOpen || navbarOpen) {
|
||||
document.body.style.overflow = 'hidden'
|
||||
} else {
|
||||
document.body.style.overflow = ''
|
||||
}
|
||||
}, [isSignInOpen, isSignUpOpen, navbarOpen])
|
||||
|
||||
return (
|
||||
<header
|
||||
className={`fixed top-0 z-40 w-full transition-all duration-300 ${
|
||||
sticky ? ' shadow-lg bg-white py-4' : 'shadow-none py-4'
|
||||
}`}>
|
||||
<div>
|
||||
<div className='container mx-auto max-w-7xl px-4 flex items-center justify-between'>
|
||||
<Logo />
|
||||
<nav className='hidden lg:flex grow items-center gap-8 justify-start ml-14'>
|
||||
{headerData.map((item, index) => (
|
||||
<HeaderLink key={index} item={item} />
|
||||
))}
|
||||
</nav>
|
||||
<div className='flex items-center gap-4'>
|
||||
<button
|
||||
className='hidden lg:block bg-transparent text-primary border hover:bg-primary border-primary hover:text-white duration-300 px-6 py-2 rounded-lg hover:cursor-pointer'
|
||||
onClick={() => {
|
||||
setIsSignInOpen(true)
|
||||
}}>
|
||||
Sign In
|
||||
</button>
|
||||
{isSignInOpen && (
|
||||
<div className='fixed top-0 left-0 w-full h-full bg-black/50 flex items-center justify-center z-50'>
|
||||
<div
|
||||
ref={signInRef}
|
||||
className='relative mx-auto w-full max-w-md overflow-hidden rounded-lg px-8 pt-14 pb-8 text-center bg-dark_grey/90 backdrop-blur-md bg-white'>
|
||||
<button
|
||||
onClick={() => setIsSignInOpen(false)}
|
||||
className='absolute top-0 right-0 mr-8 mt-8 dark:invert'
|
||||
aria-label='Close Sign In Modal'>
|
||||
<Icon
|
||||
icon='material-symbols:close-rounded'
|
||||
width={24}
|
||||
height={24}
|
||||
className='text-black hover:text-primary inline-block hover:cursor-pointer'
|
||||
/>
|
||||
</button>
|
||||
<Signin />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<button
|
||||
className='hidden lg:block bg-primary text-white text-base font-medium hover:bg-transparent duration-300 hover:text-primary border border-primary px-6 py-2 rounded-lg hover:cursor-pointer'
|
||||
onClick={() => {
|
||||
setIsSignUpOpen(true)
|
||||
}}>
|
||||
Sign Up
|
||||
</button>
|
||||
{isSignUpOpen && (
|
||||
<div className='fixed top-0 left-0 w-full h-full bg-black/50 flex items-center justify-center z-50'>
|
||||
<div
|
||||
ref={signUpRef}
|
||||
className='relative mx-auto bg-white w-full max-w-md overflow-hidden rounded-lg bg-dark_grey/90 backdrop-blur-md px-8 pt-14 pb-8 text-center'>
|
||||
<button
|
||||
onClick={() => setIsSignUpOpen(false)}
|
||||
className='absolute top-0 right-0 mr-8 mt-8 dark:invert'
|
||||
aria-label='Close Sign Up Modal'>
|
||||
<Icon
|
||||
icon='material-symbols:close-rounded'
|
||||
width={24}
|
||||
height={24}
|
||||
className='text-black hover:text-primary inline-block hover:cursor-pointer'
|
||||
/>
|
||||
</button>
|
||||
<SignUp />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<button
|
||||
onClick={() => setNavbarOpen(!navbarOpen)}
|
||||
className='block lg:hidden p-2 rounded-lg'
|
||||
aria-label='Toggle mobile menu'>
|
||||
<span className='block w-6 h-0.5 bg-black'></span>
|
||||
<span className='block w-6 h-0.5 bg-black mt-1.5'></span>
|
||||
<span className='block w-6 h-0.5 bg-black mt-1.5'></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{navbarOpen && (
|
||||
<div className='fixed top-0 left-0 w-full h-full bg-black/50 z-40' />
|
||||
)}
|
||||
<div
|
||||
ref={mobileMenuRef}
|
||||
className={`lg:hidden fixed top-0 right-0 h-full w-full bg-white shadow-lg transform transition-transform duration-300 max-w-xs ${
|
||||
navbarOpen ? 'translate-x-0' : 'translate-x-full'
|
||||
} z-50`}>
|
||||
<div className='flex items-center justify-between p-4'>
|
||||
<h2 className='text-lg font-bold text-midnight_text'>
|
||||
<Logo />
|
||||
</h2>
|
||||
{/* */}
|
||||
<button
|
||||
onClick={() => setNavbarOpen(false)}
|
||||
className='bg-black/30 rounded-full p-1 text-white'
|
||||
aria-label='Close menu Modal'>
|
||||
<Icon
|
||||
icon={'material-symbols:close-rounded'}
|
||||
width={24}
|
||||
height={24}
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
<nav className='flex flex-col items-start p-4'>
|
||||
{headerData.map((item, index) => (
|
||||
<MobileHeaderLink key={index} item={item} />
|
||||
))}
|
||||
<div className='mt-4 flex flex-col gap-4 w-full'>
|
||||
<button
|
||||
className='bg-primary text-white px-4 py-2 rounded-lg border border-primary hover:text-primary hover:bg-transparent hover:cursor-pointer transition duration-300 ease-in-out'
|
||||
onClick={() => {
|
||||
setIsSignInOpen(true)
|
||||
setNavbarOpen(false)
|
||||
}}>
|
||||
Sign In
|
||||
</button>
|
||||
<button
|
||||
className='bg-primary text-white px-4 py-2 rounded-lg border border-primary hover:text-primary hover:bg-transparent hover:cursor-pointer transition duration-300 ease-in-out'
|
||||
onClick={() => {
|
||||
setIsSignUpOpen(true)
|
||||
setNavbarOpen(false)
|
||||
}}>
|
||||
Sign Up
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
)
|
||||
}
|
||||
|
||||
export default Header
|
||||
77
src/app/components/NotFound/index.tsx
Normal file
40
src/app/components/ScrollToTop/index.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
'use client'
|
||||
import { useEffect, useState } from 'react'
|
||||
|
||||
export default function ScrollToTop() {
|
||||
const [isVisible, setIsVisible] = useState(false)
|
||||
|
||||
const scrollToTop = () => {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth',
|
||||
})
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const toggleVisibility = () => {
|
||||
if (window.pageYOffset > 300) {
|
||||
setIsVisible(true)
|
||||
} else {
|
||||
setIsVisible(false)
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', toggleVisibility)
|
||||
|
||||
return () => window.removeEventListener('scroll', toggleVisibility)
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<>
|
||||
{isVisible && (
|
||||
<div
|
||||
onClick={scrollToTop}
|
||||
aria-label='scroll to top'
|
||||
className='fixed bottom-8 right-8 z-999 back-to-top flex h-10 w-10 cursor-pointer items-center justify-center rounded-md bg-[#102C46] text-white shadow-md transition duration-300 ease-in-out hover:bg-dark'>
|
||||
<span className='mt-[6px] h-3 w-3 rotate-45 border-l border-t border-white'></span>
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
20
src/app/components/SharedComponent/HeroSub/index.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import React, { FC } from "react";
|
||||
|
||||
interface HeroSubProps {
|
||||
title: string;
|
||||
}
|
||||
|
||||
const HeroSub: FC<HeroSubProps> = ({ title }) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<section className="py-40 bg-herosub-bg bg-no-repeat bg-cover lg:mt-40 sm:mt-44 mt-20">
|
||||
<div className="container mx-auto lg:max-w-(--breakpoint-xl) px-4">
|
||||
<h2 className="text-white md:text-56 text-36 font-medium">{title}</h2>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default HeroSub;
|
||||
25
src/app/components/SharedComponent/Volunteer/index.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
import Link from "next/link";
|
||||
|
||||
const Volunteer = () => {
|
||||
return (
|
||||
<section className="py-28 bg-volunteer-bg bg-no-repeat bg-cover">
|
||||
<div className="container mx-auto lg:max-w-(--breakpoint-xl) px-4">
|
||||
<div className="text-center">
|
||||
<h2 className="text-30 font-medium text-white mb-6">
|
||||
Become a Volunteer
|
||||
</h2>
|
||||
<p className="text-16 text-white lg:max-w-60% mx-auto mb-6">
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscelit. Nam malesu dolor sit amet, consectetur adipiscelit. consectetur adipiscelit. Nam malesu dolor.
|
||||
</p>
|
||||
<div className="flex justify-center ">
|
||||
<Link href="#" className="text-white bg-linear-to-r from-error to-warning px-7 py-5 hover:from-transparent hover:to-transparent border border-transparent hover:border-error hover:text-error rounded-sm">
|
||||
Donate now
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default Volunteer;
|
||||
29
src/app/components/Skeleton/CourseDetail/index.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
const CourseDetailSkeleton = () => {
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
<div
|
||||
role='status'
|
||||
className='max-w-md animate-pulse overflow-hidden rounded-lg bg-gray-100 p-8 mb-28'>
|
||||
<svg
|
||||
className='w-full h-30 text-gray-200 my-10'
|
||||
aria-hidden='true'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
fill='currentColor'
|
||||
viewBox='0 0 20 18'>
|
||||
<path d='M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z' />
|
||||
</svg>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[300px] mb-2.5'></div>
|
||||
<span className='sr-only'>Loading...</span>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default CourseDetailSkeleton
|
||||
25
src/app/components/Skeleton/Mentor/index.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
const MentorSkeleton = () => {
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
<div
|
||||
role='status'
|
||||
className='max-w-md animate-pulse overflow-hidden rounded-lg bg-gray-100 p-8'>
|
||||
<svg
|
||||
className='w-full h-30 text-gray-200 my-10'
|
||||
aria-hidden='true'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
fill='currentColor'
|
||||
viewBox='0 0 20 18'>
|
||||
<path d='M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z' />
|
||||
</svg>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 mb-2.5'></div>
|
||||
<span className='sr-only'>Loading...</span>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default MentorSkeleton
|
||||
33
src/app/components/Skeleton/Testimonial/index.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
const TestimonialSkeleton = () => {
|
||||
return (
|
||||
<>
|
||||
<div className="m-4">
|
||||
<div
|
||||
role='status'
|
||||
className='max-w-md animate-pulse overflow-hidden rounded-lg bg-white p-8'>
|
||||
<svg
|
||||
className='w-20 h-20 mx-auto text-gray-200 my-5'
|
||||
aria-hidden='true'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
fill='currentColor'
|
||||
viewBox='0 0 20 18'>
|
||||
<path d='M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z' />
|
||||
</svg>
|
||||
<div className='h-2 w-28 mx-auto bg-gray-200 rounded-full dark:bg-gray-700'></div>
|
||||
<div className='h-2 w-48 mx-auto bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] my-5'></div>
|
||||
|
||||
<div className='h-2 w-24 mx-auto bg-gray-200 rounded-full dark:bg-gray-700 mb-10'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
<div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5'></div>
|
||||
<span className='sr-only'>Loading...</span>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default TestimonialSkeleton
|
||||
BIN
src/app/favicon.ico
Normal file
|
After Width: | Height: | Size: 177 KiB |
57
src/app/globals.css
Normal file
@@ -0,0 +1,57 @@
|
||||
@import 'tailwindcss';
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
@theme {
|
||||
--shadow-mentor-shadow: 0px 4px 20px rgba(110, 127, 185, 0.1);
|
||||
|
||||
--inset-54\%: 54%;
|
||||
|
||||
--color-primary: #611f69;
|
||||
--color-cream: #fcf5ef;
|
||||
--color-success: #6b9f36;
|
||||
--color-orange: #f9cd92;
|
||||
|
||||
--background-image-banner-image: url('/images/banner/background.png');
|
||||
--background-image-newsletter: url('/images/newsletter/hands.svg');
|
||||
}
|
||||
|
||||
/*
|
||||
The default border color has changed to `currentColor` in Tailwind CSS v4,
|
||||
so we've added these compatibility styles to make sure everything still
|
||||
looks the same as it did with Tailwind CSS v3.
|
||||
|
||||
If we ever want to remove these styles, we need to add an explicit border
|
||||
color utility to any element that depends on these defaults.
|
||||
*/
|
||||
@layer base {
|
||||
*,
|
||||
::after,
|
||||
::before,
|
||||
::backdrop,
|
||||
::file-selector-button {
|
||||
border-color: var(--color-gray-200, currentColor);
|
||||
}
|
||||
|
||||
section {
|
||||
@apply py-14
|
||||
}
|
||||
|
||||
h1 {
|
||||
@apply text-black md:text-7xl sm:text-6xl text-5xl
|
||||
}
|
||||
|
||||
h2 {
|
||||
@apply text-black sm:text-5xl text-4xl
|
||||
}
|
||||
}
|
||||
|
||||
@layer utilities {
|
||||
.container {
|
||||
@apply max-w-7xl mx-auto w-full px-4;
|
||||
}
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
26
src/app/layout.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
import { Inter } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import Header from "@/app/components/Layout/Header";
|
||||
import Footer from "@/app/components/Layout/Footer";
|
||||
import ScrollToTop from "@/app/components/ScrollToTop";
|
||||
import Aoscompo from "@/utils/aos";
|
||||
const font = Inter({ subsets: ["latin"] });
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<body className={`${font.className}`}>
|
||||
<Aoscompo>
|
||||
<Header />
|
||||
{children}
|
||||
<Footer />
|
||||
</Aoscompo>
|
||||
<ScrollToTop />
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||