@hexclave/cli 1.0.20 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dashboard/apps/dashboard/.next/BUILD_ID +1 -1
- package/dist/dashboard/apps/dashboard/.next/build-manifest.json +5 -5
- package/dist/dashboard/apps/dashboard/.next/prerender-manifest.json +3 -3
- package/dist/dashboard/apps/dashboard/.next/required-server-files.json +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/new-project/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/new-project/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/playground/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/playground/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page/server-reference-manifest.json +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/-selector-/[...path]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/-selector-/[...path]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/(overview)/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/(overview)/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/@modal/(.)apps/[appId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/@modal/(.)apps/[appId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/clickmaps/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/clickmaps/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/overview/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/overview/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/queries/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/queries/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/tables/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/tables/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys-app/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys-app/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/[appId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/[appId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/auth-methods/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/auth-methods/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/conversations/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/conversations/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/convex/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/convex/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/chart-demo/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/chart-demo/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/datagrid-demo/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/datagrid-demo/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/realistic-demo/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/realistic-demo/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/domains/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/domains/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/[draftId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/[draftId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-outbox/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-outbox/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/no-source/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/no-source/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/sent/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/sent/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/[themeId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/[themeId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-viewer/[emailId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-viewer/[emailId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/emails/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/emails/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/expert-mode/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/expert-mode/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/external-db-sync/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/external-db-sync/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/launch-checklist/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/launch-checklist/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/onboarding/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/onboarding/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/customers/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/customers/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/payouts/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/payouts/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/product-lines/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/product-lines/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/edit/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/edit/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/new/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/new/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/transactions/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/transactions/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-keys/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-keys/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-permissions/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-permissions/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/query-analytics/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/query-analytics/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/[replayId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/[replayId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/sign-up-rules/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/sign-up-rules/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/support/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/support/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-permissions/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-permissions/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/[teamId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/[userId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/[userId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/vercel/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/vercel/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/widget-playground/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/widget-playground/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/handler/[...hexclave]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/handler/[...hexclave]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page/server-reference-manifest.json +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/projects/transfer/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/projects/transfer/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/featurebase/sso/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/featurebase/sso/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page/server-reference-manifest.json +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/projects/transfer/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/projects/transfer/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/[code]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/[code]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/return/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/return/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/wizard-congrats/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/wizard-congrats/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.html +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_full.segment.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment/browser-secret/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment/browser-secret.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.rsc +17 -17
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_full.segment.rsc +17 -17
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug/__PAGE__.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/index.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/index.rsc +15 -15
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_full.segment.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_full.segment.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_full.segment.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/rde-debug/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/rde-debug/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.rsc +20 -20
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats/__PAGE__.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_full.segment.rsc +20 -20
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/chunks/[root-of-the-server]__1m-q0b3._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/_04as7p-._.js +22 -22
- package/dist/dashboard/apps/dashboard/.next/server/chunks/_0tnctfw._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/node_modules__pnpm_1_a837b._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_0rk1u8f._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_1eprmn6._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_06e1zir._.js +9 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_18ofnte._.js +9 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/15dq_(main)_(protected)_projects_[projectId]_users_[userId]_page-client_tsx_0ptfo2h._.js +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/[root-of-the-server]__0fiuqqk._.js +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_05oib0d._.js +3 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0s_ag9o._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0xl4mrg._.js +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1-axnoc._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_132pp19._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1gqr2d9._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1jp05wg._.js +3 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1q7j2d7._.js +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1wwwu_3._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1z655xf._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/apps_dashboard_src_components_dashboard-user-button_tsx_1m9znfy._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/node_modules__pnpm_0cfdzin._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_0kveln1._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_1r7flhi._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/middleware-build-manifest.js +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/pages/404.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/pages/500.html +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/server-reference-manifest.json +5 -5
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2djrn7poti_fw.js → 0-cvg3igufvd6.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{4079rt6gkozmp.js → 0n_amwdwnr5qv.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{1c9um9pw7riw0.js → 0n_xejiuv6hi3.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/0nwiy21paqdxk.js +9 -0
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{41e2zx2dgkq1w.js → 0x24ip8d8uywa.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2zkv3tg8lrss9.js → 1_3_bf5h-idt6.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/1fvvqk0r2b0xi.css +1 -0
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{1g7ocjd1h6op9.js → 1iz1z3p9tjgbd.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{1yis25nn36osv.js → 1l5uzgfyrdupp.js} +5 -5
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2qgng6gut-lpo.js → 2-bdllt91-l80.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{3bo2ua_y4q43v.js → 2envmrg1f61w5.js} +3 -3
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{0_k8aohi1d6c5.js → 2rtuock2-guiu.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{3d-5wrlqx-xi5.js → 2vif9i05n-kbh.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{0al4rf0wulms6.js → 2xzp981upsrrz.js} +4 -4
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{3yr78v6baa_dn.js → 3kqlh2r279xvm.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{0nd-d9_e0czkl.js → 3x2nrm-cfkt_s.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2u4zmrk36sq5y.js → 3xy61pxy24_4d.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{turbopack-425k_ofsbf1gw.js → turbopack-2t16bx-7bi0_i.js} +1 -1
- package/dist/dashboard/apps/dashboard/package.json +1 -1
- package/dist/dashboard/apps/dashboard/server.js +1 -1
- package/dist/index.js +39 -15
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/dev.ts +49 -10
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_07k2db_._.js +0 -9
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0lvurax._.js +0 -9
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1_40imk._.js +0 -3
- package/dist/dashboard/apps/dashboard/.next/static/chunks/0z4wcrkw_j19e.js +0 -9
- package/dist/dashboard/apps/dashboard/.next/static/chunks/3kqudwiyy5y1a.css +0 -1
- /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_buildManifest.js +0 -0
- /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_clientMiddlewareManifest.js +0 -0
- /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_ssgManifest.js +0 -0
package/dist/dashboard/apps/dashboard/.next/static/chunks/{0al4rf0wulms6.js → 2xzp981upsrrz.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,818569,e=>{"use strict";var t=e.i(199586),a=e.i(762182);e.i(960458);var
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,818569,e=>{"use strict";var t=e.i(199586),a=e.i(762182);e.i(960458);var s=e.i(945299),n=e.i(675470),i=e.i(285009),r=e.i(295640),l=e.i(821832),o=e.i(579184),c=e.i(180839),d=e.i(509957),u=e.i(526190);e.i(403150);var m=e.i(682253),p=e.i(583975),h=e.i(709898),g=e.i(126174),x=e.i(488777),f=e.i(468759),v=e.i(838497),y=e.i(624306),b=e.i(32693),j=e.i(265369),w=e.i(175102),A=e.i(35617),S=e.i(757905),C=e.i(550209),N=e.i(387360),I=e.i(160173),_=e.i(859171),k=e.i(72818),T=e.i(148488),D=e.i(866820),E=e.i(485082);let L=new Map([["bold",D.createElement(D.Fragment,null,D.createElement("path",{d:"M128,20a108,108,0,0,0,0,216c22.27,0,45.69-6.73,62.64-18a12,12,0,1,0-13.29-20c-13,8.63-31.89,14-49.35,14a84,84,0,1,1,84-84c0,9.29-1.67,17.08-4.69,21.95-2.64,4.24-6,6.05-11.31,6.05s-8.67-1.81-11.31-6.05c-3-4.87-4.69-12.66-4.69-21.95V88a12,12,0,0,0-23.49-3.46,52,52,0,1,0,8.86,79.57C172.3,174.3,182.81,180,196,180c24.67,0,40-19.92,40-52A108.12,108.12,0,0,0,128,20Zm0,136a28,28,0,1,1,28-28A28,28,0,0,1,128,156Z"}))],["duotone",D.createElement(D.Fragment,null,D.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),D.createElement("path",{d:"M128,24a104,104,0,0,0,0,208c21.51,0,44.1-6.48,60.43-17.33a8,8,0,0,0-8.86-13.33C166,210.38,146.21,216,128,216a88,88,0,1,1,88-88c0,26.45-10.88,32-20,32s-20-5.55-20-32V88a8,8,0,0,0-16,0v4.26a48,48,0,1,0,5.93,65.1c6,12,16.35,18.64,30.07,18.64,22.54,0,36-17.94,36-48A104.11,104.11,0,0,0,128,24Zm0,136a32,32,0,1,1,32-32A32,32,0,0,1,128,160Z"}))],["fill",D.createElement(D.Fragment,null,D.createElement("path",{d:"M232,128c0,.51,0,1,0,1.52-.34,14.26-5.63,30.48-28,30.48-23.14,0-28-17.4-28-32V88a8,8,0,0,0-8.53-8A8.17,8.17,0,0,0,160,88.27v4a48,48,0,1,0,6.73,64.05,40.19,40.19,0,0,0,3.38,5C175.48,168,185.71,176,204,176a54.81,54.81,0,0,0,9.22-.75,4,4,0,0,1,4.09,6A104.05,104.05,0,0,1,125.91,232C71.13,230.9,26.2,186.86,24.08,132.11A104,104,0,1,1,232,128ZM96,128a32,32,0,1,0,32-32A32,32,0,0,0,96,128Z"}))],["light",D.createElement(D.Fragment,null,D.createElement("path",{d:"M128,26a102,102,0,0,0,0,204c21.13,0,43.31-6.35,59.32-17a6,6,0,0,0-6.65-10c-13.9,9.25-34.09,15-52.67,15a90,90,0,1,1,90-90c0,29.58-13.78,34-22,34s-22-4.42-22-34V88a6,6,0,0,0-12,0v9a46,46,0,1,0,4.34,56.32C171.76,166.6,182,174,196,174c21.29,0,34-17.2,34-46A102.12,102.12,0,0,0,128,26Zm0,136a34,34,0,1,1,34-34A34,34,0,0,1,128,162Z"}))],["regular",D.createElement(D.Fragment,null,D.createElement("path",{d:"M128,24a104,104,0,0,0,0,208c21.51,0,44.1-6.48,60.43-17.33a8,8,0,0,0-8.86-13.33C166,210.38,146.21,216,128,216a88,88,0,1,1,88-88c0,26.45-10.88,32-20,32s-20-5.55-20-32V88a8,8,0,0,0-16,0v4.26a48,48,0,1,0,5.93,65.1c6,12,16.35,18.64,30.07,18.64,22.54,0,36-17.94,36-48A104.11,104.11,0,0,0,128,24Zm0,136a32,32,0,1,1,32-32A32,32,0,0,1,128,160Z"}))],["thin",D.createElement(D.Fragment,null,D.createElement("path",{d:"M128,28a100,100,0,0,0,0,200c20.76,0,42.52-6.23,58.21-16.66a4,4,0,1,0-4.43-6.67C167.35,214.27,147.24,220,128,220a92,92,0,1,1,92-92c0,31.32-15,36-24,36s-24-4.68-24-36V88a4,4,0,0,0-8,0v14.75a44,44,0,1,0,2.82,45.94C171.46,163.58,181.66,172,196,172c20,0,32-16.45,32-44A100.11,100.11,0,0,0,128,28Zm0,136a36,36,0,1,1,36-36A36,36,0,0,1,128,164Z"}))]]),U=D.forwardRef((e,t)=>D.createElement(E.default,{ref:t,...e,weights:L}));U.displayName="AtIcon";var M=e.i(75928),P=e.i(53607),F=e.i(727388),R=e.i(579987),O=e.i(743703),$=e.i(24931),B=e.i(425812),z=e.i(626196),V=e.i(89184),Z=e.i(311549),q=e.i(596984);e.i(283238);var H=e.i(426220);e.i(524311);var W=e.i(686643),G=e.i(579066),K=e.i(62505),Y=e.i(368886),Q=e.i(506170),X=e.i(918715),J=e.i(21852),ee=e.i(213596),et=e.i(961809),ea=e.i(96493),es=e.i(726536),en=e.i(596564),ei=e.i(841384),er=e.i(981038),el=e.i(672503),eo=e.i(40419),ec=e.i(903650);let ed=new Map([["bold",D.createElement(D.Fragment,null,D.createElement("path",{d:"M230.78,69.45A20,20,0,0,0,216,36H40A20,20,0,0,0,25.2,69.45l.12.14L92,140.75V216a20,20,0,0,0,31.09,16.65l32-21.34a20,20,0,0,0,8.9-16.64V140.75l66.67-71.16ZM143.23,127.8A12,12,0,0,0,140,136v56.52l-24,16V136a12,12,0,0,0-3.24-8.2L49.23,60H206.75Zm105.26,79.72a12,12,0,1,1-17,17L216,209l-15.52,15.51a12,12,0,0,1-17-17L199,192l-15.52-15.52a12,12,0,0,1,17-17L216,175l15.51-15.52a12,12,0,1,1,17,17L233,192Z"}))],["duotone",D.createElement(D.Fragment,null,D.createElement("path",{d:"M221.9,61.38,152,136v58.65a8,8,0,0,1-3.56,6.66l-32,21.33A8,8,0,0,1,104,216V136L34.1,61.38A8,8,0,0,1,40,48H216A8,8,0,0,1,221.9,61.38Z",opacity:"0.2"}),D.createElement("path",{d:"M227.82,66.76A16,16,0,0,0,216,40H40A16,16,0,0,0,28.19,66.76l.08.09L96,139.17V216a16,16,0,0,0,24.87,13.32l32-21.34A16,16,0,0,0,160,194.66V139.17l67.73-72.32ZM40,56h0Zm106.19,74.59A8,8,0,0,0,144,136v58.66L112,216V136a8,8,0,0,0-2.16-5.46L40,56H216Zm99.49,79.81a8,8,0,0,1-11.32,11.32L216,203.32l-18.34,18.35a8,8,0,0,1-11.31-11.32L204.69,192l-18.34-18.35a8,8,0,0,1,11.31-11.31L216,180.69l18.34-18.34a8,8,0,0,1,11.32,11.31L227.31,192Z"}))],["fill",D.createElement(D.Fragment,null,D.createElement("path",{d:"M227.73,66.85,160,139.17v55.49A16,16,0,0,1,152.87,208l-32,21.34A16,16,0,0,1,96,216V139.17L28.27,66.85l-.08-.09A16,16,0,0,1,40,40H216a16,16,0,0,1,11.84,26.76ZM227.31,192l18.35-18.34a8,8,0,0,0-11.32-11.32L216,180.69l-18.34-18.35a8,8,0,0,0-11.32,11.32L204.69,192l-18.35,18.34a8,8,0,0,0,11.32,11.32L216,203.31l18.34,18.35a8,8,0,0,0,11.32-11.32Z"}))],["light",D.createElement(D.Fragment,null,D.createElement("path",{d:"M228.79,50.34A13.83,13.83,0,0,0,216,42H40A14,14,0,0,0,29.67,65.42l.06.06L98,138.38V216a14,14,0,0,0,21.76,11.64l32-21.33A14,14,0,0,0,158,194.66V138.38l68.34-73A13.83,13.83,0,0,0,228.79,50.34Zm-11.26,6.94-69.9,74.62A6,6,0,0,0,146,136v58.66a2,2,0,0,1-.89,1.67l-32,21.33A2,2,0,0,1,110,216V136a6,6,0,0,0-1.62-4.1L38.53,57.32a1.89,1.89,0,0,1-.33-2.13A1.91,1.91,0,0,1,40,54H216a1.9,1.9,0,0,1,1.82,1.19A1.87,1.87,0,0,1,217.53,57.28Zm26.71,154.49a6,6,0,1,1-8.48,8.48L216,200.49l-19.75,19.76a6,6,0,0,1-8.49-8.48L207.52,192l-19.76-19.76a6,6,0,0,1,8.49-8.49L216,183.52l19.76-19.76a6,6,0,0,1,8.48,8.49L224.49,192Z"}))],["regular",D.createElement(D.Fragment,null,D.createElement("path",{d:"M227.82,66.76A16,16,0,0,0,216,40H40A16,16,0,0,0,28.19,66.76l.08.09L96,139.17V216a16,16,0,0,0,24.87,13.32l32-21.34A16,16,0,0,0,160,194.66V139.17l67.73-72.32ZM40,56h0Zm106.19,74.59A8,8,0,0,0,144,136v58.66L112,216V136a8,8,0,0,0-2.16-5.46L40,56H216Zm99.49,79.81a8,8,0,0,1-11.32,11.32L216,203.32l-18.34,18.35a8,8,0,0,1-11.31-11.32L204.69,192l-18.34-18.35a8,8,0,0,1,11.31-11.31L216,180.69l18.34-18.34a8,8,0,0,1,11.32,11.31L227.31,192Z"}))],["thin",D.createElement(D.Fragment,null,D.createElement("path",{d:"M227,51.15A11.86,11.86,0,0,0,216,44H40a12,12,0,0,0-8.88,20.07l.05.05L100,137.59V216a12,12,0,0,0,18.65,10l32-21.33a12,12,0,0,0,5.34-10V137.59l68.86-73.52A11.83,11.83,0,0,0,227,51.15Zm-8,7.5-69.91,74.62A4,4,0,0,0,148,136v58.65a4,4,0,0,1-1.78,3.33l-32,21.33A4,4,0,0,1,108,216V136a4,4,0,0,0-1.09-2.74L37.05,58.67A4,4,0,0,1,40,52H216a4,4,0,0,1,3,6.65Zm23.84,154.53a4,4,0,0,1-5.66,5.66L216,197.67l-21.17,21.17a4,4,0,0,1-5.66-5.66L210.34,192l-21.17-21.17a4,4,0,1,1,5.66-5.66L216,186.35l21.17-21.17a4,4,0,1,1,5.66,5.66L221.66,192Z"}))]]),eu=D.forwardRef((e,t)=>D.createElement(E.default,{ref:t,...e,weights:ed}));eu.displayName="FunnelXIcon";var em=e.i(289587),ep=e.i(964842),eh=e.i(444442),eg=e.i(414025),ex=e.i(798774),ef=e.i(23087),ev=e.i(756882),ey=e.i(102008),eb=e.i(392360);function ej(e){return e.toISOString().slice(0,19).replace("T"," ")}function ew(e){if("number"==typeof e)return Number.isFinite(e)?e:0;if("string"==typeof e){let t=Number(e);return Number.isFinite(t)?t:0}return 0}function eA(e){return"string"==typeof e&&e.length>0?e:null}let eS=`
|
|
2
2
|
SELECT
|
|
3
3
|
toString(countIf(event_at >= {since:DateTime})) AS total_events,
|
|
4
4
|
toString(countIf(event_at >= {since:DateTime} AND event_type = '$page-view')) AS page_views,
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
ORDER BY event_at DESC
|
|
108
108
|
LIMIT {limit:UInt32}
|
|
109
109
|
OFFSET {offset:UInt32}
|
|
110
|
-
`;function ek(e){return e.map(e=>({event_type:String(e.event_type??""),event_at:String(e.event_at_str??""),path:eA(e.path),url:eA(e.url),click_text:eA(e.click_text),tag_name:eA(e.tag_name)}))}function eD(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e4?`${(e/1e3).toFixed(1)}k`:e.toLocaleString()}let eT=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"}),eE=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function eL(e){let t=e.split("-").map(Number);return 3!==t.length||t.some(e=>!Number.isFinite(e))?null:new Date(Date.UTC(t[0],t[1]-1,t[2]))}function eU(e){let t=eL(e);return t?eT.format(t):e}function eM(e){let t=eL(e);return t?eE.format(t):e}let eP=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function eF(e,t){let a=new Map(e.map(e=>[e.day,e])),n=[],i=new Date(Date.UTC(t.startUtc.getUTCFullYear(),t.startUtc.getUTCMonth(),t.startUtc.getUTCDate())),s=Date.UTC(t.endUtcInclusive.getUTCFullYear(),t.endUtcInclusive.getUTCMonth(),t.endUtcInclusive.getUTCDate());for(;i.getTime()<=s;){let e=i.toISOString().slice(0,10),t=a.get(e);n.push({day:e,total_events:t?.total_events??0,page_views:t?.page_views??0,clicks:t?.clicks??0,sessions:t?.sessions??0}),i.setUTCDate(i.getUTCDate()+1)}return n}function eR(e){let t=e.split("-").map(Number);if(3!==t.length||t.some(e=>!Number.isFinite(e)))return null;let a=new Date(Date.UTC(t[0],t[1]-1,t[2])),n=new Date(a);return n.setUTCDate(n.getUTCDate()+1),{since:a,until:n}}function eO({user:e,dayFilter:a,onClearDayFilter:n}){let i=(0,en.useAdminApp)(),[s,r]=(0,T.useState)({status:"loading"}),[l,o]=(0,T.useState)({rows:[],hasMore:!1,isLoadingMore:!1}),c=(0,T.useRef)(null),d=(0,T.useMemo)(()=>a?eR(a):null,[a]);(0,T.useEffect)(()=>{let t={cancelled:!1};r({status:"loading"}),o({rows:[],hasMore:!1,isLoadingMore:!1}),c.current=null;let a=new Date,n=d?d.since:new Date(a.getTime()-2592e6),s=d?d.until:a,l={userId:e.id,since:ej(n),until:ej(s)},u=d?d.since:new Date(a.getTime()-6048e5),m=d?d.until:a,p=d?u:new Date(u.getTime()-6048e5),h={userId:e.id,since:ej(u),until:ej(m),prevSince:ej(p)},g=d?{since:new Date(d.since.getTime()-1296e6),until:new Date(Math.min(d.until.getTime()+1296e6,a.getTime()))}:{since:n,until:s},x={userId:e.id,since:ej(g.since),until:ej(g.until)},f=(e,t)=>i.queryAnalytics({query:e,params:t,timeout_ms:3e4,include_all_branches:!1});return(0,K.runAsynchronously)(async()=>{let e,[a,n,i,s,d]=await Promise.all([f(eS,h),f(eC,x),f(eN,{...l,limit:10}),f(eI,{...l,limit:10}),f(e_,{...l,limit:50,offset:0})]);if(t.cancelled)return;let u=ek(d.result);c.current={params:l,token:t},o({rows:u,hasMore:u.length>=50,isLoadingMore:!1}),r({status:"ready",data:{summary:{total_events:ew((e=a.result[0]??(0,Y.throwErr)("SUMMARY_QUERY returned zero rows; expected exactly one aggregate row")).total_events),page_views:ew(e.page_views),clicks:ew(e.clicks),sessions:ew(e.sessions),prev_total_events:ew(e.prev_total_events),prev_page_views:ew(e.prev_page_views),prev_clicks:ew(e.prev_clicks),prev_sessions:ew(e.prev_sessions),last_event_at:eA(e.last_event_at)},daily:n.result.map(e=>({day:String(e.day??""),total_events:ew(e.total_events),page_views:ew(e.page_views),clicks:ew(e.clicks),sessions:ew(e.sessions)})).filter(e=>e.day.length>0),topPages:function(e){let t=[];for(let a of e){let e=eA(a.path);null!=e&&t.push({path:e,views:ew(a.views)})}return t}(i.result),topReferrers:function(e){let t=[];for(let a of e){let e=eA(a.referrer);null!=e&&t.push({referrer:e,views:ew(a.views)})}return t}(s.result)}})},{noErrorLogging:!0,onError:e=>{t.cancelled||((0,Y.captureError)("user-analytics-query",e),r({status:"error"}))}}),()=>{t.cancelled=!0}},[i,e.id,d]);let u=(0,T.useCallback)(()=>{if(l.isLoadingMore||!l.hasMore)return;let e=c.current;if(!e)return;let t=l.rows.length;o(e=>({...e,isLoadingMore:!0})),(0,K.runAsynchronously)(async()=>{let a=await i.queryAnalytics({query:e_,params:{...e.params,limit:50,offset:t},timeout_ms:3e4,include_all_branches:!1});if(e.token.cancelled)return;let n=ek(a.result);o(e=>({rows:[...e.rows,...n],hasMore:n.length>=50,isLoadingMore:!1}))},{noErrorLogging:!0,onError:t=>{e.token.cancelled||((0,Y.captureError)("user-analytics-recent-load-more",t),o(e=>({...e,isLoadingMore:!1,hasMore:!1})))}})},[i,l]);return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[a&&(0,t.jsx)(e$,{dayFilter:a,onClear:n}),"loading"===s.status?(0,t.jsx)(eB,{}):"error"===s.status?(0,t.jsx)(ez,{}):(0,t.jsx)(eV,{data:s.data,dayFilter:a??null,recent:l,onLoadMoreRecent:u})]})}function e$({dayFilter:e,onClear:a}){return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-2xl border border-foreground/[0.06] bg-foreground/[0.03] px-4 py-2.5",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,t.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Filtered by day"}),(0,t.jsx)("span",{className:"text-sm font-medium text-foreground",children:eM(e)})]}),a&&(0,t.jsxs)(f.Button,{variant:"outline",size:"sm",onClick:a,className:"gap-1.5",children:[(0,t.jsx)(eu,{size:14}),"Remove filter"]})]})}function eB(){return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:Array.from({length:4}).map((e,a)=>(0,t.jsx)(j.Skeleton,{className:"h-[64px] rounded-2xl"},a))}),(0,t.jsx)(j.Skeleton,{className:"h-[280px] rounded-2xl"}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,t.jsx)(j.Skeleton,{className:"h-[220px] rounded-2xl"})]})]})}function ez(){return(0,t.jsx)(es.DesignCard,{title:"Analytics unavailable",icon:em.WarningCircleIcon,children:(0,t.jsxs)("div",{className:"flex flex-col items-center gap-1 py-8 text-center",children:[(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"We couldn't load analytics for this user."}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground/70",children:"Please try again in a moment."})]})})}function eV({data:e,dayFilter:a,recent:n,onLoadMoreRecent:i}){let s=e.summary.total_events>0,r=(0,T.useMemo)(()=>{let t=e.summary.last_event_at;if(null==t)return null;let a=new Date(t.includes("T")?t:t.replace(" ","T")+"Z");return Number.isNaN(a.getTime())?null:a},[e.summary.last_event_at]),l=(0,T.useMemo)(()=>{let t=new Date;if(a){let n=eR(a);if(!n)return e.daily;let i=new Date(n.since.getTime()-1296e6),s=new Date(new Date(n.until.getTime()-1).getTime()+1296e6),r=s.getTime()<t.getTime()?s:t;return eF(e.daily,{startUtc:i,endUtcInclusive:r})}let n=new Date(t.getTime()-25056e5);return eF(e.daily,{startUtc:n,endUtcInclusive:t})},[e.daily,a]),o=a?eM(a):"Last 7 days",c=a?`Page views and clicks around ${eM(a)}`:"Page views and clicks over the last 30 days",d=(0,T.useMemo)(()=>{if(a)return null;let e=l.slice(-7);return{total_events:e.map(e=>e.total_events),page_views:e.map(e=>e.page_views),clicks:e.map(e=>e.clicks),sessions:e.map(e=>e.sessions)}},[l,a]),u=(e,t,n)=>a?void 0:{current:e,previous:t,comparisonLabel:n},m="vs. previous 7 days";return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[(0,t.jsx)(ey.UserPageMetricCard,{label:"Total Events",value:eD(e.summary.total_events),description:o,gradient:"blue",delta:u(e.summary.total_events,e.summary.prev_total_events,m),spark:d?{values:d.total_events}:void 0}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Page Views",value:eD(e.summary.page_views),description:r?`Last seen ${r.toLocaleDateString()}`:o,gradient:"cyan",delta:u(e.summary.page_views,e.summary.prev_page_views,m),spark:d?{values:d.page_views}:void 0}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Clicks",value:eD(e.summary.clicks),description:a?"On selected day":o,gradient:"green",delta:u(e.summary.clicks,e.summary.prev_clicks,m),spark:d?{values:d.clicks}:void 0}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Sessions",value:eD(e.summary.sessions),description:"Recorded replays",gradient:"purple",delta:u(e.summary.sessions,e.summary.prev_sessions,m),spark:d?{values:d.sessions}:void 0})]}),(0,t.jsx)("div",{className:"xl:hidden",children:(0,t.jsx)(eZ,{daily:l,hasAnyEvent:s,description:c})}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(eq,{title:"Top Pages",rows:e.topPages.map(e=>({label:e.path,count:e.views})),emptyMessage:"No page views yet"}),(0,t.jsx)(eq,{title:"Top Referrers",rows:e.topReferrers.map(e=>({label:e.referrer,count:e.views})),emptyMessage:"No referrer data yet"}),(0,t.jsx)(eH,{events:n.rows,hasMore:n.hasMore,isLoadingMore:n.isLoadingMore,onLoadMore:i})]})]})}function eZ({daily:e,hasAnyEvent:a,description:n}){let i=(0,ec.getDesignChartColor)(0),s=(0,ec.getDesignChartColor)(1);return(0,t.jsx)(er.DesignChartCard,{gradient:"blue",title:"Daily activity",description:n,children:a?(0,t.jsx)(el.DesignChartContainer,{config:{page_views:{label:"Page views",color:i},clicks:{label:"Clicks",color:s}},maxHeight:240,className:"h-[240px] w-full",children:(0,t.jsxs)(eh.AreaChart,{data:e,margin:{top:8,right:12,bottom:0,left:0},children:[(0,t.jsxs)("defs",{children:[(0,t.jsxs)("linearGradient",{id:"user-analytics-pv-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,t.jsx)("stop",{offset:"0%",stopColor:i,stopOpacity:.35}),(0,t.jsx)("stop",{offset:"100%",stopColor:i,stopOpacity:.02})]}),(0,t.jsxs)("linearGradient",{id:"user-analytics-click-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,t.jsx)("stop",{offset:"0%",stopColor:s,stopOpacity:.3}),(0,t.jsx)("stop",{offset:"100%",stopColor:s,stopOpacity:.02})]})]}),(0,t.jsx)(eg.CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--border))",vertical:!1}),(0,t.jsx)(ef.XAxis,{dataKey:"day",tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,minTickGap:32,tickFormatter:eU}),(0,t.jsx)(ev.YAxis,{tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,allowDecimals:!1,width:28}),(0,t.jsx)(ex.Tooltip,{cursor:{stroke:"hsl(var(--border))"},content:(0,t.jsx)(eo.DesignChartTooltipContent,{labelFormatter:(e,t)=>{let a=function(e){for(let t of e){if("object"!=typeof t||null===t||!("payload"in t))continue;let e=t.payload;if("object"==typeof e&&null!==e&&"day"in e&&"string"==typeof e.day)return e.day}return null}(t);return null===a?"":eM(a)},indicator:"dot"})}),(0,t.jsx)(ep.Area,{type:"monotone",dataKey:"page_views",stroke:i,strokeWidth:1.5,fill:"url(#user-analytics-pv-fill)",isAnimationActive:!1}),(0,t.jsx)(ep.Area,{type:"monotone",dataKey:"clicks",stroke:s,strokeWidth:1.5,fill:"url(#user-analytics-click-fill)",isAnimationActive:!1})]})}):(0,t.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"No events recorded for this user yet."})})}function eq({title:e,rows:a,emptyMessage:n}){let i=a[0]?.count??0,s=(0,T.useMemo)(()=>[{id:"label",accessor:"label",header:"Path",width:280,flex:1,sortable:!1,renderCell:({row:e})=>{let a=i>0?e.count/i*100:0;return(0,t.jsxs)("div",{className:"relative -mx-2 flex w-[calc(100%+1rem)] items-center overflow-hidden rounded-lg px-2 py-1.5",children:[(0,t.jsx)("div",{className:"absolute inset-y-0 left-0 rounded-lg bg-blue-500/10 dark:bg-blue-400/10",style:{width:`${a}%`},"aria-hidden":!0}),(0,t.jsxs)(A.Tooltip,{delayDuration:150,children:[(0,t.jsx)(A.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"relative truncate text-xs text-foreground",children:e.label})}),(0,t.jsx)(A.TooltipContent,{side:"top",className:"text-xs max-w-[360px] break-all",children:e.label})]})]})}},{id:"count",accessor:"count",header:"Views",width:110,align:"right",sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm font-medium tabular-nums text-foreground",children:e.count.toLocaleString()})}],[i]);return(0,t.jsx)(eb.UserPageTableSection,{title:e,urlStateKey:e.toLowerCase().replace(/[^a-z0-9]/g,"").slice(0,12),columns:s,rows:a,getRowId:e=>e.label,emptyLabel:n})}function eH({events:e,hasMore:a,isLoadingMore:n,onLoadMore:i}){let s=(0,T.useMemo)(()=>e.map((e,t)=>({...e,id:`${e.event_at}-${t}`})),[e]),r=(0,T.useMemo)(()=>[{id:"event_type",accessor:"event_type",header:"Event",width:140,sortable:!1,renderCell:({row:e})=>{let a=function(e){switch(e){case"$page-view":return{label:"Page view",color:"blue"};case"$click":return{label:"Click",color:"green"};case"$token-refresh":return{label:"Refresh",color:"purple"};default:{let t=e.replace(/^\$/,"");return{label:t.length>0?t:"Event",color:"blue"}}}}(e.event_type);return(0,t.jsx)(ei.DesignBadge,{label:a.label,color:a.color,size:"sm"})}},{id:"label",header:"Detail",width:280,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"truncate text-sm text-foreground",children:function(e){switch(e.event_type){case"$page-view":return e.path??e.url??"Page view";case"$click":{let t=e.click_text?.trim();if(null!=t&&t.length>0)return t.length>60?t.slice(0,60)+"...":t;if(null!=e.tag_name)return`<${e.tag_name.toLowerCase()}>`;return"Click"}case"$token-refresh":return"Session refresh";default:return e.event_type.replace(/^\$/,"")}}(e)})},{id:"event_at",accessor:"event_at",header:"Time",width:150,sortable:!1,renderCell:({row:e})=>{var a;let n;return(0,t.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:Number.isNaN((n=new Date((a=e.event_at).includes("T")?a:a.replace(" ","T")+"Z")).getTime())?a:eP.format(n)})}}],[]);return(0,t.jsx)(eb.UserPageTableSection,{title:"Recent activity",urlStateKey:"userevents",columns:r,rows:s,getRowId:e=>e.id,emptyLabel:"No recent events for this user.",hasMore:a,isLoadingMore:n,onLoadMore:i})}var eW=e.i(149724),eG=e.i(273501),eY=e.i(997369),eK=e.i(448527),eQ=e.i(359855),eX=e.i(991063),eJ=e.i(447062);let e0=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric"}),e1=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"});function e2(e){return"money_transfer"===e.type}function e6(e){return"product_grant"===e.type}function e8(e){return"product_revocation"===e.type}function e4(e){return Number.isFinite(e)?e.toLocaleString(void 0,{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}):((0,Y.captureError)("user-payments-format-usd-non-finite",Error(`formatUsd received non-finite amount: ${String(e)}`)),"—")}function e3({user:e}){return(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(e5,{}),children:(0,t.jsx)(e9,{user:e})})}function e5(){return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:Array.from({length:3}).map((e,a)=>(0,t.jsx)(j.Skeleton,{className:"h-[64px] rounded-2xl"},a))}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"})]})]})}function e9({user:e}){let a=(0,en.useAdminApp)(),n=a.useProject().useConfig(),{transactions:i}=a.useTransactions({limit:100,customerType:"user",customerId:e.id}),s=(0,T.useMemo)(()=>Object.entries(n.payments.items).filter(([,e])=>"user"===e.customerType).map(([e])=>e),[n.payments.items]);return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)(te,{userId:e.id,transactions:i}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(tt,{userId:e.id,transactions:i}),(0,t.jsx)(ta,{userId:e.id,transactions:i})]}),(0,t.jsx)(tn,{userId:e.id,itemIds:s})]})}function e7(e,t){let a=new Set;for(let t of e)for(let e of t.entries)e8(e)&&a.add(`${e.adjusted_transaction_id}:${e.adjusted_entry_index}`);let n=new Set;for(let t of e)if("subscription-cancellation"===t.type){for(let a of t.entries)if(e8(a)){let t=e.find(e=>e.id===a.adjusted_transaction_id),i=t?.entries[a.adjusted_entry_index];i&&e6(i)&&i.subscription_id&&n.add(i.subscription_id)}}let i=[];for(let s of e)s.entries.forEach((e,r)=>{!e6(e)||"user"!==e.customer_type||e.customer_id!==t||a.has(`${s.id}:${r}`)||e.subscription_id&&n.has(e.subscription_id)||i.push({key:`${s.id}:${r}`,productDisplayName:e.product.display_name,quantity:e.quantity,subscriptionId:e.subscription_id,grantedAt:new Date(s.effective_at_millis),stackable:e.product.stackable})});let s=new Set,r=[];for(let e of i.sort((e,t)=>t.grantedAt.getTime()-e.grantedAt.getTime())){if(e.subscriptionId){if(s.has(e.subscriptionId))continue;s.add(e.subscriptionId)}r.push(e)}return r}function te({userId:e,transactions:a}){let n=(0,T.useMemo)(()=>e7(a,e),[a,e]),i=(0,T.useMemo)(()=>n.filter(e=>null!=e.subscriptionId).length,[n]),s=(0,T.useMemo)(()=>n.reduce((e,t)=>e+(t.stackable?t.quantity:1),0),[n]),r=(0,T.useMemo)(()=>{let t=0;for(let n of a)if(!n.test_mode)for(let a of n.entries){if(!e2(a)||"user"!==a.customer_type||a.customer_id!==e)continue;let n=a.net_amount.USD;if("string"!=typeof n)continue;let i=Number.parseFloat(n);Number.isFinite(i)&&(t+=i)}return t},[a,e]),l=a.length;return(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[(0,t.jsx)(ey.UserPageMetricCard,{label:"Active subscriptions",value:i,description:0===i?"None":`${i} running`,gradient:"blue"}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Products owned",value:s,description:0===s?"None":`${n.length} distinct`,gradient:"purple"}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Lifetime spend",value:e4(r),description:0===l?"No transactions":`Across ${l} transaction${1===l?"":"s"}`,gradient:"green"})]})}function tt({userId:e,transactions:a}){let n=(0,T.useMemo)(()=>e7(a,e),[a,e]),i=(0,T.useMemo)(()=>[{id:"productDisplayName",accessor:"productDisplayName",header:"Product",width:240,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:e.productDisplayName})},{id:"type",header:"Type",width:130,sortable:!1,renderCell:({row:e})=>(0,t.jsx)(ei.DesignBadge,{label:e.subscriptionId?"Subscription":"One-time",color:e.subscriptionId?"blue":"purple",size:"sm"})},{id:"quantity",accessor:"quantity",header:"Quantity",width:100,align:"right",sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"font-medium tabular-nums text-foreground",children:e.stackable?e.quantity:1})},{id:"grantedAt",accessor:"grantedAt",header:"Granted",width:140,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:e0.format(e.grantedAt)})}],[]);return(0,t.jsx)(eb.UserPageTableSection,{title:"Products & subscriptions",urlStateKey:"usersubs",columns:i,rows:n,getRowId:e=>e.key,emptyLabel:"This user has no active products or subscriptions."})}function ta({userId:e,transactions:a}){let n=(0,T.useMemo)(()=>[...a].sort((e,t)=>t.created_at_millis-e.created_at_millis),[a]),i=(0,T.useMemo)(()=>[{id:"type",header:"Type",width:190,sortable:!1,renderCell:({row:e})=>{let{label:a,Icon:n}=function(e){switch(e){case"purchase":return{label:"Purchase",Icon:eX.ShoppingCartIcon};case"subscription-renewal":return{label:"Subscription renewal",Icon:eW.ArrowClockwiseIcon};case"subscription-cancellation":return{label:"Subscription cancellation",Icon:z.ProhibitIcon};case"chargeback":return{label:"Chargeback",Icon:eG.ArrowCounterClockwiseIcon};case"manual-item-quantity-change":return{label:"Item quantity change",Icon:eK.GearIcon};case"product-change":return{label:"Product change",Icon:eJ.ShuffleIcon};default:return{label:"-",Icon:eQ.QuestionIcon}}}(e.type);return(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-foreground/[0.06]",children:(0,t.jsx)(n,{className:"h-4 w-4 text-foreground/70","aria-hidden":!0})}),(0,t.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:a})]})}},{id:"detail",header:"Detail",width:240,flex:1,sortable:!1,renderCell:({row:a})=>(0,t.jsx)("span",{className:"truncate text-sm text-muted-foreground",children:function(e,t){let a=e.entries.find(e=>e6(e)&&"user"===e.customer_type&&e.customer_id===t);if(a){let e=a.product.display_name;return a.quantity>1?`${e} x${a.quantity}`:e}let n=e.entries.find(e=>"item_quantity_change"===e.type&&"user"===e.customer_type&&e.customer_id===t);if(n){let e=n.quantity;return`${n.item_id} (${e>0?"+":""}${e})`}return"-"}(a,e)})},{id:"createdAt",accessor:e=>e.created_at_millis,header:"Date",width:140,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm text-muted-foreground tabular-nums",title:e1.format(new Date(e.created_at_millis)),children:e0.format(new Date(e.created_at_millis))})},{id:"amount",header:"Amount",width:120,align:"right",sortable:!1,renderCell:({row:a})=>{if(a.test_mode)return(0,t.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"Test"});let n=function(e,t){let a=0,n=!1;for(let i of e.entries){if(!e2(i)||"user"!==i.customer_type||i.customer_id!==t)continue;let e=i.net_amount.USD;if("string"!=typeof e)continue;let s=Number.parseFloat(e);Number.isFinite(s)&&(a+=s,n=!0)}return n?a:null}(a,e);return null==n?(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"-"}):(0,t.jsxs)("span",{className:(0,v.cn)("text-sm font-medium tabular-nums",n<0?"text-muted-foreground":"text-foreground"),children:[n<0?"-":"",e4(Math.abs(n))]})}},{id:"status",header:"Status",width:110,sortable:!1,renderCell:({row:e})=>{var a;let n=(a=e,e.adjusted_by.length>0?{label:"Refunded",color:"orange"}:a.test_mode?{label:"Test",color:"purple"}:null);return n?(0,t.jsx)(ei.DesignBadge,{label:n.label,color:n.color,size:"sm"}):(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:"-"})}}],[e]);return(0,t.jsx)(eb.UserPageTableSection,{title:"Transaction history",urlStateKey:"usertxns",columns:i,rows:n,getRowId:e=>e.id,emptyLabel:"This user has no transactions.",paginated:!0})}function tn({userId:e,itemIds:a}){return 0===a.length?null:(0,t.jsx)(es.DesignCard,{title:"Item balances",subtitle:`${a.length} user-scoped item${1===a.length?"":"s"}`,icon:eY.CoinsIcon,children:(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-x-4 gap-y-1",children:a.map(a=>(0,t.jsx)(T.Suspense,{fallback:(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",children:[(0,t.jsx)(j.Skeleton,{className:"h-4 w-32"}),(0,t.jsx)(j.Skeleton,{className:"h-4 w-8"})]}),children:(0,t.jsx)(ti,{userId:e,itemId:a})},a))})})}function ti({userId:e,itemId:a}){let n=(0,en.useAdminApp)().useItem({userId:e,itemId:a}),i=n.quantity<0;return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",title:a,children:[(0,t.jsx)("span",{className:"truncate text-sm text-foreground",children:n.displayName}),(0,t.jsx)("span",{className:`shrink-0 text-sm font-semibold tabular-nums ${i?"text-destructive":"text-foreground"}`,children:n.quantity})]})}let ts=(0,e.i(588698).default)(()=>e.A(419568),{loadableGenerated:{modules:[611973]},ssr:!1,loading:()=>(0,t.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading session replays…"})});function tr({user:e}){let a=e.primaryEmail??e.id,n=e.displayName??a,[i,l]=(0,T.useState)(!1),[o,c]=(0,T.useState)(!1),[d,u]=(0,T.useState)(null),m=(0,en.useAdminApp)();return(0,t.jsxs)("div",{className:"flex min-w-0 gap-4 items-center",children:[(0,t.jsxs)(x.Avatar,{className:"w-20 h-20 shrink-0",children:[(0,t.jsx)(x.AvatarImage,{src:e.profileImageUrl??void 0,alt:n}),(0,t.jsx)(x.AvatarFallback,{children:n.slice(0,2)})]}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)(r.EditableInput,{value:n,initialEditValue:e.displayName??"",placeholder:a,shiftTextToLeft:!0,inputClassName:"font-semibold text-3xl",onUpdate:async t=>{await e.setDisplayName(t)}}),(0,t.jsxs)("p",{children:["Last active ",(0,G.fromNow)(e.lastActiveAt)]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(s.DesignMenu,{variant:"actions",trigger:"icon",triggerLabel:"User actions",align:"end",items:[{id:"impersonate",label:"Impersonate",onClick:()=>{(0,K.runAsynchronouslyWithAlert)(async()=>{let t=new Date(Date.now()+72e5),a=await e.createSession({expiresInMillis:72e5}),n=await a.getTokens();u(Q.deindent`
|
|
111
|
-
document.cookie = 'stack-refresh-${m.projectId}=${
|
|
110
|
+
`;function ek(e){return e.map(e=>({event_type:String(e.event_type??""),event_at:String(e.event_at_str??""),path:eA(e.path),url:eA(e.url),click_text:eA(e.click_text),tag_name:eA(e.tag_name)}))}function eT(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e4?`${(e/1e3).toFixed(1)}k`:e.toLocaleString()}let eD=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"}),eE=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function eL(e){let t=e.split("-").map(Number);return 3!==t.length||t.some(e=>!Number.isFinite(e))?null:new Date(Date.UTC(t[0],t[1]-1,t[2]))}function eU(e){let t=eL(e);return t?eD.format(t):e}function eM(e){let t=eL(e);return t?eE.format(t):e}let eP=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function eF(e,t){let a=new Map(e.map(e=>[e.day,e])),s=[],n=new Date(Date.UTC(t.startUtc.getUTCFullYear(),t.startUtc.getUTCMonth(),t.startUtc.getUTCDate())),i=Date.UTC(t.endUtcInclusive.getUTCFullYear(),t.endUtcInclusive.getUTCMonth(),t.endUtcInclusive.getUTCDate());for(;n.getTime()<=i;){let e=n.toISOString().slice(0,10),t=a.get(e);s.push({day:e,total_events:t?.total_events??0,page_views:t?.page_views??0,clicks:t?.clicks??0,sessions:t?.sessions??0}),n.setUTCDate(n.getUTCDate()+1)}return s}function eR(e){let t=e.split("-").map(Number);if(3!==t.length||t.some(e=>!Number.isFinite(e)))return null;let a=new Date(Date.UTC(t[0],t[1]-1,t[2])),s=new Date(a);return s.setUTCDate(s.getUTCDate()+1),{since:a,until:s}}function eO({user:e,dayFilter:a,onClearDayFilter:s}){let n=(0,es.useAdminApp)(),[i,r]=(0,D.useState)({status:"loading"}),[l,o]=(0,D.useState)({rows:[],hasMore:!1,isLoadingMore:!1}),c=(0,D.useRef)(null),d=(0,D.useMemo)(()=>a?eR(a):null,[a]);(0,D.useEffect)(()=>{let t={cancelled:!1};r({status:"loading"}),o({rows:[],hasMore:!1,isLoadingMore:!1}),c.current=null;let a=new Date,s=d?d.since:new Date(a.getTime()-2592e6),i=d?d.until:a,l={userId:e.id,since:ej(s),until:ej(i)},u=d?d.since:new Date(a.getTime()-6048e5),m=d?d.until:a,p=d?u:new Date(u.getTime()-6048e5),h={userId:e.id,since:ej(u),until:ej(m),prevSince:ej(p)},g=d?{since:new Date(d.since.getTime()-1296e6),until:new Date(Math.min(d.until.getTime()+1296e6,a.getTime()))}:{since:s,until:i},x={userId:e.id,since:ej(g.since),until:ej(g.until)},f=(e,t)=>n.queryAnalytics({query:e,params:t,timeout_ms:3e4,include_all_branches:!1});return(0,Y.runAsynchronously)(async()=>{let e,[a,s,n,i,d]=await Promise.all([f(eS,h),f(eC,x),f(eN,{...l,limit:10}),f(eI,{...l,limit:10}),f(e_,{...l,limit:50,offset:0})]);if(t.cancelled)return;let u=ek(d.result);c.current={params:l,token:t},o({rows:u,hasMore:u.length>=50,isLoadingMore:!1}),r({status:"ready",data:{summary:{total_events:ew((e=a.result[0]??(0,K.throwErr)("SUMMARY_QUERY returned zero rows; expected exactly one aggregate row")).total_events),page_views:ew(e.page_views),clicks:ew(e.clicks),sessions:ew(e.sessions),prev_total_events:ew(e.prev_total_events),prev_page_views:ew(e.prev_page_views),prev_clicks:ew(e.prev_clicks),prev_sessions:ew(e.prev_sessions),last_event_at:eA(e.last_event_at)},daily:s.result.map(e=>({day:String(e.day??""),total_events:ew(e.total_events),page_views:ew(e.page_views),clicks:ew(e.clicks),sessions:ew(e.sessions)})).filter(e=>e.day.length>0),topPages:function(e){let t=[];for(let a of e){let e=eA(a.path);null!=e&&t.push({path:e,views:ew(a.views)})}return t}(n.result),topReferrers:function(e){let t=[];for(let a of e){let e=eA(a.referrer);null!=e&&t.push({referrer:e,views:ew(a.views)})}return t}(i.result)}})},{noErrorLogging:!0,onError:e=>{t.cancelled||((0,K.captureError)("user-analytics-query",e),r({status:"error"}))}}),()=>{t.cancelled=!0}},[n,e.id,d]);let u=(0,D.useCallback)(()=>{if(l.isLoadingMore||!l.hasMore)return;let e=c.current;if(!e)return;let t=l.rows.length;o(e=>({...e,isLoadingMore:!0})),(0,Y.runAsynchronously)(async()=>{let a=await n.queryAnalytics({query:e_,params:{...e.params,limit:50,offset:t},timeout_ms:3e4,include_all_branches:!1});if(e.token.cancelled)return;let s=ek(a.result);o(e=>({rows:[...e.rows,...s],hasMore:s.length>=50,isLoadingMore:!1}))},{noErrorLogging:!0,onError:t=>{e.token.cancelled||((0,K.captureError)("user-analytics-recent-load-more",t),o(e=>({...e,isLoadingMore:!1,hasMore:!1})))}})},[n,l]);return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[a&&(0,t.jsx)(e$,{dayFilter:a,onClear:s}),"loading"===i.status?(0,t.jsx)(eB,{}):"error"===i.status?(0,t.jsx)(ez,{}):(0,t.jsx)(eV,{data:i.data,dayFilter:a??null,recent:l,onLoadMoreRecent:u})]})}function e$({dayFilter:e,onClear:a}){return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-2xl border border-foreground/[0.06] bg-foreground/[0.03] px-4 py-2.5",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,t.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Filtered by day"}),(0,t.jsx)("span",{className:"text-sm font-medium text-foreground",children:eM(e)})]}),a&&(0,t.jsxs)(f.Button,{variant:"outline",size:"sm",onClick:a,className:"gap-1.5",children:[(0,t.jsx)(eu,{size:14}),"Remove filter"]})]})}function eB(){return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:Array.from({length:4}).map((e,a)=>(0,t.jsx)(j.Skeleton,{className:"h-[64px] rounded-2xl"},a))}),(0,t.jsx)(j.Skeleton,{className:"h-[280px] rounded-2xl"}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,t.jsx)(j.Skeleton,{className:"h-[220px] rounded-2xl"})]})]})}function ez(){return(0,t.jsx)(ei.DesignCard,{title:"Analytics unavailable",icon:em.WarningCircleIcon,children:(0,t.jsxs)("div",{className:"flex flex-col items-center gap-1 py-8 text-center",children:[(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"We couldn't load analytics for this user."}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground/70",children:"Please try again in a moment."})]})})}function eV({data:e,dayFilter:a,recent:s,onLoadMoreRecent:n}){let i=e.summary.total_events>0,r=(0,D.useMemo)(()=>{let t=e.summary.last_event_at;if(null==t)return null;let a=new Date(t.includes("T")?t:t.replace(" ","T")+"Z");return Number.isNaN(a.getTime())?null:a},[e.summary.last_event_at]),l=(0,D.useMemo)(()=>{let t=new Date;if(a){let s=eR(a);if(!s)return e.daily;let n=new Date(s.since.getTime()-1296e6),i=new Date(new Date(s.until.getTime()-1).getTime()+1296e6),r=i.getTime()<t.getTime()?i:t;return eF(e.daily,{startUtc:n,endUtcInclusive:r})}let s=new Date(t.getTime()-25056e5);return eF(e.daily,{startUtc:s,endUtcInclusive:t})},[e.daily,a]),o=a?eM(a):"Last 7 days",c=a?`Page views and clicks around ${eM(a)}`:"Page views and clicks over the last 30 days",d=(0,D.useMemo)(()=>{if(a)return null;let e=l.slice(-7);return{total_events:e.map(e=>e.total_events),page_views:e.map(e=>e.page_views),clicks:e.map(e=>e.clicks),sessions:e.map(e=>e.sessions)}},[l,a]),u=(e,t,s)=>a?void 0:{current:e,previous:t,comparisonLabel:s},m="vs. previous 7 days";return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[(0,t.jsx)(ey.UserPageMetricCard,{label:"Total Events",value:eT(e.summary.total_events),description:o,gradient:"blue",delta:u(e.summary.total_events,e.summary.prev_total_events,m),spark:d?{values:d.total_events}:void 0}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Page Views",value:eT(e.summary.page_views),description:r?`Last seen ${r.toLocaleDateString()}`:o,gradient:"cyan",delta:u(e.summary.page_views,e.summary.prev_page_views,m),spark:d?{values:d.page_views}:void 0}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Clicks",value:eT(e.summary.clicks),description:a?"On selected day":o,gradient:"green",delta:u(e.summary.clicks,e.summary.prev_clicks,m),spark:d?{values:d.clicks}:void 0}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Sessions",value:eT(e.summary.sessions),description:"Recorded replays",gradient:"purple",delta:u(e.summary.sessions,e.summary.prev_sessions,m),spark:d?{values:d.sessions}:void 0})]}),(0,t.jsx)("div",{className:"xl:hidden",children:(0,t.jsx)(eZ,{daily:l,hasAnyEvent:i,description:c})}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(eq,{title:"Top Pages",rows:e.topPages.map(e=>({label:e.path,count:e.views})),emptyMessage:"No page views yet"}),(0,t.jsx)(eq,{title:"Top Referrers",rows:e.topReferrers.map(e=>({label:e.referrer,count:e.views})),emptyMessage:"No referrer data yet"}),(0,t.jsx)(eH,{events:s.rows,hasMore:s.hasMore,isLoadingMore:s.isLoadingMore,onLoadMore:n})]})]})}function eZ({daily:e,hasAnyEvent:a,description:s}){let n=(0,ec.getDesignChartColor)(0),i=(0,ec.getDesignChartColor)(1);return(0,t.jsx)(er.DesignChartCard,{gradient:"blue",title:"Daily activity",description:s,children:a?(0,t.jsx)(el.DesignChartContainer,{config:{page_views:{label:"Page views",color:n},clicks:{label:"Clicks",color:i}},maxHeight:240,className:"h-[240px] w-full",children:(0,t.jsxs)(eh.AreaChart,{data:e,margin:{top:8,right:12,bottom:0,left:0},children:[(0,t.jsxs)("defs",{children:[(0,t.jsxs)("linearGradient",{id:"user-analytics-pv-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,t.jsx)("stop",{offset:"0%",stopColor:n,stopOpacity:.35}),(0,t.jsx)("stop",{offset:"100%",stopColor:n,stopOpacity:.02})]}),(0,t.jsxs)("linearGradient",{id:"user-analytics-click-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,t.jsx)("stop",{offset:"0%",stopColor:i,stopOpacity:.3}),(0,t.jsx)("stop",{offset:"100%",stopColor:i,stopOpacity:.02})]})]}),(0,t.jsx)(eg.CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--border))",vertical:!1}),(0,t.jsx)(ef.XAxis,{dataKey:"day",tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,minTickGap:32,tickFormatter:eU}),(0,t.jsx)(ev.YAxis,{tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,allowDecimals:!1,width:28}),(0,t.jsx)(ex.Tooltip,{cursor:{stroke:"hsl(var(--border))"},content:(0,t.jsx)(eo.DesignChartTooltipContent,{labelFormatter:(e,t)=>{let a=function(e){for(let t of e){if("object"!=typeof t||null===t||!("payload"in t))continue;let e=t.payload;if("object"==typeof e&&null!==e&&"day"in e&&"string"==typeof e.day)return e.day}return null}(t);return null===a?"":eM(a)},indicator:"dot"})}),(0,t.jsx)(ep.Area,{type:"monotone",dataKey:"page_views",stroke:n,strokeWidth:1.5,fill:"url(#user-analytics-pv-fill)",isAnimationActive:!1}),(0,t.jsx)(ep.Area,{type:"monotone",dataKey:"clicks",stroke:i,strokeWidth:1.5,fill:"url(#user-analytics-click-fill)",isAnimationActive:!1})]})}):(0,t.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"No events recorded for this user yet."})})}function eq({title:e,rows:a,emptyMessage:s}){let n=a[0]?.count??0,i=(0,D.useMemo)(()=>[{id:"label",accessor:"label",header:"Path",width:280,flex:1,sortable:!1,renderCell:({row:e})=>{let a=n>0?e.count/n*100:0;return(0,t.jsxs)("div",{className:"relative -mx-2 flex w-[calc(100%+1rem)] items-center overflow-hidden rounded-lg px-2 py-1.5",children:[(0,t.jsx)("div",{className:"absolute inset-y-0 left-0 rounded-lg bg-blue-500/10 dark:bg-blue-400/10",style:{width:`${a}%`},"aria-hidden":!0}),(0,t.jsxs)(A.Tooltip,{delayDuration:150,children:[(0,t.jsx)(A.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{className:"relative truncate text-xs text-foreground",children:e.label})}),(0,t.jsx)(A.TooltipContent,{side:"top",className:"text-xs max-w-[360px] break-all",children:e.label})]})]})}},{id:"count",accessor:"count",header:"Views",width:110,align:"right",sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm font-medium tabular-nums text-foreground",children:e.count.toLocaleString()})}],[n]);return(0,t.jsx)(eb.UserPageTableSection,{title:e,urlStateKey:e.toLowerCase().replace(/[^a-z0-9]/g,"").slice(0,12),columns:i,rows:a,getRowId:e=>e.label,emptyLabel:s})}function eH({events:e,hasMore:a,isLoadingMore:s,onLoadMore:n}){let i=(0,D.useMemo)(()=>e.map((e,t)=>({...e,id:`${e.event_at}-${t}`})),[e]),r=(0,D.useMemo)(()=>[{id:"event_type",accessor:"event_type",header:"Event",width:140,sortable:!1,renderCell:({row:e})=>{let a=function(e){switch(e){case"$page-view":return{label:"Page view",color:"blue"};case"$click":return{label:"Click",color:"green"};case"$token-refresh":return{label:"Refresh",color:"purple"};default:{let t=e.replace(/^\$/,"");return{label:t.length>0?t:"Event",color:"blue"}}}}(e.event_type);return(0,t.jsx)(en.DesignBadge,{label:a.label,color:a.color,size:"sm"})}},{id:"label",header:"Detail",width:280,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"truncate text-sm text-foreground",children:function(e){switch(e.event_type){case"$page-view":return e.path??e.url??"Page view";case"$click":{let t=e.click_text?.trim();if(null!=t&&t.length>0)return t.length>60?t.slice(0,60)+"...":t;if(null!=e.tag_name)return`<${e.tag_name.toLowerCase()}>`;return"Click"}case"$token-refresh":return"Session refresh";default:return e.event_type.replace(/^\$/,"")}}(e)})},{id:"event_at",accessor:"event_at",header:"Time",width:150,sortable:!1,renderCell:({row:e})=>{var a;let s;return(0,t.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:Number.isNaN((s=new Date((a=e.event_at).includes("T")?a:a.replace(" ","T")+"Z")).getTime())?a:eP.format(s)})}}],[]);return(0,t.jsx)(eb.UserPageTableSection,{title:"Recent activity",urlStateKey:"userevents",columns:r,rows:i,getRowId:e=>e.id,emptyLabel:"No recent events for this user.",hasMore:a,isLoadingMore:s,onLoadMore:n})}var eW=e.i(149724),eG=e.i(273501),eK=e.i(997369),eY=e.i(448527),eQ=e.i(359855),eX=e.i(991063),eJ=e.i(447062);let e0=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric"}),e1=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"});function e2(e){return"money_transfer"===e.type}function e6(e){return"product_grant"===e.type}function e8(e){return"product_revocation"===e.type}function e4(e){return Number.isFinite(e)?e.toLocaleString(void 0,{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}):((0,K.captureError)("user-payments-format-usd-non-finite",Error(`formatUsd received non-finite amount: ${String(e)}`)),"—")}function e3({user:e}){return(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(e5,{}),children:(0,t.jsx)(e9,{user:e})})}function e5(){return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:Array.from({length:3}).map((e,a)=>(0,t.jsx)(j.Skeleton,{className:"h-[64px] rounded-2xl"},a))}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"})]})]})}function e9({user:e}){let a=(0,es.useAdminApp)(),s=a.useProject().useConfig(),{transactions:n}=a.useTransactions({limit:100,customerType:"user",customerId:e.id}),i=(0,D.useMemo)(()=>Object.entries(s.payments.items).filter(([,e])=>"user"===e.customerType).map(([e])=>e),[s.payments.items]);return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)(te,{userId:e.id,transactions:n}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(tt,{userId:e.id,transactions:n}),(0,t.jsx)(ta,{userId:e.id,transactions:n})]}),(0,t.jsx)(ts,{userId:e.id,itemIds:i})]})}function e7(e,t){let a=new Set;for(let t of e)for(let e of t.entries)e8(e)&&a.add(`${e.adjusted_transaction_id}:${e.adjusted_entry_index}`);let s=new Set;for(let t of e)if("subscription-cancellation"===t.type){for(let a of t.entries)if(e8(a)){let t=e.find(e=>e.id===a.adjusted_transaction_id),n=t?.entries[a.adjusted_entry_index];n&&e6(n)&&n.subscription_id&&s.add(n.subscription_id)}}let n=[];for(let i of e)i.entries.forEach((e,r)=>{!e6(e)||"user"!==e.customer_type||e.customer_id!==t||a.has(`${i.id}:${r}`)||e.subscription_id&&s.has(e.subscription_id)||n.push({key:`${i.id}:${r}`,productDisplayName:e.product.display_name,quantity:e.quantity,subscriptionId:e.subscription_id,grantedAt:new Date(i.effective_at_millis),stackable:e.product.stackable})});let i=new Set,r=[];for(let e of n.sort((e,t)=>t.grantedAt.getTime()-e.grantedAt.getTime())){if(e.subscriptionId){if(i.has(e.subscriptionId))continue;i.add(e.subscriptionId)}r.push(e)}return r}function te({userId:e,transactions:a}){let s=(0,D.useMemo)(()=>e7(a,e),[a,e]),n=(0,D.useMemo)(()=>s.filter(e=>null!=e.subscriptionId).length,[s]),i=(0,D.useMemo)(()=>s.reduce((e,t)=>e+(t.stackable?t.quantity:1),0),[s]),r=(0,D.useMemo)(()=>{let t=0;for(let s of a)if(!s.test_mode)for(let a of s.entries){if(!e2(a)||"user"!==a.customer_type||a.customer_id!==e)continue;let s=a.net_amount.USD;if("string"!=typeof s)continue;let n=Number.parseFloat(s);Number.isFinite(n)&&(t+=n)}return t},[a,e]),l=a.length;return(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[(0,t.jsx)(ey.UserPageMetricCard,{label:"Active subscriptions",value:n,description:0===n?"None":`${n} running`,gradient:"blue"}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Products owned",value:i,description:0===i?"None":`${s.length} distinct`,gradient:"purple"}),(0,t.jsx)(ey.UserPageMetricCard,{label:"Lifetime spend",value:e4(r),description:0===l?"No transactions":`Across ${l} transaction${1===l?"":"s"}`,gradient:"green"})]})}function tt({userId:e,transactions:a}){let s=(0,D.useMemo)(()=>e7(a,e),[a,e]),n=(0,D.useMemo)(()=>[{id:"productDisplayName",accessor:"productDisplayName",header:"Product",width:240,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:e.productDisplayName})},{id:"type",header:"Type",width:130,sortable:!1,renderCell:({row:e})=>(0,t.jsx)(en.DesignBadge,{label:e.subscriptionId?"Subscription":"One-time",color:e.subscriptionId?"blue":"purple",size:"sm"})},{id:"quantity",accessor:"quantity",header:"Quantity",width:100,align:"right",sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"font-medium tabular-nums text-foreground",children:e.stackable?e.quantity:1})},{id:"grantedAt",accessor:"grantedAt",header:"Granted",width:140,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:e0.format(e.grantedAt)})}],[]);return(0,t.jsx)(eb.UserPageTableSection,{title:"Products & subscriptions",urlStateKey:"usersubs",columns:n,rows:s,getRowId:e=>e.key,emptyLabel:"This user has no active products or subscriptions."})}function ta({userId:e,transactions:a}){let s=(0,D.useMemo)(()=>[...a].sort((e,t)=>t.created_at_millis-e.created_at_millis),[a]),n=(0,D.useMemo)(()=>[{id:"type",header:"Type",width:190,sortable:!1,renderCell:({row:e})=>{let{label:a,Icon:s}=function(e){switch(e){case"purchase":return{label:"Purchase",Icon:eX.ShoppingCartIcon};case"subscription-renewal":return{label:"Subscription renewal",Icon:eW.ArrowClockwiseIcon};case"subscription-cancellation":return{label:"Subscription cancellation",Icon:z.ProhibitIcon};case"chargeback":return{label:"Chargeback",Icon:eG.ArrowCounterClockwiseIcon};case"manual-item-quantity-change":return{label:"Item quantity change",Icon:eY.GearIcon};case"product-change":return{label:"Product change",Icon:eJ.ShuffleIcon};default:return{label:"-",Icon:eQ.QuestionIcon}}}(e.type);return(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-foreground/[0.06]",children:(0,t.jsx)(s,{className:"h-4 w-4 text-foreground/70","aria-hidden":!0})}),(0,t.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:a})]})}},{id:"detail",header:"Detail",width:240,flex:1,sortable:!1,renderCell:({row:a})=>(0,t.jsx)("span",{className:"truncate text-sm text-muted-foreground",children:function(e,t){let a=e.entries.find(e=>e6(e)&&"user"===e.customer_type&&e.customer_id===t);if(a){let e=a.product.display_name;return a.quantity>1?`${e} x${a.quantity}`:e}let s=e.entries.find(e=>"item_quantity_change"===e.type&&"user"===e.customer_type&&e.customer_id===t);if(s){let e=s.quantity;return`${s.item_id} (${e>0?"+":""}${e})`}return"-"}(a,e)})},{id:"createdAt",accessor:e=>e.created_at_millis,header:"Date",width:140,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm text-muted-foreground tabular-nums",title:e1.format(new Date(e.created_at_millis)),children:e0.format(new Date(e.created_at_millis))})},{id:"amount",header:"Amount",width:120,align:"right",sortable:!1,renderCell:({row:a})=>{if(a.test_mode)return(0,t.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"Test"});let s=function(e,t){let a=0,s=!1;for(let n of e.entries){if(!e2(n)||"user"!==n.customer_type||n.customer_id!==t)continue;let e=n.net_amount.USD;if("string"!=typeof e)continue;let i=Number.parseFloat(e);Number.isFinite(i)&&(a+=i,s=!0)}return s?a:null}(a,e);return null==s?(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"-"}):(0,t.jsxs)("span",{className:(0,v.cn)("text-sm font-medium tabular-nums",s<0?"text-muted-foreground":"text-foreground"),children:[s<0?"-":"",e4(Math.abs(s))]})}},{id:"status",header:"Status",width:110,sortable:!1,renderCell:({row:e})=>{var a;let s=(a=e,e.adjusted_by.length>0?{label:"Refunded",color:"orange"}:a.test_mode?{label:"Test",color:"purple"}:null);return s?(0,t.jsx)(en.DesignBadge,{label:s.label,color:s.color,size:"sm"}):(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:"-"})}}],[e]);return(0,t.jsx)(eb.UserPageTableSection,{title:"Transaction history",urlStateKey:"usertxns",columns:n,rows:s,getRowId:e=>e.id,emptyLabel:"This user has no transactions.",paginated:!0})}function ts({userId:e,itemIds:a}){return 0===a.length?null:(0,t.jsx)(ei.DesignCard,{title:"Item balances",subtitle:`${a.length} user-scoped item${1===a.length?"":"s"}`,icon:eK.CoinsIcon,children:(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-x-4 gap-y-1",children:a.map(a=>(0,t.jsx)(D.Suspense,{fallback:(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",children:[(0,t.jsx)(j.Skeleton,{className:"h-4 w-32"}),(0,t.jsx)(j.Skeleton,{className:"h-4 w-8"})]}),children:(0,t.jsx)(tn,{userId:e,itemId:a})},a))})})}function tn({userId:e,itemId:a}){let s=(0,es.useAdminApp)().useItem({userId:e,itemId:a}),n=s.quantity<0;return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",title:a,children:[(0,t.jsx)("span",{className:"truncate text-sm text-foreground",children:s.displayName}),(0,t.jsx)("span",{className:`shrink-0 text-sm font-semibold tabular-nums ${n?"text-destructive":"text-foreground"}`,children:s.quantity})]})}var ti=e.i(857974),tr=e.i(267696),tl=e.i(756422),to=e.i(369196),tc=e.i(924354);let td=[{id:"subject",header:"Subject",width:240,flex:1,sortable:!1,renderCell:({row:e})=>e.hasRendered?(0,t.jsx)("span",{className:"truncate",children:e.subject}):(0,t.jsx)("span",{className:"text-muted-foreground italic",children:"Not yet rendered"})},{id:"recipient",header:"Recipient",width:200,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"truncate text-sm text-muted-foreground",children:(0,to.getRecipientDisplay)(e)})},{id:"time",header:"Time",width:160,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:(0,to.getEmailTimestamp)(e).toLocaleString()})},{id:"status",header:"Status",width:120,sortable:!1,renderCell:({row:e})=>(0,t.jsx)(en.DesignBadge,{label:tl.STATUS_LABELS[e.status],color:(0,tl.getStatusBadgeColor)(e.status),size:"sm"})}];function tu({user:e}){let a=(0,es.useAdminApp)(),s=(0,es.useProjectId)(),n=(0,u.useRouter)(),[i,r]=(0,D.useState)([]),[l,o]=(0,D.useState)(!0),[c,d]=(0,D.useState)(null),m=(0,D.useCallback)(async()=>{o(!0),d(null);try{let e,t=[];do{let s=await a.listOutboxEmails(null!=e?{cursor:e}:void 0);t.push(...s.items),e=s.nextCursor??void 0}while(null!=e)r(t)}catch(e){d(e instanceof Error?e.message:"Failed to load emails")}finally{o(!1)}},[a]);(0,D.useEffect)(()=>{let e=!1;return(0,Y.runAsynchronouslyWithAlert)(async()=>{if(await m(),e)return}),()=>{e=!0}},[m]);let p=(0,D.useMemo)(()=>i.filter(t=>{var a;let s;return a=e.id,"user-primary-email"===(s=t.to).type&&s.userId===a||"user-custom-emails"===s.type&&s.userId===a}).sort((e,t)=>(0,to.getEmailTimestamp)(t).getTime()-(0,to.getEmailTimestamp)(e).getTime()),[i,e.id]),h=(0,D.useMemo)(()=>(0,tl.computeEmailStats)(p),[p]);return l?(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)(j.Skeleton,{className:"h-[40px] rounded-2xl"}),(0,t.jsx)(j.Skeleton,{className:"h-[180px] rounded-2xl"})]}):null!=c?(0,t.jsxs)("div",{className:"flex flex-col items-center gap-3 py-8 text-center",children:[(0,t.jsx)(ti.EnvelopeSimpleIcon,{className:"h-6 w-6 text-destructive"}),(0,t.jsx)(S.Typography,{className:"text-sm font-medium",children:"Failed to load emails"}),(0,t.jsx)(S.Typography,{variant:"secondary",className:"text-sm",children:c})]}):(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[p.length>0&&(0,t.jsxs)("div",{className:"py-1",children:[(0,t.jsx)("div",{className:"mb-2 text-sm text-center",children:(0,t.jsxs)("span",{className:"font-medium",children:[p.length," email",1!==p.length?"s":""]})}),(0,t.jsx)(tc.StatsBar,{data:h})]}),(0,t.jsx)(eb.UserPageTableSection,{title:"Sent Emails",urlStateKey:"useremails",columns:td,rows:p,getRowId:e=>e.id,emptyLabel:"No emails sent to this user",paginated:!0,onRowClick:e=>{n.push(tr.urlString`/projects/${s}/email-viewer/${e.id}`)}})]})}let tm=(0,e.i(588698).default)(()=>e.A(419568),{loadableGenerated:{modules:[611973]},ssr:!1,loading:()=>(0,t.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading session replays…"})});function tp({user:e}){let a=e.primaryEmail??e.id,s=e.displayName??a,[n,l]=(0,D.useState)(!1),[o,c]=(0,D.useState)(!1),[d,u]=(0,D.useState)(null),m=(0,es.useAdminApp)();return(0,t.jsxs)("div",{className:"flex min-w-0 gap-4 items-center",children:[(0,t.jsxs)(x.Avatar,{className:"w-20 h-20 shrink-0",children:[(0,t.jsx)(x.AvatarImage,{src:e.profileImageUrl??void 0,alt:s}),(0,t.jsx)(x.AvatarFallback,{children:s.slice(0,2)})]}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)(r.EditableInput,{value:s,initialEditValue:e.displayName??"",placeholder:a,shiftTextToLeft:!0,inputClassName:"font-semibold text-3xl",onUpdate:async t=>{await e.setDisplayName(t)}}),(0,t.jsxs)("p",{children:["Last active ",(0,G.fromNow)(e.lastActiveAt)]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(i.DesignMenu,{variant:"actions",trigger:"icon",triggerLabel:"User actions",align:"end",items:[{id:"impersonate",label:"Impersonate",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{let t=new Date(Date.now()+72e5),a=await e.createSession({expiresInMillis:72e5}),s=await a.getTokens();u(Q.deindent`
|
|
111
|
+
document.cookie = 'stack-refresh-${m.projectId}=${s.refreshToken}; expires=${t.toUTCString()}; path=/';
|
|
112
112
|
window.location.reload();
|
|
113
|
-
`)})}},...e.isMultiFactorRequired?[{id:"remove-2fa",label:"Remove 2FA",onClick:()=>{(0,K.runAsynchronouslyWithAlert)(async()=>{await e.update({totpMultiFactorSecret:null})})}}]:[],{id:"restriction",label:to(e),onClick:()=>{c(!0)}},{id:"delete",label:"Delete",itemVariant:"destructive",onClick:()=>l(!0)}]}),(0,t.jsx)(tc,{user:e,open:o,onOpenChange:c}),(0,t.jsx)(N.DeleteUserDialog,{user:e,open:i,onOpenChange:l,redirectTo:`/projects/${m.projectId}/users`}),(0,t.jsx)(N.ImpersonateUserDialog,{user:e,impersonateSnippet:d,onClose:()=>u(null)})]})]})}function tl(e){let t=e.restrictedReason;if(!t)return"";switch(t.type){case"anonymous":return"Anonymous user";case"email_not_verified":return"Unverified email";case"restricted_by_administrator":return"Manually restricted";default:return"Restricted"}}function to(e){return e.restrictedByAdmin?"Edit or remove manual restriction":e.isRestricted?"Add manual restriction":"Restrict user"}function tc({user:e,open:a,onOpenChange:n}){let[i,s]=(0,T.useState)(e.restrictedByAdminReason??""),[r,l]=(0,T.useState)(e.restrictedByAdminPrivateDetails??""),[o,c]=(0,T.useState)(!1),[d,u]=(0,T.useState)(null),{toast:m}=(0,C.useToast)(),p=async()=>{let t=i.trim(),a=r.trim();c(!0),u(null);try{await e.update({restrictedByAdmin:!0,restrictedByAdminReason:t.length>0?t:null,restrictedByAdminPrivateDetails:a.length>0?a:null}),m({title:"User restricted",variant:"success"}),n(!1)}catch(t){(0,Y.captureError)("user-restriction-save-and-restrict-error",new Y.HexclaveAssertionError(`Failed to save and restrict user ${e.id}`,{cause:t})),u(t instanceof Error&&t.message?t.message:"Failed to save the restriction. Please try again.")}finally{c(!1)}},h=async()=>{c(!0),u(null);try{await e.update({restrictedByAdmin:!1,restrictedByAdminReason:null,restrictedByAdminPrivateDetails:null}),m({title:"Restriction removed",variant:"success"}),n(!1)}catch(t){(0,Y.captureError)("user-restriction-remove-error",new Y.HexclaveAssertionError(`Failed to remove restriction for user ${e.id}`,{cause:t})),u(t instanceof Error&&t.message?t.message:"Failed to remove the restriction. Please try again.")}finally{c(!1)}};return(0,t.jsx)(y.Dialog,{open:a,onOpenChange:t=>{t&&(s(e.restrictedByAdminReason??""),l(e.restrictedByAdminPrivateDetails??""),u(null)),n(t)},children:(0,t.jsxs)(y.DialogContent,{className:"sm:max-w-[500px]",children:[(0,t.jsxs)(y.DialogHeader,{children:[(0,t.jsx)(y.DialogTitle,{children:"User Restriction"}),(0,t.jsx)(y.DialogDescription,{children:e.restrictedByAdmin?"This user is manually restricted. You can update the notes or remove the manual restriction.":"Use a manual restriction to block this user from accessing your app by default. You can optionally provide a public reason shown to the user."})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-4 py-4",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium",children:"Public reason (shown to user)"}),(0,t.jsx)(b.Input,{value:i,onChange:e=>s(e.target.value),placeholder:"Optional message visible to the user",disabled:o})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium",children:"Private details (internal only, optional)"}),(0,t.jsx)(w.Textarea,{value:r,onChange:e=>l(e.target.value),placeholder:"Internal notes, e.g., which sign-up rule triggered",className:"min-h-[80px]",disabled:o})]})]}),d&&(0,t.jsx)("div",{className:"rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:d}),(0,t.jsxs)(y.DialogFooter,{className:"flex-col sm:flex-row gap-2",children:[e.restrictedByAdmin&&(0,t.jsx)(f.Button,{variant:"outline",onClick:h,disabled:o,className:"sm:mr-auto",children:"Remove manual restriction"}),(0,t.jsx)(f.Button,{variant:"outline",onClick:()=>n(!1),disabled:o,children:"Cancel"}),(0,t.jsx)(f.Button,{onClick:p,disabled:o,children:"Save & restrict user"})]})]})})}function td({user:e}){let[a,n]=(0,T.useState)(!1);if(!e.isRestricted)return null;let i=tl(e);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(g.Alert,{variant:"destructive",className:"mb-4",children:[(0,t.jsx)(z.ProhibitIcon,{size:16}),(0,t.jsx)(g.AlertTitle,{children:"This user is currently restricted"}),(0,t.jsxs)(g.AlertDescription,{className:"mt-2",children:[(0,t.jsxs)("p",{className:"mb-2",children:["Restricted users cannot access your app by default. This user is restricted because: ",(0,t.jsx)("strong",{children:i}),"."]}),e.restrictedReason?.type==="email_not_verified"&&(0,t.jsx)("p",{className:"text-sm opacity-80",children:"The user needs to verify their email address to remove this restriction."}),e.restrictedReason?.type==="anonymous"&&(0,t.jsx)("p",{className:"text-sm opacity-80",children:"Anonymous users must sign up with credentials to remove this restriction."}),e.restrictedReason?.type==="restricted_by_administrator"&&(0,t.jsxs)("div",{className:"text-sm opacity-80",children:[(0,t.jsx)("p",{children:"This user was manually restricted by an administrator."}),e.restrictedByAdminReason&&(0,t.jsxs)("p",{className:"mt-1",children:[(0,t.jsx)("strong",{children:"Public reason:"})," ",e.restrictedByAdminReason]}),e.restrictedByAdminPrivateDetails&&(0,t.jsxs)("p",{className:"mt-1",children:[(0,t.jsx)("strong",{children:"Private details:"})," ",e.restrictedByAdminPrivateDetails]})]}),(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>n(!0),className:"mt-3",children:to(e)})]})]}),(0,t.jsx)(tc,{user:e,open:a,onOpenChange:n})]})}function tu({user:e}){let a=(0,T.useMemo)(()=>[{type:"text",icon:(0,t.jsx)($.HashIcon,{size:14}),name:"User ID",value:e.id,readOnly:!0},{type:"text",icon:(0,t.jsx)(R.EnvelopeIcon,{size:14}),name:"Primary email",value:e.primaryEmail??"",placeholder:"-",readOnly:!0},{type:"text",icon:(0,t.jsx)(U,{size:14}),name:"Display name",value:e.displayName??"",placeholder:"-",onUpdate:async t=>{await e.setDisplayName(t)}},{type:"text",icon:(0,t.jsx)(Z.SquareIcon,{size:14}),name:"Password",value:"",placeholder:e.hasPassword?"************":"-",onUpdate:async t=>{await e.setPassword({password:t})}},{type:"text",icon:(0,t.jsx)(V.ShieldIcon,{size:14}),name:"2-factor auth",value:e.isMultiFactorRequired?"Enabled":"",placeholder:"Disabled",readOnly:!0},{type:"text",icon:(0,t.jsx)(M.CalendarIcon,{size:14}),name:"Signed up at",value:e.signedUpAt.toDateString(),readOnly:!0}],[e]);return(0,t.jsx)(i.DesignEditableGrid,{items:a,columns:2,size:"sm",deferredSave:!1})}function tm({user:e}){let[a,n]=(0,T.useState)(!1),s=(0,T.useMemo)(()=>[{type:"custom",icon:(0,t.jsx)(z.ProhibitIcon,{size:14}),name:"Manual restriction",children:(0,t.jsx)("span",{className:(0,v.cn)("text-sm",e.restrictedByAdmin?"font-medium text-destructive":"text-muted-foreground"),children:e.restrictedByAdmin?"Restricted by admin":e.isRestricted?`Not manually restricted (${tl(e)})`:"Not restricted"})},{type:"text",icon:(0,t.jsx)(V.ShieldIcon,{size:14}),name:"Risk score: bot",value:String(e.riskScores.signUp.bot),onUpdate:async t=>{await e.update({riskScores:{signUp:{bot:(0,k.parseRiskScore)(t),freeTrialAbuse:e.riskScores.signUp.freeTrialAbuse}}})}},{type:"text",icon:(0,t.jsx)(V.ShieldIcon,{size:14}),name:"Risk score: free trial abuse",value:String(e.riskScores.signUp.freeTrialAbuse),onUpdate:async t=>{await e.update({riskScores:{signUp:{bot:e.riskScores.signUp.bot,freeTrialAbuse:(0,k.parseRiskScore)(t)}}})}},{type:"text",icon:(0,t.jsx)(O.GlobeIcon,{size:14}),name:"Sign-up country code",value:e.countryCode??"",placeholder:"-",normalizeInput:e=>e.toUpperCase().replace(/[^A-Z]/g,"").slice(0,2),onUpdate:async t=>{await e.update({countryCode:t.length>0?(0,W.normalizeCountryCode)(t):null})}}],[e]);return(0,t.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,t.jsx)("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Fraud"}),(0,t.jsx)(f.Button,{variant:e.restrictedByAdmin?"outline":"destructive",size:"sm",onClick:()=>n(!0),children:to(e)})]}),(0,t.jsx)(i.DesignEditableGrid,{items:s,columns:2,size:"sm",deferredSave:!1}),(0,t.jsx)(tc,{user:e,open:a,onOpenChange:n})]})}function tp({value:e,showFalseIcon:a=!0}){return(0,t.jsxs)("div",{className:"flex justify-center",children:[(0,t.jsx)("span",{className:"sr-only",children:e?"Yes":"No"}),e?(0,t.jsx)(P.CheckIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-green-500"}):a?(0,t.jsx)(q.XIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-muted-foreground"}):null]})}function th({user:e,open:a,onOpenChange:n}){let i=ee.object({email:ee.string().email("Please enter a valid e-mail address").defined("E-mail is required").label("E-mail").meta({stackFormFieldPlaceholder:"Enter e-mail address"}),isVerified:ee.boolean().default(!1).label("Set as verified").meta({description:"E-mails verified by verification emails. Can be used for OTP/magic links"}),isPrimary:ee.boolean().default(!1).label("Set as primary").meta({description:"Make this the primary e-mail for the user"}),isUsedForAuth:ee.boolean().default(!1).label("Used for sign-in").meta({description:"Allow this e-mail to be used for password sign-in. Also enables OTP/magic links if the e-mail is verified."})});return(0,t.jsx)(l.SmartFormDialog,{title:"Add E-mail",description:"Add a new e-mail address to this user account.",open:a,onOpenChange:n,formSchema:i,onSubmit:async t=>{t.email.trim()&&await e.createContactChannel({type:"email",value:t.email.trim(),isVerified:t.isVerified,isPrimary:t.isPrimary,usedForAuth:t.isUsedForAuth})}})}function tg({control:e,watch:a,domains:n,allowLocalhost:i}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.SelectField,{control:e,name:"selected",label:"Domain",options:[...n.map((e,t)=>({value:t.toString(),label:e.domain})),...i?[{value:"localhost",label:"localhost"}]:[]]}),"localhost"===a("selected")&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.InputField,{control:e,name:"localhostPort",label:"Localhost Port",placeholder:"3000",type:"number"}),(0,t.jsx)(m.Accordion,{type:"single",collapsible:!0,className:"w-full",children:(0,t.jsxs)(m.AccordionItem,{value:"item-1",children:[(0,t.jsx)(m.AccordionTrigger,{children:"Advanced"}),(0,t.jsx)(m.AccordionContent,{className:"flex flex-col gap-8",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)(o.InputField,{label:"Handler path",name:"handlerPath",control:e,placeholder:"/handler"}),(0,t.jsx)(S.Typography,{variant:"secondary",type:"footnote",children:"Only modify this if you changed the default handler path in your app"})]})})]})})]})]})}function tx({title:e,description:a,open:n,onOpenChange:i,endpointPath:s,onSubmit:r}){let o=(0,en.useAdminApp)().useProject(),c=o.config.domains;return(0,t.jsx)(l.FormDialog,{title:e,description:a,open:n,onOpenChange:i,formSchema:ee.object({selected:ee.string().defined(),localhostPort:ee.number().test("required-if-localhost","Required if localhost is selected",(e,t)=>"localhost"!==t.parent.selected||void 0!==e),handlerPath:ee.string().optional()}),okButton:{label:"Send"},render:({control:e,watch:a})=>(0,t.jsx)(tg,{control:e,watch:a,domains:c,allowLocalhost:o.config.allowLocalhost}),onSubmit:async e=>{let t,a;if("localhost"===e.selected)t=`http://localhost:${e.localhostPort}`,a=e.handlerPath||"/handler";else{let n=c[parseInt(e.selected)];t=n.domain,a=n.handlerPath}let n=new URL(a.replace(/\/?$/,"/")+s.replace(/^\//,""),t).toString();await r(n)}})}function tf({channel:e,open:a,onOpenChange:n}){return(0,t.jsx)(tx,{title:"Send Verification Email",description:`Send a verification email to ${e.value}? The email will contain a callback link to your domain.`,open:a,onOpenChange:n,endpointPath:"/email-verification",onSubmit:async t=>{await e.sendVerificationEmail({callbackUrl:t})}})}function tv({channel:e,open:a,onOpenChange:n}){let i=(0,en.useAdminApp)();return(0,t.jsx)(tx,{title:"Send Reset Password Email",description:`Send a password reset email to ${e.value}? The email will contain a callback link to your domain.`,open:a,onOpenChange:n,endpointPath:"/password-reset",onSubmit:async t=>{await i.sendForgotPasswordEmail(e.value,{callbackUrl:t})}})}function ty({channel:e,open:a,onOpenChange:n}){let i=(0,en.useAdminApp)();return(0,t.jsx)(tx,{title:"Send Sign-In Invitation",description:`Send a sign-in invitation email to ${e.value}? The email will contain a callback link to your domain.`,open:a,onOpenChange:n,endpointPath:"/sign-in",onSubmit:async t=>{await i.sendSignInInvitationEmail(e.value,t)}})}function tb({user:e}){let a=(0,en.useAdminApp)().useProject(),n=e.useContactChannels(),[i,s]=(0,T.useState)(!1),[r,l]=(0,T.useState)(null),[o,c]=(0,T.useState)(null),[d,u]=(0,T.useState)(null),m=async e=>{await e.update({usedForAuth:!e.usedForAuth})},h=async e=>{await e.update({isVerified:!e.isVerified})},g=async e=>{await e.update({isPrimary:!0})},x=(0,T.useMemo)(()=>[{id:"value",accessor:"value",header:"E-Mail",width:220,flex:1,sortable:!1},{id:"isPrimary",header:"Primary",width:90,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tp,{value:e.isPrimary,showFalseIcon:!1})},{id:"isVerified",header:"Verified",width:90,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tp,{value:e.isVerified})},{id:"usedForAuth",header:"Used for sign-in",width:140,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tp,{value:e.usedForAuth})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:e})=>(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(p.ActionCell,{items:[{item:"Send sign-in invitation",onClick:async()=>{u({channel:e,isOpen:!0})}},...e.isVerified?[]:[{item:"Send verification email",onClick:async()=>{l({channel:e,isOpen:!0})}}],...a.config.credentialEnabled?[{item:"Send reset password email",onClick:async()=>{c({channel:e,isOpen:!0})}}]:[],{item:e.isVerified?"Mark as unverified":"Mark as verified",onClick:()=>{(0,K.runAsynchronouslyWithAlert)(()=>h(e))}},...e.isPrimary?[]:[{item:"Set as primary",onClick:()=>{(0,K.runAsynchronouslyWithAlert)(()=>g(e))}}],{item:e.usedForAuth?"Disable for sign-in":"Enable for sign-in",onClick:()=>{(0,K.runAsynchronouslyWithAlert)(()=>m(e))}},{item:"Delete",danger:!0,onClick:()=>{(0,K.runAsynchronouslyWithAlert)(()=>e.delete())}}]})})}],[a.config.credentialEnabled]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(th,{user:e,open:i,onOpenChange:s}),r&&(0,t.jsx)(tf,{channel:r.channel,open:r.isOpen,onOpenChange:e=>{e||l(null)}}),o&&(0,t.jsx)(tv,{channel:o.channel,open:o.isOpen,onOpenChange:e=>{e||c(null)}}),d&&(0,t.jsx)(ty,{channel:d.channel,open:d.isOpen,onOpenChange:e=>{e||u(null)}}),(0,t.jsx)(eb.UserPageTableSection,{title:"Contact Channels",urlStateKey:"contactch",columns:x,rows:n,getRowId:e=>e.id,emptyLabel:"No contact channels",actions:(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>s(!0),children:"Add E-mail"})})]})}function tj(){return(0,t.jsx)("div",{className:"flex items-center",children:Array.from({length:3}).map((e,a)=>(0,t.jsx)(j.Skeleton,{className:"h-7 w-7 rounded-full border-2 border-background",style:{marginLeft:0===a?0:-10}},a))})}function tw({team:e,onMemberClick:a}){let n=e.useUsers();if(0===n.length)return(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"No members"});let i=n.slice(0,3),s=n.length-i.length;return(0,t.jsxs)("div",{className:"group/avatars flex items-center",onClick:e=>e.stopPropagation(),children:[i.map((e,n)=>{let s=e.displayName??e.primaryEmail??e.id;return(0,t.jsxs)(A.Tooltip,{delayDuration:0,children:[(0,t.jsx)(A.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button","aria-label":`View ${s}`,onClick:t=>{t.stopPropagation(),a(e.id)},className:(0,v.cn)("relative rounded-full transition-[margin,transform] duration-200 ease-out hover:z-20 hover:scale-110 focus:z-20 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",0===n?"ml-0":"-ml-2.5 group-hover/avatars:ml-1"),style:{zIndex:i.length-n},children:(0,t.jsxs)(x.Avatar,{className:"h-7 w-7 border-2 border-background",children:[(0,t.jsx)(x.AvatarImage,{src:e.profileImageUrl??void 0,alt:s}),(0,t.jsx)(x.AvatarFallback,{className:"text-[10px]",children:s.slice(0,2).toUpperCase()})]})})}),(0,t.jsx)(A.TooltipContent,{side:"top",className:"text-xs",children:s})]},e.id)}),s>0&&(0,t.jsxs)("div",{className:"-ml-2.5 group-hover/avatars:ml-1 transition-[margin] duration-200 ease-out flex h-7 min-w-7 items-center justify-center rounded-full border-2 border-background bg-muted px-1.5 text-[10px] font-medium text-muted-foreground","aria-label":`${s} more members`,children:["+",s]})]})}function tA({user:e}){let n=(0,en.useAdminApp)(),i=(0,u.useRouter)(),[s,r]=(0,T.useState)(void 0),l=e.useTeams(void 0===s?void 0:{orderBy:"createdAt",desc:s}),[o,c]=(0,T.useState)(!1),[d,m]=(0,T.useState)(null),g=(0,T.useCallback)(e=>{i.push(`/projects/${encodeURIComponent(n.projectId)}/teams/${encodeURIComponent(e)}`)},[i,n.projectId]),x=(0,T.useCallback)(e=>{i.push(`/projects/${encodeURIComponent(n.projectId)}/users/${encodeURIComponent(e)}`)},[i,n.projectId]),v=(0,T.useMemo)(()=>[{id:"id",accessor:"id",header:"Team ID",width:180,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("div",{className:"font-mono text-xs bg-muted px-2 py-1 rounded max-w-[180px] truncate",children:e.id})},{id:"displayName",accessor:"displayName",header:"Display Name",width:220,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"font-medium",children:e.displayName||"-"})},{id:"members",header:"Members",width:160,sortable:!1,renderCell:({row:e})=>(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(tj,{}),children:(0,t.jsx)(tw,{team:e,onMemberClick:x})})},{id:"createdAt",accessor:"createdAt",header:"Created At",width:140,sortable:!0,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:e.createdAt.toLocaleDateString()})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:e})=>(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(p.ActionCell,{items:[{item:"View Team",onClick:()=>{g(e.id)}},{item:"Remove from team",danger:!0,onClick:()=>{m(e)}}]})})}],[g,x]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eb.UserPageTableSection,{title:"Teams",urlStateKey:"userteams",columns:v,rows:l,getRowId:e=>e.id,emptyLabel:"No teams found",onRowClick:e=>g(e.id),onSortChange:e=>{let t=e.find(e=>"createdAt"===e.columnId);r(t?"desc"===t.direction:void 0)},actions:(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>c(!0),children:"Add to team"})}),(0,t.jsx)(y.Dialog,{open:o,onOpenChange:c,children:(0,t.jsxs)(y.DialogContent,{className:"sm:max-w-2xl",children:[(0,t.jsx)(y.DialogHeader,{className:"mb-4",children:(0,t.jsx)(y.DialogTitle,{children:"Add to team"})}),(0,t.jsx)(a.TeamSearchTable,{action:a=>{let n=void 0!==l.find(e=>e.id===a.id);return(0,t.jsx)(f.Button,{variant:"outline",size:"sm",disabled:n,onClick:()=>{(0,K.runAsynchronouslyWithAlert)(async()=>{await a.addUser(e.id),c(!1)})},children:n?"Added":"Add"})}})]})}),(0,t.jsx)(h.ActionDialog,{title:!0,danger:!0,open:null!==d,onOpenChange:e=>{e||m(null)},okButton:{label:"Remove user from team",onClick:async()=>{(0,K.runAsynchronouslyWithAlert)(async()=>{d&&await d.removeUser(e.id)})}},cancelButton:!0,confirmText:"I understand this will cause the user to lose access to the team.",children:d&&`Are you sure you want to remove "${e.displayName??e.id}" from the team "${d.displayName}"?`})]})}function tS(e){let a=(0,en.useAdminApp)(),n=a.useProject(),{toast:i}=(0,C.useToast)(),s=n.config.oauthProviders,r="edit"===e.mode,c=r?e.provider:null,d=ee.object({providerId:ee.string().defined("Provider is required").nonEmpty("Provider is required").label("OAuth Provider").meta({stackFormFieldRender:e=>(0,t.jsx)(o.SelectField,{control:e.control,name:e.name,label:e.label,disabled:e.disabled||r,options:s.map(e=>({value:e.id,label:e.id.charAt(0).toUpperCase()+e.id.slice(1)})),placeholder:"Select OAuth provider"})}),email:ee.string().email("Please enter a valid e-mail address").optional().label("Email").meta({stackFormFieldPlaceholder:"Enter email address (optional)"}),accountId:ee.string().defined("Account ID is required").label("Account ID").meta({stackFormFieldPlaceholder:"Enter OAuth account ID",description:"The unique account identifier from the OAuth provider",stackFormFieldExtraProps:{disabled:r}}),allowSignIn:ee.boolean().default(!0).label("Used for sign-in").meta({description:"Allow this OAuth provider to be used for authentication"}),allowConnectedAccounts:ee.boolean().default(!0).label("Used for connected accounts").meta({description:"Allow this OAuth provider to be used for connected account features"})}),u=r&&c?{providerId:c.type,email:c.email,accountId:c.accountId,allowSignIn:c.allowSignIn,allowConnectedAccounts:c.allowConnectedAccounts}:{providerId:"",email:"",accountId:"",allowSignIn:!0,allowConnectedAccounts:!0},m=async t=>{let n;if(r&&c)n=await c.update({email:t.email?.trim()||c.email,allowSignIn:t.allowSignIn,allowConnectedAccounts:t.allowConnectedAccounts});else{if(!t.accountId.trim())return;let i=s.find(e=>e.id===t.providerId);if(!i)throw new Y.HexclaveAssertionError(`Provider config not found for ${t.providerId}`);n=await a.createOAuthProvider({userId:e.user.id,providerConfigId:i.id,accountId:t.accountId.trim(),email:t.email?.trim()||"",allowSignIn:t.allowSignIn,allowConnectedAccounts:t.allowConnectedAccounts})}if("error"===n.status){let e=r&&c?c.type:t.providerId,a=r&&c?c.accountId:t.accountId,s=r?"updating":"adding";return H.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(n.error)?i({title:"Account Already Connected",description:`A ${e} provider with account ID "${a}" already exists (possibly for a different user)`,variant:"destructive"}):(console.error(n.error),i({title:"Error",description:`An unexpected error occurred while ${s} the OAuth provider.`,variant:"destructive"})),"prevent-close"}},p=d.default(u);return(0,t.jsx)(l.SmartFormDialog,{title:r?"Edit OAuth Provider":"Add OAuth Provider",description:r?"Update the OAuth provider settings.":"Connect a new OAuth provider to this user account.",open:e.open,onOpenChange:e.onOpenChange,formSchema:p,onSubmit:m})}function tC({user:e}){let a=e.useOAuthProviders(),[n,i]=(0,T.useState)(!1),[s,r]=(0,T.useState)(null),{toast:l}=(0,C.useToast)(),o=(0,T.useCallback)(async(e,t)=>{let a=await e.update(t);if("error"===a.status)if(H.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a.error))l({title:"Account Already Connected",description:`A ${e.type} provider with account ID "${e.accountId}" is already connected for this user.`,variant:"destructive"});else{let e=void 0!==t.allowSignIn?"sign-in":"connected accounts";l({title:"Error",description:`Failed to update ${e} setting.`,variant:"destructive"})}else{let a="";void 0!==t.allowSignIn?a=`Sign-in ${t.allowSignIn?"enabled":"disabled"} for ${e.type} provider.`:void 0!==t.allowConnectedAccounts&&(a=`Connected accounts ${t.allowConnectedAccounts?"enabled":"disabled"} for ${e.type} provider.`),l({title:"Success",description:a,variant:"success"})}},[l]),c=(0,T.useMemo)(()=>[{id:"type",accessor:"type",header:"Provider",width:110,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"capitalize font-medium",children:e.type})},{id:"email",accessor:"email",header:"Email",width:160,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"block max-w-full truncate text-sm text-muted-foreground",title:e.email,children:e.email??"No email"})},{id:"accountId",accessor:"accountId",header:"Account ID",width:160,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"font-mono text-xs truncate block max-w-[160px]",children:e.accountId})},{id:"allowSignIn",header:"Sign-in",width:90,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tp,{value:e.allowSignIn})},{id:"allowConnectedAccounts",header:"Connected",width:110,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tp,{value:e.allowConnectedAccounts})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:e})=>(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(p.ActionCell,{items:[{item:"Edit",onClick:()=>r(e)},{item:e.allowSignIn?"Disable sign-in":"Enable sign-in",onClick:async()=>{await o(e,{allowSignIn:!e.allowSignIn})}},{item:e.allowConnectedAccounts?"Disable connected accounts":"Enable connected accounts",onClick:async()=>{await o(e,{allowConnectedAccounts:!e.allowConnectedAccounts})}},{item:"Delete",danger:!0,onClick:async()=>{await e.delete()}}]})})}],[o]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(tS,{user:e,open:n,onOpenChange:i,mode:"create"}),s&&(0,t.jsx)(tS,{user:e,open:!!s,onOpenChange:()=>r(null),mode:"edit",provider:s}),(0,t.jsx)(eb.UserPageTableSection,{title:"OAuth Providers",urlStateKey:"useroauth",columns:c,rows:a,getRowId:e=>e.id,emptyLabel:"No OAuth providers connected",actions:(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>i(!0),children:"Add Provider"})})]})}let tN=[{label:"",ariaLabel:null},{label:"M",ariaLabel:"Monday"},{label:"",ariaLabel:null},{label:"W",ariaLabel:"Wednesday"},{label:"",ariaLabel:null},{label:"F",ariaLabel:"Friday"},{label:"",ariaLabel:null}],tI=["bg-foreground/[0.08] dark:bg-foreground/[0.12]","bg-emerald-500/30 dark:bg-emerald-400/30","bg-emerald-500/55 dark:bg-emerald-400/55","bg-emerald-500/80 dark:bg-emerald-400/80","bg-emerald-500 dark:bg-emerald-400"],t_=new Intl.DateTimeFormat(void 0,{weekday:"short",month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function tk(e){let[t,a,n]=e.split("-").map(Number),i=new Date(Date.UTC(t,a-1,n));return t_.format(i)}function tD({children:e}){return(0,t.jsxs)("div",{className:"flex flex-col items-center gap-2 shrink-0",children:[(0,t.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground tracking-[0.14em] uppercase",children:"Activity"}),(0,t.jsx)("div",{className:"grid text-[9px] leading-none text-muted-foreground/70",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)"},children:tN.map((e,a)=>(0,t.jsx)("span",{className:"flex justify-center","aria-label":e.ariaLabel??void 0,"aria-hidden":null==e.ariaLabel,style:{width:11},children:e.label},`${e.ariaLabel??"spacer"}-${a}`))}),(0,t.jsx)("div",{className:"grid",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)",gridTemplateRows:"repeat(53, 11px)",gridAutoFlow:"row"},children:e})]})}function tT(){let e=(0,T.useMemo)(()=>Array.from({length:371}),[]);return(0,t.jsx)(tD,{children:e.map((e,a)=>(0,t.jsx)("div",{className:(0,v.cn)("rounded-[2px]",tI[0]),style:{width:11,height:11},"aria-hidden":!0},a))})}function tE({userId:e,onCellClick:a}){let n=(0,en.useAdminApp)(),{data_points:i}=(0,D.useUserActivityOrThrow)(n,e),s=(0,T.useMemo)(()=>new Map(i.map(e=>[e.date,e.activity])),[i]),r=(0,T.useMemo)(()=>{let e,t,a=((e=new Date(i.length>0?function(e){let[t,a,n]=e.split("-").map(Number);return new Date(Date.UTC(t,a-1,n))}(i[i.length-1].date):new Date)).setUTCHours(0,0,0,0),t=e.getUTCDay(),e.setUTCDate(e.getUTCDate()-t),e);return Array.from({length:371},(e,t)=>{let n=Math.floor(t/7),i=new Date(a);i.setUTCDate(a.getUTCDate()-7*n+t%7);let r=i.toISOString().slice(0,10);return{date:r,activity:s.get(r)??0}})},[s,i]),l=(0,T.useMemo)(()=>r.reduce((e,t)=>Math.max(e,t.activity),0),[r]);return(0,t.jsx)(tD,{children:r.map(e=>{let n=function(e,t){if(e<=0||t<=0)return 0;let a=Math.log1p(e)/Math.log1p(t);return a<=.25?1:a<=.5?2:a<=.75?3:4}(e.activity,l);return(0,t.jsxs)(A.Tooltip,{delayDuration:0,children:[(0,t.jsx)(A.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button","aria-label":`View analytics for ${tk(e.date)} (${e.activity} ${1===e.activity?"event":"events"})`,onClick:()=>a(e.date),className:(0,v.cn)("relative rounded-[2px] transition-none hover:z-10 hover:ring-2 hover:ring-foreground focus:z-10 focus:outline-none focus-visible:ring-2 focus-visible:ring-foreground cursor-pointer",tI[n]),style:{width:11,height:11}})}),(0,t.jsxs)(A.TooltipContent,{side:"left",sideOffset:8,collisionPadding:8,className:"z-[100] whitespace-nowrap text-xs",children:[(0,t.jsxs)("div",{className:"font-medium",children:[e.activity," ",1===e.activity?"event":"events"]}),(0,t.jsx)("div",{className:"opacity-70",children:tk(e.date)})]})]},e.date)})})}function tL({userId:e,onCellClick:a,anchorRef:n}){let[i,s]=(0,T.useState)(!1),[r,l]=(0,T.useState)(null);return((0,T.useEffect)(()=>{s(!0)},[]),(0,T.useEffect)(()=>{let e=()=>{let e=n.current;null===e||l(e.getBoundingClientRect().right-164+12)};e(),window.addEventListener("resize",e);let t=new ResizeObserver(e);return null!==n.current&&t.observe(n.current),()=>{window.removeEventListener("resize",e),t.disconnect()}},[n]),i&&null!==r)?(0,J.createPortal)((0,t.jsx)("aside",{className:"pointer-events-none fixed z-30 hidden -translate-y-1/2 xl:block",style:{left:r,width:140,top:`max(50vh, ${455.5}px)`},children:(0,t.jsx)("div",{className:"pointer-events-auto flex w-full items-center justify-center",children:(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(tT,{}),children:(0,t.jsx)(tE,{userId:e,onCellClick:a})})})}),document.body):null}let tU=[{id:"authentication",label:"Authentication",appId:"authentication"},{id:"teams",label:"Teams",appId:"teams"},{id:"payments",label:"Payments",appId:"payments"},{id:"analytics",label:"Analytics",appId:"analytics"},{id:"session-replays",label:"Session Replays",appId:"session-replays"},{id:"metadata",label:"Metadata",appId:null,icon:F.DatabaseIcon}];function tM(e){return tU.some(t=>t.id===e)}function tP({sections:e}){return(0,t.jsx)("div",{className:"flex flex-col gap-6",children:Array.from({length:e}).map((e,a)=>(0,t.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,t.jsx)(j.Skeleton,{className:"h-4 w-32"}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)(j.Skeleton,{className:"h-11 w-full"}),(0,t.jsx)(j.Skeleton,{className:"h-11 w-full"}),(0,t.jsx)(j.Skeleton,{className:"h-11 w-full"})]})]},a))})}function tF({user:e}){let a=(0,en.useAdminApp)(),i=a.useProject().useConfig(),s=(0,u.useRouter)(),r=(0,X.usePathname)(),l=(0,X.useSearchParams)(),o=(0,T.useRef)(null),m=(0,T.useMemo)(()=>tU.filter(e=>null===e.appId||(0,_.isAppEnabled)(i.apps.installed,e.appId)),[i.apps.installed]),p=l.get("tab"),h=m[0]?.id??(0,Y.throwErr)("User page has no visible tabs; metadata tab should always be visible"),g=p&&tM(p)&&m.some(e=>e.id===p)?p:h,x=(0,T.useCallback)(e=>{let t=new URLSearchParams(l.toString());t.set("tab",e);let a=t.toString();s.push(a?`${r}?${a}`:r)},[r,s,l]),[v,y]=(0,T.useState)(null),b=m.some(e=>"analytics"===e.id),j=(0,T.useCallback)(e=>{b&&(y(e),x("analytics"))},[b,x]);return(0,t.jsx)(ea.PageLayout,{children:(0,t.jsxs)("div",{className:"relative flex flex-col gap-6",children:[(0,t.jsx)(td,{user:e}),(0,t.jsxs)("div",{ref:o,className:"flex min-w-0 flex-col gap-6 xl:pr-[164px]",children:[(0,t.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,t.jsx)(tr,{user:e}),(0,t.jsx)(tu,{user:e})]}),m.length>0&&(0,t.jsx)(n.DesignCategoryTabs,{categories:m.map(e=>({id:e.id,label:e.label,icon:null===e.appId?e.icon:I.ALL_APPS_FRONTEND[e.appId].icon})),selectedCategory:g,onSelect:e=>{if(!tM(e))throw new Y.HexclaveAssertionError(`Unknown user page tab selected: ${e}`);x(e)},showBadge:!1,size:"sm",glassmorphic:!1,trailing:(0,t.jsx)(f.Button,{asChild:!0,variant:"ghost",size:"sm",className:"h-8 justify-center gap-1.5 rounded-lg bg-transparent px-1.5 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground/75 transition-colors duration-150 hover:bg-transparent hover:text-foreground hover:transition-none",children:(0,t.jsxs)(c.Link,{href:`/projects/${encodeURIComponent(a.projectId)}/apps`,className:"inline-flex items-center justify-center",children:[(0,t.jsx)(B.PlusIcon,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:"Install apps"})]})})}),"authentication"===g&&(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(tP,{sections:3}),children:(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(tb,{user:e}),(0,t.jsx)(tC,{user:e}),(0,t.jsx)(tm,{user:e})]})}),"teams"===g&&(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(tP,{sections:1}),children:(0,t.jsx)(tA,{user:e})}),"payments"===g&&(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(tP,{sections:1}),children:(0,t.jsx)(e3,{user:e})}),"analytics"===g&&(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(tP,{sections:1}),children:(0,t.jsx)(eO,{user:e,dayFilter:v,onClearDayFilter:()=>y(null)})}),"session-replays"===g&&(0,t.jsx)(T.Suspense,{fallback:(0,t.jsx)(tP,{sections:1}),children:(0,t.jsx)(ts,{lockedUserId:e.id})}),"metadata"===g&&(0,t.jsx)(d.MetadataSection,{entityName:"user",docsUrl:"https://docs.hexclave.com/guides/getting-started/user-fundamentals#custom-metadata",clientMetadata:e.clientMetadata,clientReadOnlyMetadata:e.clientReadOnlyMetadata,serverMetadata:e.serverMetadata,onUpdateClientMetadata:async t=>{await e.setClientMetadata(t)},onUpdateClientReadOnlyMetadata:async t=>{await e.setClientReadOnlyMetadata(t)},onUpdateServerMetadata:async t=>{await e.setServerMetadata(t)}})]}),(0,t.jsx)(tL,{userId:e.id,onCellClick:j,anchorRef:o})]})})}e.s(["default",0,function({userId:e}){let a=(0,en.useAdminApp)().useUser(e);return null===a?(0,t.jsx)(et.AppEnabledGuard,{appId:"authentication",children:(0,t.jsx)(ea.PageLayout,{title:"User Not Found",children:"User Not Found"})}):(0,t.jsx)(et.AppEnabledGuard,{appId:"authentication",children:(0,t.jsx)(tF,{user:a})})}],818569)}]);
|
|
113
|
+
`)})}},...e.isMultiFactorRequired?[{id:"remove-2fa",label:"Remove 2FA",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{await e.update({totpMultiFactorSecret:null})})}}]:[],{id:"restriction",label:tg(e),onClick:()=>{c(!0)}},{id:"delete",label:"Delete",itemVariant:"destructive",onClick:()=>l(!0)}]}),(0,t.jsx)(tx,{user:e,open:o,onOpenChange:c}),(0,t.jsx)(N.DeleteUserDialog,{user:e,open:n,onOpenChange:l,redirectTo:`/projects/${m.projectId}/users`}),(0,t.jsx)(N.ImpersonateUserDialog,{user:e,impersonateSnippet:d,onClose:()=>u(null)})]})]})}function th(e){let t=e.restrictedReason;if(!t)return"";switch(t.type){case"anonymous":return"Anonymous user";case"email_not_verified":return"Unverified email";case"restricted_by_administrator":return"Manually restricted";default:return"Restricted"}}function tg(e){return e.restrictedByAdmin?"Edit or remove manual restriction":e.isRestricted?"Add manual restriction":"Restrict user"}function tx({user:e,open:a,onOpenChange:s}){let[n,i]=(0,D.useState)(e.restrictedByAdminReason??""),[r,l]=(0,D.useState)(e.restrictedByAdminPrivateDetails??""),[o,c]=(0,D.useState)(!1),[d,u]=(0,D.useState)(null),{toast:m}=(0,C.useToast)(),p=async()=>{let t=n.trim(),a=r.trim();c(!0),u(null);try{await e.update({restrictedByAdmin:!0,restrictedByAdminReason:t.length>0?t:null,restrictedByAdminPrivateDetails:a.length>0?a:null}),m({title:"User restricted",variant:"success"}),s(!1)}catch(t){(0,K.captureError)("user-restriction-save-and-restrict-error",new K.HexclaveAssertionError(`Failed to save and restrict user ${e.id}`,{cause:t})),u(t instanceof Error&&t.message?t.message:"Failed to save the restriction. Please try again.")}finally{c(!1)}},h=async()=>{c(!0),u(null);try{await e.update({restrictedByAdmin:!1,restrictedByAdminReason:null,restrictedByAdminPrivateDetails:null}),m({title:"Restriction removed",variant:"success"}),s(!1)}catch(t){(0,K.captureError)("user-restriction-remove-error",new K.HexclaveAssertionError(`Failed to remove restriction for user ${e.id}`,{cause:t})),u(t instanceof Error&&t.message?t.message:"Failed to remove the restriction. Please try again.")}finally{c(!1)}};return(0,t.jsx)(y.Dialog,{open:a,onOpenChange:t=>{t&&(i(e.restrictedByAdminReason??""),l(e.restrictedByAdminPrivateDetails??""),u(null)),s(t)},children:(0,t.jsxs)(y.DialogContent,{className:"sm:max-w-[500px]",children:[(0,t.jsxs)(y.DialogHeader,{children:[(0,t.jsx)(y.DialogTitle,{children:"User Restriction"}),(0,t.jsx)(y.DialogDescription,{children:e.restrictedByAdmin?"This user is manually restricted. You can update the notes or remove the manual restriction.":"Use a manual restriction to block this user from accessing your app by default. You can optionally provide a public reason shown to the user."})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-4 py-4",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium",children:"Public reason (shown to user)"}),(0,t.jsx)(b.Input,{value:n,onChange:e=>i(e.target.value),placeholder:"Optional message visible to the user",disabled:o})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium",children:"Private details (internal only, optional)"}),(0,t.jsx)(w.Textarea,{value:r,onChange:e=>l(e.target.value),placeholder:"Internal notes, e.g., which sign-up rule triggered",className:"min-h-[80px]",disabled:o})]})]}),d&&(0,t.jsx)("div",{className:"rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:d}),(0,t.jsxs)(y.DialogFooter,{className:"flex-col sm:flex-row gap-2",children:[e.restrictedByAdmin&&(0,t.jsx)(f.Button,{variant:"outline",onClick:h,disabled:o,className:"sm:mr-auto",children:"Remove manual restriction"}),(0,t.jsx)(f.Button,{variant:"outline",onClick:()=>s(!1),disabled:o,children:"Cancel"}),(0,t.jsx)(f.Button,{onClick:p,disabled:o,children:"Save & restrict user"})]})]})})}function tf({user:e}){let[a,s]=(0,D.useState)(!1);if(!e.isRestricted)return null;let n=th(e);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(g.Alert,{variant:"destructive",className:"mb-4",children:[(0,t.jsx)(z.ProhibitIcon,{size:16}),(0,t.jsx)(g.AlertTitle,{children:"This user is currently restricted"}),(0,t.jsxs)(g.AlertDescription,{className:"mt-2",children:[(0,t.jsxs)("p",{className:"mb-2",children:["Restricted users cannot access your app by default. This user is restricted because: ",(0,t.jsx)("strong",{children:n}),"."]}),e.restrictedReason?.type==="email_not_verified"&&(0,t.jsx)("p",{className:"text-sm opacity-80",children:"The user needs to verify their email address to remove this restriction."}),e.restrictedReason?.type==="anonymous"&&(0,t.jsx)("p",{className:"text-sm opacity-80",children:"Anonymous users must sign up with credentials to remove this restriction."}),e.restrictedReason?.type==="restricted_by_administrator"&&(0,t.jsxs)("div",{className:"text-sm opacity-80",children:[(0,t.jsx)("p",{children:"This user was manually restricted by an administrator."}),e.restrictedByAdminReason&&(0,t.jsxs)("p",{className:"mt-1",children:[(0,t.jsx)("strong",{children:"Public reason:"})," ",e.restrictedByAdminReason]}),e.restrictedByAdminPrivateDetails&&(0,t.jsxs)("p",{className:"mt-1",children:[(0,t.jsx)("strong",{children:"Private details:"})," ",e.restrictedByAdminPrivateDetails]})]}),(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>s(!0),className:"mt-3",children:tg(e)})]})]}),(0,t.jsx)(tx,{user:e,open:a,onOpenChange:s})]})}function tv({user:e}){let a=(0,D.useMemo)(()=>[{type:"text",icon:(0,t.jsx)($.HashIcon,{size:14}),name:"User ID",value:e.id,readOnly:!0},{type:"text",icon:(0,t.jsx)(R.EnvelopeIcon,{size:14}),name:"Primary email",value:e.primaryEmail??"",placeholder:"-",readOnly:!0},{type:"text",icon:(0,t.jsx)(U,{size:14}),name:"Display name",value:e.displayName??"",placeholder:"-",onUpdate:async t=>{await e.setDisplayName(t)}},{type:"text",icon:(0,t.jsx)(Z.SquareIcon,{size:14}),name:"Password",value:"",placeholder:e.hasPassword?"************":"-",onUpdate:async t=>{await e.setPassword({password:t})}},{type:"text",icon:(0,t.jsx)(V.ShieldIcon,{size:14}),name:"2-factor auth",value:e.isMultiFactorRequired?"Enabled":"",placeholder:"Disabled",readOnly:!0},{type:"text",icon:(0,t.jsx)(M.CalendarIcon,{size:14}),name:"Signed up at",value:e.signedUpAt.toDateString(),readOnly:!0}],[e]);return(0,t.jsx)(n.DesignEditableGrid,{items:a,columns:2,size:"sm",deferredSave:!1})}function ty({user:e}){let[a,s]=(0,D.useState)(!1),i=(0,D.useMemo)(()=>[{type:"custom",icon:(0,t.jsx)(z.ProhibitIcon,{size:14}),name:"Manual restriction",children:(0,t.jsx)("span",{className:(0,v.cn)("text-sm",e.restrictedByAdmin?"font-medium text-destructive":"text-muted-foreground"),children:e.restrictedByAdmin?"Restricted by admin":e.isRestricted?`Not manually restricted (${th(e)})`:"Not restricted"})},{type:"text",icon:(0,t.jsx)(V.ShieldIcon,{size:14}),name:"Risk score: bot",value:String(e.riskScores.signUp.bot),onUpdate:async t=>{await e.update({riskScores:{signUp:{bot:(0,k.parseRiskScore)(t),freeTrialAbuse:e.riskScores.signUp.freeTrialAbuse}}})}},{type:"text",icon:(0,t.jsx)(V.ShieldIcon,{size:14}),name:"Risk score: free trial abuse",value:String(e.riskScores.signUp.freeTrialAbuse),onUpdate:async t=>{await e.update({riskScores:{signUp:{bot:e.riskScores.signUp.bot,freeTrialAbuse:(0,k.parseRiskScore)(t)}}})}},{type:"text",icon:(0,t.jsx)(O.GlobeIcon,{size:14}),name:"Sign-up country code",value:e.countryCode??"",placeholder:"-",normalizeInput:e=>e.toUpperCase().replace(/[^A-Z]/g,"").slice(0,2),onUpdate:async t=>{await e.update({countryCode:t.length>0?(0,W.normalizeCountryCode)(t):null})}}],[e]);return(0,t.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,t.jsx)("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Fraud"}),(0,t.jsx)(f.Button,{variant:e.restrictedByAdmin?"outline":"destructive",size:"sm",onClick:()=>s(!0),children:tg(e)})]}),(0,t.jsx)(n.DesignEditableGrid,{items:i,columns:2,size:"sm",deferredSave:!1}),(0,t.jsx)(tx,{user:e,open:a,onOpenChange:s})]})}function tb({value:e,showFalseIcon:a=!0}){return(0,t.jsxs)("div",{className:"flex justify-center",children:[(0,t.jsx)("span",{className:"sr-only",children:e?"Yes":"No"}),e?(0,t.jsx)(P.CheckIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-green-500"}):a?(0,t.jsx)(q.XIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-muted-foreground"}):null]})}function tj({user:e,open:a,onOpenChange:s}){let n=ee.object({email:ee.string().email("Please enter a valid e-mail address").defined("E-mail is required").label("E-mail").meta({stackFormFieldPlaceholder:"Enter e-mail address"}),isVerified:ee.boolean().default(!1).label("Set as verified").meta({description:"E-mails verified by verification emails. Can be used for OTP/magic links"}),isPrimary:ee.boolean().default(!1).label("Set as primary").meta({description:"Make this the primary e-mail for the user"}),isUsedForAuth:ee.boolean().default(!1).label("Used for sign-in").meta({description:"Allow this e-mail to be used for password sign-in. Also enables OTP/magic links if the e-mail is verified."})});return(0,t.jsx)(l.SmartFormDialog,{title:"Add E-mail",description:"Add a new e-mail address to this user account.",open:a,onOpenChange:s,formSchema:n,onSubmit:async t=>{t.email.trim()&&await e.createContactChannel({type:"email",value:t.email.trim(),isVerified:t.isVerified,isPrimary:t.isPrimary,usedForAuth:t.isUsedForAuth})}})}function tw({control:e,watch:a,domains:s,allowLocalhost:n}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.SelectField,{control:e,name:"selected",label:"Domain",options:[...s.map((e,t)=>({value:t.toString(),label:e.domain})),...n?[{value:"localhost",label:"localhost"}]:[]]}),"localhost"===a("selected")&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.InputField,{control:e,name:"localhostPort",label:"Localhost Port",placeholder:"3000",type:"number"}),(0,t.jsx)(m.Accordion,{type:"single",collapsible:!0,className:"w-full",children:(0,t.jsxs)(m.AccordionItem,{value:"item-1",children:[(0,t.jsx)(m.AccordionTrigger,{children:"Advanced"}),(0,t.jsx)(m.AccordionContent,{className:"flex flex-col gap-8",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)(o.InputField,{label:"Handler path",name:"handlerPath",control:e,placeholder:"/handler"}),(0,t.jsx)(S.Typography,{variant:"secondary",type:"footnote",children:"Only modify this if you changed the default handler path in your app"})]})})]})})]})]})}function tA({title:e,description:a,open:s,onOpenChange:n,endpointPath:i,onSubmit:r}){let o=(0,es.useAdminApp)().useProject(),c=o.config.domains;return(0,t.jsx)(l.FormDialog,{title:e,description:a,open:s,onOpenChange:n,formSchema:ee.object({selected:ee.string().defined(),localhostPort:ee.number().test("required-if-localhost","Required if localhost is selected",(e,t)=>"localhost"!==t.parent.selected||void 0!==e),handlerPath:ee.string().optional()}),okButton:{label:"Send"},render:({control:e,watch:a})=>(0,t.jsx)(tw,{control:e,watch:a,domains:c,allowLocalhost:o.config.allowLocalhost}),onSubmit:async e=>{let t,a;if("localhost"===e.selected)t=`http://localhost:${e.localhostPort}`,a=e.handlerPath||"/handler";else{let s=c[parseInt(e.selected)];t=s.domain,a=s.handlerPath}let s=new URL(a.replace(/\/?$/,"/")+i.replace(/^\//,""),t).toString();await r(s)}})}function tS({channel:e,open:a,onOpenChange:s}){return(0,t.jsx)(tA,{title:"Send Verification Email",description:`Send a verification email to ${e.value}? The email will contain a callback link to your domain.`,open:a,onOpenChange:s,endpointPath:"/email-verification",onSubmit:async t=>{await e.sendVerificationEmail({callbackUrl:t})}})}function tC({channel:e,open:a,onOpenChange:s}){let n=(0,es.useAdminApp)();return(0,t.jsx)(tA,{title:"Send Reset Password Email",description:`Send a password reset email to ${e.value}? The email will contain a callback link to your domain.`,open:a,onOpenChange:s,endpointPath:"/password-reset",onSubmit:async t=>{await n.sendForgotPasswordEmail(e.value,{callbackUrl:t})}})}function tN({channel:e,open:a,onOpenChange:s}){let n=(0,es.useAdminApp)();return(0,t.jsx)(tA,{title:"Send Sign-In Invitation",description:`Send a sign-in invitation email to ${e.value}? The email will contain a callback link to your domain.`,open:a,onOpenChange:s,endpointPath:"/sign-in",onSubmit:async t=>{await n.sendSignInInvitationEmail(e.value,t)}})}function tI({user:e}){let a=(0,es.useAdminApp)().useProject(),s=e.useContactChannels(),[n,i]=(0,D.useState)(!1),[r,l]=(0,D.useState)(null),[o,c]=(0,D.useState)(null),[d,u]=(0,D.useState)(null),m=async e=>{await e.update({usedForAuth:!e.usedForAuth})},h=async e=>{await e.update({isVerified:!e.isVerified})},g=async e=>{await e.update({isPrimary:!0})},x=(0,D.useMemo)(()=>[{id:"value",accessor:"value",header:"E-Mail",width:220,flex:1,sortable:!1},{id:"isPrimary",header:"Primary",width:90,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tb,{value:e.isPrimary,showFalseIcon:!1})},{id:"isVerified",header:"Verified",width:90,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tb,{value:e.isVerified})},{id:"usedForAuth",header:"Used for sign-in",width:140,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tb,{value:e.usedForAuth})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:e})=>(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(p.ActionCell,{items:[{item:"Send sign-in invitation",onClick:async()=>{u({channel:e,isOpen:!0})}},...e.isVerified?[]:[{item:"Send verification email",onClick:async()=>{l({channel:e,isOpen:!0})}}],...a.config.credentialEnabled?[{item:"Send reset password email",onClick:async()=>{c({channel:e,isOpen:!0})}}]:[],{item:e.isVerified?"Mark as unverified":"Mark as verified",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>h(e))}},...e.isPrimary?[]:[{item:"Set as primary",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>g(e))}}],{item:e.usedForAuth?"Disable for sign-in":"Enable for sign-in",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>m(e))}},{item:"Delete",danger:!0,onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>e.delete())}}]})})}],[a.config.credentialEnabled]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(tj,{user:e,open:n,onOpenChange:i}),r&&(0,t.jsx)(tS,{channel:r.channel,open:r.isOpen,onOpenChange:e=>{e||l(null)}}),o&&(0,t.jsx)(tC,{channel:o.channel,open:o.isOpen,onOpenChange:e=>{e||c(null)}}),d&&(0,t.jsx)(tN,{channel:d.channel,open:d.isOpen,onOpenChange:e=>{e||u(null)}}),(0,t.jsx)(eb.UserPageTableSection,{title:"Contact Channels",urlStateKey:"contactch",columns:x,rows:s,getRowId:e=>e.id,emptyLabel:"No contact channels",actions:(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>i(!0),children:"Add E-mail"})})]})}function t_(){return(0,t.jsx)("div",{className:"flex items-center",children:Array.from({length:3}).map((e,a)=>(0,t.jsx)(j.Skeleton,{className:"h-7 w-7 rounded-full border-2 border-background",style:{marginLeft:0===a?0:-10}},a))})}function tk({team:e,onMemberClick:a}){let s=e.useUsers();if(0===s.length)return(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"No members"});let n=s.slice(0,3),i=s.length-n.length;return(0,t.jsxs)("div",{className:"group/avatars flex items-center",onClick:e=>e.stopPropagation(),children:[n.map((e,s)=>{let i=e.displayName??e.primaryEmail??e.id;return(0,t.jsxs)(A.Tooltip,{delayDuration:0,children:[(0,t.jsx)(A.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button","aria-label":`View ${i}`,onClick:t=>{t.stopPropagation(),a(e.id)},className:(0,v.cn)("relative rounded-full transition-[margin,transform] duration-200 ease-out hover:z-20 hover:scale-110 focus:z-20 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",0===s?"ml-0":"-ml-2.5 group-hover/avatars:ml-1"),style:{zIndex:n.length-s},children:(0,t.jsxs)(x.Avatar,{className:"h-7 w-7 border-2 border-background",children:[(0,t.jsx)(x.AvatarImage,{src:e.profileImageUrl??void 0,alt:i}),(0,t.jsx)(x.AvatarFallback,{className:"text-[10px]",children:i.slice(0,2).toUpperCase()})]})})}),(0,t.jsx)(A.TooltipContent,{side:"top",className:"text-xs",children:i})]},e.id)}),i>0&&(0,t.jsxs)("div",{className:"-ml-2.5 group-hover/avatars:ml-1 transition-[margin] duration-200 ease-out flex h-7 min-w-7 items-center justify-center rounded-full border-2 border-background bg-muted px-1.5 text-[10px] font-medium text-muted-foreground","aria-label":`${i} more members`,children:["+",i]})]})}function tT({user:e}){let s=(0,es.useAdminApp)(),n=(0,u.useRouter)(),[i,r]=(0,D.useState)(void 0),l=e.useTeams(void 0===i?void 0:{orderBy:"createdAt",desc:i}),[o,c]=(0,D.useState)(!1),[d,m]=(0,D.useState)(null),g=(0,D.useCallback)(e=>{n.push(`/projects/${encodeURIComponent(s.projectId)}/teams/${encodeURIComponent(e)}`)},[n,s.projectId]),x=(0,D.useCallback)(e=>{n.push(`/projects/${encodeURIComponent(s.projectId)}/users/${encodeURIComponent(e)}`)},[n,s.projectId]),v=(0,D.useMemo)(()=>[{id:"id",accessor:"id",header:"Team ID",width:180,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("div",{className:"font-mono text-xs bg-muted px-2 py-1 rounded max-w-[180px] truncate",children:e.id})},{id:"displayName",accessor:"displayName",header:"Display Name",width:220,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"font-medium",children:e.displayName||"-"})},{id:"members",header:"Members",width:160,sortable:!1,renderCell:({row:e})=>(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(t_,{}),children:(0,t.jsx)(tk,{team:e,onMemberClick:x})})},{id:"createdAt",accessor:"createdAt",header:"Created At",width:140,sortable:!0,renderCell:({row:e})=>(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:e.createdAt.toLocaleDateString()})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:e})=>(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(p.ActionCell,{items:[{item:"View Team",onClick:()=>{g(e.id)}},{item:"Remove from team",danger:!0,onClick:()=>{m(e)}}]})})}],[g,x]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eb.UserPageTableSection,{title:"Teams",urlStateKey:"userteams",columns:v,rows:l,getRowId:e=>e.id,emptyLabel:"No teams found",onRowClick:e=>g(e.id),onSortChange:e=>{let t=e.find(e=>"createdAt"===e.columnId);r(t?"desc"===t.direction:void 0)},actions:(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>c(!0),children:"Add to team"})}),(0,t.jsx)(y.Dialog,{open:o,onOpenChange:c,children:(0,t.jsxs)(y.DialogContent,{className:"sm:max-w-2xl",children:[(0,t.jsx)(y.DialogHeader,{className:"mb-4",children:(0,t.jsx)(y.DialogTitle,{children:"Add to team"})}),(0,t.jsx)(a.TeamSearchTable,{action:a=>{let s=void 0!==l.find(e=>e.id===a.id);return(0,t.jsx)(f.Button,{variant:"outline",size:"sm",disabled:s,onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{await a.addUser(e.id),c(!1)})},children:s?"Added":"Add"})}})]})}),(0,t.jsx)(h.ActionDialog,{title:!0,danger:!0,open:null!==d,onOpenChange:e=>{e||m(null)},okButton:{label:"Remove user from team",onClick:async()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{d&&await d.removeUser(e.id)})}},cancelButton:!0,confirmText:"I understand this will cause the user to lose access to the team.",children:d&&`Are you sure you want to remove "${e.displayName??e.id}" from the team "${d.displayName}"?`})]})}function tD(e){let a=(0,es.useAdminApp)(),s=a.useProject(),{toast:n}=(0,C.useToast)(),i=s.config.oauthProviders,r="edit"===e.mode,c=r?e.provider:null,d=ee.object({providerId:ee.string().defined("Provider is required").nonEmpty("Provider is required").label("OAuth Provider").meta({stackFormFieldRender:e=>(0,t.jsx)(o.SelectField,{control:e.control,name:e.name,label:e.label,disabled:e.disabled||r,options:i.map(e=>({value:e.id,label:e.id.charAt(0).toUpperCase()+e.id.slice(1)})),placeholder:"Select OAuth provider"})}),email:ee.string().email("Please enter a valid e-mail address").optional().label("Email").meta({stackFormFieldPlaceholder:"Enter email address (optional)"}),accountId:ee.string().defined("Account ID is required").label("Account ID").meta({stackFormFieldPlaceholder:"Enter OAuth account ID",description:"The unique account identifier from the OAuth provider",stackFormFieldExtraProps:{disabled:r}}),allowSignIn:ee.boolean().default(!0).label("Used for sign-in").meta({description:"Allow this OAuth provider to be used for authentication"}),allowConnectedAccounts:ee.boolean().default(!0).label("Used for connected accounts").meta({description:"Allow this OAuth provider to be used for connected account features"})}),u=r&&c?{providerId:c.type,email:c.email,accountId:c.accountId,allowSignIn:c.allowSignIn,allowConnectedAccounts:c.allowConnectedAccounts}:{providerId:"",email:"",accountId:"",allowSignIn:!0,allowConnectedAccounts:!0},m=async t=>{let s;if(r&&c)s=await c.update({email:t.email?.trim()||c.email,allowSignIn:t.allowSignIn,allowConnectedAccounts:t.allowConnectedAccounts});else{if(!t.accountId.trim())return;let n=i.find(e=>e.id===t.providerId);if(!n)throw new K.HexclaveAssertionError(`Provider config not found for ${t.providerId}`);s=await a.createOAuthProvider({userId:e.user.id,providerConfigId:n.id,accountId:t.accountId.trim(),email:t.email?.trim()||"",allowSignIn:t.allowSignIn,allowConnectedAccounts:t.allowConnectedAccounts})}if("error"===s.status){let e=r&&c?c.type:t.providerId,a=r&&c?c.accountId:t.accountId,i=r?"updating":"adding";return H.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(s.error)?n({title:"Account Already Connected",description:`A ${e} provider with account ID "${a}" already exists (possibly for a different user)`,variant:"destructive"}):(console.error(s.error),n({title:"Error",description:`An unexpected error occurred while ${i} the OAuth provider.`,variant:"destructive"})),"prevent-close"}},p=d.default(u);return(0,t.jsx)(l.SmartFormDialog,{title:r?"Edit OAuth Provider":"Add OAuth Provider",description:r?"Update the OAuth provider settings.":"Connect a new OAuth provider to this user account.",open:e.open,onOpenChange:e.onOpenChange,formSchema:p,onSubmit:m})}function tE({user:e}){let a=e.useOAuthProviders(),[s,n]=(0,D.useState)(!1),[i,r]=(0,D.useState)(null),{toast:l}=(0,C.useToast)(),o=(0,D.useCallback)(async(e,t)=>{let a=await e.update(t);if("error"===a.status)if(H.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(a.error))l({title:"Account Already Connected",description:`A ${e.type} provider with account ID "${e.accountId}" is already connected for this user.`,variant:"destructive"});else{let e=void 0!==t.allowSignIn?"sign-in":"connected accounts";l({title:"Error",description:`Failed to update ${e} setting.`,variant:"destructive"})}else{let a="";void 0!==t.allowSignIn?a=`Sign-in ${t.allowSignIn?"enabled":"disabled"} for ${e.type} provider.`:void 0!==t.allowConnectedAccounts&&(a=`Connected accounts ${t.allowConnectedAccounts?"enabled":"disabled"} for ${e.type} provider.`),l({title:"Success",description:a,variant:"success"})}},[l]),c=(0,D.useMemo)(()=>[{id:"type",accessor:"type",header:"Provider",width:110,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"capitalize font-medium",children:e.type})},{id:"email",accessor:"email",header:"Email",width:160,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"block max-w-full truncate text-sm text-muted-foreground",title:e.email,children:e.email??"No email"})},{id:"accountId",accessor:"accountId",header:"Account ID",width:160,flex:1,sortable:!1,renderCell:({row:e})=>(0,t.jsx)("span",{className:"font-mono text-xs truncate block max-w-[160px]",children:e.accountId})},{id:"allowSignIn",header:"Sign-in",width:90,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tb,{value:e.allowSignIn})},{id:"allowConnectedAccounts",header:"Connected",width:110,align:"center",sortable:!1,renderCell:({row:e})=>(0,t.jsx)(tb,{value:e.allowConnectedAccounts})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:e})=>(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(p.ActionCell,{items:[{item:"Edit",onClick:()=>r(e)},{item:e.allowSignIn?"Disable sign-in":"Enable sign-in",onClick:async()=>{await o(e,{allowSignIn:!e.allowSignIn})}},{item:e.allowConnectedAccounts?"Disable connected accounts":"Enable connected accounts",onClick:async()=>{await o(e,{allowConnectedAccounts:!e.allowConnectedAccounts})}},{item:"Delete",danger:!0,onClick:async()=>{await e.delete()}}]})})}],[o]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(tD,{user:e,open:s,onOpenChange:n,mode:"create"}),i&&(0,t.jsx)(tD,{user:e,open:!!i,onOpenChange:()=>r(null),mode:"edit",provider:i}),(0,t.jsx)(eb.UserPageTableSection,{title:"OAuth Providers",urlStateKey:"useroauth",columns:c,rows:a,getRowId:e=>e.id,emptyLabel:"No OAuth providers connected",actions:(0,t.jsx)(f.Button,{variant:"outline",size:"sm",onClick:()=>n(!0),children:"Add Provider"})})]})}let tL=[{label:"",ariaLabel:null},{label:"M",ariaLabel:"Monday"},{label:"",ariaLabel:null},{label:"W",ariaLabel:"Wednesday"},{label:"",ariaLabel:null},{label:"F",ariaLabel:"Friday"},{label:"",ariaLabel:null}],tU=["bg-foreground/[0.08] dark:bg-foreground/[0.12]","bg-emerald-500/30 dark:bg-emerald-400/30","bg-emerald-500/55 dark:bg-emerald-400/55","bg-emerald-500/80 dark:bg-emerald-400/80","bg-emerald-500 dark:bg-emerald-400"],tM=new Intl.DateTimeFormat(void 0,{weekday:"short",month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function tP(e){let[t,a,s]=e.split("-").map(Number),n=new Date(Date.UTC(t,a-1,s));return tM.format(n)}function tF({children:e}){return(0,t.jsxs)("div",{className:"flex flex-col items-center gap-2 shrink-0",children:[(0,t.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground tracking-[0.14em] uppercase",children:"Activity"}),(0,t.jsx)("div",{className:"grid text-[9px] leading-none text-muted-foreground/70",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)"},children:tL.map((e,a)=>(0,t.jsx)("span",{className:"flex justify-center","aria-label":e.ariaLabel??void 0,"aria-hidden":null==e.ariaLabel,style:{width:11},children:e.label},`${e.ariaLabel??"spacer"}-${a}`))}),(0,t.jsx)("div",{className:"grid",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)",gridTemplateRows:"repeat(53, 11px)",gridAutoFlow:"row"},children:e})]})}function tR(){let e=(0,D.useMemo)(()=>Array.from({length:371}),[]);return(0,t.jsx)(tF,{children:e.map((e,a)=>(0,t.jsx)("div",{className:(0,v.cn)("rounded-[2px]",tU[0]),style:{width:11,height:11},"aria-hidden":!0},a))})}function tO({userId:e,onCellClick:a}){let s=(0,es.useAdminApp)(),{data_points:n}=(0,T.useUserActivityOrThrow)(s,e),i=(0,D.useMemo)(()=>new Map(n.map(e=>[e.date,e.activity])),[n]),r=(0,D.useMemo)(()=>{let e,t,a=((e=new Date(n.length>0?function(e){let[t,a,s]=e.split("-").map(Number);return new Date(Date.UTC(t,a-1,s))}(n[n.length-1].date):new Date)).setUTCHours(0,0,0,0),t=e.getUTCDay(),e.setUTCDate(e.getUTCDate()-t),e);return Array.from({length:371},(e,t)=>{let s=Math.floor(t/7),n=new Date(a);n.setUTCDate(a.getUTCDate()-7*s+t%7);let r=n.toISOString().slice(0,10);return{date:r,activity:i.get(r)??0}})},[i,n]),l=(0,D.useMemo)(()=>r.reduce((e,t)=>Math.max(e,t.activity),0),[r]);return(0,t.jsx)(tF,{children:r.map(e=>{let s=function(e,t){if(e<=0||t<=0)return 0;let a=Math.log1p(e)/Math.log1p(t);return a<=.25?1:a<=.5?2:a<=.75?3:4}(e.activity,l);return(0,t.jsxs)(A.Tooltip,{delayDuration:0,children:[(0,t.jsx)(A.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button","aria-label":`View analytics for ${tP(e.date)} (${e.activity} ${1===e.activity?"event":"events"})`,onClick:()=>a(e.date),className:(0,v.cn)("relative rounded-[2px] transition-none hover:z-10 hover:ring-2 hover:ring-foreground focus:z-10 focus:outline-none focus-visible:ring-2 focus-visible:ring-foreground cursor-pointer",tU[s]),style:{width:11,height:11}})}),(0,t.jsxs)(A.TooltipContent,{side:"left",sideOffset:8,collisionPadding:8,className:"z-[100] whitespace-nowrap text-xs",children:[(0,t.jsxs)("div",{className:"font-medium",children:[e.activity," ",1===e.activity?"event":"events"]}),(0,t.jsx)("div",{className:"opacity-70",children:tP(e.date)})]})]},e.date)})})}function t$({userId:e,onCellClick:a,anchorRef:s}){let[n,i]=(0,D.useState)(!1),[r,l]=(0,D.useState)(null);return((0,D.useEffect)(()=>{i(!0)},[]),(0,D.useEffect)(()=>{let e=()=>{let e=s.current;null===e||l(e.getBoundingClientRect().right-164+12)};e(),window.addEventListener("resize",e);let t=new ResizeObserver(e);return null!==s.current&&t.observe(s.current),()=>{window.removeEventListener("resize",e),t.disconnect()}},[s]),n&&null!==r)?(0,J.createPortal)((0,t.jsx)("aside",{className:"pointer-events-none fixed z-30 hidden -translate-y-1/2 xl:block",style:{left:r,width:140,top:`max(50vh, ${455.5}px)`},children:(0,t.jsx)("div",{className:"pointer-events-auto flex w-full items-center justify-center",children:(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(tR,{}),children:(0,t.jsx)(tO,{userId:e,onCellClick:a})})})}),document.body):null}let tB=[{id:"authentication",label:"Authentication",appId:"authentication"},{id:"teams",label:"Teams",appId:"teams"},{id:"emails",label:"Emails",appId:"emails"},{id:"payments",label:"Payments",appId:"payments"},{id:"analytics",label:"Analytics",appId:"analytics"},{id:"session-replays",label:"Session Replays",appId:"session-replays"},{id:"metadata",label:"Metadata",appId:null,icon:F.DatabaseIcon}];function tz(e){return tB.some(t=>t.id===e)}function tV({sections:e}){return(0,t.jsx)("div",{className:"flex flex-col gap-6",children:Array.from({length:e}).map((e,a)=>(0,t.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,t.jsx)(j.Skeleton,{className:"h-4 w-32"}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)(j.Skeleton,{className:"h-11 w-full"}),(0,t.jsx)(j.Skeleton,{className:"h-11 w-full"}),(0,t.jsx)(j.Skeleton,{className:"h-11 w-full"})]})]},a))})}function tZ({user:e}){let a=(0,es.useAdminApp)(),n=a.useProject().useConfig(),i=(0,u.useRouter)(),r=(0,X.usePathname)(),l=(0,X.useSearchParams)(),o=(0,D.useRef)(null),m=(0,D.useMemo)(()=>tB.filter(e=>null===e.appId||(0,_.isAppEnabled)(n.apps.installed,e.appId)),[n.apps.installed]),p=l.get("tab"),h=m[0]?.id??(0,K.throwErr)("User page has no visible tabs; metadata tab should always be visible"),g=p&&tz(p)&&m.some(e=>e.id===p)?p:h,x=(0,D.useCallback)(e=>{let t=new URLSearchParams(l.toString());t.set("tab",e);let a=t.toString();i.push(a?`${r}?${a}`:r)},[r,i,l]),[v,y]=(0,D.useState)(null),b=m.some(e=>"analytics"===e.id),j=(0,D.useCallback)(e=>{b&&(y(e),x("analytics"))},[b,x]);return(0,t.jsx)(ea.PageLayout,{children:(0,t.jsxs)("div",{className:"relative flex flex-col gap-6",children:[(0,t.jsx)(tf,{user:e}),(0,t.jsxs)("div",{ref:o,className:"flex min-w-0 flex-col gap-6 xl:pr-[164px]",children:[(0,t.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,t.jsx)(tp,{user:e}),(0,t.jsx)(tv,{user:e})]}),m.length>0&&(0,t.jsx)(s.DesignCategoryTabs,{categories:m.map(e=>({id:e.id,label:e.label,icon:null===e.appId?e.icon:I.ALL_APPS_FRONTEND[e.appId].icon})),selectedCategory:g,onSelect:e=>{if(!tz(e))throw new K.HexclaveAssertionError(`Unknown user page tab selected: ${e}`);x(e)},showBadge:!1,size:"sm",glassmorphic:!1,trailing:(0,t.jsx)(f.Button,{asChild:!0,variant:"ghost",size:"sm",className:"h-8 justify-center gap-1.5 rounded-lg bg-transparent px-1.5 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground/75 transition-colors duration-150 hover:bg-transparent hover:text-foreground hover:transition-none",children:(0,t.jsxs)(c.Link,{href:`/projects/${encodeURIComponent(a.projectId)}/apps`,className:"inline-flex items-center justify-center",children:[(0,t.jsx)(B.PlusIcon,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:"Install apps"})]})})}),"authentication"===g&&(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(tV,{sections:3}),children:(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(tI,{user:e}),(0,t.jsx)(tE,{user:e}),(0,t.jsx)(ty,{user:e})]})}),"teams"===g&&(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(tV,{sections:1}),children:(0,t.jsx)(tT,{user:e})}),"emails"===g&&(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(tV,{sections:1}),children:(0,t.jsx)(tu,{user:e})}),"payments"===g&&(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(tV,{sections:1}),children:(0,t.jsx)(e3,{user:e})}),"analytics"===g&&(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(tV,{sections:1}),children:(0,t.jsx)(eO,{user:e,dayFilter:v,onClearDayFilter:()=>y(null)})}),"session-replays"===g&&(0,t.jsx)(D.Suspense,{fallback:(0,t.jsx)(tV,{sections:1}),children:(0,t.jsx)(tm,{lockedUserId:e.id})}),"metadata"===g&&(0,t.jsx)(d.MetadataSection,{entityName:"user",docsUrl:"https://docs.hexclave.com/guides/getting-started/user-fundamentals#custom-metadata",clientMetadata:e.clientMetadata,clientReadOnlyMetadata:e.clientReadOnlyMetadata,serverMetadata:e.serverMetadata,onUpdateClientMetadata:async t=>{await e.setClientMetadata(t)},onUpdateClientReadOnlyMetadata:async t=>{await e.setClientReadOnlyMetadata(t)},onUpdateServerMetadata:async t=>{await e.setServerMetadata(t)}})]}),(0,t.jsx)(t$,{userId:e.id,onCellClick:j,anchorRef:o})]})})}e.s(["default",0,function({userId:e}){let a=(0,es.useAdminApp)().useUser(e);return null===a?(0,t.jsx)(et.AppEnabledGuard,{appId:"authentication",children:(0,t.jsx)(ea.PageLayout,{title:"User Not Found",children:"User Not Found"})}):(0,t.jsx)(et.AppEnabledGuard,{appId:"authentication",children:(0,t.jsx)(tZ,{user:a})})}],818569)}]);
|