mirror of
https://github.com/theoludwig/theoludwig.git
synced 2025-09-11 23:09:22 +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
|
timeout-minutes: 30
|
||||||
runs-on: "ubuntu-latest"
|
runs-on: "ubuntu-latest"
|
||||||
env:
|
env:
|
||||||
|
CI: "1"
|
||||||
|
TZ: "Europe/Paris"
|
||||||
DO_NOT_TRACK: "1"
|
DO_NOT_TRACK: "1"
|
||||||
TURBO_TELEMETRY_DISABLED: "1"
|
TURBO_TELEMETRY_DISABLED: "1"
|
||||||
NEXT_TELEMETRY_DISABLED: "1"
|
NEXT_TELEMETRY_DISABLED: "1"
|
||||||
|
STORYBOOK_DISABLE_TELEMETRY: "1"
|
||||||
steps:
|
steps:
|
||||||
- uses: "actions/checkout@v4.2.2"
|
- uses: "actions/checkout@v5.0.0"
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
10
.github/workflows/ci.yml
vendored
10
.github/workflows/ci.yml
vendored
@@ -16,8 +16,9 @@ jobs:
|
|||||||
DO_NOT_TRACK: "1"
|
DO_NOT_TRACK: "1"
|
||||||
TURBO_TELEMETRY_DISABLED: "1"
|
TURBO_TELEMETRY_DISABLED: "1"
|
||||||
NEXT_TELEMETRY_DISABLED: "1"
|
NEXT_TELEMETRY_DISABLED: "1"
|
||||||
|
STORYBOOK_DISABLE_TELEMETRY: "1"
|
||||||
steps:
|
steps:
|
||||||
- uses: "actions/checkout@v4.2.2"
|
- uses: "actions/checkout@v5.0.0"
|
||||||
|
|
||||||
- uses: "pnpm/action-setup@v4.1.0"
|
- uses: "pnpm/action-setup@v4.1.0"
|
||||||
|
|
||||||
@@ -40,10 +41,3 @@ jobs:
|
|||||||
- run: "node --run lint:prettier"
|
- run: "node --run lint:prettier"
|
||||||
- run: "node --run test"
|
- run: "node --run test"
|
||||||
- run: "node --run build"
|
- 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
|
# dependencies
|
||||||
node_modules
|
node_modules
|
||||||
.npm
|
.npm
|
||||||
|
.cache
|
||||||
package-lock.json
|
package-lock.json
|
||||||
.pnpm-store
|
.pnpm-store
|
||||||
|
.apt
|
||||||
.pnp
|
.pnp
|
||||||
.pnp.js
|
.pnp.js
|
||||||
.yarn/install-state.gz
|
.yarn/install-state.gz
|
||||||
@@ -15,12 +17,16 @@ coverage
|
|||||||
out/
|
out/
|
||||||
dist/
|
dist/
|
||||||
build/
|
build/
|
||||||
|
.swc/
|
||||||
|
.react-email/
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.pem
|
*.pem
|
||||||
|
*.bak
|
||||||
.turbo
|
.turbo
|
||||||
bin/
|
bin/
|
||||||
|
dump_*
|
||||||
|
|
||||||
# debug
|
# debug
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
@@ -30,6 +36,7 @@ yarn-error.log*
|
|||||||
# Storybook
|
# Storybook
|
||||||
*storybook.log
|
*storybook.log
|
||||||
storybook-static
|
storybook-static
|
||||||
|
/public
|
||||||
|
|
||||||
# IDEs and editors
|
# IDEs and editors
|
||||||
.idea
|
.idea
|
||||||
@@ -42,6 +49,7 @@ storybook-static
|
|||||||
|
|
||||||
# local env files
|
# local env files
|
||||||
.env
|
.env
|
||||||
|
.env.dev
|
||||||
.env.production
|
.env.production
|
||||||
.env*.local
|
.env*.local
|
||||||
|
|
||||||
@@ -50,4 +58,5 @@ storybook-static
|
|||||||
|
|
||||||
# typescript
|
# typescript
|
||||||
*.tsbuildinfo
|
*.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",
|
"dbaeumer.vscode-eslint",
|
||||||
"davidanson.vscode-markdownlint",
|
"davidanson.vscode-markdownlint",
|
||||||
"bradlc.vscode-tailwindcss",
|
"bradlc.vscode-tailwindcss",
|
||||||
"mikestead.dotenv",
|
|
||||||
"antfu.pnpm-catalog-lens",
|
"antfu.pnpm-catalog-lens",
|
||||||
"Lokalise.i18n-ally"
|
"Lokalise.i18n-ally"
|
||||||
]
|
]
|
||||||
|
16
.vscode/settings.json
vendored
16
.vscode/settings.json
vendored
@@ -9,11 +9,19 @@
|
|||||||
"source.fixAll": "explicit",
|
"source.fixAll": "explicit",
|
||||||
"source.organizeImports": "never"
|
"source.organizeImports": "never"
|
||||||
},
|
},
|
||||||
"tailwindCSS.experimental.configFile": "./configs/config-tailwind/styles.css",
|
"eslint.workingDirectories": [
|
||||||
"tailwindCSS.experimental.classRegex": [
|
{
|
||||||
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
|
"mode": "auto"
|
||||||
["cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
|
}
|
||||||
],
|
],
|
||||||
|
"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.localesPaths": ["./packages/i18n/src/translations/"],
|
||||||
"i18n-ally.keystyle": "nested",
|
"i18n-ally.keystyle": "nested",
|
||||||
"i18n-ally.sortKeys": false,
|
"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**! 🎉
|
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.
|
|
||||||
|
|
||||||
## Types of contributions
|
## Types of contributions
|
||||||
|
|
||||||
@@ -32,7 +28,7 @@ The commit message guidelines adheres to [Conventional Commits](https://www.conv
|
|||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
- [Node.js](https://nodejs.org/) >= v24.0.0 [(`nvm install 24`)](https://nvm.sh)
|
- [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/)
|
- [Docker](https://www.docker.com/)
|
||||||
|
|
||||||
### Installation
|
### 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 />
|
<hr />
|
||||||
|
|
||||||
## 📜 About
|
## About
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
## 📈 Statistics
|
## Statistics
|
||||||
|
|
||||||
<p align=center>
|
<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" />
|
<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 type { Preview } from "@storybook/nextjs"
|
||||||
import { NextIntlClientProvider } from "next-intl"
|
import { NextIntlClientProvider } from "next-intl"
|
||||||
import { ThemeProvider as NextThemeProvider } from "next-themes"
|
import { ThemeProvider as NextThemeProvider } from "next-themes"
|
||||||
import React from "react"
|
|
||||||
|
|
||||||
const preview: Preview = {
|
const preview: Preview = {
|
||||||
initialGlobals: {
|
initialGlobals: {
|
||||||
@@ -14,6 +13,9 @@ const preview: Preview = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
parameters: {
|
parameters: {
|
||||||
|
a11y: {
|
||||||
|
test: "error",
|
||||||
|
},
|
||||||
docs: {
|
docs: {
|
||||||
codePanel: true,
|
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/node": "catalog:",
|
||||||
"@types/react": "catalog:",
|
"@types/react": "catalog:",
|
||||||
"@types/react-dom": "catalog:",
|
"@types/react-dom": "catalog:",
|
||||||
"axe-playwright": "catalog:",
|
|
||||||
"chromatic": "catalog:",
|
"chromatic": "catalog:",
|
||||||
"eslint": "catalog:",
|
"eslint": "catalog:",
|
||||||
"start-server-and-test": "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 PNPM_HOME="/pnpm"
|
||||||
ENV PATH="$PNPM_HOME:$PATH"
|
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 TURBO_TELEMETRY_DISABLED=1
|
||||||
ENV NEXT_TELEMETRY_DISABLED=1
|
ENV NEXT_TELEMETRY_DISABLED=1
|
||||||
ENV DO_NOT_TRACK=1
|
ENV DO_NOT_TRACK=1
|
||||||
@@ -9,7 +9,7 @@ WORKDIR /usr/src/app
|
|||||||
|
|
||||||
FROM node-pnpm AS builder
|
FROM node-pnpm AS builder
|
||||||
COPY ./ ./
|
COPY ./ ./
|
||||||
RUN pnpm install --global turbo@2.5.3
|
RUN pnpm install --global turbo@2.5.6
|
||||||
RUN turbo prune @repo/website --docker
|
RUN turbo prune @repo/website --docker
|
||||||
|
|
||||||
FROM node-pnpm AS installer
|
FROM node-pnpm AS installer
|
||||||
@@ -34,7 +34,7 @@ ENV IS_STANDALONE=true
|
|||||||
|
|
||||||
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 applicationrunner
|
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 applicationrunner
|
||||||
USER 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 /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/standalone ./
|
||||||
COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/.next/static ./apps/website/.next/static
|
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 "@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 { Footer } from "@repo/ui/Layout/Footer"
|
||||||
import { Header } from "@repo/ui/Layout/Header"
|
import { Header } from "@repo/ui/Layout/Header"
|
||||||
import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme"
|
import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme"
|
||||||
import { VERSION } from "@repo/utils/constants"
|
import { VERSION } from "@repo/utils/constants"
|
||||||
import { setRequestLocale } from "next-intl/server"
|
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 MainLayout: React.FC<MainLayoutProps> = async (props) => {
|
||||||
const { children, params } = props
|
const { children, params } = props
|
||||||
|
|
||||||
const { locale } = await params
|
const { locale } = await params
|
||||||
// Enable static rendering
|
// Enable static rendering
|
||||||
setRequestLocale(locale)
|
setRequestLocale(locale as Locale)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider>
|
<ThemeProvider>
|
||||||
|
@@ -1,11 +1,13 @@
|
|||||||
import "@repo/config-tailwind/styles.css"
|
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 { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme"
|
||||||
import { setRequestLocale } from "next-intl/server"
|
import { setRequestLocale } from "next-intl/server"
|
||||||
|
|
||||||
interface CurriculumVitaeLayoutProps
|
interface CurriculumVitaeLayoutProps extends React.PropsWithChildren {
|
||||||
extends React.PropsWithChildren,
|
params: Promise<{
|
||||||
LocaleProps {}
|
locale: string
|
||||||
|
}>
|
||||||
|
}
|
||||||
|
|
||||||
const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async (
|
const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async (
|
||||||
props,
|
props,
|
||||||
@@ -14,7 +16,7 @@ const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async (
|
|||||||
|
|
||||||
const { locale } = await params
|
const { locale } = await params
|
||||||
// Enable static rendering
|
// Enable static rendering
|
||||||
setRequestLocale(locale)
|
setRequestLocale(locale as Locale)
|
||||||
|
|
||||||
return <ThemeProvider forcedTheme="light">{children}</ThemeProvider>
|
return <ThemeProvider forcedTheme="light">{children}</ThemeProvider>
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
import "@repo/config-tailwind/styles.css"
|
import "@repo/config-tailwind/styles.css"
|
||||||
import type { LocaleProps } from "@repo/i18n/routing"
|
|
||||||
import type { Locale } from "@repo/utils/constants"
|
import type { Locale } from "@repo/utils/constants"
|
||||||
import { LOCALES } from "@repo/utils/constants"
|
import { LOCALES } from "@repo/utils/constants"
|
||||||
import type { Metadata, Viewport } from "next"
|
import type { Metadata, Viewport } from "next"
|
||||||
@@ -19,9 +18,13 @@ export const viewport: Viewport = {
|
|||||||
|
|
||||||
export const generateMetadata = async ({
|
export const generateMetadata = async ({
|
||||||
params,
|
params,
|
||||||
}: LocaleProps): Promise<Metadata> => {
|
}: {
|
||||||
|
params: Promise<{
|
||||||
|
locale: string
|
||||||
|
}>
|
||||||
|
}): Promise<Metadata> => {
|
||||||
const { locale } = await params
|
const { locale } = await params
|
||||||
const t = await getTranslations({ locale })
|
const t = await getTranslations({ locale: locale as Locale })
|
||||||
const title = t("meta.title")
|
const title = t("meta.title")
|
||||||
const description = `${title} - ${t("meta.description")}`
|
const description = `${title} - ${t("meta.description")}`
|
||||||
const image = "/images/logo.webp"
|
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 LocaleLayout: React.FC<LocaleLayoutProps> = async (props) => {
|
||||||
const { children, params } = props
|
const { children, params } = props
|
||||||
|
|
||||||
const { locale } = await params
|
const { locale } = await params
|
||||||
// Enable static rendering
|
// Enable static rendering
|
||||||
setRequestLocale(locale)
|
setRequestLocale(locale as Locale)
|
||||||
|
|
||||||
const messages = await getMessages()
|
const messages = await getMessages()
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import typescriptESLint from "typescript-eslint"
|
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"],
|
files: ["**/*.ts", "**/*.tsx"],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: typescriptESLint.parser,
|
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": {
|
"scripts": {
|
||||||
"dev": "next dev --port 3000 --turbopack",
|
"dev": "next dev --port 3000 --turbopack",
|
||||||
"build": "next build",
|
"build": "next build --turbopack",
|
||||||
"start": "next start --port 3000",
|
"start": "next start --port 3000",
|
||||||
|
"typegen": "next typegen",
|
||||||
"lint:eslint": "eslint . --max-warnings 0",
|
"lint:eslint": "eslint . --max-warnings 0",
|
||||||
"lint:typescript": "tsc --noEmit"
|
"lint:typescript": "next typegen && tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@repo/blog": "workspace:*",
|
"@repo/blog": "workspace:*",
|
||||||
|
@@ -14,5 +14,5 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
"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 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(
|
export default typescriptESLint.config(
|
||||||
|
...configConventions,
|
||||||
|
reactHooksPlugin.configs.recommended,
|
||||||
|
reactPlugin.configs.flat.recommended,
|
||||||
{
|
{
|
||||||
ignores: [
|
ignores: [
|
||||||
".next",
|
".next",
|
||||||
"**/next.config.js",
|
"**/next.config.ts",
|
||||||
"**/eslint.config.js",
|
"**/eslint.config.js",
|
||||||
"**/tailwind.config.js",
|
"**/tailwind.config.js",
|
||||||
"**/postcss.config.js",
|
"**/postcss.config.js",
|
||||||
"**/kysely.config.ts",
|
"**/kysely.config.ts",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
...configConventions,
|
|
||||||
{
|
{
|
||||||
name: "config-eslint",
|
name: "config-eslint",
|
||||||
|
settings: {
|
||||||
|
react: {
|
||||||
|
version: "19.1.1",
|
||||||
|
},
|
||||||
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
"import-x": importX,
|
"@next/next": nextPlugin,
|
||||||
|
"import-x": importXPlugin,
|
||||||
},
|
},
|
||||||
rules: {
|
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": [
|
"import-x/extensions": [
|
||||||
"error",
|
"error",
|
||||||
"ignorePackages",
|
"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",
|
"import": "./eslint.config.js",
|
||||||
"require": "./eslint.config.js",
|
"require": "./eslint.config.js",
|
||||||
"default": "./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": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "catalog:",
|
|
||||||
"typescript-eslint": "catalog:",
|
"typescript-eslint": "catalog:",
|
||||||
"eslint": "catalog:",
|
"eslint": "catalog:",
|
||||||
"eslint-config-conventions": "catalog:",
|
"eslint-config-conventions": "catalog:",
|
||||||
"eslint-plugin-promise": "catalog:",
|
"eslint-plugin-promise": "catalog:",
|
||||||
"eslint-plugin-unicorn": "catalog:",
|
"eslint-plugin-unicorn": "catalog:",
|
||||||
"eslint-config-next": "catalog:",
|
|
||||||
"eslint-plugin-import-x": "catalog:",
|
"eslint-plugin-import-x": "catalog:",
|
||||||
|
"@next/eslint-plugin-next": "catalog:",
|
||||||
|
"eslint-plugin-react": "catalog:",
|
||||||
|
"eslint-plugin-react-hooks": "catalog:",
|
||||||
"typescript": "catalog:",
|
"typescript": "catalog:",
|
||||||
"globals": "catalog:"
|
"globals": "catalog:"
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
"allowImportingTsExtensions": true,
|
"allowImportingTsExtensions": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"jsx": "preserve",
|
"jsx": "preserve",
|
||||||
"incremental": true,
|
"incremental": false,
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
|
|
||||||
"target": "ESNext",
|
"target": "ESNext",
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
"version": "0.0.0-develop",
|
"version": "0.0.0-develop",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977",
|
"packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=24.0.0"
|
"node": ">=24.0.0"
|
||||||
},
|
},
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import typescriptESLint from "typescript-eslint"
|
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"],
|
files: ["**/*.ts", "**/*.tsx"],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: typescriptESLint.parser,
|
parser: typescriptESLint.parser,
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import typescriptESLint from "typescript-eslint"
|
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"],
|
files: ["**/*.ts", "**/*.tsx"],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: typescriptESLint.parser,
|
parser: typescriptESLint.parser,
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import typescriptESLint from "typescript-eslint"
|
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"],
|
files: ["**/*.ts", "**/*.tsx"],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: typescriptESLint.parser,
|
parser: typescriptESLint.parser,
|
||||||
|
@@ -15,7 +15,7 @@ export const BirthDate: React.FC<BirthDateProps> = () => {
|
|||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return t("home.about.birth-date.value", {
|
return t("home.about.birth-date.value", {
|
||||||
age,
|
age: age.toString(),
|
||||||
birthDate: BIRTH_DATE_STRING,
|
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/*"
|
- "configs/*"
|
||||||
- "packages/*"
|
- "packages/*"
|
||||||
|
|
||||||
|
catalogMode: "strict"
|
||||||
|
|
||||||
catalog:
|
catalog:
|
||||||
# Turborepo
|
# 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
|
# Utils
|
||||||
"mime": "4.0.7"
|
"mime": "4.0.7"
|
||||||
|
|
||||||
# React.js/Next.js
|
# React.js/Next.js
|
||||||
"next": &next "15.3.2"
|
"next": &next "15.5.2"
|
||||||
"next-intl": "4.1.0"
|
"next-intl": "4.3.5"
|
||||||
"next-themes": "0.4.6"
|
"next-themes": "0.4.6"
|
||||||
"react": "19.1.0"
|
"react": "19.1.1"
|
||||||
"react-dom": "19.1.0"
|
"react-dom": "19.1.1"
|
||||||
|
"@types/react": "19.1.12"
|
||||||
|
"@types/react-dom": "19.1.9"
|
||||||
"react-icons": "5.5.0"
|
"react-icons": "5.5.0"
|
||||||
"@types/react": "19.1.6"
|
|
||||||
"@types/react-dom": "19.1.5"
|
|
||||||
|
|
||||||
# Blog
|
# Blog
|
||||||
"@giscus/react": "3.1.0"
|
"@giscus/react": "3.1.0"
|
||||||
"gray-matter": "4.0.3"
|
"gray-matter": "4.0.3"
|
||||||
"katex": "0.16.22"
|
"katex": "0.16.22"
|
||||||
"next-mdx-remote": "5.0.0"
|
"next-mdx-remote": "5.0.0"
|
||||||
"@mdx-js/mdx": "3.1.0"
|
"@mdx-js/mdx": "3.1.1"
|
||||||
"rehype-katex": "7.0.1"
|
"rehype-katex": "7.0.1"
|
||||||
"rehype-raw": "7.0.0"
|
"rehype-raw": "7.0.0"
|
||||||
"rehype-slug": "6.0.0"
|
"rehype-slug": "6.0.0"
|
||||||
@@ -39,52 +46,47 @@ catalog:
|
|||||||
"markdownlint": "0.38.0"
|
"markdownlint": "0.38.0"
|
||||||
"markdownlint-rule-relative-links": "4.2.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
|
# ESLint
|
||||||
"globals": "16.2.0"
|
"globals": "16.3.0"
|
||||||
"typescript-eslint": "8.33.0"
|
"typescript-eslint": "8.41.0"
|
||||||
"@eslint/eslintrc": "3.3.1"
|
"eslint": "9.34.0"
|
||||||
"eslint": "9.27.0"
|
"eslint-config-conventions": "20.1.3"
|
||||||
"eslint-config-conventions": "19.2.0"
|
|
||||||
"eslint-plugin-promise": "7.2.1"
|
"eslint-plugin-promise": "7.2.1"
|
||||||
"eslint-plugin-unicorn": "59.0.1"
|
"eslint-plugin-unicorn": "60.0.0"
|
||||||
"eslint-config-next": *next
|
"eslint-plugin-import-x": "4.16.1"
|
||||||
"eslint-plugin-import-x": "4.13.3"
|
"@next/eslint-plugin-next": *next
|
||||||
|
"eslint-plugin-react": "7.37.5"
|
||||||
|
"eslint-plugin-react-hooks": "6.0.0-rc.1"
|
||||||
|
|
||||||
# Prettier
|
# Prettier
|
||||||
"prettier": "3.5.3"
|
"prettier": "3.6.2"
|
||||||
"prettier-plugin-tailwindcss": "0.6.11"
|
"prettier-plugin-tailwindcss": "0.6.14"
|
||||||
"editorconfig-checker": "6.0.1"
|
"editorconfig-checker": "6.1.0"
|
||||||
|
|
||||||
# Storybook
|
# Storybook
|
||||||
"storybook": &storybook "9.0.0"
|
"storybook": &storybook "9.1.3"
|
||||||
"@storybook/addon-docs": *storybook
|
"@storybook/addon-docs": *storybook
|
||||||
"@storybook/addon-a11y": *storybook
|
"@storybook/addon-a11y": *storybook
|
||||||
"@storybook/nextjs": *storybook
|
"@storybook/nextjs": *storybook
|
||||||
"@storybook/addon-themes": *storybook
|
"@storybook/addon-themes": *storybook
|
||||||
"@storybook/test-runner": "0.22.0"
|
"@storybook/test-runner": "0.23.0"
|
||||||
"@chromatic-com/storybook": "4.0.0"
|
"@chromatic-com/storybook": "4.1.1"
|
||||||
"chromatic": "12.0.0"
|
"chromatic": "13.1.4"
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
"playwright": &playwright "1.52.0"
|
"playwright": &playwright "1.55.0"
|
||||||
"@playwright/test": *playwright
|
"@playwright/test": *playwright
|
||||||
"axe-playwright": "2.1.0"
|
"start-server-and-test": "2.0.13"
|
||||||
"start-server-and-test": "2.0.12"
|
|
||||||
|
|
||||||
# CSS
|
# CSS
|
||||||
"postcss": "8.5.4"
|
"postcss": "8.5.6"
|
||||||
"@tailwindcss/postcss": "4.1.8"
|
"@tailwindcss/postcss": "4.1.12"
|
||||||
"@tailwindcss/typography": "0.5.16"
|
"@tailwindcss/typography": "0.5.16"
|
||||||
"tailwindcss": "4.1.8"
|
"tailwindcss": "4.1.12"
|
||||||
"tailwind-merge": "3.3.0"
|
"tailwind-merge": "3.3.1"
|
||||||
"clsx": "2.1.1"
|
"clsx": "2.1.1"
|
||||||
"cva": "1.0.0-beta.4"
|
"cva": "1.0.0-beta.4"
|
||||||
"@fontsource/montserrat": "5.2.5"
|
"@fontsource/montserrat": "5.2.6"
|
||||||
|
|
||||||
onlyBuiltDependencies:
|
onlyBuiltDependencies:
|
||||||
- "@swc/core"
|
- "@swc/core"
|
||||||
|
@@ -27,7 +27,11 @@
|
|||||||
"dependsOn": ["^lint:typescript-transit-node"]
|
"dependsOn": ["^lint:typescript-transit-node"]
|
||||||
},
|
},
|
||||||
"lint:typescript": {
|
"lint:typescript": {
|
||||||
"dependsOn": ["lint:typescript-transit-node"]
|
"dependsOn": ["typegen", "lint:typescript-transit-node"]
|
||||||
|
},
|
||||||
|
"typegen": {
|
||||||
|
"dependsOn": ["^typegen"],
|
||||||
|
"outputs": []
|
||||||
},
|
},
|
||||||
"dev": {
|
"dev": {
|
||||||
"cache": false,
|
"cache": false,
|
||||||
|
Reference in New Issue
Block a user