├── .eslintrc.json
├── .gitignore
├── .vscode
└── settings.json
├── README.md
├── next.config.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── music
│ └── audio.mp3
├── next.svg
├── thirteen.svg
└── vercel.svg
├── src
├── app
│ ├── api
│ │ └── hello
│ │ │ └── route.ts
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx
├── assets
│ ├── effects
│ │ └── stars-universe.gif
│ ├── icons
│ │ ├── close.png
│ │ ├── directory.ico
│ │ ├── folder.png
│ │ ├── ludmila-abl.png
│ │ ├── maxify.png
│ │ ├── minify.png
│ │ ├── notepad.ico
│ │ ├── volume-off.png
│ │ ├── volume-on.png
│ │ └── win95-logo.ico
│ └── images
│ │ └── athena-statue.png
├── components
│ ├── BackgroundElements
│ │ └── BackgroundElements.tsx
│ ├── DraggableArea
│ │ └── DraggableArea.tsx
│ ├── FilePreview
│ │ └── FilePreview.tsx
│ ├── SystemProperties
│ │ └── SystemProperties.tsx
│ └── Taskbar
│ │ ├── NotificationArea
│ │ ├── NotificationArea.tsx
│ │ └── VolumeSlider
│ │ │ └── VolumeSlider.tsx
│ │ ├── StartMenu
│ │ └── StartMenu.tsx
│ │ └── Taskbar.tsx
└── data
│ └── mock.ts
├── tailwind.config.js
└── 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 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 | .pnpm-debug.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "typescript.tsdk": "node_modules\\typescript\\lib",
3 | "typescript.enablePromptUseWorkspaceTsdk": true
4 | }
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Please give this repo a ⭐ if you like it
2 |
3 | 
4 | 
5 |
6 |
7 | Click to unmute and listen to Rondo Alla Turca.
8 |
9 | 
10 |
11 |
12 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
13 |
14 | ## Getting Started
15 |
16 | First, run the development server:
17 |
18 | ```bash
19 | npm run dev
20 | # or
21 | yarn dev
22 | # or
23 | pnpm dev
24 | ```
25 |
26 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
27 |
28 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
29 |
30 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
31 |
32 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
33 |
34 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
35 |
36 | ## Learn More
37 |
38 | To learn more about Next.js, take a look at the following resources:
39 |
40 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
41 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
42 |
43 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
44 |
45 | ## Deploy on Vercel
46 |
47 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
48 |
49 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
50 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | experimental: {
4 | appDir: true,
5 | },
6 | }
7 |
8 | module.exports = nextConfig
9 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mila-dev",
3 | "version": "0.1.0",
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 | "@types/node": "18.15.3",
13 | "@types/react": "18.0.28",
14 | "@types/react-dom": "18.0.11",
15 | "@types/react-slider": "^1.3.1",
16 | "@types/react-sound": "^1.2.3",
17 | "eslint": "8.36.0",
18 | "eslint-config-next": "13.2.4",
19 | "next": "13.2.4",
20 | "react": "18.2.0",
21 | "react-dom": "18.2.0",
22 | "react-draggable": "^4.4.5",
23 | "react-markdown": "^8.0.5",
24 | "react-slider": "^2.0.4",
25 | "react-sound": "^1.2.0",
26 | "react-timer-hook": "^3.0.5",
27 | "remark-gfm": "^3.0.1",
28 | "typescript": "4.9.5"
29 | },
30 | "devDependencies": {
31 | "autoprefixer": "^10.4.14",
32 | "postcss": "^8.4.21",
33 | "tailwindcss": "^3.2.7"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/music/audio.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/public/music/audio.mp3
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/thirteen.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/api/hello/route.ts:
--------------------------------------------------------------------------------
1 | export async function GET(request: Request) {
2 | return new Response('Hello, Next.js!')
3 | }
4 |
--------------------------------------------------------------------------------
/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/app/favicon.ico
--------------------------------------------------------------------------------
/src/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | #react-markdown h1 {
7 | @apply text-black w-fit px-2;
8 | width: fit-content;
9 | background-color: theme('colors.neon-yellow');
10 | }
11 | #react-markdown a {
12 | @apply underline;
13 | color: theme('colors.neon-yellow');
14 | overflow-wrap: break-word;
15 | }
16 | #react-markdown pre {
17 | @apply whitespace-pre-line;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import './globals.css';
2 | import { Inconsolata } from 'next/font/google';
3 | import { PropsWithChildren } from 'react';
4 |
5 | const inconsolata = Inconsolata({ subsets: ['latin'] })
6 |
7 | export const metadata = {
8 | title: 'Full-stack developer Ludmila A.',
9 | description: 'My recreation of https://zach.dev website.',
10 | }
11 |
12 | export default function RootLayout({
13 | children,
14 | } : PropsWithChildren) {
15 | return (
16 |
17 |
18 | {children}
19 |
20 |
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/src/app/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import './globals.css';
4 | import { Inconsolata } from 'next/font/google';
5 | import { useState, Fragment } from 'react';
6 | import BackgroundElements from '@/components/BackgroundElements/BackgroundElements';
7 | import Taskbar from '@/components/Taskbar/Taskbar';
8 | import DraggableArea from '@/components/DraggableArea/DraggableArea';
9 | import SystemProperties from '@/components/SystemProperties/SystemProperties';
10 | import FilePreview from '@/components/FilePreview/FilePreview';
11 | import { WindowsFile, availableFiles, initialOpenedFiles } from '@/data/mock';
12 |
13 | export default function Home() {
14 | const [openedFiles, setOpenedFiles] = useState>(initialOpenedFiles);
15 | return (
16 |
17 |
18 |
19 | {openedFiles.map(
20 | (openedFile : WindowsFile, index : number) =>
21 |
22 | {
23 | const newOpenedFiles = [...openedFiles];
24 | const updatedFile = {...openedFile, isMaxified: !openedFile.isMaxified};
25 | newOpenedFiles.splice(index, 1, updatedFile);
26 | setOpenedFiles(newOpenedFiles);
27 | }}
28 | onClose={() => {
29 | const newOpenedFiles = [...openedFiles];
30 | newOpenedFiles.splice(index, 1);
31 | setOpenedFiles(newOpenedFiles);
32 | }}
33 | onMinify={() => {
34 | const newOpenedFiles = [...openedFiles];
35 | const updatedFile = {...openedFile, isToggled: !openedFile.isToggled};
36 | newOpenedFiles.splice(index, 1, updatedFile);
37 | setOpenedFiles(newOpenedFiles);
38 | }}
39 | key={openedFile.name} file={openedFile} />
40 |
41 | )}
42 |
43 |
44 |
45 |
46 | )
47 | }
48 |
--------------------------------------------------------------------------------
/src/assets/effects/stars-universe.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/effects/stars-universe.gif
--------------------------------------------------------------------------------
/src/assets/icons/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/close.png
--------------------------------------------------------------------------------
/src/assets/icons/directory.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/directory.ico
--------------------------------------------------------------------------------
/src/assets/icons/folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/folder.png
--------------------------------------------------------------------------------
/src/assets/icons/ludmila-abl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/ludmila-abl.png
--------------------------------------------------------------------------------
/src/assets/icons/maxify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/maxify.png
--------------------------------------------------------------------------------
/src/assets/icons/minify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/minify.png
--------------------------------------------------------------------------------
/src/assets/icons/notepad.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/notepad.ico
--------------------------------------------------------------------------------
/src/assets/icons/volume-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/volume-off.png
--------------------------------------------------------------------------------
/src/assets/icons/volume-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/volume-on.png
--------------------------------------------------------------------------------
/src/assets/icons/win95-logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/icons/win95-logo.ico
--------------------------------------------------------------------------------
/src/assets/images/athena-statue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milaabl/zack-dev-recreation--nextjs-typescript/ccffa7e24f50de0caa0e392d6ab1dfe8cdd2e864/src/assets/images/athena-statue.png
--------------------------------------------------------------------------------
/src/components/BackgroundElements/BackgroundElements.tsx:
--------------------------------------------------------------------------------
1 | import Image from 'next/image';
2 | import athenaStatueImg from '@/assets/images/athena-statue.png';
3 | import starsImg from '@/assets/effects/stars-universe.gif';
4 |
5 |
6 | export default function BackgroundElements () {
7 | return
20 | };
21 |
--------------------------------------------------------------------------------
/src/components/DraggableArea/DraggableArea.tsx:
--------------------------------------------------------------------------------
1 | import { PropsWithChildren } from 'react';
2 | import Draggable from 'react-draggable';
3 |
4 | export default function DraggableArea ({
5 | children
6 | } : PropsWithChildren) {
7 | return
8 | {children}
9 |
10 |
11 | };
12 |
--------------------------------------------------------------------------------
/src/components/FilePreview/FilePreview.tsx:
--------------------------------------------------------------------------------
1 | import remarkGfm from 'remark-gfm';
2 | import { WindowsFile } from '@/data/mock';
3 | import ReactMarkdown from 'react-markdown';
4 | import minifyIcon from '@/assets/icons/minify.png';
5 | import maxifyIcon from '@/assets/icons/maxify.png';
6 | import closeIcon from '@/assets/icons/close.png';
7 | import Image from 'next/image';
8 |
9 | interface FileEditorProps {
10 | file: WindowsFile;
11 | onClose: () => void;
12 | onMinify: () => void;
13 | onMaxify: () => void;
14 | };
15 |
16 | export default function FileEditor ({
17 | file,
18 | onClose,
19 | onMinify,
20 | onMaxify
21 | } : FileEditorProps) {
22 | return
23 |
24 |
25 |
26 | {file.location}
27 |
28 |
29 |
32 |
35 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | {file.markdownContents}
45 |
46 |
47 |
48 |
49 | };
50 |
--------------------------------------------------------------------------------
/src/components/SystemProperties/SystemProperties.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { Fragment, useState } from 'react';
4 | import folderIcon from '@/assets/icons/folder.png';
5 | import closeIcon from '@/assets/icons/close.png';
6 | import ludmilaAblIcon from '@/assets/icons/ludmila-abl.png';
7 | import Image from 'next/image';
8 |
9 | export default function SystemProperties () {
10 | const [isOpen, setIsOpen] = useState(false);
11 | const closeModal = () => setIsOpen(val => !val);
12 | return
13 | setIsOpen((val : boolean) => !val)} width={96} height={96} src={folderIcon.src} alt="System properties" />
14 |
15 | System properties
16 |
17 |
18 |
19 |
Mila A
20 |
This is a developer portfolio website
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | };
30 |
--------------------------------------------------------------------------------
/src/components/Taskbar/NotificationArea/NotificationArea.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { useState } from 'react';
4 | import { useTime } from 'react-timer-hook';
5 | import volumeOnIcon from '@/assets/icons/volume-on.png';
6 | import volumeOffIcon from '@/assets/icons/volume-off.png';
7 | import ReactSound from 'react-sound';
8 | import VolumeSlider from '@/components/Taskbar/NotificationArea/VolumeSlider/VolumeSlider';
9 | import Image from 'next/image';
10 |
11 | export default function NotificationArea () {
12 | const [volume, setVolume] = useState(0);
13 | const [playStatus, setPlayStatus] = useState<'PLAYING' | 'STOPPED' | 'PAUSED'>('STOPPED');
14 | const {
15 | minutes,
16 | hours,
17 | ampm
18 | } = useTime({
19 | format: '12-hour'
20 | });
21 |
22 | const [isOpen, setIsOpen] = useState(false);
23 | return {
24 | playStatus !== 'PLAYING' && setPlayStatus('PLAYING');
25 | }} className="ml-auto border-2 border-windows-grey border-b-white h-full items-center gap-2 px-1 flex">
26 |
27 |
32 |
33 |
34 |
{hours === 0 ? '00' : hours < 10 ? '0' + hours : hours}:{minutes === 0 ? '00' : minutes < 10 ? '0' + minutes : minutes} {ampm}
35 |
;
36 | };
37 |
--------------------------------------------------------------------------------
/src/components/Taskbar/NotificationArea/VolumeSlider/VolumeSlider.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import React from 'react';
4 | import ReactSlider from 'react-slider';
5 |
6 | interface VolumeSliderProps {
7 | volume: number;
8 | setVolume: React.Dispatch>;
9 | isOpen: boolean;
10 | };
11 |
12 | export default function VolumeSlider ({
13 | volume,
14 | setVolume,
15 | isOpen
16 | } : VolumeSliderProps) {
17 | return isOpen ?
18 |
Volume
19 |
20 |
24 |
{
28 | setVolume(value);
29 | }}
30 | invert
31 | renderThumb={(props, state) => }
32 | renderTrack={(props, state) => props.key === 'track-0' ? : }
33 | orientation="vertical"
34 | pearling
35 | minDistance={1}
36 | />
37 |
38 |
39 | {
40 | setVolume((value : number) => value <= 0 ? 100 : 0);
41 | }} />
42 | Mute
43 |
44 |
: null;
45 | };
46 |
--------------------------------------------------------------------------------
/src/components/Taskbar/StartMenu/StartMenu.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import startMenuIcon from '@/assets/icons/win95-logo.ico';
3 | import Image from 'next/image';
4 | import { WindowsFile } from '@/data/mock';
5 |
6 | interface StartMenuProps {
7 | openedFiles: Array;
8 | availableFiles: Array;
9 | setOpenedFiles: React.Dispatch>>;
10 | };
11 |
12 | export default function StartMenu ({
13 | availableFiles,
14 | setOpenedFiles,
15 | openedFiles
16 | }: StartMenuProps) {
17 | const [isOpen, setIsOpen] = useState(false);
18 | return ;
32 | };
33 |
--------------------------------------------------------------------------------
/src/components/Taskbar/Taskbar.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import StartMenu from '@/components/Taskbar/StartMenu/StartMenu';
3 | import NotificationArea from '@/components/Taskbar/NotificationArea/NotificationArea';
4 | import { WindowsFile } from '@/data/mock';
5 | import Image from 'next/image';
6 |
7 | interface TaskbarProps {
8 | setOpenedFiles: React.Dispatch>>,
9 | openedFiles: Array,
10 | availableFiles: Array
11 | }
12 |
13 | export default function Taskbar ({
14 | setOpenedFiles,
15 | openedFiles,
16 | availableFiles
17 | } : TaskbarProps) {
18 | return (
19 |
20 |
35 |
36 | );
37 | };
38 |
--------------------------------------------------------------------------------
/src/data/mock.ts:
--------------------------------------------------------------------------------
1 | import homeIcon from '@/assets/icons/directory.ico';
2 | import blogIcon from '@/assets/icons/notepad.ico';
3 |
4 | export const availableFiles = [{
5 | isToggled: true,
6 | isMaxified: false,
7 | location: 'C:/mila.dev/home',
8 | markdownContents: `# About
9 | I decided to recreate https://zach.dev using Typescript, NextJS and TailwindCSS
10 |
11 | The The GitHub repo is: https://github.com/milaabl/mila-dev-website`,
12 | name: 'Home',
13 | icon: homeIcon.src
14 | },
15 | {
16 | isToggled: true,
17 | isMaxified: false,
18 | markdownContents: `In progress...`,
19 | location: 'C:/mila.dev/blog',
20 | name: 'Blog',
21 | icon: blogIcon.src
22 | }];
23 |
24 | export const initialOpenedFiles = [
25 | ...availableFiles
26 | ];
27 |
28 | export interface WindowsFile {
29 | isMaxified: boolean;
30 | location: string;
31 | markdownContents: string;
32 | name: string;
33 | icon: string;
34 | isToggled: boolean;
35 | };
36 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./src/**/*.{ts,tsx}",
5 | ],
6 | mode: 'jit',
7 | important: true,
8 | theme: {
9 | extend: {
10 | colors: {
11 | 'windows-tan': '#bdbebd',
12 | 'windows-grey': '#6d6d6d',
13 | 'neon-red': '#ff0000',
14 | 'neon-yellow': '#f9ff00',
15 | 'neon-green': '#56d7e4',
16 | 'dark-blue': '#06157f'
17 | },
18 | backgroundImage: {
19 | 'old-computer-screen': 'linear-gradient(rgba(18,16,16,0) 50%,rgba(0,0,0,.25) 0),linear-gradient(90deg,rgba(255,0,0,.06),rgba(0,255,0,.02),rgba(0,0,255,.06))'
20 | },
21 | backgroundSize: {
22 | 'old-computer-screen-pixel': '100% 2px,3px 100%'
23 | }
24 | },
25 | },
26 | plugins: [],
27 | }
28 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true,
17 | "plugins": [
18 | {
19 | "name": "next"
20 | }
21 | ],
22 | "paths": {
23 | "@/*": ["./src/*"]
24 | }
25 | },
26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
27 | "exclude": ["node_modules"]
28 | }
29 |
--------------------------------------------------------------------------------