mirror of
				https://github.com/theoludwig/theoludwig.git
				synced 2025-10-14 20:23:25 +02:00 
			
		
		
		
	chore: clean up
This commit is contained in:
		
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/BUG.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/BUG.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | ||||
| --- | ||||
| name: "🐛 Bug Report" | ||||
| about: "Report an unexpected problem or unintended behavior." | ||||
| title: "[Bug]" | ||||
| labels: "bug" | ||||
| --- | ||||
|  | ||||
| <!-- | ||||
| Please provide a clear and concise description of what the bug is. Include | ||||
| screenshots if needed. Please make sure your issue has not already been fixed. | ||||
| --> | ||||
|  | ||||
| ## Steps To Reproduce | ||||
|  | ||||
| 1. Step 1 | ||||
| 2. Step 2 | ||||
|  | ||||
| ## The current behavior | ||||
|  | ||||
| ## The expected behavior | ||||
							
								
								
									
										18
									
								
								.github/ISSUE_TEMPLATE/DOCUMENTATION.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/ISSUE_TEMPLATE/DOCUMENTATION.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +0,0 @@ | ||||
| --- | ||||
| name: "📜 Documentation" | ||||
| about: "Correct spelling errors, improvements or additions to documentation files (README, CONTRIBUTING...)." | ||||
| title: "[Documentation]" | ||||
| labels: "documentation" | ||||
| --- | ||||
|  | ||||
| <!-- Please make sure your issue has not already been fixed. --> | ||||
|  | ||||
| ## Documentation | ||||
|  | ||||
| <!-- Please uncomment the type of documentation problem this issue address --> | ||||
|  | ||||
| <!-- Documentation is Missing --> | ||||
| <!-- Documentation is Confusing --> | ||||
| <!-- Documentation has Typo errors --> | ||||
|  | ||||
| ## Proposal | ||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | ||||
| --- | ||||
| name: "✨ Feature Request" | ||||
| about: "Suggest a new feature idea." | ||||
| title: "[Feature]" | ||||
| labels: "feature request" | ||||
| --- | ||||
|  | ||||
| <!-- Please make sure your issue has not already been fixed. --> | ||||
|  | ||||
| ## Description | ||||
|  | ||||
| <!-- A clear and concise description of the problem or missing capability... --> | ||||
|  | ||||
| ## Describe the solution you'd like | ||||
|  | ||||
| <!-- If you have a solution in mind, please describe it. --> | ||||
|  | ||||
| ## Describe alternatives you've considered | ||||
|  | ||||
| <!-- Have you considered any alternative solutions or workarounds? --> | ||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/IMPROVEMENT.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/IMPROVEMENT.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | ||||
| --- | ||||
| name: "🔧 Improvement" | ||||
| about: "Improve structure/format/performance/refactor/tests of the code." | ||||
| title: "[Improvement]" | ||||
| labels: "improvement" | ||||
| --- | ||||
|  | ||||
| <!-- Please make sure your issue has not already been fixed. --> | ||||
|  | ||||
| ## Type of Improvement | ||||
|  | ||||
| <!-- Please uncomment the type of improvements this issue address --> | ||||
|  | ||||
| <!-- Files and Folders Structure --> | ||||
| <!-- Performance --> | ||||
| <!-- Refactoring code --> | ||||
| <!-- Tests --> | ||||
| <!-- Not Sure? --> | ||||
|  | ||||
| ## Proposal | ||||
							
								
								
									
										8
									
								
								.github/ISSUE_TEMPLATE/QUESTION.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/ISSUE_TEMPLATE/QUESTION.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +0,0 @@ | ||||
| --- | ||||
| name: "🙋 Question" | ||||
| about: "Further information is requested." | ||||
| title: "[Question]" | ||||
| labels: "question" | ||||
| --- | ||||
|  | ||||
| ### Question | ||||
							
								
								
									
										7
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,7 +0,0 @@ | ||||
| <!-- Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time. --> | ||||
|  | ||||
| # What changes this PR introduce? | ||||
|  | ||||
| ## List any relevant issue numbers | ||||
|  | ||||
| ## Is there anything you'd like reviewers to focus on? | ||||
							
								
								
									
										5
									
								
								.github/workflows/chromatic.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/chromatic.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,11 +11,14 @@ jobs: | ||||
