diff --git a/package.json b/package.json
index 014c6854..2dc733dd 100644
--- a/package.json
+++ b/package.json
@@ -85,7 +85,7 @@
"@react-spring/web": "^10.0.1",
"@svgr/cli": "^8.1.0",
"@tanstack/react-query": "^5.85.5",
- "@umami/react-zen": "^0.174.0",
+ "@umami/react-zen": "^0.175.0",
"@umami/redis-client": "^0.27.0",
"bcryptjs": "^3.0.2",
"chalk": "^5.6.0",
@@ -156,6 +156,7 @@
"@typescript-eslint/eslint-plugin": "^8.41.0",
"@typescript-eslint/parser": "^8.41.0",
"@umami/esbuild-plugin-css-modules": "^0.4.0",
+ "@umami/prisma-client": "^0.19.0",
"babel-plugin-react-compiler": "19.1.0-rc.2",
"cross-env": "^10.0.0",
"cypress": "^13.6.6",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a49082bc..c78d6868 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -45,8 +45,8 @@ importers:
specifier: ^5.85.5
version: 5.85.5(react@19.1.1)
'@umami/react-zen':
- specifier: ^0.174.0
- version: 0.174.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))
+ specifier: ^0.175.0
+ version: 0.175.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))
'@umami/redis-client':
specifier: ^0.27.0
version: 0.27.0
@@ -252,6 +252,9 @@ importers:
'@umami/esbuild-plugin-css-modules':
specifier: ^0.4.0
version: 0.4.0
+ '@umami/prisma-client':
+ specifier: ^0.19.0
+ version: 0.19.0(@prisma/adapter-pg@6.15.0)(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2)))
babel-plugin-react-compiler:
specifier: 19.1.0-rc.2
version: 19.1.0-rc.2
@@ -373,6 +376,42 @@ importers:
specifier: ^5.9.2
version: 5.9.2
+ dist:
+ dependencies:
+ '@tanstack/react-query':
+ specifier: ^4.33.0
+ version: 4.40.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames:
+ specifier: ^2.3.1
+ version: 2.5.1
+ colord:
+ specifier: ^2.9.2
+ version: 2.9.3
+ date-fns-tz:
+ specifier: ^1.1.4
+ version: 1.3.8(date-fns@2.30.0)
+ immer:
+ specifier: ^9.0.12
+ version: 9.0.21
+ next:
+ specifier: ^13.4.0
+ version: 13.5.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next-basics:
+ specifier: ^0.36.0
+ version: 0.36.0(next@13.5.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react:
+ specifier: ^18.2.0
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.3.1(react@18.3.1)
+ react-intl:
+ specifier: ^5.24.7
+ version: 5.25.1(react@18.3.1)(typescript@4.9.5)
+ zustand:
+ specifier: ^4.3.8
+ version: 4.5.7(@types/react@18.3.24)(immer@9.0.21)(react@18.3.1)
+
packages:
'@ampproject/remapping@2.3.0':
@@ -1084,6 +1123,9 @@ packages:
'@formatjs/ecma402-abstract@2.3.4':
resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==}
+ '@formatjs/fast-memoize@1.2.1':
+ resolution: {integrity: sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==}
+
'@formatjs/fast-memoize@2.2.7':
resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==}
@@ -1099,6 +1141,12 @@ packages:
'@formatjs/icu-skeleton-parser@1.8.14':
resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==}
+ '@formatjs/intl-displaynames@5.4.3':
+ resolution: {integrity: sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q==}
+
+ '@formatjs/intl-listformat@6.5.3':
+ resolution: {integrity: sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg==}
+
'@formatjs/intl-localematcher@0.2.25':
resolution: {integrity: sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==}
@@ -1108,6 +1156,14 @@ packages:
'@formatjs/intl-numberformat@5.7.6':
resolution: {integrity: sha512-ZlZfYtvbVHYZY5OG3RXizoCwxKxEKOrzEe2YOw9wbzoxF3PmFn0SAgojCFGLyNXkkR6xVxlylhbuOPf1dkIVNg==}
+ '@formatjs/intl@2.2.1':
+ resolution: {integrity: sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==}
+ peerDependencies:
+ typescript: ^4.5
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@formatjs/intl@3.1.6':
resolution: {integrity: sha512-tDkXnA4qpIFcDWac8CyVJq6oW8DR7W44QDUBsfXWIIJD/FYYen0QoH46W7XsVMFfPOVKkvbufjboZrrWbEfmww==}
peerDependencies:
@@ -1434,54 +1490,111 @@ packages:
resolution: {integrity: sha512-b2Ic9NkNnnh0lKC/YWDZ2+HdLd/uYdBzLvLKYOkPyFt8KEszoC+Je3GRcwBeOLxaNtK8lji7YPIjtGz8K2sLVQ==}
engines: {node: '>=18.0.0'}
+ '@next/env@13.5.11':
+ resolution: {integrity: sha512-fbb2C7HChgM7CemdCY+y3N1n8pcTKdqtQLbC7/EQtPdLvlMUT9JX/dBYl8MMZAtYG4uVMyPFHXckb68q/NRwqg==}
+
'@next/env@15.5.2':
resolution: {integrity: sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==}
'@next/eslint-plugin-next@14.2.32':
resolution: {integrity: sha512-tyZMX8g4cWg/uPW4NxiJK13t62Pab47SKGJGVZJa6YtFwtfrXovH4j1n9tdpRdXW03PGQBugYEVGM7OhWfytdA==}
+ '@next/swc-darwin-arm64@13.5.9':
+ resolution: {integrity: sha512-pVyd8/1y1l5atQRvOaLOvfbmRwefxLhqQOzYo/M7FQ5eaRwA1+wuCn7t39VwEgDd7Aw1+AIWwd+MURXUeXhwDw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
'@next/swc-darwin-arm64@15.5.2':
resolution: {integrity: sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
+ '@next/swc-darwin-x64@13.5.9':
+ resolution: {integrity: sha512-DwdeJqP7v8wmoyTWPbPVodTwCybBZa02xjSJ6YQFIFZFZ7dFgrieKW4Eo0GoIcOJq5+JxkQyejmI+8zwDp3pwA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
'@next/swc-darwin-x64@15.5.2':
resolution: {integrity: sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
+ '@next/swc-linux-arm64-gnu@13.5.9':
+ resolution: {integrity: sha512-wdQsKsIsGSNdFojvjW3Ozrh8Q00+GqL3wTaMjDkQxVtRbAqfFBtrLPO0IuWChVUP2UeuQcHpVeUvu0YgOP00+g==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
'@next/swc-linux-arm64-gnu@15.5.2':
resolution: {integrity: sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ '@next/swc-linux-arm64-musl@13.5.9':
+ resolution: {integrity: sha512-6VpS+bodQqzOeCwGxoimlRoosiWlSc0C224I7SQWJZoyJuT1ChNCo+45QQH+/GtbR/s7nhaUqmiHdzZC9TXnXA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
'@next/swc-linux-arm64-musl@15.5.2':
resolution: {integrity: sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ '@next/swc-linux-x64-gnu@13.5.9':
+ resolution: {integrity: sha512-XxG3yj61WDd28NA8gFASIR+2viQaYZEFQagEodhI/R49gXWnYhiflTeeEmCn7Vgnxa/OfK81h1gvhUZ66lozpw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
'@next/swc-linux-x64-gnu@15.5.2':
resolution: {integrity: sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ '@next/swc-linux-x64-musl@13.5.9':
+ resolution: {integrity: sha512-/dnscWqfO3+U8asd+Fc6dwL2l9AZDl7eKtPNKW8mKLh4Y4wOpjJiamhe8Dx+D+Oq0GYVjuW0WwjIxYWVozt2bA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
'@next/swc-linux-x64-musl@15.5.2':
resolution: {integrity: sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ '@next/swc-win32-arm64-msvc@13.5.9':
+ resolution: {integrity: sha512-T/iPnyurOK5a4HRUcxAlss8uzoEf5h9tkd+W2dSWAfzxv8WLKlUgbfk+DH43JY3Gc2xK5URLuXrxDZ2mGfk/jw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
'@next/swc-win32-arm64-msvc@15.5.2':
resolution: {integrity: sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
+ '@next/swc-win32-ia32-msvc@13.5.9':
+ resolution: {integrity: sha512-BLiPKJomaPrTAb7ykjA0LPcuuNMLDVK177Z1xe0nAem33+9FIayU4k/OWrtSn9SAJW/U60+1hoey5z+KCHdRLQ==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@next/swc-win32-x64-msvc@13.5.9':
+ resolution: {integrity: sha512-/72/dZfjXXNY/u+n8gqZDjI6rxKMpYsgBBYNZKWOQw0BpBF7WCnPflRy3ZtvQ2+IYI3ZH2bPyj7K+6a6wNk90Q==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
'@next/swc-win32-x64-msvc@15.5.2':
resolution: {integrity: sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==}
engines: {node: '>= 10'}
@@ -2514,9 +2627,27 @@ packages:
'@swc/helpers@0.5.17':
resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+ '@swc/helpers@0.5.2':
+ resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
+
+ '@tanstack/query-core@4.40.0':
+ resolution: {integrity: sha512-7MJTtZkCSuehMC7IxMOCGsLvHS3jHx4WjveSrGsG1Nc1UQLjaFwwkpLA2LmPfvOAxnH4mszMOBFD6LlZE+aB+Q==}
+
'@tanstack/query-core@5.85.5':
resolution: {integrity: sha512-KO0WTob4JEApv69iYp1eGvfMSUkgw//IpMnq+//cORBzXf0smyRwPLrUvEe5qtAEGjwZTXrjxg+oJNP/C00t6w==}
+ '@tanstack/react-query@4.40.1':
+ resolution: {integrity: sha512-mgD07S5N8e5v81CArKDWrHE4LM7HxZ9k/KLeD3+NUD9WimGZgKIqojUZf/rXkfAMYZU9p0Chzj2jOXm7xpgHHQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-native: '*'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+
'@tanstack/react-query@5.85.5':
resolution: {integrity: sha512-/X4EFNcnPiSs8wM2v+b6DqS5mmGeuJQvxBglmDxl6ZQb5V26ouD2SJYAcC3VjbNwqhY2zjxVD15rDA5nGbMn3A==}
peerDependencies:
@@ -2614,6 +2745,9 @@ packages:
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+ '@types/prop-types@15.7.15':
+ resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
+
'@types/react-dom@19.1.8':
resolution: {integrity: sha512-xG7xaBMJCpcK0RpN8jDbAACQo54ycO6h4dSSmgv8+fu6ZIAdANkx/WsawASUjVXYfy+J9AbUpRMNNEsXCDfDBQ==}
peerDependencies:
@@ -2622,6 +2756,9 @@ packages:
'@types/react-window@1.8.8':
resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==}
+ '@types/react@18.3.24':
+ resolution: {integrity: sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==}
+
'@types/react@19.1.12':
resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==}
@@ -2745,8 +2882,15 @@ packages:
'@umami/esbuild-plugin-css-modules@0.4.0':
resolution: {integrity: sha512-OcFbipBJZCmMnJ52/eHkZxpXGQT8Q5bAePgkhpxlreT4zP98grZ6iLzaIkDPFqURQwM/llDhPyNEFRzkSfVYFw==}
- '@umami/react-zen@0.174.0':
- resolution: {integrity: sha512-16+ePYWJsnu67kZupCsb2ZhSeKlYKSC+xARdVFWxUY1BOxi5My+z7BfT+JFEStZ5d8yDZEQLoeoeNYr2OWcqHw==}
+ '@umami/prisma-client@0.19.0':
+ resolution: {integrity: sha512-Vnys7MMAPexxmxrC+0q68B/iYmM1LFaP9RjKjffHbLfgZJ3moklJ2ea91cr8+m0CA3+3mqN38WEJI/o/ohOxYQ==}
+ peerDependencies:
+ '@prisma/adapter-pg': ^6.1.0
+ '@prisma/client': ^6.1.0
+ '@prisma/extension-read-replicas': ^0.4.1
+
+ '@umami/react-zen@0.175.0':
+ resolution: {integrity: sha512-iOUCZwmr09RnqIm01wnjcSTTJ5iJdXRmFlmja2Qf42di/SOOTSBJmu1fKiYESp4dLrXXcmMeDfDqtJli0PPSRw==}
'@umami/redis-client@0.27.0':
resolution: {integrity: sha512-SbHTpxhgeZyTBUSp2zdZM+XUtpsaSL4Tad8QXIEhEtjWhvvfoornyT5kLuyYCVtzSAT4daALeGmOO1z6EE1KcA==}
@@ -3107,6 +3251,9 @@ packages:
bcrypt-pbkdf@1.0.2:
resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
+ bcryptjs@2.4.3:
+ resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==}
+
bcryptjs@3.0.2:
resolution: {integrity: sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==}
hasBin: true
@@ -3160,6 +3307,10 @@ packages:
peerDependencies:
esbuild: '>=0.18'
+ busboy@1.6.0:
+ resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+ engines: {node: '>=10.16.0'}
+
c12@3.1.0:
resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==}
peerDependencies:
@@ -3217,6 +3368,9 @@ packages:
caniuse-lite@1.0.30001737:
resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==}
+ caniuse-lite@1.0.30001739:
+ resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==}
+
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
@@ -4343,6 +4497,9 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
glob@10.3.10:
resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -4515,6 +4672,9 @@ packages:
immer@10.1.1:
resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==}
+ immer@9.0.21:
+ resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
+
import-cwd@3.0.0:
resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==}
engines: {node: '>=8'}
@@ -4580,6 +4740,9 @@ packages:
intl-messageformat@10.7.16:
resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==}
+ intl-messageformat@9.13.0:
+ resolution: {integrity: sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==}
+
ipaddr.js@2.2.0:
resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
engines: {node: '>= 10'}
@@ -5446,6 +5609,28 @@ packages:
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ next-basics@0.36.0:
+ resolution: {integrity: sha512-Nwou8pCjFuoD/ZxUw9iKC7hhZeWbo/ng0ze74yck3W89MNc/CepwCDziflAHY5XcmIVNmpXOCu9OfmzTdVRPWQ==}
+ peerDependencies:
+ next: ^13.4.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+
+ next@13.5.11:
+ resolution: {integrity: sha512-WUPJ6WbAX9tdC86kGTu92qkrRdgRqVrY++nwM+shmWQwmyxt4zhZfR59moXSI4N8GDYCBY3lIAqhzjDd4rTC8Q==}
+ engines: {node: '>=16.14.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ sass:
+ optional: true
+
next@15.5.2:
resolution: {integrity: sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
@@ -6344,6 +6529,11 @@ 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==}
+ peerDependencies:
+ react: ^18.3.1
+
react-dom@19.1.1:
resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==}
peerDependencies:
@@ -6365,6 +6555,15 @@ packages:
peerDependencies:
react: '*'
+ react-intl@5.25.1:
+ resolution: {integrity: sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==}
+ peerDependencies:
+ react: ^16.3.0 || 17 || 18
+ typescript: ^4.5
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
react-intl@7.1.11:
resolution: {integrity: sha512-tnVoRCWvW5Ie2ikYSdPF7z3+880yCe/9xPmitFeRPw3RYDcCfR4m8ZYa4MBq19W4adt9Z+PQA4FaMBCJ7E+HCQ==}
peerDependencies:
@@ -6420,6 +6619,10 @@ packages:
react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
react@19.1.1:
resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==}
engines: {node: '>=0.10.0'}
@@ -6621,6 +6824,9 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
scheduler@0.26.0:
resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
@@ -6808,6 +7014,10 @@ packages:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
+ streamsearch@1.1.0:
+ resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+ engines: {node: '>=10.0.0'}
+
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
@@ -6899,6 +7109,19 @@ packages:
style-search@0.1.0:
resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
+ 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'}
@@ -7338,6 +7561,10 @@ packages:
walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+ watchpack@2.4.0:
+ resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+ engines: {node: '>=10.13.0'}
+
web-streams-polyfill@3.3.3:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
@@ -7467,6 +7694,21 @@ packages:
zod@4.1.5:
resolution: {integrity: sha512-rcUUZqlLJgBC33IT3PNMgsCq6TzLQEG/Ei/KTCU0PedSWRMAXoOUN+4t/0H+Q8bdnLPdqUYnvboJT0bn/229qg==}
+ zustand@4.5.7:
+ resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ immer: '>=9.0.6'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+
zustand@5.0.8:
resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==}
engines: {node: '>=12.20.0'}
@@ -8141,6 +8383,10 @@ snapshots:
decimal.js: 10.6.0
tslib: 2.8.1
+ '@formatjs/fast-memoize@1.2.1':
+ dependencies:
+ tslib: 2.8.1
+
'@formatjs/fast-memoize@2.2.7':
dependencies:
tslib: 2.8.1
@@ -8167,6 +8413,18 @@ snapshots:
'@formatjs/ecma402-abstract': 2.3.4
tslib: 2.8.1
+ '@formatjs/intl-displaynames@5.4.3':
+ dependencies:
+ '@formatjs/ecma402-abstract': 1.11.4
+ '@formatjs/intl-localematcher': 0.2.25
+ tslib: 2.8.1
+
+ '@formatjs/intl-listformat@6.5.3':
+ dependencies:
+ '@formatjs/ecma402-abstract': 1.11.4
+ '@formatjs/intl-localematcher': 0.2.25
+ tslib: 2.8.1
+
'@formatjs/intl-localematcher@0.2.25':
dependencies:
tslib: 2.8.1
@@ -8180,6 +8438,18 @@ snapshots:
'@formatjs/ecma402-abstract': 1.4.0
tslib: 2.8.1
+ '@formatjs/intl@2.2.1(typescript@4.9.5)':
+ dependencies:
+ '@formatjs/ecma402-abstract': 1.11.4
+ '@formatjs/fast-memoize': 1.2.1
+ '@formatjs/icu-messageformat-parser': 2.1.0
+ '@formatjs/intl-displaynames': 5.4.3
+ '@formatjs/intl-listformat': 6.5.3
+ intl-messageformat: 9.13.0
+ tslib: 2.8.1
+ optionalDependencies:
+ typescript: 4.9.5
+
'@formatjs/intl@3.1.6(typescript@5.9.2)':
dependencies:
'@formatjs/ecma402-abstract': 2.3.4
@@ -8592,33 +8862,62 @@ snapshots:
'@netlify/plugin-nextjs@5.12.1': {}
+ '@next/env@13.5.11': {}
+
'@next/env@15.5.2': {}
'@next/eslint-plugin-next@14.2.32':
dependencies:
glob: 10.3.10
+ '@next/swc-darwin-arm64@13.5.9':
+ optional: true
+
'@next/swc-darwin-arm64@15.5.2':
optional: true
+ '@next/swc-darwin-x64@13.5.9':
+ optional: true
+
'@next/swc-darwin-x64@15.5.2':
optional: true
+ '@next/swc-linux-arm64-gnu@13.5.9':
+ optional: true
+
'@next/swc-linux-arm64-gnu@15.5.2':
optional: true
+ '@next/swc-linux-arm64-musl@13.5.9':
+ optional: true
+
'@next/swc-linux-arm64-musl@15.5.2':
optional: true
+ '@next/swc-linux-x64-gnu@13.5.9':
+ optional: true
+
'@next/swc-linux-x64-gnu@15.5.2':
optional: true
+ '@next/swc-linux-x64-musl@13.5.9':
+ optional: true
+
'@next/swc-linux-x64-musl@15.5.2':
optional: true
+ '@next/swc-win32-arm64-msvc@13.5.9':
+ optional: true
+
'@next/swc-win32-arm64-msvc@15.5.2':
optional: true
+ '@next/swc-win32-ia32-msvc@13.5.9':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@13.5.9':
+ optional: true
+
'@next/swc-win32-x64-msvc@15.5.2':
optional: true
@@ -10076,8 +10375,22 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@swc/helpers@0.5.2':
+ dependencies:
+ tslib: 2.8.1
+
+ '@tanstack/query-core@4.40.0': {}
+
'@tanstack/query-core@5.85.5': {}
+ '@tanstack/react-query@4.40.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tanstack/query-core': 4.40.0
+ react: 18.3.1
+ use-sync-external-store: 1.5.0(react@18.3.1)
+ optionalDependencies:
+ react-dom: 18.3.1(react@18.3.1)
+
'@tanstack/react-query@5.85.5(react@19.1.1)':
dependencies:
'@tanstack/query-core': 5.85.5
@@ -10140,6 +10453,11 @@ snapshots:
dependencies:
'@types/node': 24.3.0
+ '@types/hoist-non-react-statics@3.3.7(@types/react@18.3.24)':
+ dependencies:
+ '@types/react': 18.3.24
+ hoist-non-react-statics: 3.3.2
+
'@types/hoist-non-react-statics@3.3.7(@types/react@19.1.12)':
dependencies:
'@types/react': 19.1.12
@@ -10182,6 +10500,8 @@ snapshots:
'@types/normalize-package-data@2.4.4': {}
+ '@types/prop-types@15.7.15': {}
+
'@types/react-dom@19.1.8(@types/react@19.1.12)':
dependencies:
'@types/react': 19.1.12
@@ -10190,6 +10510,11 @@ snapshots:
dependencies:
'@types/react': 19.1.12
+ '@types/react@18.3.24':
+ dependencies:
+ '@types/prop-types': 15.7.15
+ csstype: 3.1.3
+
'@types/react@19.1.12':
dependencies:
csstype: 3.1.3
@@ -10360,7 +10685,17 @@ snapshots:
postcss: 8.5.6
postcss-modules: 6.0.1(postcss@8.5.6)
- '@umami/react-zen@0.174.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))':
+ '@umami/prisma-client@0.19.0(@prisma/adapter-pg@6.15.0)(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2)))':
+ dependencies:
+ '@prisma/adapter-pg': 6.15.0
+ '@prisma/client': 6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2)
+ '@prisma/extension-read-replicas': 0.4.1(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2))
+ chalk: 4.1.2
+ debug: 4.4.1(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umami/react-zen@0.175.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))':
dependencies:
'@fontsource/jetbrains-mono': 5.2.6
'@internationalized/date': 3.9.0
@@ -10787,6 +11122,8 @@ snapshots:
dependencies:
tweetnacl: 0.14.5
+ bcryptjs@2.4.3: {}
+
bcryptjs@3.0.2: {}
blob-util@2.0.2: {}
@@ -10839,6 +11176,10 @@ snapshots:
esbuild: 0.25.9
load-tsconfig: 0.2.5
+ busboy@1.6.0:
+ dependencies:
+ streamsearch: 1.1.0
+
c12@3.1.0:
dependencies:
chokidar: 4.0.3
@@ -10897,7 +11238,7 @@ snapshots:
caniuse-api@3.0.0:
dependencies:
browserslist: 4.25.2
- caniuse-lite: 1.0.30001737
+ caniuse-lite: 1.0.30001739
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
@@ -10905,6 +11246,8 @@ snapshots:
caniuse-lite@1.0.30001737: {}
+ caniuse-lite@1.0.30001739: {}
+
caseless@0.12.0: {}
chalk@2.4.2:
@@ -12276,6 +12619,8 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob-to-regexp@0.4.1: {}
+
glob@10.3.10:
dependencies:
foreground-child: 3.3.1
@@ -12453,6 +12798,8 @@ snapshots:
immer@10.1.1: {}
+ immer@9.0.21: {}
+
import-cwd@3.0.0:
dependencies:
import-from: 3.0.0
@@ -12514,6 +12861,13 @@ snapshots:
'@formatjs/icu-messageformat-parser': 2.11.2
tslib: 2.8.1
+ intl-messageformat@9.13.0:
+ dependencies:
+ '@formatjs/ecma402-abstract': 1.11.4
+ '@formatjs/fast-memoize': 1.2.1
+ '@formatjs/icu-messageformat-parser': 2.1.0
+ tslib: 2.8.1
+
ipaddr.js@2.2.0: {}
is-array-buffer@3.0.5:
@@ -13576,6 +13930,40 @@ snapshots:
neo-async@2.6.2: {}
+ next-basics@0.36.0(next@13.5.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ bcryptjs: 2.4.3
+ jsonwebtoken: 9.0.2
+ next: 13.5.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ pure-rand: 6.1.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ next@13.5.11(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@next/env': 13.5.11
+ '@swc/helpers': 0.5.2
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001739
+ 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.28.3)(react@18.3.1)
+ watchpack: 2.4.0
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 13.5.9
+ '@next/swc-darwin-x64': 13.5.9
+ '@next/swc-linux-arm64-gnu': 13.5.9
+ '@next/swc-linux-arm64-musl': 13.5.9
+ '@next/swc-linux-x64-gnu': 13.5.9
+ '@next/swc-linux-x64-musl': 13.5.9
+ '@next/swc-win32-arm64-msvc': 13.5.9
+ '@next/swc-win32-ia32-msvc': 13.5.9
+ '@next/swc-win32-x64-msvc': 13.5.9
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
next@15.5.2(@babel/core@7.28.3)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
'@next/env': 15.5.2
@@ -14519,6 +14907,12 @@ snapshots:
react: 19.1.1
react-dom: 19.1.1(react@19.1.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-dom@19.1.1(react@19.1.1):
dependencies:
react: 19.1.1
@@ -14537,6 +14931,22 @@ snapshots:
dependencies:
react: 19.1.1
+ react-intl@5.25.1(react@18.3.1)(typescript@4.9.5):
+ dependencies:
+ '@formatjs/ecma402-abstract': 1.11.4
+ '@formatjs/icu-messageformat-parser': 2.1.0
+ '@formatjs/intl': 2.2.1(typescript@4.9.5)
+ '@formatjs/intl-displaynames': 5.4.3
+ '@formatjs/intl-listformat': 6.5.3
+ '@types/hoist-non-react-statics': 3.3.7(@types/react@18.3.24)
+ '@types/react': 18.3.24
+ hoist-non-react-statics: 3.3.2
+ intl-messageformat: 9.13.0
+ react: 18.3.1
+ tslib: 2.8.1
+ optionalDependencies:
+ typescript: 4.9.5
+
react-intl@7.1.11(react@19.1.1)(typescript@5.9.2):
dependencies:
'@formatjs/ecma402-abstract': 2.3.4
@@ -14617,6 +15027,10 @@ snapshots:
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
react@19.1.1: {}
read-babelrc-up@1.1.0:
@@ -14889,6 +15303,10 @@ snapshots:
safer-buffer@2.1.2: {}
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
scheduler@0.26.0: {}
schema-utils@2.7.1:
@@ -15116,6 +15534,8 @@ snapshots:
es-errors: 1.3.0
internal-slot: 1.1.0
+ streamsearch@1.1.0: {}
+
string-argv@0.3.2: {}
string-hash@1.1.3: {}
@@ -15232,6 +15652,13 @@ snapshots:
style-search@0.1.0: {}
+ styled-jsx@5.1.1(@babel/core@7.28.3)(react@18.3.1):
+ dependencies:
+ client-only: 0.0.1
+ react: 18.3.1
+ optionalDependencies:
+ '@babel/core': 7.28.3
+
styled-jsx@5.1.6(@babel/core@7.28.3)(react@19.1.1):
dependencies:
client-only: 0.0.1
@@ -15687,6 +16114,10 @@ snapshots:
dependencies:
react: 19.1.1
+ use-sync-external-store@1.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
use-sync-external-store@1.5.0(react@19.1.1):
dependencies:
react: 19.1.1
@@ -15732,6 +16163,11 @@ snapshots:
dependencies:
makeerror: 1.0.12
+ watchpack@2.4.0:
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
web-streams-polyfill@3.3.3: {}
webidl-conversions@4.0.2: {}
@@ -15889,6 +16325,14 @@ snapshots:
zod@4.1.5: {}
+ zustand@4.5.7(@types/react@18.3.24)(immer@9.0.21)(react@18.3.1):
+ dependencies:
+ use-sync-external-store: 1.5.0(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.24
+ immer: 9.0.21
+ react: 18.3.1
+
zustand@5.0.8(@types/react@19.1.12)(immer@10.1.1)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)):
optionalDependencies:
'@types/react': 19.1.12
diff --git a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx
index 7d563b55..1cf2bca2 100644
--- a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx
+++ b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx
@@ -4,19 +4,19 @@ import {
FormFieldArray,
TextField,
Grid,
- FormController,
FormButtons,
FormSubmitButton,
Button,
- RadioGroup,
- Radio,
Text,
Icon,
Row,
Loading,
+ Column,
} from '@umami/react-zen';
import { useMessages, useReportQuery, useUpdateQuery } from '@/components/hooks';
-import { File, Lightning, Close, Plus } from '@/components/icons';
+import { Close, Plus } from '@/components/icons';
+import { ActionSelect } from '@/components/input/ActionSelect';
+import { LookupField } from '@/components/input/LookupField';
const FUNNEL_STEPS_MAX = 8;
@@ -41,6 +41,7 @@ export function FunnelEditForm({
{
onSuccess: async () => {
touch('reports:funnel');
+ touch(`report:${id}`);
onSave?.();
onClose?.();
},
@@ -75,57 +76,38 @@ export function FunnelEditForm({
- {({ fields, append, remove, control }) => {
+ {({ fields, append, remove, getValues }) => {
return (
- {fields.map((field: { id: string; type: string; value: string }, index: number) => {
+ {fields.map(({ id }: { id: string }, index: number) => {
+ const type = getValues(`steps.${index}.type`);
+
return (
-
-
- {({ field }) => {
- return (
-
-
-
-
-
-
- {formatMessage(labels.page)}
-
-
-
-
-
- {formatMessage(labels.event)}
-
-
-
- );
- }}
-
-
- {({ field }) => {
- return (
-
- );
- }}
-
-
+
);
})}
diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts
index 4ab4225e..fdba769c 100644
--- a/src/lib/prisma.ts
+++ b/src/lib/prisma.ts
@@ -1,7 +1,6 @@
import debug from 'debug';
import { PrismaClient } from '@/generated/prisma/client';
-import { PrismaPg } from '@prisma/adapter-pg';
-import { readReplicas } from '@prisma/extension-read-replicas';
+import { UmamiPrismaClient } from '@umami/prisma-client';
import { SESSION_COLUMNS, OPERATORS, DEFAULT_PAGE_SIZE, FILTER_COLUMNS } from './constants';
import { QueryOptions, QueryFilters, Operator } from './types';
import { filtersObjectToArray } from './params';
@@ -9,14 +8,6 @@ import { filtersObjectToArray } from './params';
const log = debug('umami:prisma');
const PRISMA = 'prisma';
-const PRISMA_LOG_OPTIONS = {
- log: [
- {
- emit: 'event',
- level: 'query',
- },
- ],
-};
const DATE_FORMATS = {
minute: 'YYYY-MM-DD HH24:MI:00',
@@ -218,7 +209,7 @@ async function pagedQuery(model: string, criteria: T, filters?: QueryFilters)
return { data, count, page: +page, pageSize: size, orderBy, search };
}
-async function rawPagedQuery(
+async function pagedRawQuery(
query: string,
filters: QueryFilters,
queryParams: Record,
@@ -274,52 +265,18 @@ function transaction(input: any, options?: any) {
return client.$transaction(input, options);
}
-function getClient(params?: {
- logQuery?: boolean;
- queryLogger?: () => void;
- replicaUrl?: string;
- options?: any;
-}): PrismaClient {
- const {
- logQuery = !!process.env.LOG_QUERY,
- queryLogger,
- replicaUrl = process.env.DATABASE_REPLICA_URL,
- options,
- } = params || {};
-
- const url = new URL(process.env.DATABASE_URL);
-
- const adapter = new PrismaPg(
- { connectionString: url.toString() },
- { schema: url.searchParams.get('schema') },
- );
-
- const prisma = new PrismaClient({
- adapter,
- errorFormat: 'pretty',
- ...(logQuery && PRISMA_LOG_OPTIONS),
- ...options,
+function getClient() {
+ const prisma = new UmamiPrismaClient({
+ url: process.env.DATABASE_URL,
+ prismaClient: PrismaClient,
+ logQuery: !!process.env.LOG_QUERY,
});
- if (replicaUrl) {
- prisma.$extends(
- readReplicas({
- url: replicaUrl,
- }),
- );
- }
-
- if (logQuery) {
- prisma.$on('query' as never, queryLogger || log);
- }
-
if (process.env.NODE_ENV !== 'production') {
- globalThis[PRISMA] = prisma;
+ globalThis[PRISMA] = prisma.client;
}
- log('Prisma initialized');
-
- return prisma;
+ return prisma.client;
}
const client = globalThis[PRISMA] || getClient();
@@ -337,7 +294,7 @@ export default {
getTimestampDiffSQL,
getSearchSQL,
pagedQuery,
- pagedRawQuery: rawPagedQuery,
+ pagedRawQuery,
parseFilters,
rawQuery,
};