nextjs-starter-kit 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/PR_REQUEST_TEMPLATE.md +18 -0
- package/.github/workflows/pr_check.yml +38 -0
- package/.husky/pre-commit +1 -0
- package/.prettierignore +7 -0
- package/.prettierrc +9 -0
- package/README.md +165 -0
- package/components.json +21 -0
- package/eslint.config.mjs +42 -0
- package/jsconfig.json +7 -0
- package/lint-staged.config.js +6 -0
- package/next.config.mjs +6 -0
- package/package.json +72 -0
- package/postcss.config.mjs +5 -0
- package/src/animations/loader.js +81 -0
- package/src/app/(routes)/(home)/page.jsx +7 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/layout.js +81 -0
- package/src/app/not-found.jsx +19 -0
- package/src/app/robots.js +10 -0
- package/src/app/sitemap.js +10 -0
- package/src/assets/Logos/index.js +3 -0
- package/src/assets/index.js +5 -0
- package/src/components/ui/accordion.jsx +53 -0
- package/src/components/ui/alert-dialog.jsx +136 -0
- package/src/components/ui/alert.jsx +59 -0
- package/src/components/ui/avatar.jsx +44 -0
- package/src/components/ui/badge.jsx +40 -0
- package/src/components/ui/breadcrumb.jsx +96 -0
- package/src/components/ui/button.jsx +49 -0
- package/src/components/ui/calendar.jsx +221 -0
- package/src/components/ui/card.jsx +92 -0
- package/src/components/ui/carousel.jsx +217 -0
- package/src/components/ui/chart.jsx +332 -0
- package/src/components/ui/checkbox.jsx +29 -0
- package/src/components/ui/collapsible.jsx +27 -0
- package/src/components/ui/command.jsx +156 -0
- package/src/components/ui/container.jsx +18 -0
- package/src/components/ui/dialog.jsx +127 -0
- package/src/components/ui/drawer.jsx +114 -0
- package/src/components/ui/dropdown-menu.jsx +210 -0
- package/src/components/ui/form.jsx +140 -0
- package/src/components/ui/headings.jsx +34 -0
- package/src/components/ui/image.jsx +21 -0
- package/src/components/ui/input-otp.jsx +66 -0
- package/src/components/ui/input.jsx +21 -0
- package/src/components/ui/label.jsx +21 -0
- package/src/components/ui/pagination.jsx +105 -0
- package/src/components/ui/popover.jsx +42 -0
- package/src/components/ui/progress.jsx +27 -0
- package/src/components/ui/select.jsx +157 -0
- package/src/components/ui/separator.jsx +28 -0
- package/src/components/ui/sheet.jsx +117 -0
- package/src/components/ui/skeleton.jsx +13 -0
- package/src/components/ui/slider.jsx +63 -0
- package/src/components/ui/sonner.jsx +23 -0
- package/src/components/ui/switch.jsx +28 -0
- package/src/components/ui/table.jsx +113 -0
- package/src/components/ui/tabs.jsx +54 -0
- package/src/components/ui/textarea.jsx +18 -0
- package/src/components/ui/tooltip.jsx +49 -0
- package/src/lib/axios.js +8 -0
- package/src/lib/queryClient.js +11 -0
- package/src/lib/utils.js +6 -0
- package/src/providers/QueryProvider.jsx +15 -0
- package/src/shared/icons.js +308 -0
- package/src/styles/fonts.js +30 -0
- package/src/styles/globals.css +124 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
## π Whatβs changing?
|
|
2
|
+
|
|
3
|
+
<!-- Briefly explain what this PR does -->
|
|
4
|
+
|
|
5
|
+
## β
Checklist
|
|
6
|
+
|
|
7
|
+
- [ ] I tested this change locally
|
|
8
|
+
- [ ] I updated related docs (if needed)
|
|
9
|
+
- [ ] This PR is rebased on the latest base branch
|
|
10
|
+
- [ ] This PR is ready to squash & merge
|
|
11
|
+
|
|
12
|
+
## π Deployment notes
|
|
13
|
+
|
|
14
|
+
<!-- Optional: Add notes if anything special is needed during deploy -->
|
|
15
|
+
|
|
16
|
+
## π― Related Issues or Cards
|
|
17
|
+
|
|
18
|
+
Closes #
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: PR Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- development
|
|
7
|
+
- testing
|
|
8
|
+
- production
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
lint-and-build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Use Node
|
|
19
|
+
uses: actions/setup-node@v4
|
|
20
|
+
with:
|
|
21
|
+
node-version: 20
|
|
22
|
+
|
|
23
|
+
- name: Enable Corepack & Install
|
|
24
|
+
run: |
|
|
25
|
+
corepack enable
|
|
26
|
+
pnpm install
|
|
27
|
+
|
|
28
|
+
- name: Lint
|
|
29
|
+
run: pnpm lint
|
|
30
|
+
|
|
31
|
+
- name: Format Check
|
|
32
|
+
run: pnpm format-check
|
|
33
|
+
|
|
34
|
+
- name: Format
|
|
35
|
+
run: pnpm format
|
|
36
|
+
|
|
37
|
+
- name: Build
|
|
38
|
+
run: pnpm build
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pnpm lint-staged
|
package/.prettierignore
ADDED
package/.prettierrc
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Next.js Starter
|
|
2
|
+
|
|
3
|
+
[](https://nextjs.org/)
|
|
4
|
+
[](https://pnpm.io/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://prettier.io/)
|
|
7
|
+
[](https://eslint.org/)
|
|
8
|
+
|
|
9
|
+
> A modern Next.js starter template with modular structure, reusable UI components, and best practices for scalable web development.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
- **Next.js 15.5.0** with App Router
|
|
16
|
+
- Modular folder structure (`src/animations`, `src/assets`, `src/components`, etc.)
|
|
17
|
+
- Reusable UI components (Accordion, Button, Card, Table, etc.)
|
|
18
|
+
- Context, hooks, and helpers for state management and utilities
|
|
19
|
+
- Axios setup for API requests
|
|
20
|
+
- QueryClient for data fetching and caching
|
|
21
|
+
- Global styles and custom fonts
|
|
22
|
+
- Linting and formatting with ESLint, Prettier, and lint-staged
|
|
23
|
+
- PostCSS for advanced CSS processing
|
|
24
|
+
- Husky for Git hooks
|
|
25
|
+
- Tailwind CSS for utility-first styling
|
|
26
|
+
- Prettier and Prettier-plugin-tailwindcss for code formatting
|
|
27
|
+
- Embla Carousel, Recharts, Lucide, Tabler Icons, and more for UI/UX enhancements
|
|
28
|
+
- Zod for schema validation
|
|
29
|
+
- React Query for data fetching
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Getting Started
|
|
34
|
+
|
|
35
|
+
### Prerequisites
|
|
36
|
+
|
|
37
|
+
- Node.js 22+
|
|
38
|
+
- pnpm (recommended) or npm/yarn
|
|
39
|
+
|
|
40
|
+
### Installation
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pnpm install
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Running the Development Server
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pnpm dev
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Open [http://localhost:3000](http://localhost:3000) in your browser.
|
|
53
|
+
|
|
54
|
+
### Building for Production
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pnpm build
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Project Structure
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
src/
|
|
66
|
+
animations/ # Animation utilities
|
|
67
|
+
app/ # Next.js app router structure
|
|
68
|
+
(routes)/ # Route groups
|
|
69
|
+
(home)/ # Home page
|
|
70
|
+
assets/ # Static assets and logos
|
|
71
|
+
components/ # UI components, constants, context, helpers, hooks, lib, providers, schema, shared, styles, utils, validations
|
|
72
|
+
ui/ # Reusable UI elements
|
|
73
|
+
constants/ # App-wide constants
|
|
74
|
+
context/ # React context providers
|
|
75
|
+
helpers/ # Utility functions
|
|
76
|
+
hooks/ # Custom React hooks
|
|
77
|
+
lib/ # Libraries (axios, queryClient, utils)
|
|
78
|
+
providers/ # Context providers
|
|
79
|
+
schema/ # Validation schemas
|
|
80
|
+
shared/ # Shared resources (icons, etc.)
|
|
81
|
+
styles/ # Fonts and global styles
|
|
82
|
+
utils/ # Utility functions
|
|
83
|
+
validations/ # Validation logic
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Scripts
|
|
89
|
+
|
|
90
|
+
- `pnpm dev` β Start development server
|
|
91
|
+
- `pnpm build` β Run lint, format, and build for production
|
|
92
|
+
- `pnpm lint` β Run ESLint
|
|
93
|
+
- `pnpm format` β Format code with Prettier
|
|
94
|
+
- `pnpm check-format` β Check code formatting
|
|
95
|
+
- `pnpm prepare` β Prepare Husky hooks
|
|
96
|
+
- `pnpm start` β Start production server
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Dependencies
|
|
101
|
+
|
|
102
|
+
### Main
|
|
103
|
+
|
|
104
|
+
- next@15.5.0
|
|
105
|
+
- react@19.1.0, react-dom@19.1.0
|
|
106
|
+
- axios
|
|
107
|
+
- @tanstack/react-query, @tanstack/react-query-devtools
|
|
108
|
+
- @radix-ui/react-\* (Accordion, Dialog, Tabs, etc.)
|
|
109
|
+
- @tabler/icons-react, lucide-react
|
|
110
|
+
- embla-carousel-react
|
|
111
|
+
- recharts
|
|
112
|
+
- zod
|
|
113
|
+
- input-otp
|
|
114
|
+
- sonner
|
|
115
|
+
- tailwind-merge
|
|
116
|
+
- next-themes
|
|
117
|
+
- date-fns
|
|
118
|
+
- class-variance-authority, clsx
|
|
119
|
+
- vaul
|
|
120
|
+
|
|
121
|
+
### Dev
|
|
122
|
+
|
|
123
|
+
- eslint, eslint-config-next, eslint-config-prettier, eslint-plugin-react-hooks, @tanstack/eslint-plugin-query, @eslint/eslintrc
|
|
124
|
+
- prettier, prettier-plugin-tailwindcss
|
|
125
|
+
- husky
|
|
126
|
+
- lint-staged
|
|
127
|
+
- tailwindcss, @tailwindcss/postcss, tw-animate-css
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Linting & Formatting
|
|
132
|
+
|
|
133
|
+
- ESLint config: `eslint.config.mjs`
|
|
134
|
+
- Prettier: integrated via lint-staged
|
|
135
|
+
- Lint-staged: `lint-staged.config.js`
|
|
136
|
+
- Husky for pre-commit hooks
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Customization
|
|
141
|
+
|
|
142
|
+
- Add new UI components in `src/components/ui/`
|
|
143
|
+
- Add new routes in `src/app/(routes)/`
|
|
144
|
+
- Update global styles in `src/components/styles/globals.css`
|
|
145
|
+
- Configure Axios in `src/components/lib/axios.js`
|
|
146
|
+
- Add/modify validation schemas in `src/components/schema/`
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Author
|
|
151
|
+
|
|
152
|
+
**Harshit Ostwal**
|
|
153
|
+
[codewithharshitjain@gmail.com](mailto:codewithharshitjain@gmail.com)
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## License
|
|
158
|
+
|
|
159
|
+
This project is licensed under the MIT License.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Contributing
|
|
164
|
+
|
|
165
|
+
Pull requests, issues, and suggestions are welcome!
|
package/components.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "new-york",
|
|
4
|
+
"rsc": true,
|
|
5
|
+
"tsx": false,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "@/styles/globals.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"aliases": {
|
|
14
|
+
"components": "@/components",
|
|
15
|
+
"utils": "@/lib/utils",
|
|
16
|
+
"ui": "@/components/ui",
|
|
17
|
+
"lib": "@/lib",
|
|
18
|
+
"hooks": "@/hooks"
|
|
19
|
+
},
|
|
20
|
+
"iconLibrary": "lucide"
|
|
21
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
{
|
|
14
|
+
ignores: [
|
|
15
|
+
"node_modules/**",
|
|
16
|
+
".next/**",
|
|
17
|
+
"out/**",
|
|
18
|
+
"build/**",
|
|
19
|
+
"next-env.d.ts",
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
...compat.extends("next/core-web-vitals", "prettier"),
|
|
23
|
+
{
|
|
24
|
+
files: ["**/*.{js,jsx}"],
|
|
25
|
+
languageOptions: {
|
|
26
|
+
parserOptions: {
|
|
27
|
+
ecmaVersion: 2022,
|
|
28
|
+
sourceType: "module",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
rules: {
|
|
32
|
+
"no-unused-vars": "warn",
|
|
33
|
+
"no-console": "warn",
|
|
34
|
+
"@next/next/no-document-import-in-page": "off",
|
|
35
|
+
"react-hooks/rules-of-hooks": "error",
|
|
36
|
+
"react-hooks/exhaustive-deps": "warn",
|
|
37
|
+
"@typescript-eslint/no-unused-vars": "off",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
export default eslintConfig;
|
package/jsconfig.json
ADDED
package/next.config.mjs
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nextjs-starter-kit",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "next dev --turbopack",
|
|
7
|
+
"build": "pnpm lint && pnpm format && next build --turbopack",
|
|
8
|
+
"start": "next start",
|
|
9
|
+
"lint": "eslint",
|
|
10
|
+
"check-format": "prettier --check .",
|
|
11
|
+
"format": "prettier --write .",
|
|
12
|
+
"prepare": "husky"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@hookform/resolvers": "^5.2.1",
|
|
16
|
+
"@next/third-parties": "^15.5.0",
|
|
17
|
+
"@radix-ui/react-accordion": "^1.2.12",
|
|
18
|
+
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
19
|
+
"@radix-ui/react-avatar": "^1.1.10",
|
|
20
|
+
"@radix-ui/react-checkbox": "^1.3.3",
|
|
21
|
+
"@radix-ui/react-collapsible": "^1.1.12",
|
|
22
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
23
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
24
|
+
"@radix-ui/react-label": "^2.1.7",
|
|
25
|
+
"@radix-ui/react-popover": "^1.1.15",
|
|
26
|
+
"@radix-ui/react-progress": "^1.1.7",
|
|
27
|
+
"@radix-ui/react-select": "^2.2.6",
|
|
28
|
+
"@radix-ui/react-separator": "^1.1.7",
|
|
29
|
+
"@radix-ui/react-slider": "^1.3.6",
|
|
30
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
31
|
+
"@radix-ui/react-switch": "^1.2.6",
|
|
32
|
+
"@radix-ui/react-tabs": "^1.1.13",
|
|
33
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
34
|
+
"@tabler/icons-react": "^3.34.1",
|
|
35
|
+
"@tanstack/react-query": "^5.85.5",
|
|
36
|
+
"@tanstack/react-query-devtools": "^5.85.5",
|
|
37
|
+
"axios": "^1.11.0",
|
|
38
|
+
"class-variance-authority": "^0.7.1",
|
|
39
|
+
"clsx": "^2.1.1",
|
|
40
|
+
"cmdk": "^1.1.1",
|
|
41
|
+
"date-fns": "^4.1.0",
|
|
42
|
+
"embla-carousel-react": "^8.6.0",
|
|
43
|
+
"input-otp": "^1.4.2",
|
|
44
|
+
"lucide-react": "^0.541.0",
|
|
45
|
+
"next": "15.5.0",
|
|
46
|
+
"next-themes": "^0.4.6",
|
|
47
|
+
"react": "19.1.0",
|
|
48
|
+
"react-day-picker": "^9.9.0",
|
|
49
|
+
"react-dom": "19.1.0",
|
|
50
|
+
"react-hook-form": "^7.62.0",
|
|
51
|
+
"recharts": "2.15.4",
|
|
52
|
+
"sonner": "^2.0.7",
|
|
53
|
+
"tailwind-merge": "^3.3.1",
|
|
54
|
+
"vaul": "^1.1.2",
|
|
55
|
+
"zod": "^4.0.17"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@eslint/eslintrc": "^3",
|
|
59
|
+
"@tailwindcss/postcss": "^0.6.14",
|
|
60
|
+
"@tanstack/eslint-plugin-query": "^5.83.1",
|
|
61
|
+
"eslint": "^9",
|
|
62
|
+
"eslint-config-next": "15.5.0",
|
|
63
|
+
"eslint-config-prettier": "^10.1.8",
|
|
64
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
65
|
+
"husky": "^9.1.7",
|
|
66
|
+
"lint-staged": "^16.1.5",
|
|
67
|
+
"prettier": "^3.6.2",
|
|
68
|
+
"prettier-plugin-tailwindcss": "^0.6.14",
|
|
69
|
+
"tailwindcss": "^4",
|
|
70
|
+
"tw-animate-css": "^1.3.7"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import gsap from "gsap";
|
|
2
|
+
|
|
3
|
+
export function LoaderAnimation() {
|
|
4
|
+
const tl = gsap.timeline();
|
|
5
|
+
|
|
6
|
+
tl.set("#loader", {
|
|
7
|
+
"--gradient-opacity": 0,
|
|
8
|
+
background: `linear-gradient(to right,
|
|
9
|
+
rgba(243, 24, 17, var(--gradient-opacity, 0)),
|
|
10
|
+
rgba(250, 240, 48, var(--gradient-opacity, 0)),
|
|
11
|
+
rgba(255, 255, 255, var(--gradient-opacity, 0)),
|
|
12
|
+
rgba(6, 144, 36, var(--gradient-opacity, 0)),
|
|
13
|
+
rgba(15, 45, 202, var(--gradient-opacity, 0))
|
|
14
|
+
), black`,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
tl.fromTo(
|
|
18
|
+
"#loader-heading",
|
|
19
|
+
{
|
|
20
|
+
visibility: "hidden",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
visibility: "visible",
|
|
24
|
+
display: "flex",
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
tl.fromTo(
|
|
29
|
+
"#loader-heading span",
|
|
30
|
+
{
|
|
31
|
+
y: -25,
|
|
32
|
+
opacity: 0,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
opacity: 1,
|
|
36
|
+
stagger: 0.12,
|
|
37
|
+
duration: 1,
|
|
38
|
+
delay: 0.5,
|
|
39
|
+
y: 0,
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
tl.to("#loader-heading span", {
|
|
44
|
+
y: -25,
|
|
45
|
+
stagger: 0.12,
|
|
46
|
+
duration: 1,
|
|
47
|
+
opacity: 0,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
tl.set("#loader", {
|
|
51
|
+
background: `linear-gradient(to right,
|
|
52
|
+
rgba(243, 24, 17, var(--gradient-opacity, 0)),
|
|
53
|
+
rgba(250, 240, 48, var(--gradient-opacity, 0)),
|
|
54
|
+
rgba(255, 255, 255, var(--gradient-opacity, 0)),
|
|
55
|
+
rgba(6, 144, 36, var(--gradient-opacity, 0)),
|
|
56
|
+
rgba(15, 45, 202, var(--gradient-opacity, 0))
|
|
57
|
+
), white`,
|
|
58
|
+
"--gradient-opacity": 1,
|
|
59
|
+
duration: 0.5,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
tl.fromTo(
|
|
63
|
+
"#logo",
|
|
64
|
+
{
|
|
65
|
+
visibility: "hidden",
|
|
66
|
+
scale: 1.05,
|
|
67
|
+
filter: "blur(10px)",
|
|
68
|
+
opacity: 0,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
visibility: "visible",
|
|
72
|
+
display: "flex",
|
|
73
|
+
scale: 1,
|
|
74
|
+
opacity: 1,
|
|
75
|
+
duration: 0.5,
|
|
76
|
+
filter: "blur(0px)",
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
return tl;
|
|
81
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Toaster } from "@/components/ui/sonner";
|
|
2
|
+
import { cn } from "@/lib/utils";
|
|
3
|
+
import { QueryProvider } from "@/providers/QueryProvider";
|
|
4
|
+
import { manrope, figtree, inter } from "@/styles/fonts";
|
|
5
|
+
import "@/styles/globals.css";
|
|
6
|
+
import { GoogleAnalytics, GoogleTagManager } from "@next/third-parties/google";
|
|
7
|
+
|
|
8
|
+
// export const metadata = {
|
|
9
|
+
// title: {
|
|
10
|
+
// default: "Next JS Starter",
|
|
11
|
+
// template: "%s | Next JS Starter",
|
|
12
|
+
// },
|
|
13
|
+
// description: "",
|
|
14
|
+
// keywords: [],
|
|
15
|
+
// metadataBase: new URL(""),
|
|
16
|
+
// alternates: {
|
|
17
|
+
// canonical: "0",
|
|
18
|
+
// },
|
|
19
|
+
// openGraph: {
|
|
20
|
+
// title: "",
|
|
21
|
+
// description: "",
|
|
22
|
+
// url: "0",
|
|
23
|
+
// siteName: "0",
|
|
24
|
+
// locale: "en_US",
|
|
25
|
+
// type: "website",
|
|
26
|
+
// images: [
|
|
27
|
+
// {
|
|
28
|
+
// url: "0",
|
|
29
|
+
// width: 0,
|
|
30
|
+
// height: 0,
|
|
31
|
+
// alt: "",
|
|
32
|
+
// },
|
|
33
|
+
// ],
|
|
34
|
+
// },
|
|
35
|
+
// twitter: {
|
|
36
|
+
// card: "",
|
|
37
|
+
// title: "",
|
|
38
|
+
// description: "",
|
|
39
|
+
// images: [
|
|
40
|
+
// {
|
|
41
|
+
// url: "",
|
|
42
|
+
// width: 0,
|
|
43
|
+
// height: 0,
|
|
44
|
+
// alt: "",
|
|
45
|
+
// },
|
|
46
|
+
// ],
|
|
47
|
+
// },
|
|
48
|
+
// icons: {
|
|
49
|
+
// icon: "/favicon.ico",
|
|
50
|
+
// apple: "/favicon.ico",
|
|
51
|
+
// },
|
|
52
|
+
// };
|
|
53
|
+
|
|
54
|
+
export default function RootLayout({ children }) {
|
|
55
|
+
return (
|
|
56
|
+
<html lang="en" suppressHydrationWarning>
|
|
57
|
+
<GoogleTagManager gtmId="" />
|
|
58
|
+
<GoogleAnalytics gaId="" />
|
|
59
|
+
|
|
60
|
+
<body
|
|
61
|
+
className={cn(
|
|
62
|
+
manrope.variable,
|
|
63
|
+
figtree.variable,
|
|
64
|
+
inter.variable,
|
|
65
|
+
"font-Manrope tracking-tighter antialiased"
|
|
66
|
+
)}
|
|
67
|
+
>
|
|
68
|
+
<QueryProvider>{children}</QueryProvider>
|
|
69
|
+
<Toaster
|
|
70
|
+
richColors
|
|
71
|
+
theme="light"
|
|
72
|
+
closeButton
|
|
73
|
+
expand
|
|
74
|
+
position="top-right"
|
|
75
|
+
dir="auto"
|
|
76
|
+
gap={20}
|
|
77
|
+
/>
|
|
78
|
+
</body>
|
|
79
|
+
</html>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Button } from "@/components/ui/button";
|
|
2
|
+
import Container from "@/components/ui/container";
|
|
3
|
+
import { Heading } from "@/components/ui/headings";
|
|
4
|
+
import Link from "next/link";
|
|
5
|
+
|
|
6
|
+
export default function NotFound() {
|
|
7
|
+
return (
|
|
8
|
+
<Container
|
|
9
|
+
className={
|
|
10
|
+
"flex h-screen flex-col items-center justify-center gap-4"
|
|
11
|
+
}
|
|
12
|
+
>
|
|
13
|
+
<Heading size="h4">404 - Page Not Found</Heading>
|
|
14
|
+
<Link href={"/"}>
|
|
15
|
+
<Button>Go Back</Button>
|
|
16
|
+
</Link>
|
|
17
|
+
</Container>
|
|
18
|
+
);
|
|
19
|
+
}
|