diff --git a/design-tokens/colors.dark.json b/design-tokens/colors.dark.json new file mode 100644 index 0000000..e935f00 --- /dev/null +++ b/design-tokens/colors.dark.json @@ -0,0 +1,218 @@ +{ + "colors": { + "surface": { + "brand": { + "name": "dark-surface-brand", + "value": "#343434", + "valueRgb": { + "r": 52, + "g": 52, + "b": 52, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 20, + "a": 1 + } + }, + "invert": { + "name": "dark-surface-invert", + "value": "#f1f1f1", + "valueRgb": { + "r": 241, + "g": 241, + "b": 241, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 95, + "a": 1 + } + }, + "secondary": { + "name": "dark-surface-secondary", + "value": "#afafaf", + "valueRgb": { + "r": 175, + "g": 175, + "b": 175, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 69, + "a": 1 + } + }, + "primary": { + "name": "dark-surface-primary", + "value": "#202020", + "valueRgb": { + "r": 32, + "g": 32, + "b": 32, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 13, + "a": 1 + } + } + }, + "button": { + "danger": { + "name": "dark-button-danger", + "value": "#e11d48", + "valueRgb": { + "r": 225, + "g": 29, + "b": 72, + "a": 1 + }, + "valueHsl": { + "h": 347, + "s": 77, + "l": 50, + "a": 1 + } + }, + "primary": { + "name": "dark-button-primary", + "value": "#bbf7d0", + "valueRgb": { + "r": 187, + "g": 247, + "b": 208, + "a": 1 + }, + "valueHsl": { + "h": 141, + "s": 79, + "l": 85, + "a": 1 + } + }, + "secondary": { + "name": "dark-button-secondary", + "value": "#60a5fa", + "valueRgb": { + "r": 96, + "g": 165, + "b": 250, + "a": 1 + }, + "valueHsl": { + "h": 213, + "s": 94, + "l": 68, + "a": 1 + } + }, + "brand": { + "name": "dark-button-brand", + "value": "#166534", + "valueRgb": { + "r": 22, + "g": 101, + "b": 52, + "a": 1 + }, + "valueHsl": { + "h": 143, + "s": 64, + "l": 24, + "a": 1 + } + }, + "invert": { + "name": "dark-button-invert", + "value": "#14532d", + "valueRgb": { + "r": 20, + "g": 83, + "b": 45, + "a": 1 + }, + "valueHsl": { + "h": 144, + "s": 61, + "l": 20, + "a": 1 + } + } + }, + "text": { + "primary": { + "name": "dark-text-primary", + "value": "#f1f1f1", + "valueRgb": { + "r": 241, + "g": 241, + "b": 241, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 95, + "a": 1 + } + }, + "secondary": { + "name": "dark-text-secondary", + "value": "#d3d3d3", + "valueRgb": { + "r": 211, + "g": 211, + "b": 211, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 83, + "a": 1 + } + }, + "brand": { + "name": "dark-text-brand", + "value": "#202020", + "valueRgb": { + "r": 32, + "g": 32, + "b": 32, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 13, + "a": 1 + } + }, + "invert": { + "name": "dark-text-invert", + "value": "#202020", + "valueRgb": { + "r": 32, + "g": 32, + "b": 32, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 13, + "a": 1 + } + } + } + } +} \ No newline at end of file diff --git a/design-tokens/colors.json b/design-tokens/colors.json new file mode 100644 index 0000000..78b5a17 --- /dev/null +++ b/design-tokens/colors.json @@ -0,0 +1,218 @@ +{ + "colors": { + "surface": { + "primary": { + "name": "surface-primary", + "value": "#f1f1f1", + "valueRgb": { + "r": 241, + "g": 241, + "b": 241, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 95, + "a": 1 + } + }, + "secondary": { + "name": "surface-secondary", + "value": "#343434", + "valueRgb": { + "r": 52, + "g": 52, + "b": 52, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 20, + "a": 1 + } + }, + "brand": { + "name": "surface-brand", + "value": "#afafaf", + "valueRgb": { + "r": 175, + "g": 175, + "b": 175, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 69, + "a": 1 + } + }, + "invert": { + "name": "surface-invert", + "value": "#202020", + "valueRgb": { + "r": 32, + "g": 32, + "b": 32, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 13, + "a": 1 + } + } + }, + "button": { + "primary": { + "name": "button-primary", + "value": "#14532d", + "valueRgb": { + "r": 20, + "g": 83, + "b": 45, + "a": 1 + }, + "valueHsl": { + "h": 144, + "s": 61, + "l": 20, + "a": 1 + } + }, + "secondary": { + "name": "button-secondary", + "value": "#2563eb", + "valueRgb": { + "r": 37, + "g": 99, + "b": 235, + "a": 1 + }, + "valueHsl": { + "h": 221, + "s": 83, + "l": 53, + "a": 1 + } + }, + "brand": { + "name": "button-brand", + "value": "#166534", + "valueRgb": { + "r": 22, + "g": 101, + "b": 52, + "a": 1 + }, + "valueHsl": { + "h": 143, + "s": 64, + "l": 24, + "a": 1 + } + }, + "danger": { + "name": "button-danger", + "value": "#e11d48", + "valueRgb": { + "r": 225, + "g": 29, + "b": 72, + "a": 1 + }, + "valueHsl": { + "h": 347, + "s": 77, + "l": 50, + "a": 1 + } + }, + "invert": { + "name": "button-invert", + "value": "#f0fdf4", + "valueRgb": { + "r": 240, + "g": 253, + "b": 244, + "a": 1 + }, + "valueHsl": { + "h": 138, + "s": 76, + "l": 97, + "a": 1 + } + } + }, + "text": { + "primary": { + "name": "text-primary", + "value": "#202020", + "valueRgb": { + "r": 32, + "g": 32, + "b": 32, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 13, + "a": 1 + } + }, + "secondary": { + "name": "text-secondary", + "value": "#7c7c7c", + "valueRgb": { + "r": 124, + "g": 124, + "b": 124, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 49, + "a": 1 + } + }, + "brand": { + "name": "text-brand", + "value": "#202020", + "valueRgb": { + "r": 32, + "g": 32, + "b": 32, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 13, + "a": 1 + } + }, + "invert": { + "name": "text-invert", + "value": "#f1f1f1", + "valueRgb": { + "r": 241, + "g": 241, + "b": 241, + "a": 1 + }, + "valueHsl": { + "h": 0, + "s": 0, + "l": 95, + "a": 1 + } + } + } + } +} \ No newline at end of file diff --git a/design-tokens/tokens/variables-dark.css b/design-tokens/tokens/variables-dark.css new file mode 100644 index 0000000..43a234f --- /dev/null +++ b/design-tokens/tokens/variables-dark.css @@ -0,0 +1,20 @@ +/** + * Do not edit directly + * Generated on Thu, 21 Dec 2023 10:01:10 GMT + */ + +[data-theme="dark"] { + --colors-surface-brand: #343434; + --colors-surface-invert: #f1f1f1; + --colors-surface-secondary: #afafaf; + --colors-surface-primary: #202020; + --colors-button-danger: #e11d48; + --colors-button-primary: #bbf7d0; + --colors-button-secondary: #60a5fa; + --colors-button-brand: #166534; + --colors-button-invert: #14532d; + --colors-text-primary: #f1f1f1; + --colors-text-secondary: #d3d3d3; + --colors-text-brand: #202020; + --colors-text-invert: #202020; +} diff --git a/design-tokens/tokens/variables.css b/design-tokens/tokens/variables.css new file mode 100644 index 0000000..03e57d5 --- /dev/null +++ b/design-tokens/tokens/variables.css @@ -0,0 +1,68 @@ +/** + * Do not edit directly + * Generated on Thu, 21 Dec 2023 10:01:10 GMT + */ + +:root { + --colors-surface-primary: #f1f1f1; + --colors-surface-secondary: #343434; + --colors-surface-brand: #afafaf; + --colors-surface-invert: #202020; + --colors-button-primary: #14532d; + --colors-button-secondary: #2563eb; + --colors-button-brand: #166534; + --colors-button-danger: #e11d48; + --colors-button-invert: #f0fdf4; + --colors-text-primary: #202020; + --colors-text-secondary: #7c7c7c; + --colors-text-brand: #202020; + --colors-text-invert: #f1f1f1; + --font-mobile-title-lg-size: 2.1875rem; + --font-mobile-title-lg-weight: 400; + --font-mobile-title-lg-line-height: 1.1; + --font-mobile-title-lg-letter-spacing: 0; + --font-mobile-title-md-size: 2.1875rem; + --font-mobile-title-md-weight: 400; + --font-mobile-title-md-line-height: 1.1; + --font-mobile-title-md-letter-spacing: 0; + --font-mobile-title-sm-size: 1.625rem; + --font-mobile-title-sm-weight: 400; + --font-mobile-title-sm-line-height: 1.25; + --font-mobile-title-sm-letter-spacing: 0; + --font-mobile-body-lg-size: 1.4375rem; + --font-mobile-body-lg-weight: 400; + --font-mobile-body-lg-line-height: 1.35; + --font-mobile-body-lg-letter-spacing: 0; + --font-mobile-body-md-size: 1.125rem; + --font-mobile-body-md-weight: 400; + --font-mobile-body-md-line-height: 1.4; + --font-mobile-body-md-letter-spacing: 0; + --font-mobile-body-sm-size: 0.9375rem; + --font-mobile-body-sm-weight: 400; + --font-mobile-body-sm-line-height: 1.45; + --font-mobile-body-sm-letter-spacing: 0; + --font-desktop-title-lg-size: 4.75rem; + --font-desktop-title-lg-weight: 400; + --font-desktop-title-lg-line-height: 1; + --font-desktop-title-lg-letter-spacing: 0; + --font-desktop-title-md-size: 3.8125rem; + --font-desktop-title-md-weight: 400; + --font-desktop-title-md-line-height: 1.15; + --font-desktop-title-md-letter-spacing: 0; + --font-desktop-title-sm-size: 2.4375rem; + --font-desktop-title-sm-weight: 400; + --font-desktop-title-sm-line-height: 1.2; + --font-desktop-title-sm-letter-spacing: 0; + --font-desktop-body-lg-size: 1.5625rem; + --font-desktop-body-lg-weight: 400; + --font-desktop-body-lg-line-height: 1.35; + --font-desktop-body-lg-letter-spacing: 0; + --font-desktop-body-md-size: 1.25rem; + --font-desktop-body-md-weight: 400; + --font-desktop-body-md-line-height: 1.45; + --font-desktop-body-md-letter-spacing: 0; + --font-desktop-body-sm-size: 1rem; + --font-desktop-body-sm-weight: 400; + --font-desktop-body-sm-line-height: 1.45; + --font-desktop-body-sm-letter-spacing: 0; +} diff --git a/design-tokens/typographies.json b/design-tokens/typographies.json new file mode 100644 index 0000000..bd45f2f --- /dev/null +++ b/design-tokens/typographies.json @@ -0,0 +1,112 @@ +{ + "typography": { + "mobileTitleLg": { + "value": { + "fontFamily": "Actor", + "fontSize": "2.1875rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.1 + } + }, + "mobileTitleMd": { + "value": { + "fontFamily": "Actor", + "fontSize": "2.1875rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.1 + } + }, + "mobileTitleSm": { + "value": { + "fontFamily": "Actor", + "fontSize": "1.625rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.25 + } + }, + "mobileBodyLg": { + "value": { + "fontFamily": "Actor", + "fontSize": "1.4375rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.35 + } + }, + "mobileBodyMd": { + "value": { + "fontFamily": "Actor", + "fontSize": "1.125rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.4 + } + }, + "mobileBodySm": { + "value": { + "fontFamily": "Actor", + "fontSize": "0.9375rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.45 + } + }, + "desktopTitleLg": { + "value": { + "fontFamily": "Actor", + "fontSize": "4.75rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1 + } + }, + "desktopTitleMd": { + "value": { + "fontFamily": "Actor", + "fontSize": "3.8125rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.15 + } + }, + "desktopTitleSm": { + "value": { + "fontFamily": "Actor", + "fontSize": "2.4375rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.2 + } + }, + "desktopBodyLg": { + "value": { + "fontFamily": "Actor", + "fontSize": "1.5625rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.35 + } + }, + "desktopBodyMd": { + "value": { + "fontFamily": "Actor", + "fontSize": "1.25rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.45 + } + }, + "desktopBodySm": { + "value": { + "fontFamily": "Actor", + "fontSize": "1rem", + "fontWeight": 400, + "letterSpacing": 0, + "lineHeight": 1.45 + } + } + } +} \ No newline at end of file diff --git a/next.config.js b/next.config.js index b772178..8738c47 100644 --- a/next.config.js +++ b/next.config.js @@ -4,14 +4,7 @@ const nextConfig = { images: { formats: ['image/avif', 'image/webp'], - remotePatterns: [ - { - protocol: 'https', - hostname: 'i.dummyjson.com', - port: '', - pathname: '/data/**' - } - ] + remotePatterns: [] }, trailingSlash: true, reactStrictMode: true, diff --git a/package-lock.json b/package-lock.json index f8cacda..0cb3701 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "archetype-next-js", + "name": "@runroom/starter-next-js", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "archetype-next-js", + "name": "@runroom/starter-next-js", "version": "1.0.0", "license": "MIT", "dependencies": { @@ -19,7 +19,6 @@ "i18next": "23.7.16", "i18next-resources-to-backend": "1.2.0", "next": "14.0.4", - "next-auth": "4.24.5", "next-i18n-router": "5.2.0", "next-i18next": "15.2.0", "react": "18.2.0", @@ -39,7 +38,6 @@ "@testing-library/user-event": "14.5.2", "@types/cors": "2.8.17", "@types/express": "4.17.21", - "@types/jsonwebtoken": "9.0.5", "@types/uuid": "9.0.7", "@typescript-eslint/eslint-plugin": "6.19.0", "@typescript-eslint/parser": "6.19.0", @@ -54,7 +52,6 @@ "eslint-plugin-cypress": "2.15.1", "express": "4.18.2", "jsdom": "23.2.0", - "jsonwebtoken": "9.0.2", "msw": "2.0.12", "next-router-mock": "0.9.11", "npm-run-all": "4.1.5", @@ -239,18 +236,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -612,15 +597,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", @@ -1627,9 +1603,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", "cpu": [ "ppc64" ], @@ -1643,9 +1619,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -1659,9 +1635,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -1675,9 +1651,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -1691,9 +1667,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], @@ -1707,9 +1683,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -1723,9 +1699,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -1739,9 +1715,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -1755,9 +1731,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -1771,9 +1747,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -1787,9 +1763,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -1803,9 +1779,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -1819,9 +1795,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -1835,9 +1811,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -1851,9 +1827,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -1867,9 +1843,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -1883,9 +1859,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -1899,9 +1875,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -1915,9 +1891,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -1931,9 +1907,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -1947,9 +1923,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -1963,9 +1939,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -1979,9 +1955,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -2041,6 +2017,55 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", @@ -2080,6 +2105,28 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -2251,9 +2298,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", - "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2508,14 +2555,6 @@ "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", "dev": true }, - "node_modules/@panva/hkdf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", - "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2527,9 +2566,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", "cpu": [ "arm" ], @@ -2540,9 +2579,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", "cpu": [ "arm64" ], @@ -2553,9 +2592,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", "cpu": [ "arm64" ], @@ -2566,9 +2605,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", "cpu": [ "x64" ], @@ -2579,9 +2618,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", "cpu": [ "arm" ], @@ -2592,9 +2631,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", "cpu": [ "arm64" ], @@ -2605,9 +2644,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", "cpu": [ "arm64" ], @@ -2618,9 +2657,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", "cpu": [ "riscv64" ], @@ -2631,9 +2670,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", "cpu": [ "x64" ], @@ -2644,9 +2683,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", "cpu": [ "x64" ], @@ -2657,9 +2696,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", "cpu": [ "arm64" ], @@ -2670,9 +2709,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", "cpu": [ "ia32" ], @@ -2683,9 +2722,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", "cpu": [ "x64" ], @@ -2879,9 +2918,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.0.tgz", - "integrity": "sha512-Jh4t/593gxs0lJZ/z3NnasKlplXT2f+4y/LZYuaKZW5KAaiVFL/fThhs+17EbUd53jUVJ0QudYCBGbN/psvaqg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.1.tgz", + "integrity": "sha512-irBNt5094vHloql4QzY8RdeI8Tns2kGsaiJ/m6jENWx9xCz/m/F4gKQ1dAailFmpL0Id9tgWLqZbTUO4SINM/Q==", "dev": true }, "node_modules/@sinclair/typebox": { @@ -2983,15 +3022,6 @@ "node": ">=14" } }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, "node_modules/@testing-library/jest-dom": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.2.0.tgz", @@ -3249,15 +3279,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", - "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -3521,30 +3542,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { "version": "6.19.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", @@ -4075,18 +4072,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4151,12 +4136,12 @@ "dev": true }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "node_modules/array-buffer-byte-length": { @@ -4580,13 +4565,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -4666,12 +4650,6 @@ "node": "*" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5214,6 +5192,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -5225,9 +5204,9 @@ "dev": true }, "node_modules/core-js": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.0.tgz", - "integrity": "sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", + "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5517,9 +5496,9 @@ } }, "node_modules/cypress/node_modules/@types/node": { - "version": "18.19.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz", - "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==", + "version": "18.19.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.9.tgz", + "integrity": "sha512-oZFKlC8l5YtzGQNT4zC2PiSSKzQVZ8bAwwd+EYdPLtyk0nSEq6O16SkK+rkkT2eflDAbormJgEF3QnH3oDrTSw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -5820,15 +5799,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5836,9 +5806,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.639", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz", - "integrity": "sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==", + "version": "1.4.643", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.643.tgz", + "integrity": "sha512-QHscvvS7gt155PtoRC0dR2ilhL8E9LHhfTQEq1uD5AL0524rBLAwpAREFH06f87/e45B9XkR6Ki5dbhbCsVEIg==", "dev": true }, "node_modules/emoji-regex": { @@ -6064,9 +6034,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, "bin": { @@ -6076,29 +6046,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/escalade": { @@ -6346,6 +6316,33 @@ "eslint": ">= 3.2.1" } }, + "node_modules/eslint-plugin-cypress/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-cypress/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-es-x": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", @@ -6398,6 +6395,16 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -6419,6 +6426,18 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -6458,6 +6477,37 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-n": { "version": "16.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", @@ -6487,6 +6537,59 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-n/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", @@ -6542,6 +6645,16 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -6554,6 +6667,18 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -6608,6 +6733,55 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -7396,6 +7570,28 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -7456,18 +7652,12 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/globalthis": { @@ -8496,14 +8686,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jose": { - "version": "4.15.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", - "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -8645,21 +8827,21 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, "node_modules/jsonfile": { @@ -8674,28 +8856,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dev": true, - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, "node_modules/jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -8726,27 +8886,6 @@ "node": ">=4.0" } }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -8915,42 +9054,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -9072,12 +9175,6 @@ "yallist": "^3.0.2" } }, - "node_modules/lru-cache/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -9240,15 +9337,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -9443,41 +9543,6 @@ } } }, - "node_modules/next-auth": { - "version": "4.24.5", - "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.5.tgz", - "integrity": "sha512-3RafV3XbfIKk6rF6GlLE4/KxjTcuMCifqrmD+98ejFq73SRoj2rmzoca8u764977lH/Q7jo6Xu6yM+Re1Mz/Og==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@panva/hkdf": "^1.0.2", - "cookie": "^0.5.0", - "jose": "^4.11.4", - "oauth": "^0.9.15", - "openid-client": "^5.4.0", - "preact": "^10.6.3", - "preact-render-to-string": "^5.1.19", - "uuid": "^8.3.2" - }, - "peerDependencies": { - "next": "^12.2.5 || ^13 || ^14", - "nodemailer": "^6.6.5", - "react": "^17.0.2 || ^18", - "react-dom": "^17.0.2 || ^18" - }, - "peerDependenciesMeta": { - "nodemailer": { - "optional": true - } - } - }, - "node_modules/next-auth/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/next-i18n-router": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/next-i18n-router/-/next-i18n-router-5.2.0.tgz", @@ -9694,6 +9759,16 @@ "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/npm-run-all/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -9757,6 +9832,18 @@ "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -9832,11 +9919,6 @@ "node": ">=8" } }, - "node_modules/oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9846,14 +9928,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -9979,14 +10053,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -10023,31 +10089,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openid-client": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.4.tgz", - "integrity": "sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA==", - "dependencies": { - "jose": "^4.15.4", - "lru-cache": "^6.0.0", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/openid-client/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -11197,31 +11238,6 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/preact": { - "version": "10.19.3", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.3.tgz", - "integrity": "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, - "node_modules/preact-render-to-string": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", - "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", - "dependencies": { - "pretty-format": "^3.8.0" - }, - "peerDependencies": { - "preact": ">=10" - } - }, - "node_modules/preact-render-to-string/node_modules/pretty-format": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", - "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -11720,9 +11736,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "node_modules/rimraf": { @@ -11740,30 +11756,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -11776,19 +11772,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, @@ -11966,6 +11962,12 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -12563,6 +12565,16 @@ "node": ">=12.0.0" } }, + "node_modules/style-dictionary/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/style-dictionary/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -12606,16 +12618,16 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/style-dictionary/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/style-dictionary/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, "node_modules/styled-jsx": { @@ -12741,21 +12753,6 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "node_modules/stylelint/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/stylelint/node_modules/brace-expansion/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -12804,21 +12801,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/stylelint/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -13253,6 +13235,18 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -13317,9 +13311,9 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -13600,9 +13594,9 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", "dev": true, "dependencies": { "esbuild": "^0.19.3", @@ -14301,9 +14295,10 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index 5466829..5bd9a4d 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { - "name": "archetype-next-js", - "description": "Runroom NextJS Archetype", + "name": "@runroom/starter-next-js", + "description": "Runroom NextJS Starter", "version": "1.0.0", - "author": "@runroom", - "license": "MIT", + "author": "@runroom", + "license": "MIT", "private": true, "scripts": { "dev": "next dev", @@ -24,9 +24,9 @@ "lint:prettier": "prettier --check .docker .github src tsconfig.json .eslintrc.js stylelint.config.js postcss.config.js prettier.config.js cypress.config.ts tests next.config.js i18nConfig.ts vitest.config.ts", "lint:stylelint": "stylelint \"src/**/*.css\"" }, - "engines": { - "node": ">=20" - }, + "engines": { + "node": ">=20" + }, "dependencies": { "@hookform/resolvers": "3.3.4", "@tanstack/query-core": "5.17.10", @@ -38,7 +38,6 @@ "i18next": "23.7.16", "i18next-resources-to-backend": "1.2.0", "next": "14.0.4", - "next-auth": "4.24.5", "next-i18n-router": "5.2.0", "next-i18next": "15.2.0", "react": "18.2.0", @@ -58,7 +57,6 @@ "@testing-library/user-event": "14.5.2", "@types/cors": "2.8.17", "@types/express": "4.17.21", - "@types/jsonwebtoken": "9.0.5", "@types/uuid": "9.0.7", "@typescript-eslint/eslint-plugin": "6.19.0", "@typescript-eslint/parser": "6.19.0", @@ -73,7 +71,6 @@ "eslint-plugin-cypress": "2.15.1", "express": "4.18.2", "jsdom": "23.2.0", - "jsonwebtoken": "9.0.2", "msw": "2.0.12", "next-router-mock": "0.9.11", "npm-run-all": "4.1.5", diff --git a/src/Shared/application/RQHydrate.tsx b/src/Shared/application/RQHydrate.tsx new file mode 100644 index 0000000..e55c2cb --- /dev/null +++ b/src/Shared/application/RQHydrate.tsx @@ -0,0 +1,7 @@ +'use client'; + +import { HydrationBoundary, HydrationBoundaryProps } from '@tanstack/react-query'; + +const RQHydrate = (props: HydrationBoundaryProps) => ; + +export { RQHydrate }; diff --git a/src/Shared/application/RQProvider.tsx b/src/Shared/application/RQProvider.tsx new file mode 100644 index 0000000..6cdaea5 --- /dev/null +++ b/src/Shared/application/RQProvider.tsx @@ -0,0 +1,19 @@ +'use client'; +import { PropsWithChildren, useState } from 'react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; + +const RQProvider = ({ children }: PropsWithChildren) => { + const [queryClient] = useState( + () => + new QueryClient({ + defaultOptions: { + queries: { + staleTime: 10000 + } + } + }) + ); + return {children}; +}; + +export { RQProvider }; diff --git a/src/Shared/application/TranslationsProvider.tsx b/src/Shared/application/TranslationsProvider.tsx new file mode 100644 index 0000000..893a8db --- /dev/null +++ b/src/Shared/application/TranslationsProvider.tsx @@ -0,0 +1,46 @@ +'use client'; + +import { I18nextProvider } from 'react-i18next'; +import { ReactNode, useEffect, useState } from 'react'; +import initTranslations from '@/app/i18n'; +import { i18n as i18nInterface } from 'i18next'; + +let i18n: i18nInterface; + +export function TranslationsProvider({ + children, + locale, + namespaces +}: { + children: ReactNode; + locale: string; + namespaces: string[]; +}) { + const [instance, setInstance] = useState(i18n); + + useEffect(() => { + const init = async () => { + if (!i18n) { + const newInstance = await initTranslations(locale, namespaces); + i18n = newInstance; + setInstance(newInstance); + } else { + if (i18n.language !== locale) { + i18n.changeLanguage(locale); + } + } + }; + + init(); + }, [locale, namespaces]); + + if (!instance) { + return null; + } + + return ( + + {children} + + ); +} diff --git a/src/Shared/application/index.ts b/src/Shared/application/index.ts new file mode 100644 index 0000000..66ffdc8 --- /dev/null +++ b/src/Shared/application/index.ts @@ -0,0 +1,3 @@ +export * from './TranslationsProvider'; +export * from './RQHydrate'; +export * from './RQProvider'; diff --git a/src/Shared/domain/HttpCodes.ts b/src/Shared/domain/HttpCodes.ts new file mode 100644 index 0000000..6464c20 --- /dev/null +++ b/src/Shared/domain/HttpCodes.ts @@ -0,0 +1,10 @@ +export enum HttpCodes { + ok = 200, + noContent = 204, + badRequest = 400, + unauthorized = 401, + forbidden = 403, + notFound = 404, + unprocessableEntity = 422, + serverError = 500 +} diff --git a/src/Shared/domain/MessagesModel.ts b/src/Shared/domain/MessagesModel.ts new file mode 100644 index 0000000..4cbe559 --- /dev/null +++ b/src/Shared/domain/MessagesModel.ts @@ -0,0 +1,4 @@ +export interface MessagesModel { + name: string | null; + message: string; +} diff --git a/src/Shared/domain/ServerError.ts b/src/Shared/domain/ServerError.ts new file mode 100644 index 0000000..9033987 --- /dev/null +++ b/src/Shared/domain/ServerError.ts @@ -0,0 +1,3 @@ +export interface ServerError { + errorMessage: string; +} diff --git a/src/Shared/domain/ValidationError.ts b/src/Shared/domain/ValidationError.ts new file mode 100644 index 0000000..5427bc1 --- /dev/null +++ b/src/Shared/domain/ValidationError.ts @@ -0,0 +1,4 @@ +export interface ValidationError { + name: string; + message: string; +} diff --git a/src/Shared/domain/index.ts b/src/Shared/domain/index.ts new file mode 100644 index 0000000..bacf5bd --- /dev/null +++ b/src/Shared/domain/index.ts @@ -0,0 +1,4 @@ +export * from './HttpCodes'; +export * from './MessagesModel'; +export * from './ValidationError'; +export * from './ServerError'; diff --git a/src/Shared/infrastructure/dataFetch.ts b/src/Shared/infrastructure/dataFetch.ts new file mode 100644 index 0000000..3a68745 --- /dev/null +++ b/src/Shared/infrastructure/dataFetch.ts @@ -0,0 +1,27 @@ +import z from 'zod'; + +import { HttpError, processErrors, safeFetch } from '@/Shared/infrastructure'; +import { ServerError, ValidationError } from '@/Shared/domain'; + +const apiUrl = process.env.NEXT_PUBLIC_API_BASE_URL; + +export const submitDataFromForm = ( + successSchema: z.Schema, + path: string, + data: object +): Promise => + safeFetch(successSchema, `${apiUrl}${path}`, { + headers: { 'Content-Type': 'application/json' }, + method: 'POST', + body: JSON.stringify(data) + }).catch(async error => { + if (error instanceof HttpError) { + const processedError = await processErrors(error); + + if (processedError) { + return processedError; + } + } + + throw error; + }); diff --git a/src/Shared/infrastructure/handleErrors.ts b/src/Shared/infrastructure/handleErrors.ts new file mode 100644 index 0000000..28dd708 --- /dev/null +++ b/src/Shared/infrastructure/handleErrors.ts @@ -0,0 +1,57 @@ +import z from 'zod'; + +import { HttpError } from '@/Shared/infrastructure'; +import { ValidationError, HttpCodes, ServerError } from '@/Shared/domain'; + +export const processErrors = (error: HttpError) => { + if (error.response.status === HttpCodes.unprocessableEntity) { + return extractUnprocessableEntityResponse(error.response); + } else if (error.response.status === HttpCodes.badRequest) { + return extractBadRequestResponse(error.response); + } + + throw new Error('Unprocessed error'); +}; + +export const extractUnprocessableEntityResponse = async ( + response: Response +): Promise => { + const schema = z.array( + z.object({ + name: z.string(), + message: z.string() + }) + ); + + if (response.status === HttpCodes.unprocessableEntity) { + const data = await response.json(); + const result = schema.safeParse(data); + + if (!result.success) { + throw new Error('TODO ERROR !result.success'); + } + + return result.data; + } + + throw new Error('TODO extractUnprocessableEntityResponse'); +}; + +export const extractBadRequestResponse = async (response: Response): Promise => { + const schema = z.object({ + errorMessage: z.string() + }); + + if (response.status === HttpCodes.badRequest) { + const data = await response.json(); + const result = schema.safeParse(data); + + if (!result.success) { + throw new Error('TODO ERROR !result.success'); + } + + return result.data; + } + + throw new Error('TODO extractBadRequestResponse'); +}; diff --git a/src/Shared/infrastructure/index.ts b/src/Shared/infrastructure/index.ts new file mode 100644 index 0000000..b2f60c7 --- /dev/null +++ b/src/Shared/infrastructure/index.ts @@ -0,0 +1,3 @@ +export * from './safeFetch'; +export * from './handleErrors'; +export * from './dataFetch'; diff --git a/src/Shared/infrastructure/safeFetch.ts b/src/Shared/infrastructure/safeFetch.ts new file mode 100644 index 0000000..c45918b --- /dev/null +++ b/src/Shared/infrastructure/safeFetch.ts @@ -0,0 +1,29 @@ +import z from 'zod'; + +export class HttpError { + constructor(readonly response: Response) {} +} + +export const safeFetch = async ( + schema: z.Schema, + input: RequestInfo, + init?: RequestInit +): Promise => { + const response = await fetch(input, init); + + if (!response.ok) { + throw new HttpError(response); + } + + const data = await response.json().catch(() => { + throw new Error('TODO ERROR !response.json()'); + }); + + const result = schema.safeParse(data); + + if (!result.success) { + throw new Error('TODO ERROR !result.success'); + } + + return result.data; +}; diff --git a/src/Shared/ui/attachFormErrors.ts b/src/Shared/ui/attachFormErrors.ts new file mode 100644 index 0000000..a8bbac2 --- /dev/null +++ b/src/Shared/ui/attachFormErrors.ts @@ -0,0 +1,26 @@ +import { MessagesModel } from '@/Shared/domain'; +import { FieldValues, Path, UseFormReturn } from 'react-hook-form'; + +export const attachFormErrors = ( + form: UseFormReturn, + errors: MessagesModel[] | undefined = [] +): boolean => { + let errorCount = 0; + + errors.forEach(error => { + if (!error.name) return; + + errorCount++; + + form.setError( + error.name as Path, + { + type: 'server', + message: error.message + }, + { shouldFocus: true } + ); + }); + + return errorCount > 0; +}; diff --git a/src/Shared/ui/components/LanguageSwitcher/LanguageSwitcher.module.css b/src/Shared/ui/components/LanguageSwitcher/LanguageSwitcher.module.css new file mode 100644 index 0000000..4d1a399 --- /dev/null +++ b/src/Shared/ui/components/LanguageSwitcher/LanguageSwitcher.module.css @@ -0,0 +1,34 @@ +.language-switcher { + display: flex; + justify-content: center; + align-items: center; + min-height: var(--language-bar-height); + width: 100%; +} + +.language-switcher ul { + display: flex; +} + +.language-switcher li { + list-style: none; + margin: 0 0.5rem; +} + +.language-switcher li a { + color: var(--color-text); + text-decoration: none; + font-size: 1rem; + font-weight: 500; + text-transform: uppercase; + transition: color 0.2s ease-in-out; + + &:hover { + text-decoration: underline; + } + + &.active { + font-weight: 700; + text-decoration: underline; + } +} diff --git a/src/Shared/ui/components/LanguageSwitcher/LanguageSwitcher.tsx b/src/Shared/ui/components/LanguageSwitcher/LanguageSwitcher.tsx new file mode 100644 index 0000000..02aacd2 --- /dev/null +++ b/src/Shared/ui/components/LanguageSwitcher/LanguageSwitcher.tsx @@ -0,0 +1,50 @@ +'use client'; +import { usePathname, useRouter } from 'next/navigation'; +import { useTranslation } from 'react-i18next'; +import i18nConfig from 'i18nConfig'; + +import styles from './LanguageSwitcher.module.css'; + +export const LanguageSwitcher = (): JSX.Element => { + const { i18n } = useTranslation(); + const languages = i18nConfig.locales; + const currentLocale = i18n.language; + + const router = useRouter(); + const currentPathname = usePathname() || ''; + + const handleLanguageChange = (e: React.MouseEvent) => { + e.preventDefault(); + const locale = e.currentTarget.dataset.value ?? 'en'; + + if (currentLocale === i18nConfig.defaultLocale && !i18nConfig.prefixDefault) { + router.push(`/${locale}${currentPathname}`); + } else { + router.push(currentPathname.replace(`/${currentLocale}`, `/${locale}`)); + } + + router.refresh(); + }; + + return ( +
+
    + {languages.map(language => ( +
  • + +
  • + ))} +
+
+ ); +}; diff --git a/src/Shared/ui/components/LanguageSwitcher/index.ts b/src/Shared/ui/components/LanguageSwitcher/index.ts new file mode 100644 index 0000000..de458cc --- /dev/null +++ b/src/Shared/ui/components/LanguageSwitcher/index.ts @@ -0,0 +1 @@ +export * from './LanguageSwitcher'; diff --git a/src/Shared/ui/components/Loader/Loader.module.css b/src/Shared/ui/components/Loader/Loader.module.css new file mode 100644 index 0000000..6b55794 --- /dev/null +++ b/src/Shared/ui/components/Loader/Loader.module.css @@ -0,0 +1,51 @@ +.loader-wrapper { + position: relative; + height: 100%; + width: 100%; +} + +.spinner { + height: 100%; + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 9999; +} + +.spinner--target { + position: absolute; +} + +.spinner__loader { + display: inline-block; + left: 50%; + top: 50%; + margin-left: -40px; + margin-top: -40px; + width: 80px; + height: 80px; + position: inherit; +} + +.spinner__loader::after { + content: " "; + display: block; + width: 64px; + height: 64px; + margin: 8px; + border-radius: 50%; + border: 6px solid var(--surface-invert); + border-color: var(--surface-invert) transparent var(--surface-invert) transparent; + animation: lds-dual-ring 1.2s linear infinite; +} + +@keyframes lds-dual-ring { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} diff --git a/src/Shared/ui/components/Loader/Loader.tsx b/src/Shared/ui/components/Loader/Loader.tsx new file mode 100644 index 0000000..a993405 --- /dev/null +++ b/src/Shared/ui/components/Loader/Loader.tsx @@ -0,0 +1,41 @@ +'use client'; +import { PropsWithChildren, useEffect } from 'react'; +import { Spinner, useLoader } from '@/Shared/ui/components/Loader'; + +import styles from './Loader.module.css'; + +interface IAppLoaderProps extends PropsWithChildren {} + +const AppLoader = ({ children }: IAppLoaderProps): JSX.Element => { + const { loading } = useLoader(); + + return ( +
+ {loading && loading === 'app' && } + {children} +
+ ); +}; + +interface ILoaderWrapperProps extends PropsWithChildren { + name: string; +} + +const LoaderWrapper = ({ children, name }: ILoaderWrapperProps): JSX.Element => { + const { loading, registerLoader, unregisterLoader } = useLoader(); + + useEffect(() => { + registerLoader(name); + return () => unregisterLoader(name); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
+ {loading && loading === name && } + {children} +
+ ); +}; + +export { AppLoader, LoaderWrapper }; diff --git a/src/Shared/ui/components/Loader/LoaderProvider.tsx b/src/Shared/ui/components/Loader/LoaderProvider.tsx new file mode 100644 index 0000000..3fd0280 --- /dev/null +++ b/src/Shared/ui/components/Loader/LoaderProvider.tsx @@ -0,0 +1,32 @@ +'use client'; +import type { PropsWithChildren } from 'react'; + +import { createGenericContext } from '@/Shared/ui/createGenericContext'; +import { LoaderName, useLoaderController } from '@/Shared/ui/components/Loader/useLoaderController'; + +type Context = { + loading: string; + startLoading: (name?: string) => void; + stopLoading: () => void; + registerLoader: (loaderName: LoaderName) => void; + unregisterLoader: (loaderName: LoaderName) => void; +}; + +type Props = PropsWithChildren & {}; + +const [useLoader, StateContextProvider] = createGenericContext(); + +const LoaderProvider = ({ children }: Props): JSX.Element => { + const { loading, startLoading, stopLoading, registerLoader, unregisterLoader } = + useLoaderController(); + + return ( + + {children} + + ); +}; + +export { LoaderProvider, useLoader }; diff --git a/src/Shared/ui/components/Loader/Spinner.tsx b/src/Shared/ui/components/Loader/Spinner.tsx new file mode 100644 index 0000000..5992298 --- /dev/null +++ b/src/Shared/ui/components/Loader/Spinner.tsx @@ -0,0 +1,11 @@ +import styles from './Loader.module.css'; + +interface ISpinnerProps { + component?: boolean; +} + +export const Spinner = ({ component = false }: ISpinnerProps): JSX.Element => ( +
+
+
+); diff --git a/src/Shared/ui/components/Loader/index.ts b/src/Shared/ui/components/Loader/index.ts new file mode 100644 index 0000000..d877be4 --- /dev/null +++ b/src/Shared/ui/components/Loader/index.ts @@ -0,0 +1,3 @@ +export * from './Loader'; +export * from './Spinner'; +export * from './LoaderProvider'; diff --git a/src/Shared/ui/components/Loader/useLoaderController.ts b/src/Shared/ui/components/Loader/useLoaderController.ts new file mode 100644 index 0000000..c821d96 --- /dev/null +++ b/src/Shared/ui/components/Loader/useLoaderController.ts @@ -0,0 +1,39 @@ +'use client'; +import { useState } from 'react'; + +type ReservedLoaderNames = 'app'; +export type LoaderName = T & (T extends ReservedLoaderNames ? never : T); + +interface IUseLoaderController { + loading: string; + startLoading: (name?: string) => void; + stopLoading: () => void; + registerLoader: (loaderName: LoaderName) => void; + unregisterLoader: (loaderName: LoaderName) => void; +} + +export const useLoaderController = (): IUseLoaderController => { + const [loading, setLoading] = useState(''); + + const [registeredLoaders, setRegisteredLoaders] = useState([]); + + const startLoading = (name?: string) => setLoading(name || 'app'); + + const stopLoading = () => setLoading(''); + + const registerLoader = (loaderName: string) => { + setRegisteredLoaders([...registeredLoaders, loaderName]); + }; + + const unregisterLoader = (loaderName: string) => { + setRegisteredLoaders(registeredLoaders.filter(name => name !== loaderName)); + }; + + return { + loading, + startLoading, + stopLoading, + registerLoader, + unregisterLoader + }; +}; diff --git a/src/Shared/ui/context/index.ts b/src/Shared/ui/context/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/Shared/ui/context/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/Shared/ui/createGenericContext.ts b/src/Shared/ui/createGenericContext.ts new file mode 100644 index 0000000..82ee2bd --- /dev/null +++ b/src/Shared/ui/createGenericContext.ts @@ -0,0 +1,17 @@ +import { Provider, createContext, useContext } from 'react'; + +export const createGenericContext = (): [() => K, Provider] => { + const genericContext = createContext(undefined); + + const useGenericContext = (): K => { + const context = useContext(genericContext); + + if (!context) { + throw new Error('useGenericContext must be used within a Provider'); + } + + return context as K; + }; + + return [useGenericContext, genericContext.Provider]; +}; diff --git a/src/Shared/ui/hooks/index.tsx b/src/Shared/ui/hooks/index.tsx new file mode 100644 index 0000000..3c15445 --- /dev/null +++ b/src/Shared/ui/hooks/index.tsx @@ -0,0 +1 @@ +export * from './useWindowSize'; diff --git a/src/Shared/ui/hooks/useWindowSize.ts b/src/Shared/ui/hooks/useWindowSize.ts new file mode 100644 index 0000000..4eec970 --- /dev/null +++ b/src/Shared/ui/hooks/useWindowSize.ts @@ -0,0 +1,30 @@ +import { useState, useEffect } from 'react'; + +interface Size { + width: number | undefined; + height: number | undefined; +} + +export const useWindowSize = (): Size => { + const [windowSize, setWindowSize] = useState({ + width: undefined, + height: undefined + }); + + useEffect(() => { + function handleResize() { + setWindowSize({ + width: window.innerWidth, + height: window.innerHeight + }); + } + + window.addEventListener('resize', handleResize); + + handleResize(); + + return () => window.removeEventListener('resize', handleResize); + }, []); + + return windowSize; +}; diff --git a/src/app/[locale]/GlobalProviders.tsx b/src/app/[locale]/GlobalProviders.tsx new file mode 100644 index 0000000..409e8ca --- /dev/null +++ b/src/app/[locale]/GlobalProviders.tsx @@ -0,0 +1,22 @@ +'use client'; +import { PropsWithChildren } from 'react'; + +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { TranslationsProvider, RQProvider } from '@/Shared/application'; + +const i18nNamespaces = ['common']; + +interface GlobalProvidersProps { + locale: string; +} + +const GlobalProviders = ({ children, locale }: PropsWithChildren) => ( + + + {children} + + + +); + +export default GlobalProviders; diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..8313552 --- /dev/null +++ b/src/app/[locale]/layout.tsx @@ -0,0 +1,37 @@ +import '@/styles/globals.css'; +import '@/styles/variables.css'; + +import { PropsWithChildren } from 'react'; + +import { dir } from 'i18next'; +//import i18nConfig from 'i18nConfig'; +import type { Metadata } from 'next'; +import { Inter } from 'next/font/google'; +import GlobalProviders from '@/app/[locale]/GlobalProviders'; + +const inter = Inter({ subsets: ['latin'] }); + +//export const generateStaticParams = async () => i18nConfig.locales.map(locale => ({ locale })); + +export const metadata: Metadata = { + title: 'Frontend Starter', + description: 'Basic boilerplate for frontend projects' +}; + +interface RootLayoutProps { + params: { + locale: string; + }; +} + +const RootLayout = ({ children, params: { locale } }: PropsWithChildren) => ( + + + +
{children}
+
+ + +); + +export default RootLayout; diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx new file mode 100644 index 0000000..ef08436 --- /dev/null +++ b/src/app/[locale]/page.tsx @@ -0,0 +1,15 @@ +'use client'; +import { LanguageSwitcher } from '@/Shared/ui/components/LanguageSwitcher'; + +import { useTranslation } from 'react-i18next'; + +export default function Home() { + const { t } = useTranslation('common'); + return ( +
+

Runroom - NextJS Starter

+

{t('language')}

+ +
+ ); +} diff --git a/src/app/globals.css b/src/app/globals.css deleted file mode 100644 index d68a1f6..0000000 --- a/src/app/globals.css +++ /dev/null @@ -1,93 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, menlo, monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", - "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", - "Courier New", monospace; - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient(rgb(255 255 255 / 100%), rgb(255 255 255 / 0%)); - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - --primary-glow: radial-gradient(rgba(1 65 255 / 40%), rgba(1 65 255 / 0%)); - --secondary-glow: linear-gradient( - to bottom right, - rgb(1 65 255 / 0%), - rgb(1 65 255 / 0%), - rgb(1 65 255 / 30%) - ); - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient(to bottom, transparent, rgb(var(--background-end-rgb))) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/src/app/i18n.ts b/src/app/i18n.ts new file mode 100644 index 0000000..80b48c4 --- /dev/null +++ b/src/app/i18n.ts @@ -0,0 +1,27 @@ +import { createInstance } from 'i18next'; +import { initReactI18next } from 'react-i18next/initReactI18next'; +import resourcesToBackend from 'i18next-resources-to-backend'; +import i18nConfig from 'i18nConfig'; + +export default async function initTranslations(locale: string, namespaces: string[]) { + const i18nInstance = createInstance(); + + await i18nInstance + .use(initReactI18next) + .use( + resourcesToBackend( + (language: string, namespace: string) => import(`@/locales/${language}/${namespace}.json`) + ) + ) + .init({ + lng: locale, + fallbackLng: i18nConfig.defaultLocale, + supportedLngs: i18nConfig.locales, + defaultNS: namespaces[0], + fallbackNS: namespaces[0], + ns: namespaces, + preload: typeof window === 'undefined' ? i18nConfig.locales : [] + }); + + return i18nInstance; +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx deleted file mode 100644 index 1f8cc18..0000000 --- a/src/app/layout.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { Metadata } from 'next'; -import { Inter } from 'next/font/google'; -import './globals.css'; - -const inter = Inter({ subsets: ['latin'] }); - -export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app' -}; - -export default function RootLayout({ - children -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - {children} - - ); -} diff --git a/src/app/page.module.css b/src/app/page.module.css deleted file mode 100644 index 1aef2c1..0000000 --- a/src/app/page.module.css +++ /dev/null @@ -1,230 +0,0 @@ -.main { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 6rem; - min-height: 100vh; -} - -.description { - display: inherit; - justify-content: inherit; - align-items: inherit; - font-size: 0.85rem; - max-width: var(--max-width); - width: 100%; - z-index: 2; - font-family: var(--font-mono); -} - -.description a { - display: flex; - justify-content: center; - align-items: center; - gap: 0.5rem; -} - -.description p { - position: relative; - margin: 0; - padding: 1rem; - background-color: rgb(var(--callout-rgb) / 50%); - border: 1px solid rgb(var(--callout-border-rgb) / 30%); - border-radius: var(--border-radius); -} - -.code { - font-weight: 700; - font-family: var(--font-mono); -} - -.grid { - display: grid; - grid-template-columns: repeat(4, minmax(25%, auto)); - max-width: 100%; - width: var(--max-width); -} - -.card { - padding: 1rem 1.2rem; - border-radius: var(--border-radius); - background: rgb(var(--card-rgb) / 0%); - border: 1px solid rgb(var(--card-border-rgb) / 0%); - transition: - background 200ms, - border 200ms; -} - -.card span { - display: inline-block; - transition: transform 200ms; -} - -.card h2 { - font-weight: 600; - margin-bottom: 0.7rem; -} - -.card p { - margin: 0; - opacity: 0.6; - font-size: 0.9rem; - line-height: 1.5; - max-width: 30ch; - text-wrap: balance; -} - -.center { - display: flex; - justify-content: center; - align-items: center; - position: relative; - padding: 4rem 0; -} - -.center::before { - background: var(--secondary-glow); - border-radius: 50%; - width: 480px; - height: 360px; - margin-left: -400px; -} - -.center::after { - background: var(--primary-glow); - width: 240px; - height: 180px; - z-index: -1; -} - -.center::before, -.center::after { - content: ""; - left: 50%; - position: absolute; - filter: blur(45px); - transform: translateZ(0); -} - -.logo { - position: relative; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - .card:hover { - background: rgb(var(--card-rgb) % 10%); - border: 1px solid rgb(var(--card-border-rgb) / 15%); - } - - .card:hover span { - transform: translateX(4px); - } -} - -@media (prefers-reduced-motion) { - .card:hover span { - transform: none; - } -} - -/* Mobile */ -@media (width <= 700px) { - .content { - padding: 4rem; - } - - .grid { - grid-template-columns: 1fr; - margin-bottom: 120px; - max-width: 320px; - text-align: center; - } - - .card { - padding: 1rem 2.5rem; - } - - .card h2 { - margin-bottom: 0.5rem; - } - - .center { - padding: 8rem 0 6rem; - } - - .center::before { - transform: none; - height: 300px; - } - - .description { - font-size: 0.8rem; - } - - .description a { - padding: 1rem; - } - - .description p, - .description div { - display: flex; - justify-content: center; - position: fixed; - width: 100%; - } - - .description p { - align-items: center; - inset: 0 0 auto; - padding: 2rem 1rem 1.4rem; - border-radius: 0; - border: none; - border-bottom: 1px solid rgb(var(--callout-border-rgb) / 25%); - background: linear-gradient( - to bottom, - rgb(var(--background-start-rgb) / 100%), - rgb(var(--callout-rgb) % 50%) - ); - background-clip: padding-box; - backdrop-filter: blur(24px); - } - - .description div { - align-items: flex-end; - pointer-events: none; - inset: auto 0 0; - padding: 2rem; - height: 200px; - background: linear-gradient(to bottom, transparent 0%, rgb(var(--background-end-rgb)) 40%); - z-index: 1; - } -} - -/* Tablet and Smaller Desktop */ -@media (width >= 701px) and (width <= 1120px) { - .grid { - grid-template-columns: repeat(2, 50%); - } -} - -@media (prefers-color-scheme: dark) { - .vercel-logo { - filter: invert(1); - } - - .logo { - filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); - } -} - -@keyframes rotate { - from { - transform: rotate(360deg); - } - - to { - transform: rotate(0deg); - } -} diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index d6de280..0000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import Image from 'next/image'; -import styles from './page.module.css'; - -export default function Home() { - return ( -
-

