├── .eslintrc.json
├── .gitignore
├── .idea
├── .gitignore
├── free-nextjs-admin-dashboard.iml
├── modules.xml
├── prettier.xml
└── vcs.xml
├── LICENSE
├── README.md
├── banner.png
├── eslint.config.mjs
├── jsvectormap.d.ts
├── next.config.ts
├── package-lock.json
├── package.json
├── postcss.config.js
├── prettier.config.js
├── public
└── images
│ ├── brand
│ ├── brand-01.svg
│ ├── brand-02.svg
│ ├── brand-03.svg
│ ├── brand-04.svg
│ ├── brand-05.svg
│ ├── brand-06.svg
│ ├── brand-07.svg
│ ├── brand-08.svg
│ ├── brand-09.svg
│ ├── brand-10.svg
│ ├── brand-11.svg
│ ├── brand-12.svg
│ ├── brand-13.svg
│ ├── brand-14.svg
│ └── brand-15.svg
│ ├── cards
│ ├── card-01.jpg
│ ├── card-01.png
│ ├── card-02.jpg
│ ├── card-02.png
│ ├── card-03.jpg
│ └── card-03.png
│ ├── carousel
│ ├── carousel-01.png
│ ├── carousel-02.png
│ ├── carousel-03.png
│ └── carousel-04.png
│ ├── chat
│ └── chat.jpg
│ ├── country
│ ├── country-01.svg
│ ├── country-02.svg
│ ├── country-03.svg
│ ├── country-04.svg
│ ├── country-05.svg
│ ├── country-06.svg
│ ├── country-07.svg
│ └── country-08.svg
│ ├── error
│ ├── 404-dark.svg
│ ├── 404.svg
│ ├── 500-dark.svg
│ ├── 500.svg
│ ├── 503-dark.svg
│ ├── 503.svg
│ ├── maintenance-dark.svg
│ ├── maintenance.svg
│ ├── success-dark.svg
│ └── success.svg
│ ├── favicon.ico
│ ├── grid-image
│ ├── image-01.png
│ ├── image-02.png
│ ├── image-03.png
│ ├── image-04.png
│ ├── image-05.png
│ └── image-06.png
│ ├── icons
│ ├── file-image-dark.svg
│ ├── file-image.svg
│ ├── file-pdf-dark.svg
│ ├── file-pdf.svg
│ ├── file-video-dark.svg
│ └── file-video.svg
│ ├── logo
│ ├── auth-logo.svg
│ ├── logo-dark.svg
│ ├── logo-icon.svg
│ └── logo.svg
│ ├── product
│ ├── product-01.jpg
│ ├── product-02.jpg
│ ├── product-03.jpg
│ ├── product-04.jpg
│ └── product-05.jpg
│ ├── shape
│ └── grid-01.svg
│ ├── task
│ ├── google-drive.svg
│ ├── pdf.svg
│ ├── task.jpg
│ └── task.png
│ ├── user
│ ├── owner.jpg
│ ├── user-01.jpg
│ ├── user-02.jpg
│ ├── user-03.jpg
│ ├── user-04.jpg
│ ├── user-05.jpg
│ ├── user-06.jpg
│ ├── user-07.jpg
│ ├── user-08.jpg
│ ├── user-09.jpg
│ ├── user-10.jpg
│ ├── user-11.jpg
│ ├── user-12.jpg
│ ├── user-13.jpg
│ ├── user-14.jpg
│ ├── user-15.jpg
│ ├── user-16.jpg
│ ├── user-17.jpg
│ ├── user-18.jpg
│ ├── user-19.jpg
│ ├── user-20.jpg
│ ├── user-21.jpg
│ ├── user-22.jpg
│ ├── user-23.jpg
│ ├── user-24.jpg
│ ├── user-25.jpg
│ ├── user-26.jpg
│ ├── user-27.jpg
│ ├── user-28.jpg
│ ├── user-29.jpg
│ ├── user-30.jpg
│ ├── user-31.jpg
│ ├── user-32.jpg
│ ├── user-33.jpg
│ ├── user-34.jpg
│ ├── user-35.jpg
│ ├── user-36.jpg
│ └── user-37.jpg
│ └── video-thumb
│ ├── thumb-16.png
│ └── youtube-icon-84.svg
├── src
├── app
│ ├── (admin)
│ │ ├── (others-pages)
│ │ │ ├── (chart)
│ │ │ │ ├── bar-chart
│ │ │ │ │ └── page.tsx
│ │ │ │ └── line-chart
│ │ │ │ │ └── page.tsx
│ │ │ ├── (forms)
│ │ │ │ └── form-elements
│ │ │ │ │ └── page.tsx
│ │ │ ├── (tables)
│ │ │ │ └── basic-tables
│ │ │ │ │ └── page.tsx
│ │ │ ├── blank
│ │ │ │ └── page.tsx
│ │ │ ├── calendar
│ │ │ │ └── page.tsx
│ │ │ └── profile
│ │ │ │ └── page.tsx
│ │ ├── (ui-elements)
│ │ │ ├── alerts
│ │ │ │ └── page.tsx
│ │ │ ├── avatars
│ │ │ │ └── page.tsx
│ │ │ ├── badge
│ │ │ │ └── page.tsx
│ │ │ ├── buttons
│ │ │ │ └── page.tsx
│ │ │ ├── images
│ │ │ │ └── page.tsx
│ │ │ ├── modals
│ │ │ │ └── page.tsx
│ │ │ └── videos
│ │ │ │ └── page.tsx
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── (full-width-pages)
│ │ ├── (auth)
│ │ │ ├── layout.tsx
│ │ │ ├── signin
│ │ │ │ └── page.tsx
│ │ │ └── signup
│ │ │ │ └── page.tsx
│ │ ├── (error-pages)
│ │ │ └── error-404
│ │ │ │ └── page.tsx
│ │ └── layout.tsx
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.tsx
│ └── not-found.tsx
├── components
│ ├── auth
│ │ ├── SignInForm.tsx
│ │ └── SignUpForm.tsx
│ ├── calendar
│ │ └── Calendar.tsx
│ ├── charts
│ │ ├── bar
│ │ │ └── BarChartOne.tsx
│ │ └── line
│ │ │ └── LineChartOne.tsx
│ ├── common
│ │ ├── ChartTab.tsx
│ │ ├── ComponentCard.tsx
│ │ ├── GridShape.tsx
│ │ ├── PageBreadCrumb.tsx
│ │ ├── ThemeToggleButton.tsx
│ │ └── ThemeTogglerTwo.tsx
│ ├── ecommerce
│ │ ├── CountryMap.tsx
│ │ ├── DemographicCard.tsx
│ │ ├── EcommerceMetrics.tsx
│ │ ├── MonthlySalesChart.tsx
│ │ ├── MonthlyTarget.tsx
│ │ ├── RecentOrders.tsx
│ │ └── StatisticsChart.tsx
│ ├── example
│ │ └── ModalExample
│ │ │ ├── DefaultModal.tsx
│ │ │ ├── FormInModal.tsx
│ │ │ ├── FullScreenModal.tsx
│ │ │ ├── ModalBasedAlerts.tsx
│ │ │ └── VerticallyCenteredModal.tsx
│ ├── form
│ │ ├── Form.tsx
│ │ ├── Label.tsx
│ │ ├── MultiSelect.tsx
│ │ ├── Select.tsx
│ │ ├── date-picker.tsx
│ │ ├── form-elements
│ │ │ ├── CheckboxComponents.tsx
│ │ │ ├── DefaultInputs.tsx
│ │ │ ├── DropZone.tsx
│ │ │ ├── FileInputExample.tsx
│ │ │ ├── InputGroup.tsx
│ │ │ ├── InputStates.tsx
│ │ │ ├── RadioButtons.tsx
│ │ │ ├── SelectInputs.tsx
│ │ │ ├── TextAreaInput.tsx
│ │ │ └── ToggleSwitch.tsx
│ │ ├── group-input
│ │ │ └── PhoneInput.tsx
│ │ ├── input
│ │ │ ├── Checkbox.tsx
│ │ │ ├── FileInput.tsx
│ │ │ ├── InputField.tsx
│ │ │ ├── Radio.tsx
│ │ │ ├── RadioSm.tsx
│ │ │ └── TextArea.tsx
│ │ └── switch
│ │ │ └── Switch.tsx
│ ├── header
│ │ ├── NotificationDropdown.tsx
│ │ └── UserDropdown.tsx
│ ├── tables
│ │ ├── BasicTableOne.tsx
│ │ └── Pagination.tsx
│ ├── ui
│ │ ├── alert
│ │ │ └── Alert.tsx
│ │ ├── avatar
│ │ │ ├── Avatar.tsx
│ │ │ └── AvatarText.tsx
│ │ ├── badge
│ │ │ └── Badge.tsx
│ │ ├── button
│ │ │ └── Button.tsx
│ │ ├── dropdown
│ │ │ ├── Dropdown.tsx
│ │ │ └── DropdownItem.tsx
│ │ ├── images
│ │ │ ├── ResponsiveImage.tsx
│ │ │ ├── ThreeColumnImageGrid.tsx
│ │ │ └── TwoColumnImageGrid.tsx
│ │ ├── modal
│ │ │ └── index.tsx
│ │ ├── table
│ │ │ └── index.tsx
│ │ └── video
│ │ │ ├── VideosExample.tsx
│ │ │ └── YouTubeEmbed.tsx
│ ├── user-profile
│ │ ├── UserAddressCard.tsx
│ │ ├── UserInfoCard.tsx
│ │ └── UserMetaCard.tsx
│ └── videos
│ │ ├── FourIsToThree.tsx
│ │ ├── OneIsToOne.tsx
│ │ ├── SixteenIsToNine.tsx
│ │ └── TwentyOneIsToNine.tsx
├── context
│ ├── SidebarContext.tsx
│ └── ThemeContext.tsx
├── hooks
│ ├── useGoBack.ts
│ └── useModal.ts
├── icons
│ ├── alert.svg
│ ├── angle-down.svg
│ ├── angle-left.svg
│ ├── angle-right.svg
│ ├── angle-up.svg
│ ├── arrow-down.svg
│ ├── arrow-right.svg
│ ├── arrow-up.svg
│ ├── audio.svg
│ ├── bell.svg
│ ├── bolt.svg
│ ├── box-cube.svg
│ ├── box-line.svg
│ ├── box.svg
│ ├── calendar.svg
│ ├── calender-line.svg
│ ├── chat.svg
│ ├── check-circle.svg
│ ├── check-line.svg
│ ├── chevron-down.svg
│ ├── chevron-left.svg
│ ├── chevron-up.svg
│ ├── close-line.svg
│ ├── close.svg
│ ├── copy.svg
│ ├── docs.svg
│ ├── dollar-line.svg
│ ├── download.svg
│ ├── envelope.svg
│ ├── eye-close.svg
│ ├── eye.svg
│ ├── file.svg
│ ├── folder.svg
│ ├── grid.svg
│ ├── group.svg
│ ├── horizontal-dots.svg
│ ├── index.tsx
│ ├── info-hexa.svg
│ ├── info.svg
│ ├── list.svg
│ ├── lock.svg
│ ├── mail-line.svg
│ ├── more-dot.svg
│ ├── page.svg
│ ├── paper-plane.svg
│ ├── pencil.svg
│ ├── pie-chart.svg
│ ├── plug-in.svg
│ ├── plus.svg
│ ├── shooting-star.svg
│ ├── table.svg
│ ├── task-icon.svg
│ ├── task.svg
│ ├── time.svg
│ ├── trash.svg
│ ├── user-circle.svg
│ ├── user-line.svg
│ └── videos.svg
├── layout
│ ├── AppHeader.tsx
│ ├── AppSidebar.tsx
│ ├── Backdrop.tsx
│ └── SidebarWidget.tsx
└── svg.d.ts
└── tsconfig.json
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /.idea
5 | /node_modules
6 | /.pnp
7 | .pnp.js
8 | .yarn/install-state.gz
9 |
10 | # testing
11 | /coverage
12 |
13 | # next.js
14 | /.next/
15 | /out/
16 |
17 | # production
18 | /build
19 |
20 | # misc
21 | .DS_Store
22 | *.pem
23 |
24 | # debug
25 | npm-debug.log*
26 | yarn-debug.log*
27 | yarn-error.log*
28 |
29 | # local env files
30 | .env*.local
31 |
32 | # vercel
33 | .vercel
34 |
35 | # typescript
36 | *.tsbuildinfo
37 | next-env.d.ts
38 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 |
--------------------------------------------------------------------------------
/.idea/free-nextjs-admin-dashboard.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/prettier.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 TailAdmin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/banner.png
--------------------------------------------------------------------------------
/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import { dirname } from "path";
2 | import { fileURLToPath } from "url";
3 | import { FlatCompat } from "@eslint/eslintrc";
4 |
5 | const __filename = fileURLToPath(import.meta.url);
6 | const __dirname = dirname(__filename);
7 |
8 | const compat = new FlatCompat({
9 | baseDirectory: __dirname,
10 | });
11 |
12 | const eslintConfig = [
13 | ...compat.extends("next/core-web-vitals", "next/typescript"),
14 | ];
15 |
16 | export default eslintConfig;
17 |
--------------------------------------------------------------------------------
/jsvectormap.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'jsvectormap' {
2 | const jsVectorMap: any;
3 | export default jsVectorMap;
4 | }
5 |
--------------------------------------------------------------------------------
/next.config.ts:
--------------------------------------------------------------------------------
1 | import type { NextConfig } from "next";
2 |
3 | const nextConfig: NextConfig = {
4 | /* config options here */
5 | webpack(config) {
6 | config.module.rules.push({
7 | test: /\.svg$/,
8 | use: ["@svgr/webpack"],
9 | });
10 | return config;
11 | },
12 | };
13 |
14 | export default nextConfig;
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "free-nextjs-admin-dashboard",
3 | "version": "2.0.2",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@fullcalendar/core": "^6.1.15",
13 | "@fullcalendar/daygrid": "^6.1.15",
14 | "@fullcalendar/interaction": "^6.1.15",
15 | "@fullcalendar/list": "^6.1.15",
16 | "@fullcalendar/react": "^6.1.15",
17 | "@fullcalendar/timegrid": "^6.1.15",
18 | "@react-jvectormap/core": "^1.0.4",
19 | "@react-jvectormap/world": "^1.1.2",
20 | "@tailwindcss/forms": "^0.5.9",
21 | "@tailwindcss/postcss": "^4.0.9",
22 | "apexcharts": "^4.3.0",
23 | "autoprefixer": "^10.4.20",
24 | "flatpickr": "^4.6.13",
25 | "next": "15.2.3",
26 | "react": "^19.0.0",
27 | "react-apexcharts": "^1.7.0",
28 | "react-dnd": "^16.0.1",
29 | "react-dnd-html5-backend": "^16.0.1",
30 | "react-dom": "^19.0.0",
31 | "react-dropzone": "^14.3.5",
32 | "swiper": "^11.2.0",
33 | "tailwind-merge": "^2.6.0"
34 | },
35 | "devDependencies": {
36 | "@eslint/eslintrc": "^3",
37 | "@svgr/webpack": "^8.1.0",
38 | "@types/node": "^20",
39 | "@types/react": "^19",
40 | "@types/react-dom": "^19",
41 | "@types/react-transition-group": "^4.4.12",
42 | "eslint": "^9",
43 | "eslint-config-next": "15.1.3",
44 | "postcss": "^8",
45 | "tailwindcss": "^4.0.0",
46 | "typescript": "^5"
47 | },
48 | "overrides": {
49 | "@react-jvectormap/core": {
50 | "react": "^16.8.0 || ^17 || ^18 || ^19",
51 | "react-dom": "^16.8.0 || ^17 || ^18 || ^19"
52 | },
53 | "@react-jvectormap/world": {
54 | "react": "^16.8.0 || ^17 || ^18 || ^19",
55 | "react-dom": "^16.8.0 || ^17 || ^18 || ^19"
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | '@tailwindcss/postcss': {},
4 | },
5 | };
6 |
--------------------------------------------------------------------------------
/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: ['prettier-plugin-tailwindcss'],
3 | }
--------------------------------------------------------------------------------
/public/images/brand/brand-01.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/images/brand/brand-02.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/public/images/brand/brand-03.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/public/images/brand/brand-05.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/images/brand/brand-06.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/images/brand/brand-07.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/images/brand/brand-09.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/public/images/brand/brand-10.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/images/brand/brand-11.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/images/brand/brand-12.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/images/brand/brand-13.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/public/images/brand/brand-14.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/images/brand/brand-15.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/images/cards/card-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/cards/card-01.jpg
--------------------------------------------------------------------------------
/public/images/cards/card-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/cards/card-01.png
--------------------------------------------------------------------------------
/public/images/cards/card-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/cards/card-02.jpg
--------------------------------------------------------------------------------
/public/images/cards/card-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/cards/card-02.png
--------------------------------------------------------------------------------
/public/images/cards/card-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/cards/card-03.jpg
--------------------------------------------------------------------------------
/public/images/cards/card-03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/cards/card-03.png
--------------------------------------------------------------------------------
/public/images/carousel/carousel-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/carousel/carousel-01.png
--------------------------------------------------------------------------------
/public/images/carousel/carousel-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/carousel/carousel-02.png
--------------------------------------------------------------------------------
/public/images/carousel/carousel-03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/carousel/carousel-03.png
--------------------------------------------------------------------------------
/public/images/carousel/carousel-04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/carousel/carousel-04.png
--------------------------------------------------------------------------------
/public/images/chat/chat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/chat/chat.jpg
--------------------------------------------------------------------------------
/public/images/country/country-01.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/public/images/country/country-02.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/public/images/country/country-03.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/public/images/country/country-05.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/public/images/country/country-06.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/public/images/country/country-07.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/public/images/country/country-08.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/public/images/error/404-dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/public/images/error/404.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/favicon.ico
--------------------------------------------------------------------------------
/public/images/grid-image/image-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/grid-image/image-01.png
--------------------------------------------------------------------------------
/public/images/grid-image/image-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/grid-image/image-02.png
--------------------------------------------------------------------------------
/public/images/grid-image/image-03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/grid-image/image-03.png
--------------------------------------------------------------------------------
/public/images/grid-image/image-04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/grid-image/image-04.png
--------------------------------------------------------------------------------
/public/images/grid-image/image-05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/grid-image/image-05.png
--------------------------------------------------------------------------------
/public/images/grid-image/image-06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/grid-image/image-06.png
--------------------------------------------------------------------------------
/public/images/icons/file-image-dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/images/icons/file-image.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/images/icons/file-video-dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/images/icons/file-video.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/images/product/product-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/product/product-01.jpg
--------------------------------------------------------------------------------
/public/images/product/product-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/product/product-02.jpg
--------------------------------------------------------------------------------
/public/images/product/product-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/product/product-03.jpg
--------------------------------------------------------------------------------
/public/images/product/product-04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/product/product-04.jpg
--------------------------------------------------------------------------------
/public/images/product/product-05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/product/product-05.jpg
--------------------------------------------------------------------------------
/public/images/task/pdf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/public/images/task/task.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/task/task.jpg
--------------------------------------------------------------------------------
/public/images/task/task.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/task/task.png
--------------------------------------------------------------------------------
/public/images/user/owner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/owner.jpg
--------------------------------------------------------------------------------
/public/images/user/user-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-01.jpg
--------------------------------------------------------------------------------
/public/images/user/user-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-02.jpg
--------------------------------------------------------------------------------
/public/images/user/user-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-03.jpg
--------------------------------------------------------------------------------
/public/images/user/user-04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-04.jpg
--------------------------------------------------------------------------------
/public/images/user/user-05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-05.jpg
--------------------------------------------------------------------------------
/public/images/user/user-06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-06.jpg
--------------------------------------------------------------------------------
/public/images/user/user-07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-07.jpg
--------------------------------------------------------------------------------
/public/images/user/user-08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-08.jpg
--------------------------------------------------------------------------------
/public/images/user/user-09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-09.jpg
--------------------------------------------------------------------------------
/public/images/user/user-10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-10.jpg
--------------------------------------------------------------------------------
/public/images/user/user-11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-11.jpg
--------------------------------------------------------------------------------
/public/images/user/user-12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-12.jpg
--------------------------------------------------------------------------------
/public/images/user/user-13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-13.jpg
--------------------------------------------------------------------------------
/public/images/user/user-14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-14.jpg
--------------------------------------------------------------------------------
/public/images/user/user-15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-15.jpg
--------------------------------------------------------------------------------
/public/images/user/user-16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-16.jpg
--------------------------------------------------------------------------------
/public/images/user/user-17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-17.jpg
--------------------------------------------------------------------------------
/public/images/user/user-18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-18.jpg
--------------------------------------------------------------------------------
/public/images/user/user-19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-19.jpg
--------------------------------------------------------------------------------
/public/images/user/user-20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-20.jpg
--------------------------------------------------------------------------------
/public/images/user/user-21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-21.jpg
--------------------------------------------------------------------------------
/public/images/user/user-22.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-22.jpg
--------------------------------------------------------------------------------
/public/images/user/user-23.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-23.jpg
--------------------------------------------------------------------------------
/public/images/user/user-24.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-24.jpg
--------------------------------------------------------------------------------
/public/images/user/user-25.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-25.jpg
--------------------------------------------------------------------------------
/public/images/user/user-26.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-26.jpg
--------------------------------------------------------------------------------
/public/images/user/user-27.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-27.jpg
--------------------------------------------------------------------------------
/public/images/user/user-28.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-28.jpg
--------------------------------------------------------------------------------
/public/images/user/user-29.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-29.jpg
--------------------------------------------------------------------------------
/public/images/user/user-30.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-30.jpg
--------------------------------------------------------------------------------
/public/images/user/user-31.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-31.jpg
--------------------------------------------------------------------------------
/public/images/user/user-32.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-32.jpg
--------------------------------------------------------------------------------
/public/images/user/user-33.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-33.jpg
--------------------------------------------------------------------------------
/public/images/user/user-34.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-34.jpg
--------------------------------------------------------------------------------
/public/images/user/user-35.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-35.jpg
--------------------------------------------------------------------------------
/public/images/user/user-36.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-36.jpg
--------------------------------------------------------------------------------
/public/images/user/user-37.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/user/user-37.jpg
--------------------------------------------------------------------------------
/public/images/video-thumb/thumb-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/public/images/video-thumb/thumb-16.png
--------------------------------------------------------------------------------
/public/images/video-thumb/youtube-icon-84.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/app/(admin)/(others-pages)/(chart)/bar-chart/page.tsx:
--------------------------------------------------------------------------------
1 | import BarChartOne from "@/components/charts/bar/BarChartOne";
2 | import ComponentCard from "@/components/common/ComponentCard";
3 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
4 | import { Metadata } from "next";
5 | import React from "react";
6 |
7 | export const metadata: Metadata = {
8 | title: "Next.js Bar Chart | TailAdmin - Next.js Dashboard Template",
9 | description:
10 | "This is Next.js Bar Chart page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
11 | };
12 |
13 | export default function page() {
14 | return (
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 | }
25 |
--------------------------------------------------------------------------------
/src/app/(admin)/(others-pages)/(chart)/line-chart/page.tsx:
--------------------------------------------------------------------------------
1 | import LineChartOne from "@/components/charts/line/LineChartOne";
2 | import ComponentCard from "@/components/common/ComponentCard";
3 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
4 | import { Metadata } from "next";
5 | import React from "react";
6 |
7 | export const metadata: Metadata = {
8 | title: "Next.js Line Chart | TailAdmin - Next.js Dashboard Template",
9 | description:
10 | "This is Next.js Line Chart page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
11 | };
12 | export default function LineChart() {
13 | return (
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/src/app/(admin)/(others-pages)/(forms)/form-elements/page.tsx:
--------------------------------------------------------------------------------
1 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
2 | import CheckboxComponents from "@/components/form/form-elements/CheckboxComponents";
3 | import DefaultInputs from "@/components/form/form-elements/DefaultInputs";
4 | import DropzoneComponent from "@/components/form/form-elements/DropZone";
5 | import FileInputExample from "@/components/form/form-elements/FileInputExample";
6 | import InputGroup from "@/components/form/form-elements/InputGroup";
7 | import InputStates from "@/components/form/form-elements/InputStates";
8 | import RadioButtons from "@/components/form/form-elements/RadioButtons";
9 | import SelectInputs from "@/components/form/form-elements/SelectInputs";
10 | import TextAreaInput from "@/components/form/form-elements/TextAreaInput";
11 | import ToggleSwitch from "@/components/form/form-elements/ToggleSwitch";
12 | import { Metadata } from "next";
13 | import React from "react";
14 |
15 | export const metadata: Metadata = {
16 | title: "Next.js Form Elements | TailAdmin - Next.js Dashboard Template",
17 | description:
18 | "This is Next.js Form Elements page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
19 | };
20 |
21 | export default function FormElements() {
22 | return (
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/src/app/(admin)/(others-pages)/(tables)/basic-tables/page.tsx:
--------------------------------------------------------------------------------
1 | import ComponentCard from "@/components/common/ComponentCard";
2 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
3 | import BasicTableOne from "@/components/tables/BasicTableOne";
4 | import { Metadata } from "next";
5 | import React from "react";
6 |
7 | export const metadata: Metadata = {
8 | title: "Next.js Basic Table | TailAdmin - Next.js Dashboard Template",
9 | description:
10 | "This is Next.js Basic Table page for TailAdmin Tailwind CSS Admin Dashboard Template",
11 | // other metadata
12 | };
13 |
14 | export default function BasicTables() {
15 | return (
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | );
25 | }
26 |
--------------------------------------------------------------------------------
/src/app/(admin)/(others-pages)/blank/page.tsx:
--------------------------------------------------------------------------------
1 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
2 | import { Metadata } from "next";
3 | import React from "react";
4 |
5 | export const metadata: Metadata = {
6 | title: "Next.js Blank Page | TailAdmin - Next.js Dashboard Template",
7 | description: "This is Next.js Blank Page TailAdmin Dashboard Template",
8 | };
9 |
10 | export default function BlankPage() {
11 | return (
12 |
13 |
14 |
15 |
16 |
17 | Card Title Here
18 |
19 |
20 | Start putting content on grids or panels, you can also use different
21 | combinations of grids.Please check out the dashboard and other pages
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/src/app/(admin)/(others-pages)/calendar/page.tsx:
--------------------------------------------------------------------------------
1 | import Calendar from "@/components/calendar/Calendar";
2 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
3 | import { Metadata } from "next";
4 | import React from "react";
5 |
6 | export const metadata: Metadata = {
7 | title: "Next.js Calender | TailAdmin - Next.js Dashboard Template",
8 | description:
9 | "This is Next.js Calender page for TailAdmin Tailwind CSS Admin Dashboard Template",
10 | // other metadata
11 | };
12 | export default function page() {
13 | return (
14 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/src/app/(admin)/(others-pages)/profile/page.tsx:
--------------------------------------------------------------------------------
1 | import UserAddressCard from "@/components/user-profile/UserAddressCard";
2 | import UserInfoCard from "@/components/user-profile/UserInfoCard";
3 | import UserMetaCard from "@/components/user-profile/UserMetaCard";
4 | import { Metadata } from "next";
5 | import React from "react";
6 |
7 | export const metadata: Metadata = {
8 | title: "Next.js Profile | TailAdmin - Next.js Dashboard Template",
9 | description:
10 | "This is Next.js Profile page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
11 | };
12 |
13 | export default function Profile() {
14 | return (
15 |
16 |
17 |
18 | Profile
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/src/app/(admin)/(ui-elements)/images/page.tsx:
--------------------------------------------------------------------------------
1 | import ComponentCard from "@/components/common/ComponentCard";
2 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
3 | import ResponsiveImage from "@/components/ui/images/ResponsiveImage";
4 | import ThreeColumnImageGrid from "@/components/ui/images/ThreeColumnImageGrid";
5 | import TwoColumnImageGrid from "@/components/ui/images/TwoColumnImageGrid";
6 | import { Metadata } from "next";
7 | import React from "react";
8 |
9 | export const metadata: Metadata = {
10 | title: "Next.js Images | TailAdmin - Next.js Dashboard Template",
11 | description:
12 | "This is Next.js Images page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
13 | // other metadata
14 | };
15 |
16 | export default function Images() {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/src/app/(admin)/(ui-elements)/modals/page.tsx:
--------------------------------------------------------------------------------
1 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
2 | import DefaultModal from "@/components/example/ModalExample/DefaultModal";
3 | import FormInModal from "@/components/example/ModalExample/FormInModal";
4 | import FullScreenModal from "@/components/example/ModalExample/FullScreenModal";
5 | import ModalBasedAlerts from "@/components/example/ModalExample/ModalBasedAlerts";
6 | import VerticallyCenteredModal from "@/components/example/ModalExample/VerticallyCenteredModal";
7 | import { Metadata } from "next";
8 | import React from "react";
9 |
10 | export const metadata: Metadata = {
11 | title: "Next.js Modals | TailAdmin - Next.js Dashboard Template",
12 | description:
13 | "This is Next.js Modals page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
14 | // other metadata
15 | };
16 |
17 | export default function Modals() {
18 | return (
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/src/app/(admin)/(ui-elements)/videos/page.tsx:
--------------------------------------------------------------------------------
1 | import PageBreadcrumb from "@/components/common/PageBreadCrumb";
2 | import VideosExample from "@/components/ui/video/VideosExample";
3 | import { Metadata } from "next";
4 | import React from "react";
5 |
6 | export const metadata: Metadata = {
7 | title: "Next.js Videos | TailAdmin - Next.js Dashboard Template",
8 | description:
9 | "This is Next.js Videos page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
10 | };
11 |
12 | export default function VideoPage() {
13 | return (
14 |
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/src/app/(admin)/layout.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useSidebar } from "@/context/SidebarContext";
4 | import AppHeader from "@/layout/AppHeader";
5 | import AppSidebar from "@/layout/AppSidebar";
6 | import Backdrop from "@/layout/Backdrop";
7 | import React from "react";
8 |
9 | export default function AdminLayout({
10 | children,
11 | }: {
12 | children: React.ReactNode;
13 | }) {
14 | const { isExpanded, isHovered, isMobileOpen } = useSidebar();
15 |
16 | // Dynamic class for main content margin based on sidebar state
17 | const mainContentMargin = isMobileOpen
18 | ? "ml-0"
19 | : isExpanded || isHovered
20 | ? "lg:ml-[290px]"
21 | : "lg:ml-[90px]";
22 |
23 | return (
24 |
25 | {/* Sidebar and Backdrop */}
26 |
27 |
28 | {/* Main Content Area */}
29 |
32 | {/* Header */}
33 |
34 | {/* Page Content */}
35 |
{children}
36 |
37 |
38 | );
39 | }
40 |
--------------------------------------------------------------------------------
/src/app/(admin)/page.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from "next";
2 | import { EcommerceMetrics } from "@/components/ecommerce/EcommerceMetrics";
3 | import React from "react";
4 | import MonthlyTarget from "@/components/ecommerce/MonthlyTarget";
5 | import MonthlySalesChart from "@/components/ecommerce/MonthlySalesChart";
6 | import StatisticsChart from "@/components/ecommerce/StatisticsChart";
7 | import RecentOrders from "@/components/ecommerce/RecentOrders";
8 | import DemographicCard from "@/components/ecommerce/DemographicCard";
9 |
10 | export const metadata: Metadata = {
11 | title:
12 | "Next.js E-commerce Dashboard | TailAdmin - Next.js Dashboard Template",
13 | description: "This is Next.js Home for TailAdmin Dashboard Template",
14 | };
15 |
16 | export default function Ecommerce() {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | }
43 |
--------------------------------------------------------------------------------
/src/app/(full-width-pages)/(auth)/layout.tsx:
--------------------------------------------------------------------------------
1 | import GridShape from "@/components/common/GridShape";
2 | import ThemeTogglerTwo from "@/components/common/ThemeTogglerTwo";
3 |
4 | import { ThemeProvider } from "@/context/ThemeContext";
5 | import Image from "next/image";
6 | import Link from "next/link";
7 | import React from "react";
8 |
9 | export default function AuthLayout({
10 | children,
11 | }: {
12 | children: React.ReactNode;
13 | }) {
14 | return (
15 |
16 |
17 |
18 | {children}
19 |
20 |
21 | {/* */}
22 |
23 |
24 |
25 |
31 |
32 |
33 | Free and Open-Source Tailwind CSS Admin Dashboard Template
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | );
45 | }
46 |
--------------------------------------------------------------------------------
/src/app/(full-width-pages)/(auth)/signin/page.tsx:
--------------------------------------------------------------------------------
1 | import SignInForm from "@/components/auth/SignInForm";
2 | import { Metadata } from "next";
3 |
4 | export const metadata: Metadata = {
5 | title: "Next.js SignIn Page | TailAdmin - Next.js Dashboard Template",
6 | description: "This is Next.js Signin Page TailAdmin Dashboard Template",
7 | };
8 |
9 | export default function SignIn() {
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/src/app/(full-width-pages)/(auth)/signup/page.tsx:
--------------------------------------------------------------------------------
1 | import SignUpForm from "@/components/auth/SignUpForm";
2 | import { Metadata } from "next";
3 |
4 | export const metadata: Metadata = {
5 | title: "Next.js SignUp Page | TailAdmin - Next.js Dashboard Template",
6 | description: "This is Next.js SignUp Page TailAdmin Dashboard Template",
7 | // other metadata
8 | };
9 |
10 | export default function SignUp() {
11 | return ;
12 | }
13 |
--------------------------------------------------------------------------------
/src/app/(full-width-pages)/(error-pages)/error-404/page.tsx:
--------------------------------------------------------------------------------
1 | import GridShape from "@/components/common/GridShape";
2 | import { Metadata } from "next";
3 | import Image from "next/image";
4 | import Link from "next/link";
5 | import React from "react";
6 |
7 | export const metadata: Metadata = {
8 | title: "Next.js Error 404 | TailAdmin - Next.js Dashboard Template",
9 | description:
10 | "This is Next.js Error 404 page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
11 | };
12 |
13 | export default function Error404() {
14 | return (
15 |
16 |
17 |
18 |
19 | ERROR
20 |
21 |
22 |
29 |
36 |
37 |
38 | We can’t seem to find the page you are looking for!
39 |
40 |
41 |
45 | Back to Home Page
46 |
47 |
48 | {/* */}
49 |
50 | © {new Date().getFullYear()} - TailAdmin
51 |
52 |
53 | );
54 | }
55 |
--------------------------------------------------------------------------------
/src/app/(full-width-pages)/layout.tsx:
--------------------------------------------------------------------------------
1 | export default function FullWidthPageLayout({
2 | children,
3 | }: {
4 | children: React.ReactNode;
5 | }) {
6 | return {children}
;
7 | }
8 |
--------------------------------------------------------------------------------
/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/src/app/favicon.ico
--------------------------------------------------------------------------------
/src/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import { Outfit } from 'next/font/google';
2 | import './globals.css';
3 |
4 | import { SidebarProvider } from '@/context/SidebarContext';
5 | import { ThemeProvider } from '@/context/ThemeContext';
6 |
7 | const outfit = Outfit({
8 | subsets: ["latin"],
9 | });
10 |
11 | export default function RootLayout({
12 | children,
13 | }: Readonly<{
14 | children: React.ReactNode;
15 | }>) {
16 | return (
17 |
18 |
19 |
20 | {children}
21 |
22 |
23 |
24 | );
25 | }
26 |
--------------------------------------------------------------------------------
/src/app/not-found.tsx:
--------------------------------------------------------------------------------
1 | import GridShape from "@/components/common/GridShape";
2 | import Image from "next/image";
3 | import Link from "next/link";
4 | import React from "react";
5 |
6 | export default function NotFound() {
7 | return (
8 |
9 |
10 |
11 |
12 | ERROR
13 |
14 |
15 |
22 |
29 |
30 |
31 | We can’t seem to find the page you are looking for!
32 |
33 |
34 |
38 | Back to Home Page
39 |
40 |
41 | {/* */}
42 |
43 | © {new Date().getFullYear()} - TailAdmin
44 |
45 |
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/src/components/common/ChartTab.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 |
3 | const ChartTab: React.FC = () => {
4 | const [selected, setSelected] = useState<
5 | "optionOne" | "optionTwo" | "optionThree"
6 | >("optionOne");
7 |
8 | const getButtonClass = (option: "optionOne" | "optionTwo" | "optionThree") =>
9 | selected === option
10 | ? "shadow-theme-xs text-gray-900 dark:text-white bg-white dark:bg-gray-800"
11 | : "text-gray-500 dark:text-gray-400";
12 |
13 | return (
14 |
15 | setSelected("optionOne")}
17 | className={`px-3 py-2 font-medium w-full rounded-md text-theme-sm hover:text-gray-900 dark:hover:text-white ${getButtonClass(
18 | "optionOne"
19 | )}`}
20 | >
21 | Monthly
22 |
23 |
24 | setSelected("optionTwo")}
26 | className={`px-3 py-2 font-medium w-full rounded-md text-theme-sm hover:text-gray-900 dark:hover:text-white ${getButtonClass(
27 | "optionTwo"
28 | )}`}
29 | >
30 | Quarterly
31 |
32 |
33 | setSelected("optionThree")}
35 | className={`px-3 py-2 font-medium w-full rounded-md text-theme-sm hover:text-gray-900 dark:hover:text-white ${getButtonClass(
36 | "optionThree"
37 | )}`}
38 | >
39 | Annually
40 |
41 |
42 | );
43 | };
44 |
45 | export default ChartTab;
46 |
--------------------------------------------------------------------------------
/src/components/common/ComponentCard.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | interface ComponentCardProps {
4 | title: string;
5 | children: React.ReactNode;
6 | className?: string; // Additional custom classes for styling
7 | desc?: string; // Description text
8 | }
9 |
10 | const ComponentCard: React.FC = ({
11 | title,
12 | children,
13 | className = "",
14 | desc = "",
15 | }) => {
16 | return (
17 |
20 | {/* Card Header */}
21 |
22 |
23 | {title}
24 |
25 | {desc && (
26 |
27 | {desc}
28 |
29 | )}
30 |
31 |
32 | {/* Card Body */}
33 |
36 |
37 | );
38 | };
39 |
40 | export default ComponentCard;
41 |
--------------------------------------------------------------------------------
/src/components/common/GridShape.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import React from "react";
3 |
4 | export default function GridShape() {
5 | return (
6 | <>
7 |
8 |
14 |
15 |
16 |
22 |
23 | >
24 | );
25 | }
26 |
--------------------------------------------------------------------------------
/src/components/common/PageBreadCrumb.tsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import React from "react";
3 |
4 | interface BreadcrumbProps {
5 | pageTitle: string;
6 | }
7 |
8 | const PageBreadcrumb: React.FC = ({ pageTitle }) => {
9 | return (
10 |
11 |
15 | {pageTitle}
16 |
17 |
18 |
19 |
20 |
24 | Home
25 |
33 |
40 |
41 |
42 |
43 |
44 | {pageTitle}
45 |
46 |
47 |
48 |
49 | );
50 | };
51 |
52 | export default PageBreadcrumb;
53 |
--------------------------------------------------------------------------------
/src/components/ecommerce/EcommerceMetrics.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React from "react";
3 | import Badge from "../ui/badge/Badge";
4 | import { ArrowDownIcon, ArrowUpIcon, BoxIconLine, GroupIcon } from "@/icons";
5 |
6 | export const EcommerceMetrics = () => {
7 | return (
8 |
9 | {/* */}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | Customers
19 |
20 |
21 | 3,782
22 |
23 |
24 |
25 |
26 | 11.01%
27 |
28 |
29 |
30 | {/* */}
31 |
32 | {/* */}
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | Orders
41 |
42 |
43 | 5,359
44 |
45 |
46 |
47 |
48 |
49 | 9.05%
50 |
51 |
52 |
53 | {/* */}
54 |
55 | );
56 | };
57 |
--------------------------------------------------------------------------------
/src/components/example/ModalExample/DefaultModal.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 |
5 | import { Modal } from "../../ui/modal";
6 | import Button from "../../ui/button/Button";
7 | import { useModal } from "@/hooks/useModal";
8 |
9 | export default function DefaultModal() {
10 | const { isOpen, openModal, closeModal } = useModal();
11 | const handleSave = () => {
12 | // Handle save logic here
13 | console.log("Saving changes...");
14 | closeModal();
15 | };
16 | return (
17 |
18 |
19 |
20 | Open Modal
21 |
22 |
27 |
28 | Modal Heading
29 |
30 |
31 | Lorem ipsum dolor sit amet, consectetur adipiscing elit.
32 | Pellentesque euismod est quis mauris lacinia pharetra. Sed a ligula
33 | ac odio condimentum aliquet a nec nulla. Aliquam bibendum ex sit
34 | amet ipsum rutrum feugiat ultrices enim quam.
35 |
36 |
37 | Lorem ipsum dolor sit amet, consectetur adipiscing elit.
38 | Pellentesque euismod est quis mauris lacinia pharetra. Sed a ligula
39 | ac odio.
40 |
41 |
42 |
43 | Close
44 |
45 |
46 | Save Changes
47 |
48 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/src/components/example/ModalExample/VerticallyCenteredModal.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import Button from "../../ui/button/Button";
5 | import { Modal } from "../../ui/modal";
6 | import { useModal } from "@/hooks/useModal";
7 |
8 | export default function VerticallyCenteredModal() {
9 | const { isOpen, openModal, closeModal } = useModal();
10 | const handleSave = () => {
11 | // Handle save logic here
12 | console.log("Saving changes...");
13 | closeModal();
14 | };
15 | return (
16 |
17 |
18 | Open Modal
19 |
20 |
26 |
27 |
28 | All Done! Success Confirmed
29 |
30 |
31 | Lorem ipsum dolor sit amet, consectetur adipiscing elit.
32 | Pellentesque euismod est quis mauris lacinia pharetra.
33 |
34 |
35 |
36 |
37 | Close
38 |
39 |
40 | Save Changes
41 |
42 |
43 |
44 |
45 |
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/src/components/form/Form.tsx:
--------------------------------------------------------------------------------
1 | import React, { FC, ReactNode, FormEvent } from "react";
2 |
3 | interface FormProps {
4 | onSubmit: (event: FormEvent) => void;
5 | children: ReactNode;
6 | className?: string;
7 | }
8 |
9 | const Form: FC = ({ onSubmit, children, className }) => {
10 | return (
11 |
20 | );
21 | };
22 |
23 | export default Form;
24 |
--------------------------------------------------------------------------------
/src/components/form/Label.tsx:
--------------------------------------------------------------------------------
1 | import React, { FC, ReactNode } from "react";
2 | import { twMerge } from "tailwind-merge";
3 |
4 | interface LabelProps {
5 | htmlFor?: string;
6 | children: ReactNode;
7 | className?: string;
8 | }
9 |
10 | const Label: FC = ({ htmlFor, children, className }) => {
11 | return (
12 |
22 | {children}
23 |
24 | );
25 | };
26 |
27 | export default Label;
28 |
--------------------------------------------------------------------------------
/src/components/form/Select.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 |
3 | interface Option {
4 | value: string;
5 | label: string;
6 | }
7 |
8 | interface SelectProps {
9 | options: Option[];
10 | placeholder?: string;
11 | onChange: (value: string) => void;
12 | className?: string;
13 | defaultValue?: string;
14 | }
15 |
16 | const Select: React.FC = ({
17 | options,
18 | placeholder = "Select an option",
19 | onChange,
20 | className = "",
21 | defaultValue = "",
22 | }) => {
23 | // Manage the selected value
24 | const [selectedValue, setSelectedValue] = useState(defaultValue);
25 |
26 | const handleChange = (e: React.ChangeEvent) => {
27 | const value = e.target.value;
28 | setSelectedValue(value);
29 | onChange(value); // Trigger parent handler
30 | };
31 |
32 | return (
33 |
42 | {/* Placeholder option */}
43 |
48 | {placeholder}
49 |
50 | {/* Map over options */}
51 | {options.map((option) => (
52 |
57 | {option.label}
58 |
59 | ))}
60 |
61 | );
62 | };
63 |
64 | export default Select;
65 |
--------------------------------------------------------------------------------
/src/components/form/date-picker.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 | import flatpickr from 'flatpickr';
3 | import 'flatpickr/dist/flatpickr.css';
4 | import Label from './Label';
5 | import { CalenderIcon } from '../../icons';
6 | import Hook = flatpickr.Options.Hook;
7 | import DateOption = flatpickr.Options.DateOption;
8 |
9 | type PropsType = {
10 | id: string;
11 | mode?: "single" | "multiple" | "range" | "time";
12 | onChange?: Hook | Hook[];
13 | defaultDate?: DateOption;
14 | label?: string;
15 | placeholder?: string;
16 | };
17 |
18 | export default function DatePicker({
19 | id,
20 | mode,
21 | onChange,
22 | label,
23 | defaultDate,
24 | placeholder,
25 | }: PropsType) {
26 | useEffect(() => {
27 | const flatPickr = flatpickr(`#${id}`, {
28 | mode: mode || "single",
29 | static: true,
30 | monthSelectorType: "static",
31 | dateFormat: "Y-m-d",
32 | defaultDate,
33 | onChange,
34 | });
35 |
36 | return () => {
37 | if (!Array.isArray(flatPickr)) {
38 | flatPickr.destroy();
39 | }
40 | };
41 | }, [mode, onChange, id, defaultDate]);
42 |
43 | return (
44 |
45 | {label &&
{label} }
46 |
47 |
48 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | );
60 | }
61 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/CheckboxComponents.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useState } from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import Checkbox from "../input/Checkbox";
5 |
6 | export default function CheckboxComponents() {
7 | const [isChecked, setIsChecked] = useState(false);
8 | const [isCheckedTwo, setIsCheckedTwo] = useState(true);
9 | const [isCheckedDisabled, setIsCheckedDisabled] = useState(false);
10 | return (
11 |
12 |
13 |
14 |
15 |
16 | Default
17 |
18 |
19 |
20 |
25 |
26 |
27 |
33 |
34 |
35 |
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/FileInputExample.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import FileInput from "../input/FileInput";
5 | import Label from "../Label";
6 |
7 | export default function FileInputExample() {
8 | const handleFileChange = (event: React.ChangeEvent) => {
9 | const file = event.target.files?.[0];
10 | if (file) {
11 | console.log("Selected file:", file.name);
12 | }
13 | };
14 |
15 | return (
16 |
17 |
18 | Upload file
19 |
20 |
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/InputGroup.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import Label from "../Label";
5 | import Input from "../input/InputField";
6 | import { EnvelopeIcon } from "../../../icons";
7 | import PhoneInput from "../group-input/PhoneInput";
8 |
9 | export default function InputGroup() {
10 | const countries = [
11 | { code: "US", label: "+1" },
12 | { code: "GB", label: "+44" },
13 | { code: "CA", label: "+1" },
14 | { code: "AU", label: "+61" },
15 | ];
16 | const handlePhoneNumberChange = (phoneNumber: string) => {
17 | console.log("Updated phone number:", phoneNumber);
18 | };
19 | return (
20 |
21 |
22 |
23 |
Email
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
{" "}
44 |
53 |
54 |
55 | );
56 | }
57 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/InputStates.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useState } from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import Input from "../input/InputField";
5 | import Label from "../Label";
6 |
7 | export default function InputStates() {
8 | const [email, setEmail] = useState("");
9 | const [error, setError] = useState(false);
10 |
11 | // Simulate a validation check
12 | const validateEmail = (value: string) => {
13 | const isValidEmail =
14 | /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value);
15 | setError(!isValidEmail);
16 | return isValidEmail;
17 | };
18 |
19 | const handleEmailChange = (e: React.ChangeEvent) => {
20 | const value = e.target.value;
21 | setEmail(value);
22 | validateEmail(value);
23 | };
24 | return (
25 |
29 |
68 |
69 | );
70 | }
71 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/RadioButtons.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useState } from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import Radio from "../input/Radio";
5 |
6 | export default function RadioButtons() {
7 | const [selectedValue, setSelectedValue] = useState("option2");
8 |
9 | const handleRadioChange = (value: string) => {
10 | setSelectedValue(value);
11 | };
12 | return (
13 |
14 |
15 |
23 |
31 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/SelectInputs.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useState } from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import Label from "../Label";
5 | import Select from "../Select";
6 | import MultiSelect from "../MultiSelect";
7 | import { ChevronDownIcon } from "@/icons";
8 |
9 | export default function SelectInputs() {
10 | const options = [
11 | { value: "marketing", label: "Marketing" },
12 | { value: "template", label: "Template" },
13 | { value: "development", label: "Development" },
14 | ];
15 |
16 | const [selectedValues, setSelectedValues] = useState([]);
17 |
18 | const handleSelectChange = (value: string) => {
19 | console.log("Selected value:", value);
20 | };
21 |
22 | const multiOptions = [
23 | { value: "1", text: "Option 1", selected: false },
24 | { value: "2", text: "Option 2", selected: false },
25 | { value: "3", text: "Option 3", selected: false },
26 | { value: "4", text: "Option 4", selected: false },
27 | { value: "5", text: "Option 5", selected: false },
28 | ];
29 |
30 | return (
31 |
32 |
33 |
34 |
Select Input
35 |
36 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
setSelectedValues(values)}
53 | />
54 |
55 | Selected Values: {selectedValues.join(", ")}
56 |
57 |
58 |
59 |
60 | );
61 | }
62 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/TextAreaInput.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useState } from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import TextArea from "../input/TextArea";
5 | import Label from "../Label";
6 |
7 | export default function TextAreaInput() {
8 | const [message, setMessage] = useState("");
9 | const [messageTwo, setMessageTwo] = useState("");
10 | return (
11 |
12 |
13 | {/* Default TextArea */}
14 |
15 | Description
16 |
22 |
23 | {/* Disabled TextArea */}
24 |
25 | Description
26 |
27 |
28 |
29 | {/* Error TextArea */}
30 |
31 | Description
32 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/src/components/form/form-elements/ToggleSwitch.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React from "react";
3 | import ComponentCard from "../../common/ComponentCard";
4 | import Switch from "../switch/Switch";
5 |
6 | export default function ToggleSwitch() {
7 | const handleSwitchChange = (checked: boolean) => {
8 | console.log("Switch is now:", checked ? "ON" : "OFF");
9 | };
10 | return (
11 |
12 |
13 |
18 |
23 |
24 |
{" "}
25 |
26 |
32 |
38 |
39 |
40 |
41 | );
42 | }
43 |
--------------------------------------------------------------------------------
/src/components/form/input/FileInput.tsx:
--------------------------------------------------------------------------------
1 | import React, { FC } from "react";
2 |
3 | interface FileInputProps {
4 | className?: string;
5 | onChange?: (event: React.ChangeEvent) => void;
6 | }
7 |
8 | const FileInput: FC = ({ className, onChange }) => {
9 | return (
10 |
15 | );
16 | };
17 |
18 | export default FileInput;
19 |
--------------------------------------------------------------------------------
/src/components/form/input/Radio.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | interface RadioProps {
4 | id: string; // Unique ID for the radio button
5 | name: string; // Radio group name
6 | value: string; // Value of the radio button
7 | checked: boolean; // Whether the radio button is checked
8 | label: string; // Label for the radio button
9 | onChange: (value: string) => void; // Handler for value change
10 | className?: string; // Optional additional classes
11 | disabled?: boolean; // Optional disabled state for the radio button
12 | }
13 |
14 | const Radio: React.FC = ({
15 | id,
16 | name,
17 | value,
18 | checked,
19 | label,
20 | onChange,
21 | className = "",
22 | disabled = false,
23 | }) => {
24 | return (
25 |
33 | !disabled && onChange(value)} // Prevent onChange when disabled
40 | className="sr-only"
41 | disabled={disabled} // Disable input
42 | />
43 |
54 |
59 |
60 | {label}
61 |
62 | );
63 | };
64 |
65 | export default Radio;
66 |
--------------------------------------------------------------------------------
/src/components/form/input/RadioSm.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | interface RadioProps {
4 | id: string; // Unique ID for the radio button
5 | name: string; // Group name for the radio button
6 | value: string; // Value of the radio button
7 | checked: boolean; // Whether the radio button is checked
8 | label: string; // Label text for the radio button
9 | onChange: (value: string) => void; // Handler for when the radio button is toggled
10 | className?: string; // Optional custom classes for styling
11 | }
12 |
13 | const RadioSm: React.FC = ({
14 | id,
15 | name,
16 | value,
17 | checked,
18 | label,
19 | onChange,
20 | className = "",
21 | }) => {
22 | return (
23 |
27 |
28 | {/* Hidden Input */}
29 | onChange(value)}
36 | className="sr-only"
37 | />
38 | {/* Styled Radio Circle */}
39 |
46 | {/* Inner Dot */}
47 |
52 |
53 |
54 | {label}
55 |
56 | );
57 | };
58 |
59 | export default RadioSm;
60 |
--------------------------------------------------------------------------------
/src/components/form/switch/Switch.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import React, { useState } from "react";
3 |
4 | interface SwitchProps {
5 | label: string;
6 | defaultChecked?: boolean;
7 | disabled?: boolean;
8 | onChange?: (checked: boolean) => void;
9 | color?: "blue" | "gray"; // Added prop to toggle color theme
10 | }
11 |
12 | const Switch: React.FC = ({
13 | label,
14 | defaultChecked = false,
15 | disabled = false,
16 | onChange,
17 | color = "blue", // Default to blue color
18 | }) => {
19 | const [isChecked, setIsChecked] = useState(defaultChecked);
20 |
21 | const handleToggle = () => {
22 | if (disabled) return;
23 | const newCheckedState = !isChecked;
24 | setIsChecked(newCheckedState);
25 | if (onChange) {
26 | onChange(newCheckedState);
27 | }
28 | };
29 |
30 | const switchColors =
31 | color === "blue"
32 | ? {
33 | background: isChecked
34 | ? "bg-brand-500 "
35 | : "bg-gray-200 dark:bg-white/10", // Blue version
36 | knob: isChecked
37 | ? "translate-x-full bg-white"
38 | : "translate-x-0 bg-white",
39 | }
40 | : {
41 | background: isChecked
42 | ? "bg-gray-800 dark:bg-white/10"
43 | : "bg-gray-200 dark:bg-white/10", // Gray version
44 | knob: isChecked
45 | ? "translate-x-full bg-white"
46 | : "translate-x-0 bg-white",
47 | };
48 |
49 | return (
50 |
56 |
68 | {label}
69 |
70 | );
71 | };
72 |
73 | export default Switch;
74 |
--------------------------------------------------------------------------------
/src/components/tables/Pagination.tsx:
--------------------------------------------------------------------------------
1 | type PaginationProps = {
2 | currentPage: number;
3 | totalPages: number;
4 | onPageChange: (page: number) => void;
5 | };
6 |
7 | const Pagination: React.FC = ({
8 | currentPage,
9 | totalPages,
10 | onPageChange,
11 | }) => {
12 | const pagesAroundCurrent = Array.from(
13 | { length: Math.min(3, totalPages) },
14 | (_, i) => i + Math.max(currentPage - 1, 1)
15 | );
16 |
17 | return (
18 |
19 |
onPageChange(currentPage - 1)}
21 | disabled={currentPage === 1}
22 | className="mr-2.5 flex items-center h-10 justify-center rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-gray-700 shadow-theme-xs hover:bg-gray-50 disabled:opacity-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03] text-sm"
23 | >
24 | Previous
25 |
26 |
27 | {currentPage > 3 && ... }
28 | {pagesAroundCurrent.map((page) => (
29 | onPageChange(page)}
32 | className={`px-4 py-2 rounded ${
33 | currentPage === page
34 | ? "bg-brand-500 text-white"
35 | : "text-gray-700 dark:text-gray-400"
36 | } flex w-10 items-center justify-center h-10 rounded-lg text-sm font-medium hover:bg-blue-500/[0.08] hover:text-brand-500 dark:hover:text-brand-500`}
37 | >
38 | {page}
39 |
40 | ))}
41 | {currentPage < totalPages - 2 && ... }
42 |
43 |
onPageChange(currentPage + 1)}
45 | disabled={currentPage === totalPages}
46 | className="ml-2.5 flex items-center justify-center rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-gray-700 shadow-theme-xs text-sm hover:bg-gray-50 h-10 disabled:opacity-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03]"
47 | >
48 | Next
49 |
50 |
51 | );
52 | };
53 |
54 | export default Pagination;
55 |
--------------------------------------------------------------------------------
/src/components/ui/avatar/Avatar.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import React from "react";
3 |
4 | interface AvatarProps {
5 | src: string; // URL of the avatar image
6 | alt?: string; // Alt text for the avatar
7 | size?: "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge"; // Avatar size
8 | status?: "online" | "offline" | "busy" | "none"; // Status indicator
9 | }
10 |
11 | const sizeClasses = {
12 | xsmall: "h-6 w-6 max-w-6",
13 | small: "h-8 w-8 max-w-8",
14 | medium: "h-10 w-10 max-w-10",
15 | large: "h-12 w-12 max-w-12",
16 | xlarge: "h-14 w-14 max-w-14",
17 | xxlarge: "h-16 w-16 max-w-16",
18 | };
19 |
20 | const statusSizeClasses = {
21 | xsmall: "h-1.5 w-1.5 max-w-1.5",
22 | small: "h-2 w-2 max-w-2",
23 | medium: "h-2.5 w-2.5 max-w-2.5",
24 | large: "h-3 w-3 max-w-3",
25 | xlarge: "h-3.5 w-3.5 max-w-3.5",
26 | xxlarge: "h-4 w-4 max-w-4",
27 | };
28 |
29 | const statusColorClasses = {
30 | online: "bg-success-500",
31 | offline: "bg-error-400",
32 | busy: "bg-warning-500",
33 | };
34 |
35 | const Avatar: React.FC = ({
36 | src,
37 | alt = "User Avatar",
38 | size = "medium",
39 | status = "none",
40 | }) => {
41 | return (
42 |
43 | {/* Avatar Image */}
44 |
52 |
53 | {/* Status Indicator */}
54 | {status !== "none" && (
55 |
60 | )}
61 |
62 | );
63 | };
64 |
65 | export default Avatar;
66 |
--------------------------------------------------------------------------------
/src/components/ui/avatar/AvatarText.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | interface AvatarTextProps {
4 | name: string;
5 | className?: string;
6 | }
7 |
8 | const AvatarText: React.FC = ({ name, className = "" }) => {
9 | // Generate initials from name
10 | const initials = name
11 | .split(" ")
12 | .map((word) => word[0])
13 | .join("")
14 | .toUpperCase()
15 | .slice(0, 2);
16 |
17 | // Generate a consistent pastel color based on the name
18 | const getColorClass = (name: string) => {
19 | const colors = [
20 | "bg-brand-100 text-brand-600",
21 | "bg-pink-100 text-pink-600",
22 | "bg-cyan-100 text-cyan-600",
23 | "bg-orange-100 text-orange-600",
24 | "bg-green-100 text-green-600",
25 | "bg-purple-100 text-purple-600",
26 | "bg-yellow-100 text-yellow-600",
27 | "bg-error-100 text-error-600",
28 | ];
29 |
30 | const index = name
31 | .split("")
32 | .reduce((acc, char) => acc + char.charCodeAt(0), 0);
33 | return colors[index % colors.length];
34 | };
35 |
36 | return (
37 |
42 | {initials}
43 |
44 | );
45 | };
46 |
47 | export default AvatarText;
48 |
--------------------------------------------------------------------------------
/src/components/ui/button/Button.tsx:
--------------------------------------------------------------------------------
1 | import React, { ReactNode } from "react";
2 |
3 | interface ButtonProps {
4 | children: ReactNode; // Button text or content
5 | size?: "sm" | "md"; // Button size
6 | variant?: "primary" | "outline"; // Button variant
7 | startIcon?: ReactNode; // Icon before the text
8 | endIcon?: ReactNode; // Icon after the text
9 | onClick?: () => void; // Click handler
10 | disabled?: boolean; // Disabled state
11 | className?: string; // Disabled state
12 | }
13 |
14 | const Button: React.FC = ({
15 | children,
16 | size = "md",
17 | variant = "primary",
18 | startIcon,
19 | endIcon,
20 | onClick,
21 | className = "",
22 | disabled = false,
23 | }) => {
24 | // Size Classes
25 | const sizeClasses = {
26 | sm: "px-4 py-3 text-sm",
27 | md: "px-5 py-3.5 text-sm",
28 | };
29 |
30 | // Variant Classes
31 | const variantClasses = {
32 | primary:
33 | "bg-brand-500 text-white shadow-theme-xs hover:bg-brand-600 disabled:bg-brand-300",
34 | outline:
35 | "bg-white text-gray-700 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 dark:bg-gray-800 dark:text-gray-400 dark:ring-gray-700 dark:hover:bg-white/[0.03] dark:hover:text-gray-300",
36 | };
37 |
38 | return (
39 |
48 | {startIcon && {startIcon} }
49 | {children}
50 | {endIcon && {endIcon} }
51 |
52 | );
53 | };
54 |
55 | export default Button;
56 |
--------------------------------------------------------------------------------
/src/components/ui/dropdown/Dropdown.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import type React from "react";
3 | import { useEffect, useRef } from "react";
4 |
5 | interface DropdownProps {
6 | isOpen: boolean;
7 | onClose: () => void;
8 | children: React.ReactNode;
9 | className?: string;
10 | }
11 |
12 | export const Dropdown: React.FC = ({
13 | isOpen,
14 | onClose,
15 | children,
16 | className = "",
17 | }) => {
18 | const dropdownRef = useRef(null);
19 |
20 | useEffect(() => {
21 | const handleClickOutside = (event: MouseEvent) => {
22 | if (
23 | dropdownRef.current &&
24 | !dropdownRef.current.contains(event.target as Node) &&
25 | !(event.target as HTMLElement).closest('.dropdown-toggle')
26 | ) {
27 | onClose();
28 | }
29 | };
30 |
31 | document.addEventListener("mousedown", handleClickOutside);
32 | return () => {
33 | document.removeEventListener("mousedown", handleClickOutside);
34 | };
35 | }, [onClose]);
36 |
37 |
38 | if (!isOpen) return null;
39 |
40 | return (
41 |
45 | {children}
46 |
47 | );
48 | };
49 |
--------------------------------------------------------------------------------
/src/components/ui/dropdown/DropdownItem.tsx:
--------------------------------------------------------------------------------
1 | import type React from "react";
2 | import Link from "next/link";
3 |
4 | interface DropdownItemProps {
5 | tag?: "a" | "button";
6 | href?: string;
7 | onClick?: () => void;
8 | onItemClick?: () => void;
9 | baseClassName?: string;
10 | className?: string;
11 | children: React.ReactNode;
12 | }
13 |
14 | export const DropdownItem: React.FC = ({
15 | tag = "button",
16 | href,
17 | onClick,
18 | onItemClick,
19 | baseClassName = "block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900",
20 | className = "",
21 | children,
22 | }) => {
23 | const combinedClasses = `${baseClassName} ${className}`.trim();
24 |
25 | const handleClick = (event: React.MouseEvent) => {
26 | if (tag === "button") {
27 | event.preventDefault();
28 | }
29 | if (onClick) onClick();
30 | if (onItemClick) onItemClick();
31 | };
32 |
33 | if (tag === "a" && href) {
34 | return (
35 |
36 | {children}
37 |
38 | );
39 | }
40 |
41 | return (
42 |
43 | {children}
44 |
45 | );
46 | };
47 |
--------------------------------------------------------------------------------
/src/components/ui/images/ResponsiveImage.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import React from "react";
3 |
4 | export default function ResponsiveImage() {
5 | return (
6 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/ui/images/ThreeColumnImageGrid.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import React from "react";
3 |
4 | export default function ThreeColumnImageGrid() {
5 | return (
6 |
7 |
8 |
15 |
16 |
17 |
18 |
25 |
26 |
27 |
28 |
35 |
36 |
37 | );
38 | }
39 |
--------------------------------------------------------------------------------
/src/components/ui/images/TwoColumnImageGrid.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import React from "react";
3 |
4 | export default function TwoColumnImageGrid() {
5 | return (
6 |
7 |
8 |
15 |
16 |
17 |
18 |
25 |
26 |
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/src/components/ui/table/index.tsx:
--------------------------------------------------------------------------------
1 | import React, { ReactNode } from "react";
2 |
3 | // Props for Table
4 | interface TableProps {
5 | children: ReactNode; // Table content (thead, tbody, etc.)
6 | className?: string; // Optional className for styling
7 | }
8 |
9 | // Props for TableHeader
10 | interface TableHeaderProps {
11 | children: ReactNode; // Header row(s)
12 | className?: string; // Optional className for styling
13 | }
14 |
15 | // Props for TableBody
16 | interface TableBodyProps {
17 | children: ReactNode; // Body row(s)
18 | className?: string; // Optional className for styling
19 | }
20 |
21 | // Props for TableRow
22 | interface TableRowProps {
23 | children: ReactNode; // Cells (th or td)
24 | className?: string; // Optional className for styling
25 | }
26 |
27 | // Props for TableCell
28 | interface TableCellProps {
29 | children: ReactNode; // Cell content
30 | isHeader?: boolean; // If true, renders as , otherwise
31 | className?: string; // Optional className for styling
32 | }
33 |
34 | // Table Component
35 | const Table: React.FC = ({ children, className }) => {
36 | return ;
37 | };
38 |
39 | // TableHeader Component
40 | const TableHeader: React.FC = ({ children, className }) => {
41 | return {children} ;
42 | };
43 |
44 | // TableBody Component
45 | const TableBody: React.FC = ({ children, className }) => {
46 | return {children} ;
47 | };
48 |
49 | // TableRow Component
50 | const TableRow: React.FC = ({ children, className }) => {
51 | return {children} ;
52 | };
53 |
54 | // TableCell Component
55 | const TableCell: React.FC = ({
56 | children,
57 | isHeader = false,
58 | className,
59 | }) => {
60 | const CellTag = isHeader ? "th" : "td";
61 | return {children} ;
62 | };
63 |
64 | export { Table, TableHeader, TableBody, TableRow, TableCell };
65 |
--------------------------------------------------------------------------------
/src/components/ui/video/VideosExample.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import YouTubeEmbed from "./YouTubeEmbed";
3 | import ComponentCard from "@/components/common/ComponentCard";
4 |
5 | export default function VideosExample() {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/src/components/ui/video/YouTubeEmbed.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | type AspectRatio = "16:9" | "4:3" | "21:9" | "1:1";
4 |
5 | interface YouTubeEmbedProps {
6 | videoId: string;
7 | aspectRatio?: AspectRatio;
8 | title?: string;
9 | className?: string;
10 | }
11 |
12 | const YouTubeEmbed: React.FC = ({
13 | videoId,
14 | aspectRatio = "16:9",
15 | title = "YouTube video",
16 | className = "",
17 | }) => {
18 | const aspectRatioClass = {
19 | "16:9": "aspect-video",
20 | "4:3": "aspect-4/3",
21 | "21:9": "aspect-21/9",
22 | "1:1": "aspect-square",
23 | }[aspectRatio];
24 |
25 | return (
26 |
29 | VIDEO
37 |
38 | );
39 | };
40 |
41 | export default YouTubeEmbed;
42 |
--------------------------------------------------------------------------------
/src/components/videos/FourIsToThree.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function FourIsToThree() {
4 | return (
5 |
6 | VIDEO
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/videos/OneIsToOne.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function OneIsToOne() {
4 | return (
5 |
6 | VIDEO
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/videos/SixteenIsToNine.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function SixteenIsToNine() {
4 | return (
5 |
6 | VIDEO
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/videos/TwentyOneIsToNine.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function TwentyOneIsToNine() {
4 | return (
5 |
6 | VIDEO
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/context/ThemeContext.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import type React from "react";
4 | import { createContext, useState, useContext, useEffect } from "react";
5 |
6 | type Theme = "light" | "dark";
7 |
8 | type ThemeContextType = {
9 | theme: Theme;
10 | toggleTheme: () => void;
11 | };
12 |
13 | const ThemeContext = createContext(undefined);
14 |
15 | export const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({
16 | children,
17 | }) => {
18 | const [theme, setTheme] = useState("light");
19 | const [isInitialized, setIsInitialized] = useState(false);
20 |
21 | useEffect(() => {
22 | // This code will only run on the client side
23 | const savedTheme = localStorage.getItem("theme") as Theme | null;
24 | const initialTheme = savedTheme || "light"; // Default to light theme
25 |
26 | setTheme(initialTheme);
27 | setIsInitialized(true);
28 | }, []);
29 |
30 | useEffect(() => {
31 | if (isInitialized) {
32 | localStorage.setItem("theme", theme);
33 | if (theme === "dark") {
34 | document.documentElement.classList.add("dark");
35 | } else {
36 | document.documentElement.classList.remove("dark");
37 | }
38 | }
39 | }, [theme, isInitialized]);
40 |
41 | const toggleTheme = () => {
42 | setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));
43 | };
44 |
45 | return (
46 |
47 | {children}
48 |
49 | );
50 | };
51 |
52 | export const useTheme = () => {
53 | const context = useContext(ThemeContext);
54 | if (context === undefined) {
55 | throw new Error("useTheme must be used within a ThemeProvider");
56 | }
57 | return context;
58 | };
59 |
--------------------------------------------------------------------------------
/src/hooks/useGoBack.ts:
--------------------------------------------------------------------------------
1 | import { useRouter } from "next/navigation";
2 |
3 | const useGoBack = () => {
4 | const router = useRouter();
5 |
6 | const goBack = () => {
7 | if (window.history.length > 1) {
8 | router.back(); // Navigate to the previous route
9 | } else {
10 | router.push("/"); // Redirect to home if no history exists
11 | }
12 | };
13 |
14 | return goBack;
15 | };
16 |
17 | export default useGoBack;
18 |
--------------------------------------------------------------------------------
/src/hooks/useModal.ts:
--------------------------------------------------------------------------------
1 | "use client";
2 | import { useState, useCallback } from "react";
3 |
4 | export const useModal = (initialState: boolean = false) => {
5 | const [isOpen, setIsOpen] = useState(initialState);
6 |
7 | const openModal = useCallback(() => setIsOpen(true), []);
8 | const closeModal = useCallback(() => setIsOpen(false), []);
9 | const toggleModal = useCallback(() => setIsOpen((prev) => !prev), []);
10 |
11 | return { isOpen, openModal, closeModal, toggleModal };
12 | };
13 |
--------------------------------------------------------------------------------
/src/icons/alert.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/angle-down.svg:
--------------------------------------------------------------------------------
1 |
8 |
12 |
--------------------------------------------------------------------------------
/src/icons/angle-left.svg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/src/icons/angle-left.svg
--------------------------------------------------------------------------------
/src/icons/angle-right.svg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TailAdmin/free-nextjs-admin-dashboard/934d05cab5892f6e2d4fea974e186ddd1d0813fc/src/icons/angle-right.svg
--------------------------------------------------------------------------------
/src/icons/angle-up.svg:
--------------------------------------------------------------------------------
1 |
9 |
13 |
--------------------------------------------------------------------------------
/src/icons/arrow-down.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/arrow-right.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/arrow-up.svg:
--------------------------------------------------------------------------------
1 |
2 |
10 |
16 |
--------------------------------------------------------------------------------
/src/icons/audio.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/bell.svg:
--------------------------------------------------------------------------------
1 |
8 |
14 |
--------------------------------------------------------------------------------
/src/icons/bolt.svg:
--------------------------------------------------------------------------------
1 |
8 |
15 |
--------------------------------------------------------------------------------
/src/icons/box-cube.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/box-line.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/box.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/calendar.svg:
--------------------------------------------------------------------------------
1 |
7 |
13 |
--------------------------------------------------------------------------------
/src/icons/calender-line.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/icons/chat.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/icons/check-circle.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/check-line.svg:
--------------------------------------------------------------------------------
1 |
8 |
15 |
--------------------------------------------------------------------------------
/src/icons/chevron-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/icons/chevron-left.svg:
--------------------------------------------------------------------------------
1 |
9 |
16 |
--------------------------------------------------------------------------------
/src/icons/chevron-up.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/icons/close-line.svg:
--------------------------------------------------------------------------------
1 |
8 |
14 |
--------------------------------------------------------------------------------
/src/icons/close.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/copy.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/docs.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/dollar-line.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/download.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/envelope.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/eye-close.svg:
--------------------------------------------------------------------------------
1 |
9 |
14 |
--------------------------------------------------------------------------------
/src/icons/eye.svg:
--------------------------------------------------------------------------------
1 |
9 |
14 |
--------------------------------------------------------------------------------
/src/icons/file.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/folder.svg:
--------------------------------------------------------------------------------
1 |
9 |
13 |
--------------------------------------------------------------------------------
/src/icons/grid.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/horizontal-dots.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/info-hexa.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/info.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/list.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/lock.svg:
--------------------------------------------------------------------------------
1 |
9 |
13 |
19 |
--------------------------------------------------------------------------------
/src/icons/mail-line.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/more-dot.svg:
--------------------------------------------------------------------------------
1 |
8 |
14 |
--------------------------------------------------------------------------------
/src/icons/page.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/paper-plane.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/pencil.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/pie-chart.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/plug-in.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/plus.svg:
--------------------------------------------------------------------------------
1 |
8 |
14 |
--------------------------------------------------------------------------------
/src/icons/shooting-star.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/table.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/task-icon.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/task.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/icons/time.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/trash.svg:
--------------------------------------------------------------------------------
1 |
7 |
13 |
--------------------------------------------------------------------------------
/src/icons/user-circle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/icons/user-line.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/icons/videos.svg:
--------------------------------------------------------------------------------
1 |
9 |
15 |
--------------------------------------------------------------------------------
/src/layout/Backdrop.tsx:
--------------------------------------------------------------------------------
1 | import { useSidebar } from "@/context/SidebarContext";
2 | import React from "react";
3 |
4 | const Backdrop: React.FC = () => {
5 | const { isMobileOpen, toggleMobileSidebar } = useSidebar();
6 |
7 | if (!isMobileOpen) return null;
8 |
9 | return (
10 |
14 | );
15 | };
16 |
17 | export default Backdrop;
18 |
--------------------------------------------------------------------------------
/src/layout/SidebarWidget.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function SidebarWidget() {
4 | return (
5 |
9 |
10 | #1 Tailwind CSS Dashboard
11 |
12 |
13 | Leading Tailwind CSS Admin Template with 400+ UI Component and Pages.
14 |
15 |
21 | Upgrade To Pro
22 |
23 |
24 | );
25 | }
26 |
--------------------------------------------------------------------------------
/src/svg.d.ts:
--------------------------------------------------------------------------------
1 | // svg.d.ts
2 | declare module "*.svg" {
3 | import * as React from "react";
4 | export const ReactComponent: React.FunctionComponent<
5 | React.SVGProps & { title?: string }
6 | >;
7 | const src: string;
8 | export default src;
9 | }
10 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2017",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "noEmit": true,
9 | "esModuleInterop": true,
10 | "module": "esnext",
11 | "moduleResolution": "bundler",
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "jsx": "preserve",
15 | "incremental": true,
16 | "plugins": [
17 | {
18 | "name": "next"
19 | }
20 | ],
21 | "paths": {
22 | "@/*": ["./src/*"]
23 | }
24 | },
25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
26 | "exclude": ["node_modules"]
27 | }
28 |
--------------------------------------------------------------------------------