|     timeout-minutes: 30 | ||||
|     runs-on: "ubuntu-latest" | ||||
|     env: | ||||
|       CI: "1" | ||||
|       TZ: "Europe/Paris" | ||||
|       DO_NOT_TRACK: "1" | ||||
|       TURBO_TELEMETRY_DISABLED: "1" | ||||
|       NEXT_TELEMETRY_DISABLED: "1" | ||||
|       STORYBOOK_DISABLE_TELEMETRY: "1" | ||||
|     steps: | ||||
|       - uses: "actions/checkout@v4.2.2" | ||||
|       - uses: "actions/checkout@v5.0.0" | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @@ -16,8 +16,9 @@ jobs: | ||||
|       DO_NOT_TRACK: "1" | ||||
|       TURBO_TELEMETRY_DISABLED: "1" | ||||
|       NEXT_TELEMETRY_DISABLED: "1" | ||||
|       STORYBOOK_DISABLE_TELEMETRY: "1" | ||||
|     steps: | ||||
|       - uses: "actions/checkout@v4.2.2" | ||||
|       - uses: "actions/checkout@v5.0.0" | ||||
|  | ||||
|       - uses: "pnpm/action-setup@v4.1.0" | ||||
|  | ||||
| @@ -40,10 +41,3 @@ jobs: | ||||
|       - run: "node --run lint:prettier" | ||||
|       - run: "node --run test" | ||||
|       - run: "node --run build" | ||||
|  | ||||
|   commitlint: | ||||
|     runs-on: "ubuntu-latest" | ||||
|     steps: | ||||
|       - uses: "actions/checkout@v4.2.2" | ||||
|  | ||||
|       - uses: "wagoid/commitlint-github-action@v6.1.2" | ||||
|   | ||||
							
								
								
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,10 @@ | ||||
| # dependencies | ||||
| node_modules | ||||
| .npm | ||||
| .cache | ||||
| package-lock.json | ||||
| .pnpm-store | ||||
| .apt | ||||
| .pnp | ||||
| .pnp.js | ||||
| .yarn/install-state.gz | ||||
| @@ -15,12 +17,16 @@ coverage | ||||
| out/ | ||||
| dist/ | ||||
| build/ | ||||
| .swc/ | ||||
| .react-email/ | ||||
|  | ||||
| # misc | ||||
| .DS_Store | ||||
| *.pem | ||||
| *.bak | ||||
| .turbo | ||||
| bin/ | ||||
| dump_* | ||||
|  | ||||
| # debug | ||||
| npm-debug.log* | ||||
| @@ -30,6 +36,7 @@ yarn-error.log* | ||||
| # Storybook | ||||
| *storybook.log | ||||
| storybook-static | ||||
| /public | ||||
|  | ||||
| # IDEs and editors | ||||
| .idea | ||||
| @@ -42,6 +49,7 @@ storybook-static | ||||
|  | ||||
| # local env files | ||||
| .env | ||||
| .env.dev | ||||
| .env.production | ||||
| .env*.local | ||||
|  | ||||
| @@ -50,4 +58,5 @@ storybook-static | ||||
|  | ||||
| # typescript | ||||
| *.tsbuildinfo | ||||
| # next-env.d.ts | ||||
| next-env.d.ts | ||||
| packages/i18n/src/translations/*.d.json.ts | ||||
|   | ||||
							
								
								
									
										1
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							| @@ -5,7 +5,6 @@ | ||||
|     "dbaeumer.vscode-eslint", | ||||
|     "davidanson.vscode-markdownlint", | ||||
|     "bradlc.vscode-tailwindcss", | ||||
|     "mikestead.dotenv", | ||||
|     "antfu.pnpm-catalog-lens", | ||||
|     "Lokalise.i18n-ally" | ||||
|   ] | ||||
|   | ||||
							
								
								
									
										16
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @@ -9,11 +9,19 @@ | ||||
|     "source.fixAll": "explicit", | ||||
|     "source.organizeImports": "never" | ||||
|   }, | ||||
|   "tailwindCSS.experimental.configFile": "./configs/config-tailwind/styles.css", | ||||
|   "tailwindCSS.experimental.classRegex": [ | ||||
|     ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], | ||||
|     ["cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"] | ||||
|   "eslint.workingDirectories": [ | ||||
|     { | ||||
|       "mode": "auto" | ||||
|     } | ||||
|   ], | ||||
|   "files.associations": { | ||||
|     "*.css": "tailwindcss" | ||||
|   }, | ||||
|   "editor.quickSuggestions": { | ||||
|     "strings": "on" | ||||
|   }, | ||||
|   "tailwindCSS.classFunctions": ["classNames", "cva"], | ||||
|   "tailwindCSS.experimental.configFile": "./configs/config-tailwind/styles.css", | ||||
|   "i18n-ally.localesPaths": ["./packages/i18n/src/translations/"], | ||||
|   "i18n-ally.keystyle": "nested", | ||||
|   "i18n-ally.sortKeys": false, | ||||
|   | ||||
| @@ -1,127 +0,0 @@ | ||||
| # Contributor Covenant Code of Conduct | ||||
|  | ||||
| ## Our Pledge | ||||
|  | ||||
| We as members, contributors, and leaders pledge to make participation in our | ||||
| community a harassment-free experience for everyone, regardless of age, body | ||||
| size, visible or invisible disability, ethnicity, sex characteristics, gender | ||||
| identity and expression, level of experience, education, socio-economic status, | ||||
| nationality, personal appearance, race, religion, or sexual identity | ||||
| and orientation. | ||||
|  | ||||
| We pledge to act and interact in ways that contribute to an open, welcoming, | ||||
| diverse, inclusive, and healthy community. | ||||
|  | ||||
| ## Our Standards | ||||
|  | ||||
| Examples of behavior that contributes to a positive environment for our | ||||
| community include: | ||||
|  | ||||
| - Demonstrating empathy and kindness toward other people | ||||
| - Being respectful of differing opinions, viewpoints, and experiences | ||||
| - Giving and gracefully accepting constructive feedback | ||||
| - Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience | ||||
| - Focusing on what is best not just for us as individuals, but for the overall community | ||||
|  | ||||
| Examples of unacceptable behavior include: | ||||
|  | ||||
| - The use of sexualized language or imagery, and sexual attention or advances of any kind | ||||
| - Trolling, insulting or derogatory comments, and personal or political attacks | ||||
| - Public or private harassment | ||||
| - Publishing others' private information, such as a physical or email address, without their explicit permission | ||||
| - Other conduct which could reasonably be considered inappropriate in a professional setting | ||||
|  | ||||
| ## Enforcement Responsibilities | ||||
|  | ||||
| Community leaders are responsible for clarifying and enforcing our standards of | ||||
| acceptable behavior and will take appropriate and fair corrective action in | ||||
| response to any behavior that they deem inappropriate, threatening, offensive, | ||||
| or harmful. | ||||
|  | ||||
| Community leaders have the right and responsibility to remove, edit, or reject | ||||
| comments, commits, code, wiki edits, issues, and other contributions that are | ||||
| not aligned to this Code of Conduct, and will communicate reasons for moderation | ||||
| decisions when appropriate. | ||||
|  | ||||
| ## Scope | ||||
|  | ||||
| This Code of Conduct applies within all community spaces, and also applies when | ||||
| an individual is officially representing the community in public spaces. | ||||
| Examples of representing our community include using an official e-mail address, | ||||
| posting via an official social media account, or acting as an appointed | ||||
| representative at an online or offline event. | ||||
|  | ||||
| ## Enforcement | ||||
|  | ||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||
| reported to the community leaders responsible for enforcement at | ||||
| <contact@theoludwig.fr>. | ||||
| All complaints will be reviewed and investigated promptly and fairly. | ||||
|  | ||||
| All community leaders are obligated to respect the privacy and security of the | ||||
| reporter of any incident. | ||||
|  | ||||
| ## Enforcement Guidelines | ||||
|  | ||||
| Community leaders will follow these Community Impact Guidelines in determining | ||||
| the consequences for any action they deem in violation of this Code of Conduct: | ||||
|  | ||||
| ### 1. Correction | ||||
|  | ||||
| **Community Impact**: Use of inappropriate language or other behavior deemed | ||||
| unprofessional or unwelcome in the community. | ||||
|  | ||||
| **Consequence**: A private, written warning from community leaders, providing | ||||
| clarity around the nature of the violation and an explanation of why the | ||||
| behavior was inappropriate. A public apology may be requested. | ||||
|  | ||||
| ### 2. Warning | ||||
|  | ||||
| **Community Impact**: A violation through a single incident or series | ||||
| of actions. | ||||
|  | ||||
| **Consequence**: A warning with consequences for continued behavior. No | ||||
| interaction with the people involved, including unsolicited interaction with | ||||
| those enforcing the Code of Conduct, for a specified period of time. This | ||||
| includes avoiding interactions in community spaces as well as external channels | ||||
| like social media. Violating these terms may lead to a temporary or | ||||
| permanent ban. | ||||
|  | ||||
| ### 3. Temporary Ban | ||||
|  | ||||
| **Community Impact**: A serious violation of community standards, including | ||||
| sustained inappropriate behavior. | ||||
|  | ||||
| **Consequence**: A temporary ban from any sort of interaction or public | ||||
| communication with the community for a specified period of time. No public or | ||||
| private interaction with the people involved, including unsolicited interaction | ||||
| with those enforcing the Code of Conduct, is allowed during this period. | ||||
| Violating these terms may lead to a permanent ban. | ||||
|  | ||||
| ### 4. Permanent Ban | ||||
|  | ||||
| **Community Impact**: Demonstrating a pattern of violation of community | ||||
| standards, including sustained inappropriate behavior, harassment of an | ||||
| individual, or aggression toward or disparagement of classes of individuals. | ||||
|  | ||||
| **Consequence**: A permanent ban from any sort of public interaction within | ||||
| the community. | ||||
|  | ||||
| ## Attribution | ||||
|  | ||||
| This Code of Conduct is adapted from the [Contributor Covenant][homepage], | ||||
| version 2.0, available at | ||||
| [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0]. | ||||
|  | ||||
| Community Impact Guidelines were inspired by | ||||
| [Mozilla's code of conduct enforcement ladder][mozilla coc]. | ||||
|  | ||||
| For answers to common questions about this code of conduct, see the FAQ at | ||||
| [https://www.contributor-covenant.org/faq][faq]. Translations are available | ||||
| at [https://www.contributor-covenant.org/translations][translations]. | ||||
|  | ||||
| [homepage]: https://www.contributor-covenant.org | ||||
| [v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html | ||||
| [mozilla coc]: https://github.com/mozilla/diversity | ||||
| [faq]: https://www.contributor-covenant.org/faq | ||||
| [translations]: https://www.contributor-covenant.org/translations | ||||
| @@ -1,10 +1,6 @@ | ||||
| # 💡 Contributing | ||||
| # Contributing | ||||
|  | ||||
| Thanks a lot for your interest in contributing to **theoludwig.fr**! 🎉 | ||||
|  | ||||
| ## Code of Conduct | ||||
|  | ||||
| **theoludwig.fr** adopted the [Contributor Covenant](https://www.contributor-covenant.org/) as its Code of Conduct, and we expect project participants to adhere to it. Please read [the full text](./CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated. | ||||
| Thanks a lot for your interest in contributing to **theoludwig.fr**! | ||||
|  | ||||
| ## Types of contributions | ||||
|  | ||||
| @@ -32,7 +28,7 @@ The commit message guidelines adheres to [Conventional Commits](https://www.conv | ||||
| ### Prerequisites | ||||
|  | ||||
| - [Node.js](https://nodejs.org/) >= v24.0.0 [(`nvm install 24`)](https://nvm.sh) | ||||
| - [pnpm](https://pnpm.io/) v10.11.0 [(`npm install --global corepack@0.32.0 && corepack enable`)](https://github.com/nodejs/corepack) | ||||
| - [pnpm](https://pnpm.io/) v10.15.0 [(`npm install --global corepack@0.34.0 && corepack enable`)](https://github.com/nodejs/corepack) | ||||
| - [Docker](https://www.docker.com/) | ||||
|  | ||||
| ### Installation | ||||
|   | ||||
							
								
								
									
										21
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -1,21 +0,0 @@ | ||||
| # MIT License | ||||
|  | ||||
| Copyright (c) Théo LUDWIG <contact@theoludwig.fr> | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE. | ||||
| @@ -17,7 +17,7 @@ | ||||
|  | ||||
| <hr /> | ||||
|  | ||||
| ## 📜 About | ||||
| ## About | ||||
|  | ||||
| ```json | ||||
| { | ||||
| @@ -48,7 +48,7 @@ | ||||
|  | ||||
| <hr /> | ||||
|  | ||||
| ## 📈 Statistics | ||||
| ## Statistics | ||||
|  | ||||
| <p align=center> | ||||
|     <img height=175 align="center" src="https://github-readme-stats.vercel.app/api?username=theoludwig&show_icons=true&theme=dark" alt="Théo LUDWIG's GitHub Stats" /> | ||||
|   | ||||
| @@ -5,7 +5,6 @@ import { LOCALE_DEFAULT, TIMEZONE } from "@repo/utils/constants" | ||||
| import type { Preview } from "@storybook/nextjs" | ||||
| import { NextIntlClientProvider } from "next-intl" | ||||
| import { ThemeProvider as NextThemeProvider } from "next-themes" | ||||
| import React from "react" | ||||
|  | ||||
| const preview: Preview = { | ||||
|   initialGlobals: { | ||||
| @@ -14,6 +13,9 @@ const preview: Preview = { | ||||
|     }, | ||||
|   }, | ||||
|   parameters: { | ||||
|     a11y: { | ||||
|       test: "error", | ||||
|     }, | ||||
|     docs: { | ||||
|       codePanel: true, | ||||
|     }, | ||||
|   | ||||
| @@ -1,35 +0,0 @@ | ||||
| import type { TestRunnerConfig } from "@storybook/test-runner" | ||||
| import { getStoryContext } from "@storybook/test-runner" | ||||
|  | ||||
| import { checkA11y, configureAxe, injectAxe } from "axe-playwright" | ||||
|  | ||||
| /* | ||||
|  * See https://storybook.js.org/docs/writing-tests/test-runner#test-hook-api | ||||
|  */ | ||||
| const config: TestRunnerConfig = { | ||||
|   async preVisit(page) { | ||||
|     await injectAxe(page) | ||||
|   }, | ||||
|   async postVisit(page, context) { | ||||
|     const storyContext = await getStoryContext(page, context) | ||||
|  | ||||
|     const isA11yDisabled = storyContext.parameters?.a11y?.disable as boolean | ||||
|     if (isA11yDisabled) { | ||||
|       return | ||||
|     } | ||||
|  | ||||
|     await configureAxe(page, { | ||||
|       rules: storyContext.parameters?.a11y?.config?.rules, | ||||
|     }) | ||||
|  | ||||
|     await checkA11y(page, "#storybook-root", { | ||||
|       verbose: false, | ||||
|       detailedReport: true, | ||||
|       detailedReportOptions: { | ||||
|         html: true, | ||||
|       }, | ||||
|     }) | ||||
|   }, | ||||
| } | ||||
|  | ||||
| export default config | ||||
| @@ -38,7 +38,6 @@ | ||||
|     "@types/node": "catalog:", | ||||
|     "@types/react": "catalog:", | ||||
|     "@types/react-dom": "catalog:", | ||||
|     "axe-playwright": "catalog:", | ||||
|     "chromatic": "catalog:", | ||||
|     "eslint": "catalog:", | ||||
|     "start-server-and-test": "catalog:", | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| FROM node:24.1.0-slim AS node-pnpm | ||||
| FROM node:24.7.0-slim AS node-pnpm | ||||
| ENV PNPM_HOME="/pnpm" | ||||
| ENV PATH="$PNPM_HOME:$PATH" | ||||
| RUN npm install --global corepack@0.32.0 && corepack enable | ||||
| RUN npm install --global corepack@0.34.0 && corepack enable | ||||
| ENV TURBO_TELEMETRY_DISABLED=1 | ||||
| ENV NEXT_TELEMETRY_DISABLED=1 | ||||
| ENV DO_NOT_TRACK=1 | ||||
| @@ -9,7 +9,7 @@ WORKDIR /usr/src/app | ||||
|  | ||||
| FROM node-pnpm AS builder | ||||
| COPY ./ ./ | ||||
| RUN pnpm install --global turbo@2.5.3 | ||||
| RUN pnpm install --global turbo@2.5.6 | ||||
| RUN turbo prune @repo/website --docker | ||||
|  | ||||
| FROM node-pnpm AS installer | ||||
| @@ -34,7 +34,7 @@ ENV IS_STANDALONE=true | ||||
|  | ||||
| RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 applicationrunner | ||||
| USER applicationrunner | ||||
| COPY --from=installer /usr/src/app/apps/website/next.config.js ./ | ||||
| COPY --from=installer /usr/src/app/apps/website/next.config.ts ./ | ||||
| COPY --from=installer /usr/src/app/apps/website/package.json ./ | ||||
| COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/.next/standalone ./ | ||||
| COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/.next/static ./apps/website/.next/static | ||||
|   | ||||
| @@ -1,19 +1,23 @@ | ||||
| import "@repo/config-tailwind/styles.css" | ||||
| import type { LocaleProps } from "@repo/i18n/routing" | ||||
| import type { Locale } from "@repo/utils/constants" | ||||
| import { Footer } from "@repo/ui/Layout/Footer" | ||||
| import { Header } from "@repo/ui/Layout/Header" | ||||
| import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme" | ||||
| import { VERSION } from "@repo/utils/constants" | ||||
| import { setRequestLocale } from "next-intl/server" | ||||
|  | ||||
| interface MainLayoutProps extends React.PropsWithChildren, LocaleProps {} | ||||
| interface MainLayoutProps extends React.PropsWithChildren { | ||||
|   params: Promise<{ | ||||
|     locale: string | ||||
|   }> | ||||
| } | ||||
|  | ||||
| const MainLayout: React.FC<MainLayoutProps> = async (props) => { | ||||
|   const { children, params } = props | ||||
|  | ||||
|   const { locale } = await params | ||||
|   // Enable static rendering | ||||
|   setRequestLocale(locale) | ||||
|   setRequestLocale(locale as Locale) | ||||
|  | ||||
|   return ( | ||||
|     <ThemeProvider> | ||||
|   | ||||
| @@ -1,11 +1,13 @@ | ||||
| import "@repo/config-tailwind/styles.css" | ||||
| import type { LocaleProps } from "@repo/i18n/routing" | ||||
| import type { Locale } from "@repo/utils/constants" | ||||
| import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme" | ||||
| import { setRequestLocale } from "next-intl/server" | ||||
|  | ||||
| interface CurriculumVitaeLayoutProps | ||||
|   extends React.PropsWithChildren, | ||||
|     LocaleProps {} | ||||
| interface CurriculumVitaeLayoutProps extends React.PropsWithChildren { | ||||
|   params: Promise<{ | ||||
|     locale: string | ||||
|   }> | ||||
| } | ||||
|  | ||||
| const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async ( | ||||
|   props, | ||||
| @@ -14,7 +16,7 @@ const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async ( | ||||
|  | ||||
|   const { locale } = await params | ||||
|   // Enable static rendering | ||||
|   setRequestLocale(locale) | ||||
|   setRequestLocale(locale as Locale) | ||||
|  | ||||
|   return <ThemeProvider forcedTheme="light">{children}</ThemeProvider> | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| import "@repo/config-tailwind/styles.css" | ||||
| import type { LocaleProps } from "@repo/i18n/routing" | ||||
| import type { Locale } from "@repo/utils/constants" | ||||
| import { LOCALES } from "@repo/utils/constants" | ||||
| import type { Metadata, Viewport } from "next" | ||||
| @@ -19,9 +18,13 @@ export const viewport: Viewport = { | ||||
|  | ||||
| export const generateMetadata = async ({ | ||||
|   params, | ||||
| }: LocaleProps): Promise<Metadata> => { | ||||
| }: { | ||||
|   params: Promise<{ | ||||
|     locale: string | ||||
|   }> | ||||
| }): Promise<Metadata> => { | ||||
|   const { locale } = await params | ||||
|   const t = await getTranslations({ locale }) | ||||
|   const t = await getTranslations({ locale: locale as Locale }) | ||||
|   const title = t("meta.title") | ||||
|   const description = `${title} - ${t("meta.description")}` | ||||
|   const image = "/images/logo.webp" | ||||
| @@ -64,14 +67,18 @@ export const generateStaticParams = (): Array<{ locale: Locale }> => { | ||||
|   }) | ||||
| } | ||||
|  | ||||
| interface LocaleLayoutProps extends React.PropsWithChildren, LocaleProps {} | ||||
| interface LocaleLayoutProps extends React.PropsWithChildren { | ||||
|   params: Promise<{ | ||||
|     locale: string | ||||
|   }> | ||||
| } | ||||
|  | ||||
| const LocaleLayout: React.FC<LocaleLayoutProps> = async (props) => { | ||||
|   const { children, params } = props | ||||
|  | ||||
|   const { locale } = await params | ||||
|   // Enable static rendering | ||||
|   setRequestLocale(locale) | ||||
|   setRequestLocale(locale as Locale) | ||||
|  | ||||
|   const messages = await getMessages() | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import typescriptESLint from "typescript-eslint" | ||||
| import configNextjs from "@repo/config-eslint/nextjs" | ||||
| import config from "@repo/config-eslint" | ||||
|  | ||||
| export default typescriptESLint.config(...configNextjs, { | ||||
| export default typescriptESLint.config(...config, { | ||||
|   files: ["**/*.ts", "**/*.tsx"], | ||||
|   languageOptions: { | ||||
|     parser: typescriptESLint.parser, | ||||
|   | ||||
							
								
								
									
										5
									
								
								apps/website/next-env.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								apps/website/next-env.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +0,0 @@ | ||||
| /// <reference types="next" /> | ||||
| /// <reference types="next/image-types/global" /> | ||||
|  | ||||
| // NOTE: This file should not be edited | ||||
| // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. | ||||
| @@ -1,21 +0,0 @@ | ||||
| import createNextIntlPlugin from "next-intl/plugin" | ||||
|  | ||||
| const IS_STANDALONE = process.env.IS_STANDALONE === "true" | ||||
|  | ||||
| /** @type {import('next').NextConfig} */ | ||||
| const nextConfig = { | ||||
|   output: IS_STANDALONE ? "standalone" : undefined, | ||||
|   images: { | ||||
|     unoptimized: true, | ||||
|   }, | ||||
|   eslint: { | ||||
|     ignoreDuringBuilds: true, | ||||
|   }, | ||||
|   typescript: { | ||||
|     ignoreBuildErrors: true, | ||||
|   }, | ||||
| } | ||||
|  | ||||
| const withNextIntl = createNextIntlPlugin() | ||||
|  | ||||
| export default withNextIntl(nextConfig) | ||||
							
								
								
									
										37
									
								
								apps/website/next.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								apps/website/next.config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| import { LOCALE_DEFAULT } from "@repo/utils/constants" | ||||
| import type { NextConfig } from "next" | ||||
| import createNextIntlPlugin from "next-intl/plugin" | ||||
| import path from "node:path" | ||||
|  | ||||
| const IS_STANDALONE = process.env.IS_STANDALONE === "true" | ||||
|  | ||||
| const nextConfig: NextConfig = { | ||||
|   output: IS_STANDALONE ? "standalone" : undefined, | ||||
|   typedRoutes: true, | ||||
|   images: { | ||||
|     unoptimized: true, | ||||
|   }, | ||||
|   eslint: { | ||||
|     ignoreDuringBuilds: true, | ||||
|   }, | ||||
|   typescript: { | ||||
|     ignoreBuildErrors: true, | ||||
|   }, | ||||
| } | ||||
|  | ||||
| const withNextIntl = createNextIntlPlugin({ | ||||
|   experimental: { | ||||
|     createMessagesDeclaration: path.join( | ||||
|       process.cwd(), | ||||
|       "..", | ||||
|       "..", | ||||
|       "packages", | ||||
|       "i18n", | ||||
|       "src", | ||||
|       "translations", | ||||
|       `${LOCALE_DEFAULT}.json`, | ||||
|     ), | ||||
|   }, | ||||
| }) | ||||
|  | ||||
| export default withNextIntl(nextConfig) | ||||
| @@ -8,10 +8,11 @@ | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "dev": "next dev --port 3000 --turbopack", | ||||
|     "build": "next build", | ||||
|     "build": "next build --turbopack", | ||||
|     "start": "next start --port 3000", | ||||
|     "typegen": "next typegen", | ||||
|     "lint:eslint": "eslint . --max-warnings 0", | ||||
|     "lint:typescript": "tsc --noEmit" | ||||
|     "lint:typescript": "next typegen && tsc --noEmit" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@repo/blog": "workspace:*", | ||||
|   | ||||
| @@ -14,5 +14,5 @@ | ||||
|     ] | ||||
|   }, | ||||
|   "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], | ||||
|   "exclude": ["node_modules", ".next"] | ||||
|   "exclude": ["node_modules"] | ||||
| } | ||||
|   | ||||
| @@ -1,25 +1,75 @@ | ||||
| import typescriptESLint from "typescript-eslint" | ||||
| import nextPlugin from "@next/eslint-plugin-next" | ||||
| import configConventions from "eslint-config-conventions" | ||||
| import importX from "eslint-plugin-import-x" | ||||
| import importXPlugin from "eslint-plugin-import-x" | ||||
| import reactPlugin from "eslint-plugin-react" | ||||
| import reactHooksPlugin from "eslint-plugin-react-hooks" | ||||
| import typescriptESLint from "typescript-eslint" | ||||
|  | ||||
| export default typescriptESLint.config( | ||||
|   ...configConventions, | ||||
|   reactHooksPlugin.configs.recommended, | ||||
|   reactPlugin.configs.flat.recommended, | ||||
|   { | ||||
|     ignores: [ | ||||
|       ".next", | ||||
|       "**/next.config.js", | ||||
|       "**/next.config.ts", | ||||
|       "**/eslint.config.js", | ||||
|       "**/tailwind.config.js", | ||||
|       "**/postcss.config.js", | ||||
|       "**/kysely.config.ts", | ||||
|     ], | ||||
|   }, | ||||
|   ...configConventions, | ||||
|   { | ||||
|     name: "config-eslint", | ||||
|     settings: { | ||||
|       react: { | ||||
|         version: "19.1.1", | ||||
|       }, | ||||
|     }, | ||||
|     plugins: { | ||||
|       "import-x": importX, | ||||
|       "@next/next": nextPlugin, | ||||
|       "import-x": importXPlugin, | ||||
|     }, | ||||
|     rules: { | ||||
|       ...nextPlugin.configs.recommended.rules, | ||||
|       ...nextPlugin.configs["core-web-vitals"].rules, | ||||
|       "@next/next/no-html-link-for-pages": "off", | ||||
|       "@next/next/no-img-element": "off", | ||||
|  | ||||
|       "react-hooks/react-compiler": "error", | ||||
|  | ||||
|       "react/jsx-no-target-blank": "off", | ||||
|       "react/no-unknown-property": "off", | ||||
|       "react/react-in-jsx-scope": "off", | ||||
|       "react/prop-types": "off", | ||||
|       "react/self-closing-comp": [ | ||||
|         "error", | ||||
|         { | ||||
|           component: true, | ||||
|           html: true, | ||||
|         }, | ||||
|       ], | ||||
|       "react/void-dom-elements-no-children": "error", | ||||
|       "react/jsx-boolean-value": "error", | ||||
|       "react/iframe-missing-sandbox": "off", | ||||
|  | ||||
|       "no-restricted-imports": [ | ||||
|         "error", | ||||
|         { | ||||
|           paths: [ | ||||
|             { | ||||
|               name: "next/navigation", | ||||
|               importNames: [ | ||||
|                 "redirect", | ||||
|                 "permanentRedirect", | ||||
|                 "useRouter", | ||||
|                 "usePathname", | ||||
|               ], | ||||
|               message: "Please import from `@repo/i18n/routing` instead.", | ||||
|             }, | ||||
|           ], | ||||
|         }, | ||||
|       ], | ||||
|       "import-x/extensions": [ | ||||
|         "error", | ||||
|         "ignorePackages", | ||||
|   | ||||
| @@ -1,54 +0,0 @@ | ||||
| import { FlatCompat } from "@eslint/eslintrc" | ||||
| import typescriptESLint from "typescript-eslint" | ||||
| import config from "../eslint.config.js" | ||||
|  | ||||
| const flatCompat = new FlatCompat({ | ||||
|   baseDirectory: import.meta.dirname, | ||||
| }) | ||||
|  | ||||
| export default typescriptESLint.config( | ||||
|   ...config, | ||||
|   ...flatCompat.extends("next/core-web-vitals"), | ||||
|   { | ||||
|     name: "config-eslint/nextjs", | ||||
|     settings: { | ||||
|       react: { | ||||
|         version: "detect", | ||||
|       }, | ||||
|     }, | ||||
|     rules: { | ||||
|       "@next/next/no-html-link-for-pages": "off", | ||||
|       "@next/next/no-img-element": "off", | ||||
|       "react/self-closing-comp": [ | ||||
|         "error", | ||||
|         { | ||||
|           component: true, | ||||
|           html: true, | ||||
|         }, | ||||
|       ], | ||||
|       "react/void-dom-elements-no-children": "error", | ||||
|       "react/jsx-boolean-value": "error", | ||||
|       "no-restricted-imports": [ | ||||
|         "error", | ||||
|         { | ||||
|           paths: [ | ||||
|             { | ||||
|               name: "next/link", | ||||
|               message: "Please import from `@repo/i18n/routing` instead.", | ||||
|             }, | ||||
|             { | ||||
|               name: "next/navigation", | ||||
|               importNames: [ | ||||
|                 "redirect", | ||||
|                 "permanentRedirect", | ||||
|                 "useRouter", | ||||
|                 "usePathname", | ||||
|               ], | ||||
|               message: "Please import from `@repo/i18n/routing` instead.", | ||||
|             }, | ||||
|           ], | ||||
|         }, | ||||
|       ], | ||||
|     }, | ||||
|   }, | ||||
| ) | ||||
| @@ -9,23 +9,18 @@ | ||||
|       "import": "./eslint.config.js", | ||||
|       "require": "./eslint.config.js", | ||||
|       "default": "./eslint.config.js" | ||||
|     }, | ||||
|     "./nextjs": { | ||||
|       "types": "./index.d.ts", | ||||
|       "import": "./nextjs/eslint.config.js", | ||||
|       "require": "./nextjs/eslint.config.js", | ||||
|       "default": "./nextjs/eslint.config.js" | ||||
|     } | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@eslint/eslintrc": "catalog:", | ||||
|     "typescript-eslint": "catalog:", | ||||
|     "eslint": "catalog:", | ||||
|     "eslint-config-conventions": "catalog:", | ||||
|     "eslint-plugin-promise": "catalog:", | ||||
|     "eslint-plugin-unicorn": "catalog:", | ||||
|     "eslint-config-next": "catalog:", | ||||
|     "eslint-plugin-import-x": "catalog:", | ||||
|     "@next/eslint-plugin-next": "catalog:", | ||||
|     "eslint-plugin-react": "catalog:", | ||||
|     "eslint-plugin-react-hooks": "catalog:", | ||||
|     "typescript": "catalog:", | ||||
|     "globals": "catalog:" | ||||
|   } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ | ||||
|     "allowImportingTsExtensions": true, | ||||
|     "skipLibCheck": true, | ||||
|     "jsx": "preserve", | ||||
|     "incremental": true, | ||||
|     "incremental": false, | ||||
|     "noEmit": true, | ||||
|  | ||||
|     "target": "ESNext", | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|   "version": "0.0.0-develop", | ||||
|   "private": true, | ||||
|   "type": "module", | ||||
|   "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977", | ||||
|   "packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b", | ||||
|   "engines": { | ||||
|     "node": ">=24.0.0" | ||||
|   }, | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import typescriptESLint from "typescript-eslint" | ||||
| import configNextjs from "@repo/config-eslint/nextjs" | ||||
| import config from "@repo/config-eslint" | ||||
|  | ||||
| export default typescriptESLint.config(...configNextjs, { | ||||
| export default typescriptESLint.config(...config, { | ||||
|   files: ["**/*.ts", "**/*.tsx"], | ||||
|   languageOptions: { | ||||
|     parser: typescriptESLint.parser, | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import typescriptESLint from "typescript-eslint" | ||||
| import configNextjs from "@repo/config-eslint/nextjs" | ||||
| import config from "@repo/config-eslint" | ||||
|  | ||||
| export default typescriptESLint.config(...configNextjs, { | ||||
| export default typescriptESLint.config(...config, { | ||||
|   files: ["**/*.ts", "**/*.tsx"], | ||||
|   languageOptions: { | ||||
|     parser: typescriptESLint.parser, | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import typescriptESLint from "typescript-eslint" | ||||
| import configNextjs from "@repo/config-eslint/nextjs" | ||||
| import config from "@repo/config-eslint" | ||||
|  | ||||
| export default typescriptESLint.config(...configNextjs, { | ||||
| export default typescriptESLint.config(...config, { | ||||
|   files: ["**/*.ts", "**/*.tsx"], | ||||
|   languageOptions: { | ||||
|     parser: typescriptESLint.parser, | ||||
|   | ||||
| @@ -15,7 +15,7 @@ export const BirthDate: React.FC<BirthDateProps> = () => { | ||||
|   }, []) | ||||
|  | ||||
|   return t("home.about.birth-date.value", { | ||||
|     age, | ||||
|     age: age.toString(), | ||||
|     birthDate: BIRTH_DATE_STRING, | ||||
|   }) | ||||
| } | ||||
|   | ||||
							
								
								
									
										5037
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5037
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -3,29 +3,36 @@ packages: | ||||
|   - "configs/*" | ||||
|   - "packages/*" | ||||
|  | ||||
| catalogMode: "strict" | ||||
|  | ||||
| catalog: | ||||
|   # Turborepo | ||||
|   "turbo": "2.5.3" | ||||
|   "turbo": "2.5.6" | ||||
|  | ||||
|   # TypeScript | ||||
|   "typescript": "5.9.2" | ||||
|   "@total-typescript/ts-reset": "0.6.1" | ||||
|   "@types/node": "24.3.0" | ||||
|  | ||||
|   # Utils | ||||
|   "mime": "4.0.7" | ||||
|  | ||||
|   # React.js/Next.js | ||||
|   "next": &next "15.3.2" | ||||
|   "next-intl": "4.1.0" | ||||
|   "next": &next "15.5.2" | ||||
|   "next-intl": "4.3.5" | ||||
|   "next-themes": "0.4.6" | ||||
|   "react": "19.1.0" | ||||
|   "react-dom": "19.1.0" | ||||
|   "react": "19.1.1" | ||||
|   "react-dom": "19.1.1" | ||||
|   "@types/react": "19.1.12" | ||||
|   "@types/react-dom": "19.1.9" | ||||
|   "react-icons": "5.5.0" | ||||
|   "@types/react": "19.1.6" | ||||
|   "@types/react-dom": "19.1.5" | ||||
|  | ||||
|   # Blog | ||||
|   "@giscus/react": "3.1.0" | ||||
|   "gray-matter": "4.0.3" | ||||
|   "katex": "0.16.22" | ||||
|   "next-mdx-remote": "5.0.0" | ||||
|   "@mdx-js/mdx": "3.1.0" | ||||
|   "@mdx-js/mdx": "3.1.1" | ||||
|   "rehype-katex": "7.0.1" | ||||
|   "rehype-raw": "7.0.0" | ||||
|   "rehype-slug": "6.0.0" | ||||
| @@ -39,52 +46,47 @@ catalog: | ||||
|   "markdownlint": "0.38.0" | ||||
|   "markdownlint-rule-relative-links": "4.2.0" | ||||
|  | ||||
|   # TypeScript | ||||
|   "typescript": "5.8.3" | ||||
|   "@total-typescript/ts-reset": "0.6.1" | ||||
|   "@types/node": "22.15.24" | ||||
|  | ||||
|   # ESLint | ||||
|   "globals": "16.2.0" | ||||
|   "typescript-eslint": "8.33.0" | ||||
|   "@eslint/eslintrc": "3.3.1" | ||||
|   "eslint": "9.27.0" | ||||
|   "eslint-config-conventions": "19.2.0" | ||||
|   "globals": "16.3.0" | ||||
|   "typescript-eslint": "8.41.0" | ||||
|   "eslint": "9.34.0" | ||||
|   "eslint-config-conventions": "20.1.3" | ||||
|   "eslint-plugin-promise": "7.2.1" | ||||
|   "eslint-plugin-unicorn": "59.0.1" | ||||
|   "eslint-config-next": *next | ||||
|   "eslint-plugin-import-x": "4.13.3" | ||||
|   "eslint-plugin-unicorn": "60.0.0" | ||||
|   "eslint-plugin-import-x": "4.16.1" | ||||
|   "@next/eslint-plugin-next": *next | ||||
|   "eslint-plugin-react": "7.37.5" | ||||
|   "eslint-plugin-react-hooks": "6.0.0-rc.1" | ||||
|  | ||||
|   # Prettier | ||||
|   "prettier": "3.5.3" | ||||
|   "prettier-plugin-tailwindcss": "0.6.11" | ||||
|   "editorconfig-checker": "6.0.1" | ||||
|   "prettier": "3.6.2" | ||||
|   "prettier-plugin-tailwindcss": "0.6.14" | ||||
|   "editorconfig-checker": "6.1.0" | ||||
|  | ||||
|   # Storybook | ||||
|   "storybook": &storybook "9.0.0" | ||||
|   "storybook": &storybook "9.1.3" | ||||
|   "@storybook/addon-docs": *storybook | ||||
|   "@storybook/addon-a11y": *storybook | ||||
|   "@storybook/nextjs": *storybook | ||||
|   "@storybook/addon-themes": *storybook | ||||
|   "@storybook/test-runner": "0.22.0" | ||||
|   "@chromatic-com/storybook": "4.0.0" | ||||
|   "chromatic": "12.0.0" | ||||
|   "@storybook/test-runner": "0.23.0" | ||||
|   "@chromatic-com/storybook": "4.1.1" | ||||
|   "chromatic": "13.1.4" | ||||
|  | ||||
|   # Testing | ||||
|   "playwright": &playwright "1.52.0" | ||||
|   "playwright": &playwright "1.55.0" | ||||
|   "@playwright/test": *playwright | ||||
|   "axe-playwright": "2.1.0" | ||||
|   "start-server-and-test": "2.0.12" | ||||
|   "start-server-and-test": "2.0.13" | ||||
|  | ||||
|   # CSS | ||||
|   "postcss": "8.5.4" | ||||
|   "@tailwindcss/postcss": "4.1.8" | ||||
|   "postcss": "8.5.6" | ||||
|   "@tailwindcss/postcss": "4.1.12" | ||||
|   "@tailwindcss/typography": "0.5.16" | ||||
|   "tailwindcss": "4.1.8" | ||||
|   "tailwind-merge": "3.3.0" | ||||
|   "tailwindcss": "4.1.12" | ||||
|   "tailwind-merge": "3.3.1" | ||||
|   "clsx": "2.1.1" | ||||
|   "cva": "1.0.0-beta.4" | ||||
|   "@fontsource/montserrat": "5.2.5" | ||||
|   "@fontsource/montserrat": "5.2.6" | ||||
|  | ||||
| onlyBuiltDependencies: | ||||
|   - "@swc/core" | ||||
|   | ||||
| @@ -27,7 +27,11 @@ | ||||
|       "dependsOn": ["^lint:typescript-transit-node"] | ||||
|     }, | ||||
|     "lint:typescript": { | ||||
|       "dependsOn": ["lint:typescript-transit-node"] | ||||
|       "dependsOn": ["typegen", "lint:typescript-transit-node"] | ||||
|     }, | ||||
|     "typegen": { | ||||
|       "dependsOn": ["^typegen"], | ||||
|       "outputs": [] | ||||
|     }, | ||||
|     "dev": { | ||||
|       "cache": false, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user