Runroom - NextJS Archetype

-
-

- Get started by editing  - src/app/page.tsx -

- -
- -
- Next.js Logo -
- - -
- ); -} diff --git a/src/lib/getQueryClient.ts b/src/lib/getQueryClient.ts new file mode 100644 index 0000000..b78ce01 --- /dev/null +++ b/src/lib/getQueryClient.ts @@ -0,0 +1,5 @@ +import { QueryClient } from '@tanstack/query-core'; +import { cache } from 'react'; + +const getQueryClient = cache(() => new QueryClient()); +export default getQueryClient; diff --git a/src/locales/ca/common.json b/src/locales/ca/common.json new file mode 100644 index 0000000..a46aa0a --- /dev/null +++ b/src/locales/ca/common.json @@ -0,0 +1,4 @@ +{ + "locale": "ca", + "language": "Català" +} diff --git a/src/locales/en/common.json b/src/locales/en/common.json new file mode 100644 index 0000000..ea8671a --- /dev/null +++ b/src/locales/en/common.json @@ -0,0 +1,4 @@ +{ + "locale": "en", + "language": "English" +} diff --git a/src/locales/es/common.json b/src/locales/es/common.json new file mode 100644 index 0000000..fc95295 --- /dev/null +++ b/src/locales/es/common.json @@ -0,0 +1,4 @@ +{ + "locale": "es", + "language": "Español" +} diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..1dc6c5b --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,12 @@ +import { NextRequest } from 'next/server'; +import { i18nRouter } from 'next-i18n-router'; +import i18nConfig from 'i18nConfig'; + +export function middleware(request: NextRequest) { + return i18nRouter(request, i18nConfig); +} + +// only applies this middleware to files in the app directory +export const config = { + matcher: '/((?!api|static|.*\\..*|_next).*)' +}; diff --git a/src/styles/globals.css b/src/styles/globals.css new file mode 100644 index 0000000..a2fdd5b --- /dev/null +++ b/src/styles/globals.css @@ -0,0 +1,25 @@ +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +main { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + padding: 6rem; + min-height: 100vh; +} + +/* stylelint-disable-next-line */ +#__next { + min-height: 100vh; +} diff --git a/src/styles/variables.css b/src/styles/variables.css new file mode 100644 index 0000000..7c9eb45 --- /dev/null +++ b/src/styles/variables.css @@ -0,0 +1,9 @@ +@import url("../../design-tokens/tokens/variables.css"); +@import url("../../design-tokens/tokens/variables-dark.css"); + +:root { + --max-width: 1100px; + --font-mono: ui-monospace, "Menlo", "Monaco", "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", + "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", + "Courier New", monospace; +} diff --git a/tests/cypress/e2e/page.cy.ts b/tests/cypress/e2e/page.cy.ts index 7f09f8c..82665a2 100644 --- a/tests/cypress/e2e/page.cy.ts +++ b/tests/cypress/e2e/page.cy.ts @@ -2,7 +2,7 @@ describe('Page', () => { it('should navigate between pages', () => { cy.visit('/'); - cy.get('h1').contains('Runroom - NextJS Archetype'); + cy.get('h1').contains('Runroom - NextJS Starter'); }); });