From e3cc19638c7752d4db1a319f7e21dcccdca2585d Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Tue, 10 Jun 2025 20:59:27 -0700 Subject: [PATCH] Breakdown report. --- db/postgresql/schema.prisma | 2 +- package.json | 2 +- pnpm-lock.yaml | 490 +++++++++--------- src/app/(main)/SideNav.tsx | 6 + .../[websiteId]/reports/ReportsLayout.tsx | 2 +- .../[websiteId]/reports/ReportsNav.tsx | 14 +- .../reports/attribution/Attribution.tsx | 29 +- .../reports/attribution/AttributionPage.tsx | 3 +- .../reports/breakdown/Breakdown.tsx | 73 +++ .../reports/breakdown/BreakdownPage.tsx | 97 ++++ .../reports/{insights => breakdown}/page.tsx | 4 +- .../[websiteId]/reports/goals/GoalsPage.tsx | 2 +- .../[websiteId]/reports/insights/Insights.tsx | 126 ----- .../reports/insights/InsightsPage.tsx | 18 - .../reports/{insights => breakdown}/route.ts | 16 +- src/components/common/Panel.tsx | 5 +- src/components/icons.ts | 6 +- src/components/messages.ts | 3 +- src/lib/schema.ts | 33 +- src/queries/index.ts | 2 +- .../{getInsights.ts => getBreakdown.ts} | 18 +- 21 files changed, 495 insertions(+), 456 deletions(-) create mode 100644 src/app/(main)/websites/[websiteId]/reports/breakdown/Breakdown.tsx create mode 100644 src/app/(main)/websites/[websiteId]/reports/breakdown/BreakdownPage.tsx rename src/app/(main)/websites/[websiteId]/reports/{insights => breakdown}/page.tsx (69%) delete mode 100644 src/app/(main)/websites/[websiteId]/reports/insights/Insights.tsx delete mode 100644 src/app/(main)/websites/[websiteId]/reports/insights/InsightsPage.tsx rename src/app/api/reports/{insights => breakdown}/route.ts (67%) rename src/queries/sql/reports/{getInsights.ts => getBreakdown.ts} (84%) diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index d39620ca..6733bca6 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -1,6 +1,6 @@ generator client { provider = "prisma-client" - previewFeatures = ["queryCompiler", "driverAdapters"] + previewFeatures = ["driverAdapters"] output = "../src/generated/prisma" moduleFormat = "esm" } diff --git a/package.json b/package.json index df26f460..6ef6f988 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "@react-spring/web": "^9.7.3", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.28.6", - "@umami/react-zen": "^0.136.0", + "@umami/react-zen": "^0.137.0", "@umami/redis-client": "^0.27.0", "bcryptjs": "^2.4.3", "chalk": "^4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 571361ea..8cf8f50a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,8 +45,8 @@ importers: specifier: ^5.28.6 version: 5.77.2(react@19.1.0) '@umami/react-zen': - specifier: ^0.136.0 - version: 0.136.0(@babel/core@7.27.1)(@types/react@19.1.5)(immer@9.0.21)(use-sync-external-store@1.5.0(react@19.1.0)) + specifier: ^0.137.0 + version: 0.137.0(@babel/core@7.27.1)(@types/react@19.1.5)(immer@9.0.21)(use-sync-external-store@1.5.0(react@19.1.0)) '@umami/redis-client': specifier: ^0.27.0 version: 0.27.0 @@ -1031,8 +1031,8 @@ packages: '@fontsource/inter@4.5.15': resolution: {integrity: sha512-FzleM9AxZQK2nqsTDtBiY0PMEVWvnKnuu2i09+p6DHvrHsuucoV2j0tmw+kAT3L4hvsLdAIDv6MdGehsPIdT+Q==} - '@fontsource/jetbrains-mono@5.2.5': - resolution: {integrity: sha512-TPZ9b/uq38RMdrlZZkl0RwN8Ju9JxuqMETrw76pUQFbGtE1QbwQaNsLlnUrACNNBNbd0NZRXiJJSkC8ajPgbew==} + '@fontsource/jetbrains-mono@5.2.6': + resolution: {integrity: sha512-nz//dBr99hXZmHp10wgNI00qThWImkzRR5PQjvRM+rpmuHO5rYBJCqPPWufidCvmkkryXx/GOP/lgqsM3R3Org==} '@formatjs/cli@4.8.4': resolution: {integrity: sha512-zZI8QYVl5CHaT6j9OHjS+0mMnWzopBVH0un4n5b4IhIJRzIKnxwFTkxBp5Ifqj6FntrwzIGqP+D6v8u7MPYsmw==} @@ -1555,26 +1555,26 @@ 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-aria/breadcrumbs@3.5.25': - resolution: {integrity: sha512-c8Ipp7EoFXlPKpOUJne6JlG823KwtqMyFsTpU0LS0DE9IEfnAIKanc5X+kChNmooKHq4V8QNyUxTf8WyBKU9+Q==} + '@react-aria/breadcrumbs@3.5.26': + resolution: {integrity: sha512-jybk2jy3m9KNmTpzJu87C0nkcMcGbZIyotgK1s8st8aUE2aJlxPZrvGuJTO8GUFZn9TKnCg3JjBC8qS9sizKQg==} peerDependencies: 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-aria/button@3.13.2': - resolution: {integrity: sha512-iPlSR225CSOit+57SrDfEF3lDuQvjRBYj1HFyGsLk91HfV3vDRgkKiou8uhOHk+B3afGJRwot8/Sr9MvNOfeQg==} + '@react-aria/button@3.13.3': + resolution: {integrity: sha512-Xn7eTssaefNPUydogI1qDf7qQWPmb+hGoS1QiCNBodPlRpVDXxlZSIhOqQFnLWHv5+z5UL+vu+joqlSPYHqOFw==} peerDependencies: 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-aria/calendar@3.8.2': - resolution: {integrity: sha512-RXVECPB3gP5SZvfKwlqLKCWEFzJh6AcDQQSRkArlyLyHRAHHcniKO3hW90pRWKmEUSVUAZdoCA6XkRL3dXGYXw==} + '@react-aria/calendar@3.8.3': + resolution: {integrity: sha512-1TAZADcWbfznXzo4oJEqFgX4IE1chZjWsTSJDWr03UEx3XqIJI8GXm+ylOQUiN4j8xqZ7tl4yNuuslKkzoSjMQ==} peerDependencies: 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-aria/checkbox@3.15.6': - resolution: {integrity: sha512-5OHrrihjCNBRB93KysXfHZBLUSGh43fC3DTfH9LWDxfpo38//VkaDXZezA0zg+a43D3kTq6tOSNgHq3sUk/Q5Q==} + '@react-aria/checkbox@3.15.7': + resolution: {integrity: sha512-L64van+K2ZEmCpx/KeZGHoxdxQvVHgfusFRFYZbh3e7YEtDcShvUrTDVKmZkINqnmuhGTDolFDQq+E8fWEpcRg==} peerDependencies: 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 @@ -1585,26 +1585,26 @@ 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-aria/color@3.0.8': - resolution: {integrity: sha512-zGEptdwSCcLS/Z+LARmCyv4ptLIYtLIXHtgFSDAaF5ssY0whMOT0yAmOJz4T4ldnaWbBsLIz9O3PbUzNy83L2A==} + '@react-aria/color@3.0.9': + resolution: {integrity: sha512-dWyK8a3kNii8Yuj1/CQivnVVxsgkV8em+sb0oA29w04t+CFRQywpE2OVV3wZTDzOIVaz3pXx7/X012WoF6d/eQ==} peerDependencies: 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-aria/combobox@3.12.4': - resolution: {integrity: sha512-RvIEz2JK6Ndi0VhhNPYzfHbvq6rj7o2SwhhrcN5cKPC0lGgTXgHJheTq2kMu7ctO/C+Yx/3d0LQC/fOnbKH8zA==} + '@react-aria/combobox@3.12.5': + resolution: {integrity: sha512-mg9RrOTjxQFPy0BQrlqdp5uUC2pLevIqhZit6OfndmOr7khQ32qepDjXoSwYeeSag/jrokc2cGfXfzOwrgAFaQ==} peerDependencies: 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-aria/datepicker@3.14.4': - resolution: {integrity: sha512-VoVLqTSttvHE1h8nrF2L7r1SDN0VCv5UtIlYqUxK4Gk/5Z7Pboo7aY2OAhgpycm9ZUfWio/VVAtj6oMoWHjxQw==} + '@react-aria/datepicker@3.14.5': + resolution: {integrity: sha512-TeV/yXEOQ2QOYMxvetWcWUcZN83evmnmG/uSruTdk93e2nZzs227Gg/M95tzgCYRRACCzSzrGujJhNs12Nh7mg==} peerDependencies: 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-aria/dialog@3.5.26': - resolution: {integrity: sha512-X4KKf0OPHIje+68I0GRDkIcg+qsrBEQskl72aX7GQy6oNBta3ZTxQJrK2HTYdBDJnr1ADQdxYi+pZ5zPYDjODA==} + '@react-aria/dialog@3.5.27': + resolution: {integrity: sha512-Sp8LWQQYNxkLk2+L0bdWmAd9fz1YIrzvxbHXmAn9Tn6+/4SPnQhkOo+qQwtHFbjqe9fyS7cJZxegXd1RegIFew==} peerDependencies: 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 @@ -1615,32 +1615,32 @@ 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-aria/dnd@3.10.0': - resolution: {integrity: sha512-kW8TE4MLiTZJWnXSH+/6HeEtCOP20S+3m0BpToOzZhlpETSWJj6WcTRrM9ygt86v+lD4Vb92aQPdB75NVCbSAg==} + '@react-aria/dnd@3.10.1': + resolution: {integrity: sha512-EWiFbRoWs0zBlBbdPvd7gPyA3B8TPUtMfSUnLBCjwc+N0YaUoizZxW2VYgpAkZYAlVrPYV6n2Gs+98PHKZ8rsg==} peerDependencies: 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-aria/focus@3.20.4': - resolution: {integrity: sha512-E9M/kPYvF1fBZpkRXsKqMhvBVEyTY7vmkHeXLJo6tInKQOjYyYs0VeWlnGnxBjQIAH7J7ZKAORfTFQQHyhoueQ==} + '@react-aria/focus@3.20.5': + resolution: {integrity: sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==} peerDependencies: 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-aria/form@3.0.17': - resolution: {integrity: sha512-d7Cic5OGBqI/OMUuHlPrPn6udSvjdpurrrwbnSYzrGlVhDmKLUdrLTtBL8O1MPzluAyW52azqJXSpsjwh288KA==} + '@react-aria/form@3.0.18': + resolution: {integrity: sha512-e4Ktc3NiNwV5dz82zVE7lspYmKwAnGoJfOHgc9MApS7Fy/BEAuVUuLgTjMo1x5me7dY+ADxqrIhbOpifscGGoQ==} peerDependencies: 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-aria/grid@3.14.1': - resolution: {integrity: sha512-znYb6S97yS36nw0liNFYFPmMyhhiUGvhtSXvkPEEU+bxw94O6jbLNwyJKrlUUSNDW3XINasIIY7EhC66QMbSFw==} + '@react-aria/grid@3.14.2': + resolution: {integrity: sha512-5oS6sLq0DishBvPVsWnxGcUdBRXyFXCj8/n02yJvjbID5Mpjn9JIHUSL4ZCZAO7QGCXpvO3PI40vB2F6QUs2VA==} peerDependencies: 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-aria/gridlist@3.13.1': - resolution: {integrity: sha512-tdcKDtzQcvT5U7mBbasiV/uHfwQmkYszyjKUZWigO54YNoz5Zp3RFfS14Mv6NAft2cse8Bj9oEyf8HMUT8KEZA==} + '@react-aria/gridlist@3.13.2': + resolution: {integrity: sha512-mPGhW2+Jke66LJIPrYoAdL5BBiC8iZ9orjoan7TBTCX9Xk87EK1XLm1cTxAylRqGNjnLzy+vp05Zt2fHY4QduA==} peerDependencies: 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 @@ -1651,8 +1651,8 @@ 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-aria/interactions@3.25.2': - resolution: {integrity: sha512-BWyZXBT4P17b9C9HfOIT2glDFMH9nUCfQF7vZ5FEeXNBudH/8OcSbzyBUG4Dg3XPtkOem5LP59ocaizkl32Tvg==} + '@react-aria/interactions@3.25.3': + resolution: {integrity: sha512-J1bhlrNtjPS/fe5uJQ+0c7/jiXniwa4RQlP+Emjfc/iuqpW2RhbF9ou5vROcLzWIyaW8tVMZ468J68rAs/aZ5A==} peerDependencies: 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 @@ -1669,14 +1669,14 @@ 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-aria/link@3.8.2': - resolution: {integrity: sha512-LScn5bRlBrv7yt2y06Ul3vNo8BOYHwZXjk47XCJTdt/QWhuU15oG0sRjJ1OIWgZ96jtW7u6YZ1PQtwX55gl7Dw==} + '@react-aria/link@3.8.3': + resolution: {integrity: sha512-83gS9Bb+FMa4Tae2VQrOxWixqYhqj4MDt4Bn0i3gzsP/sPWr1bwo5DJmXfw16UAXMaccl1rUKSqqHdigqaealw==} peerDependencies: 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-aria/listbox@3.14.5': - resolution: {integrity: sha512-6fIIr7KqJyS6+7FzRUT3TJozcImJG38kkPtzEpwhmPzWNDWEu307BOjIMw0AHs+m1pT7wspCzg3KOTppw8S4eg==} + '@react-aria/listbox@3.14.6': + resolution: {integrity: sha512-ZaYpBXiS+nUzxAmeCmXyvDcZECuZi1ZLn5y8uJ4ZFRVqSxqplVHodsQKwKqklmAM3+IVDyQx2WB4/HIKTGg2Bw==} peerDependencies: 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 @@ -1684,8 +1684,8 @@ packages: '@react-aria/live-announcer@3.4.3': resolution: {integrity: sha512-nbBmx30tW53Vlbq3BbMxHGbHa7vGE9ItacI+1XAdH2UZDLtdZA5J6U9YC6lokKQCv+aEVO6Zl9YG4yp57YwnGw==} - '@react-aria/menu@3.18.4': - resolution: {integrity: sha512-iLioNOnHhltIq7JtLkeSXA1bFt3rUdUwnc8j20LXlzhDgH/56Xi1sxOCzaGo33mDPT16ANJG4IolVzg0+tnb2g==} + '@react-aria/menu@3.18.5': + resolution: {integrity: sha512-mOQb4PcNvDdFhyqF7nxREwc1YUg+pPTiMNcSHlz/MKFkkUteIQBYfuJJa8i72ooiE55xfYEQhPLjmrLHAOIJ+g==} peerDependencies: 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 @@ -1696,14 +1696,14 @@ 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-aria/numberfield@3.11.15': - resolution: {integrity: sha512-iQuXWn6BGneSBZrRURkntfivY9noUiq/JLs9KjtaSm9V0X4THevB9xXQLL0qLJ+n5YHOM6skRyoCRaweYY5IhA==} + '@react-aria/numberfield@3.11.16': + resolution: {integrity: sha512-AGk0BMdHXPP3gSy39UVropyvpNMxAElPGIcicjXXyD/tZdemsgLXUFT2zI4DwE0csFZS8BGgunLWT9VluMF4FQ==} peerDependencies: 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-aria/overlays@3.27.2': - resolution: {integrity: sha512-lWerY4caK2+AXzdPhUqAov3Di2mSfIKdaEEj+99iXeH85zzs2cbWZRvvCwwVGQ0GprypxETz1jb1Wq/55xDALw==} + '@react-aria/overlays@3.27.3': + resolution: {integrity: sha512-1hawsRI+QiM0TkPNwApNJ2+N49NQTP+48xq0JG8hdEUPChQLDoJ39cvT1sxdg0mnLDzLaAYkZrgfokq9sX6FLA==} peerDependencies: 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 @@ -1714,26 +1714,26 @@ 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-aria/radio@3.11.4': - resolution: {integrity: sha512-kxML2cuI4/5AlSSzOAwXVXoouvrICxGdWbs0ze0IHaGkw6p3oKa5By6I6tT0+8/Kxy6ZFeCL+l/PU6K/ysAdAA==} + '@react-aria/radio@3.11.5': + resolution: {integrity: sha512-6BjpeTupQnxetfvC2bqIxWUt6USMqNZoKOoOO7mUL7ESF6/Gp8ocutvQn0VnTxU+7OhdrZX5AACPg/qIQYumVw==} peerDependencies: 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-aria/searchfield@3.8.5': - resolution: {integrity: sha512-HLHT2xc6USM/SbqFYz2gbREq7IcWfO+845ao/GCxy6Rx8eGD3OV09jgd+JlcSNJb2WiTpKhkSeX3wf7VgzPw2g==} + '@react-aria/searchfield@3.8.6': + resolution: {integrity: sha512-fEhNOtOV5yRZ8hkWmFO5Mh8nq63/ePun2dUMLAiW1sCQXTUpN9Oo+T4vsEUabuZ25mHvqgVoCVhAFdMbvZ+W+A==} peerDependencies: 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-aria/select@3.15.6': - resolution: {integrity: sha512-r/XU5PJY/V8LTklaiO7n3BDG9gVg/Dp3p7IwgGCYUbLuF9+8yMh858teOEJr3FYKLPr/nZLZQE08oJuADkCLEw==} + '@react-aria/select@3.15.7': + resolution: {integrity: sha512-b1PpanLblnXgrvIeYPkL9ELdeE3GQXwoRJLNv9DSKSAyBVx+pm6+4BtzngOBdBidRCcOGEBEYxuUW8hMXjFB8w==} peerDependencies: 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-aria/selection@3.24.2': - resolution: {integrity: sha512-YIdCYe1yXXfbZ0snUMWrQpOxtJO0+eHHp3+PSqZ/dyvLqMlTlYnOv2j5lc36sN0r1YWfN8OEpxzK3jHdD4M6yA==} + '@react-aria/selection@3.24.3': + resolution: {integrity: sha512-QznlHCUcjFgVALUIVBK4SWJd6osaU9lVaZgU4M8uemoIfOHqnBY3zThkQvEhcw/EJ2RpuYYLPOBYZBnk1knD5A==} peerDependencies: 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 @@ -1744,8 +1744,8 @@ 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-aria/slider@3.7.20': - resolution: {integrity: sha512-ciRfI0ya89pm4R+2RE7vLhu5OjdsAQfzghVI5Eh5AHpwjajMJ41O4Vkyt2ci5KTcjwg80CFftAWmF02w2hKR5Q==} + '@react-aria/slider@3.7.21': + resolution: {integrity: sha512-eWu69KnQ7qCmpYBEkgGLjIuKfFqoHu2W6r9d7ys0ZmX81HPj9DhatGpEgHlnjRfCeSl9wL5h2FY9wnIio82cbg==} peerDependencies: 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 @@ -1762,44 +1762,44 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/switch@3.7.4': - resolution: {integrity: sha512-6Ue6GXBGMPc5uNwu6A4XHOEK5n/3OmgW/kgCmFVi2dh4QqkASSdadaizS/2uENWfgKTlEpd0Wy3PSfpubL+hCg==} + '@react-aria/switch@3.7.5': + resolution: {integrity: sha512-GV9rFYf4wRHAh9tkhptvm3uOflKcQHdgZh+eGpSAHyq2iTq0j2nEhlmtFordpcJgC4XWro7TXLNltfqUqVHtkw==} peerDependencies: 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-aria/table@3.17.4': - resolution: {integrity: sha512-zhqrt6Uk66wrgaIHrPUv3nguVMGMnPtqUmp0K2gibhNucN0iJ6zILoaq8vMmFH+9PmUqoiPJXq18czs2CluT6Q==} + '@react-aria/table@3.17.5': + resolution: {integrity: sha512-Q9HDr2EAhoah7HFIT6XxOOOv2fiAs0agwQQd3d1w6jqgyu9m20lM/jxcSwcCFj2O7FPKHfapSAijHDZZoc4Shg==} peerDependencies: 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-aria/tabs@3.10.4': - resolution: {integrity: sha512-aXY83zqLStlf/v8vP2OvlrLsujCNWGqfL3hMVDF1PNqRJGllMejzkzbZNf4fUQDTX+e2zNDv6SH4IRJ4k9sKlw==} + '@react-aria/tabs@3.10.5': + resolution: {integrity: sha512-ddmGPikXW+27W2Rx0VuEwwGJVLTo68QkNbSl8R+TEM0EUIAJo3nwHzAlQhuo5Tcb1PdK7biTjO1dyI4pno2/0Q==} peerDependencies: 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-aria/tag@3.6.1': - resolution: {integrity: sha512-oTEDqOejjltr64ADpgMA3eB/G4bJ2Y9TlQwW33l6XWAjtKKZScBhGrf9l10NTQphZf4QxMnucIHo8IV2eKSmjg==} + '@react-aria/tag@3.6.2': + resolution: {integrity: sha512-xO33FU0bZSpZ3Bw7bnJz7+Me0daVLJrn5dAllf18Mmf9T2cEr63Gg4AL4nR+rj6NLSq0aH8QyDtRGNqXJjo5SQ==} peerDependencies: 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-aria/textfield@3.17.4': - resolution: {integrity: sha512-dcQQKVgH/zv3wExcmpH7yMA2d4oPO3JF9L1HdwNvPHScnfbr404ZVEKjrIlxEvzq7V5yKky5q8171jmp+YOPyw==} + '@react-aria/textfield@3.17.5': + resolution: {integrity: sha512-HFdvqd3Mdp6WP7uYAWD64gRrL1D4Khi+Fm3dIHBhm1ANV0QjYkphJm4DYNDq/MXCZF46+CZNiOWEbL/aeviykA==} peerDependencies: 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-aria/toast@3.0.4': - resolution: {integrity: sha512-oH1WZfwdaryiggqxu1r1Jq1/fF8n9AVD3euamkJmXq5/t9IJUYLzct4w54QqjQ0KhtbHp+7n55QvvhZ9cW3XEg==} + '@react-aria/toast@3.0.5': + resolution: {integrity: sha512-uhwiZqPy6hqucBUL7z6uUZjAJ/ou3bNdTjZlXS+zbcm+T0dsjKDfzNkaebyZY7AX3cYkFCaRjc3N6omXwoAviw==} peerDependencies: 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-aria/toggle@3.11.4': - resolution: {integrity: sha512-RwWyFiM+dBsiulT1ziGdG5+cy/F/7hFVb1Ddyc90HNLqRuX2sAX3ysm0YmiiNpnHwGQR/kPd1ulTSqQ+ps9wiQ==} + '@react-aria/toggle@3.11.5': + resolution: {integrity: sha512-8+Evk/JVMQ25PNhbnHUvsAK99DAjnCWMdSBNswJ1sWseKCYQzBXsNkkF6Dl/FlSkfDBFAaRHkX9JUz02wehb9A==} peerDependencies: 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 @@ -1810,20 +1810,20 @@ 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-aria/toolbar@3.0.0-beta.17': - resolution: {integrity: sha512-YGLDOATMla9Y7Yk2P8qK3zcTrxQClf2ZLS8Wj14RY4le/r6F2rGJqkGhVFPyoNAtwsRr4bzD7CGERe4NUAPrqQ==} + '@react-aria/toolbar@3.0.0-beta.18': + resolution: {integrity: sha512-P1fXhmTRBK4YvPQDzCY3XoZl+HiBADgvQ89jszxJ2jD4Qzs/E096ttCc+otZnbvRcoU27IxC2vWFInqK/bP31g==} peerDependencies: 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-aria/tooltip@3.8.4': - resolution: {integrity: sha512-WwooDvXb64mGwZUZQj4tYcJEFSXLIxDywT97K9U4fLUhrNcQ8KdxdhPjyPOEXxscPfdJDyKKckhRiKl91UoKsg==} + '@react-aria/tooltip@3.8.5': + resolution: {integrity: sha512-spGAuHHNkiqAfyOl4JWzKEK642KC1oQylioYg+LKCq2avUyaDqFlRx2JrC4a6nt3BV6E5/cJUMV9K7gMRApd5Q==} peerDependencies: 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-aria/tree@3.1.0': - resolution: {integrity: sha512-GBg01P04fLY16ZHLYcP9nLGis2MGQSpiP8rMG0t5jqddJdx+v8IL28f9mcHw+NSRgZm28NHQThTkH31SUxXppQ==} + '@react-aria/tree@3.1.1': + resolution: {integrity: sha512-9LIe9unStA/9HHX6idHdbxMJLjebFP9mngIjoBgbWSNaYx3oH1X3Ei2Q9qHmimebtBagEZgSjxy7M+RcEqFhlw==} peerDependencies: 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 @@ -1834,14 +1834,14 @@ 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-aria/virtualizer@4.1.6': - resolution: {integrity: sha512-vV+XM45ZfTy0PAkAiPvkCm0tQGY1F7ur4p8KbkCznG7/hfJ+fVx1aJ1F4UmvDowmTmSMAk9JQtH9b2qNkMtn9Q==} + '@react-aria/virtualizer@4.1.7': + resolution: {integrity: sha512-mUJAWuLANVd6mXd7SKbGl9+LqrHxgkH/bo9qQTKaRKDWR3PVqU4m/xdY/u2EDGcWPiiTMHLJaPdMQA5OZ8LtMg==} peerDependencies: 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-aria/visually-hidden@3.8.24': - resolution: {integrity: sha512-vhGhALs/PGdTs/7GD2hsy7CF1LBF9QlL57HkRSu8kfiuiA7rqRTqYg6q723OvaFsspj3DCxP2MLQhvvZSWe7Ng==} + '@react-aria/visually-hidden@3.8.25': + resolution: {integrity: sha512-9tRRFV1YMLuDId9E8PeUf0xy0KmQBoP8y/bm0PKWzXOqLOVmp/+kop9rwsjC7J6ppbBnlak7XCXTc7GoSFOCRA==} peerDependencies: 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 @@ -2588,8 +2588,8 @@ packages: resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@umami/react-zen@0.136.0': - resolution: {integrity: sha512-4dStzemPNxGB1nVdfnSxfkmYUnIXTRwqBqJpn4N9RvhmnQQeUfYQvJc4eqMSM0hrQToQcgGdvB/HucDpk30W7Q==} + '@umami/react-zen@0.137.0': + resolution: {integrity: sha512-gjjqUTXJoh2DXB0ML4VAgK8xSdnMsZSQ5eBsRmX9iyjSP2iV5en38He+bpCTwVQcOT48Ask/12ILp/7t2f70vw==} '@umami/redis-client@0.27.0': resolution: {integrity: sha512-SbHTpxhgeZyTBUSp2zdZM+XUtpsaSL4Tad8QXIEhEtjWhvvfoornyT5kLuyYCVtzSAT4daALeGmOO1z6EE1KcA==} @@ -5974,8 +5974,8 @@ 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-aria@3.41.0: - resolution: {integrity: sha512-jg4aUQrsBTwgKitXlyLvEVSigzn79jNpgDP+mrrDIX8emzr+BBXx1x6WSVHDAESep72Xcp+zr9PbLmBCk3/nzQ==} + react-aria@3.41.1: + resolution: {integrity: sha512-5mujwnW6/NHvONDecb7DiWkzI27dzBO1auKt4KkgNuW+Awud1LCaK/NOlHp4xZl3fSfh1ROpdAKERHCh7nvAAQ==} peerDependencies: 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 @@ -7641,7 +7641,7 @@ snapshots: '@fontsource/inter@4.5.15': {} - '@fontsource/jetbrains-mono@5.2.5': {} + '@fontsource/jetbrains-mono@5.2.6': {} '@formatjs/cli@4.8.4(ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.25.5)(jest@29.7.0(@types/node@22.15.21)(ts-node@10.9.2(@types/node@22.15.21)(typescript@5.8.3)))(typescript@5.8.3))': dependencies: @@ -8254,13 +8254,13 @@ snapshots: '@react-aria/autocomplete@3.0.0-beta.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/combobox': 3.12.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/combobox': 3.12.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/listbox': 3.14.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/searchfield': 3.8.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/textfield': 3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/listbox': 3.14.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/searchfield': 3.8.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/textfield': 3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/autocomplete': 3.0.0-beta.1(react@19.1.0) '@react-stately/combobox': 3.10.6(react@19.1.0) @@ -8271,10 +8271,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/breadcrumbs@3.5.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/breadcrumbs@3.5.26(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/link': 3.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/link': 3.8.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/breadcrumbs': 3.7.14(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8282,10 +8282,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/button@3.13.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/button@3.13.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/toolbar': 3.0.0-beta.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/toolbar': 3.0.0-beta.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/toggle': 3.8.5(react@19.1.0) '@react-types/button': 3.12.2(react@19.1.0) @@ -8294,11 +8294,11 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/calendar@3.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/calendar@3.8.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@internationalized/date': 3.8.2 '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/live-announcer': 3.4.3 '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/calendar': 3.8.2(react@19.1.0) @@ -8309,12 +8309,12 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/checkbox@3.15.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/checkbox@3.15.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/form': 3.0.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/form': 3.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/toggle': 3.11.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/toggle': 3.11.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/checkbox': 3.6.15(react@19.1.0) '@react-stately/form': 3.1.5(react@19.1.0) @@ -8327,7 +8327,7 @@ snapshots: '@react-aria/collections@3.0.0-rc.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/ssr': 3.9.9(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8336,16 +8336,16 @@ snapshots: react-dom: 19.1.0(react@19.1.0) use-sync-external-store: 1.5.0(react@19.1.0) - '@react-aria/color@3.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/color@3.0.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/numberfield': 3.11.15(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/slider': 3.7.20(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/numberfield': 3.11.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/slider': 3.7.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/spinbutton': 3.6.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/textfield': 3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/textfield': 3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/visually-hidden': 3.8.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/visually-hidden': 3.8.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/color': 3.8.6(react@19.1.0) '@react-stately/form': 3.1.5(react@19.1.0) '@react-types/color': 3.0.6(react@19.1.0) @@ -8354,16 +8354,16 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/combobox@3.12.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/combobox@3.12.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/listbox': 3.14.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/listbox': 3.14.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/live-announcer': 3.4.3 - '@react-aria/menu': 3.18.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/overlays': 3.27.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/textfield': 3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/menu': 3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/overlays': 3.27.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/textfield': 3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/collections': 3.12.5(react@19.1.0) '@react-stately/combobox': 3.10.6(react@19.1.0) @@ -8375,15 +8375,15 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/datepicker@3.14.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/datepicker@3.14.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@internationalized/date': 3.8.2 '@internationalized/number': 3.6.3 '@internationalized/string': 3.2.7 - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/form': 3.0.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/form': 3.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/spinbutton': 3.6.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -8398,10 +8398,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/dialog@3.5.26(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/dialog@3.5.27(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/overlays': 3.27.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/overlays': 3.27.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/dialog': 3.5.19(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8419,13 +8419,13 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/dnd@3.10.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/dnd@3.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@internationalized/string': 3.2.7 '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/live-announcer': 3.4.3 - '@react-aria/overlays': 3.27.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/overlays': 3.27.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/collections': 3.12.5(react@19.1.0) '@react-stately/dnd': 3.6.0(react@19.1.0) @@ -8435,9 +8435,9 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/focus@3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/focus@3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) '@swc/helpers': 0.5.17 @@ -8445,9 +8445,9 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/form@3.0.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/form@3.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/form': 3.1.5(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8455,13 +8455,13 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/grid@3.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/grid@3.14.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/live-announcer': 3.4.3 - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/collections': 3.12.5(react@19.1.0) '@react-stately/grid': 3.11.3(react@19.1.0) @@ -8473,13 +8473,13 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/gridlist@3.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/gridlist@3.13.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/grid': 3.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/grid': 3.14.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/collections': 3.12.5(react@19.1.0) '@react-stately/list': 3.12.3(react@19.1.0) @@ -8502,7 +8502,7 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/interactions@3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/interactions@3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/ssr': 3.9.9(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -8529,9 +8529,9 @@ snapshots: react-dom: 19.1.0(react@19.1.0) use-sync-external-store: 1.5.0(react@19.1.0) - '@react-aria/link@3.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/link@3.8.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/link': 3.6.2(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8539,11 +8539,11 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/listbox@3.14.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/listbox@3.14.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/collections': 3.12.5(react@19.1.0) '@react-stately/list': 3.12.3(react@19.1.0) @@ -8557,13 +8557,13 @@ snapshots: dependencies: '@swc/helpers': 0.5.17 - '@react-aria/menu@3.18.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/menu@3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/overlays': 3.27.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/overlays': 3.27.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/collections': 3.12.5(react@19.1.0) '@react-stately/menu': 3.9.5(react@19.1.0) @@ -8585,12 +8585,12 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/numberfield@3.11.15(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/numberfield@3.11.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/spinbutton': 3.6.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/textfield': 3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/textfield': 3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/form': 3.1.5(react@19.1.0) '@react-stately/numberfield': 3.9.13(react@19.1.0) @@ -8601,14 +8601,14 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/overlays@3.27.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/overlays@3.27.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/ssr': 3.9.9(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/visually-hidden': 3.8.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/visually-hidden': 3.8.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/overlays': 3.6.17(react@19.1.0) '@react-types/button': 3.12.2(react@19.1.0) '@react-types/overlays': 3.8.16(react@19.1.0) @@ -8628,12 +8628,12 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/radio@3.11.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/radio@3.11.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/form': 3.0.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/form': 3.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/radio': 3.10.14(react@19.1.0) @@ -8643,10 +8643,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/searchfield@3.8.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/searchfield@3.8.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/textfield': 3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/textfield': 3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/searchfield': 3.5.13(react@19.1.0) '@react-types/button': 3.12.2(react@19.1.0) @@ -8656,17 +8656,17 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/select@3.15.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/select@3.15.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/form': 3.0.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/form': 3.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/listbox': 3.14.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/menu': 3.18.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/listbox': 3.14.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/menu': 3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/visually-hidden': 3.8.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/visually-hidden': 3.8.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/select': 3.6.14(react@19.1.0) '@react-types/button': 3.12.2(react@19.1.0) '@react-types/select': 3.9.13(react@19.1.0) @@ -8675,11 +8675,11 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/selection@3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/selection@3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/selection': 3.20.3(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8695,10 +8695,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/slider@3.7.20(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/slider@3.7.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/slider': 3.6.5(react@19.1.0) @@ -8724,9 +8724,9 @@ snapshots: '@swc/helpers': 0.5.17 react: 19.1.0 - '@react-aria/switch@3.7.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/switch@3.7.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/toggle': 3.11.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/toggle': 3.11.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/toggle': 3.8.5(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) '@react-types/switch': 3.5.12(react@19.1.0) @@ -8734,15 +8734,15 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/table@3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/table@3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/grid': 3.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/grid': 3.14.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/live-announcer': 3.4.3 '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/visually-hidden': 3.8.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/visually-hidden': 3.8.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/collections': 3.12.5(react@19.1.0) '@react-stately/flags': 3.1.2 '@react-stately/table': 3.14.3(react@19.1.0) @@ -8754,11 +8754,11 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/tabs@3.10.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/tabs@3.10.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/tabs': 3.8.3(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8767,13 +8767,13 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/tag@3.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/tag@3.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/gridlist': 3.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/gridlist': 3.13.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/list': 3.12.3(react@19.1.0) '@react-types/button': 3.12.2(react@19.1.0) @@ -8782,10 +8782,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/textfield@3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/textfield@3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/form': 3.0.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/form': 3.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/form': 3.1.5(react@19.1.0) @@ -8796,10 +8796,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/toast@3.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/toast@3.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/landmark': 3.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/toast': 3.1.1(react@19.1.0) @@ -8809,9 +8809,9 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/toggle@3.11.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/toggle@3.11.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/toggle': 3.8.5(react@19.1.0) '@react-types/checkbox': 3.9.5(react@19.1.0) @@ -8822,7 +8822,7 @@ snapshots: '@react-aria/toolbar@3.0.0-beta.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8830,9 +8830,9 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/toolbar@3.0.0-beta.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/toolbar@3.0.0-beta.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8840,9 +8840,9 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/tooltip@3.8.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/tooltip@3.8.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/tooltip': 3.5.5(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8851,11 +8851,11 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/tree@3.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/tree@3.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/gridlist': 3.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/gridlist': 3.13.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/tree': 3.9.0(react@19.1.0) '@react-types/button': 3.12.2(react@19.1.0) @@ -8875,10 +8875,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/virtualizer@4.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/virtualizer@4.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/virtualizer': 4.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) @@ -8886,9 +8886,9 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@react-aria/visually-hidden@3.8.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-aria/visually-hidden@3.8.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) '@swc/helpers': 0.5.17 @@ -9810,11 +9810,11 @@ snapshots: '@typescript-eslint/types': 8.32.1 eslint-visitor-keys: 4.2.0 - '@umami/react-zen@0.136.0(@babel/core@7.27.1)(@types/react@19.1.5)(immer@9.0.21)(use-sync-external-store@1.5.0(react@19.1.0))': + '@umami/react-zen@0.137.0(@babel/core@7.27.1)(@types/react@19.1.5)(immer@9.0.21)(use-sync-external-store@1.5.0(react@19.1.0))': dependencies: - '@fontsource/jetbrains-mono': 5.2.5 + '@fontsource/jetbrains-mono': 5.2.6 '@internationalized/date': 3.8.2 - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-spring/web': 9.7.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) classnames: 2.5.1 glob: 10.4.5 @@ -13663,15 +13663,15 @@ snapshots: '@internationalized/string': 3.2.7 '@react-aria/autocomplete': 3.0.0-beta.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/collections': 3.0.0-rc.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/dnd': 3.10.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/dnd': 3.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/live-announcer': 3.4.3 - '@react-aria/overlays': 3.27.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/overlays': 3.27.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/ssr': 3.9.9(react@19.1.0) '@react-aria/toolbar': 3.0.0-beta.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/virtualizer': 4.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/virtualizer': 4.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/autocomplete': 3.0.0-beta.1(react@19.1.0) '@react-stately/layout': 4.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-stately/selection': 3.20.3(react@19.1.0) @@ -13685,54 +13685,54 @@ snapshots: '@swc/helpers': 0.5.17 client-only: 0.0.1 react: 19.1.0 - react-aria: 3.41.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-aria: 3.41.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-dom: 19.1.0(react@19.1.0) react-stately: 3.39.0(react@19.1.0) use-sync-external-store: 1.5.0(react@19.1.0) - react-aria@3.41.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-aria@3.41.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@internationalized/string': 3.2.7 - '@react-aria/breadcrumbs': 3.5.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/button': 3.13.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/calendar': 3.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/checkbox': 3.15.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/color': 3.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/combobox': 3.12.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/datepicker': 3.14.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/dialog': 3.5.26(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/breadcrumbs': 3.5.26(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/button': 3.13.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/calendar': 3.8.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/checkbox': 3.15.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/color': 3.0.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/combobox': 3.12.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/datepicker': 3.14.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/dialog': 3.5.27(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/disclosure': 3.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/dnd': 3.10.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/focus': 3.20.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/gridlist': 3.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/dnd': 3.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/gridlist': 3.13.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/i18n': 3.12.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/interactions': 3.25.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/label': 3.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/landmark': 3.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/link': 3.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/listbox': 3.14.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/menu': 3.18.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/link': 3.8.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/listbox': 3.14.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/menu': 3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/meter': 3.4.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/numberfield': 3.11.15(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/overlays': 3.27.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/numberfield': 3.11.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/overlays': 3.27.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/progress': 3.4.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/radio': 3.11.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/searchfield': 3.8.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/select': 3.15.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/selection': 3.24.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/radio': 3.11.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/searchfield': 3.8.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/select': 3.15.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/selection': 3.24.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/separator': 3.4.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/slider': 3.7.20(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/slider': 3.7.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/ssr': 3.9.9(react@19.1.0) - '@react-aria/switch': 3.7.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/table': 3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/tabs': 3.10.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/tag': 3.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/textfield': 3.17.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/toast': 3.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/tooltip': 3.8.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/tree': 3.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/switch': 3.7.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/table': 3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/tabs': 3.10.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/tag': 3.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/textfield': 3.17.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/toast': 3.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/tooltip': 3.8.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/tree': 3.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/visually-hidden': 3.8.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/visually-hidden': 3.8.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-types/shared': 3.30.0(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) diff --git a/src/app/(main)/SideNav.tsx b/src/app/(main)/SideNav.tsx index cdc90cec..9a8f2fd0 100644 --- a/src/app/(main)/SideNav.tsx +++ b/src/app/(main)/SideNav.tsx @@ -7,6 +7,7 @@ import { Logo, Grid2X2, Settings, + LockKeyhole, } from '@/components/icons'; import { useMessages, useNavigation, useGlobalState } from '@/components/hooks'; @@ -41,6 +42,11 @@ export function SideNav(props: any) { href: renderTeamUrl('/settings'), icon: , }, + { + label: formatMessage(labels.admin), + href: renderTeamUrl('/admin'), + icon: , + }, ].filter(n => n); return ( diff --git a/src/app/(main)/websites/[websiteId]/reports/ReportsLayout.tsx b/src/app/(main)/websites/[websiteId]/reports/ReportsLayout.tsx index 11b743c1..70e33146 100644 --- a/src/app/(main)/websites/[websiteId]/reports/ReportsLayout.tsx +++ b/src/app/(main)/websites/[websiteId]/reports/ReportsLayout.tsx @@ -5,7 +5,7 @@ import { ReportsNav } from './ReportsNav'; export function ReportsLayout({ websiteId, children }: { websiteId: string; children: ReactNode }) { return ( - + diff --git a/src/app/(main)/websites/[websiteId]/reports/ReportsNav.tsx b/src/app/(main)/websites/[websiteId]/reports/ReportsNav.tsx index 51b4ed7a..fa2b69b5 100644 --- a/src/app/(main)/websites/[websiteId]/reports/ReportsNav.tsx +++ b/src/app/(main)/websites/[websiteId]/reports/ReportsNav.tsx @@ -1,6 +1,6 @@ import { Row, NavMenu, NavMenuItem, Icon, Text } from '@umami/react-zen'; import { useMessages, useNavigation } from '@/components/hooks'; -import { Funnel, Lightbulb, Magnet, Money, Network, Path, Tag, Target } from '@/components/icons'; +import { Funnel, Sheet, Magnet, Money, Network, Path, Tag, Target } from '@/components/icons'; import Link from 'next/link'; export function ReportsNav({ websiteId }: { websiteId: string }) { @@ -32,6 +32,12 @@ export function ReportsNav({ websiteId }: { websiteId: string }) { icon: , path: '/retention', }, + { + id: 'breakdown', + label: formatMessage(labels.breakdown), + icon: , + path: '/breakdown', + }, { id: 'utm', label: formatMessage(labels.utm), @@ -50,12 +56,6 @@ export function ReportsNav({ websiteId }: { websiteId: string }) { icon: , path: '/attribution', }, - { - id: 'insights', - label: formatMessage(labels.insights), - icon: , - path: '/insights', - }, ]; const selected = links.find(({ path }) => path && pathname.endsWith(path))?.id || 'goals'; diff --git a/src/app/(main)/websites/[websiteId]/reports/attribution/Attribution.tsx b/src/app/(main)/websites/[websiteId]/reports/attribution/Attribution.tsx index 82d8ec85..c9357351 100644 --- a/src/app/(main)/websites/[websiteId]/reports/attribution/Attribution.tsx +++ b/src/app/(main)/websites/[websiteId]/reports/attribution/Attribution.tsx @@ -1,4 +1,4 @@ -import { Grid, Column, Heading } from '@umami/react-zen'; +import { Grid, Column } from '@umami/react-zen'; import { useMessages, useResultQuery } from '@/components/hooks'; import { Panel } from '@/components/common/Panel'; import { LoadingPanel } from '@/components/common/LoadingPanel'; @@ -125,8 +125,7 @@ export function Attribution({ }; return ( - - {label} + ); })} - + - - - - - - - - - - - - - - - + + + + + - + ); diff --git a/src/app/(main)/websites/[websiteId]/reports/attribution/AttributionPage.tsx b/src/app/(main)/websites/[websiteId]/reports/attribution/AttributionPage.tsx index f7058ca3..758c6b50 100644 --- a/src/app/(main)/websites/[websiteId]/reports/attribution/AttributionPage.tsx +++ b/src/app/(main)/websites/[websiteId]/reports/attribution/AttributionPage.tsx @@ -8,7 +8,7 @@ import { useDateRange, useMessages } from '@/components/hooks'; export function AttributionPage({ websiteId }: { websiteId: string }) { const [model, setModel] = useState('first-click'); const [type, setType] = useState('page'); - const [step, setStep] = useState(''); + const [step, setStep] = useState('/'); const { formatMessage, labels } = useMessages(); const { dateRange: { startDate, endDate }, @@ -44,6 +44,7 @@ export function AttributionPage({ websiteId }: { websiteId: string }) { diff --git a/src/app/(main)/websites/[websiteId]/reports/breakdown/Breakdown.tsx b/src/app/(main)/websites/[websiteId]/reports/breakdown/Breakdown.tsx new file mode 100644 index 00000000..4ff06631 --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/reports/breakdown/Breakdown.tsx @@ -0,0 +1,73 @@ +import { Text, DataTable, DataColumn } from '@umami/react-zen'; +import { useMessages, useResultQuery, useFormat, useFields } from '@/components/hooks'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { formatShortTime } from '@/lib/format'; + +export interface BreakdownProps { + websiteId: string; + startDate: Date; + endDate: Date; + parameters: { + fields: string[]; + }; +} + +export function Breakdown({ websiteId, parameters, startDate, endDate }: BreakdownProps) { + const { formatMessage, labels } = useMessages(); + const { formatValue } = useFormat(); + const { fields } = useFields(); + const { data, error, isLoading } = useResultQuery( + 'breakdown', + { + websiteId, + dateRange: { + startDate, + endDate, + }, + parameters, + }, + { enabled: !!parameters.fields.length }, + ); + + return ( + + + {parameters?.fields.map(field => { + return ( + f.name === field)?.label}> + {row => { + const value = formatValue(row[field], field); + return ( + + {value} + + ); + }} + + ); + })} + + {row => row?.['views']?.toLocaleString()} + + + {row => row?.['visits']?.toLocaleString()} + + + {row => row?.['visitors']?.toLocaleString()} + + + {row => { + const n = (Math.min(row?.['visits'], row?.['bounces']) / row?.['visits']) * 100; + return Math.round(+n) + '%'; + }} + + + {row => { + const n = (row?.['totaltime'] / row?.['visits']) * 100; + return `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`; + }} + + + + ); +} diff --git a/src/app/(main)/websites/[websiteId]/reports/breakdown/BreakdownPage.tsx b/src/app/(main)/websites/[websiteId]/reports/breakdown/BreakdownPage.tsx new file mode 100644 index 00000000..27e1ed4d --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/reports/breakdown/BreakdownPage.tsx @@ -0,0 +1,97 @@ +'use client'; +import { useState } from 'react'; +import { + List, + ListItem, + Button, + Column, + Box, + Grid, + Text, + Icon, + Popover, + DialogTrigger, +} from '@umami/react-zen'; +import { useDateRange, useMessages, useFields } from '@/components/hooks'; +import { SquarePlus, Chevron } from '@/components/icons'; +import { Panel } from '@/components/common/Panel'; +import { Breakdown } from './Breakdown'; +import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; + +export function BreakdownPage({ websiteId }: { websiteId: string }) { + const { + dateRange: { startDate, endDate }, + } = useDateRange(websiteId); + const [fields, setFields] = useState([]); + + return ( + + + + + + + + + + ); +} + +const FieldsButton = ({ value, onChange }) => { + const [selected, setSelected] = useState(value); + const [isOpen, setIsOpen] = useState(false); + const { formatMessage, labels } = useMessages(); + const { fields } = useFields(); + + const handleChange = value => { + setSelected(value); + }; + + const handleApply = () => { + setIsOpen(false); + onChange?.(selected); + }; + + const handleClose = () => { + setIsOpen(false); + setSelected(value); + }; + + return ( + + + + + + {fields.map(({ name, label }) => { + return ( + + {label} + + ); + })} + + + + + + + + + ); +}; diff --git a/src/app/(main)/websites/[websiteId]/reports/insights/page.tsx b/src/app/(main)/websites/[websiteId]/reports/breakdown/page.tsx similarity index 69% rename from src/app/(main)/websites/[websiteId]/reports/insights/page.tsx rename to src/app/(main)/websites/[websiteId]/reports/breakdown/page.tsx index a4eee1f2..89295b3d 100644 --- a/src/app/(main)/websites/[websiteId]/reports/insights/page.tsx +++ b/src/app/(main)/websites/[websiteId]/reports/breakdown/page.tsx @@ -1,10 +1,10 @@ import { Metadata } from 'next'; -import { InsightsPage } from './InsightsPage'; +import { BreakdownPage } from './BreakdownPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { const { websiteId } = await params; - return ; + return ; } export const metadata: Metadata = { diff --git a/src/app/(main)/websites/[websiteId]/reports/goals/GoalsPage.tsx b/src/app/(main)/websites/[websiteId]/reports/goals/GoalsPage.tsx index 0829e390..01c91e0a 100644 --- a/src/app/(main)/websites/[websiteId]/reports/goals/GoalsPage.tsx +++ b/src/app/(main)/websites/[websiteId]/reports/goals/GoalsPage.tsx @@ -24,7 +24,7 @@ export function GoalsPage({ websiteId }: { websiteId: string }) { {result?.data?.map((report: any) => ( - + ))} diff --git a/src/app/(main)/websites/[websiteId]/reports/insights/Insights.tsx b/src/app/(main)/websites/[websiteId]/reports/insights/Insights.tsx deleted file mode 100644 index d0a084d7..00000000 --- a/src/app/(main)/websites/[websiteId]/reports/insights/Insights.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { ReactNode } from 'react'; -import { Grid, Row, Column, Text, Loading, Icon } from '@umami/react-zen'; -import { Empty } from '@/components/common/Empty'; -import { Users } from '@/components/icons'; -import { useMessages, useLocale, useResultQuery } from '@/components/hooks'; -import { formatDate } from '@/lib/date'; -import { formatLongNumber } from '@/lib/format'; -import { Panel } from '@/components/common/Panel'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; - -const DAYS = [1, 2, 3, 4, 5, 6, 7, 14, 21, 28]; - -export interface AttributionProps { - websiteId: string; - startDate: Date; - endDate: Date; - days?: number[]; -} - -export function Insights({ websiteId, days = DAYS, startDate, endDate }: AttributionProps) { - const { formatMessage, labels } = useMessages(); - const { locale } = useLocale(); - const { data, error, isLoading } = useResultQuery('insights', { - websiteId, - dateRange: { - startDate, - endDate, - }, - parameters: { - days, - }, - }); - - if (isLoading) { - return ; - } - - if (!data) { - return ; - } - - const rows = data.reduce((arr: any[], row: { date: any; visitors: any; day: any }) => { - const { date, visitors, day } = row; - if (day === 0) { - return arr.concat({ - date, - visitors, - records: days - .reduce((arr, day) => { - arr[day] = data.find(x => x.date === date && x.day === day); - return arr; - }, []) - .filter(n => n), - }); - } - return arr; - }, []); - - const totalDays = rows.length; - - return ( - - - - - - {formatMessage(labels.cohort)} - - {days.map(n => ( - - - {formatMessage(labels.day)} {n} - - - ))} - - {rows.map(({ date, visitors, records }: any, rowIndex: number) => { - return ( - - - {formatDate(date, 'PP', locale)} - - - - - {formatLongNumber(visitors)} - - - {days.map(day => { - if (totalDays - rowIndex < day) { - return null; - } - const percentage = records.filter(a => a.day === day)[0]?.percentage; - return ( - {percentage ? `${Number(percentage).toFixed(2)}%` : ''} - ); - })} - - ); - })} - - - - ); -} - -const Cell = ({ children }: { children: ReactNode }) => { - return ( - - {children} - - ); -}; diff --git a/src/app/(main)/websites/[websiteId]/reports/insights/InsightsPage.tsx b/src/app/(main)/websites/[websiteId]/reports/insights/InsightsPage.tsx deleted file mode 100644 index 2972a6ef..00000000 --- a/src/app/(main)/websites/[websiteId]/reports/insights/InsightsPage.tsx +++ /dev/null @@ -1,18 +0,0 @@ -'use client'; -import { Column } from '@umami/react-zen'; -import { Insights } from './Insights'; -import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { useDateRange } from '@/components/hooks'; - -export function InsightsPage({ websiteId }: { websiteId: string }) { - const { - dateRange: { startDate, endDate }, - } = useDateRange(websiteId); - - return ( - - - - - ); -} diff --git a/src/app/api/reports/insights/route.ts b/src/app/api/reports/breakdown/route.ts similarity index 67% rename from src/app/api/reports/insights/route.ts rename to src/app/api/reports/breakdown/route.ts index a49db1fa..55a07369 100644 --- a/src/app/api/reports/insights/route.ts +++ b/src/app/api/reports/breakdown/route.ts @@ -1,7 +1,7 @@ import { canViewWebsite } from '@/lib/auth'; import { unauthorized, json } from '@/lib/response'; import { parseRequest } from '@/lib/request'; -import { getInsights } from '@/queries'; +import { getBreakdown } from '@/queries'; import { reportResultSchema } from '@/lib/schema'; export async function POST(request: Request) { @@ -14,27 +14,17 @@ export async function POST(request: Request) { const { websiteId, dateRange: { startDate, endDate }, - fields, - filters, + parameters: { fields }, } = body; if (!(await canViewWebsite(auth, websiteId))) { return unauthorized(); } - const data = await getInsights(websiteId, fields, { - ...convertFilters(filters), + const data = await getBreakdown(websiteId, fields, { startDate: new Date(startDate), endDate: new Date(endDate), }); return json(data); } - -function convertFilters(filters: any[]) { - return filters.reduce((obj, filter) => { - obj[filter.name] = filter; - - return obj; - }, {}); -} diff --git a/src/components/common/Panel.tsx b/src/components/common/Panel.tsx index d979bbca..b96923d5 100644 --- a/src/components/common/Panel.tsx +++ b/src/components/common/Panel.tsx @@ -7,11 +7,13 @@ import { Button, TooltipTrigger, Tooltip, + Heading, } from '@umami/react-zen'; import { Maximize, Close } from '@/components/icons'; import { useMessages } from '@/components/hooks'; export interface PanelProps extends ColumnProps { + title?: string; allowFullscreen?: boolean; } @@ -25,7 +27,7 @@ const fullscreenStyles = { zIndex: 9999, } as any; -export function Panel({ allowFullscreen, style, children, ...props }: PanelProps) { +export function Panel({ title, allowFullscreen, style, children, ...props }: PanelProps) { const { formatMessage, labels } = useMessages(); const [isFullscreen, setIsFullscreen] = useState(false); @@ -44,6 +46,7 @@ export function Panel({ allowFullscreen, style, children, ...props }: PanelProps {...props} style={{ ...style, ...(isFullscreen ? fullscreenStyles : {}) }} > + {title && {title}} {allowFullscreen && ( diff --git a/src/components/icons.ts b/src/components/icons.ts index 7d6f4a4c..232a781d 100644 --- a/src/components/icons.ts +++ b/src/components/icons.ts @@ -5,8 +5,8 @@ export { ChartPie, ChevronRight as Chevron, Clock, - X as Close, Copy, + Download, Edit, Ellipsis, Eye, @@ -29,11 +29,15 @@ export { RefreshCw as Refresh, Settings, Share, + Sheet, Slash, SquarePen, + SquarePlus, Sun, Trash, + Upload, User, Users, + X as Close, } from 'lucide-react'; export * from '@/components/svg'; diff --git a/src/components/messages.ts b/src/components/messages.ts index e521d0da..e9ae19d9 100644 --- a/src/components/messages.ts +++ b/src/components/messages.ts @@ -18,7 +18,7 @@ export const labels = defineMessages({ user: { id: 'label.user', defaultMessage: 'User' }, viewOnly: { id: 'label.view-only', defaultMessage: 'View only' }, manage: { id: 'label.manage', defaultMessage: 'Manage' }, - admin: { id: 'label.admin', defaultMessage: 'Administrator' }, + admin: { id: 'label.admin', defaultMessage: 'Admin' }, confirm: { id: 'label.confirm', defaultMessage: 'Confirm' }, details: { id: 'label.details', defaultMessage: 'Details' }, website: { id: 'label.website', defaultMessage: 'Website' }, @@ -215,6 +215,7 @@ export const labels = defineMessages({ value: { id: 'label.value', defaultMessage: 'Value' }, overview: { id: 'label.overview', defaultMessage: 'Overview' }, totalRecords: { id: 'label.total-records', defaultMessage: 'Total records' }, + insight: { id: 'label.insight', defaultMessage: 'Insight' }, insights: { id: 'label.insights', defaultMessage: 'Insights' }, insightsDescription: { id: 'label.insights-description', diff --git a/src/lib/schema.ts b/src/lib/schema.ts index 73d28660..afda5acc 100644 --- a/src/lib/schema.ts +++ b/src/lib/schema.ts @@ -54,15 +54,31 @@ export const urlOrPathParam = z.string().refine( }, ); +export const fieldsParam = z.enum([ + 'url', + 'referrer', + 'title', + 'query', + 'os', + 'browser', + 'device', + 'country', + 'region', + 'city', + 'tag', + 'host', + 'language', +]); + export const reportTypeParam = z.enum([ + 'attribution', + 'breakdown', 'funnel', - 'insight', - 'retention', - 'utm', 'goal', 'journey', + 'retention', 'revenue', - 'attribution', + 'utm', ]); export const reportParms = { @@ -141,8 +157,11 @@ export const attributionReportSchema = z.object({ }), }); -export const insightsReportSchema = z.object({ - type: z.literal('insights'), +export const breakdownReportSchema = z.object({ + type: z.literal('breakdown'), + parameters: z.object({ + fields: z.array(fieldsParam), + }), }); export const reportBaseSchema = z.object({ @@ -160,7 +179,7 @@ export const reportTypeSchema = z.discriminatedUnion('type', [ utmReportSchema, revenueReportSchema, attributionReportSchema, - insightsReportSchema, + breakdownReportSchema, ]); export const reportSchema = z.intersection(reportBaseSchema, reportTypeSchema); diff --git a/src/queries/index.ts b/src/queries/index.ts index 2f785528..76e0dc4f 100644 --- a/src/queries/index.ts +++ b/src/queries/index.ts @@ -16,7 +16,7 @@ export * from '@/queries/sql/events/saveEvent'; export * from '@/queries/sql/reports/getFunnel'; export * from '@/queries/sql/reports/getJourney'; export * from '@/queries/sql/reports/getRetention'; -export * from '@/queries/sql/reports/getInsights'; +export * from '@/queries/sql/reports/getBreakdown'; export * from '@/queries/sql/reports/getUTM'; export * from '@/queries/sql/pageviews/getPageviewMetrics'; export * from '@/queries/sql/pageviews/getPageviewStats'; diff --git a/src/queries/sql/reports/getInsights.ts b/src/queries/sql/reports/getBreakdown.ts similarity index 84% rename from src/queries/sql/reports/getInsights.ts rename to src/queries/sql/reports/getBreakdown.ts index d7cdc283..0965bf43 100644 --- a/src/queries/sql/reports/getInsights.ts +++ b/src/queries/sql/reports/getBreakdown.ts @@ -4,8 +4,8 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; import { QueryFilters } from '@/lib/types'; -export async function getInsights( - ...args: [websiteId: string, fields: { name: string; type?: string }[], filters: QueryFilters] +export async function getBreakdown( + ...args: [websiteId: string, fields: string[], filters: QueryFilters] ) { return runQuery({ [PRISMA]: () => relationalQuery(...args), @@ -15,7 +15,7 @@ export async function getInsights( async function relationalQuery( websiteId: string, - fields: { name: string; type?: string }[], + fields: string[], filters: QueryFilters, ): Promise< { @@ -31,7 +31,7 @@ async function relationalQuery( eventType: EVENT_TYPE.pageView, }, { - joinSession: !!fields.find(({ name }) => SESSION_COLUMNS.includes(name)), + joinSession: !!fields.find(name => SESSION_COLUMNS.includes(name)), }, ); @@ -71,7 +71,7 @@ async function relationalQuery( async function clickhouseQuery( websiteId: string, - fields: { name: string; type?: string }[], + fields: string[], filters: QueryFilters, ): Promise< { @@ -118,10 +118,10 @@ async function clickhouseQuery( ); } -function parseFields(fields: { name: any }[]) { - return fields.map(({ name }) => `${FILTER_COLUMNS[name]} as "${name}"`).join(','); +function parseFields(fields: string[]) { + return fields.map(name => `${FILTER_COLUMNS[name]} as "${name}"`).join(','); } -function parseFieldsByName(fields: { name: any }[]) { - return `${fields.map(({ name }) => name).join(',')}`; +function parseFieldsByName(fields: string[]) { + return `${fields.map(name => name).join(',')}`; }