diff --git a/.depcheckrc.json b/.depcheckrc.json
index 46afbeb2..fa0c931d 100644
--- a/.depcheckrc.json
+++ b/.depcheckrc.json
@@ -34,6 +34,7 @@
"@layouts/*",
"@lib/*",
"@server/*",
+ "@server/*",
"@utils/*",
"mdx",
diff --git a/eslint.config.js b/eslint.config.js.bak
similarity index 100%
rename from eslint.config.js
rename to eslint.config.js.bak
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 00000000..ca01607f
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,71 @@
+// @ts-check
+
+import { FlatCompat } from '@eslint/eslintrc';
+import eslint from '@eslint/js';
+import tsParser from '@typescript-eslint/parser';
+import reactCompiler from 'eslint-plugin-react-compiler';
+import unusedImports from 'eslint-plugin-unused-imports';
+import tseslint from 'typescript-eslint';
+
+const compat = new FlatCompat({
+ baseDirectory: import.meta.dirname,
+});
+
+const nextEslintConfig = [
+ ...compat.extends('next/core-web-vitals', 'next/typescript'),
+];
+
+export default tseslint.config(
+ nextEslintConfig,
+ eslint.configs.recommended,
+ tseslint.configs.recommended,
+ {
+ ignores: [
+ '**/**/node_modules',
+ '**/**/.next',
+ '**/**/public',
+ 'components/ui',
+ 'env.js',
+ '**/.eslintrc.cjs',
+ '**/*.config.js',
+ '**/*.config.cjs',
+ '**/*.config.mjs',
+ '.next',
+ 'dist',
+ 'pnpm-lock.yaml',
+ ],
+ },
+ {
+ plugins: {
+ 'unused-imports': unusedImports,
+ 'react-compiler': reactCompiler,
+ },
+ languageOptions: {
+ parser: tsParser,
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ parserOptions: {
+ project: ['./tsconfig.json'],
+ },
+ },
+ },
+ {
+ rules: {
+ 'react/prop-types': 'off',
+ '@typescript-eslint/no-unused-vars': [
+ 'error',
+ { argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
+ ],
+ '@typescript-eslint/consistent-type-definitions': ['error', 'type'],
+ '@typescript-eslint/consistent-type-imports': [
+ 'warn',
+ { prefer: 'type-imports', fixStyle: 'separate-type-imports' },
+ ],
+ '@typescript-eslint/no-misused-promises': [
+ 2,
+ { checksVoidReturn: { attributes: false } },
+ ],
+ 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
+ },
+ }
+);
diff --git a/index.js b/index.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/next-env.d.ts b/next-env.d.ts
index 725dd6f2..3cd7048e 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -3,4 +3,4 @@
///
// NOTE: This file should not be edited
-// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/next.config.mjs b/next.config.mjs
index a8608313..3fa37590 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -1,5 +1,5 @@
import withBundleAnalyzer from '@next/bundle-analyzer';
-import createJiti from 'jiti';
+import { createJiti } from 'jiti';
const jiti = createJiti(new URL(import.meta.url).pathname);
diff --git a/package.json b/package.json
index 2ca3d0d2..ea25cbce 100644
--- a/package.json
+++ b/package.json
@@ -8,14 +8,14 @@
"scripts": {
"analyze": "ANALYZE=true next build",
"build": "next build",
- "dev": "NODE_OPTIONS='--inspect' next dev --turbo",
+ "dev": "NODE_OPTIONS='--inspect' next dev --turbopack",
"depcheck": "depcheck",
"email": "email dev --dir ./src/utils/email/templates",
- "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
+ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md,mdx}\"",
"start": "next start",
"test": "pnpm exec playwright test",
- "lint": "next lint",
- "eslint-check": "eslint --print-config . | eslint-config-prettier-check"
+ "lint": "pnpm eslint .",
+ "eslint-check": "pnpm eslint --print-config . | pnpm eslint-config-prettier-check"
},
"dependencies": {
"@cloudinary/url-gen": "^1.21.0",
@@ -44,7 +44,7 @@
"lucide-react": "^0.469.0",
"mailchecker": "^6.0.15",
"micro": "^10.0.1",
- "next": "^14.2.21",
+ "next": "15.1.3",
"next-cloudinary": "^6.16.0",
"next-mdx-remote": "5.0.0",
"pluralize": "^8.0.0",
@@ -52,9 +52,9 @@
"posthog-js": "^1.203.3",
"posthog-node": "^4.3.2",
"prism-react-renderer": "^2.4.1",
- "react": "^18.3.1",
+ "react": "19.0.0",
"react-aria": "^3.36.0",
- "react-dom": "^18.3.1",
+ "react-dom": "19.0.0",
"react-email": "3.0.4",
"react-icons": "^5.4.0",
"react-stately": "^3.34.0",
@@ -70,31 +70,35 @@
"zod": "^3.24.1"
},
"devDependencies": {
+ "@eslint/js": "^9.17.0",
"@ianvs/prettier-plugin-sort-imports": "^4.4.0",
"@next/eslint-plugin-next": "^15.1.3",
"@playwright/test": "^1.49.1",
"@types/eslint": "^9.6.1",
"@types/node": "^22.10.5",
"@types/pluralize": "^0.0.33",
- "@types/react": "^18.3.12",
+ "@types/react": "19.0.2",
"@typescript-eslint/eslint-plugin": "^8.19.0",
"@typescript-eslint/parser": "^8.19.0",
"depcheck": "^1.4.7",
- "eslint": "8.57.0",
+ "eslint": "9.17.0",
"eslint-config-next": "^15.1.3",
"eslint-config-prettier": "^9.1.0",
"eslint-config-turbo": "^2.3.3",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.3",
+ "eslint-plugin-react-compiler": "19.0.0-beta-55955c9-20241229",
"eslint-plugin-react-hooks": "^5.1.0",
+ "eslint-plugin-unused-imports": "^4.1.4",
"github-slugger": "^2.0.0",
"jiti": "^2.4.2",
"prettier": "^3.4.2",
"prettier-plugin-tailwindcss": "^0.6.9",
"schema-dts": "^1.1.2",
"tailwindcss": "^3.4.17",
- "typescript": "5.7.2"
+ "typescript": "5.7.2",
+ "typescript-eslint": "^8.18.1"
},
"repository": {
"type": "git",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e7b0c15f..483d9503 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,25 +13,25 @@ importers:
version: 1.21.0
'@headlessui/react':
specifier: ^2.2.0
- version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 2.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@heroicons/react':
specifier: ^2.2.0
- version: 2.2.0(react@18.3.1)
+ version: 2.2.0(react@19.0.0)
'@mdx-js/react':
specifier: ^3.1.0
- version: 3.1.0(@types/react@18.3.12)(react@18.3.1)
+ version: 3.1.0(@types/react@19.0.2)(react@19.0.0)
'@next/bundle-analyzer':
specifier: ^15.1.3
version: 15.1.3
'@number-flow/react':
specifier: ^0.4.4
- version: 0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@react-email/components':
specifier: ^0.0.31
- version: 0.0.31(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 0.0.31(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@react-email/render':
specifier: ^1.0.3
- version: 1.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 1.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@t3-oss/env-core':
specifier: ^0.11.1
version: 0.11.1(typescript@5.7.2)(zod@3.24.1)
@@ -43,16 +43,16 @@ importers:
version: 0.5.15(tailwindcss@3.4.17)
'@tanstack/react-query':
specifier: ^5.62.14
- version: 5.62.14(react@18.3.1)
+ version: 5.62.15(react@19.0.0)
'@trpc/client':
specifier: 11.0.0-rc.666
version: 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2)
'@trpc/next':
specifier: 11.0.0-rc.666
- version: 11.0.0-rc.666(@tanstack/react-query@5.62.14(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.14(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
+ version: 11.0.0-rc.666(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(next@15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2)
'@trpc/react-query':
specifier: 11.0.0-rc.666
- version: 11.0.0-rc.666(@tanstack/react-query@5.62.14(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
+ version: 11.0.0-rc.666(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2)
'@trpc/server':
specifier: 11.0.0-rc.666
version: 11.0.0-rc.666(typescript@5.7.2)
@@ -79,7 +79,7 @@ importers:
version: 4.0.3
lucide-react:
specifier: ^0.469.0
- version: 0.469.0(react@18.3.1)
+ version: 0.469.0(react@19.0.0)
mailchecker:
specifier: ^6.0.15
version: 6.0.15
@@ -87,14 +87,14 @@ importers:
specifier: ^10.0.1
version: 10.0.1
next:
- specifier: ^14.2.21
- version: 14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1)
+ specifier: 15.1.3
+ version: 15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1)
next-cloudinary:
specifier: ^6.16.0
- version: 6.16.0(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1))(react@18.3.1)
+ version: 6.16.0(next@15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0)
next-mdx-remote:
specifier: 5.0.0
- version: 5.0.0(@types/react@18.3.12)(acorn@8.14.0)(react@18.3.1)
+ version: 5.0.0(@types/react@19.0.2)(acorn@8.14.0)(react@19.0.0)
pluralize:
specifier: ^8.0.0
version: 8.0.0
@@ -109,25 +109,25 @@ importers:
version: 4.3.2
prism-react-renderer:
specifier: ^2.4.1
- version: 2.4.1(react@18.3.1)
+ version: 2.4.1(react@19.0.0)
react:
- specifier: ^18.3.1
- version: 18.3.1
+ specifier: 19.0.0
+ version: 19.0.0
react-aria:
specifier: ^3.36.0
- version: 3.36.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 3.36.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react-dom:
- specifier: ^18.3.1
- version: 18.3.1(react@18.3.1)
+ specifier: 19.0.0
+ version: 19.0.0(react@19.0.0)
react-email:
specifier: 3.0.4
- version: 3.0.4(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1)
+ version: 3.0.4(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1)
react-icons:
specifier: ^5.4.0
- version: 5.4.0(react@18.3.1)
+ version: 5.4.0(react@19.0.0)
react-stately:
specifier: ^3.34.0
- version: 3.34.0(react@18.3.1)
+ version: 3.34.0(react@19.0.0)
rehype-img-size:
specifier: ^1.0.1
version: 1.0.1
@@ -136,7 +136,7 @@ importers:
version: 6.0.0
resend:
specifier: ^4.0.1
- version: 4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 4.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
sass:
specifier: ^1.83.1
version: 1.83.1
@@ -159,6 +159,9 @@ importers:
specifier: ^3.24.1
version: 3.24.1
devDependencies:
+ '@eslint/js':
+ specifier: ^9.17.0
+ version: 9.17.0
'@ianvs/prettier-plugin-sort-imports':
specifier: ^4.4.0
version: 4.4.0(@vue/compiler-sfc@3.5.13)(prettier@3.4.2)
@@ -178,41 +181,47 @@ importers:
specifier: ^0.0.33
version: 0.0.33
'@types/react':
- specifier: ^18.3.12
- version: 18.3.12
+ specifier: 19.0.2
+ version: 19.0.2
'@typescript-eslint/eslint-plugin':
specifier: ^8.19.0
- version: 8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2)
+ version: 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
'@typescript-eslint/parser':
specifier: ^8.19.0
- version: 8.19.0(eslint@8.57.0)(typescript@5.7.2)
+ version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
depcheck:
specifier: ^1.4.7
version: 1.4.7
eslint:
- specifier: 8.57.0
- version: 8.57.0
+ specifier: 9.17.0
+ version: 9.17.0(jiti@2.4.2)
eslint-config-next:
specifier: ^15.1.3
- version: 15.1.3(eslint@8.57.0)(typescript@5.7.2)
+ version: 15.1.3(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
eslint-config-prettier:
specifier: ^9.1.0
- version: 9.1.0(eslint@8.57.0)
+ version: 9.1.0(eslint@9.17.0(jiti@2.4.2))
eslint-config-turbo:
specifier: ^2.3.3
- version: 2.3.3(eslint@8.57.0)
+ version: 2.3.3(eslint@9.17.0(jiti@2.4.2))
eslint-plugin-import:
specifier: ^2.31.0
- version: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
+ version: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))
eslint-plugin-jsx-a11y:
specifier: ^6.10.2
- version: 6.10.2(eslint@8.57.0)
+ version: 6.10.2(eslint@9.17.0(jiti@2.4.2))
eslint-plugin-react:
specifier: ^7.37.3
- version: 7.37.3(eslint@8.57.0)
+ version: 7.37.3(eslint@9.17.0(jiti@2.4.2))
+ eslint-plugin-react-compiler:
+ specifier: 19.0.0-beta-55955c9-20241229
+ version: 19.0.0-beta-55955c9-20241229(eslint@9.17.0(jiti@2.4.2))
eslint-plugin-react-hooks:
specifier: ^5.1.0
- version: 5.1.0(eslint@8.57.0)
+ version: 5.1.0(eslint@9.17.0(jiti@2.4.2))
+ eslint-plugin-unused-imports:
+ specifier: ^4.1.4
+ version: 4.1.4(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))
github-slugger:
specifier: ^2.0.0
version: 2.0.0
@@ -234,6 +243,9 @@ importers:
typescript:
specifier: 5.7.2
version: 5.7.2
+ typescript-eslint:
+ specifier: ^8.18.1
+ version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
packages:
@@ -261,6 +273,10 @@ packages:
resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==}
engines: {node: '>=6.9.0'}
+ '@babel/core@7.26.0':
+ resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/generator@7.26.2':
resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==}
engines: {node: '>=6.9.0'}
@@ -269,10 +285,24 @@ packages:
resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-annotate-as-pure@7.25.9':
+ resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-compilation-targets@7.25.9':
resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-create-class-features-plugin@7.25.9':
+ resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-module-imports@7.25.9':
resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
engines: {node: '>=6.9.0'}
@@ -283,6 +313,24 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/helper-optimise-call-expression@7.25.9':
+ resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.25.9':
+ resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-replace-supers@7.25.9':
+ resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-string-parser@7.25.9':
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
@@ -318,6 +366,13 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/plugin-proposal-private-methods@7.18.6':
+ resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+ engines: {node: '>=6.9.0'}
+ deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/template@7.25.9':
resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
engines: {node: '>=6.9.0'}
@@ -507,33 +562,39 @@ packages:
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.4.0':
- resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
'@eslint-community/eslint-utils@4.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@eslint-community/regexpp@4.10.0':
- resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
'@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/eslintrc@2.1.4':
- resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@eslint/config-array@0.19.1':
+ resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@8.57.0':
- resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@eslint/core@0.9.1':
+ resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.2.0':
+ resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.17.0':
+ resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.5':
+ resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.2.4':
+ resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@floating-ui/core@1.6.8':
resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
@@ -583,18 +644,25 @@ packages:
peerDependencies:
react: '>= 16 || ^19.0.0-rc'
- '@humanwhocodes/config-array@0.11.14':
- resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
- engines: {node: '>=10.10.0'}
- deprecated: Use @eslint/config-array instead
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.6':
+ resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
- '@humanwhocodes/object-schema@2.0.3':
- resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
- deprecated: Use @eslint/object-schema instead
+ '@humanwhocodes/retry@0.3.1':
+ resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+ engines: {node: '>=18.18'}
+
+ '@humanwhocodes/retry@0.4.1':
+ resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
+ engines: {node: '>=18.18'}
'@ianvs/prettier-plugin-sort-imports@4.4.0':
resolution: {integrity: sha512-f4/e+/ANGk3tHuwRW0uh2YuBR50I4h1ZjGQ+5uD8sWfinHTivQsnieR5cz24t8M6Vx4rYvZ5v/IEKZhYpzQm9Q==}
@@ -760,31 +828,25 @@ packages:
'@next/bundle-analyzer@15.1.3':
resolution: {integrity: sha512-dh5i2KBONWVhQzJnL10sv9+ImsKgGtOHHeA1dWp/H3MXphWBt1uGjXCwPCcitwimvNncHBmxaOyTm2FwfOLRSA==}
- '@next/env@14.2.21':
- resolution: {integrity: sha512-lXcwcJd5oR01tggjWJ6SrNNYFGuOOMB9c251wUNkjCpkoXOPkDeF/15c3mnVlBqrW4JJXb2kVxDFhC4GduJt2A==}
-
'@next/env@15.0.4':
resolution: {integrity: sha512-WNRvtgnRVDD4oM8gbUcRc27IAhaL4eXQ/2ovGbgLnPGUvdyDr8UdXP4Q/IBDdAdojnD2eScryIDirv0YUCjUVw==}
+ '@next/env@15.1.3':
+ resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==}
+
'@next/eslint-plugin-next@15.1.3':
resolution: {integrity: sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==}
- '@next/swc-darwin-arm64@14.2.21':
- resolution: {integrity: sha512-HwEjcKsXtvszXz5q5Z7wCtrHeTTDSTgAbocz45PHMUjU3fBYInfvhR+ZhavDRUYLonm53aHZbB09QtJVJj8T7g==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
'@next/swc-darwin-arm64@15.0.4':
resolution: {integrity: sha512-QecQXPD0yRHxSXWL5Ff80nD+A56sUXZG9koUsjWJwA2Z0ZgVQfuy7gd0/otjxoOovPVHR2eVEvPMHbtZP+pf9w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@14.2.21':
- resolution: {integrity: sha512-TSAA2ROgNzm4FhKbTbyJOBrsREOMVdDIltZ6aZiKvCi/v0UwFmwigBGeqXDA97TFMpR3LNNpw52CbVelkoQBxA==}
+ '@next/swc-darwin-arm64@15.1.3':
+ resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==}
engines: {node: '>= 10'}
- cpu: [x64]
+ cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@15.0.4':
@@ -793,11 +855,11 @@ packages:
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@14.2.21':
- resolution: {integrity: sha512-0Dqjn0pEUz3JG+AImpnMMW/m8hRtl1GQCNbO66V1yp6RswSTiKmnHf3pTX6xMdJYSemf3O4Q9ykiL0jymu0TuA==}
+ '@next/swc-darwin-x64@15.1.3':
+ resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==}
engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
+ cpu: [x64]
+ os: [darwin]
'@next/swc-linux-arm64-gnu@15.0.4':
resolution: {integrity: sha512-12oSaBFjGpB227VHzoXF3gJoK2SlVGmFJMaBJSu5rbpaoT5OjP5OuCLuR9/jnyBF1BAWMs/boa6mLMoJPRriMA==}
@@ -805,8 +867,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@14.2.21':
- resolution: {integrity: sha512-Ggfw5qnMXldscVntwnjfaQs5GbBbjioV4B4loP+bjqNEb42fzZlAaK+ldL0jm2CTJga9LynBMhekNfV8W4+HBw==}
+ '@next/swc-linux-arm64-gnu@15.1.3':
+ resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -817,10 +879,10 @@ packages:
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@14.2.21':
- resolution: {integrity: sha512-uokj0lubN1WoSa5KKdThVPRffGyiWlm/vCc/cMkWOQHw69Qt0X1o3b2PyLLx8ANqlefILZh1EdfLRz9gVpG6tg==}
+ '@next/swc-linux-arm64-musl@15.1.3':
+ resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==}
engines: {node: '>= 10'}
- cpu: [x64]
+ cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@15.0.4':
@@ -829,8 +891,8 @@ packages:
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@14.2.21':
- resolution: {integrity: sha512-iAEBPzWNbciah4+0yI4s7Pce6BIoxTQ0AGCkxn/UBuzJFkYyJt71MadYQkjPqCQCJAFQ26sYh7MOKdU+VQFgPg==}
+ '@next/swc-linux-x64-gnu@15.1.3':
+ resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -841,11 +903,11 @@ packages:
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@14.2.21':
- resolution: {integrity: sha512-plykgB3vL2hB4Z32W3ktsfqyuyGAPxqwiyrAi2Mr8LlEUhNn9VgkiAl5hODSBpzIfWweX3er1f5uNpGDygfQVQ==}
+ '@next/swc-linux-x64-musl@15.1.3':
+ resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==}
engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
+ cpu: [x64]
+ os: [linux]
'@next/swc-win32-arm64-msvc@15.0.4':
resolution: {integrity: sha512-Z/v3WV5xRaeWlgJzN9r4PydWD8sXV35ywc28W63i37G2jnUgScA4OOgS8hQdiXLxE3gqfSuHTicUhr7931OXPQ==}
@@ -853,20 +915,20 @@ packages:
cpu: [arm64]
os: [win32]
- '@next/swc-win32-ia32-msvc@14.2.21':
- resolution: {integrity: sha512-w5bacz4Vxqrh06BjWgua3Yf7EMDb8iMcVhNrNx8KnJXt8t+Uu0Zg4JHLDL/T7DkTCEEfKXO/Er1fcfWxn2xfPA==}
+ '@next/swc-win32-arm64-msvc@15.1.3':
+ resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==}
engines: {node: '>= 10'}
- cpu: [ia32]
+ cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@14.2.21':
- resolution: {integrity: sha512-sT6+llIkzpsexGYZq8cjjthRyRGe5cJVhqh12FmlbxHqna6zsDDK8UNaV7g41T6atFHCJUPeLb3uyAwrBwy0NA==}
+ '@next/swc-win32-x64-msvc@15.0.4':
+ resolution: {integrity: sha512-NGLchGruagh8lQpDr98bHLyWJXOBSmkEAfK980OiNBa7vNm6PsNoPvzTfstT78WyOeMRQphEQ455rggd7Eo+Dw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@next/swc-win32-x64-msvc@15.0.4':
- resolution: {integrity: sha512-NGLchGruagh8lQpDr98bHLyWJXOBSmkEAfK980OiNBa7vNm6PsNoPvzTfstT78WyOeMRQphEQ455rggd7Eo+Dw==}
+ '@next/swc-win32-x64-msvc@15.1.3':
+ resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1652,9 +1714,6 @@ packages:
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
- '@swc/helpers@0.5.5':
- resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
-
'@t3-oss/env-core@0.11.1':
resolution: {integrity: sha512-MaxOwEoG1ntCFoKJsS7nqwgcxLW1SJw238AJwfJeaz3P/8GtkxXZsPPolsz1AdYvUTbe3XvqZ/VCdfjt+3zmKw==}
peerDependencies:
@@ -1678,11 +1737,11 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
- '@tanstack/query-core@5.62.12':
- resolution: {integrity: sha512-6igFeBgymHkCxVgaEk+yiLwkMf9haui/EQLmI3o9CatOyDThEoFKe8toLWvWliZC/Jf+h7NwHi/zjfyLArr1ow==}
+ '@tanstack/query-core@5.62.15':
+ resolution: {integrity: sha512-wT20X14CxcWY8YLJ/1pnsXn/y1Q2uRJZYWW93PWRtZt+3/JlGZyiyTcO4pGnqycnP7CokCROAyatsraosqZsDA==}
- '@tanstack/react-query@5.62.14':
- resolution: {integrity: sha512-ev/6eVdJvX9vpomKmFuXsrQb6TwqqBn/7OeB0KZkHjEYk/Bo1XBMj8wRmobn8pqdU8lK271tUjt+0B0UQ9MZ6A==}
+ '@tanstack/react-query@5.62.15':
+ resolution: {integrity: sha512-Ny3xxsOWmEQCFyHiV3CF7t6+QAV+LpBEREiXyllKR4+tStyd8smOAa98ZHmEx0ZNy36M31K8enifB5wTSYAKJw==}
peerDependencies:
react: ^18 || ^19
@@ -1790,11 +1849,8 @@ packages:
'@types/prismjs@1.26.5':
resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==}
- '@types/prop-types@15.7.13':
- resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
-
- '@types/react@18.3.12':
- resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==}
+ '@types/react@19.0.2':
+ resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==}
'@types/unist@2.0.10':
resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
@@ -1890,11 +1946,6 @@ packages:
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
engines: {node: '>=0.4.0'}
- acorn@8.11.3:
- resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
@@ -2122,6 +2173,9 @@ packages:
caniuse-lite@1.0.30001651:
resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==}
+ caniuse-lite@1.0.30001668:
+ resolution: {integrity: sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==}
+
caniuse-lite@1.0.30001690:
resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==}
@@ -2313,15 +2367,6 @@ packages:
supports-color:
optional: true
- debug@4.3.4:
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.3.7:
resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
engines: {node: '>=6.0'}
@@ -2407,10 +2452,6 @@ packages:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
- doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
-
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@@ -2616,6 +2657,12 @@ packages:
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
+ eslint-plugin-react-compiler@19.0.0-beta-55955c9-20241229:
+ resolution: {integrity: sha512-KsE6bQrNvtPDbMb9EolZ2C+Z2/uv2Y5cAUgN+pzbriXjKlf1FkbgiyE153m2mIT6gEZq2OrtFvX7uJj5IrNQlg==}
+ engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0}
+ peerDependencies:
+ eslint: '>=7'
+
eslint-plugin-react-hooks@5.1.0:
resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==}
engines: {node: '>=10'}
@@ -2633,9 +2680,18 @@ packages:
peerDependencies:
eslint: '>6.6.0'
- eslint-scope@7.2.2:
- resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint-plugin-unused-imports@4.1.4:
+ resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==}
+ peerDependencies:
+ '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0
+ eslint: ^9.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ '@typescript-eslint/eslint-plugin':
+ optional: true
+
+ eslint-scope@8.2.0:
+ resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
@@ -2645,18 +2701,22 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@8.57.0:
- resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
+ eslint@9.17.0:
+ resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
esm-env@1.2.1:
resolution: {integrity: sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng==}
- espree@9.6.1:
- resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ espree@10.3.0:
+ resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
@@ -2753,9 +2813,9 @@ packages:
fflate@0.4.8:
resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==}
- file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
@@ -2769,9 +2829,9 @@ packages:
resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==}
engines: {node: '>= 10.13.0'}
- flat-cache@3.2.0:
- resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
flatted@3.3.1:
resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
@@ -2889,9 +2949,9 @@ packages:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
- globals@13.24.0:
- resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
- engines: {node: '>=8'}
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
@@ -2975,6 +3035,12 @@ packages:
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ hermes-estree@0.25.1:
+ resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
+
+ hermes-parser@0.25.1:
+ resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
+
homedir-polyfill@1.0.3:
resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
engines: {node: '>=0.10.0'}
@@ -3000,10 +3066,6 @@ packages:
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- ignore@5.3.1:
- resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
- engines: {node: '>= 4'}
-
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -3183,10 +3245,6 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
-
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
@@ -3599,9 +3657,6 @@ packages:
resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
engines: {node: '>=10'}
- ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -3639,34 +3694,37 @@ packages:
peerDependencies:
react: '>=16'
- next@14.2.21:
- resolution: {integrity: sha512-rZmLwucLHr3/zfDMYbJXbw0ZeoBpirxkXuvsJbk7UPorvPYZhP7vq7aHbKnU7dQNCYIimRrbB2pp3xmf+wsYUg==}
- engines: {node: '>=18.17.0'}
+ next@15.0.4:
+ resolution: {integrity: sha512-nuy8FH6M1FG0lktGotamQDCXhh5hZ19Vo0ht1AOIQWrYJLP598TIUagKtvJrfJ5AGwB/WmDqkKaKhMpVifvGPA==}
+ engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
'@playwright/test': ^1.41.2
- react: ^18.2.0
- react-dom: ^18.2.0
+ babel-plugin-react-compiler: '*'
+ react: ^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0
sass: ^1.3.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
'@playwright/test':
optional: true
+ babel-plugin-react-compiler:
+ optional: true
sass:
optional: true
- next@15.0.4:
- resolution: {integrity: sha512-nuy8FH6M1FG0lktGotamQDCXhh5hZ19Vo0ht1AOIQWrYJLP598TIUagKtvJrfJ5AGwB/WmDqkKaKhMpVifvGPA==}
+ next@15.1.3:
+ resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
'@playwright/test': ^1.41.2
babel-plugin-react-compiler: '*'
- react: ^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0
- react-dom: ^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
sass: ^1.3.0
peerDependenciesMeta:
'@opentelemetry/api':
@@ -4048,10 +4106,10 @@ packages:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
- react-dom@18.3.1:
- resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ react-dom@19.0.0:
+ resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
peerDependencies:
- react: ^18.3.1
+ react: ^19.0.0
react-email@3.0.4:
resolution: {integrity: sha512-nXdo9P3V+qYSW6m5yN3XpFGhHb/bflX86m0EDQEqDIgayprj6InmBJoBnMSIyC5EP4tPtoAljlclJns4lJG/MQ==}
@@ -4074,8 +4132,8 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
- react@18.3.1:
- resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ react@19.0.0:
+ resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
engines: {node: '>=0.10.0'}
read-cache@1.0.0:
@@ -4178,11 +4236,6 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
-
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -4219,8 +4272,8 @@ packages:
sax@1.3.0:
resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
- scheduler@0.23.2:
- resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ scheduler@0.25.0:
+ resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
schema-dts@1.1.2:
resolution: {integrity: sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==}
@@ -4413,19 +4466,6 @@ packages:
style-to-object@1.0.8:
resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
- styled-jsx@5.1.1:
- resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
- engines: {node: '>= 12.0.0'}
- peerDependencies:
- '@babel/core': '*'
- babel-plugin-macros: '*'
- react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- babel-plugin-macros:
- optional: true
-
styled-jsx@5.1.6:
resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
engines: {node: '>= 12.0.0'}
@@ -4481,9 +4521,6 @@ packages:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
- text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
@@ -4531,10 +4568,6 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
-
typed-array-buffer@1.0.2:
resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
engines: {node: '>= 0.4'}
@@ -4567,6 +4600,13 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
+ typescript-eslint@8.19.0:
+ resolution: {integrity: sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.8.0'
+
typescript@5.7.2:
resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
engines: {node: '>=14.17'}
@@ -4784,6 +4824,12 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+ zod-validation-error@3.4.0:
+ resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ zod: ^3.18.0
+
zod@3.24.1:
resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==}
@@ -4832,6 +4878,26 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/core@7.26.0':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.3
+ '@babel/helper-compilation-targets': 7.25.9
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
+ '@babel/helpers': 7.26.0
+ '@babel/parser': 7.26.3
+ '@babel/template': 7.25.9
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ convert-source-map: 2.0.0
+ debug: 4.4.0
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/generator@7.26.2':
dependencies:
'@babel/parser': 7.26.2
@@ -4848,6 +4914,10 @@ snapshots:
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.1.0
+ '@babel/helper-annotate-as-pure@7.25.9':
+ dependencies:
+ '@babel/types': 7.26.3
+
'@babel/helper-compilation-targets@7.25.9':
dependencies:
'@babel/compat-data': 7.26.3
@@ -4856,6 +4926,26 @@ snapshots:
lru-cache: 5.1.1
semver: 6.3.1
+ '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/traverse': 7.26.4
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-module-imports@7.25.9':
dependencies:
'@babel/traverse': 7.26.4
@@ -4872,6 +4962,37 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+ '@babel/traverse': 7.26.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.25.9':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@babel/helper-plugin-utils@7.25.9': {}
+
+ '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/traverse': 7.26.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-string-parser@7.25.9': {}
'@babel/helper-validator-identifier@7.25.9': {}
@@ -4902,6 +5023,14 @@ snapshots:
dependencies:
'@babel/types': 7.26.3
+ '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
+ '@babel/helper-plugin-utils': 7.25.9
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/template@7.25.9':
dependencies:
'@babel/code-frame': 7.26.2
@@ -5047,27 +5176,32 @@ snapshots:
'@esbuild/win32-x64@0.19.11':
optional: true
- '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
+ '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.2))':
dependencies:
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
eslint-visitor-keys: 3.4.3
- '@eslint-community/eslint-utils@4.4.1(eslint@8.57.0)':
- dependencies:
- eslint: 8.57.0
- eslint-visitor-keys: 3.4.3
+ '@eslint-community/regexpp@4.12.1': {}
- '@eslint-community/regexpp@4.10.0': {}
+ '@eslint/config-array@0.19.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.5
+ debug: 4.4.0
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
- '@eslint-community/regexpp@4.12.1': {}
+ '@eslint/core@0.9.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
- '@eslint/eslintrc@2.1.4':
+ '@eslint/eslintrc@3.2.0':
dependencies:
ajv: 6.12.6
- debug: 4.3.4
- espree: 9.6.1
- globals: 13.24.0
- ignore: 5.3.1
+ debug: 4.4.0
+ espree: 10.3.0
+ globals: 14.0.0
+ ignore: 5.3.2
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@@ -5075,7 +5209,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@8.57.0': {}
+ '@eslint/js@9.17.0': {}
+
+ '@eslint/object-schema@2.1.5': {}
+
+ '@eslint/plugin-kit@0.2.4':
+ dependencies:
+ levn: 0.4.1
'@floating-ui/core@1.6.8':
dependencies:
@@ -5086,18 +5226,18 @@ snapshots:
'@floating-ui/core': 1.6.8
'@floating-ui/utils': 0.2.8
- '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@floating-ui/dom': 1.6.12
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@floating-ui/react@0.26.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@floating-ui/react@0.26.27(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@floating-ui/utils': 0.2.8
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
tabbable: 6.2.0
'@floating-ui/utils@0.2.8': {}
@@ -5127,30 +5267,31 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@headlessui/react@2.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@floating-ui/react': 0.26.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/focus': 3.18.4(react@18.3.1)
- '@react-aria/interactions': 3.22.4(react@18.3.1)
- '@tanstack/react-virtual': 3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ '@floating-ui/react': 0.26.27(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/focus': 3.18.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.4(react@19.0.0)
+ '@tanstack/react-virtual': 3.10.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@heroicons/react@2.2.0(react@18.3.1)':
+ '@heroicons/react@2.2.0(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@humanwhocodes/config-array@0.11.14':
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.6':
dependencies:
- '@humanwhocodes/object-schema': 2.0.3
- debug: 4.3.4
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.3.1
'@humanwhocodes/module-importer@1.0.1': {}
- '@humanwhocodes/object-schema@2.0.3': {}
+ '@humanwhocodes/retry@0.3.1': {}
+
+ '@humanwhocodes/retry@0.4.1': {}
'@ianvs/prettier-plugin-sort-imports@4.4.0(@vue/compiler-sfc@3.5.13)(prettier@3.4.2)':
dependencies:
@@ -5319,11 +5460,11 @@ snapshots:
- acorn
- supports-color
- '@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@mdx-js/react@3.1.0(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@types/mdx': 2.0.13
- '@types/react': 18.3.12
- react: 18.3.1
+ '@types/react': 19.0.2
+ react: 19.0.0
'@next/bundle-analyzer@15.1.3':
dependencies:
@@ -5332,63 +5473,60 @@ snapshots:
- bufferutil
- utf-8-validate
- '@next/env@14.2.21': {}
-
'@next/env@15.0.4': {}
+ '@next/env@15.1.3': {}
+
'@next/eslint-plugin-next@15.1.3':
dependencies:
fast-glob: 3.3.1
- '@next/swc-darwin-arm64@14.2.21':
- optional: true
-
'@next/swc-darwin-arm64@15.0.4':
optional: true
- '@next/swc-darwin-x64@14.2.21':
+ '@next/swc-darwin-arm64@15.1.3':
optional: true
'@next/swc-darwin-x64@15.0.4':
optional: true
- '@next/swc-linux-arm64-gnu@14.2.21':
+ '@next/swc-darwin-x64@15.1.3':
optional: true
'@next/swc-linux-arm64-gnu@15.0.4':
optional: true
- '@next/swc-linux-arm64-musl@14.2.21':
+ '@next/swc-linux-arm64-gnu@15.1.3':
optional: true
'@next/swc-linux-arm64-musl@15.0.4':
optional: true
- '@next/swc-linux-x64-gnu@14.2.21':
+ '@next/swc-linux-arm64-musl@15.1.3':
optional: true
'@next/swc-linux-x64-gnu@15.0.4':
optional: true
- '@next/swc-linux-x64-musl@14.2.21':
+ '@next/swc-linux-x64-gnu@15.1.3':
optional: true
'@next/swc-linux-x64-musl@15.0.4':
optional: true
- '@next/swc-win32-arm64-msvc@14.2.21':
+ '@next/swc-linux-x64-musl@15.1.3':
optional: true
'@next/swc-win32-arm64-msvc@15.0.4':
optional: true
- '@next/swc-win32-ia32-msvc@14.2.21':
+ '@next/swc-win32-arm64-msvc@15.1.3':
optional: true
- '@next/swc-win32-x64-msvc@14.2.21':
+ '@next/swc-win32-x64-msvc@15.0.4':
optional: true
- '@next/swc-win32-x64-msvc@15.0.4':
+ '@next/swc-win32-x64-msvc@15.1.3':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -5405,12 +5543,12 @@ snapshots:
'@nolyfill/is-core-module@1.0.39': {}
- '@number-flow/react@0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@number-flow/react@0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
esm-env: 1.2.1
number-flow: 0.4.2
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
'@one-ini/wasm@0.1.1': {}
@@ -5484,1045 +5622,1045 @@ snapshots:
'@polka/url@1.0.0-next.28': {}
- '@react-aria/breadcrumbs@3.5.19(react@18.3.1)':
+ '@react-aria/breadcrumbs@3.5.19(react@19.0.0)':
dependencies:
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/link': 3.7.7(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/breadcrumbs': 3.7.9(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/link': 3.7.7(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/breadcrumbs': 3.7.9(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/button@3.11.0(react@18.3.1)':
+ '@react-aria/button@3.11.0(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/toolbar': 3.0.0-beta.11(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/toggle': 3.8.0(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/toolbar': 3.0.0-beta.11(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/toggle': 3.8.0(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/calendar@3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/calendar@3.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@internationalized/date': 3.6.0
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
'@react-aria/live-announcer': 3.4.1
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/calendar': 3.6.0(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/calendar': 3.5.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/calendar': 3.6.0(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/calendar': 3.5.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- '@react-aria/checkbox@3.15.0(react@18.3.1)':
- dependencies:
- '@react-aria/form': 3.0.11(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/toggle': 3.10.10(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/checkbox': 3.6.10(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/toggle': 3.8.0(react@18.3.1)
- '@react-types/checkbox': 3.9.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+
+ '@react-aria/checkbox@3.15.0(react@19.0.0)':
+ dependencies:
+ '@react-aria/form': 3.0.11(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/toggle': 3.10.10(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/checkbox': 3.6.10(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/toggle': 3.8.0(react@19.0.0)
+ '@react-types/checkbox': 3.9.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
-
- '@react-aria/color@3.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/numberfield': 3.11.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/slider': 3.7.14(react@18.3.1)
- '@react-aria/spinbutton': 3.6.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/textfield': 3.15.0(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-aria/visually-hidden': 3.8.18(react@18.3.1)
- '@react-stately/color': 3.8.1(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-types/color': 3.0.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+
+ '@react-aria/color@3.0.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/numberfield': 3.11.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/slider': 3.7.14(react@19.0.0)
+ '@react-aria/spinbutton': 3.6.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/textfield': 3.15.0(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-aria/visually-hidden': 3.8.18(react@19.0.0)
+ '@react-stately/color': 3.8.1(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-types/color': 3.0.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/combobox@3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/combobox@3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/listbox': 3.13.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/listbox': 3.13.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@react-aria/live-announcer': 3.4.1
- '@react-aria/menu': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/textfield': 3.15.0(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/combobox': 3.10.1(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/combobox': 3.13.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/menu': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/overlays': 3.24.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/textfield': 3.15.0(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/combobox': 3.10.1(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/combobox': 3.13.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/datepicker@3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/datepicker@3.12.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@internationalized/date': 3.6.0
'@internationalized/number': 3.6.0
'@internationalized/string': 3.2.5
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/form': 3.0.11(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/spinbutton': 3.6.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/datepicker': 3.11.0(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/calendar': 3.5.0(react@18.3.1)
- '@react-types/datepicker': 3.9.0(react@18.3.1)
- '@react-types/dialog': 3.5.14(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/form': 3.0.11(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/spinbutton': 3.6.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/datepicker': 3.11.0(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/calendar': 3.5.0(react@19.0.0)
+ '@react-types/datepicker': 3.9.0(react@19.0.0)
+ '@react-types/dialog': 3.5.14(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/dialog@3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/dialog@3.5.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/dialog': 3.5.14(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/overlays': 3.24.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/dialog': 3.5.14(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/disclosure@3.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/disclosure@3.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@react-aria/ssr': 3.9.7(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/disclosure': 3.0.0(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
+ '@react-aria/ssr': 3.9.7(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/disclosure': 3.0.0(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/dnd@3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/dnd@3.8.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@internationalized/string': 3.2.5
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
'@react-aria/live-announcer': 3.4.1
- '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/dnd': 3.5.0(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/overlays': 3.24.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/dnd': 3.5.0(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/focus@3.18.4(react@18.3.1)':
+ '@react-aria/focus@3.18.4(react@19.0.0)':
dependencies:
- '@react-aria/interactions': 3.22.4(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@swc/helpers': 0.5.15
+ '@react-aria/interactions': 3.22.4(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@swc/helpers': 0.5.13
clsx: 2.1.1
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/focus@3.19.0(react@18.3.1)':
+ '@react-aria/focus@3.19.0(react@19.0.0)':
dependencies:
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
clsx: 2.1.1
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/form@3.0.11(react@18.3.1)':
+ '@react-aria/form@3.0.11(react@19.0.0)':
dependencies:
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/grid@3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/grid@3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
'@react-aria/live-announcer': 3.4.1
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/grid': 3.10.0(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-types/checkbox': 3.9.0(react@18.3.1)
- '@react-types/grid': 3.2.10(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/grid': 3.10.0(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-types/checkbox': 3.9.0(react@19.0.0)
+ '@react-types/grid': 3.2.10(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- '@react-aria/gridlist@3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/grid': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/list': 3.11.1(react@18.3.1)
- '@react-stately/tree': 3.8.6(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+
+ '@react-aria/gridlist@3.10.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/grid': 3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/list': 3.11.1(react@19.0.0)
+ '@react-stately/tree': 3.8.6(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/i18n@3.12.4(react@18.3.1)':
+ '@react-aria/i18n@3.12.4(react@19.0.0)':
dependencies:
'@internationalized/date': 3.6.0
'@internationalized/message': 3.1.6
'@internationalized/number': 3.6.0
'@internationalized/string': 3.2.5
- '@react-aria/ssr': 3.9.7(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/ssr': 3.9.7(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/interactions@3.22.4(react@18.3.1)':
+ '@react-aria/interactions@3.22.4(react@19.0.0)':
dependencies:
- '@react-aria/ssr': 3.9.7(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@swc/helpers': 0.5.15
- react: 18.3.1
+ '@react-aria/ssr': 3.9.7(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@swc/helpers': 0.5.13
+ react: 19.0.0
- '@react-aria/interactions@3.22.5(react@18.3.1)':
+ '@react-aria/interactions@3.22.5(react@19.0.0)':
dependencies:
- '@react-aria/ssr': 3.9.7(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/ssr': 3.9.7(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/label@3.7.13(react@18.3.1)':
+ '@react-aria/label@3.7.13(react@19.0.0)':
dependencies:
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/link@3.7.7(react@18.3.1)':
+ '@react-aria/link@3.7.7(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/link': 3.5.9(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/link': 3.5.9(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
-
- '@react-aria/listbox@3.13.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/list': 3.11.1(react@18.3.1)
- '@react-types/listbox': 3.5.3(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+
+ '@react-aria/listbox@3.13.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/list': 3.11.1(react@19.0.0)
+ '@react-types/listbox': 3.5.3(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
'@react-aria/live-announcer@3.4.1':
dependencies:
'@swc/helpers': 0.5.15
- '@react-aria/menu@3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/menu': 3.9.0(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-stately/tree': 3.8.6(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/menu': 3.9.13(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/menu@3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/overlays': 3.24.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/menu': 3.9.0(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-stately/tree': 3.8.6(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/menu': 3.9.13(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/meter@3.4.18(react@18.3.1)':
+ '@react-aria/meter@3.4.18(react@19.0.0)':
dependencies:
- '@react-aria/progress': 3.4.18(react@18.3.1)
- '@react-types/meter': 3.4.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/progress': 3.4.18(react@19.0.0)
+ '@react-types/meter': 3.4.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
-
- '@react-aria/numberfield@3.11.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/spinbutton': 3.6.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/textfield': 3.15.0(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/numberfield': 3.9.8(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/numberfield': 3.8.7(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+
+ '@react-aria/numberfield@3.11.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/spinbutton': 3.6.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/textfield': 3.15.0(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/numberfield': 3.9.8(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/numberfield': 3.8.7(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- '@react-aria/overlays@3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/ssr': 3.9.7(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-aria/visually-hidden': 3.8.18(react@18.3.1)
- '@react-stately/overlays': 3.6.12(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/overlays': 3.8.11(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+
+ '@react-aria/overlays@3.24.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/ssr': 3.9.7(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-aria/visually-hidden': 3.8.18(react@19.0.0)
+ '@react-stately/overlays': 3.6.12(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/overlays': 3.8.11(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/progress@3.4.18(react@18.3.1)':
+ '@react-aria/progress@3.4.18(react@19.0.0)':
dependencies:
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/progress': 3.5.8(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/progress': 3.5.8(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
-
- '@react-aria/radio@3.10.10(react@18.3.1)':
- dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/form': 3.0.11(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/radio': 3.10.9(react@18.3.1)
- '@react-types/radio': 3.8.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+
+ '@react-aria/radio@3.10.10(react@19.0.0)':
+ dependencies:
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/form': 3.0.11(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/radio': 3.10.9(react@19.0.0)
+ '@react-types/radio': 3.8.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/searchfield@3.7.11(react@18.3.1)':
+ '@react-aria/searchfield@3.7.11(react@19.0.0)':
dependencies:
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/textfield': 3.15.0(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/searchfield': 3.5.8(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/searchfield': 3.5.10(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/textfield': 3.15.0(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/searchfield': 3.5.8(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/searchfield': 3.5.10(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
-
- '@react-aria/select@3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/form': 3.0.11(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/listbox': 3.13.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/menu': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-aria/visually-hidden': 3.8.18(react@18.3.1)
- '@react-stately/select': 3.6.9(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/select': 3.9.8(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+
+ '@react-aria/select@3.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/form': 3.0.11(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/listbox': 3.13.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/menu': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-aria/visually-hidden': 3.8.18(react@19.0.0)
+ '@react-stately/select': 3.6.9(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/select': 3.9.8(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/selection@3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/selection@3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/separator@3.4.4(react@18.3.1)':
+ '@react-aria/separator@3.4.4(react@19.0.0)':
dependencies:
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
-
- '@react-aria/slider@3.7.14(react@18.3.1)':
- dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/slider': 3.6.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/slider': 3.7.7(react@18.3.1)
+ react: 19.0.0
+
+ '@react-aria/slider@3.7.14(react@19.0.0)':
+ dependencies:
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/slider': 3.6.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/slider': 3.7.7(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/spinbutton@3.6.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/spinbutton@3.6.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@react-aria/i18n': 3.12.4(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
'@react-aria/live-announcer': 3.4.1
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
- '@react-aria/ssr@3.9.7(react@18.3.1)':
+ '@react-aria/ssr@3.9.7(react@19.0.0)':
dependencies:
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/switch@3.6.10(react@18.3.1)':
+ '@react-aria/switch@3.6.10(react@19.0.0)':
dependencies:
- '@react-aria/toggle': 3.10.10(react@18.3.1)
- '@react-stately/toggle': 3.8.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/switch': 3.5.7(react@18.3.1)
+ '@react-aria/toggle': 3.10.10(react@19.0.0)
+ '@react-stately/toggle': 3.8.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/switch': 3.5.7(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/table@3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-aria/table@3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/grid': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/grid': 3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
'@react-aria/live-announcer': 3.4.1
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-aria/visually-hidden': 3.8.18(react@18.3.1)
- '@react-stately/collections': 3.12.0(react@18.3.1)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-aria/visually-hidden': 3.8.18(react@19.0.0)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
'@react-stately/flags': 3.0.5
- '@react-stately/table': 3.13.0(react@18.3.1)
- '@react-types/checkbox': 3.9.0(react@18.3.1)
- '@react-types/grid': 3.2.10(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/table': 3.10.3(react@18.3.1)
+ '@react-stately/table': 3.13.0(react@19.0.0)
+ '@react-types/checkbox': 3.9.0(react@19.0.0)
+ '@react-types/grid': 3.2.10(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/table': 3.10.3(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- '@react-aria/tabs@3.9.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/tabs': 3.7.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/tabs': 3.3.11(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+
+ '@react-aria/tabs@3.9.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/tabs': 3.7.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/tabs': 3.3.11(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- '@react-aria/tag@3.4.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-aria/gridlist': 3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/list': 3.11.1(react@18.3.1)
- '@react-types/button': 3.10.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+
+ '@react-aria/tag@3.4.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-aria/gridlist': 3.10.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/list': 3.11.1(react@19.0.0)
+ '@react-types/button': 3.10.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- '@react-aria/textfield@3.15.0(react@18.3.1)':
- dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/form': 3.0.11(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/textfield': 3.10.0(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+
+ '@react-aria/textfield@3.15.0(react@19.0.0)':
+ dependencies:
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/form': 3.0.11(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/textfield': 3.10.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/toggle@3.10.10(react@18.3.1)':
+ '@react-aria/toggle@3.10.10(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/toggle': 3.8.0(react@18.3.1)
- '@react-types/checkbox': 3.9.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/toggle': 3.8.0(react@19.0.0)
+ '@react-types/checkbox': 3.9.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/toolbar@3.0.0-beta.11(react@18.3.1)':
+ '@react-aria/toolbar@3.0.0-beta.11(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/tooltip@3.7.10(react@18.3.1)':
+ '@react-aria/tooltip@3.7.10(react@19.0.0)':
dependencies:
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-stately/tooltip': 3.5.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/tooltip': 3.4.13(react@18.3.1)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-stately/tooltip': 3.5.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/tooltip': 3.4.13(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/utils@3.26.0(react@18.3.1)':
+ '@react-aria/utils@3.26.0(react@19.0.0)':
dependencies:
- '@react-aria/ssr': 3.9.7(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/ssr': 3.9.7(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
clsx: 2.1.1
- react: 18.3.1
+ react: 19.0.0
- '@react-aria/visually-hidden@3.8.18(react@18.3.1)':
+ '@react-aria/visually-hidden@3.8.18(react@19.0.0)':
dependencies:
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-email/body@0.0.11(react@18.3.1)':
+ '@react-email/body@0.0.11(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/button@0.0.19(react@18.3.1)':
+ '@react-email/button@0.0.19(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/code-block@0.0.11(react@18.3.1)':
+ '@react-email/code-block@0.0.11(react@19.0.0)':
dependencies:
prismjs: 1.29.0
- react: 18.3.1
-
- '@react-email/code-inline@0.0.5(react@18.3.1)':
- dependencies:
- react: 18.3.1
-
- '@react-email/column@0.0.13(react@18.3.1)':
- dependencies:
- react: 18.3.1
-
- '@react-email/components@0.0.31(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@react-email/body': 0.0.11(react@18.3.1)
- '@react-email/button': 0.0.19(react@18.3.1)
- '@react-email/code-block': 0.0.11(react@18.3.1)
- '@react-email/code-inline': 0.0.5(react@18.3.1)
- '@react-email/column': 0.0.13(react@18.3.1)
- '@react-email/container': 0.0.15(react@18.3.1)
- '@react-email/font': 0.0.9(react@18.3.1)
- '@react-email/head': 0.0.12(react@18.3.1)
- '@react-email/heading': 0.0.15(react@18.3.1)
- '@react-email/hr': 0.0.11(react@18.3.1)
- '@react-email/html': 0.0.11(react@18.3.1)
- '@react-email/img': 0.0.11(react@18.3.1)
- '@react-email/link': 0.0.12(react@18.3.1)
- '@react-email/markdown': 0.0.14(react@18.3.1)
- '@react-email/preview': 0.0.12(react@18.3.1)
- '@react-email/render': 1.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-email/row': 0.0.12(react@18.3.1)
- '@react-email/section': 0.0.16(react@18.3.1)
- '@react-email/tailwind': 1.0.4(react@18.3.1)
- '@react-email/text': 0.0.11(react@18.3.1)
- react: 18.3.1
+ react: 19.0.0
+
+ '@react-email/code-inline@0.0.5(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/column@0.0.13(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/components@0.0.31(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-email/body': 0.0.11(react@19.0.0)
+ '@react-email/button': 0.0.19(react@19.0.0)
+ '@react-email/code-block': 0.0.11(react@19.0.0)
+ '@react-email/code-inline': 0.0.5(react@19.0.0)
+ '@react-email/column': 0.0.13(react@19.0.0)
+ '@react-email/container': 0.0.15(react@19.0.0)
+ '@react-email/font': 0.0.9(react@19.0.0)
+ '@react-email/head': 0.0.12(react@19.0.0)
+ '@react-email/heading': 0.0.15(react@19.0.0)
+ '@react-email/hr': 0.0.11(react@19.0.0)
+ '@react-email/html': 0.0.11(react@19.0.0)
+ '@react-email/img': 0.0.11(react@19.0.0)
+ '@react-email/link': 0.0.12(react@19.0.0)
+ '@react-email/markdown': 0.0.14(react@19.0.0)
+ '@react-email/preview': 0.0.12(react@19.0.0)
+ '@react-email/render': 1.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-email/row': 0.0.12(react@19.0.0)
+ '@react-email/section': 0.0.16(react@19.0.0)
+ '@react-email/tailwind': 1.0.4(react@19.0.0)
+ '@react-email/text': 0.0.11(react@19.0.0)
+ react: 19.0.0
transitivePeerDependencies:
- react-dom
- '@react-email/container@0.0.15(react@18.3.1)':
+ '@react-email/container@0.0.15(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/font@0.0.9(react@18.3.1)':
+ '@react-email/font@0.0.9(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/head@0.0.12(react@18.3.1)':
+ '@react-email/head@0.0.12(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/heading@0.0.15(react@18.3.1)':
+ '@react-email/heading@0.0.15(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/hr@0.0.11(react@18.3.1)':
+ '@react-email/hr@0.0.11(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/html@0.0.11(react@18.3.1)':
+ '@react-email/html@0.0.11(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/img@0.0.11(react@18.3.1)':
+ '@react-email/img@0.0.11(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/link@0.0.12(react@18.3.1)':
+ '@react-email/link@0.0.12(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/markdown@0.0.14(react@18.3.1)':
+ '@react-email/markdown@0.0.14(react@19.0.0)':
dependencies:
- md-to-react-email: 5.0.5(react@18.3.1)
- react: 18.3.1
+ md-to-react-email: 5.0.5(react@19.0.0)
+ react: 19.0.0
- '@react-email/preview@0.0.12(react@18.3.1)':
+ '@react-email/preview@0.0.12(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/render@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-email/render@1.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
html-to-text: 9.0.5
js-beautify: 1.15.1
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
react-promise-suspense: 0.3.4
- '@react-email/render@1.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-email/render@1.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
html-to-text: 9.0.5
prettier: 3.3.3
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
react-promise-suspense: 0.3.4
- '@react-email/row@0.0.12(react@18.3.1)':
+ '@react-email/row@0.0.12(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/section@0.0.16(react@18.3.1)':
+ '@react-email/section@0.0.16(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/tailwind@1.0.4(react@18.3.1)':
+ '@react-email/tailwind@1.0.4(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-email/text@0.0.11(react@18.3.1)':
+ '@react-email/text@0.0.11(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/calendar@3.6.0(react@18.3.1)':
+ '@react-stately/calendar@3.6.0(react@19.0.0)':
dependencies:
'@internationalized/date': 3.6.0
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/calendar': 3.5.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/calendar': 3.5.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/checkbox@3.6.10(react@18.3.1)':
+ '@react-stately/checkbox@3.6.10(react@19.0.0)':
dependencies:
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/checkbox': 3.9.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/checkbox': 3.9.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/collections@3.12.0(react@18.3.1)':
+ '@react-stately/collections@3.12.0(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/color@3.8.1(react@18.3.1)':
+ '@react-stately/color@3.8.1(react@19.0.0)':
dependencies:
'@internationalized/number': 3.6.0
'@internationalized/string': 3.2.5
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/numberfield': 3.9.8(react@18.3.1)
- '@react-stately/slider': 3.6.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/color': 3.0.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/numberfield': 3.9.8(react@19.0.0)
+ '@react-stately/slider': 3.6.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/color': 3.0.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
-
- '@react-stately/combobox@3.10.1(react@18.3.1)':
- dependencies:
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/list': 3.11.1(react@18.3.1)
- '@react-stately/overlays': 3.6.12(react@18.3.1)
- '@react-stately/select': 3.6.9(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/combobox': 3.13.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ react: 19.0.0
+
+ '@react-stately/combobox@3.10.1(react@19.0.0)':
+ dependencies:
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/list': 3.11.1(react@19.0.0)
+ '@react-stately/overlays': 3.6.12(react@19.0.0)
+ '@react-stately/select': 3.6.9(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/combobox': 3.13.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/data@3.12.0(react@18.3.1)':
+ '@react-stately/data@3.12.0(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/datepicker@3.11.0(react@18.3.1)':
+ '@react-stately/datepicker@3.11.0(react@19.0.0)':
dependencies:
'@internationalized/date': 3.6.0
'@internationalized/string': 3.2.5
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/overlays': 3.6.12(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/datepicker': 3.9.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/overlays': 3.6.12(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/datepicker': 3.9.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/disclosure@3.0.0(react@18.3.1)':
+ '@react-stately/disclosure@3.0.0(react@19.0.0)':
dependencies:
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/dnd@3.5.0(react@18.3.1)':
+ '@react-stately/dnd@3.5.0(react@19.0.0)':
dependencies:
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
'@react-stately/flags@3.0.5':
dependencies:
'@swc/helpers': 0.5.15
- '@react-stately/form@3.1.0(react@18.3.1)':
+ '@react-stately/form@3.1.0(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/grid@3.10.0(react@18.3.1)':
+ '@react-stately/grid@3.10.0(react@19.0.0)':
dependencies:
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-types/grid': 3.2.10(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-types/grid': 3.2.10(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/list@3.11.1(react@18.3.1)':
+ '@react-stately/list@3.11.1(react@19.0.0)':
dependencies:
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/menu@3.9.0(react@18.3.1)':
+ '@react-stately/menu@3.9.0(react@19.0.0)':
dependencies:
- '@react-stately/overlays': 3.6.12(react@18.3.1)
- '@react-types/menu': 3.9.13(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/overlays': 3.6.12(react@19.0.0)
+ '@react-types/menu': 3.9.13(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/numberfield@3.9.8(react@18.3.1)':
+ '@react-stately/numberfield@3.9.8(react@19.0.0)':
dependencies:
'@internationalized/number': 3.6.0
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/numberfield': 3.8.7(react@18.3.1)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/numberfield': 3.8.7(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/overlays@3.6.12(react@18.3.1)':
+ '@react-stately/overlays@3.6.12(react@19.0.0)':
dependencies:
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/overlays': 3.8.11(react@18.3.1)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/overlays': 3.8.11(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/radio@3.10.9(react@18.3.1)':
+ '@react-stately/radio@3.10.9(react@19.0.0)':
dependencies:
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/radio': 3.8.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/radio': 3.8.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/searchfield@3.5.8(react@18.3.1)':
+ '@react-stately/searchfield@3.5.8(react@19.0.0)':
dependencies:
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/searchfield': 3.5.10(react@18.3.1)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/searchfield': 3.5.10(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/select@3.6.9(react@18.3.1)':
+ '@react-stately/select@3.6.9(react@19.0.0)':
dependencies:
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/list': 3.11.1(react@18.3.1)
- '@react-stately/overlays': 3.6.12(react@18.3.1)
- '@react-types/select': 3.9.8(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/list': 3.11.1(react@19.0.0)
+ '@react-stately/overlays': 3.6.12(react@19.0.0)
+ '@react-types/select': 3.9.8(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/selection@3.18.0(react@18.3.1)':
+ '@react-stately/selection@3.18.0(react@19.0.0)':
dependencies:
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/slider@3.6.0(react@18.3.1)':
+ '@react-stately/slider@3.6.0(react@19.0.0)':
dependencies:
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/slider': 3.7.7(react@18.3.1)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/slider': 3.7.7(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/table@3.13.0(react@18.3.1)':
+ '@react-stately/table@3.13.0(react@19.0.0)':
dependencies:
- '@react-stately/collections': 3.12.0(react@18.3.1)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
'@react-stately/flags': 3.0.5
- '@react-stately/grid': 3.10.0(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/grid': 3.2.10(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/table': 3.10.3(react@18.3.1)
+ '@react-stately/grid': 3.10.0(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/grid': 3.2.10(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/table': 3.10.3(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/tabs@3.7.0(react@18.3.1)':
+ '@react-stately/tabs@3.7.0(react@19.0.0)':
dependencies:
- '@react-stately/list': 3.11.1(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/tabs': 3.3.11(react@18.3.1)
+ '@react-stately/list': 3.11.1(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/tabs': 3.3.11(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/toggle@3.8.0(react@18.3.1)':
+ '@react-stately/toggle@3.8.0(react@19.0.0)':
dependencies:
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/checkbox': 3.9.0(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/checkbox': 3.9.0(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/tooltip@3.5.0(react@18.3.1)':
+ '@react-stately/tooltip@3.5.0(react@19.0.0)':
dependencies:
- '@react-stately/overlays': 3.6.12(react@18.3.1)
- '@react-types/tooltip': 3.4.13(react@18.3.1)
+ '@react-stately/overlays': 3.6.12(react@19.0.0)
+ '@react-types/tooltip': 3.4.13(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/tree@3.8.6(react@18.3.1)':
+ '@react-stately/tree@3.8.6(react@19.0.0)':
dependencies:
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-stately/utils': 3.10.5(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-stately/utils': 3.10.5(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-stately/utils@3.10.5(react@18.3.1)':
+ '@react-stately/utils@3.10.5(react@19.0.0)':
dependencies:
'@swc/helpers': 0.5.15
- react: 18.3.1
+ react: 19.0.0
- '@react-types/breadcrumbs@3.7.9(react@18.3.1)':
+ '@react-types/breadcrumbs@3.7.9(react@19.0.0)':
dependencies:
- '@react-types/link': 3.5.9(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/link': 3.5.9(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/button@3.10.1(react@18.3.1)':
+ '@react-types/button@3.10.1(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/calendar@3.5.0(react@18.3.1)':
+ '@react-types/calendar@3.5.0(react@19.0.0)':
dependencies:
'@internationalized/date': 3.6.0
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/checkbox@3.9.0(react@18.3.1)':
+ '@react-types/checkbox@3.9.0(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/color@3.0.1(react@18.3.1)':
+ '@react-types/color@3.0.1(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/slider': 3.7.7(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/slider': 3.7.7(react@19.0.0)
+ react: 19.0.0
- '@react-types/combobox@3.13.1(react@18.3.1)':
+ '@react-types/combobox@3.13.1(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/datepicker@3.9.0(react@18.3.1)':
+ '@react-types/datepicker@3.9.0(react@19.0.0)':
dependencies:
'@internationalized/date': 3.6.0
- '@react-types/calendar': 3.5.0(react@18.3.1)
- '@react-types/overlays': 3.8.11(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/calendar': 3.5.0(react@19.0.0)
+ '@react-types/overlays': 3.8.11(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/dialog@3.5.14(react@18.3.1)':
+ '@react-types/dialog@3.5.14(react@19.0.0)':
dependencies:
- '@react-types/overlays': 3.8.11(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/overlays': 3.8.11(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/grid@3.2.10(react@18.3.1)':
+ '@react-types/grid@3.2.10(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/link@3.5.9(react@18.3.1)':
+ '@react-types/link@3.5.9(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/listbox@3.5.3(react@18.3.1)':
+ '@react-types/listbox@3.5.3(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/menu@3.9.13(react@18.3.1)':
+ '@react-types/menu@3.9.13(react@19.0.0)':
dependencies:
- '@react-types/overlays': 3.8.11(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/overlays': 3.8.11(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/meter@3.4.5(react@18.3.1)':
+ '@react-types/meter@3.4.5(react@19.0.0)':
dependencies:
- '@react-types/progress': 3.5.8(react@18.3.1)
- react: 18.3.1
+ '@react-types/progress': 3.5.8(react@19.0.0)
+ react: 19.0.0
- '@react-types/numberfield@3.8.7(react@18.3.1)':
+ '@react-types/numberfield@3.8.7(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/overlays@3.8.11(react@18.3.1)':
+ '@react-types/overlays@3.8.11(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/progress@3.5.8(react@18.3.1)':
+ '@react-types/progress@3.5.8(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/radio@3.8.5(react@18.3.1)':
+ '@react-types/radio@3.8.5(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/searchfield@3.5.10(react@18.3.1)':
+ '@react-types/searchfield@3.5.10(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- '@react-types/textfield': 3.10.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ '@react-types/textfield': 3.10.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/select@3.9.8(react@18.3.1)':
+ '@react-types/select@3.9.8(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/shared@3.26.0(react@18.3.1)':
+ '@react-types/shared@3.26.0(react@19.0.0)':
dependencies:
- react: 18.3.1
+ react: 19.0.0
- '@react-types/slider@3.7.7(react@18.3.1)':
+ '@react-types/slider@3.7.7(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/switch@3.5.7(react@18.3.1)':
+ '@react-types/switch@3.5.7(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/table@3.10.3(react@18.3.1)':
+ '@react-types/table@3.10.3(react@19.0.0)':
dependencies:
- '@react-types/grid': 3.2.10(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/grid': 3.2.10(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/tabs@3.3.11(react@18.3.1)':
+ '@react-types/tabs@3.3.11(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/textfield@3.10.0(react@18.3.1)':
+ '@react-types/textfield@3.10.0(react@19.0.0)':
dependencies:
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
- '@react-types/tooltip@3.4.13(react@18.3.1)':
+ '@react-types/tooltip@3.4.13(react@19.0.0)':
dependencies:
- '@react-types/overlays': 3.8.11(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
+ '@react-types/overlays': 3.8.11(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
'@rtsao/scc@1.1.0': {}
@@ -6547,11 +6685,6 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@swc/helpers@0.5.5':
- dependencies:
- '@swc/counter': 0.1.3
- tslib: 2.8.1
-
'@t3-oss/env-core@0.11.1(typescript@5.7.2)(zod@3.24.1)':
dependencies:
zod: 3.24.1
@@ -6573,18 +6706,18 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.17
- '@tanstack/query-core@5.62.12': {}
+ '@tanstack/query-core@5.62.15': {}
- '@tanstack/react-query@5.62.14(react@18.3.1)':
+ '@tanstack/react-query@5.62.15(react@19.0.0)':
dependencies:
- '@tanstack/query-core': 5.62.12
- react: 18.3.1
+ '@tanstack/query-core': 5.62.15
+ react: 19.0.0
- '@tanstack/react-virtual@3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@tanstack/react-virtual@3.10.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@tanstack/virtual-core': 3.10.8
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
'@tanstack/virtual-core@3.10.8': {}
@@ -6593,25 +6726,25 @@ snapshots:
'@trpc/server': 11.0.0-rc.666(typescript@5.7.2)
typescript: 5.7.2
- '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.62.14(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.14(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)':
+ '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(next@15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2)':
dependencies:
'@trpc/client': 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2)
'@trpc/server': 11.0.0-rc.666(typescript@5.7.2)
- next: 14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ next: 15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
typescript: 5.7.2
optionalDependencies:
- '@tanstack/react-query': 5.62.14(react@18.3.1)
- '@trpc/react-query': 11.0.0-rc.666(@tanstack/react-query@5.62.14(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
+ '@tanstack/react-query': 5.62.15(react@19.0.0)
+ '@trpc/react-query': 11.0.0-rc.666(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2)
- '@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.14(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)':
+ '@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2)':
dependencies:
- '@tanstack/react-query': 5.62.14(react@18.3.1)
+ '@tanstack/react-query': 5.62.15(react@19.0.0)
'@trpc/client': 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.2))(typescript@5.7.2)
'@trpc/server': 11.0.0-rc.666(typescript@5.7.2)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
typescript: 5.7.2
'@trpc/server@11.0.0-rc.666(typescript@5.7.2)':
@@ -6675,11 +6808,8 @@ snapshots:
'@types/prismjs@1.26.5': {}
- '@types/prop-types@15.7.13': {}
-
- '@types/react@18.3.12':
+ '@types/react@19.0.2':
dependencies:
- '@types/prop-types': 15.7.13
csstype: 3.1.3
'@types/unist@2.0.10': {}
@@ -6690,15 +6820,15 @@ snapshots:
'@types/unist@3.0.3': {}
- '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2)':
+ '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.19.0(eslint@8.57.0)(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.19.0
- '@typescript-eslint/type-utils': 8.19.0(eslint@8.57.0)(typescript@5.7.2)
- '@typescript-eslint/utils': 8.19.0(eslint@8.57.0)(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.19.0
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
@@ -6707,14 +6837,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2)':
+ '@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.19.0
'@typescript-eslint/types': 8.19.0
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.19.0
debug: 4.4.0
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
@@ -6724,12 +6854,12 @@ snapshots:
'@typescript-eslint/types': 8.19.0
'@typescript-eslint/visitor-keys': 8.19.0
- '@typescript-eslint/type-utils@8.19.0(eslint@8.57.0)(typescript@5.7.2)':
+ '@typescript-eslint/type-utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
- '@typescript-eslint/utils': 8.19.0(eslint@8.57.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
debug: 4.4.0
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
ts-api-utils: 1.4.3(typescript@5.7.2)
typescript: 5.7.2
transitivePeerDependencies:
@@ -6751,13 +6881,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.19.0(eslint@8.57.0)(typescript@5.7.2)':
+ '@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0)
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
'@typescript-eslint/scope-manager': 8.19.0
'@typescript-eslint/types': 8.19.0
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
@@ -6808,10 +6938,6 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
- acorn-jsx@5.3.2(acorn@8.11.3):
- dependencies:
- acorn: 8.11.3
-
acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
acorn: 8.14.0
@@ -6820,8 +6946,6 @@ snapshots:
dependencies:
acorn: 8.14.0
- acorn@8.11.3: {}
-
acorn@8.14.0: {}
ajv@6.12.6:
@@ -7022,7 +7146,7 @@ snapshots:
browserslist@4.23.3:
dependencies:
- caniuse-lite: 1.0.30001690
+ caniuse-lite: 1.0.30001668
electron-to-chromium: 1.5.5
node-releases: 2.0.18
update-browserslist-db: 1.1.0(browserslist@4.23.3)
@@ -7080,6 +7204,8 @@ snapshots:
caniuse-lite@1.0.30001651: {}
+ caniuse-lite@1.0.30001668: {}
+
caniuse-lite@1.0.30001690: {}
ccount@2.0.1: {}
@@ -7265,10 +7391,6 @@ snapshots:
dependencies:
ms: 2.1.3
- debug@4.3.4:
- dependencies:
- ms: 2.1.2
-
debug@4.3.7:
dependencies:
ms: 2.1.3
@@ -7356,10 +7478,6 @@ snapshots:
dependencies:
esutils: 2.0.3
- doctrine@3.0.0:
- dependencies:
- esutils: 2.0.3
-
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
@@ -7635,19 +7753,19 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@15.1.3(eslint@8.57.0)(typescript@5.7.2):
+ eslint-config-next@15.1.3(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2):
dependencies:
'@next/eslint-plugin-next': 15.1.3
'@rushstack/eslint-patch': 1.10.4
- '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2)
- '@typescript-eslint/parser': 8.19.0(eslint@8.57.0)(typescript@5.7.2)
- eslint: 8.57.0
+ '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+ eslint: 9.17.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0)
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
- eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0)
- eslint-plugin-react: 7.37.3(eslint@8.57.0)
- eslint-plugin-react-hooks: 5.1.0(eslint@8.57.0)
+ eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.17.0(jiti@2.4.2))
+ eslint-plugin-react: 7.37.3(eslint@9.17.0(jiti@2.4.2))
+ eslint-plugin-react-hooks: 5.1.0(eslint@9.17.0(jiti@2.4.2))
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
@@ -7655,14 +7773,14 @@ snapshots:
- eslint-plugin-import-x
- supports-color
- eslint-config-prettier@9.1.0(eslint@8.57.0):
+ eslint-config-prettier@9.1.0(eslint@9.17.0(jiti@2.4.2)):
dependencies:
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
- eslint-config-turbo@2.3.3(eslint@8.57.0):
+ eslint-config-turbo@2.3.3(eslint@9.17.0(jiti@2.4.2)):
dependencies:
- eslint: 8.57.0
- eslint-plugin-turbo: 2.3.3(eslint@8.57.0)
+ eslint: 9.17.0(jiti@2.4.2)
+ eslint-plugin-turbo: 2.3.3(eslint@9.17.0(jiti@2.4.2))
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -7672,34 +7790,34 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0):
+ eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
enhanced-resolve: 5.18.0
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
fast-glob: 3.3.2
get-tsconfig: 4.8.1
is-bun-module: 1.3.0
is-glob: 4.0.3
stable-hash: 0.0.4
optionalDependencies:
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.19.0(eslint@8.57.0)(typescript@5.7.2)
- eslint: 8.57.0
+ '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+ eslint: 9.17.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0)
+ eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -7708,9 +7826,9 @@ snapshots:
array.prototype.flatmap: 1.3.2
debug: 3.2.7
doctrine: 2.1.0
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -7722,13 +7840,13 @@ snapshots:
string.prototype.trimend: 1.0.8
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.19.0(eslint@8.57.0)(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.0):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.17.0(jiti@2.4.2)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.8
@@ -7738,7 +7856,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -7747,11 +7865,23 @@ snapshots:
safe-regex-test: 1.0.3
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@5.1.0(eslint@8.57.0):
+ eslint-plugin-react-compiler@19.0.0-beta-55955c9-20241229(eslint@9.17.0(jiti@2.4.2)):
dependencies:
- eslint: 8.57.0
+ '@babel/core': 7.26.0
+ '@babel/parser': 7.26.3
+ '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.0)
+ eslint: 9.17.0(jiti@2.4.2)
+ hermes-parser: 0.25.1
+ zod: 3.24.1
+ zod-validation-error: 3.4.0(zod@3.24.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.2)):
+ dependencies:
+ eslint: 9.17.0(jiti@2.4.2)
- eslint-plugin-react@7.37.3(eslint@8.57.0):
+ eslint-plugin-react@7.37.3(eslint@9.17.0(jiti@2.4.2)):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -7759,7 +7889,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -7773,12 +7903,18 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-turbo@2.3.3(eslint@8.57.0):
+ eslint-plugin-turbo@2.3.3(eslint@9.17.0(jiti@2.4.2)):
dependencies:
dotenv: 16.0.3
- eslint: 8.57.0
+ eslint: 9.17.0(jiti@2.4.2)
- eslint-scope@7.2.2:
+ eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)):
+ dependencies:
+ eslint: 9.17.0(jiti@2.4.2)
+ optionalDependencies:
+ '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+
+ eslint-scope@8.2.0:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
@@ -7787,56 +7923,54 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@8.57.0:
+ eslint@9.17.0(jiti@2.4.2):
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@eslint-community/regexpp': 4.10.0
- '@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.0
- '@humanwhocodes/config-array': 0.11.14
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/config-array': 0.19.1
+ '@eslint/core': 0.9.1
+ '@eslint/eslintrc': 3.2.0
+ '@eslint/js': 9.17.0
+ '@eslint/plugin-kit': 0.2.4
+ '@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
- '@nodelib/fs.walk': 1.2.8
- '@ungap/structured-clone': 1.2.0
+ '@humanwhocodes/retry': 0.4.1
+ '@types/estree': 1.0.6
+ '@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.3.4
- doctrine: 3.0.0
+ debug: 4.4.0
escape-string-regexp: 4.0.0
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
+ eslint-scope: 8.2.0
+ eslint-visitor-keys: 4.2.0
+ espree: 10.3.0
esquery: 1.5.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
+ file-entry-cache: 8.0.0
find-up: 5.0.0
glob-parent: 6.0.2
- globals: 13.24.0
- graphemer: 1.4.0
- ignore: 5.3.1
+ ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
- is-path-inside: 3.0.3
- js-yaml: 4.1.0
json-stable-stringify-without-jsonify: 1.0.1
- levn: 0.4.1
lodash.merge: 4.6.2
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
- strip-ansi: 6.0.1
- text-table: 0.2.0
+ optionalDependencies:
+ jiti: 2.4.2
transitivePeerDependencies:
- supports-color
esm-env@1.2.1: {}
- espree@9.6.1:
+ espree@10.3.0:
dependencies:
- acorn: 8.11.3
- acorn-jsx: 5.3.2(acorn@8.11.3)
- eslint-visitor-keys: 3.4.3
+ acorn: 8.14.0
+ acorn-jsx: 5.3.2(acorn@8.14.0)
+ eslint-visitor-keys: 4.2.0
esprima@4.0.1: {}
@@ -7937,9 +8071,9 @@ snapshots:
fflate@0.4.8: {}
- file-entry-cache@6.0.1:
+ file-entry-cache@8.0.0:
dependencies:
- flat-cache: 3.2.0
+ flat-cache: 4.0.1
fill-range@7.1.1:
dependencies:
@@ -7957,11 +8091,10 @@ snapshots:
micromatch: 4.0.8
resolve-dir: 1.0.1
- flat-cache@3.2.0:
+ flat-cache@4.0.1:
dependencies:
flatted: 3.3.1
keyv: 4.5.4
- rimraf: 3.0.2
flatted@3.3.1: {}
@@ -8105,9 +8238,7 @@ snapshots:
globals@11.12.0: {}
- globals@13.24.0:
- dependencies:
- type-fest: 0.20.2
+ globals@14.0.0: {}
globalthis@1.0.4:
dependencies:
@@ -8218,6 +8349,12 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
+ hermes-estree@0.25.1: {}
+
+ hermes-parser@0.25.1:
+ dependencies:
+ hermes-estree: 0.25.1
+
homedir-polyfill@1.0.3:
dependencies:
parse-passwd: 1.0.0
@@ -8253,8 +8390,6 @@ snapshots:
ieee754@1.2.1: {}
- ignore@5.3.1: {}
-
ignore@5.3.2: {}
image-size@1.1.1:
@@ -8426,8 +8561,6 @@ snapshots:
is-number@7.0.0: {}
- is-path-inside@3.0.3: {}
-
is-plain-obj@4.1.0: {}
is-plain-object@5.0.0: {}
@@ -8629,9 +8762,9 @@ snapshots:
dependencies:
yallist: 3.1.1
- lucide-react@0.469.0(react@18.3.1):
+ lucide-react@0.469.0(react@19.0.0):
dependencies:
- react: 18.3.1
+ react: 19.0.0
magic-string@0.30.17:
dependencies:
@@ -8652,10 +8785,10 @@ snapshots:
math-intrinsics@1.1.0: {}
- md-to-react-email@5.0.5(react@18.3.1):
+ md-to-react-email@5.0.5(react@19.0.0):
dependencies:
marked: 7.0.4
- react: 18.3.1
+ react: 19.0.0
mdast-util-from-markdown@2.0.2:
dependencies:
@@ -9007,8 +9140,6 @@ snapshots:
mrmime@2.0.0: {}
- ms@2.1.2: {}
-
ms@2.1.3: {}
mu2@0.5.21: {}
@@ -9033,20 +9164,20 @@ snapshots:
negotiator@0.6.3: {}
- next-cloudinary@6.16.0(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1))(react@18.3.1):
+ next-cloudinary@6.16.0(next@15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0):
dependencies:
'@cloudinary-util/types': 1.5.10
'@cloudinary-util/url-loader': 5.10.4
'@cloudinary-util/util': 4.0.0
- next: 14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1)
- react: 18.3.1
+ next: 15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1)
+ react: 19.0.0
- next-mdx-remote@5.0.0(@types/react@18.3.12)(acorn@8.14.0)(react@18.3.1):
+ next-mdx-remote@5.0.0(@types/react@19.0.2)(acorn@8.14.0)(react@19.0.0):
dependencies:
'@babel/code-frame': 7.24.6
'@mdx-js/mdx': 3.1.0(acorn@8.14.0)
- '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1)
- react: 18.3.1
+ '@mdx-js/react': 3.1.0(@types/react@19.0.2)(react@19.0.0)
+ react: 19.0.0
unist-util-remove: 3.1.1
vfile: 6.0.1
vfile-matter: 5.0.0
@@ -9055,53 +9186,53 @@ snapshots:
- acorn
- supports-color
- next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1):
+ next@15.0.4(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1):
dependencies:
- '@next/env': 14.2.21
- '@swc/helpers': 0.5.5
+ '@next/env': 15.0.4
+ '@swc/counter': 0.1.3
+ '@swc/helpers': 0.5.13
busboy: 1.6.0
caniuse-lite: 1.0.30001690
- graceful-fs: 4.2.11
postcss: 8.4.31
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.1(@babel/core@7.24.5)(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ styled-jsx: 5.1.6(@babel/core@7.24.5)(react@19.0.0)
optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.21
- '@next/swc-darwin-x64': 14.2.21
- '@next/swc-linux-arm64-gnu': 14.2.21
- '@next/swc-linux-arm64-musl': 14.2.21
- '@next/swc-linux-x64-gnu': 14.2.21
- '@next/swc-linux-x64-musl': 14.2.21
- '@next/swc-win32-arm64-msvc': 14.2.21
- '@next/swc-win32-ia32-msvc': 14.2.21
- '@next/swc-win32-x64-msvc': 14.2.21
+ '@next/swc-darwin-arm64': 15.0.4
+ '@next/swc-darwin-x64': 15.0.4
+ '@next/swc-linux-arm64-gnu': 15.0.4
+ '@next/swc-linux-arm64-musl': 15.0.4
+ '@next/swc-linux-x64-gnu': 15.0.4
+ '@next/swc-linux-x64-musl': 15.0.4
+ '@next/swc-win32-arm64-msvc': 15.0.4
+ '@next/swc-win32-x64-msvc': 15.0.4
'@playwright/test': 1.49.1
sass: 1.83.1
+ sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- next@15.0.4(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1):
+ next@15.1.3(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1):
dependencies:
- '@next/env': 15.0.4
+ '@next/env': 15.1.3
'@swc/counter': 0.1.3
- '@swc/helpers': 0.5.13
+ '@swc/helpers': 0.5.15
busboy: 1.6.0
caniuse-lite: 1.0.30001690
postcss: 8.4.31
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.6(@babel/core@7.24.5)(react@18.3.1)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ styled-jsx: 5.1.6(@babel/core@7.24.5)(react@19.0.0)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.0.4
- '@next/swc-darwin-x64': 15.0.4
- '@next/swc-linux-arm64-gnu': 15.0.4
- '@next/swc-linux-arm64-musl': 15.0.4
- '@next/swc-linux-x64-gnu': 15.0.4
- '@next/swc-linux-x64-musl': 15.0.4
- '@next/swc-win32-arm64-msvc': 15.0.4
- '@next/swc-win32-x64-msvc': 15.0.4
+ '@next/swc-darwin-arm64': 15.1.3
+ '@next/swc-darwin-x64': 15.1.3
+ '@next/swc-linux-arm64-gnu': 15.1.3
+ '@next/swc-linux-arm64-musl': 15.1.3
+ '@next/swc-linux-x64-gnu': 15.1.3
+ '@next/swc-linux-x64-musl': 15.1.3
+ '@next/swc-win32-arm64-msvc': 15.1.3
+ '@next/swc-win32-x64-msvc': 15.1.3
'@playwright/test': 1.49.1
sass: 1.83.1
sharp: 0.33.5
@@ -9381,11 +9512,11 @@ snapshots:
prettier@3.4.2: {}
- prism-react-renderer@2.4.1(react@18.3.1):
+ prism-react-renderer@2.4.1(react@19.0.0):
dependencies:
'@types/prismjs': 1.26.5
clsx: 2.1.1
- react: 18.3.1
+ react: 19.0.0
prismjs@1.29.0: {}
@@ -9418,57 +9549,56 @@ snapshots:
iconv-lite: 0.4.24
unpipe: 1.0.0
- react-aria@3.36.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ react-aria@3.36.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
'@internationalized/string': 3.2.5
- '@react-aria/breadcrumbs': 3.5.19(react@18.3.1)
- '@react-aria/button': 3.11.0(react@18.3.1)
- '@react-aria/calendar': 3.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/checkbox': 3.15.0(react@18.3.1)
- '@react-aria/color': 3.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/combobox': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/datepicker': 3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/dialog': 3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/disclosure': 3.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/dnd': 3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/focus': 3.19.0(react@18.3.1)
- '@react-aria/gridlist': 3.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/i18n': 3.12.4(react@18.3.1)
- '@react-aria/interactions': 3.22.5(react@18.3.1)
- '@react-aria/label': 3.7.13(react@18.3.1)
- '@react-aria/link': 3.7.7(react@18.3.1)
- '@react-aria/listbox': 3.13.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/menu': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/meter': 3.4.18(react@18.3.1)
- '@react-aria/numberfield': 3.11.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/progress': 3.4.18(react@18.3.1)
- '@react-aria/radio': 3.10.10(react@18.3.1)
- '@react-aria/searchfield': 3.7.11(react@18.3.1)
- '@react-aria/select': 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/separator': 3.4.4(react@18.3.1)
- '@react-aria/slider': 3.7.14(react@18.3.1)
- '@react-aria/ssr': 3.9.7(react@18.3.1)
- '@react-aria/switch': 3.6.10(react@18.3.1)
- '@react-aria/table': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/tabs': 3.9.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/tag': 3.4.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-aria/textfield': 3.15.0(react@18.3.1)
- '@react-aria/tooltip': 3.7.10(react@18.3.1)
- '@react-aria/utils': 3.26.0(react@18.3.1)
- '@react-aria/visually-hidden': 3.8.18(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- react-dom@18.3.1(react@18.3.1):
- dependencies:
- loose-envify: 1.4.0
- react: 18.3.1
- scheduler: 0.23.2
-
- react-email@3.0.4(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1):
+ '@react-aria/breadcrumbs': 3.5.19(react@19.0.0)
+ '@react-aria/button': 3.11.0(react@19.0.0)
+ '@react-aria/calendar': 3.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/checkbox': 3.15.0(react@19.0.0)
+ '@react-aria/color': 3.0.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/combobox': 3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/datepicker': 3.12.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/dialog': 3.5.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/disclosure': 3.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/dnd': 3.8.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/focus': 3.19.0(react@19.0.0)
+ '@react-aria/gridlist': 3.10.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/i18n': 3.12.4(react@19.0.0)
+ '@react-aria/interactions': 3.22.5(react@19.0.0)
+ '@react-aria/label': 3.7.13(react@19.0.0)
+ '@react-aria/link': 3.7.7(react@19.0.0)
+ '@react-aria/listbox': 3.13.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/menu': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/meter': 3.4.18(react@19.0.0)
+ '@react-aria/numberfield': 3.11.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/overlays': 3.24.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/progress': 3.4.18(react@19.0.0)
+ '@react-aria/radio': 3.10.10(react@19.0.0)
+ '@react-aria/searchfield': 3.7.11(react@19.0.0)
+ '@react-aria/select': 3.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/separator': 3.4.4(react@19.0.0)
+ '@react-aria/slider': 3.7.14(react@19.0.0)
+ '@react-aria/ssr': 3.9.7(react@19.0.0)
+ '@react-aria/switch': 3.6.10(react@19.0.0)
+ '@react-aria/table': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/tabs': 3.9.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/tag': 3.4.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-aria/textfield': 3.15.0(react@19.0.0)
+ '@react-aria/tooltip': 3.7.10(react@19.0.0)
+ '@react-aria/utils': 3.26.0(react@19.0.0)
+ '@react-aria/visually-hidden': 3.8.18(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+
+ react-dom@19.0.0(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ scheduler: 0.25.0
+
+ react-email@3.0.4(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1):
dependencies:
'@babel/core': 7.24.5
'@babel/parser': 7.24.5
@@ -9480,7 +9610,7 @@ snapshots:
glob: 10.3.4
log-symbols: 4.1.0
mime-types: 2.1.35
- next: 15.0.4(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.1)
+ next: 15.0.4(@babel/core@7.24.5)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1)
normalize-path: 3.0.0
ora: 5.4.1
socket.io: 4.8.0
@@ -9496,9 +9626,9 @@ snapshots:
- supports-color
- utf-8-validate
- react-icons@5.4.0(react@18.3.1):
+ react-icons@5.4.0(react@19.0.0):
dependencies:
- react: 18.3.1
+ react: 19.0.0
react-is@16.13.1: {}
@@ -9506,38 +9636,36 @@ snapshots:
dependencies:
fast-deep-equal: 2.0.1
- react-stately@3.34.0(react@18.3.1):
- dependencies:
- '@react-stately/calendar': 3.6.0(react@18.3.1)
- '@react-stately/checkbox': 3.6.10(react@18.3.1)
- '@react-stately/collections': 3.12.0(react@18.3.1)
- '@react-stately/color': 3.8.1(react@18.3.1)
- '@react-stately/combobox': 3.10.1(react@18.3.1)
- '@react-stately/data': 3.12.0(react@18.3.1)
- '@react-stately/datepicker': 3.11.0(react@18.3.1)
- '@react-stately/disclosure': 3.0.0(react@18.3.1)
- '@react-stately/dnd': 3.5.0(react@18.3.1)
- '@react-stately/form': 3.1.0(react@18.3.1)
- '@react-stately/list': 3.11.1(react@18.3.1)
- '@react-stately/menu': 3.9.0(react@18.3.1)
- '@react-stately/numberfield': 3.9.8(react@18.3.1)
- '@react-stately/overlays': 3.6.12(react@18.3.1)
- '@react-stately/radio': 3.10.9(react@18.3.1)
- '@react-stately/searchfield': 3.5.8(react@18.3.1)
- '@react-stately/select': 3.6.9(react@18.3.1)
- '@react-stately/selection': 3.18.0(react@18.3.1)
- '@react-stately/slider': 3.6.0(react@18.3.1)
- '@react-stately/table': 3.13.0(react@18.3.1)
- '@react-stately/tabs': 3.7.0(react@18.3.1)
- '@react-stately/toggle': 3.8.0(react@18.3.1)
- '@react-stately/tooltip': 3.5.0(react@18.3.1)
- '@react-stately/tree': 3.8.6(react@18.3.1)
- '@react-types/shared': 3.26.0(react@18.3.1)
- react: 18.3.1
-
- react@18.3.1:
- dependencies:
- loose-envify: 1.4.0
+ react-stately@3.34.0(react@19.0.0):
+ dependencies:
+ '@react-stately/calendar': 3.6.0(react@19.0.0)
+ '@react-stately/checkbox': 3.6.10(react@19.0.0)
+ '@react-stately/collections': 3.12.0(react@19.0.0)
+ '@react-stately/color': 3.8.1(react@19.0.0)
+ '@react-stately/combobox': 3.10.1(react@19.0.0)
+ '@react-stately/data': 3.12.0(react@19.0.0)
+ '@react-stately/datepicker': 3.11.0(react@19.0.0)
+ '@react-stately/disclosure': 3.0.0(react@19.0.0)
+ '@react-stately/dnd': 3.5.0(react@19.0.0)
+ '@react-stately/form': 3.1.0(react@19.0.0)
+ '@react-stately/list': 3.11.1(react@19.0.0)
+ '@react-stately/menu': 3.9.0(react@19.0.0)
+ '@react-stately/numberfield': 3.9.8(react@19.0.0)
+ '@react-stately/overlays': 3.6.12(react@19.0.0)
+ '@react-stately/radio': 3.10.9(react@19.0.0)
+ '@react-stately/searchfield': 3.5.8(react@19.0.0)
+ '@react-stately/select': 3.6.9(react@19.0.0)
+ '@react-stately/selection': 3.18.0(react@19.0.0)
+ '@react-stately/slider': 3.6.0(react@19.0.0)
+ '@react-stately/table': 3.13.0(react@19.0.0)
+ '@react-stately/tabs': 3.7.0(react@19.0.0)
+ '@react-stately/toggle': 3.8.0(react@19.0.0)
+ '@react-stately/tooltip': 3.5.0(react@19.0.0)
+ '@react-stately/tree': 3.8.6(react@19.0.0)
+ '@react-types/shared': 3.26.0(react@19.0.0)
+ react: 19.0.0
+
+ react@19.0.0: {}
read-cache@1.0.0:
dependencies:
@@ -9654,9 +9782,9 @@ snapshots:
requires-port@1.0.0: {}
- resend@4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ resend@4.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
- '@react-email/render': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-email/render': 1.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
transitivePeerDependencies:
- react
- react-dom
@@ -9691,10 +9819,6 @@ snapshots:
reusify@1.0.4: {}
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
-
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -9742,9 +9866,7 @@ snapshots:
sax@1.3.0: {}
- scheduler@0.23.2:
- dependencies:
- loose-envify: 1.4.0
+ scheduler@0.25.0: {}
schema-dts@1.1.2(typescript@5.7.2):
dependencies:
@@ -10016,17 +10138,10 @@ snapshots:
dependencies:
inline-style-parser: 0.2.4
- styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.3.1):
- dependencies:
- client-only: 0.0.1
- react: 18.3.1
- optionalDependencies:
- '@babel/core': 7.24.5
-
- styled-jsx@5.1.6(@babel/core@7.24.5)(react@18.3.1):
+ styled-jsx@5.1.6(@babel/core@7.24.5)(react@19.0.0):
dependencies:
client-only: 0.0.1
- react: 18.3.1
+ react: 19.0.0
optionalDependencies:
'@babel/core': 7.24.5
@@ -10105,8 +10220,6 @@ snapshots:
tapable@2.2.1: {}
- text-table@0.2.0: {}
-
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
@@ -10148,8 +10261,6 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- type-fest@0.20.2: {}
-
typed-array-buffer@1.0.2:
dependencies:
call-bind: 1.0.7
@@ -10215,6 +10326,16 @@ snapshots:
possible-typed-array-names: 1.0.0
reflect.getprototypeof: 1.0.9
+ typescript-eslint@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)
+ eslint: 9.17.0(jiti@2.4.2)
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
typescript@5.7.2: {}
unbox-primitive@1.0.2:
@@ -10485,6 +10606,10 @@ snapshots:
yocto-queue@0.1.0: {}
+ zod-validation-error@3.4.0(zod@3.24.1):
+ dependencies:
+ zod: 3.24.1
+
zod@3.24.1: {}
zwitch@2.0.4: {}
diff --git a/polite-pop.d.ts b/polite-pop.d.ts
index 265b98a4..428a8438 100644
--- a/polite-pop.d.ts
+++ b/polite-pop.d.ts
@@ -1,4 +1,4 @@
-declare function PolitePop(config: any): any;
+declare function PolitePop(config: unknown): unknown;
declare namespace PolitePop {
- function onNewEmailSignup(callback: any): void;
+ function onNewEmailSignup(callback: unknown): void;
}
diff --git a/postcss.config.js b/postcss.config.js
index 12a703d9..8793700f 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,3 +1,5 @@
+// @ts-check
+
module.exports = {
plugins: {
tailwindcss: {},
diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts
index b9441744..174d9942 100644
--- a/src/app/sitemap.ts
+++ b/src/app/sitemap.ts
@@ -25,7 +25,7 @@ export default async function sitemap(): Promise {
priority: 0.8,
}));
- const { allTags } = await getAllTags();
+ const allTags = await getAllTags();
const tagsSitemap = allTags.map((tag) => ({
url: `${baseUrl}/tags/${tag}`,
lastModified: new Date(),
diff --git a/src/components/MdxEmbed/Tweet.tsx b/src/components/MdxEmbed/Tweet.tsx
index ca7c7089..23f6f169 100644
--- a/src/components/MdxEmbed/Tweet.tsx
+++ b/src/components/MdxEmbed/Tweet.tsx
@@ -8,12 +8,9 @@ const twttrEmbedScript = `
const twttrLoad = () => {
if (
typeof window.twttr !== `undefined` &&
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
window?.twttr?.widgets &&
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
typeof window.twttr.widgets.load === `function`
) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
window.twttr.widgets.load(document.getElementsByClassName(`mdx-embed`));
}
};
diff --git a/src/components/NewsletterFeed/NewsletterItem.tsx b/src/components/NewsletterFeed/NewsletterItem.tsx
index 377a74ce..17b1ee1a 100644
--- a/src/components/NewsletterFeed/NewsletterItem.tsx
+++ b/src/components/NewsletterFeed/NewsletterItem.tsx
@@ -7,6 +7,7 @@ import { Heading } from '../Heading';
import TagsSummary from '../tagsSummary';
const NewsletterItem: React.FC = ({ newsletter }) => {
+ if (!newsletter) return null;
const { coverImagePublicId, date, excerpt, slug, tags, title } =
newsletter.frontmatter;
diff --git a/src/components/Post/TableOfContents.tsx b/src/components/Post/TableOfContents.tsx
index 4048caa4..965c8def 100644
--- a/src/components/Post/TableOfContents.tsx
+++ b/src/components/Post/TableOfContents.tsx
@@ -14,7 +14,7 @@ type TableOfContentsProps = {
// Shout out to Alex for the great starting point!
// https://claritydev.net/blog/nextjs-blog-remark-interactive-table-of-contents
function useHighlighted(id: string) {
- const observer = useRef();
+ const observer = useRef(undefined);
const [activeId, setActiveId] = useState('');
useEffect(() => {
diff --git a/src/components/PostFeed/index.js b/src/components/PostFeed/index.ts
similarity index 100%
rename from src/components/PostFeed/index.js
rename to src/components/PostFeed/index.ts
diff --git a/src/components/Slider/Slider.tsx b/src/components/Slider/Slider.tsx
index c3244a66..5f188967 100644
--- a/src/components/Slider/Slider.tsx
+++ b/src/components/Slider/Slider.tsx
@@ -16,7 +16,7 @@ const Thumb = (props: {
label?: string;
index: number;
state: SliderState;
- trackRef: React.RefObject>;
+ trackRef: React.RefObject | null>;
isFocusVisible: boolean;
focusProps: ReturnType['focusProps'];
onChangeStart?: () => void;
diff --git a/src/components/SponsoredSection/index.js b/src/components/SponsoredSection/index.ts
similarity index 100%
rename from src/components/SponsoredSection/index.js
rename to src/components/SponsoredSection/index.ts
diff --git a/src/data/external-references/how-to-create-your-first-app-action.mdx b/src/data/external-references/how-to-create-your-first-app-action.mdx
index 78c5e3ad..291e187c 100644
--- a/src/data/external-references/how-to-create-your-first-app-action.mdx
+++ b/src/data/external-references/how-to-create-your-first-app-action.mdx
@@ -1,7 +1,7 @@
---
title: How to create your first App Action
-tags: [demo, assistant, android, voice]
date: 05-19-2021
+tags: [demo, assistant, android, voice]
---
diff --git a/src/data/newsletters/aesthetic-usability-effect.mdx b/src/data/newsletters/aesthetic-usability-effect.mdx
index d152fe88..771df245 100644
--- a/src/data/newsletters/aesthetic-usability-effect.mdx
+++ b/src/data/newsletters/aesthetic-usability-effect.mdx
@@ -1,5 +1,5 @@
---
-title: "The Aesthetic-Usability Effect"
+title: 'The Aesthetic-Usability Effect'
excerpt: "When building something new, what's more important: that it works, or that it looks good? The Aesthetic-Usability Effect says that users perceive more aesthetically pleasing designs as easier to use than less aesthetically pleasing designs."
coverImagePublicId: newsletters/aesthetic-usability-effect/cover
tags: [ux, design, startup]
@@ -16,7 +16,7 @@ My take? If you want to build a successful product, you need to do both reasonab
## The Aesthetic-Usability Effect
> The Aesthetic-Usability Effect is a psychological phenomenon where users perceive more aesthetically pleasing designs as easier to use than less aesthetically pleasing designs.
-[More on Wikipedia](https://en.wikipedia.org/wiki/Aesthetic-usability_effect).
+> [More on Wikipedia](https://en.wikipedia.org/wiki/Aesthetic-usability_effect).
This means that if your app isn't designed well, users will perceive it as _harder to use_ than a more visually appealing app, even if the functionality is identical.
@@ -93,7 +93,6 @@ If you liked this newsletter, you may also appreciate these past dispatches, whi
- [UX For Devs: Understanding Gestalt](https://mikebifulco.com/newsletter/gestalt-design-principles-for-developers)
- [The finicky nature of color in product design](https://mikebifulco.com/newsletter/color-context-and-product-design)
-
## Everyone is a designer
I'm a big believer that everyone is a designer, and that everyone can learn to be a better designer. I keep a list of great design books I've read over on hardcover that you're welcome to peruse - check out [The Designer's Reading List](https://hardcover.app/@irreverentmike/lists/the-designers-reading-list) if you're looking for some more juicy reads from people _way_ smarter than me.
diff --git a/src/data/newsletters/beyond-the-walled-garden.mdx b/src/data/newsletters/beyond-the-walled-garden.mdx
index ef46d565..9ae1285c 100644
--- a/src/data/newsletters/beyond-the-walled-garden.mdx
+++ b/src/data/newsletters/beyond-the-walled-garden.mdx
@@ -1,5 +1,5 @@
---
-title: "Beyond the walled garden: what Spotify and Substack get wrong"
+title: 'Beyond the walled garden: what Spotify and Substack get wrong'
excerpt: It's natural for big companies to make mistakes - but when they do, it's a great opportunity for smaller companies to build something better.
tags: [product, design, startup, indiehacker]
date: 04/30/2024
@@ -79,7 +79,6 @@ I thought I'd share some work from people in my network this week. You're going
- Over on Primary Focus, Ms. Natalie produced a great interview recently about [what parents need to know about ADHD and kids](https://www.youtube.com/watch?v=UsqG7m5NQ1E&t=7s). Her guest is super knowledgable and it's a great watch.
-
---
## Try these out though
diff --git a/src/data/newsletters/build-measure-listen-rebuild.mdx b/src/data/newsletters/build-measure-listen-rebuild.mdx
index 21042a5a..ecbfa5e1 100644
--- a/src/data/newsletters/build-measure-listen-rebuild.mdx
+++ b/src/data/newsletters/build-measure-listen-rebuild.mdx
@@ -1,5 +1,5 @@
---
-title: "Build, measure, listen, rebuild"
+title: 'Build, measure, listen, rebuild'
excerpt: "Building better products involves skills you won't learn in computer science school, or at a boot camp. Find success through testing, learning from real-world feedback, and adapting."
tags: [product, ux, startup]
date: 01-22-2024
diff --git a/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx b/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx
index 4c93523f..5bcb336a 100644
--- a/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx
+++ b/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx
@@ -7,7 +7,6 @@ coverImagePublicId: 'newsletters/cognitive-load-ux-and-why-you-should-care/cover
slug: cognitive-load-ux-and-why-you-should-care
---
-
**Cognitive load** is the amount of mental effort required to complete a task. It's something you experience everywhere - in every app you use, every website you visit, and even making your morning coffee. In product design, is something that is often felt but not well-understood, and has a huge impact on both UX and the lived experience of building your product.
In the best case, cognitive load is something that is invisible to the user. When I used to work as a UX designer at Microsoft, I would often say that if I was doing my job right, nobody would realize I did anything at all.
diff --git a/src/data/newsletters/creators-startups-january-pivot.mdx b/src/data/newsletters/creators-startups-january-pivot.mdx
index 9bcb5ac2..67528f0a 100644
--- a/src/data/newsletters/creators-startups-january-pivot.mdx
+++ b/src/data/newsletters/creators-startups-january-pivot.mdx
@@ -18,6 +18,7 @@ Seems like it's all happening at once, right? Well, in a sense -- it is. And the
Have you felt it? I've certainly seen a good number of surprising announcements. Here's an incomplete list of companies and creators who have announced big changes since the start of the new year:
### Companies making big changes
+
- A few days ago, Artifact, the news aggregator app created by the founders of Instagram, shared that they're [shutting down](https://medium.com/artifact-news/shutting-down-artifact-1e70de46d419) their services, after failing to find product-market fit.
- [Mint](https://www.mint.com), the personal finance app, is shutting down completely. Their orphaned users have been desperately searching for alternatives.
- [Prism Bills & Money](https://prism.com), a finance app used for automating bill payments, is also shutting down.
@@ -27,7 +28,6 @@ Have you felt it? I've certainly seen a good number of surprising announcements.
- **Matpat**, Host of the YouTube channel _The Game Theorists_ [announced he's stepping down as the face of the channel](https://youtu.be/8R1_TqU68yo?si=1PQEWufTl_letIcO). TGT has **18.7M subscribers** on YouTube.
- **Tom Scott** posted a video explaining that after 10 years of videos every week, he's [taking a break](https://youtu.be/7DKv5H5Frt0?si=2W-72NhfIviI0TI5) for an undetermined amount of time. Tom has **6.4M subscribers** on YouTube.
-
### Sort of both, and kind of neither
You may have seen recently that Substack is bleeding creators left and right over their [spineless content moderation policy decisions](https://mashable.com/article/why-are-people-leaving-substack-content-moderation-controversy) (or lack thereof). Newsletter creators are jumping ship to other platforms left and right.
diff --git a/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx b/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx
index e970edbd..dc0f296c 100644
--- a/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx
+++ b/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx
@@ -1,5 +1,5 @@
---
-title: "The product design spectrum: crowdsourcing, user research, and the myopic approach"
+title: 'The product design spectrum: crowdsourcing, user research, and the myopic approach'
excerpt: In product design, there's a critical difference between crowdsourcing ideas and feedback, and user research.
tags: [design, ux, startup, product]
date: 2023-12-05
diff --git a/src/data/newsletters/dunbars-number-and-network-effect.mdx b/src/data/newsletters/dunbars-number-and-network-effect.mdx
index 69f01564..fd324e33 100644
--- a/src/data/newsletters/dunbars-number-and-network-effect.mdx
+++ b/src/data/newsletters/dunbars-number-and-network-effect.mdx
@@ -1,8 +1,8 @@
---
title: "Dunbar's number: focusing on your core supporters for network effect growth"
-excerpt: "Focus on building strong connections with a core group of 50 advocates to fuel sustainable, network-driven growth."
+excerpt: 'Focus on building strong connections with a core group of 50 advocates to fuel sustainable, network-driven growth.'
slug: dunbars-number-and-network-effect
-coverImagePublicId: "newsletters/dunbars-number-and-network-effect/cover"
+coverImagePublicId: 'newsletters/dunbars-number-and-network-effect/cover'
tags: [founder, startup, marketing, community]
date: 11-05-2024
---
@@ -33,7 +33,6 @@ Product for Engineers is a newsletter on building great products, the best pract
-
## What it means for your product
Most people talk about Dunbar's number in terms of 150, but the power lies in close-knit groups of 50. These 50 people are your advocates, your early adopters, your most vocal supporters. For product builders, focusing here first creates a foundation that grows beyond one-time use or sporadic engagement.
@@ -57,8 +56,8 @@ This is why many startups begin with a _friends and family_ launch. It's a great
Gore, the company that makes of GORE-TEX, applies Dunbar's number by limiting the size of its factories. When a team hits 150 people, they spin off a new group. Each group operates independently with its own R&D, production, and sales teams. This approach keeps teams close-knit, engaged, and highly collaborative—key to their success.
-
### Building on the Network Effect
+
Nurture Your Core 50: Focus on building meaningful relationships with your first 50 users. They are the heart of your network, and their enthusiasm will drive momentum. Treat their feedback like gold, and respond to their needs directly.
Create a Product of Substance: Deliver on your promises to these early adopters, listen actively, and adapt. A strong, attentive foundation encourages your core group to bring others in naturally.
@@ -68,9 +67,6 @@ Create a Product of Substance: Deliver on your promises to these early adopters,
**For your product:** Build with compassion and responsiveness. Turn your initial 50 users into advocates so they bring their own circle along.
-
**It's Election Day:** Influence your Dunbar network. Encourage the people you know best to vote today - your voice has power, especially in small circles.
---
-
-
diff --git a/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx b/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx
index fe47ca56..4db01392 100644
--- a/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx
+++ b/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx
@@ -1,5 +1,5 @@
---
-title: "The Endowment Effect: why useful trials make for sticky products"
+title: 'The Endowment Effect: why useful trials make for sticky products'
excerpt: The endowment effect is a psychological phenomenon where people value things more highly simply because they own them. How can you use this to make your product stickier?
tags: [product, design, startup, indiehacker]
date: 5-15-2024
@@ -18,7 +18,9 @@ Another group of participants were asked to set a price at which they would be w
In this case, the average price was $3.
-...In other words, for the exact same object, participants assigned a higher value to the thing they owned versus the thing they were thinking about buying.
+ ...In other words, for the exact same object, participants assigned a higher
+ value to the thing they owned versus the thing they were thinking about
+ buying.
The misalignment between these two prices is the endowment effect in action. People value things more highly when they own them.
@@ -59,7 +61,7 @@ Setting up a free trial for your product doesn't have to be complicated. There a
2. It's nearly impossible to get your pricing strategy right on the first try. That's the thesis that my friends over at **[Stigg](https://www.stigg.io/)** have based their products on. They make it easy to test different pricing strategies and see which one works best for your business.
-3. If you're building a developer product with usage-based billing, you should check out **[Unkey.dev](https://www.unkey.com/)** - they make it dead simple to add analtics and usage-based billing around API keys to your product.
+3. If you're building a developer product with usage-based billing, you should check out **[Unkey.dev](https://www.unkey.com/)** - they make it dead simple to add analtics and usage-based billing around API keys to your product.
---
@@ -68,4 +70,3 @@ Setting up a free trial for your product doesn't have to be complicated. There a
- [Pastmaps](https://pastmaps.com/plus?src=tinyimprovements) is a vast library of historical maps that you can overlay on modern maps. Seeing how your neighborhood has changed over time can be really eye-opening. Pastmaps has a 7-day free trial for its premium features, and is being built by Craig Campbell, who goes by [@that.map.guy.craig](https://www.threads.net/@that.map.guy.craig) on Threads.
- [PodCharm](https://podcharm.com/) is a product designed to help podcasters do a better job of growing their audiences. PodCharm's free tier is _super_ generous, and sends a strong signal: PodCharm will be successful only if its customers' shows are successful. That's a win-win alignment of incentives. Shout out to my dude [Tony Mastrorio](https://www.threads.net/@tonydotcoms) for building this. Give it a shot if you're a podcaster.
-
diff --git a/src/data/newsletters/first-principles-frameworks-for-clarity.mdx b/src/data/newsletters/first-principles-frameworks-for-clarity.mdx
index b225aab4..e09cc21d 100644
--- a/src/data/newsletters/first-principles-frameworks-for-clarity.mdx
+++ b/src/data/newsletters/first-principles-frameworks-for-clarity.mdx
@@ -1,6 +1,6 @@
---
-title: "First Principles: Your Framework for Clarity"
-excerpt: "How the most productive people use fundamental truths to navigate complexity and stay focused"
+title: 'First Principles: Your Framework for Clarity'
+excerpt: 'How the most productive people use fundamental truths to navigate complexity and stay focused'
tags: [productivity, philosophy, mental health]
date: 11-19-2024
coverImagePublicId: newsletters/first-principles-frameworks-for-clarity/cover
@@ -37,18 +37,21 @@ This is a powerful tool for product development. If you're evaluating a new mark
Let's look at how first principles thinking revolutionized urban transportation. Instead of trying to improve taxis, entrepreneurs asked: "What is the fundamental purpose of urban transportation?"
The core principles they identified were:
+
- People need to get from point A to point B reliably
- Both drivers and passengers want to maximize their time and money
- Trust and safety are essential for both parties
- Supply should match demand efficiently
Traditional taxis failed to optimize for these principles:
+
1. Supply/demand mismatch: empty taxis circled busy areas while other neighborhoods had none
2. Pricing opacity: meters created uncertainty and anxiety for passengers
3. Trust gap: anonymous interactions left both drivers and passengers vulnerable
4. Artificial scarcity: medallion systems limited supply without improving service
Ride sharing services built solutions directly from these principles:
+
1. Dynamic matching: GPS and algorithms connect nearby drivers to passengers
2. Transparent pricing: upfront fares let everyone make informed decisions
3. Two-way accountability: ratings and digital records create trust
@@ -60,7 +63,6 @@ This is first principles in action: instead of accepting "this is how taxis work
This sort of process can be applied to just about anything, from product development to team dynamics to your basic beliefs. Here's a simple framework to get you started:
-
1. **Define the Problem** - Write down what's wrong or what you want to improve. Be specific.
2. **Identify Core Principles** - Think about the fundamental truths or rules related to the problem. (Examples: "Keep it simple," "Focus on what users need," "Test before scaling.")
@@ -70,14 +72,12 @@ This sort of process can be applied to just about anything, from product develop
4. **Brainstorm Solutions for Each Piece** - For each part, think of ways to solve it while sticking to your core principles.
5. **Choose the Simplest, Most Aligned Solution** - Pick the solution that's easiest to implement and most consistent with your principles.
-Pick the solution that's easiest to implement and most consistent with your principles.
+ Pick the solution that's easiest to implement and most consistent with your principles.
6. **Test the Solution** - Try it out! Check if it works as intended and solves the problem.
7. **Refine** - Make adjustments if needed. Stay true to the principles as you tweak things.
-
-
---
## Applied Principles Thinking
@@ -90,7 +90,6 @@ Not sure what I mean? You might dig these examples:
[Supervised Learning: Crash Course AI](https://www.youtube.com/watch?v=4qVRBYAdLAo) from Crash Course
-
## More on building from first principles
If you're interested in how these principles can be applied to team dynamics, check out my thoughts on [building happier teams](/newsletter/simple-habits-for-a-happier-team) and [measuring what matters](/newsletter/build-measure-listen-rebuild).
diff --git a/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx b/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx
index abd81913..e4b178c0 100644
--- a/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx
+++ b/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx
@@ -26,12 +26,10 @@ Big, well-placed targets are easier to hit than small, far away targets.
...You see where I'm going with this yet?
-
## Tiny Improvements and Big Goals
I'm not going to sit here and tell you that it's _easy_ to reach your goals. No matter what you're after, it's going to take time, effort, and focus. But I do think that it's _easier_ to reach your goals if you set some audacious targets, and work towards them with small, consistent improvements.
-
When I set out to start publishing articles, I **made a list of 50 people** from the industry who I would be _thrilled_ to see reading my words. This was my target - the bullseye I was aiming for. These weren't necessarily people I knew, but they were people who I admired, and who I thought would be interested in what I had to say.
Every time I brainstormed new topics, I'd try to write for the people on that list. Was it reasonable to think that I'd get _any_ these 50 people to read what I have to say? Maybe not, but the audacity of the goal helped me to focus on writing for a specific audience, and that's helped me to write better.
diff --git a/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx b/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx
index 93e84c0e..10a118f6 100644
--- a/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx
+++ b/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx
@@ -11,7 +11,6 @@ slug: intellectual-humility-and-how-to-be-wrong
When was the last time you were wrong? How did you respond?
-
For many of us, being wrong is a painful experience. It's a blow to our ego, and it can feel like a personal attack. It's easy to get defensive, and to try to justify our decisions, even when we know they're wrong.
Hell, if I were to look back on myself in the past, I was often defensive, and would dig my heels in to justify my decisions, even if it wasn't the best choice for the product or business.
diff --git a/src/data/newsletters/jakobs-law-design-ux.mdx b/src/data/newsletters/jakobs-law-design-ux.mdx
index 8a778963..d9463bd4 100644
--- a/src/data/newsletters/jakobs-law-design-ux.mdx
+++ b/src/data/newsletters/jakobs-law-design-ux.mdx
@@ -1,6 +1,6 @@
---
title: Statistically, nobody has used your app
-excerpt: "People spend most of their time on sites and apps other than yours. This means that users prefer your site to work the same way as all the other sites they already know."
+excerpt: 'People spend most of their time on sites and apps other than yours. This means that users prefer your site to work the same way as all the other sites they already know.'
tags: [ux, design, product]
date: 06-11-2024
slug: jakobs-law-design-ux
@@ -20,6 +20,7 @@ In other words, if every list, page, and form on your site is built in a way tha
You can think of design patterns as the common solutions to common problems. They're the tried-and-true ways of doing things that users are already familiar with.
Some examples of design patterns include:
+
- **The hamburger menu** - a common way to hide navigation links on mobile devices
- **Infinite scrolling** - a way to load more content as users scroll down the page
- **The card layout** - a way to organize content into bite-sized chunks
@@ -77,4 +78,3 @@ It will help the people who _do_ find themselves using your software - they will
- [Mobbin](https://mobbin.com/?referrer_workspace_id=1a65606c-48bd-4922-aa2d-00c03ba1d853) is a hand-picked collection of the latest mobile and web design patterns from apps that reflect the best in design.
- [The Webby Awards](https://www.webbyawards.com/winners/) are a annual awards given to websites and apps that feature best-in-class design and user experience. It is an absolute treasure trove of design inspiration.
-
diff --git a/src/data/newsletters/learning-is-an-infinite-game.mdx b/src/data/newsletters/learning-is-an-infinite-game.mdx
index 9f50c655..feaf6dc8 100644
--- a/src/data/newsletters/learning-is-an-infinite-game.mdx
+++ b/src/data/newsletters/learning-is-an-infinite-game.mdx
@@ -87,5 +87,3 @@ tl;dr: learning is a skill, and as a founder, you need to be good at it. Part of
- 🎙️ In the latest APIs You Won't Hate podcast, I [caught up with Danny Sheridan from Fern](https://apisyouwonthate.com/podcast/catching-up-with-danny-sheridan-from-fern/) to talk about the incredible tooling they're building for generating API clients and documentation from OpenAPI specs.
- 📰 [Craftwork was featured by Forbes](https://www.forbes.com/sites/brucerogers/2023/11/17/craftwork-out-to-modernize-home-services-market-scores-6-million-seed-round/), and I still can't believe it. I'm so proud of the team we've built, and the work we're doing to make home services better for everyone. What a journey so far - and we're just getting started.
-
-
diff --git a/src/data/newsletters/leaving-stripe-going-viral.mdx b/src/data/newsletters/leaving-stripe-going-viral.mdx
index 47f8eb98..039a7c11 100644
--- a/src/data/newsletters/leaving-stripe-going-viral.mdx
+++ b/src/data/newsletters/leaving-stripe-going-viral.mdx
@@ -30,7 +30,10 @@ If you're new here, it's likely because you saw my tweet later that same day:
you are a newly-former Stripe, DM or email hello@mikebifulco.com. I'll do
whatever I can to help you find your next job.
- — Mike Bifulco (@irreverentmike) November 3, 2022
+ — Mike Bifulco (@irreverentmike){' '}
+
+ November 3, 2022
+
diff --git a/src/data/newsletters/lessons-in-growth-from-21-to-1000.mdx b/src/data/newsletters/lessons-in-growth-from-21-to-1000.mdx
index f0e4b87f..8f45fcc4 100644
--- a/src/data/newsletters/lessons-in-growth-from-21-to-1000.mdx
+++ b/src/data/newsletters/lessons-in-growth-from-21-to-1000.mdx
@@ -8,11 +8,13 @@ tags: [newsletter, creator, founder]
---
## The Big Idea
+
Reaching milestones is gratifying, but the growth that comes from sharing your work is the real difference maker.
---
## Milestones, Growth & Putting Yourself Out There
+
This week, 💌 Tiny Improvements hit 1,000 readers!
It's a milestone I couldn't have imagined when I sent my first dispatch to just 21 friends in 2020. The first newsletter went out _months_ after I set up a mailing list, and it was almost 2 full years before I started sending them regularly.
@@ -41,19 +43,19 @@ One unexpected highlight lately has been Bluesky. It's a refreshingly open and r
---
### Why This Matters
+
Whether it's an article, video, app, or something else - sharing your work can feel daunting, but it's a great way to grow. Your journey will be different from mine, but every step will be valuable.
If you've been waiting for the “right time” to start, this is your sign: start today.
-
-
### Closing Thoughts
+
To each of you: thank you for letting me into your inbox. I'll keep writing, learning, and sharing, and I hope you'll do the same.
---
diff --git a/src/data/newsletters/multitasking-and-product-design.mdx b/src/data/newsletters/multitasking-and-product-design.mdx
index aedee411..838d6994 100644
--- a/src/data/newsletters/multitasking-and-product-design.mdx
+++ b/src/data/newsletters/multitasking-and-product-design.mdx
@@ -9,7 +9,7 @@ coverImagePublicId: newsletters/multitasking-and-product-design/cover
- _note: cover photo for this newsletter is from [No Revisions](https://unsplash.com/it/@norevisions?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/office?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)_.
+_note: cover photo for this newsletter is from [No Revisions](https://unsplash.com/it/@norevisions?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/office?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)_.
diff --git a/src/data/newsletters/nobody-wants-a-big-reveal.mdx b/src/data/newsletters/nobody-wants-a-big-reveal.mdx
index e7ef4c8f..09950d02 100644
--- a/src/data/newsletters/nobody-wants-a-big-reveal.mdx
+++ b/src/data/newsletters/nobody-wants-a-big-reveal.mdx
@@ -70,7 +70,6 @@ The big reveal is a relic. Successful products today are built through transpare
Don't keep your work a secret. Share your progress early and often. Your users will thank you - and so will your product.
-
---
## Here's some links I've been keeping from you:
@@ -92,8 +91,3 @@ Author Nagia Eghbal's book [Working in Public](https://press.stripe.com/working-
I _love_ learning from people who have turned the dial up to 11 on a passion. YouTuber David Malawey produced a [24 minute video on his system of labeling _everything_](https://www.youtube.com/watch?v=B1QqAZeEfes) in his life. It's an extreme take, based on the Japanese concept of _5S_, but it's fascinating to see how far you can take a simple idea.
He makes a strong case for real ROI from labeling _everything_ - and although I don't think you need to go _quite_ as far as he does, I think we call can benefit from applying some of his principles.
-
-
-
-
-
diff --git a/src/data/newsletters/open-sourcing-my-design-system.mdx b/src/data/newsletters/open-sourcing-my-design-system.mdx
index e3290c60..01e1c969 100644
--- a/src/data/newsletters/open-sourcing-my-design-system.mdx
+++ b/src/data/newsletters/open-sourcing-my-design-system.mdx
@@ -15,7 +15,6 @@ It's right here, ready for you to explore: [mikebifulco.com Design System](https
This giant file contains almost all the images I've ever published on [mikebifulco.com](https://mikebifulco.com), meticulously organized and ready for you to explore.
-
## What's Inside?
First off, what's in the Figma file? Here's the rundown:
@@ -35,7 +34,6 @@ The images I use go a long way in helping me communicate my ideas, and in gettin
I've spent a lot of time over the years organizing, refining, and refining this system, and I'm excited to share it with you.
-
## Why Open Source This?
The point of open-sourcing this Figma file is simple: there's nothing magical here. I'm not doing anything you can't do. Heck, the source code for the rest of my site is publicly viewable as well on github ([mbifulco/blog](https://github.com/mbifulco/blog)), so this is a perfect pairing.
@@ -43,20 +41,23 @@ The point of open-sourcing this Figma file is simple: there's nothing magical he
Having a system like this helps every article I write stand out a bit more. And I hope it can help you too.
### A Tool for Efficiency
+
One of the biggest advantages of having everything organized in Figma is that it makes publishing easy. I've created a toolkit for myself that minimizes decision fatigue.
Need a header image for a new article? There's a template for that. Newsletter? Ditto. This means I can publish content faster without getting bogged down by the details every single time.
### Stay Organized
+
This file keeps me organized. If I need to add, remove, or edit anything in the future, I can come back to this file and do it seamlessly. No more hunting around for that one logo or header image from two years ago.
### Opportunity for more
+
My hope is that by sharing this publicly, I'll be keeping myself accountable. This figma file is the foundation of what will eventually become a full-blown design system.
If you've dabbled in design systems before, you'll notice It's missing some critical pieces, like specific color selections and layout mockups, but hey, it's a work in progress.
-
## The Epiphany
+
Last week, I hit a milestone: nearly 70 published newsletters and 60 full articles. That's when it hit me—sharing this file might inspire you to create your own system. So here it is, for you to poke around and hopefully find some inspiration.
Check out the Figma file here: [mikebifulco.com Design System](https://www.figma.com/design/On4yRGLcYLORVBIhBejboA/mikebifulco.com?node-id=0-2431&t=XlKb5D0viU7DPV4T-1). Explore it, use it, heck, feel free to model your own after it.
@@ -77,7 +78,6 @@ Here's a great example to get you started: [Galaxy And Quasar Art in the Desmos
Holy moly. 🌌
-
---
## More of my work online
diff --git a/src/data/newsletters/reflecting-on-one-year-as-startup-cto.mdx b/src/data/newsletters/reflecting-on-one-year-as-startup-cto.mdx
index f3f47945..4272c457 100644
--- a/src/data/newsletters/reflecting-on-one-year-as-startup-cto.mdx
+++ b/src/data/newsletters/reflecting-on-one-year-as-startup-cto.mdx
@@ -20,10 +20,8 @@ Today, I want to reflect on the first year of building [Craftwork](https://craft
### Their tech, Their products.... Their Stories.
-
Code Story is a podcast featuring founders, tech leaders, CTOs, CEOs, and software architects, reflecting on their human stories in creating world changing, disruptive digital products.
-
## You won't know some things until you try
@@ -56,12 +54,12 @@ At this stage in the startup journey, hiring engineers is really challenging. Th
When I have roles open on my team, hiring is the most important thing I do day to day. It is also a full-time job in itself. It requires a fair deal of patience to assemble the right team, as well as a drive to actively and creatively seek out the right people.
-
## Just enough (and nothing more)
-I recently came across the Japanese Phrase ほどほど (hodohodo), which means "just enough." I've been trying to use it as a reminder to keep things simple, and to avoid overcomplicating things. My team is tasked with building the features we need most _today,_ with eyes on what we'll need in 6 months and a year... and that can be overwhelming. It's easy to spiral out of control with feature creep and over-engineering, and finding ways to help each other _just-enough-for-now_ is a team remit.
+I recently came across the Japanese Phrase ほどほど (hodohodo), which means "just enough." I've been trying to use it as a reminder to keep things simple, and to avoid overcomplicating things. My team is tasked with building the features we need most _today,_ with eyes on what we'll need in 6 months and a year... and that can be overwhelming. It's easy to spiral out of control with feature creep and over-engineering, and finding ways to help each other _just-enough-for-now_ is a team remit.
_Just enough_ spills over into many areas:
+
- **Build vs buy:** almost every feature our team needs can be bought from a SaaS vendor, or coach built by our product team. Making this decision can be nuanced and difficult, and it's something we revisit regularly.
- **Adopting tooling:** Engineers love to play with new tools - there's always a new framework, language, database, or library to poke around with. We've been very deliberate about what we adopt, and we've been very careful to avoid adopting things just because they're new and shiny. We have also adopted tools with good intentions, and found ourselves jettisoning them when they don't work out for one reason or another.
- **Shipping new features:** Adding new functionality for our customers and teammates is always tempting, but it's important to be mindful of the complexity that comes with each new feature. Our engineering team is small-and-mighty, and ever new feature we build means we have less time to support the features we've already built.
diff --git a/src/data/newsletters/shrimps-is-bugs.mdx b/src/data/newsletters/shrimps-is-bugs.mdx
index d5e756d9..950766e1 100644
--- a/src/data/newsletters/shrimps-is-bugs.mdx
+++ b/src/data/newsletters/shrimps-is-bugs.mdx
@@ -1,11 +1,10 @@
---
-title: "Shrimps is Bugs: Red Lobster ate itself to death"
+title: 'Shrimps is Bugs: Red Lobster ate itself to death'
excerpt: Red Lobster's bankruptcy and the importance of understanding your product's pricing and business model, especially for founders and indiehackers building Saas products.
tags: [product, marketing, startup]
date: 05-21-2024
slug: shrimps-is-bugs
coverImagePublicId: newsletters/shrimps-is-bugs/cover
-
---
Red lobster gave away so many free shrimp that they had to file for bankruptcy.
@@ -15,7 +14,11 @@ Believe it or not, this isn't a joke.
Red Lobster [literally went bankrupt](https://www.npr.org/2024/05/20/1252426585/red-lobster-bankruptcy) after making their $20 all-you-can-eat shrimp promotion a permanent menu item. Their customers ate them into failure - creating millions of dollars in losses... in shrimp.
So, friends:
-if you're working on your business plan, try not to include an all-you-can-eat shrimp promotion in the mix.
+
+
+ if you're working on your business plan, try not to include an all-you-can-eat
+ shrimp promotion in the mix.
+
That's it. That's the secret to business.
@@ -69,12 +72,12 @@ Your goal is to build a product that can pay for itself -- and much more, hopefu
If you're building a product, you need to get paid for it. It's as simple as that.
-- [F*ck you, pay me](https://www.youtube.com/watch?v=jVkLVRt6c1U) is a classic talk from Mike Monteiro about the importance of getting paid for your work. It's a must-watch for anyone who's ever struggled to get clients to pay up.
+- [F\*ck you, pay me](https://www.youtube.com/watch?v=jVkLVRt6c1U) is a classic talk from Mike Monteiro about the importance of getting paid for your work. It's a must-watch for anyone who's ever struggled to get clients to pay up.
- If you're an Indiehacker building a SaaS, this post on Indiehackers has lots of great wisdom: [How to price your product](https://www.indiehackers.com/post/how-to-price-your-product-indie-hackers-shouldnt-follow-the-usual-advice-0b994f58f6)
- If you're building a developer product, you may find my recent [interview with the founder of Unkey](https://apisyouwonthate.com/podcast/unkey-globally-distributed-api-key-generation-with-cofounder-james-perkins/) interesting. We talked a bit about building API products with usage-based pricing, and how to make sure you're getting paid for the value you're providing.
---
## I want to hear from you!
-If you've got books, videos, podcasts, or articles to recommend for engineers who want to build a better business, send them my way. I'm all ears!
+If you've got books, videos, podcasts, or articles to recommend for engineers who want to build a better business, send them my way. I'm all ears!
diff --git a/src/data/newsletters/side-project-and-a-fresh-start.mdx b/src/data/newsletters/side-project-and-a-fresh-start.mdx
index 7865a338..77f500b1 100644
--- a/src/data/newsletters/side-project-and-a-fresh-start.mdx
+++ b/src/data/newsletters/side-project-and-a-fresh-start.mdx
@@ -13,7 +13,6 @@ It's a deep, refreshing breath of oxygen.
That day after -- it's a welcome relief. I'm sure I'm not the only one who feels this way, but I do feel like I may be in the minority of people who talk about it. So if this resonates with you, you're not alone.
-
This year's exhale was especially welcome. A few weeks back, after sharing that I had gotten [laid off from my job at Stripe](https://mikebifulco.com/newsletter/leaving-stripe-going-viral), I told you that I would be sharing my next career move after the new year. Well, friends, we're here, and... I'm _almost_ ready to spill the beans. What I can say is that my next job is something entirely new - I'm headed back into the startup world, and will be building a new company and a new product with an _insanely_ talented team.
I'm excited to share more about that soon, but for now, let's talk about the new year.
diff --git a/src/data/newsletters/tools-for-building-a-new-company.mdx b/src/data/newsletters/tools-for-building-a-new-company.mdx
index 7b4f7026..ea727a97 100644
--- a/src/data/newsletters/tools-for-building-a-new-company.mdx
+++ b/src/data/newsletters/tools-for-building-a-new-company.mdx
@@ -11,7 +11,6 @@ I spent the last week spinning up tools for a new startup I'm working on. Althou
Here's what I learned:
-
### The basics - the best got better
The first few tools I set up have been constants in my work life for a while - we're using [Google Workspace](https://workspace.google.com) for email, access to GSuite, and Google Drive, [Slack](https://slack.com) for team communication.
diff --git a/src/data/newsletters/typescript-and-learning-hard-things.mdx b/src/data/newsletters/typescript-and-learning-hard-things.mdx
index 7d7d5641..a0fdb915 100644
--- a/src/data/newsletters/typescript-and-learning-hard-things.mdx
+++ b/src/data/newsletters/typescript-and-learning-hard-things.mdx
@@ -1,5 +1,5 @@
---
-title: "Struggling with TypeScript: why not?"
+title: 'Struggling with TypeScript: why not?'
excerpt: One of your biggest skills as a person-on-the-internet is your ability to research and learn new things.
tags: [dev, startup, typescript]
slug: typescript-and-learning-hard-things
@@ -20,7 +20,7 @@ I would be building an engineering team, and I wanted to make sure that they cou
When I say "JavaScript has many weird quirks and features", this is what I mean:
```javascript
-'b' + 'a' + + 'a' + 'a' // 'baNaNa'
+'b' + 'a' + +'a' + 'a'; // 'baNaNa'
```
If you're not a developer, you might be thinking "what the hell is that?"
@@ -28,7 +28,10 @@ If you're not a developer, you might be thinking "what the hell is that?"
Me too, friend.
- There's [plenty more adorable gotchas](https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#table-of-contents), and they're all fun and games until you're debugging a production issue at 3am.
+ There's [plenty more adorable
+ gotchas](https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#table-of-contents),
+ and they're all fun and games until you're debugging a production issue at
+ 3am.
Building a product is hard enough without having to worry about whether `NaN === NaN` (it doesn't) or why `[] + []` is an empty string.
@@ -39,7 +42,6 @@ Building a product is hard enough without having to worry about whether `NaN ===
caption="Math? Check."
/>
-
## Time to TypeScript
So, it was time to dive in to TypeScript. TypeScript is a superset of JavaScript that adds static types to the language. This means that you can catch _many_ bugs before they happen, and you can write more robust code.
@@ -68,7 +70,6 @@ One of my biggest fears is becoming out of touch and irrelevant. I feel pretty s
Keep learning, my friends. Keep pushing yourself to learn new things, and keep pushing yourself to learn _hard_ things.
-
---
## Great resources for learning TypeScript
@@ -78,6 +79,7 @@ It's Matt Pocock. He is _the_ educator for TypeScript. His [YouTube Channel @mat
This dispatch of Tiny Improvements is inspired by (and _not_ sponsored by) Matt's work - I owe a lot of my TypeScript knowledge to him, and if you're looking to learn TypeScript, I can't recommend his channel enough.
This week, Matt Launched:
+
- A _huge_ new course called [TypeScript Pro Essentials](https://www.totaltypescript.com/workshops/typescript-pro-essentials)
- A massive, free, interactive book called [Total TypeScript Essentials](https://www.totaltypescript.com/books/total-typescript-essentials)
@@ -90,4 +92,3 @@ I love Matt's work - it's world-class stuff, and they the extra mile to offer Pu
## What are you learning?
I'd love to hear what you're learning these days, whether it's technical, non-technical, or somewhere in between. Hit reply and drop me a line via email, or shout at me on Threads [@irreverentmike](https://threads.net/@irreverentmike).
-
diff --git a/src/data/newsletters/voting-and-the-founder-mindset.mdx b/src/data/newsletters/voting-and-the-founder-mindset.mdx
index 27f77737..a6a51a3a 100644
--- a/src/data/newsletters/voting-and-the-founder-mindset.mdx
+++ b/src/data/newsletters/voting-and-the-founder-mindset.mdx
@@ -11,7 +11,6 @@ coverImagePublicId: newsletters/voting-and-the-founder-mindset/cover
Voting isn't just about one issue or one stance - each vote is an opportunity to think broadly about what kind of world we want to build. So, vote with all your values in mind - not just one.
-
## Bring the Founder Mindset to the Polls
As founders, builders, and creators, we're constantly thinking about shaping the future - taking small steps each day to improve products, create solutions, and make lives better. The vision driving us is one of progress, not just for the next quarter but for the long term.
@@ -29,6 +28,7 @@ In the tech world, organizations have backed candidates based on single issues,
/>
### Beyond the Trade-Offs
+
Voting thoughtfully means thinking like a founder: weighing short-term gains against long-term consequences. It's about balancing immediate benefits with the impact on society, rights, and industries in the years to come. A single-issue endorsement may deliver short-term support for one area, but it's rarely worth compromising on the rest of what we value.
### Vote for the World You're Building
@@ -43,13 +43,12 @@ You're not reading this newsletter because you're an apathetic person. You're re
✌🏾
-
---
## Resources for staying informed on elections
-
### An interview with Mo Green
+
A special shout out this week: North Carolina's election for State Superintendent of Schools has gotten a ton of attention, and for good reason. Shortly after this newsletter goes out, an in-depth [interview with Democratic candidate Mo Green](https://www.youtube.com/watch?v=zN1mCjkpU-c) will be featured on the Primary Focus YouTube channel.
-First thing's first - get yourself a good password manager. I chose [Dashlane](https://www.dashlane.com/en/cs/mvKFbmiWCXxQ) (referral link) a few years back because of its security dashboard, which alerts you to your accounts which have been found in data breaches, any passwords you've used more than once, or passwords which are insecure. Other great options are [1Password](https://1password.com/) and [LastPass](https://www.lastpass.com/).
-
-
+First thing's first - get yourself a good password manager. I chose [Dashlane](https://www.dashlane.com/en/cs/mvKFbmiWCXxQ) (referral link) a few years back because of its security dashboard, which alerts you to your accounts which have been found in data breaches, any passwords you've used more than once, or passwords which are insecure. Other great options are [1Password](https://1password.com/) and [LastPass](https://www.lastpass.com/).
# Elevate for Strava
@@ -28,8 +26,6 @@ First thing's first - get yourself a good password manager. I chose [Dashlane]
If nothing else, I am two things: a data nerd, and a [cyclist](https://www.instagram.com/p/Bqkko6CBtTu/). I love cycling - it is my go to for exercise, meditation, and transport whenever possible. Strava is the best service for aggregating GPS and biometric data recorded during cycling activities. [Eleva](https://thomaschampagne.github.io/elevate/#/landing)[te](https://chrome.google.com/webstore/detail/elevate-for-strava/dhiaggccakkgdfcadnklkbljcgicpckn) is sugar on top of Strava - it adds a horde of wonderful data visualizations and progress measurements to the experience. I frequently turn to the fitness trend tab to motivate myself to ride more regularly. Did I mention that Elevate is [Open Source](https://github.com/thomaschampagne/elevate)? Heck yeah.
-
-
# FIO / Figure it Out
-I go through occasional phases where I track _all_ of my activities in a time tracker. For me, the app of choice is Toggl, which is simple and intuitive, and lets me keep track of how long things are taking me via an app on my phone, their website, and this lovely browser extension. It's clean and simple, and offers loads of integrations and customizations that might fit your productivity workflow, too. The [Toggl Button for Chrome](https://chrome.google.com/webstore/detail/toggl-button-productivity/oejgccbfbmkkpaidnkphaiaecficdnfn) lives right next to the address bar, and stays out of the way when you don't need it. I've gotten away with their Free plan for the most part - if you're using time tracking to bill customers, it's definitely worth looking at their paid features.
\ No newline at end of file
+I go through occasional phases where I track _all_ of my activities in a time tracker. For me, the app of choice is Toggl, which is simple and intuitive, and lets me keep track of how long things are taking me via an app on my phone, their website, and this lovely browser extension. It's clean and simple, and offers loads of integrations and customizations that might fit your productivity workflow, too. The [Toggl Button for Chrome](https://chrome.google.com/webstore/detail/toggl-button-productivity/oejgccbfbmkkpaidnkphaiaecficdnfn) lives right next to the address bar, and stays out of the way when you don't need it. I've gotten away with their Free plan for the most part - if you're using time tracking to bill customers, it's definitely worth looking at their paid features.
diff --git a/src/data/posts/crosspost-introducing-pistola.mdx b/src/data/posts/crosspost-introducing-pistola.mdx
index d5d76759..ae674cb0 100644
--- a/src/data/posts/crosspost-introducing-pistola.mdx
+++ b/src/data/posts/crosspost-introducing-pistola.mdx
@@ -1,6 +1,5 @@
---
-title: "Introducing Pistola - Building a passion project with radical transparency"
-type: post
+title: 'Introducing Pistola - Building a passion project with radical transparency'
date: 02-21-2020
excerpt: "If you follow me across the various other social networks I use, you'll likely stumble across my passion for cycling. For the past 8 or so years, road cycling has been my primary form of exercise. I love cycling; it keeps me sane, and helps me live a healthier life, while seeing the world. If you haven't been on a bike recently, you should give it a shot - I can't recommend it enough."
published: true
@@ -47,4 +46,4 @@ Last week I put out a [user research survey](https://gopistola.typeform.com/to/o
Most of, all thank you for reading, and for your support. I'm hoping this crazy idea can grow some legs, and I won't get anywhere without support and encouragement from the design, developer, cycling, and running communities. I'd love to hear your feedback, criticism, and encouragement. I'm here for it, and I deeply appreciate it. My inbox is always open: [mike@pistola.io](mailto:mike@pistola.io)
-Thank you!
\ No newline at end of file
+Thank you!
diff --git a/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx b/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx
index e393111a..bcceda4d 100644
--- a/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx
+++ b/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx
@@ -33,6 +33,7 @@ In `_app.jsx/tsx`, load your the fonts you need from `next/font/google`, but use
```tsx
import { Barlow_Condensed, Inter } from 'next/font/google';
+
const barlowCondensed = Barlow_Condensed({
weight: '700',
subsets: ['latin'],
diff --git a/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx b/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx
index ad4b546b..c6d8a716 100644
--- a/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx
+++ b/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx
@@ -1,6 +1,5 @@
---
title: Understanding JavaScript Destructuring Syntax
-type: post
date: 03-26-2019
excerpt: 'Destructuring syntax in es6 (or es2015, etc) JavaScript is a wonderfully useful bit of the language. It allows you to extract values from an Object and assign them to a new variable in one statement -- but it can be confusing to read.'
published: true
diff --git a/src/data/posts/dont-center-paragraph-text.mdx b/src/data/posts/dont-center-paragraph-text.mdx
index d1e1b37f..679bf909 100644
--- a/src/data/posts/dont-center-paragraph-text.mdx
+++ b/src/data/posts/dont-center-paragraph-text.mdx
@@ -1,6 +1,5 @@
---
title: "Don't center align paragraph text"
-type: post
date: 04-10-2021
excerpt: "Stop using centered text. It's bad for usability, accessibility, and eye scanning -- and nobody anywhere wants to read like that."
coverImagePublicId: 'posts/center-align-text/center-align-text'
diff --git a/src/data/posts/egg-them-all.mdx b/src/data/posts/egg-them-all.mdx
index 2992c979..230eaa07 100644
--- a/src/data/posts/egg-them-all.mdx
+++ b/src/data/posts/egg-them-all.mdx
@@ -1,6 +1,5 @@
---
title: 'Egg them all: a fundraiser for New Zealand'
-type: post
date: 03-18-2019
excerpt: 'Get yourself some of these eggtastic stickers - gun violence is intolerable, and we need sensible gun reform. 100% of proceeds go to charity!'
coverImagePublicId: posts/egg-them-all/cover
diff --git a/src/data/posts/embracing-prettier.mdx b/src/data/posts/embracing-prettier.mdx
index 5b0a4f8b..d2083848 100644
--- a/src/data/posts/embracing-prettier.mdx
+++ b/src/data/posts/embracing-prettier.mdx
@@ -1,6 +1,5 @@
---
title: Embracing Prettier
-type: post
date: 02-25-2019
excerpt: "Prettier.js is a fantastic way to systemize and automate your project's code style."
coverImagePublicId: posts/embracing-prettier/cover
diff --git a/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx b/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx
index 5a67ca01..89d94472 100644
--- a/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx
+++ b/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx
@@ -1,6 +1,5 @@
---
title: "Do you have your own Gatsby site? Let's brainstorm a dev.to cross-poster"
-type: post
date: 06-23-2019
excerpt: 'So, like all good things, the idea for this post comes from a tweet...'
published: true
diff --git a/src/data/posts/gitignore-io-is-great.mdx b/src/data/posts/gitignore-io-is-great.mdx
index ef5d7198..a9d540d5 100644
--- a/src/data/posts/gitignore-io-is-great.mdx
+++ b/src/data/posts/gitignore-io-is-great.mdx
@@ -1,6 +1,5 @@
---
title: 'gitignore.io is great'
-type: post
date: 08-05-2020
excerpt: "Put simply, gitignore.io is a tool that is so profoundly helpful that I've forgotten what life was like without it."
coverImagePublicId: gitignore-io-cover
@@ -75,9 +74,8 @@ As I understand it, it was created by [@joeblau](https://twitter.com/joeblau), a
>
Aquent
- , which is a creative staffing agency. If you're looking for work, give
- us
- them a look!).
+ , which is a creative staffing agency. If you're looking for work, give{' '}
+ us them a look!).
diff --git a/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx b/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx
index dc483bf7..64a8153e 100644
--- a/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx
+++ b/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx
@@ -2,7 +2,7 @@
title: How do you choose the right CRM for your product?
excerpt: You're building relationships with all of your customers, whether you know it or not. Setting up the right CRM for your product can help make those relationships stronger.
date: 05-10-2022
-type: post
+
path: how-do-you-choose-the-right-crm-for-your-product
tags: [startup, marketing, entrepreneurship, product]
published: true
diff --git a/src/data/posts/i-have-to-tell-you-about-dependabot.mdx b/src/data/posts/i-have-to-tell-you-about-dependabot.mdx
index 66831691..e328accc 100644
--- a/src/data/posts/i-have-to-tell-you-about-dependabot.mdx
+++ b/src/data/posts/i-have-to-tell-you-about-dependabot.mdx
@@ -1,6 +1,5 @@
---
title: 'I have to tell you about Dependabot 🤖'
-type: post
date: 05-31-2019
updated: 11-13-2021
excerpt: "Dependabot is an automation service that will automatically create PRs to keep your projects' dependencies up to date, and it is really powerful."
diff --git a/src/data/posts/it-was-time.mdx b/src/data/posts/it-was-time.mdx
index bad05de5..6b244ff0 100644
--- a/src/data/posts/it-was-time.mdx
+++ b/src/data/posts/it-was-time.mdx
@@ -1,6 +1,5 @@
---
title: 'It was time - starting a writing habit to share my expertise'
-type: post
date: 2-24-2019
excerpt: "I've got some strong opinions on things - I hope that's okay. Thankfully, this is not just another 'hello world' post"
coverImagePublicId: posts/it-was-time/cover
diff --git a/src/data/posts/javascript-filter-boolean.mdx b/src/data/posts/javascript-filter-boolean.mdx
index 0a5b4d39..836eb581 100644
--- a/src/data/posts/javascript-filter-boolean.mdx
+++ b/src/data/posts/javascript-filter-boolean.mdx
@@ -2,7 +2,7 @@
title: 'JavaScript Tips: Using Array.filter(Boolean)'
excerpt: "If you come across array.filter(Boolean) in JavaScript code, never fear! It's a handy bit of functional programming that cleans up arrays with null and undefined values in them."
date: 11-12-2021
-type: post
+
coverImagePublicId: posts/javascript-filter-boolean/cover.webp
path: javascript-filter-boolean
tags: [dev, javascript, react, functional-programming]
diff --git a/src/data/posts/learn-web3-blockchain-with-buildspace.mdx b/src/data/posts/learn-web3-blockchain-with-buildspace.mdx
index b4907a7a..7165116d 100644
--- a/src/data/posts/learn-web3-blockchain-with-buildspace.mdx
+++ b/src/data/posts/learn-web3-blockchain-with-buildspace.mdx
@@ -2,7 +2,7 @@
title: Learn to build web3 apps on the blockchain with Buildspace
excerpt: "Buildspace offers free, online, cohort-based courses on building web3 blockchain apps. If you're interested in dipping your toe into the world of Ethereum apps, the blockchain, or NFTs - it's a great starting point."
date: 11-22-2021
-type: post
+
coverImagePublicId: posts/learn-web3-blockchain-with-buildspace/cover.webp
path: learn-web3-blockchain-with-buildspace
tags: [dev, web3, javascript]
@@ -16,8 +16,8 @@ As I write this post, I'm working through taking my second course on [Buildspace
After you create an account and enroll in a course Buildspace, you'll need to do two things before the live kickoff for your particular course: connect an ethereum wallet (which is used to verify that you're completing coursework, and to issue your course certificate NFT), and link your Discord account. You'll use Discord to chat with fellow students during the course, and to ask instructors for help.
diff --git a/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx b/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx
index ea262144..ba26b302 100644
--- a/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx
+++ b/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx
@@ -1,5 +1,5 @@
---
-title: "Configuring Resend Broadcasts for newsletters on my Next.js website"
+title: 'Configuring Resend Broadcasts for newsletters on my Next.js website'
excerpt: A coding livestream where integrate Resend's new Broadcasts feature into my next.js site to use for sending newsletters.
date: 2024-01-20
tags: [video, nextjs, newsletter, typescript]
@@ -9,6 +9,7 @@ youTubeId: qJtVLkdvQUE
---
## Notes about today's Livecoding stream
+
This is a YouTube Livestream, where I'll be working on integrating Resend Broadcasts into my next.js site to use for sending newsletters. Resend released a new set of features this week that makes it easier to send mail to large audiences.
I'll be building with:
diff --git a/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx b/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx
index f988948e..1d14a8b7 100644
--- a/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx
+++ b/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx
@@ -2,7 +2,7 @@
title: How to make VS Code load faster with a little bit of housekeeping
excerpt: 'Have you noticed that your favorite IDE has been slow to load lately? Try removing these before losing hope.'
date: 11-07-2021
-type: post
+
coverImagePublicId: posts/make-vs-code-load-faster-by-removing-extensions/cover
path: make-vs-code-load-faster-by-removing-extensions
tags: [dev, productivity, javascript]
diff --git a/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx b/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx
index cdd693fb..7e395777 100644
--- a/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx
+++ b/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx
@@ -5,7 +5,7 @@ date: 11-24-2021
path: make-vs-code-load-faster-mac-apple-silicon
cover: posts/make-vs-code-load-faster-mac-apple-silicon/cover.webp
tags: [dev, productivity, javascript]
-type: post
+
published: true
---
diff --git a/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx b/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx
index 0847a733..14e9f8b2 100644
--- a/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx
+++ b/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx
@@ -122,7 +122,7 @@ Like I mentioned above, my site uses Chakra UI to compose page layouts. I've add
```jsx
import NextLink from 'next/link';
-import { Link, Heading } from '@chakra-ui/react';
+import { Heading, Link } from '@chakra-ui/react';
const CustomHeading = ({ as, id, ...props }) => {
if (id) {
diff --git a/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx b/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx
index 0205606d..3811e7cd 100644
--- a/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx
+++ b/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx
@@ -7,18 +7,19 @@ coverImagePublicId: posts/migrate-from-next-sitemap-to-app-directory-sitemap/cov
excerpt: This post walks through the process of migrating from the next-sitemap library to the Next.js App Directory's sitemap.
---
-
## Transitioning from next-sitemap to Next.js's Built-in Sitemap.xml and Robots.txt APIs
+
In this post, I'll walk you through the process of migrating from the next-sitemap npm package to using Next.js's built-in API for generating sitemap.xml and robots.txt files. This transition not only simplifies our codebase but also leverages the capabilities of Next.js to enhance our SEO strategy.
### Why Migrate?
+
The [next-sitemap npm package](https://github.com/iamvishnusankar/next-sitemap) was a great tool for generating sitemaps, but as Next.js has evolved, it has introduced built-in support for sitemap and robots file generation. This change allows for a more streamlined approach, reducing dependencies and improving maintainability.
Admittedly, I have also been a bit of a laggard in updating my site to the new app directory - this is actually the _very first_ use of App Router on this site!
## What is a sitemap?
-A sitemap is a file that lists all the URLs on your site, helping search engines discover and index your content. It provides a roadmap for search engine crawlers to navigate your site and understand its structure. They're also used by other services like Google Search Console to understand your site's structure. If you haven't used Google Search Console, it's an invaluable resource for measuring your site's search engine performance.
+A sitemap is a file that lists all the URLs on your site, helping search engines discover and index your content. It provides a roadmap for search engine crawlers to navigate your site and understand its structure. They're also used by other services like Google Search Console to understand your site's structure. If you haven't used Google Search Console, it's an invaluable resource for measuring your site's search engine performance.
I've written at length about the value of SEO, including the [SEO tools I used to grow my sites to 20k+ visitors/month](https://mikebifulco.com/posts/seo-tools-for-new-projects).
@@ -29,6 +30,7 @@ The robots.txt file is a configuration file used to instruct web crawlers (like
## Removing the next-sitemap dependency
The first step is to remove the next-sitemap dependency from your project:
+
1. remove `next-sitemap` from your package.json file - make sure to check both `"scripts"` and `"devDependencies"`, and remove it from both places.
2. run `npm install` (or `yarn install` or `pnpm install`) to update your lockfile
3. delete your `next-sitemap.config.js` file if it exists
@@ -38,7 +40,6 @@ Side note: [`next-sitemap`](https://www.npmjs.com/package/next-sitemap) was a fa
## Generating a sitemap.xml file with Next.js
-
Next.js has a great built-in API for generating sitemaps and robots files. We'll use this API to generate our sitemap.xml and robots.txt files. The API is simple to use and allows for customization of the sitemap and robots file generation process.
There are a couple choices for [creating a sitemap with Next.js](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap#generating-a-sitemap-using-code-js-ts):
@@ -66,7 +67,14 @@ This file is where you will add an entry for every page you want search engines
type SitemapFile = Array<{
url: string;
lastModified?: string | Date;
- changeFrequency?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
+ changeFrequency?:
+ | 'always'
+ | 'hourly'
+ | 'daily'
+ | 'weekly'
+ | 'monthly'
+ | 'yearly'
+ | 'never';
priority?: number;
alternates?: {
languages?: Languages;
@@ -88,29 +96,29 @@ A couple things to note here, from the [sitemap spec](https://www.sitemaps.org/p
For static pages on my site, I opted for a semi-manual approach to adding them to the sitemap. I created an array of strings that represent the routes I want to include in the sitemap, and then mapped over that array to create the sitemap entries.
```tsx
- // Define your static routes
- const routes: string[] = [
- '', // home page
- '/about',
- '/integrity',
- '/newsletter',
- '/podcast',
- '/posts',
- '/tags',
- '/work',
- '/shop',
- ];
+// Define your static routes
+const routes: string[] = [
+ '', // home page
+ '/about',
+ '/integrity',
+ '/newsletter',
+ '/podcast',
+ '/posts',
+ '/tags',
+ '/work',
+ '/shop',
+];
- // Create sitemap entries for static routes
- const staticRoutesSitemap = routes.map((route) => ({
- url: `${baseUrl}${route}`,
- lastModified: new Date(),
- changeFrequency: 'weekly' as const,
- priority: route === '' ? 1 : 0.8,
- }));
+// Create sitemap entries for static routes
+const staticRoutesSitemap = routes.map((route) => ({
+ url: `${baseUrl}${route}`,
+ lastModified: new Date(),
+ changeFrequency: 'weekly' as const,
+ priority: route === '' ? 1 : 0.8,
+}));
```
-When run, this will generate an array of sitemap entries for each of the routes in the `routes` array - note that the homepage has a priority of 1, and all other pages have a priority of 0.8.
+When run, this will generate an array of sitemap entries for each of the routes in the `routes` array - note that the homepage has a priority of 1, and all other pages have a priority of 0.8.
#### Dynamic pages
@@ -125,17 +133,17 @@ I write all my site content in [`MDX`](https://mdxjs.com/docs/what-is-mdx/), and
I used a utility function to grab all of the newsletter issues, blog posts, and tags from the `src/data/` directory, and then mapped over each one to create a sitemap entry. For newsletters, that looks like this:
```tsx
- // this is a helper function used across my site.
- // replace with whatever is needed to fetch from the CMS you use
- const newsletters = await getAllNewsletters();
-
- // create a sitemap entry for each newsletter
- const newslettersSitemap = newsletters.map((newsletter) => ({
- url: `${baseUrl}/newsletter/${newsletter.slug}`,
- lastModified: new Date(newsletter.frontmatter.date),
- changeFrequency: 'weekly' as const,
- priority: 0.8,
- }));
+// this is a helper function used across my site.
+// replace with whatever is needed to fetch from the CMS you use
+const newsletters = await getAllNewsletters();
+
+// create a sitemap entry for each newsletter
+const newslettersSitemap = newsletters.map((newsletter) => ({
+ url: `${baseUrl}/newsletter/${newsletter.slug}`,
+ lastModified: new Date(newsletter.frontmatter.date),
+ changeFrequency: 'weekly' as const,
+ priority: 0.8,
+}));
```
The same pattern is used for blog posts and tags.
@@ -169,7 +177,7 @@ export default async function sitemap(): Promise {
priority: 0.8,
}));
- const { allTags } = await getAllTags();
+ const allTags = await getAllTags();
const tagsSitemap = allTags.map((tag) => ({
url: `${baseUrl}/tags/${tag}`,
lastModified: new Date(),
@@ -214,11 +222,10 @@ Fire up `next dev` and navigate to `/sitemap.xml` - you should see your sitemap!
-
## Creating a robots.txt file
Next up, robots.txt. This is a _very_ similar process - we will follow the [docs for robots.txt](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots) from Next.js.
@@ -229,7 +236,6 @@ This is a deceptively important file for your website's SEO. It is a really good
**🚨 Important: ** If you are running a non-production environment, you will need to add a check to your robots.ts file to disallow all requests. This is because non-production environments often have URLs that you don't want search engines to index - it would be bad news if Google decided that a deploy preview of your site should rank higher than your production site!
-
### Robots.ts: The complete file
Much like static pages for the sitemap, you will need to add an entry for every path you don't want search engines to index.
@@ -296,6 +302,7 @@ Now that everything's done, make absolutely sure you've got everything configure
```md
**Before going live**, verify that:
+
- robots.txt
- [ ] visit `/robots.txt` and verify that it exists
- [ ] check that there is an entry for your sitemap that contains a full URL, including the protocol (`https://`)
@@ -307,10 +314,12 @@ Now that everything's done, make absolutely sure you've got everything configure
- [ ] dynamic pages (newsletters, blog posts, tags)
**While testing deploy previews of your site**, verify that:
+
- [ ] your sitemap is being generated correctly
- [ ] your robots.txt is being generated so that it **disallows all requests** in deploy previews
**After going live**, check that:
+
- [ ] your sitemap is being picked up and read by [Google Search Console](https://search.google.com/search-console)
- [ ] use something like the [Ahrefs Webmaster Tools Site Audit](https://ahrefs.com/signup?plan=awt&return=website-checker) to scan your site and verify that it is indexed correctly and that there aren't any issues.
```
diff --git a/src/data/posts/moving-to-mdx.mdx b/src/data/posts/moving-to-mdx.mdx
index 1d44fa76..14c71564 100644
--- a/src/data/posts/moving-to-mdx.mdx
+++ b/src/data/posts/moving-to-mdx.mdx
@@ -1,6 +1,6 @@
---
title: 'MDX - I should have done this sooner'
-type: post
+
date: 07-22-2020
excerpt: I added support for mdx to my site, and it's made life much bettter.
published: true
diff --git a/src/data/posts/my-favorite-design-problem.mdx b/src/data/posts/my-favorite-design-problem.mdx
index c04e1a60..aae1012c 100644
--- a/src/data/posts/my-favorite-design-problem.mdx
+++ b/src/data/posts/my-favorite-design-problem.mdx
@@ -2,7 +2,7 @@
title: Stop speaking into the top of your Blue Yeti Microphone
excerpt: "No, really, it doesn't work that way. It will sound loads better if you stop talking into the top of your Blue Yeti mic. It's an easy mistake to make."
date: 02-28-2019
-type: post
+
coverImagePublicId: 'posts/my-favorite-design-problem/cover'
published: true
path: my-favorite-design-problem
diff --git a/src/data/posts/next-js-github-bio-about-page.mdx b/src/data/posts/next-js-github-bio-about-page.mdx
index 87115b62..be06f0b4 100644
--- a/src/data/posts/next-js-github-bio-about-page.mdx
+++ b/src/data/posts/next-js-github-bio-about-page.mdx
@@ -98,15 +98,14 @@ To get the raw URL for your README, go to your GitHub profile, and click on the
5. Finally, you can render your README in your About page using MDX Remote.
```jsx
+// If you want to have MDX render custom components, you can import them here
+import { components } from '~/utils/mdx-components';
import { MDXRemote } from 'next-mdx-remote';
import { serialize } from 'next-mdx-remote/serialize';
// For sake of example, we'll use a Layout component to represent the visual layout of the page
import Layout from '../components/Layout';
-// If you want to have MDX render custom components, you can import them here
-import { components } from '~/utils/mdx-components';
-
export async function getStaticProps() {
// fetch personal README from github
const res = await fetch(
diff --git a/src/data/posts/nullish-coalescing-javascript.mdx b/src/data/posts/nullish-coalescing-javascript.mdx
index 064b5cc9..c62fd6c2 100644
--- a/src/data/posts/nullish-coalescing-javascript.mdx
+++ b/src/data/posts/nullish-coalescing-javascript.mdx
@@ -2,7 +2,7 @@
title: 'JavaScript Tips: Nullish Coalescing (??)'
excerpt: "Let's take a look at the Nullish Coalescing operator (??) in JavaScript, which returns the right operand if the left is null or undefined."
date: 11-15-2021
-type: post
+
coverImagePublicId: posts/nullish-coalescing-javascript/cover.webp
path: nullish-coalescing-javascript
tags: [dev, javascript, react]
diff --git a/src/data/posts/on-normalcy.mdx b/src/data/posts/on-normalcy.mdx
index 1133ff47..5ea38fa2 100644
--- a/src/data/posts/on-normalcy.mdx
+++ b/src/data/posts/on-normalcy.mdx
@@ -1,6 +1,6 @@
---
title: 'On normalcy, daily routines, and the pandemic'
-type: post
+
date: 04-21-2020
excerpt: "On my walk this morning, I found myself wondering what it's going to be like when things go back to normal."
published: true
diff --git a/src/data/posts/own-your-work-with-canonical-tags.mdx b/src/data/posts/own-your-work-with-canonical-tags.mdx
index b7ff1de2..2a100efc 100644
--- a/src/data/posts/own-your-work-with-canonical-tags.mdx
+++ b/src/data/posts/own-your-work-with-canonical-tags.mdx
@@ -167,32 +167,31 @@ If your Next.js app is built using the App Router, implementation is slightly di
To add a canonical tag with this method, you'll do something like this:
```tsx
-import type { Metadata, ResolvingMetadata } from 'next'
+import type { Metadata, ResolvingMetadata } from 'next';
type Props = {
- params: { id: string }
- searchParams: { [key: string]: string | string[] | undefined }
-}
+ params: { id: string };
+ searchParams: { [key: string]: string | string[] | undefined };
+};
export async function generateMetadata(
{ params, searchParams }: Props,
parent: ResolvingMetadata
): Promise {
// read route params
- const slug = params.slug
+ const slug = params.slug;
return {
metadataBase: new Url('https://yoursite.com'), // Next will use this to make complete URLs from relative paths
alternates: {
canonical: `/articles/${slug}`,
},
- }
+ };
}
export default function Page({ params, searchParams }: Props) {
/* etc */
}
-
```
### Setting a canonical URL on Dev.to
diff --git a/src/data/posts/picking-apart-javascript-import.mdx b/src/data/posts/picking-apart-javascript-import.mdx
index 5ac87ba3..cc8a2311 100644
--- a/src/data/posts/picking-apart-javascript-import.mdx
+++ b/src/data/posts/picking-apart-javascript-import.mdx
@@ -1,6 +1,6 @@
---
title: 'Picking apart JavaScript import syntax'
-type: post
+
date: 04-17-2019
excerpt: 'Part 2 in a series of posts on destructuring syntax for JavaScript and Node.'
published: true
@@ -43,6 +43,7 @@ This line of code creates a reference to everything made available in the `momen
```js
import moment from 'moment';
+
console.log(moment().get('year'));
// 2019
```
@@ -55,6 +56,7 @@ It may be confusing, but you absolutely could do this, if the this name made mor
```js
import ThatReallyUsefulDateLibrary from 'moment';
+
console.log(ThatReallyUsefulDateLibrary().get('year'));
// 2019
```
@@ -143,7 +145,7 @@ import { Layout, Button as SuperButton } from '../components';
The best isn't alway last, but this is certainly the last example I've got to share today:
```js
-import React, { useState, useEffect } from 'react';
+import React, { useEffect, useState } from 'react';
```
If you've been playing along at home, this should all be familiar now - we're grabbing the default export from `react`, which we've put into the variable `react`. We also destructured `useState` and `useEffect` from _the same library_. If you're asking yourself "Well couldn't we also access `useState` as a child of `React`"? The answer is - well, actually, yeah!
diff --git a/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx b/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx
index 99663222..3536af5c 100644
--- a/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx
+++ b/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx
@@ -1,6 +1,6 @@
---
title: 'Help your users when your web app crashes'
-type: post
+
date: 04-21-2020
excerpt: "This post came from my work on Surviving Other People's APIs. I've been working on a chapter on Async - the content below came from that writing, but doesn't quite make sense in the context of the book. I didn't want to scrap it entirely, so it's found its way into a blog post. I'd love to know what you think!"
published: true
diff --git a/src/data/posts/product-marketing-defy-expectations.mdx b/src/data/posts/product-marketing-defy-expectations.mdx
index c38f2b1e..abf78b02 100644
--- a/src/data/posts/product-marketing-defy-expectations.mdx
+++ b/src/data/posts/product-marketing-defy-expectations.mdx
@@ -5,7 +5,7 @@ date: 11-29-2021
path: product-marketing-defy-expectations
cover: posts/product-marketing-defy-expectations/cover.webp
tags: [design, marketing, ux, ai]
-type: post
+
published: true
podcastUrl: https://share.transistor.fm/e/9a4c213c
---
diff --git a/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx b/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx
index f41a1e49..53f7cd5f 100644
--- a/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx
+++ b/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx
@@ -1,6 +1,6 @@
---
title: "Promise.allSettled() Pt.2 - it's partly settled!"
-type: post
+
date: 04-26-2019
excerpt: 'This is a follow-up to my first post on the upcoming Promise.allSettled() function, coming soon to a node application near you. '
published: true
@@ -32,9 +32,9 @@ It is a polyfill of the JavaScript standard library, which supports:
- ECMAScript standard library proposals.
- Some WHATWG / W3C standards (cross-platform or closely related ECMAScript).
-It is maximally modular: you can easily choose to load only the features you will be using.
- It can be used without polluting the global namespace.
- It is [tightly integrated with `babel`: this allows many optimizations of `core-js` import.](https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#Babel)
+It is maximally modular: you can easily choose to load only the features you will be using.
+It can be used without polluting the global namespace.
+It is [tightly integrated with `babel`: this allows many optimizations of `core-js` import.](https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#Babel)
diff --git a/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx b/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx
index 55d67e10..17202f3a 100644
--- a/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx
+++ b/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx
@@ -93,8 +93,8 @@ it focused on data loading logic._
```jsx
import { Link } from 'next/link';
-import { getAllNewsletters } from '../../utils/convertKit';
+import { getAllNewsletters } from '../../utils/convertKit';
import slugify from '../../utils/slugify';
export const getStaticProps = async () => {
@@ -159,6 +159,7 @@ Now that we have a page listing all published newsletters, we need to create a p
```jsx
import { useEffect } from 'react';
+
import {
broadcastTemplateParse,
getAllNewsletters,
@@ -227,6 +228,7 @@ We're also using 2 helper functions, which are defined in `/src/utils/convertKit
```js
import { Liquid } from 'liquidjs';
+
const engine = new Liquid();
export const broadcastTemplateParse = ({ template, data }) => {
diff --git a/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx b/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx
index d16323fc..0b8fc458 100644
--- a/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx
+++ b/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx
@@ -90,9 +90,8 @@ it focused on data loading logic._
```jsx
import { useLoaderData } from '@remix-run/react';
-
+import { NewsletterCTA, NewsletterListItem } from '~/components';
import { getAllNewsletters } from '~/lib/util/convertKit.server';
-import { NewsletterListItem, NewsletterCTA } from '~/components';
export const loader = async ({ params, request }) => {
return {
@@ -127,13 +126,12 @@ Now that we have a page listing all published newsletters, we need to create a p
```jsx
import { useLoaderData } from '@remix-run/react';
+import NewsletterCTA from '~/components';
+import config from '~/config';
import {
broadcastTemplateParse,
newsletterHasValidThumbnail,
} from '~/lib/util/convertKit';
-import NewsletterCTA from '~/components';
-import config from '~/config';
-
import { getNewsletter } from '~/lib/util/convertKit.server';
// render meta tags on page for SEO
@@ -201,6 +199,7 @@ We're also using 2 helper functions, which are defined in `/app/lib/util/convert
```js
import { Liquid } from 'liquidjs';
+
const engine = new Liquid();
export const broadcastTemplateParse = ({ template, data }) => {
diff --git a/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx b/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx
index 4cc5d9de..2cc0d2df 100644
--- a/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx
+++ b/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx
@@ -1,6 +1,6 @@
---
title: "Quick tip: Here's how to uninstall Postgres from your Mac"
-type: post
+
date: 03-19-2019
excerpt: "Uninstalling Postgres database software from a computer running MacOS isn't super straightforward - this is what I found helpful."
published: true
diff --git a/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx b/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx
index 4f4436f9..5c4f24ce 100644
--- a/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx
+++ b/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx
@@ -1,6 +1,6 @@
---
title: I reclaimed 10GB of disk space from node_modules
-type: post
+
date: 04-02-2019
excerpt: "If you're not careful, your node projects can start to fill all the spare disk space on your computer. This one weird trick (lol) can help avoid that."
published: true
diff --git a/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx b/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx
index 854cec1d..84cc426f 100644
--- a/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx
+++ b/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx
@@ -1,6 +1,6 @@
---
title: How to reset your Open Graph embed on LinkedIn, Twitter, and Facebook
-type: post
+
date: 09-17-2020
excerpt: "If you're dealing with Open Graph metadata for your site, and you can't figure out how to get your OG content to update after you make changes, this is your guide."
coverImagePublicId: gatsby-cloudinary/ogShareReset
diff --git a/src/data/posts/seed-your-supabase-database.mdx b/src/data/posts/seed-your-supabase-database.mdx
index a3737de9..fc8a93e2 100644
--- a/src/data/posts/seed-your-supabase-database.mdx
+++ b/src/data/posts/seed-your-supabase-database.mdx
@@ -34,26 +34,26 @@ For this example, we will use a simplified Drizzle ORM Database schema with two
// schema.ts
// ...other tables and imports above
-export const chefs = createTable("chefs", {
- id: serial("id").primaryKey(),
- name: varchar("name", { length: 256 }).notNull(),
- email: varchar("email", { length: 256 }).notNull(),
- phone: varchar("phone", { length: 256 }),
- address: text("address"),
+export const chefs = createTable('chefs', {
+ id: serial('id').primaryKey(),
+ name: varchar('name', { length: 256 }).notNull(),
+ email: varchar('email', { length: 256 }).notNull(),
+ phone: varchar('phone', { length: 256 }),
+ address: text('address'),
});
-export const recipeTypes = createTable("project_type", {
- id: serial("id").primaryKey(),
- name: varchar("name", { length: 256 }).notNull(),
- description: text("description"),
+export const recipeTypes = createTable('project_type', {
+ id: serial('id').primaryKey(),
+ name: varchar('name', { length: 256 }).notNull(),
+ description: text('description'),
});
-export const recipes = createTable("recipes", {
- id: serial("id").primaryKey(),
- name: varchar("name", { length: 256 }).notNull(),
- description: text("description"),
- recipeTypeId: integer("recipeTypeId").references(recipeTypes.id),
- recipeChefId: integer("recipeChefId").references(chefs.id),
+export const recipes = createTable('recipes', {
+ id: serial('id').primaryKey(),
+ name: varchar('name', { length: 256 }).notNull(),
+ description: text('description'),
+ recipeTypeId: integer('recipeTypeId').references(recipeTypes.id),
+ recipeChefId: integer('recipeChefId').references(chefs.id),
});
```
@@ -88,9 +88,9 @@ The string returned by each `SeedFunction`'s promise is a message that will be l
The simplest option is tables with predefined or hand-written data. For these, I more-or-less hand-write objects to stick into the database. Here's an example of how to the `recipeTypes` table:
```tsx
-import type { SeedFunction } from "../seed";
-import { recipeTypes } from "../schema";
-import db from "../db";
+import db from '../db';
+import { recipeTypes } from '../schema';
+import type { SeedFunction } from '../seed';
type RecipeTypeRow = {
name: string;
@@ -99,9 +99,9 @@ type RecipeTypeRow = {
// note the export: we will use this later
export const RecipeTypes: SeedFunction = {
- "Breakfast": { id: 1, name: "Breakfast", description: "Breakfast recipes" },
- "Lunch": { id: 2, name: "Lunch", description: "Lunch recipes" },
- "Dinner": { id: 3, name: "Dinner", description: "Dinner recipes" },
+ Breakfast: { id: 1, name: 'Breakfast', description: 'Breakfast recipes' },
+ Lunch: { id: 2, name: 'Lunch', description: 'Lunch recipes' },
+ Dinner: { id: 3, name: 'Dinner', description: 'Dinner recipes' },
} as const;
const seedRecipeTypes = async () => {
@@ -128,10 +128,11 @@ For tables that can use randomized data, a slightly different approach is used w
Here's how to populate the `Chefs` table with a list of fake chefs:
```tsx
-import faker from "faker";
-import { chefs } from "../schema";
-import db from "../db";
-import type { SeedFunction } from "../seed";
+import faker from 'faker';
+
+import db from '../db';
+import { chefs } from '../schema';
+import type { SeedFunction } from '../seed';
type ChefRow = {
name: string;
@@ -162,10 +163,10 @@ If you have tables with relationships, you can seed related data by using the `i
Here's an example of how you might seed the `recipes` table with related data:
```tsx
-import { recipes } from "../schema";
-import db from "../db";
-import { RecipeTypes } from "./recipeTypes";
-import type { SeedFunction } from "../seed";
+import db from '../db';
+import { recipes } from '../schema';
+import type { SeedFunction } from '../seed';
+import { RecipeTypes } from './recipeTypes';
type RecipeRow = {
name: string;
@@ -176,16 +177,31 @@ type RecipeRow = {
const seedRecipes: SeedFunction = async () => {
const data: RecipeRow[] = [
{
- name: "Pancakes",
- description: "Delicious pancakes",
+ name: 'Pancakes',
+ description: 'Delicious pancakes',
// use the id from the RecipeTypes object we exported earlier
recipeTypeId: RecipeTypes.Breakfast.id,
// since it can be any chef, we'll just use the first one
recipeChefId: 1,
},
- { name: "Spaghetti", description: "Classic spaghetti", recipeTypeId: RecipeTypes.Dinner.id, recipeChefId: 2 },
- { name: "Roast chicken", description: "Juicy roast chicken", recipeTypeId: RecipeTypes.Dinner.id, recipeChefId: 3 },
- { name: "Sandwich", description: "Good ol' ham & swiss", recipeTypeId: RecipeTypes.Lunch.id, recipeChefId: 4 },
+ {
+ name: 'Spaghetti',
+ description: 'Classic spaghetti',
+ recipeTypeId: RecipeTypes.Dinner.id,
+ recipeChefId: 2,
+ },
+ {
+ name: 'Roast chicken',
+ description: 'Juicy roast chicken',
+ recipeTypeId: RecipeTypes.Dinner.id,
+ recipeChefId: 3,
+ },
+ {
+ name: 'Sandwich',
+ description: "Good ol' ham & swiss",
+ recipeTypeId: RecipeTypes.Lunch.id,
+ recipeChefId: 4,
+ },
];
await db.from(recipes).insert(data);
diff --git a/src/data/posts/self-healing-urls-nextjs-seo.mdx b/src/data/posts/self-healing-urls-nextjs-seo.mdx
index 967105af..a6223d98 100644
--- a/src/data/posts/self-healing-urls-nextjs-seo.mdx
+++ b/src/data/posts/self-healing-urls-nextjs-seo.mdx
@@ -7,7 +7,6 @@ coverImagePublicId: posts/self-healing-urls-nextjs-seo/cover
path: self-healing-urls-nextjs-seo
---
-
_note: This post is inspired by a great video from YouTuber Aaron Francis: [Make self-healing URLs with Laravel](https://www.youtube.com/watch?v=a6lnfyES-LA). For all my PHP homies - go check that video out. It's great!_
@@ -117,7 +116,7 @@ export const getAllPosts = async () => {
// this is just a placeholder, replace with your own data
// shout out to https://jsonplaceholder.typicode.com/ - what a great service!
const postsResponse = await fetch(
- 'https://jsonplaceholder.typicode.com/posts',
+ 'https://jsonplaceholder.typicode.com/posts'
);
const posts = (await postsResponse.json()) as Post[];
@@ -169,7 +168,6 @@ export const getPostSlug = (post: Post) => {
// given any slug, try to extract an id from it
export const getIdFromSlug = (slug: string) => slug.split('-').pop();
-
```
### Generate a sitemap with the correct canonical URL for each post
@@ -186,13 +184,13 @@ A canonical tag looks like this:
```
-
So, this is what sitemap.ts looks like:
```ts
-import { getAllPosts, getPostSlug } from '@/utils/posts';
import { MetadataRoute } from 'next';
+import { getAllPosts, getPostSlug } from '@/utils/posts';
+
export default async function sitemap(): MetadataRoute.Sitemap {
const allPosts = await getAllPosts();
@@ -212,7 +210,6 @@ export default async function sitemap(): MetadataRoute.Sitemap {
Now, if you run your app and visit `https://localhost:3000/sitemap.xml`, you should see a sitemap that includes an entry for each post, with the correct canonical URL specified.
-
### Setting up page.tsx: where the magic happens
In the file `app/posts/[slug]/page.tsx`, we use the [Next.js App Router's `generateStaticParams` function](https://nextjs.org/docs/app/building-your-application/routing/dynamic-routes#generating-static-params) to generate URLs for all posts. This function is called at build time, and it returns an array of objects that contain the `slug` for each post. The `slug` is used to generate the URL for each post page.
@@ -221,7 +218,6 @@ Then, in the server function which renders the post page, we check whether the c
We also use the [Next.js App Router's `generateMetadata` function](https://nextjs.org/docs/app/next-script#generating-metadata) to generate metadata for each post. This function is called at build time, and it returns an object that contains the `title` and `alternates` for each post. The `alternates` object contains the `canonical` URL for each post, which is used to tell search engines which URL is the correct one for each post. **This is critical for SEO purposes** - it helps Google verify that when your page loads, the URL in the address bar matches the URL that Google has indexed for that page.
-
```tsx
import { Metadata, ResolvingMetadata } from 'next';
import { RedirectType, notFound, redirect } from 'next/navigation';
@@ -301,8 +297,6 @@ Another important note - _entire_ component is rendered server-side - visitors t
Instead of a screen flash, your users get a great experience: they can try to load an incorrect URL, and as long as the URL ends with a hyphen followed by the `id`, they'll be redirected to the correct URL seamlessly, like magic. If the URL doesn't match the pattern, they'll be redirected to the 404 page.
-
-
### Not Found: a 404 page for posts that don't exist
In `app/not-found.tsx`, create a 404 page that will render if someone tries to visit a post page with an id that doesn't exist in the url. [Next provides a `notFound` function](https://nextjs.org/docs/app/api-reference/functions/not-found) that will return a 404 page. We used this in page.tsx to return a 404 page if the post doesn't exist. You'll want to make this page look nice and include some helpful text, but for the sake of this example, we'll keep it simple:
@@ -343,7 +337,6 @@ Because making this work is dependent on your specific setup, I'm not going to i
- It's a good to make sure that you don't accidentally create a redirect loop. If the new URL for a given path is the same as any of the prior URLs, don't add a new redirect, and remove any existing redirects for that path.
- You may need to kick off a rebuild of your site to make sure that the new redirect is picked up by your app. If you're using Vercel, you can use their [API to trigger a rebuild](https://vercel.com/docs/api#endpoints/deployments/redeploy-all-deployments) when a post is saved.
-
## Summary: self-healing URLs in Next.js
In this post, we learned how to set up self-healing URLs in Next.js. We used the App Router to generate URLs for all posts, and we used the App Router's `generateMetadata` function to generate metadata for each post. This function is called at build time, and it returns an object that contains the `title` and `alternates` for each post. The `alternates` object contains the `canonical` URL for each post, which is used to tell search engines which URL is the correct one for each post. **This is great for SEO purposes** - it helps Google verify that when your page loads, the URL in the address bar matches the URL that Google has indexed for that page. It also has usability benefits: if your post's title ever changes, the URL will magically update itself to match the new title. Additionally, people who visit your page while using a screen reader will have a better experience, because the URL will always match the content on the page.
@@ -354,9 +347,6 @@ Not too shabby!
You can find the code for this tutorial on [GitHub at mbifulco/next-self-healing-urls-app-router](https://github.com/mbifulco/next-self-healing-urls-app-router). If you enjoyed this post, please consider giving it a star ⭐️ on GitHub!
-
## PS: What about using the Next.js Pages router?
This post _started_ as a tutorial for using the Next.js Pages router to create self-healing URLs, but I ran into a few issues that would make it really challenging to recommend going down this path if you're using the pages router (which is actually what [mikebifulco.com uses](https://github.com/mbifulco/blog)!). For that reason, I think **this is a feature you should only add if you're using the App Router**. I'm including the draft of my original post here [in a gist](https://gist.github.com/mbifulco/daf23aed0d827ec6317962691cb9cd0d) in case anyone wants to take a stab at it. If you figure it out, please let me know!
-
-
diff --git a/src/data/posts/semantic-html-heading-subtitle.mdx b/src/data/posts/semantic-html-heading-subtitle.mdx
index c9c0cb25..3be52e62 100644
--- a/src/data/posts/semantic-html-heading-subtitle.mdx
+++ b/src/data/posts/semantic-html-heading-subtitle.mdx
@@ -56,7 +56,10 @@ The first version of this article was wrong! I previously recommended using the
MDN specifically recommends against <hgroup> because assistive
technologies don't support it.
- — EQV Analytics 🇺🇦 (@AnalyticsEqv) July 5, 2022
+ — EQV Analytics 🇺🇦 (@AnalyticsEqv){' '}
+
+ July 5, 2022
+
diff --git a/src/data/posts/solve-all-your-problems-with-promise-allsettled.mdx b/src/data/posts/solve-all-your-problems-with-promise-allsettled.mdx
index d1e0094f..bd1dfcc7 100644
--- a/src/data/posts/solve-all-your-problems-with-promise-allsettled.mdx
+++ b/src/data/posts/solve-all-your-problems-with-promise-allsettled.mdx
@@ -1,8 +1,8 @@
---
-title: "Solve* all your problems with Promise.allSettled()"
-type: post
+title: 'Solve* all your problems with Promise.allSettled()'
+
date: 04-12-2019
-excerpt: "Promise.allSettled() is a new API coming to the JavaScript / ES6 standard which can help you more efficiently build node applications that make simultaneous asynchronous API calls"
+excerpt: 'Promise.allSettled() is a new API coming to the JavaScript / ES6 standard which can help you more efficiently build node applications that make simultaneous asynchronous API calls'
published: true
path: solve-all-your-problems-with-promise-allsettled
tags: [javascript, dev, react]
@@ -15,36 +15,37 @@ Of late, I've found myself building JavaScript web applications with increasing
Check out this somewhat-contrived example, wherein we asynchronously load comments on a blog post:
```js
- const loadComments = new Promise((resolve, reject) => {
- // run an asynchronous API call
- BlogEngine.loadCommentsForPost({ id: '12345' })
- .then(comments => {
- // Everything worked! Return this promise with the comments we got back.
- resolve(comments)
- })
- .error(err => {
- // something went wrong - send the error back
- reject(new Error(err))
- })
- })
+const loadComments = new Promise((resolve, reject) => {
+ // run an asynchronous API call
+ BlogEngine.loadCommentsForPost({ id: '12345' })
+ .then((comments) => {
+ // Everything worked! Return this promise with the comments we got back.
+ resolve(comments);
+ })
+ .error((err) => {
+ // something went wrong - send the error back
+ reject(new Error(err));
+ });
+});
```
There's also an alternative syntax pattern, `async` / `await`, which lets you write promises in a more legible, pseudo-serial form:
```js
- const loadComments = async () => {
- try {
- const comments = await BlogEngine.loadCommentsForPost({ id: '12345' })
- return comments
- } catch (err) {
- return new Error(err)
- }
+const loadComments = async () => {
+ try {
+ const comments = await BlogEngine.loadCommentsForPost({ id: '12345' });
+ return comments;
+ } catch (err) {
+ return new Error(err);
}
+};
```
## Dealing with multiple promises
Inevitably, you'll find yourself in situations where you need to execute multiple promises. Let's start off simply:
+
```js
const postIds = ['1', '2', '3', '4', '5'];
postIds.each((id) => {
@@ -93,9 +94,9 @@ You see, `Promise.allSettled()` does exactly what we'd like in the example abo
(this code sample is cribbed from the github proposal - go give it a look for more detail)
```js
- const promises = [fetch('index.html'), fetch('https://does-not-exist/')]
- const results = await Promise.allSettled(promises)
- const successfulPromises = results.filter(p => p.status === 'fulfilled')
+const promises = [fetch('index.html'), fetch('https://does-not-exist/')];
+const results = await Promise.allSettled(promises);
+const successfulPromises = results.filter((p) => p.status === 'fulfilled');
```
## **Using** `**Promise.All()**` ** now (updated!)**
@@ -105,7 +106,7 @@ You see, `Promise.allSettled()` does exactly what we'd like in the example abo
Install the [`core-js`](https://github.com/zloirock/core-js) package and include this somewhere in your codebase:
```js
- import 'core-js/proposals/promise-all-settled'
+import 'core-js/proposals/promise-all-settled';
```
**Original post:**
diff --git a/src/data/posts/sticker-update-we-raised-176-nzd.mdx b/src/data/posts/sticker-update-we-raised-176-nzd.mdx
index 032624b6..b3f7fc9c 100644
--- a/src/data/posts/sticker-update-we-raised-176-nzd.mdx
+++ b/src/data/posts/sticker-update-we-raised-176-nzd.mdx
@@ -1,6 +1,6 @@
---
title: 'Egg sticker update: We raised $176 NZD!'
-type: post
+
date: 03-28-2019
excerpt: 'Last week I posted about some stickers I designed and had put up for sale to benefit victims of the shooting in Christchurch, NZ. They sold out far, far more quickly than I ever would have guessed.'
published: true
diff --git a/src/data/posts/stop-paying-your-isp-to-rent-a-modem.mdx b/src/data/posts/stop-paying-your-isp-to-rent-a-modem.mdx
index 61855c6b..a9af56b9 100644
--- a/src/data/posts/stop-paying-your-isp-to-rent-a-modem.mdx
+++ b/src/data/posts/stop-paying-your-isp-to-rent-a-modem.mdx
@@ -1,6 +1,6 @@
---
title: Stop paying your ISP to rent a modem
-type: post
+
published: false
date: 05-12-2020
tags: [productivity, dev]
diff --git a/src/data/posts/structured-data-json-ld-for-next-js-sites.mdx b/src/data/posts/structured-data-json-ld-for-next-js-sites.mdx
index 27155862..8bcdc036 100644
--- a/src/data/posts/structured-data-json-ld-for-next-js-sites.mdx
+++ b/src/data/posts/structured-data-json-ld-for-next-js-sites.mdx
@@ -151,34 +151,34 @@ let videoStructuredData: WithContext | undefined = undefined;
Next, we'll need to populate this variable with the appropriate data for the schema. In my case, I'm using the `youTubeId` from the frontmatter to generate the JSON-LD for the video, like this:
```tsx
- let videoStructuredData: VideoStructuredData | undefined = undefined;
-
- if (youTubeId) {
- videoStructuredData = {
- '@context': 'https://schema.org',
- '@type': 'VideoObject',
- name: title,
- description: excerpt,
- thumbnailUrl: `https://i.ytimg.com/vi/${youTubeId}/hqdefault.jpg`, // this is the thumbnail for the video straight from youtube
- uploadDate: new Date(date).toISOString(),
- contentUrl: `https://www.youtube.com/watch?v=${youTubeId}`, // this is the URL for the video on youtube
- embedUrl: `https://www.youtube.com/embed/${youTubeId}`, // this is the URL for the video embed on youtube
- duration: 'PT1M33S', // this is the duration of the video
-
- /*
+let videoStructuredData: VideoStructuredData | undefined = undefined;
+
+if (youTubeId) {
+ videoStructuredData = {
+ '@context': 'https://schema.org',
+ '@type': 'VideoObject',
+ name: title,
+ description: excerpt,
+ thumbnailUrl: `https://i.ytimg.com/vi/${youTubeId}/hqdefault.jpg`, // this is the thumbnail for the video straight from youtube
+ uploadDate: new Date(date).toISOString(),
+ contentUrl: `https://www.youtube.com/watch?v=${youTubeId}`, // this is the URL for the video on youtube
+ embedUrl: `https://www.youtube.com/embed/${youTubeId}`, // this is the URL for the video embed on youtube
+ duration: 'PT1M33S', // this is the duration of the video
+
+ /*
note that I'm not using the entire VideoObject schema here, but
you could add more fields if you wanted to, like interactionStatistic
and regionsAllowed:
*/
- // interactionStatistic: {
- // '@type': 'InteractionCounter',
- // interactionType: { '@type': 'http://schema.org/WatchAction' },
- // userInteractionCount: 0,
- // },
- // regionsAllowed: ['US'],
- };
- }
+ // interactionStatistic: {
+ // '@type': 'InteractionCounter',
+ // interactionType: { '@type': 'http://schema.org/WatchAction' },
+ // userInteractionCount: 0,
+ // },
+ // regionsAllowed: ['US'],
+ };
+}
```
Once this object is created, I serialize it to a string and add it to a `