├── .github └── workflows │ └── npm_test.yml ├── .gitignore ├── .nvmrc ├── .prettierrc.mjs ├── .storybook ├── main.ts └── preview.tsx ├── .stylelintignore ├── .stylelintrc.json ├── .yarn └── releases │ └── yarn-4.9.1.cjs ├── .yarnrc.yml ├── LICENCE ├── README.md ├── components ├── ColorSchemeToggle │ └── ColorSchemeToggle.tsx └── Welcome │ ├── Welcome.module.css │ ├── Welcome.story.tsx │ ├── Welcome.test.tsx │ └── Welcome.tsx ├── eslint.config.mjs ├── jest.config.cjs ├── jest.setup.cjs ├── next-env.d.ts ├── next.config.mjs ├── package.json ├── pages ├── _app.tsx ├── _document.tsx └── index.tsx ├── postcss.config.cjs ├── public └── favicon.svg ├── test-utils ├── index.ts └── render.tsx ├── theme.ts ├── tsconfig.json └── yarn.lock /.github/workflows/npm_test.yml: -------------------------------------------------------------------------------- 1 | name: npm test 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - '**' 7 | 8 | concurrency: 9 | group: ${{ github.workflow }}-${{ github.event.number || github.sha }} 10 | cancel-in-progress: true 11 | 12 | jobs: 13 | test_pull_request: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v3 17 | - uses: actions/setup-node@v3 18 | with: 19 | node-version-file: '.nvmrc' 20 | cache: 'yarn' 21 | cache-dependency-path: '**/yarn.lock' 22 | - name: Install dependencies 23 | run: yarn 24 | - name: Run build 25 | run: npm run build 26 | - name: Run tests 27 | run: npm test 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | 132 | .DS_Store -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v22.11.0 2 | -------------------------------------------------------------------------------- /.prettierrc.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import("@ianvs/prettier-plugin-sort-imports").PrettierConfig} */ 2 | const config = { 3 | printWidth: 100, 4 | singleQuote: true, 5 | trailingComma: 'es5', 6 | plugins: ['@ianvs/prettier-plugin-sort-imports'], 7 | importOrder: [ 8 | '.*styles.css$', 9 | '', 10 | 'dayjs', 11 | '^react$', 12 | '^next$', 13 | '^next/.*$', 14 | '', 15 | '', 16 | '^@mantine/(.*)$', 17 | '^@mantinex/(.*)$', 18 | '^@mantine-tests/(.*)$', 19 | '^@docs/(.*)$', 20 | '^@/.*$', 21 | '^../(?!.*.css$).*$', 22 | '^./(?!.*.css$).*$', 23 | '\\.css$', 24 | ], 25 | overrides: [ 26 | { 27 | files: '*.mdx', 28 | options: { 29 | printWidth: 70, 30 | }, 31 | }, 32 | ], 33 | }; 34 | 35 | export default config; -------------------------------------------------------------------------------- /.storybook/main.ts: -------------------------------------------------------------------------------- 1 | import type { StorybookConfig } from '@storybook/nextjs'; 2 | 3 | const config: StorybookConfig = { 4 | core: { 5 | disableWhatsNewNotifications: true, 6 | disableTelemetry: true, 7 | enableCrashReports: false, 8 | }, 9 | stories: ['../components/**/*.(stories|story).@(js|jsx|ts|tsx)'], 10 | addons: ['storybook-dark-mode'], 11 | framework: { 12 | name: '@storybook/nextjs', 13 | options: {}, 14 | }, 15 | }; 16 | export default config; 17 | -------------------------------------------------------------------------------- /.storybook/preview.tsx: -------------------------------------------------------------------------------- 1 | import '@mantine/core/styles.css'; 2 | 3 | import React, { useEffect } from 'react'; 4 | import { addons } from '@storybook/preview-api'; 5 | import { DARK_MODE_EVENT_NAME } from 'storybook-dark-mode'; 6 | import { MantineProvider, useMantineColorScheme } from '@mantine/core'; 7 | import { theme } from '../theme'; 8 | 9 | export const parameters = { 10 | layout: 'fullscreen', 11 | options: { 12 | showPanel: false, 13 | }, 14 | }; 15 | 16 | const channel = addons.getChannel(); 17 | 18 | function ColorSchemeWrapper({ children }: { children: React.ReactNode }) { 19 | const { setColorScheme } = useMantineColorScheme(); 20 | const handleColorScheme = (value: boolean) => setColorScheme(value ? 'dark' : 'light'); 21 | 22 | useEffect(() => { 23 | channel.on(DARK_MODE_EVENT_NAME, handleColorScheme); 24 | return () => channel.off(DARK_MODE_EVENT_NAME, handleColorScheme); 25 | }, [channel]); 26 | 27 | return <>{children}; 28 | } 29 | 30 | export const decorators = [ 31 | (renderStory: any) => {renderStory()}, 32 | (renderStory: any) => {renderStory()}, 33 | ]; 34 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | .next 2 | out 3 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["stylelint-config-standard-scss"], 3 | "rules": { 4 | "custom-property-pattern": null, 5 | "selector-class-pattern": null, 6 | "scss/no-duplicate-mixins": null, 7 | "declaration-empty-line-before": null, 8 | "declaration-block-no-redundant-longhand-properties": null, 9 | "alpha-value-notation": null, 10 | "custom-property-empty-line-before": null, 11 | "property-no-vendor-prefix": null, 12 | "color-function-notation": null, 13 | "length-zero-no-unit": null, 14 | "selector-not-notation": null, 15 | "no-descending-specificity": null, 16 | "comment-empty-line-before": null, 17 | "scss/at-mixin-pattern": null, 18 | "scss/at-rule-no-unknown": null, 19 | "value-keyword-case": null, 20 | "media-feature-range-notation": null, 21 | "selector-pseudo-class-no-unknown": [ 22 | true, 23 | { 24 | "ignorePseudoClasses": ["global"] 25 | } 26 | ] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | yarnPath: .yarn/releases/yarn-4.9.1.cjs 4 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Vitaly Rtischev 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mantine Next.js template 2 | 3 | This is a template for [Next.js](https://nextjs.org/) pages router + [Mantine](https://mantine.dev/). 4 | If you want to use app router instead, see [next-app-template](https://github.com/mantinedev/next-app-template). 5 | 6 | ## Features 7 | 8 | This template comes with the following features: 9 | 10 | - [PostCSS](https://postcss.org/) with [mantine-postcss-preset](https://mantine.dev/styles/postcss-preset) 11 | - [TypeScript](https://www.typescriptlang.org/) 12 | - [Storybook](https://storybook.js.org/) 13 | - [Jest](https://jestjs.io/) setup with [React Testing Library](https://testing-library.com/docs/react-testing-library/intro) 14 | - ESLint setup with [eslint-config-mantine](https://github.com/mantinedev/eslint-config-mantine) 15 | 16 | ## npm scripts 17 | 18 | ### Build and dev scripts 19 | 20 | - `dev` – start dev server 21 | - `build` – bundle application for production 22 | - `export` – exports static website to `out` folder 23 | - `analyze` – analyzes application bundle with [@next/bundle-analyzer](https://www.npmjs.com/package/@next/bundle-analyzer) 24 | 25 | ### Testing scripts 26 | 27 | - `typecheck` – checks TypeScript types 28 | - `lint` – runs ESLint 29 | - `prettier:check` – checks files with Prettier 30 | - `jest` – runs jest tests 31 | - `jest:watch` – starts jest watch 32 | - `test` – runs `jest`, `prettier:check`, `lint` and `typecheck` scripts 33 | 34 | ### Other scripts 35 | 36 | - `storybook` – starts storybook dev server 37 | - `storybook:build` – build production storybook bundle to `storybook-static` 38 | - `prettier:write` – formats all files with Prettier 39 | -------------------------------------------------------------------------------- /components/ColorSchemeToggle/ColorSchemeToggle.tsx: -------------------------------------------------------------------------------- 1 | import { Button, Group, useMantineColorScheme } from '@mantine/core'; 2 | 3 | export function ColorSchemeToggle() { 4 | const { setColorScheme } = useMantineColorScheme(); 5 | 6 | return ( 7 | 8 | 9 | 10 | 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /components/Welcome/Welcome.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | color: light-dark(var(--mantine-color-black), var(--mantine-color-white)); 3 | font-size: rem(100px); 4 | font-weight: 900; 5 | letter-spacing: rem(-2px); 6 | 7 | @media (max-width: $mantine-breakpoint-md) { 8 | font-size: rem(50px); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /components/Welcome/Welcome.story.tsx: -------------------------------------------------------------------------------- 1 | import { Welcome } from './Welcome'; 2 | 3 | export default { 4 | title: 'Welcome', 5 | }; 6 | 7 | export const Usage = () => ; 8 | -------------------------------------------------------------------------------- /components/Welcome/Welcome.test.tsx: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@/test-utils'; 2 | import { Welcome } from './Welcome'; 3 | 4 | describe('Welcome component', () => { 5 | it('has correct Next.js theming section link', () => { 6 | render(); 7 | expect(screen.getByText('this guide')).toHaveAttribute( 8 | 'href', 9 | 'https://mantine.dev/guides/next/' 10 | ); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /components/Welcome/Welcome.tsx: -------------------------------------------------------------------------------- 1 | import { Anchor, Text, Title } from '@mantine/core'; 2 | import classes from './Welcome.module.css'; 3 | 4 | export function Welcome() { 5 | return ( 6 | <> 7 | 8 | Welcome to{' '} 9 | <Text inherit variant="gradient" component="span" gradient={{ from: 'pink', to: 'yellow' }}> 10 | Mantine 11 | </Text> 12 | 13 | 14 | This starter Next.js project includes a minimal setup for server side rendering, if you want 15 | to learn more on Mantine + Next.js integration follow{' '} 16 | 17 | this guide 18 | 19 | . To get started edit index.tsx file. 20 | 21 | 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import mantine from 'eslint-config-mantine'; 2 | import tseslint from 'typescript-eslint'; 3 | 4 | export default tseslint.config( 5 | ...mantine, 6 | { ignores: ['**/*.{mjs,cjs,js,d.ts,d.mts}'] }, 7 | { 8 | files: ['**/*.story.tsx'], 9 | rules: { 'no-console': 'off' }, 10 | } 11 | ); 12 | -------------------------------------------------------------------------------- /jest.config.cjs: -------------------------------------------------------------------------------- 1 | const nextJest = require('next/jest'); 2 | 3 | const createJestConfig = nextJest({ 4 | dir: './', 5 | }); 6 | 7 | const customJestConfig = { 8 | setupFilesAfterEnv: ['/jest.setup.cjs'], 9 | moduleNameMapper: { 10 | '^@/components/(.*)$': '/components/$1', 11 | '^@/pages/(.*)$': '/pages/$1', 12 | }, 13 | testEnvironment: 'jest-environment-jsdom', 14 | }; 15 | 16 | module.exports = createJestConfig(customJestConfig); 17 | -------------------------------------------------------------------------------- /jest.setup.cjs: -------------------------------------------------------------------------------- 1 | require('@testing-library/jest-dom'); 2 | 3 | const { getComputedStyle } = window; 4 | window.getComputedStyle = (elt) => getComputedStyle(elt); 5 | window.HTMLElement.prototype.scrollIntoView = () => {}; 6 | 7 | Object.defineProperty(window, 'matchMedia', { 8 | writable: true, 9 | value: jest.fn().mockImplementation((query) => ({ 10 | matches: false, 11 | media: query, 12 | onchange: null, 13 | addListener: jest.fn(), 14 | removeListener: jest.fn(), 15 | addEventListener: jest.fn(), 16 | removeEventListener: jest.fn(), 17 | dispatchEvent: jest.fn(), 18 | })), 19 | }); 20 | 21 | class ResizeObserver { 22 | observe() {} 23 | unobserve() {} 24 | disconnect() {} 25 | } 26 | 27 | window.ResizeObserver = ResizeObserver; 28 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/pages/api-reference/config/typescript for more information. 6 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | import bundleAnalyzer from '@next/bundle-analyzer'; 2 | 3 | const withBundleAnalyzer = bundleAnalyzer({ 4 | enabled: process.env.ANALYZE === 'true', 5 | }); 6 | 7 | export default withBundleAnalyzer({ 8 | reactStrictMode: false, 9 | eslint: { 10 | ignoreDuringBuilds: true, 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mantine-next-template", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "analyze": "ANALYZE=true next build", 9 | "start": "next start", 10 | "export": "next build && next export", 11 | "typecheck": "tsc --noEmit", 12 | "lint": "npm run eslint && npm run stylelint", 13 | "eslint": "next lint", 14 | "stylelint": "stylelint '**/*.css' --cache", 15 | "jest": "jest", 16 | "jest:watch": "jest --watch", 17 | "prettier:check": "prettier --check \"**/*.{ts,tsx}\"", 18 | "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", 19 | "test": "npm run prettier:check && npm run lint && npm run typecheck && npm run jest", 20 | "storybook": "storybook dev -p 6006", 21 | "storybook:build": "storybook build" 22 | }, 23 | "dependencies": { 24 | "@mantine/core": "8.0.2", 25 | "@mantine/hooks": "8.0.2", 26 | "@next/bundle-analyzer": "^15.2.3", 27 | "@tabler/icons-react": "^3.31.0", 28 | "next": "15.2.3", 29 | "react": "19.1.0", 30 | "react-dom": "19.1.0" 31 | }, 32 | "devDependencies": { 33 | "@babel/core": "^7.26.10", 34 | "@eslint/js": "^9.23.0", 35 | "@ianvs/prettier-plugin-sort-imports": "^4.4.1", 36 | "@storybook/nextjs": "^8.6.8", 37 | "@storybook/react": "^8.6.8", 38 | "@testing-library/dom": "^10.4.0", 39 | "@testing-library/jest-dom": "^6.6.3", 40 | "@testing-library/react": "^16.2.0", 41 | "@testing-library/user-event": "^14.6.1", 42 | "@types/eslint-plugin-jsx-a11y": "^6", 43 | "@types/jest": "^29.5.14", 44 | "@types/node": "^22.13.11", 45 | "@types/react": "19.0.12", 46 | "babel-loader": "^10.0.0", 47 | "eslint": "^9.23.0", 48 | "eslint-config-mantine": "^4.0.3", 49 | "eslint-plugin-jsx-a11y": "^6.10.2", 50 | "eslint-plugin-react": "^7.37.4", 51 | "jest": "^29.7.0", 52 | "jest-environment-jsdom": "^29.7.0", 53 | "postcss": "^8.5.3", 54 | "postcss-preset-mantine": "1.17.0", 55 | "postcss-simple-vars": "^7.0.1", 56 | "prettier": "^3.5.3", 57 | "storybook": "^8.6.8", 58 | "storybook-dark-mode": "^4.0.2", 59 | "stylelint": "^16.16.0", 60 | "stylelint-config-standard-scss": "^14.0.0", 61 | "ts-jest": "^29.2.6", 62 | "typescript": "5.8.2", 63 | "typescript-eslint": "^8.27.0" 64 | }, 65 | "packageManager": "yarn@4.9.1" 66 | } 67 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import '@mantine/core/styles.css'; 2 | 3 | import type { AppProps } from 'next/app'; 4 | import Head from 'next/head'; 5 | import { MantineProvider } from '@mantine/core'; 6 | import { theme } from '../theme'; 7 | 8 | export default function App({ Component, pageProps }: AppProps) { 9 | return ( 10 | 11 | 12 | Mantine Template 13 | 17 | 18 | 19 | 20 | 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { Head, Html, Main, NextScript } from 'next/document'; 2 | import { ColorSchemeScript, mantineHtmlProps } from '@mantine/core'; 3 | 4 | export default function Document() { 5 | return ( 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { ColorSchemeToggle } from '../components/ColorSchemeToggle/ColorSchemeToggle'; 2 | import { Welcome } from '../components/Welcome/Welcome'; 3 | 4 | export default function HomePage() { 5 | return ( 6 | <> 7 | 8 | 9 | 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | 'postcss-preset-mantine': {}, 4 | 'postcss-simple-vars': { 5 | variables: { 6 | 'mantine-breakpoint-xs': '36em', 7 | 'mantine-breakpoint-sm': '48em', 8 | 'mantine-breakpoint-md': '62em', 9 | 'mantine-breakpoint-lg': '75em', 10 | 'mantine-breakpoint-xl': '88em', 11 | }, 12 | }, 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test-utils/index.ts: -------------------------------------------------------------------------------- 1 | import userEvent from '@testing-library/user-event'; 2 | 3 | export * from '@testing-library/react'; 4 | export { render } from './render'; 5 | export { userEvent }; 6 | -------------------------------------------------------------------------------- /test-utils/render.tsx: -------------------------------------------------------------------------------- 1 | import { render as testingLibraryRender } from '@testing-library/react'; 2 | import { MantineProvider } from '@mantine/core'; 3 | import { theme } from '../theme'; 4 | 5 | export function render(ui: React.ReactNode) { 6 | return testingLibraryRender(<>{ui}, { 7 | wrapper: ({ children }: { children: React.ReactNode }) => ( 8 | {children} 9 | ), 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /theme.ts: -------------------------------------------------------------------------------- 1 | import { createTheme } from '@mantine/core'; 2 | 3 | export const theme = createTheme({ 4 | /* Put your mantine theme override here */ 5 | }); 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "types": ["node", "jest", "@testing-library/jest-dom"], 4 | "target": "es5", 5 | "lib": ["dom", "dom.iterable", "esnext"], 6 | "allowJs": true, 7 | "skipLibCheck": true, 8 | "strict": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "noEmit": true, 11 | "esModuleInterop": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "jsx": "preserve", 17 | "incremental": true, 18 | "paths": { 19 | "@/*": ["./*"] 20 | } 21 | }, 22 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 23 | "exclude": ["node_modules"] 24 | } 25 | --------------------------------------------------------------------------------