@stackframe/stack-cli 2.8.98 → 2.8.99
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 +4 -4
- 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/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/[...stack]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/handler/[...stack]/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 +2 -2
- 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 +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- 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 +7 -7
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_full.segment.rsc +7 -7
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_index.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/index.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/index.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_full.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_index.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.rsc +9 -9
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_full.segment.rsc +9 -9
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_index.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.rsc +9 -9
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_full.segment.rsc +9 -9
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_index.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.rsc +9 -9
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_full.segment.rsc +9 -9
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_index.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_tree.segment.rsc +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 +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats/__PAGE__.segment.rsc +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_full.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_index.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/[root-of-the-server]__ca795af0._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/_49383003._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/_4aa04954._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/_adc726ad._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/node_modules__pnpm_83fb9804._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_7616bb64._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_b28d1571._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/[root-of-the-server]__2cd26629._.js +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/[root-of-the-server]__6e5aa722._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0dfd49d3._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_2899b4cf._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_a6682962._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_e7e139c6._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_ee1bd9c5._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_fd22fd7e._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/node_modules__pnpm_95bb43ac._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_40edc159._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_7721fe76._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/middleware-build-manifest.js +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/pages/404.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/pages/500.html +2 -2
- 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/{97e1330e14573400.js → 01da0f32562a715b.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{ece0b5feb977ed83.js.map → 07e9cb0260d7f44a.js.map} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{d17a00ac0bd7f0ee.js.map → 4972b133fba10261.js.map} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{d52169066a1d587b.js → 9d1fbb560052530a.js} +3 -3
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{a33b351d3a4f250c.js → d30dd66c8310370c.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{7f5f59213794b24c.js → ed09d637a38230c3.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{260890fa3889cd1d.js.map → f54d295e8f8a1774.js.map} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{turbopack-3a53a1569238ac89.js → turbopack-076430aa6ba5cae1.js} +1 -1
- package/dist/dashboard/apps/dashboard/package.json +1 -1
- package/dist/dashboard/apps/dashboard/server.js +1 -1
- package/package.json +3 -3
- /package/dist/dashboard/apps/dashboard/.next/static/{gMTnCIt-sN7FywyA5JEeJ → bDi55dV-tEfkDvM_i4iNT}/_buildManifest.js +0 -0
- /package/dist/dashboard/apps/dashboard/.next/static/{gMTnCIt-sN7FywyA5JEeJ → bDi55dV-tEfkDvM_i4iNT}/_clientMiddlewareManifest.json +0 -0
- /package/dist/dashboard/apps/dashboard/.next/static/{gMTnCIt-sN7FywyA5JEeJ → bDi55dV-tEfkDvM_i4iNT}/_ssgManifest.js +0 -0
|
@@ -46,7 +46,7 @@ Run 'npx vercel link' to link your project, then 'vc env pull' to fetch the toke
|
|
|
46
46
|
|
|
47
47
|
This is a client-side timeout. To resolve this, increase your timeout configuration: https://vercel.com/docs/ai-gateway/capabilities/video-generation#extending-timeouts-for-node.js`,statusCode:n,cause:r,generationId:i})}};function mh(e){if(!(e instanceof Error))return!1;let t=e.code;return"string"==typeof t&&["UND_ERR_HEADERS_TIMEOUT","UND_ERR_BODY_TIMEOUT","UND_ERR_CONNECT_TIMEOUT"].includes(t)}async function mf(e,t){var n;return pQ.isInstance(e)?e:mh(e)?mm.createTimeoutError({originalMessage:e instanceof Error?e.message:"Unknown error",cause:e}):et.isInstance(e)?e.cause&&mh(e.cause)?mm.createTimeoutError({originalMessage:e.message,cause:e}):await mu({response:function(e){if(void 0!==e.data)return e.data;if(null!=e.responseBody)try{return JSON.parse(e.responseBody)}catch(t){return e.responseBody}return{}}(e),statusCode:null!=(n=e.statusCode)?n:500,defaultMessage:"Gateway request failed",cause:e,authMethod:t}):await mu({response:{},statusCode:500,defaultMessage:e instanceof Error?`Gateway request failed: ${e.message}`:"Unknown Gateway error",cause:e,authMethod:t})}var mg="ai-gateway-auth-method";async function my(e){let t=await pD({value:e[mg],schema:mv});return t.success?t.value:void 0}var mv=pP(()=>pO(pW.union([pW.literal("api-key"),pW.literal("oidc")]))),mb=class{constructor(e){this.config=e}async getAvailableModels(){try{let{value:e}=await c4({url:`${this.config.baseURL}/config`,headers:await pH(this.config.headers()),successfulResponseHandler:pG(mx),failedResponseHandler:pK({errorSchema:pW.any(),errorToMessage:e=>e}),fetch:this.config.fetch});return e}catch(e){throw await mf(e)}}async getCredits(){try{let e=new URL(this.config.baseURL),{value:t}=await c4({url:`${e.origin}/v1/credits`,headers:await pH(this.config.headers()),successfulResponseHandler:pG(m_),failedResponseHandler:pK({errorSchema:pW.any(),errorToMessage:e=>e}),fetch:this.config.fetch});return t}catch(e){throw await mf(e)}}},mx=pP(()=>pO(pW.object({models:pW.array(pW.object({id:pW.string(),name:pW.string(),description:pW.string().nullish(),pricing:pW.object({input:pW.string(),output:pW.string(),input_cache_read:pW.string().nullish(),input_cache_write:pW.string().nullish()}).transform(({input:e,output:t,input_cache_read:n,input_cache_write:r})=>({input:e,output:t,...n?{cachedInputTokens:n}:{},...r?{cacheCreationInputTokens:r}:{}})).nullish(),specification:pW.object({specificationVersion:pW.literal("v3"),provider:pW.string(),modelId:pW.string()}),modelType:pW.enum(["embedding","image","language","video"]).nullish()}))}))),m_=pP(()=>pO(pW.object({balance:pW.string(),total_used:pW.string()}).transform(({balance:e,total_used:t})=>({balance:e,totalUsed:t})))),mk=class{constructor(e,t){this.modelId=e,this.config=t,this.specificationVersion="v3",this.supportedUrls={"*/*":[/.*/]}}get provider(){return this.config.provider}async getArgs(e){let{abortSignal:t,...n}=e;return{args:this.maybeEncodeFileParts(n),warnings:[]}}async doGenerate(e){let{args:t,warnings:n}=await this.getArgs(e),{abortSignal:r}=e,i=await pH(this.config.headers());try{let{responseHeaders:a,value:o,rawValue:s}=await pz({url:this.getUrl(),headers:c$(i,e.headers,this.getModelConfigHeaders(this.modelId,!1),await pH(this.config.o11yHeaders)),body:t,successfulResponseHandler:pG(pW.any()),failedResponseHandler:pK({errorSchema:pW.any(),errorToMessage:e=>e}),...r&&{abortSignal:r},fetch:this.config.fetch});return{...o,request:{body:t},response:{headers:a,body:s},warnings:n}}catch(e){throw await mf(e,await my(i))}}async doStream(e){let{args:t,warnings:n}=await this.getArgs(e),{abortSignal:r}=e,i=await pH(this.config.headers());try{let{value:a,responseHeaders:o}=await pz({url:this.getUrl(),headers:c$(i,e.headers,this.getModelConfigHeaders(this.modelId,!0),await pH(this.config.o11yHeaders)),body:t,successfulResponseHandler:pV(pW.any()),failedResponseHandler:pK({errorSchema:pW.any(),errorToMessage:e=>e}),...r&&{abortSignal:r},fetch:this.config.fetch});return{stream:a.pipeThrough(new TransformStream({start(e){n.length>0&&e.enqueue({type:"stream-start",warnings:n})},transform(t,n){if(t.success){let r=t.value;("raw"!==r.type||e.includeRawChunks)&&("response-metadata"===r.type&&r.timestamp&&"string"==typeof r.timestamp&&(r.timestamp=new Date(r.timestamp)),n.enqueue(r))}else n.error(t.error)}})),request:{body:t},response:{headers:o}}}catch(e){throw await mf(e,await my(i))}}isFilePart(e){return e&&"object"==typeof e&&"type"in e&&"file"===e.type}maybeEncodeFileParts(e){for(let t of e.prompt)for(let e of t.content)if(this.isFilePart(e)&&e.data instanceof Uint8Array){let t=Uint8Array.from(e.data),n=q.Buffer.from(t).toString("base64");e.data=new URL(`data:${e.mediaType||"application/octet-stream"};base64,${n}`)}return e}getUrl(){return`${this.config.baseURL}/language-model`}getModelConfigHeaders(e,t){return{"ai-language-model-specification-version":"3","ai-language-model-id":e,"ai-language-model-streaming":String(t)}}},mw=class{constructor(e,t){this.modelId=e,this.config=t,this.specificationVersion="v3",this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0}get provider(){return this.config.provider}async doEmbed({values:e,headers:t,abortSignal:n,providerOptions:r}){var i;let a=await pH(this.config.headers());try{let{responseHeaders:o,value:s,rawValue:l}=await pz({url:this.getUrl(),headers:c$(a,null!=t?t:{},this.getModelConfigHeaders(),await pH(this.config.o11yHeaders)),body:{values:e,...r?{providerOptions:r}:{}},successfulResponseHandler:pG(mS),failedResponseHandler:pK({errorSchema:pW.any(),errorToMessage:e=>e}),...n&&{abortSignal:n},fetch:this.config.fetch});return{embeddings:s.embeddings,usage:null!=(i=s.usage)?i:void 0,providerMetadata:s.providerMetadata,response:{headers:o,body:l},warnings:[]}}catch(e){throw await mf(e,await my(a))}}getUrl(){return`${this.config.baseURL}/embedding-model`}getModelConfigHeaders(){return{"ai-embedding-model-specification-version":"3","ai-model-id":this.modelId}}},mS=pP(()=>pO(pW.object({embeddings:pW.array(pW.array(pW.number())),usage:pW.object({tokens:pW.number()}).nullish(),providerMetadata:pW.record(pW.string(),pW.record(pW.string(),pW.unknown())).optional()}))),mI=class{constructor(e,t){this.modelId=e,this.config=t,this.specificationVersion="v3",this.maxImagesPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:e,n:t,size:n,aspectRatio:r,seed:i,files:a,mask:o,providerOptions:s,headers:l,abortSignal:u}){var d,c,p,m;let h=await pH(this.config.headers());try{let{responseHeaders:f,value:g,rawValue:y}=await pz({url:this.getUrl(),headers:c$(h,null!=l?l:{},this.getModelConfigHeaders(),await pH(this.config.o11yHeaders)),body:{prompt:e,n:t,...n&&{size:n},...r&&{aspectRatio:r},...i&&{seed:i},...s&&{providerOptions:s},...a&&{files:a.map(e=>mT(e))},...o&&{mask:mT(o)}},successfulResponseHandler:pG(mE),failedResponseHandler:pK({errorSchema:pW.any(),errorToMessage:e=>e}),...u&&{abortSignal:u},fetch:this.config.fetch});return{images:g.images,warnings:null!=(d=g.warnings)?d:[],providerMetadata:g.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:f},...null!=g.usage&&{usage:{inputTokens:null!=(c=g.usage.inputTokens)?c:void 0,outputTokens:null!=(p=g.usage.outputTokens)?p:void 0,totalTokens:null!=(m=g.usage.totalTokens)?m:void 0}}}}catch(e){throw mf(e,await my(h))}}getUrl(){return`${this.config.baseURL}/image-model`}getModelConfigHeaders(){return{"ai-image-model-specification-version":"3","ai-model-id":this.modelId}}};function mT(e){return"file"===e.type&&e.data instanceof Uint8Array?{...e,data:cz(e.data)}:e}var mC=pW.object({images:pW.array(pW.unknown()).optional()}).catchall(pW.unknown()),mA=pW.discriminatedUnion("type",[pW.object({type:pW.literal("unsupported"),feature:pW.string(),details:pW.string().optional()}),pW.object({type:pW.literal("compatibility"),feature:pW.string(),details:pW.string().optional()}),pW.object({type:pW.literal("other"),message:pW.string()})]),mP=pW.object({inputTokens:pW.number().nullish(),outputTokens:pW.number().nullish(),totalTokens:pW.number().nullish()}),mE=pW.object({images:pW.array(pW.string()),warnings:pW.array(mA).optional(),providerMetadata:pW.record(pW.string(),mC).optional(),usage:mP.optional()}),m$=class{constructor(e,t){this.modelId=e,this.config=t,this.specificationVersion="v3",this.maxVideosPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:e,n:t,aspectRatio:n,resolution:r,duration:i,fps:a,seed:o,image:s,providerOptions:l,headers:u,abortSignal:d}){var c,p;let m=await pH(this.config.headers());try{let{responseHeaders:h,value:f,rawValue:g}=await pz({url:this.getUrl(),headers:c$(m,null!=u?u:{},this.getModelConfigHeaders(),await pH(this.config.o11yHeaders)),body:{prompt:e,n:t,...n&&{aspectRatio:n},...r&&{resolution:r},...i&&{duration:i},...a&&{fps:a},...o&&{seed:o},...l&&{providerOptions:l},...s&&{image:(p=s,"file"===p.type&&p.data instanceof Uint8Array?{...p,data:cz(p.data)}:p)}},successfulResponseHandler:pG(mD),failedResponseHandler:pK({errorSchema:pW.any(),errorToMessage:e=>e}),...d&&{abortSignal:d},fetch:this.config.fetch});return{videos:f.videos,warnings:null!=(c=f.warnings)?c:[],providerMetadata:f.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:h}}}catch(e){throw mf(e,await my(m))}}getUrl(){return`${this.config.baseURL}/video-model`}getModelConfigHeaders(){return{"ai-video-model-specification-version":"3","ai-model-id":this.modelId}}},mO=pW.object({videos:pW.array(pW.unknown()).optional()}).catchall(pW.unknown()),mR=pW.union([pW.object({type:pW.literal("url"),url:pW.string(),mediaType:pW.string()}),pW.object({type:pW.literal("base64"),data:pW.string(),mediaType:pW.string()})]),mD=pW.object({videos:pW.array(mR),warnings:pW.array(pW.object({type:pW.literal("other"),message:pW.string()})).optional(),providerMetadata:pW.record(pW.string(),mO).optional()}),mj=pB({id:"gateway.parallel_search",inputSchema:pP(()=>pO(u$.object({objective:u$.string().describe("Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters."),search_queries:u$.array(u$.string()).optional().describe("Optional search queries to supplement the objective. Maximum 200 characters per query."),mode:u$.enum(["one-shot","agentic"]).optional().describe('Mode preset: "one-shot" for comprehensive results with longer excerpts (default), "agentic" for concise, token-efficient results for multi-step workflows.'),max_results:u$.number().optional().describe("Maximum number of results to return (1-20). Defaults to 10 if not specified."),source_policy:u$.object({include_domains:u$.array(u$.string()).optional().describe("List of domains to include in search results."),exclude_domains:u$.array(u$.string()).optional().describe("List of domains to exclude from search results."),after_date:u$.string().optional().describe("Only include results published after this date (ISO 8601 format).")}).optional().describe("Source policy for controlling which domains to include/exclude and freshness."),excerpts:u$.object({max_chars_per_result:u$.number().optional().describe("Maximum characters per result."),max_chars_total:u$.number().optional().describe("Maximum total characters across all results.")}).optional().describe("Excerpt configuration for controlling result length."),fetch_policy:u$.object({max_age_seconds:u$.number().optional().describe("Maximum age in seconds for cached content. Set to 0 to always fetch fresh content.")}).optional().describe("Fetch policy for controlling content freshness.")}))),outputSchema:pP(()=>pO(u$.union([u$.object({searchId:u$.string(),results:u$.array(u$.object({url:u$.string(),title:u$.string(),excerpt:u$.string(),publishDate:u$.string().nullable().optional(),relevanceScore:u$.number().optional()}))}),u$.object({error:u$.enum(["api_error","rate_limit","timeout","invalid_input","configuration_error","unknown"]),statusCode:u$.number().optional(),message:u$.string()})])))}),mU=pB({id:"gateway.perplexity_search",inputSchema:pP(()=>pO(u$.object({query:u$.union([u$.string(),u$.array(u$.string())]).describe("Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries."),max_results:u$.number().optional().describe("Maximum number of search results to return (1-20, default: 10)"),max_tokens_per_page:u$.number().optional().describe("Maximum number of tokens to extract per search result page (256-2048, default: 2048)"),max_tokens:u$.number().optional().describe("Maximum total tokens across all search results (default: 25000, max: 1000000)"),country:u$.string().optional().describe("Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')"),search_domain_filter:u$.array(u$.string()).optional().describe("List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']"),search_language_filter:u$.array(u$.string()).optional().describe("List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']"),search_after_date:u$.string().optional().describe("Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter."),search_before_date:u$.string().optional().describe("Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter."),last_updated_after_filter:u$.string().optional().describe("Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter."),last_updated_before_filter:u$.string().optional().describe("Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter."),search_recency_filter:u$.enum(["day","week","month","year"]).optional().describe("Filter results by relative time period. Cannot be used with search_after_date or search_before_date.")}))),outputSchema:pP(()=>pO(u$.union([u$.object({results:u$.array(u$.object({title:u$.string(),url:u$.string(),snippet:u$.string(),date:u$.string().optional(),lastUpdated:u$.string().optional()})),id:u$.string()}),u$.object({error:u$.enum(["api_error","rate_limit","timeout","invalid_input","unknown"]),statusCode:u$.number().optional(),message:u$.string()})])))}),mN={parallelSearch:(e={})=>mj(e),perplexitySearch:(e={})=>mU(e)};async function mM(){var e;return null==(e=(0,pY.getContext)().headers)?void 0:e["x-vercel-id"]}async function mz(e){let t=c9({settingValue:e.apiKey,environmentVariableName:"AI_GATEWAY_API_KEY"});return t?{token:t,authMethod:"api-key"}:{token:await (0,pY.getVercelOidcToken)(),authMethod:"oidc"}}!function(e={}){var t,n;let r=null,i=null,a=null!=(t=e.metadataCacheRefreshMillis)?t:3e5,o=0,s=null!=(n=pq(e.baseURL))?n:"https://ai-gateway.vercel.sh/v3/ai",l=async()=>{try{let t=await mz(e);return cQ({Authorization:`Bearer ${t.token}`,"ai-gateway-protocol-version":"0.0.1",[mg]:t.authMethod,...e.headers},"ai-sdk/gateway/3.0.41")}catch(e){throw p4.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401,cause:e})}},u=()=>{let e=c9({settingValue:void 0,environmentVariableName:"VERCEL_DEPLOYMENT_ID"}),t=c9({settingValue:void 0,environmentVariableName:"VERCEL_ENV"}),n=c9({settingValue:void 0,environmentVariableName:"VERCEL_REGION"});return async()=>{let r=await mM();return{...e&&{"ai-o11y-deployment-id":e},...t&&{"ai-o11y-environment":t},...n&&{"ai-o11y-region":n},...r&&{"ai-o11y-request-id":r}}}},d=t=>new mk(t,{provider:"gateway",baseURL:s,headers:l,fetch:e.fetch,o11yHeaders:u()}),c=async()=>{var t,n,u;let d=null!=(u=null==(n=null==(t=e._internal)?void 0:t.currentDate)?void 0:n.call(t).getTime())?u:Date.now();return(!r||d-o>a)&&(o=d,r=new mb({baseURL:s,headers:l,fetch:e.fetch}).getAvailableModels().then(e=>(i=e,e)).catch(async e=>{throw await mf(e,await my(await l()))})),i?Promise.resolve(i):r},p=async()=>new mb({baseURL:s,headers:l,fetch:e.fetch}).getCredits().catch(async e=>{throw await mf(e,await my(await l()))}),m=function(e){if(new.target)throw Error("The Gateway Provider model function cannot be called with the new keyword.");return d(e)};m.specificationVersion="v3",m.getAvailableModels=c,m.getCredits=p,m.imageModel=t=>new mI(t,{provider:"gateway",baseURL:s,headers:l,fetch:e.fetch,o11yHeaders:u()}),m.languageModel=d;let h=t=>new mw(t,{provider:"gateway",baseURL:s,headers:l,fetch:e.fetch,o11yHeaders:u()});m.embeddingModel=h,m.textEmbeddingModel=h,m.videoModel=t=>new m$(t,{provider:"gateway",baseURL:s,headers:l,fetch:e.fetch,o11yHeaders:u()}),m.chat=m.languageModel,m.embedding=m.embeddingModel,m.image=m.imageModel,m.video=m.videoModel,m.tools=mN}();var pW=u$;e.i(305274),(a=F||(F={}))[a.UNSET=0]="UNSET",a[a.OK=1]="OK",a[a.ERROR=2]="ERROR",e.i(905681).ContextAPI.getInstance();var mL=Object.defineProperty,mF=(Symbol.for("vercel.ai.error.AI_InvalidArgumentError"),Symbol.for("vercel.ai.error.AI_InvalidStreamPartError"),Symbol.for("vercel.ai.error.AI_InvalidToolApprovalError"),Symbol.for("vercel.ai.error.AI_InvalidToolInputError"),Symbol.for("vercel.ai.error.AI_ToolCallNotFoundForApprovalError"),Symbol.for("vercel.ai.error.AI_MissingToolResultsError"),Symbol.for("vercel.ai.error.AI_NoImageGeneratedError"),"AI_NoObjectGeneratedError"),mZ=`vercel.ai.error.${mF}`,mB=Symbol.for(mZ),mH=class extends Y{constructor({message:e="No object generated.",cause:t,text:n,response:r,usage:i,finishReason:a}){super({name:mF,message:e,cause:t}),this[Z]=!0,this.text=n,this.response=r,this.usage=i,this.finishReason=a}static isInstance(e){return Y.hasMarker(e,mZ)}};Z=mB,Symbol.for("vercel.ai.error.AI_NoOutputGeneratedError"),Symbol.for("vercel.ai.error.AI_NoSpeechGeneratedError"),Symbol.for("vercel.ai.error.AI_NoTranscriptGeneratedError"),Symbol.for("vercel.ai.error.AI_NoVideoGeneratedError"),Symbol.for("vercel.ai.error.AI_NoSuchToolError"),Symbol.for("vercel.ai.error.AI_ToolCallRepairError");var mK="AI_UIMessageStreamError",mV=`vercel.ai.error.${mK}`,mG=Symbol.for(mV),mq=class extends Y{constructor({chunkType:e,chunkId:t,message:n}){super({name:mK,message:n}),this[B]=!0,this.chunkType=e,this.chunkId=t}static isInstance(e){return Y.hasMarker(e,mV)}};B=mG,Symbol.for("vercel.ai.error.AI_InvalidDataContentError"),Symbol.for("vercel.ai.error.AI_InvalidMessageRoleError");var mJ="AI_MessageConversionError",mW=`vercel.ai.error.${mJ}`,mY=Symbol.for(mW),mX=class extends Y{constructor({originalMessage:e,message:t}){super({name:mJ,message:t}),this[H]=!0,this.originalMessage=e}static isInstance(e){return Y.hasMarker(e,mW)}};H=mY,Symbol.for("vercel.ai.error.AI_RetryError");var mQ="6.0.81",m0=pW.union([pW.string(),pW.instanceof(Uint8Array),pW.instanceof(ArrayBuffer),pW.custom(e=>{var t,n;return null!=(n=null==(t=globalThis.Buffer)?void 0:t.isBuffer(e))&&n},{message:"Must be a Buffer"})]);async function m1({toolCallId:e,input:t,output:n,tool:r,errorMode:i}){return"text"===i?{type:"error-text",value:eo(n)}:"json"===i?{type:"error-json",value:m4(n)}:(null==r?void 0:r.toModelOutput)?await r.toModelOutput({toolCallId:e,input:t,output:n}):"string"==typeof n?{type:"text",value:n}:{type:"json",value:m4(n)}}function m4(e){return void 0===e?null:e}var m6=pW.lazy(()=>pW.union([pW.null(),pW.string(),pW.number(),pW.boolean(),pW.record(pW.string(),m6.optional()),pW.array(m6)])),m2=pW.record(pW.string(),pW.record(pW.string(),m6.optional())),m9=pW.object({type:pW.literal("text"),text:pW.string(),providerOptions:m2.optional()}),m5=pW.object({type:pW.literal("image"),image:pW.union([m0,pW.instanceof(URL)]),mediaType:pW.string().optional(),providerOptions:m2.optional()}),m3=pW.object({type:pW.literal("file"),data:pW.union([m0,pW.instanceof(URL)]),filename:pW.string().optional(),mediaType:pW.string(),providerOptions:m2.optional()}),m8=pW.object({type:pW.literal("reasoning"),text:pW.string(),providerOptions:m2.optional()}),m7=pW.object({type:pW.literal("tool-call"),toolCallId:pW.string(),toolName:pW.string(),input:pW.unknown(),providerOptions:m2.optional(),providerExecuted:pW.boolean().optional()}),he=pW.discriminatedUnion("type",[pW.object({type:pW.literal("text"),value:pW.string(),providerOptions:m2.optional()}),pW.object({type:pW.literal("json"),value:m6,providerOptions:m2.optional()}),pW.object({type:pW.literal("execution-denied"),reason:pW.string().optional(),providerOptions:m2.optional()}),pW.object({type:pW.literal("error-text"),value:pW.string(),providerOptions:m2.optional()}),pW.object({type:pW.literal("error-json"),value:m6,providerOptions:m2.optional()}),pW.object({type:pW.literal("content"),value:pW.array(pW.union([pW.object({type:pW.literal("text"),text:pW.string(),providerOptions:m2.optional()}),pW.object({type:pW.literal("media"),data:pW.string(),mediaType:pW.string()}),pW.object({type:pW.literal("file-data"),data:pW.string(),mediaType:pW.string(),filename:pW.string().optional(),providerOptions:m2.optional()}),pW.object({type:pW.literal("file-url"),url:pW.string(),providerOptions:m2.optional()}),pW.object({type:pW.literal("file-id"),fileId:pW.union([pW.string(),pW.record(pW.string(),pW.string())]),providerOptions:m2.optional()}),pW.object({type:pW.literal("image-data"),data:pW.string(),mediaType:pW.string(),providerOptions:m2.optional()}),pW.object({type:pW.literal("image-url"),url:pW.string(),providerOptions:m2.optional()}),pW.object({type:pW.literal("image-file-id"),fileId:pW.union([pW.string(),pW.record(pW.string(),pW.string())]),providerOptions:m2.optional()}),pW.object({type:pW.literal("custom"),providerOptions:m2.optional()})]))})]),ht=pW.object({type:pW.literal("tool-result"),toolCallId:pW.string(),toolName:pW.string(),output:he,providerOptions:m2.optional()}),hn=pW.object({type:pW.literal("tool-approval-request"),approvalId:pW.string(),toolCallId:pW.string()}),hr=pW.object({type:pW.literal("tool-approval-response"),approvalId:pW.string(),approved:pW.boolean(),reason:pW.string().optional()}),hi=pW.object({role:pW.literal("system"),content:pW.string(),providerOptions:m2.optional()}),ha=pW.object({role:pW.literal("user"),content:pW.union([pW.string(),pW.array(pW.union([m9,m5,m3]))]),providerOptions:m2.optional()}),ho=pW.object({role:pW.literal("assistant"),content:pW.union([pW.string(),pW.array(pW.union([m9,m3,m8,m7,ht,hn]))]),providerOptions:m2.optional()}),hs=pW.object({role:pW.literal("tool"),content:pW.array(pW.union([ht,hr])),providerOptions:m2.optional()});pW.union([hi,ha,ho,hs]);var hl={},hu={array:()=>hh,choice:()=>hf,json:()=>hg,object:()=>hm,text:()=>hp};for(var hd in hu)mL(hl,hd,{get:hu[hd],enumerable:!0});async function hc(e){if(void 0===e)return{value:void 0,state:"undefined-input"};let t=await pU({text:e});return t.success?{value:t.value,state:"successful-parse"}:(t=await pU({text:function(e){let t=["ROOT"],n=-1,r=null;function i(e,i,a){switch(e){case'"':n=i,t.pop(),t.push(a),t.push("INSIDE_STRING");break;case"f":case"t":case"n":n=i,r=i,t.pop(),t.push(a),t.push("INSIDE_LITERAL");break;case"-":t.pop(),t.push(a),t.push("INSIDE_NUMBER");break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":n=i,t.pop(),t.push(a),t.push("INSIDE_NUMBER");break;case"{":n=i,t.pop(),t.push(a),t.push("INSIDE_OBJECT_START");break;case"[":n=i,t.pop(),t.push(a),t.push("INSIDE_ARRAY_START")}}function a(e,r){switch(e){case",":t.pop(),t.push("INSIDE_OBJECT_AFTER_COMMA");break;case"}":n=r,t.pop()}}function o(e,r){switch(e){case",":t.pop(),t.push("INSIDE_ARRAY_AFTER_COMMA");break;case"]":n=r,t.pop()}}for(let s=0;s<e.length;s++){let l=e[s];switch(t[t.length-1]){case"ROOT":i(l,s,"FINISH");break;case"INSIDE_OBJECT_START":switch(l){case'"':t.pop(),t.push("INSIDE_OBJECT_KEY");break;case"}":n=s,t.pop()}break;case"INSIDE_OBJECT_AFTER_COMMA":'"'===l&&(t.pop(),t.push("INSIDE_OBJECT_KEY"));break;case"INSIDE_OBJECT_KEY":'"'===l&&(t.pop(),t.push("INSIDE_OBJECT_AFTER_KEY"));break;case"INSIDE_OBJECT_AFTER_KEY":":"===l&&(t.pop(),t.push("INSIDE_OBJECT_BEFORE_VALUE"));break;case"INSIDE_OBJECT_BEFORE_VALUE":i(l,s,"INSIDE_OBJECT_AFTER_VALUE");break;case"INSIDE_OBJECT_AFTER_VALUE":a(l,s);break;case"INSIDE_STRING":switch(l){case'"':t.pop(),n=s;break;case"\\":t.push("INSIDE_STRING_ESCAPE");break;default:n=s}break;case"INSIDE_ARRAY_START":"]"===l?(n=s,t.pop()):(n=s,i(l,s,"INSIDE_ARRAY_AFTER_VALUE"));break;case"INSIDE_ARRAY_AFTER_VALUE":switch(l){case",":t.pop(),t.push("INSIDE_ARRAY_AFTER_COMMA");break;case"]":n=s,t.pop();break;default:n=s}break;case"INSIDE_ARRAY_AFTER_COMMA":i(l,s,"INSIDE_ARRAY_AFTER_VALUE");break;case"INSIDE_STRING_ESCAPE":t.pop(),n=s;break;case"INSIDE_NUMBER":switch(l){case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":n=s;break;case"e":case"E":case"-":case".":break;case",":t.pop(),"INSIDE_ARRAY_AFTER_VALUE"===t[t.length-1]&&o(l,s),"INSIDE_OBJECT_AFTER_VALUE"===t[t.length-1]&&a(l,s);break;case"}":t.pop(),"INSIDE_OBJECT_AFTER_VALUE"===t[t.length-1]&&a(l,s);break;case"]":t.pop(),"INSIDE_ARRAY_AFTER_VALUE"===t[t.length-1]&&o(l,s);break;default:t.pop()}break;case"INSIDE_LITERAL":{let i=e.substring(r,s+1);"false".startsWith(i)||"true".startsWith(i)||"null".startsWith(i)?n=s:(t.pop(),"INSIDE_OBJECT_AFTER_VALUE"===t[t.length-1]?a(l,s):"INSIDE_ARRAY_AFTER_VALUE"===t[t.length-1]&&o(l,s))}}}let s=e.slice(0,n+1);for(let n=t.length-1;n>=0;n--)switch(t[n]){case"INSIDE_STRING":s+='"';break;case"INSIDE_OBJECT_KEY":case"INSIDE_OBJECT_AFTER_KEY":case"INSIDE_OBJECT_AFTER_COMMA":case"INSIDE_OBJECT_START":case"INSIDE_OBJECT_BEFORE_VALUE":case"INSIDE_OBJECT_AFTER_VALUE":s+="}";break;case"INSIDE_ARRAY_START":case"INSIDE_ARRAY_AFTER_COMMA":case"INSIDE_ARRAY_AFTER_VALUE":s+="]";break;case"INSIDE_LITERAL":{let t=e.substring(r,e.length);"true".startsWith(t)?s+="true".slice(t.length):"false".startsWith(t)?s+="false".slice(t.length):"null".startsWith(t)&&(s+="null".slice(t.length))}}return s}(e)})).success?{value:t.value,state:"repaired-parse"}:{value:void 0,state:"failed-parse"}}var hp=()=>({name:"text",responseFormat:Promise.resolve({type:"text"}),parseCompleteOutput:async({text:e})=>e,parsePartialOutput:async({text:e})=>({partial:e}),createElementStreamTransform(){}}),hm=({schema:e,name:t,description:n})=>{let r=p$(e);return{name:"object",responseFormat:pH(r.jsonSchema).then(e=>({type:"json",schema:e,...null!=t&&{name:t},...null!=n&&{description:n}})),async parseCompleteOutput({text:e},t){let n=await pU({text:e});if(!n.success)throw new mH({message:"No object generated: could not parse the response.",cause:n.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});let i=await pD({value:n.value,schema:r});if(!i.success)throw new mH({message:"No object generated: response did not match schema.",cause:i.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});return i.value},async parsePartialOutput({text:e}){let t=await hc(e);switch(t.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":return{partial:t.value}}},createElementStreamTransform(){}}},hh=({element:e,name:t,description:n})=>{let r=p$(e);return{name:"array",responseFormat:pH(r.jsonSchema).then(e=>{let{$schema:r,...i}=e;return{type:"json",schema:{$schema:"http://json-schema.org/draft-07/schema#",type:"object",properties:{elements:{type:"array",items:i}},required:["elements"],additionalProperties:!1},...null!=t&&{name:t},...null!=n&&{description:n}}}),async parseCompleteOutput({text:e},t){let n=await pU({text:e});if(!n.success)throw new mH({message:"No object generated: could not parse the response.",cause:n.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});let i=n.value;if(null==i||"object"!=typeof i||!("elements"in i)||!Array.isArray(i.elements))throw new mH({message:"No object generated: response did not match schema.",cause:new ex({value:i,cause:"response must be an object with an elements array"}),text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});for(let n of i.elements){let i=await pD({value:n,schema:r});if(!i.success)throw new mH({message:"No object generated: response did not match schema.",cause:i.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason})}return i.elements},async parsePartialOutput({text:e}){let t=await hc(e);switch(t.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":{let e=t.value;if(null==e||"object"!=typeof e||!("elements"in e)||!Array.isArray(e.elements))return;let n="repaired-parse"===t.state&&e.elements.length>0?e.elements.slice(0,-1):e.elements,i=[];for(let e of n){let t=await pD({value:e,schema:r});t.success&&i.push(t.value)}return{partial:i}}}},createElementStreamTransform(){let e=0;return new TransformStream({transform({partialOutput:t},n){if(null!=t)for(;e<t.length;e++)n.enqueue(t[e])}})}}},hf=({options:e,name:t,description:n})=>({name:"choice",responseFormat:Promise.resolve({type:"json",schema:{$schema:"http://json-schema.org/draft-07/schema#",type:"object",properties:{result:{type:"string",enum:e}},required:["result"],additionalProperties:!1},...null!=t&&{name:t},...null!=n&&{description:n}}),async parseCompleteOutput({text:t},n){let r=await pU({text:t});if(!r.success)throw new mH({message:"No object generated: could not parse the response.",cause:r.error,text:t,response:n.response,usage:n.usage,finishReason:n.finishReason});let i=r.value;if(null==i||"object"!=typeof i||!("result"in i)||"string"!=typeof i.result||!e.includes(i.result))throw new mH({message:"No object generated: response did not match schema.",cause:new ex({value:i,cause:"response must be an object that contains a choice value."}),text:t,response:n.response,usage:n.usage,finishReason:n.finishReason});return i.result},async parsePartialOutput({text:t}){let n=await hc(t);switch(n.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":{let t=n.value;if(null==t||"object"!=typeof t||!("result"in t)||"string"!=typeof t.result)return;let r=e.filter(e=>e.startsWith(t.result));if("successful-parse"===n.state)return r.includes(t.result)?{partial:t.result}:void 0;return 1===r.length?{partial:r[0]}:void 0}}},createElementStreamTransform(){}}),hg=({name:e,description:t}={})=>({name:"json",responseFormat:Promise.resolve({type:"json",...null!=e&&{name:e},...null!=t&&{description:t}}),async parseCompleteOutput({text:e},t){let n=await pU({text:e});if(!n.success)throw new mH({message:"No object generated: could not parse the response.",cause:n.error,text:e,response:t.response,usage:t.usage,finishReason:t.finishReason});return n.value},async parsePartialOutput({text:e}){let t=await hc(e);switch(t.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":return void 0===t.value?void 0:{partial:t.value}}},createElementStreamTransform(){}});cH({prefix:"aitxt",size:24}),TransformStream;var hy=pP(()=>pO(pW.union([pW.strictObject({type:pW.literal("text-start"),id:pW.string(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("text-delta"),id:pW.string(),delta:pW.string(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("text-end"),id:pW.string(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("error"),errorText:pW.string()}),pW.strictObject({type:pW.literal("tool-input-start"),toolCallId:pW.string(),toolName:pW.string(),providerExecuted:pW.boolean().optional(),providerMetadata:m2.optional(),dynamic:pW.boolean().optional(),title:pW.string().optional()}),pW.strictObject({type:pW.literal("tool-input-delta"),toolCallId:pW.string(),inputTextDelta:pW.string()}),pW.strictObject({type:pW.literal("tool-input-available"),toolCallId:pW.string(),toolName:pW.string(),input:pW.unknown(),providerExecuted:pW.boolean().optional(),providerMetadata:m2.optional(),dynamic:pW.boolean().optional(),title:pW.string().optional()}),pW.strictObject({type:pW.literal("tool-input-error"),toolCallId:pW.string(),toolName:pW.string(),input:pW.unknown(),providerExecuted:pW.boolean().optional(),providerMetadata:m2.optional(),dynamic:pW.boolean().optional(),errorText:pW.string(),title:pW.string().optional()}),pW.strictObject({type:pW.literal("tool-approval-request"),approvalId:pW.string(),toolCallId:pW.string()}),pW.strictObject({type:pW.literal("tool-output-available"),toolCallId:pW.string(),output:pW.unknown(),providerExecuted:pW.boolean().optional(),dynamic:pW.boolean().optional(),preliminary:pW.boolean().optional()}),pW.strictObject({type:pW.literal("tool-output-error"),toolCallId:pW.string(),errorText:pW.string(),providerExecuted:pW.boolean().optional(),dynamic:pW.boolean().optional()}),pW.strictObject({type:pW.literal("tool-output-denied"),toolCallId:pW.string()}),pW.strictObject({type:pW.literal("reasoning-start"),id:pW.string(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("reasoning-delta"),id:pW.string(),delta:pW.string(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("reasoning-end"),id:pW.string(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("source-url"),sourceId:pW.string(),url:pW.string(),title:pW.string().optional(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("source-document"),sourceId:pW.string(),mediaType:pW.string(),title:pW.string(),filename:pW.string().optional(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.literal("file"),url:pW.string(),mediaType:pW.string(),providerMetadata:m2.optional()}),pW.strictObject({type:pW.custom(e=>"string"==typeof e&&e.startsWith("data-"),{message:'Type must start with "data-"'}),id:pW.string().optional(),data:pW.unknown(),transient:pW.boolean().optional()}),pW.strictObject({type:pW.literal("start-step")}),pW.strictObject({type:pW.literal("finish-step")}),pW.strictObject({type:pW.literal("start"),messageId:pW.string().optional(),messageMetadata:pW.unknown().optional()}),pW.strictObject({type:pW.literal("finish"),finishReason:pW.enum(["stop","length","content-filter","tool-calls","error","other"]).optional(),messageMetadata:pW.unknown().optional()}),pW.strictObject({type:pW.literal("abort"),reason:pW.string().optional()}),pW.strictObject({type:pW.literal("message-metadata"),messageMetadata:pW.unknown()})])));function hv(e){return e.type.startsWith("data-")}function hb(e){return"text"===e.type}function hx(e){return"file"===e.type}function h_(e){return"reasoning"===e.type}function hk(e){return e.type.startsWith("tool-")}function hw(e){return"dynamic-tool"===e.type}function hS(e){return hk(e)||hw(e)}function hI(e){return e.type.split("-").slice(1).join("-")}function hT(e){return hw(e)?e.toolName:hI(e)}function hC({lastMessage:e,messageId:t}){return{message:(null==e?void 0:e.role)==="assistant"?e:{id:t,metadata:void 0,role:"assistant",parts:[]},activeTextParts:{},activeReasoningParts:{},partialToolCalls:{}}}function hA({stream:e,messageMetadataSchema:t,dataPartSchemas:n,runUpdateMessageJob:r,onError:i,onToolCall:a,onData:o}){return e.pipeThrough(new TransformStream({async transform(e,s){await r(async({state:r,write:l})=>{var u,d,c,p;function m(e){let t=r.message.parts.filter(hS).find(t=>t.toolCallId===e);if(null==t)throw new mq({chunkType:"tool-invocation",chunkId:e,message:`No tool invocation found for tool call ID "${e}".`});return t}function h(e){var t;let n=r.message.parts.find(t=>hk(t)&&t.toolCallId===e.toolCallId);null!=n?(n.state=e.state,n.input=e.input,n.output=e.output,n.errorText=e.errorText,n.rawInput=e.rawInput,n.preliminary=e.preliminary,void 0!==e.title&&(n.title=e.title),n.providerExecuted=null!=(t=e.providerExecuted)?t:n.providerExecuted,null!=e.providerMetadata&&(n.callProviderMetadata=e.providerMetadata)):r.message.parts.push({type:`tool-${e.toolName}`,toolCallId:e.toolCallId,state:e.state,title:e.title,input:e.input,output:e.output,rawInput:e.rawInput,errorText:e.errorText,providerExecuted:e.providerExecuted,preliminary:e.preliminary,...null!=e.providerMetadata?{callProviderMetadata:e.providerMetadata}:{}})}function f(e){var t,n;let i=r.message.parts.find(t=>"dynamic-tool"===t.type&&t.toolCallId===e.toolCallId);null!=i?(i.state=e.state,i.toolName=e.toolName,i.input=e.input,i.output=e.output,i.errorText=e.errorText,i.rawInput=null!=(t=e.rawInput)?t:i.rawInput,i.preliminary=e.preliminary,void 0!==e.title&&(i.title=e.title),i.providerExecuted=null!=(n=e.providerExecuted)?n:i.providerExecuted,null!=e.providerMetadata&&(i.callProviderMetadata=e.providerMetadata)):r.message.parts.push({type:"dynamic-tool",toolName:e.toolName,toolCallId:e.toolCallId,state:e.state,input:e.input,output:e.output,errorText:e.errorText,preliminary:e.preliminary,providerExecuted:e.providerExecuted,title:e.title,...null!=e.providerMetadata?{callProviderMetadata:e.providerMetadata}:{}})}async function g(e){if(null!=e){let n=null!=r.message.metadata?function e(t,n){if(void 0===t&&void 0===n)return;if(void 0===t)return n;if(void 0===n)return t;let r={...t};for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let a=n[i];if(void 0===a)continue;let o=i in t?t[i]:void 0,s=null!==a&&"object"==typeof a&&!Array.isArray(a)&&!(a instanceof Date)&&!(a instanceof RegExp),l=null!=o&&"object"==typeof o&&!Array.isArray(o)&&!(o instanceof Date)&&!(o instanceof RegExp);s&&l?r[i]=e(o,a):r[i]=a}return r}(r.message.metadata,e):e;null!=t&&await pR({value:n,schema:t,context:{field:"message.metadata",entityId:r.message.id}}),r.message.metadata=n}}switch(e.type){case"text-start":{let t={type:"text",text:"",providerMetadata:e.providerMetadata,state:"streaming"};r.activeTextParts[e.id]=t,r.message.parts.push(t),l();break}case"text-delta":{let t=r.activeTextParts[e.id];if(null==t)throw new mq({chunkType:"text-delta",chunkId:e.id,message:`Received text-delta for missing text part with ID "${e.id}". Ensure a "text-start" chunk is sent before any "text-delta" chunks.`});t.text+=e.delta,t.providerMetadata=null!=(u=e.providerMetadata)?u:t.providerMetadata,l();break}case"text-end":{let t=r.activeTextParts[e.id];if(null==t)throw new mq({chunkType:"text-end",chunkId:e.id,message:`Received text-end for missing text part with ID "${e.id}". Ensure a "text-start" chunk is sent before any "text-end" chunks.`});t.state="done",t.providerMetadata=null!=(d=e.providerMetadata)?d:t.providerMetadata,delete r.activeTextParts[e.id],l();break}case"reasoning-start":{let t={type:"reasoning",text:"",providerMetadata:e.providerMetadata,state:"streaming"};r.activeReasoningParts[e.id]=t,r.message.parts.push(t),l();break}case"reasoning-delta":{let t=r.activeReasoningParts[e.id];if(null==t)throw new mq({chunkType:"reasoning-delta",chunkId:e.id,message:`Received reasoning-delta for missing reasoning part with ID "${e.id}". Ensure a "reasoning-start" chunk is sent before any "reasoning-delta" chunks.`});t.text+=e.delta,t.providerMetadata=null!=(c=e.providerMetadata)?c:t.providerMetadata,l();break}case"reasoning-end":{let t=r.activeReasoningParts[e.id];if(null==t)throw new mq({chunkType:"reasoning-end",chunkId:e.id,message:`Received reasoning-end for missing reasoning part with ID "${e.id}". Ensure a "reasoning-start" chunk is sent before any "reasoning-end" chunks.`});t.providerMetadata=null!=(p=e.providerMetadata)?p:t.providerMetadata,t.state="done",delete r.activeReasoningParts[e.id],l();break}case"file":r.message.parts.push({type:"file",mediaType:e.mediaType,url:e.url}),l();break;case"source-url":r.message.parts.push({type:"source-url",sourceId:e.sourceId,url:e.url,title:e.title,providerMetadata:e.providerMetadata}),l();break;case"source-document":r.message.parts.push({type:"source-document",sourceId:e.sourceId,mediaType:e.mediaType,title:e.title,filename:e.filename,providerMetadata:e.providerMetadata}),l();break;case"tool-input-start":{let t=r.message.parts.filter(hk);r.partialToolCalls[e.toolCallId]={text:"",toolName:e.toolName,index:t.length,dynamic:e.dynamic,title:e.title},e.dynamic?f({toolCallId:e.toolCallId,toolName:e.toolName,state:"input-streaming",input:void 0,providerExecuted:e.providerExecuted,title:e.title,providerMetadata:e.providerMetadata}):h({toolCallId:e.toolCallId,toolName:e.toolName,state:"input-streaming",input:void 0,providerExecuted:e.providerExecuted,title:e.title,providerMetadata:e.providerMetadata}),l();break}case"tool-input-delta":{let t=r.partialToolCalls[e.toolCallId];if(null==t)throw new mq({chunkType:"tool-input-delta",chunkId:e.toolCallId,message:`Received tool-input-delta for missing tool call with ID "${e.toolCallId}". Ensure a "tool-input-start" chunk is sent before any "tool-input-delta" chunks.`});t.text+=e.inputTextDelta;let{value:n}=await hc(t.text);t.dynamic?f({toolCallId:e.toolCallId,toolName:t.toolName,state:"input-streaming",input:n,title:t.title}):h({toolCallId:e.toolCallId,toolName:t.toolName,state:"input-streaming",input:n,title:t.title}),l();break}case"tool-input-available":e.dynamic?f({toolCallId:e.toolCallId,toolName:e.toolName,state:"input-available",input:e.input,providerExecuted:e.providerExecuted,providerMetadata:e.providerMetadata,title:e.title}):h({toolCallId:e.toolCallId,toolName:e.toolName,state:"input-available",input:e.input,providerExecuted:e.providerExecuted,providerMetadata:e.providerMetadata,title:e.title}),l(),a&&!e.providerExecuted&&await a({toolCall:e});break;case"tool-input-error":e.dynamic?f({toolCallId:e.toolCallId,toolName:e.toolName,state:"output-error",input:e.input,errorText:e.errorText,providerExecuted:e.providerExecuted,providerMetadata:e.providerMetadata}):h({toolCallId:e.toolCallId,toolName:e.toolName,state:"output-error",input:void 0,rawInput:e.input,errorText:e.errorText,providerExecuted:e.providerExecuted,providerMetadata:e.providerMetadata}),l();break;case"tool-approval-request":{let t=m(e.toolCallId);t.state="approval-requested",t.approval={id:e.approvalId},l();break}case"tool-output-denied":m(e.toolCallId).state="output-denied",l();break;case"tool-output-available":{let t=m(e.toolCallId);"dynamic-tool"===t.type?f({toolCallId:e.toolCallId,toolName:t.toolName,state:"output-available",input:t.input,output:e.output,preliminary:e.preliminary,providerExecuted:e.providerExecuted,title:t.title}):h({toolCallId:e.toolCallId,toolName:hI(t),state:"output-available",input:t.input,output:e.output,providerExecuted:e.providerExecuted,preliminary:e.preliminary,title:t.title}),l();break}case"tool-output-error":{let t=m(e.toolCallId);"dynamic-tool"===t.type?f({toolCallId:e.toolCallId,toolName:t.toolName,state:"output-error",input:t.input,errorText:e.errorText,providerExecuted:e.providerExecuted,title:t.title}):h({toolCallId:e.toolCallId,toolName:hI(t),state:"output-error",input:t.input,rawInput:t.rawInput,errorText:e.errorText,providerExecuted:e.providerExecuted,title:t.title}),l();break}case"start-step":r.message.parts.push({type:"step-start"});break;case"finish-step":r.activeTextParts={},r.activeReasoningParts={};break;case"start":null!=e.messageId&&(r.message.id=e.messageId),await g(e.messageMetadata),(null!=e.messageId||null!=e.messageMetadata)&&l();break;case"finish":null!=e.finishReason&&(r.finishReason=e.finishReason),await g(e.messageMetadata),null!=e.messageMetadata&&l();break;case"message-metadata":await g(e.messageMetadata),null!=e.messageMetadata&&l();break;case"error":null==i||i(Error(e.errorText));break;default:if(e.type.startsWith("data-")){if((null==n?void 0:n[e.type])!=null){let t=r.message.parts.findIndex(t=>"id"in t&&"data"in t&&t.id===e.id&&t.type===e.type),i=t>=0?t:r.message.parts.length;await pR({value:e.data,schema:n[e.type],context:{field:`message.parts[${i}].data`,entityName:e.type,entityId:e.id}})}if(e.transient){null==o||o(e);break}let t=null!=e.id?r.message.parts.find(t=>e.type===t.type&&e.id===t.id):void 0;null!=t?t.data=e.data:r.message.parts.push(e),null==o||o(e),l()}}s.enqueue(e)})}}))}async function hP({stream:e,onError:t}){let n=e.getReader();try{for(;;){let{done:e}=await n.read();if(e)break}}catch(e){null==t||t(e)}finally{n.releaseLock()}}function hE({message:e,stream:t,onError:n,terminateOnError:r=!1}){var i;let a,o,s=!1,l=new ReadableStream({start(e){a=e}}),u=hC({messageId:null!=(i=null==e?void 0:e.id)?i:"",lastMessage:e}),d=e=>{null==n||n(e),!s&&r&&(s=!0,null==a||a.error(e))};return hP({stream:hA({stream:t,runUpdateMessageJob:e=>e({state:u,write:()=>{null==a||a.enqueue(structuredClone(u.message))}}),onError:d}),onError:d}).finally(()=>{s||null==a||a.close()}),(o=l.pipeThrough(new TransformStream))[Symbol.asyncIterator]=function(){let e=this.getReader(),t=!1;async function n(n){var r;if(!t){t=!0;try{n&&await (null==(r=e.cancel)?void 0:r.call(e))}finally{try{e.releaseLock()}catch(e){}}}}return{async next(){if(t)return{done:!0,value:void 0};let{done:r,value:i}=await e.read();return r?(await n(!0),{done:!0,value:void 0}):{done:!1,value:i}},return:async()=>(await n(!0),{done:!0,value:void 0}),async throw(e){throw await n(!0),e}}},o}async function h$(e,t){let n=[];for(let i of((null==t?void 0:t.ignoreIncompleteToolCalls)&&(e=e.map(e=>({...e,parts:e.parts.filter(e=>!hS(e)||"input-streaming"!==e.state&&"input-available"!==e.state)}))),e))switch(i.role){case"system":{let e=i.parts.filter(e=>"text"===e.type),t=e.reduce((e,t)=>null!=t.providerMetadata?{...e,...t.providerMetadata}:e,{});n.push({role:"system",content:e.map(e=>e.text).join(""),...Object.keys(t).length>0?{providerOptions:t}:{}});break}case"user":n.push({role:"user",content:i.parts.map(e=>{var n;return hb(e)?{type:"text",text:e.text,...null!=e.providerMetadata?{providerOptions:e.providerMetadata}:{}}:hx(e)?{type:"file",mediaType:e.mediaType,filename:e.filename,data:e.url,...null!=e.providerMetadata?{providerOptions:e.providerMetadata}:{}}:hv(e)?null==(n=null==t?void 0:t.convertDataPart)?void 0:n.call(t,e):void 0}).filter(c6)});break;case"assistant":if(null!=i.parts){let e=[];async function r(){var r,i,a,o,s,l;if(0===e.length)return;let u=[];for(let n of e)if(hb(n))u.push({type:"text",text:n.text,...null!=n.providerMetadata?{providerOptions:n.providerMetadata}:{}});else if(hx(n))u.push({type:"file",mediaType:n.mediaType,filename:n.filename,data:n.url});else if(h_(n))u.push({type:"reasoning",text:n.text,providerOptions:n.providerMetadata});else if(hS(n)){let e=hT(n);"input-streaming"!==n.state&&(u.push({type:"tool-call",toolCallId:n.toolCallId,toolName:e,input:"output-error"===n.state?null!=(r=n.input)?r:"rawInput"in n?n.rawInput:void 0:n.input,providerExecuted:n.providerExecuted,...null!=n.callProviderMetadata?{providerOptions:n.callProviderMetadata}:{}}),null!=n.approval&&u.push({type:"tool-approval-request",approvalId:n.approval.id,toolCallId:n.toolCallId}),!0===n.providerExecuted&&"approval-responded"!==n.state&&("output-available"===n.state||"output-error"===n.state)&&u.push({type:"tool-result",toolCallId:n.toolCallId,toolName:e,output:await m1({toolCallId:n.toolCallId,input:n.input,output:"output-error"===n.state?n.errorText:n.output,tool:null==(i=null==t?void 0:t.tools)?void 0:i[e],errorMode:"output-error"===n.state?"json":"none"}),...null!=n.callProviderMetadata?{providerOptions:n.callProviderMetadata}:{}}))}else if(hv(n)){let e=null==(a=null==t?void 0:t.convertDataPart)?void 0:a.call(t,n);null!=e&&u.push(e)}else throw Error(`Unsupported part: ${n}`);n.push({role:"assistant",content:u});let d=e.filter(e=>{var t;return hS(e)&&(!0!==e.providerExecuted||(null==(t=e.approval)?void 0:t.approved)!=null)});if(d.length>0){let e=[];for(let n of d)if((null==(o=n.approval)?void 0:o.approved)!=null&&e.push({type:"tool-approval-response",approvalId:n.approval.id,approved:n.approval.approved,reason:n.approval.reason,providerExecuted:n.providerExecuted}),!0!==n.providerExecuted)switch(n.state){case"output-denied":e.push({type:"tool-result",toolCallId:n.toolCallId,toolName:hT(n),output:{type:"error-text",value:null!=(s=n.approval.reason)?s:"Tool execution denied."},...null!=n.callProviderMetadata?{providerOptions:n.callProviderMetadata}:{}});break;case"output-error":case"output-available":{let r=hT(n);e.push({type:"tool-result",toolCallId:n.toolCallId,toolName:r,output:await m1({toolCallId:n.toolCallId,input:n.input,output:"output-error"===n.state?n.errorText:n.output,tool:null==(l=null==t?void 0:t.tools)?void 0:l[r],errorMode:"output-error"===n.state?"text":"none"}),...null!=n.callProviderMetadata?{providerOptions:n.callProviderMetadata}:{}})}}e.length>0&&n.push({role:"tool",content:e})}e=[]}for(let t of i.parts)hb(t)||h_(t)||hx(t)||hS(t)||hv(t)?e.push(t):"step-start"===t.type&&await r();await r()}break;default:{let e=i.role;throw new mX({originalMessage:i,message:`Unsupported role: ${e}`})}}return n}cH({prefix:"aitxt",size:24}),pP(()=>pO(pW.array(pW.object({id:pW.string(),role:pW.enum(["system","user","assistant"]),metadata:pW.unknown().optional(),parts:pW.array(pW.union([pW.object({type:pW.literal("text"),text:pW.string(),state:pW.enum(["streaming","done"]).optional(),providerMetadata:m2.optional()}),pW.object({type:pW.literal("reasoning"),text:pW.string(),state:pW.enum(["streaming","done"]).optional(),providerMetadata:m2.optional()}),pW.object({type:pW.literal("source-url"),sourceId:pW.string(),url:pW.string(),title:pW.string().optional(),providerMetadata:m2.optional()}),pW.object({type:pW.literal("source-document"),sourceId:pW.string(),mediaType:pW.string(),title:pW.string(),filename:pW.string().optional(),providerMetadata:m2.optional()}),pW.object({type:pW.literal("file"),mediaType:pW.string(),filename:pW.string().optional(),url:pW.string(),providerMetadata:m2.optional()}),pW.object({type:pW.literal("step-start")}),pW.object({type:pW.string().startsWith("data-"),id:pW.string().optional(),data:pW.unknown()}),pW.object({type:pW.literal("dynamic-tool"),toolName:pW.string(),toolCallId:pW.string(),state:pW.literal("input-streaming"),input:pW.unknown().optional(),providerExecuted:pW.boolean().optional(),callProviderMetadata:m2.optional(),output:pW.never().optional(),errorText:pW.never().optional(),approval:pW.never().optional()}),pW.object({type:pW.literal("dynamic-tool"),toolName:pW.string(),toolCallId:pW.string(),state:pW.literal("input-available"),input:pW.unknown(),providerExecuted:pW.boolean().optional(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.never().optional()}),pW.object({type:pW.literal("dynamic-tool"),toolName:pW.string(),toolCallId:pW.string(),state:pW.literal("approval-requested"),input:pW.unknown(),providerExecuted:pW.boolean().optional(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.never().optional(),reason:pW.never().optional()})}),pW.object({type:pW.literal("dynamic-tool"),toolName:pW.string(),toolCallId:pW.string(),state:pW.literal("approval-responded"),input:pW.unknown(),providerExecuted:pW.boolean().optional(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.boolean(),reason:pW.string().optional()})}),pW.object({type:pW.literal("dynamic-tool"),toolName:pW.string(),toolCallId:pW.string(),state:pW.literal("output-available"),input:pW.unknown(),providerExecuted:pW.boolean().optional(),output:pW.unknown(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),preliminary:pW.boolean().optional(),approval:pW.object({id:pW.string(),approved:pW.literal(!0),reason:pW.string().optional()}).optional()}),pW.object({type:pW.literal("dynamic-tool"),toolName:pW.string(),toolCallId:pW.string(),state:pW.literal("output-error"),input:pW.unknown(),rawInput:pW.unknown().optional(),providerExecuted:pW.boolean().optional(),output:pW.never().optional(),errorText:pW.string(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.literal(!0),reason:pW.string().optional()}).optional()}),pW.object({type:pW.literal("dynamic-tool"),toolName:pW.string(),toolCallId:pW.string(),state:pW.literal("output-denied"),input:pW.unknown(),providerExecuted:pW.boolean().optional(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.literal(!1),reason:pW.string().optional()})}),pW.object({type:pW.string().startsWith("tool-"),toolCallId:pW.string(),state:pW.literal("input-streaming"),providerExecuted:pW.boolean().optional(),callProviderMetadata:m2.optional(),input:pW.unknown().optional(),output:pW.never().optional(),errorText:pW.never().optional(),approval:pW.never().optional()}),pW.object({type:pW.string().startsWith("tool-"),toolCallId:pW.string(),state:pW.literal("input-available"),providerExecuted:pW.boolean().optional(),input:pW.unknown(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.never().optional()}),pW.object({type:pW.string().startsWith("tool-"),toolCallId:pW.string(),state:pW.literal("approval-requested"),input:pW.unknown(),providerExecuted:pW.boolean().optional(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.never().optional(),reason:pW.never().optional()})}),pW.object({type:pW.string().startsWith("tool-"),toolCallId:pW.string(),state:pW.literal("approval-responded"),input:pW.unknown(),providerExecuted:pW.boolean().optional(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.boolean(),reason:pW.string().optional()})}),pW.object({type:pW.string().startsWith("tool-"),toolCallId:pW.string(),state:pW.literal("output-available"),providerExecuted:pW.boolean().optional(),input:pW.unknown(),output:pW.unknown(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),preliminary:pW.boolean().optional(),approval:pW.object({id:pW.string(),approved:pW.literal(!0),reason:pW.string().optional()}).optional()}),pW.object({type:pW.string().startsWith("tool-"),toolCallId:pW.string(),state:pW.literal("output-error"),providerExecuted:pW.boolean().optional(),input:pW.unknown(),rawInput:pW.unknown().optional(),output:pW.never().optional(),errorText:pW.string(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.literal(!0),reason:pW.string().optional()}).optional()}),pW.object({type:pW.string().startsWith("tool-"),toolCallId:pW.string(),state:pW.literal("output-denied"),providerExecuted:pW.boolean().optional(),input:pW.unknown(),output:pW.never().optional(),errorText:pW.never().optional(),callProviderMetadata:m2.optional(),approval:pW.object({id:pW.string(),approved:pW.literal(!1),reason:pW.string().optional()})})])).nonempty("Message must contain at least one part")})).nonempty("Messages array must not be empty"))),cH({prefix:"aiobj",size:24});var hO=class{constructor(){this.queue=[],this.isProcessing=!1}async processQueue(){if(!this.isProcessing){for(this.isProcessing=!0;this.queue.length>0;)await this.queue[0](),this.queue.shift();this.isProcessing=!1}}async run(e){return new Promise((t,n)=>{this.queue.push(async()=>{try{await e(),t()}catch(e){n(e)}}),this.processQueue()})}};async function hR({stream:e,onTextPart:t}){let n=e.pipeThrough(new TextDecoderStream).getReader();for(;;){let{done:e,value:r}=await n.read();if(e)break;await t(r)}}async function hD({api:e,prompt:t,credentials:n,headers:r,body:i,streamProtocol:a="data",setCompletion:o,setLoading:s,setError:l,setAbortController:u,onFinish:d,onError:c,fetch:p=fetch}){var m;try{s(!0),l(void 0);let c=new AbortController;u(c),o("");let h=await p(e,{method:"POST",body:JSON.stringify({prompt:t,...i}),credentials:n,headers:cQ({"Content-Type":"application/json",...r},`ai-sdk/${mQ}`,cY()),signal:c.signal}).catch(e=>{throw e});if(!h.ok)throw Error(null!=(m=await h.text())?m:"Failed to fetch the chat response.");if(!h.body)throw Error("The response body is empty.");let f="";switch(a){case"text":await hR({stream:h.body,onTextPart:e=>{f+=e,o(f)}});break;case"data":await hP({stream:pN({stream:h.body,schema:hy}).pipeThrough(new TransformStream({async transform(e){if(!e.success)throw e.error;let t=e.value;if("text-delta"===t.type)f+=t.delta,o(f);else if("error"===t.type)throw Error(t.errorText)}})),onError:e=>{throw e}});break;default:throw Error(`Unknown stream protocol: ${a}`)}return d&&d(t,f),u(null),f}catch(e){if("AbortError"===e.name)return u(null),null;e instanceof Error&&c&&c(e),l(e)}finally{s(!1)}}async function hj(e){if(null==e)return[];if(!globalThis.FileList||!(e instanceof globalThis.FileList))throw Error("FileList is not supported in the current environment");return Promise.all(Array.from(e).map(async e=>{let{name:t,type:n}=e;return{type:"file",mediaType:n,filename:t,url:await new Promise((t,n)=>{let r=new FileReader;r.onload=e=>{var n;t(null==(n=e.target)?void 0:n.result)},r.onerror=e=>n(e),r.readAsDataURL(e)})}}))}cH({prefix:"aiobj",size:24}),Symbol.for("vercel.ai.error.AI_NoSuchProviderError");var hU=class{constructor({api:e="/api/chat",credentials:t,headers:n,body:r,fetch:i,prepareSendMessagesRequest:a,prepareReconnectToStreamRequest:o}){this.api=e,this.credentials=t,this.headers=n,this.body=r,this.fetch=i,this.prepareSendMessagesRequest=a,this.prepareReconnectToStreamRequest=o}async sendMessages({abortSignal:e,...t}){var n,r,i,a,o;let s=await pH(this.body),l=await pH(this.headers),u=await pH(this.credentials),d={...cX(l),...cX(t.headers)},c=await (null==(n=this.prepareSendMessagesRequest)?void 0:n.call(this,{api:this.api,id:t.chatId,messages:t.messages,body:{...s,...t.body},headers:d,credentials:u,requestMetadata:t.metadata,trigger:t.trigger,messageId:t.messageId})),p=null!=(r=null==c?void 0:c.api)?r:this.api,m=(null==c?void 0:c.headers)!==void 0?cX(c.headers):d,h=(null==c?void 0:c.body)!==void 0?c.body:{...s,...t.body,id:t.chatId,messages:t.messages,trigger:t.trigger,messageId:t.messageId},f=null!=(i=null==c?void 0:c.credentials)?i:u,g=null!=(a=this.fetch)?a:globalThis.fetch,y=await g(p,{method:"POST",headers:cQ({"Content-Type":"application/json",...m},`ai-sdk/${mQ}`,cY()),body:JSON.stringify(h),credentials:f,signal:e});if(!y.ok)throw Error(null!=(o=await y.text())?o:"Failed to fetch the chat response.");if(!y.body)throw Error("The response body is empty.");return this.processResponseStream(y.body)}async reconnectToStream(e){var t,n,r,i,a;let o=await pH(this.body),s=await pH(this.headers),l=await pH(this.credentials),u={...cX(s),...cX(e.headers)},d=await (null==(t=this.prepareReconnectToStreamRequest)?void 0:t.call(this,{api:this.api,id:e.chatId,body:{...o,...e.body},headers:u,credentials:l,requestMetadata:e.metadata})),c=null!=(n=null==d?void 0:d.api)?n:`${this.api}/${e.chatId}/stream`,p=(null==d?void 0:d.headers)!==void 0?cX(d.headers):u,m=null!=(r=null==d?void 0:d.credentials)?r:l,h=null!=(i=this.fetch)?i:globalThis.fetch,f=await h(c,{method:"GET",headers:cQ(p,`ai-sdk/${mQ}`,cY()),credentials:m});if(204===f.status)return null;if(!f.ok)throw Error(null!=(a=await f.text())?a:"Failed to fetch the chat response.");if(!f.body)throw Error("The response body is empty.");return this.processResponseStream(f.body)}},hN=class extends hU{constructor(e={}){super(e)}processResponseStream(e){return pN({stream:e,schema:hy}).pipeThrough(new TransformStream({async transform(e,t){if(!e.success)throw e.error;t.enqueue(e.value)}}))}},hM=class{constructor({generateId:e=cK,id:t=e(),transport:n=new hN,messageMetadataSchema:r,dataPartSchemas:i,state:a,onError:o,onToolCall:s,onFinish:l,onData:u,sendAutomaticallyWhen:d}){this.activeResponse=void 0,this.jobExecutor=new hO,this.sendMessage=async(e,t)=>{var n,r,i,a;let o;if(null==e)return void await this.makeRequest({trigger:"submit-message",messageId:null==(n=this.lastMessage)?void 0:n.id,...t});if(o="text"in e||"files"in e?{parts:[...Array.isArray(e.files)?e.files:await hj(e.files),..."text"in e&&null!=e.text?[{type:"text",text:e.text}]:[]]}:e,null!=e.messageId){let t=this.state.messages.findIndex(t=>t.id===e.messageId);if(-1===t)throw Error(`message with id ${e.messageId} not found`);if("user"!==this.state.messages[t].role)throw Error(`message with id ${e.messageId} is not a user message`);this.state.messages=this.state.messages.slice(0,t+1),this.state.replaceMessage(t,{...o,id:e.messageId,role:null!=(r=o.role)?r:"user",metadata:e.metadata})}else this.state.pushMessage({...o,id:null!=(i=o.id)?i:this.generateId(),role:null!=(a=o.role)?a:"user",metadata:e.metadata});await this.makeRequest({trigger:"submit-message",messageId:e.messageId,...t})},this.regenerate=async({messageId:e,...t}={})=>{let n=null==e?this.state.messages.length-1:this.state.messages.findIndex(t=>t.id===e);if(-1===n)throw Error(`message ${e} not found`);this.state.messages=this.state.messages.slice(0,"assistant"===this.messages[n].role?n:n+1),await this.makeRequest({trigger:"regenerate-message",messageId:e,...t})},this.resumeStream=async(e={})=>{await this.makeRequest({trigger:"resume-stream",...e})},this.clearError=()=>{"error"===this.status&&(this.state.error=void 0,this.setStatus({status:"ready"}))},this.addToolApprovalResponse=async({id:e,approved:t,reason:n})=>this.jobExecutor.run(async()=>{let r=this.state.messages,i=r[r.length-1],a=r=>hS(r)&&"approval-requested"===r.state&&r.approval.id===e?{...r,state:"approval-responded",approval:{id:e,approved:t,reason:n}}:r;this.state.replaceMessage(r.length-1,{...i,parts:i.parts.map(a)}),this.activeResponse&&(this.activeResponse.state.message.parts=this.activeResponse.state.message.parts.map(a)),"streaming"!==this.status&&"submitted"!==this.status&&this.sendAutomaticallyWhen&&this.shouldSendAutomatically().then(e=>{var t;e&&this.makeRequest({trigger:"submit-message",messageId:null==(t=this.lastMessage)?void 0:t.id})})}),this.addToolOutput=async({state:e="output-available",tool:t,toolCallId:n,output:r,errorText:i})=>this.jobExecutor.run(async()=>{let t=this.state.messages,a=t[t.length-1],o=t=>hS(t)&&t.toolCallId===n?{...t,state:e,output:r,errorText:i}:t;this.state.replaceMessage(t.length-1,{...a,parts:a.parts.map(o)}),this.activeResponse&&(this.activeResponse.state.message.parts=this.activeResponse.state.message.parts.map(o)),"streaming"!==this.status&&"submitted"!==this.status&&this.sendAutomaticallyWhen&&this.shouldSendAutomatically().then(e=>{var t;e&&this.makeRequest({trigger:"submit-message",messageId:null==(t=this.lastMessage)?void 0:t.id})})}),this.addToolResult=this.addToolOutput,this.stop=async()=>{var e;("streaming"===this.status||"submitted"===this.status)&&(null==(e=this.activeResponse)?void 0:e.abortController)&&this.activeResponse.abortController.abort()},this.id=t,this.transport=n,this.generateId=e,this.messageMetadataSchema=r,this.dataPartSchemas=i,this.state=a,this.onError=o,this.onToolCall=s,this.onFinish=l,this.onData=u,this.sendAutomaticallyWhen=d}get status(){return this.state.status}setStatus({status:e,error:t}){this.status!==e&&(this.state.status=e,this.state.error=t)}get error(){return this.state.error}get messages(){return this.state.messages}get lastMessage(){return this.state.messages[this.state.messages.length-1]}set messages(e){this.state.messages=e}async shouldSendAutomatically(){if(!this.sendAutomaticallyWhen)return!1;let e=this.sendAutomaticallyWhen({messages:this.state.messages});return e&&"object"==typeof e&&"then"in e?await e:e}async makeRequest({trigger:e,metadata:t,headers:n,body:r,messageId:i}){var a,o,s;this.setStatus({status:"submitted",error:void 0});let l=this.lastMessage,u=!1,d=!1,c=!1;try{let a,o={state:hC({lastMessage:this.state.snapshot(l),messageId:this.generateId()}),abortController:new AbortController};if(o.abortController.signal.addEventListener("abort",()=>{u=!0}),this.activeResponse=o,"resume-stream"===e){let e=await this.transport.reconnectToStream({chatId:this.id,metadata:t,headers:n,body:r});if(null==e)return void this.setStatus({status:"ready"});a=e}else a=await this.transport.sendMessages({chatId:this.id,messages:this.state.messages,abortSignal:o.abortController.signal,metadata:t,headers:n,body:r,trigger:e,messageId:i});let s=e=>this.jobExecutor.run(()=>e({state:o.state,write:()=>{var e;this.setStatus({status:"streaming"}),o.state.message.id===(null==(e=this.lastMessage)?void 0:e.id)?this.state.replaceMessage(this.state.messages.length-1,o.state.message):this.state.pushMessage(o.state.message)}}));await hP({stream:hA({stream:a,onToolCall:this.onToolCall,onData:this.onData,messageMetadataSchema:this.messageMetadataSchema,dataPartSchemas:this.dataPartSchemas,runUpdateMessageJob:s,onError:e=>{throw e}}),onError:e=>{throw e}}),this.setStatus({status:"ready"})}catch(e){if(u||"AbortError"===e.name)return u=!0,this.setStatus({status:"ready"}),null;c=!0,e instanceof TypeError&&(e.message.toLowerCase().includes("fetch")||e.message.toLowerCase().includes("network"))&&(d=!0),this.onError&&e instanceof Error&&this.onError(e),this.setStatus({status:"error",error:e})}finally{try{null==(o=this.onFinish)||o.call(this,{message:this.activeResponse.state.message,messages:this.state.messages,isAbort:u,isDisconnect:d,isError:c,finishReason:null==(a=this.activeResponse)?void 0:a.state.finishReason})}catch(e){console.error(e)}this.activeResponse=void 0}!c&&await this.shouldSendAutomatically()&&await this.makeRequest({trigger:"submit-message",messageId:null==(s=this.lastMessage)?void 0:s.id,metadata:t,headers:n,body:r})}};e.s(["AbstractChat",()=>hM,"DefaultChatTransport",()=>hN,"callCompletionApi",()=>hD,"convertToModelMessages",()=>h$,"isDeepEqualData",()=>function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if("object"!=typeof t&&"object"!=typeof n)return t===n;if(t.constructor!==n.constructor)return!1;if(t instanceof Date&&n instanceof Date)return t.getTime()===n.getTime();if(Array.isArray(t)){if(t.length!==n.length)return!1;for(let r=0;r<t.length;r++)if(!e(t[r],n[r]))return!1;return!0}let r=Object.keys(t),i=Object.keys(n);if(r.length!==i.length)return!1;for(let a of r)if(!i.includes(a)||!e(t[a],n[a]))return!1;return!0},"parsePartialJson",()=>hc,"readUIMessageStream",()=>hE,"uiMessageChunkSchema",()=>hy],317755);let hz=e=>"tool-call"===e.type;async function hL(e,t,n,r){let i=await (0,K.buildStackAuthHeaders)(t),a=await fetch(`${e}/api/latest/ai/query/stream`,{method:"POST",headers:{"content-type":"application/json",accept:"text/event-stream",...i},...r?{signal:r}:{},body:JSON.stringify(n)});if(!a.ok||!a.body)throw Error(`AI stream request failed: ${a.status} ${a.statusText}`);return pN({stream:a.body,schema:hy}).pipeThrough(new TransformStream({transform(e,t){e.success?t.enqueue(e.value):(0,V.captureError)("ai-chat-stream-parse",{error:e.error,rawValue:e.rawValue})}}))}function hF(e,t){let n=t.input??{},r="string"==typeof n?n:JSON.stringify(n),i="output-error"===t.state?{success:!1,error:t.errorText??"Tool errored"}:t.output??null;return{type:"tool-call",toolCallId:t.toolCallId,toolName:e,args:n,argsText:r,result:i}}function hZ(e){return new hN({api:`${e.backendBaseUrl}/api/latest/ai/query/stream`,headers:()=>(0,K.buildStackAuthHeaders)("function"==typeof e.currentUser?e.currentUser():e.currentUser),prepareSendMessagesRequest:async({messages:t,headers:n})=>{let r=(await h$(t)).map(e=>({role:e.role,content:e.content})),i=e.transformMessages?await e.transformMessages(r):r;return{body:{systemPrompt:e.systemPrompt,tools:e.tools,quality:e.quality,speed:e.speed,projectId:e.projectId,messages:i},headers:n}}})}function hB(e){return{async *run({messages:t,abortSignal:n}){e.onRunStart?.();let r=[];try{let i=function(e){let t=[];for(let n of e){let e=n.content.filter(e=>!hz(e)),r=[];if(n.attachments)for(let e of n.attachments)Array.isArray(e.content)&&r.push(...e.content);let i=[...e,...r];i.length>0&&t.push({role:n.role,content:i})}return t}(t),a=e.transformMessages?await e.transformMessages(i):i,o=await hL(e.backendBaseUrl,"function"==typeof e.currentUser?e.currentUser():e.currentUser,{quality:e.quality,speed:e.speed,systemPrompt:e.systemPrompt,tools:e.tools,messages:a,projectId:e.projectId},n);for await(let t of hE({stream:o})){if(n.aborted)return;let i=function(e){let t=[];for(let n of e){if("text"===n.type){n.text&&t.push({type:"text",text:n.text});continue}if("dynamic-tool"===n.type){t.push(hF(n.toolName,n));continue}if("string"==typeof n.type&&n.type.startsWith("tool-")){let e=n.type.slice(5);t.push(hF(e,n));continue}}return t}(t.parts);r=e.sanitizeContent?e.sanitizeContent(i):i,yield{content:r}}e.onFinish?.({threadMessages:t,wireMessages:a,assistantContent:r})}catch(i){if(n.aborted)return;let r=i instanceof Error?i:Error(String(i));throw e.onError?.({error:r,threadMessages:t}),r}finally{e.onRunEnd?.()}}}}function hH(e){let t=e.cause?.message??"",n=`${e.message} ${t}`;return/maximum context length|context_length_exceeded|too many tokens|context length/i.test(n)?"The conversation got too long. Try starting a new chat or asking a more focused question.":/rate limit|429|quota|too many requests/i.test(n)?"Service is busy. Please try again in a moment.":/timeout|ECONNRESET|fetch failed|network/i.test(n)?"Request timed out. Please try again.":/result too large|limit \d+/i.test(n)?"The query returned too much data. Try narrowing your question or requesting fewer rows.":((0,V.captureError)("ai-chat",e),"Something went wrong. Please try again.")}e.s(["createUnifiedAiChatAdapter",()=>hB,"createUnifiedAiTransport",()=>hZ,"getFriendlyAiErrorMessage",()=>hH],36284)},215146,e=>{"use strict";e.s(["MAX_IMAGES_PER_MESSAGE",()=>3,"MAX_IMAGE_BYTES_PER_FILE",()=>3145728])},243342,e=>{"use strict";var t=e.i(215146);let n=Math.floor(t.MAX_IMAGE_BYTES_PER_FILE/2);function r(e,t,n){return new Promise((r,i)=>{e.toBlob(e=>{null==e?i(Error("Canvas toBlob returned null")):r(e)},t,n)})}async function i(e){if(e.size<=t.MAX_IMAGE_BYTES_PER_FILE)return e;let i=await createImageBitmap(e),a=Math.min(1,2048/Math.max(i.width,i.height)),o=Math.round(i.width*a),s=Math.round(i.height*a),l=document.createElement("canvas"),u=l.getContext("2d");if(null==u)throw i.close(),Error("Failed to get canvas 2d context for image compression");for(let t=1;t>=.25;t=Math.round(.5*t*100)/100){let a=Math.max(1,Math.round(o*t)),d=Math.max(1,Math.round(s*t));l.width=a,l.height=d,u.drawImage(i,0,0,a,d);for(let t=.85;t>=.15;t-=.1){let a=await r(l,"image/jpeg",t);if(a.size<=n)return i.close(),new File([a],e.name,{type:"image/jpeg",lastModified:e.lastModified})}}let d=await r(l,"image/jpeg",.1);return i.close(),new File([d],e.name,{type:"image/jpeg",lastModified:e.lastModified})}var a=e.i(513412);class o{accept="image/*";async add(e){let t=await i(e.file);return{id:(0,a.generateUuid)(),type:"image",name:e.file.name,contentType:t.type,file:t,status:{type:"requires-action",reason:"composer-send"}}}async send(e){var t;let n=await (t=e.file,new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(r.result),r.onerror=()=>n(r.error??Error("Failed to read file")),r.readAsDataURL(t)}));return{...e,status:{type:"complete"},content:[{type:"image",image:n}]}}async remove(){}}e.s(["ImageAttachmentAdapter",()=>o],243342)},933014,(e,t,n)=>{"use strict";var r=e.i(381199);let i=void 0!==r.Buffer,a=/"(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])"\s*:/,o=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/;function s(e,t,n){null==n&&null!==t&&"object"==typeof t&&(n=t,t=void 0),i&&r.Buffer.isBuffer(e)&&(e=e.toString()),e&&65279===e.charCodeAt(0)&&(e=e.slice(1));let s=JSON.parse(e,t);if(null===s||"object"!=typeof s)return s;let u=n&&n.protoAction||"error",d=n&&n.constructorAction||"error";if("ignore"===u&&"ignore"===d)return s;if("ignore"!==u&&"ignore"!==d){if(!1===a.test(e)&&!1===o.test(e))return s}else if("ignore"!==u&&"ignore"===d){if(!1===a.test(e))return s}else if(!1===o.test(e))return s;return l(s,{protoAction:u,constructorAction:d,safe:n&&n.safe})}function l(e,{protoAction:t="error",constructorAction:n="error",safe:r}={}){let i=[e];for(;i.length;){let e=i;for(let a of(i=[],e)){if("ignore"!==t&&Object.prototype.hasOwnProperty.call(a,"__proto__")){if(!0===r)return null;if("error"===t)throw SyntaxError("Object contains forbidden prototype property");delete a.__proto__}if("ignore"!==n&&Object.prototype.hasOwnProperty.call(a,"constructor")&&Object.prototype.hasOwnProperty.call(a.constructor,"prototype")){if(!0===r)return null;if("error"===n)throw SyntaxError("Object contains forbidden prototype property");delete a.constructor}for(let e in a){let t=a[e];t&&"object"==typeof t&&i.push(t)}}}return e}function u(e,t,n){let{stackTraceLimit:r}=Error;Error.stackTraceLimit=0;try{return s(e,t,n)}finally{Error.stackTraceLimit=r}}t.exports=u,t.exports.default=u,t.exports.parse=u,t.exports.safeParse=function(e,t){let{stackTraceLimit:n}=Error;Error.stackTraceLimit=0;try{return s(e,t,{safe:!0})}catch{return}finally{Error.stackTraceLimit=n}},t.exports.scan=l},175974,(e,t,n)=>{var r=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,i=/\n/g,a=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,s=/^:\s*/,l=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,d=/^\s+|\s+$/g;function c(e){return e?e.replace(d,""):""}t.exports=function(e,t){if("string"!=typeof e)throw TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,d=1;function p(e){var t=e.match(i);t&&(n+=t.length);var r=e.lastIndexOf("\n");d=~r?e.length-r:d+e.length}function m(){var e={line:n,column:d};return function(t){return t.position=new h(e),y(a),t}}function h(e){this.start=e,this.end={line:n,column:d},this.source=t.source}h.prototype.content=e;var f=[];function g(r){var i=Error(t.source+":"+n+":"+d+": "+r);if(i.reason=r,i.filename=t.source,i.line=n,i.column=d,i.source=e,t.silent)f.push(i);else throw i}function y(t){var n=t.exec(e);if(n){var r=n[0];return p(r),e=e.slice(r.length),n}}function v(e){var t;for(e=e||[];t=b();)!1!==t&&e.push(t);return e}function b(){var t=m();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;""!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,""===e.charAt(n-1))return g("End of comment missing");var r=e.slice(2,n-2);return d+=2,p(r),e=e.slice(n),d+=2,t({type:"comment",comment:r})}}y(a);var x,_=[];for(v(_);x=function(){var e=m(),t=y(o);if(t){if(b(),!y(s))return g("property missing ':'");var n=y(l),i=e({type:"declaration",property:c(t[0].replace(r,"")),value:n?c(n[0].replace(r,"")):""});return y(u),i}}();)!1!==x&&(_.push(x),v(_));return _}},829519,(e,t,n)=>{"use strict";var r=e.e&&e.e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,t){var n=null;if(!e||"string"!=typeof e)return n;var r=(0,i.default)(e),a="function"==typeof t;return r.forEach(function(e){if("declaration"===e.type){var r=e.property,i=e.value;a?t(r,i,e):i&&((n=n||{})[r]=i)}}),n};var i=r(e.r(175974))},30175,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.camelCase=void 0;var r=/^--[a-zA-Z0-9_-]+$/,i=/-([a-z])/g,a=/^[^-]+$/,o=/^-(webkit|moz|ms|o|khtml)-/,s=/^-(ms)-/,l=function(e,t){return t.toUpperCase()},u=function(e,t){return"".concat(t,"-")};n.camelCase=function(e,t){var n;return(void 0===t&&(t={}),!(n=e)||a.test(n)||r.test(n))?e:(e=e.toLowerCase(),(e=t.reactCompat?e.replace(s,u):e.replace(o,u)).replace(i,l))}},692728,(e,t,n)=>{"use strict";var r=(e.e&&e.e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})(e.r(829519)),i=e.r(30175);function a(e,t){var n={};return e&&"string"==typeof e&&(0,r.default)(e,function(e,r){e&&r&&(n[(0,i.camelCase)(e,t)]=r)}),n}a.default=a,t.exports=a},975609,(e,t,n)=>{"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===i.call(e)},l=function(e){if(!e||"[object Object]"!==i.call(e))return!1;var t,n=r.call(e,"constructor"),a=e.constructor&&e.constructor.prototype&&r.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!n&&!a)return!1;for(t in e);return void 0===t||r.call(e,t)},u=function(e,t){a&&"__proto__"===t.name?a(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},d=function(e,t){if("__proto__"===t){if(!r.call(e,t))return;else if(o)return o(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,a,o,c=arguments[0],p=1,m=arguments.length,h=!1;for("boolean"==typeof c&&(h=c,c=arguments[1]||{},p=2),(null==c||"object"!=typeof c&&"function"!=typeof c)&&(c={});p<m;++p)if(t=arguments[p],null!=t)for(n in t)r=d(c,n),c!==(i=d(t,n))&&(h&&i&&(l(i)||(a=s(i)))?(a?(a=!1,o=r&&s(r)?r:[]):o=r&&l(r)?r:{},u(c,{name:n,newValue:e(h,o,i)})):void 0!==i&&u(c,{name:n,newValue:i}));return c}},264458,(e,t,n)=>{!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=i(e,function(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=i(t,a));return t}(a)))}return e}function i(e,t){return t?e?e+" "+t:e+t:e}if(t.exports)r.default=r,t.exports=r;else if("function"==typeof define&&"object"==typeof define.amd&&define.amd)void 0!==r&&e.v(r);else window.classNames=r}()},558262,163298,135185,879021,850769,579969,938178,94693,174700,494093,883846,744660,873908,887688,2262,240461,419740,809825,520629,318066,618178,947629,865762,897802,945334,722259,403010,446207,652652,159902,879302,812878,539119,e=>{"use strict";var t=e.i(592426),n=e.i(838497),r=class{_subscribers=new Set;subscribe(e){return this._subscribers.add(e),()=>this._subscribers.delete(e)}waitForUpdate(){return new Promise(e=>{let t=this.subscribe(()=>{t(),e()})})}_notifySubscribers(){let e=[];for(let t of this._subscribers)try{t()}catch(t){e.push(t)}if(e.length>0)if(1===e.length)throw e[0];else throw AggregateError(e)}};e.s(["BaseSubscribable",()=>r],163298);var i=class extends r{isEditing=!0;getAttachmentAccept(){return this.getAttachmentAdapter()?.accept??"*"}_attachments=[];get attachments(){return this._attachments}setAttachments(e){this._attachments=e,this._notifySubscribers()}get isEmpty(){return!this.text.trim()&&!this.attachments.length}_text="";get text(){return this._text}_role="user";get role(){return this._role}_runConfig={};get runConfig(){return this._runConfig}setText(e){this._text!==e&&(this._text=e,this._notifySubscribers())}setRole(e){this._role!==e&&(this._role=e,this._notifySubscribers())}setRunConfig(e){this._runConfig!==e&&(this._runConfig=e,this._notifySubscribers())}_emptyTextAndAttachments(){this._attachments=[],this._text="",this._notifySubscribers()}async _onClearAttachments(){let e=this.getAttachmentAdapter();e&&await Promise.all(this._attachments.map(t=>e.remove(t)))}async reset(){if(0===this._attachments.length&&""===this._text&&"user"===this._role&&0===Object.keys(this._runConfig).length)return;this._role="user",this._runConfig={};let e=this._onClearAttachments();this._emptyTextAndAttachments(),await e}async clearAttachments(){let e=this._onClearAttachments();this.setAttachments([]),await e}async send(){let e=this.getAttachmentAdapter(),t=e&&this.attachments.length>0?await Promise.all(this.attachments.map(async t=>"complete"===t.status.type?t:await e.send(t))):[],n={createdAt:new Date,role:this.role,content:this.text?[{type:"text",text:this.text}]:[],attachments:t,runConfig:this.runConfig,metadata:{custom:{}}};this._emptyTextAndAttachments(),this.handleSend(n),this._notifyEventSubscribers("send")}cancel(){this.handleCancel()}async addAttachment(e){let t=this.getAttachmentAdapter();if(!t)throw Error("Attachments are not supported");let n=e=>{let t=this._attachments.findIndex(t=>t.id===e.id);-1!==t?this._attachments=[...this._attachments.slice(0,t),e,...this._attachments.slice(t+1)]:(this._attachments=[...this._attachments,e],this._notifyEventSubscribers("attachment_add")),this._notifySubscribers()},r=t.add({file:e});if(Symbol.asyncIterator in r)for await(let e of r)n(e);else n(await r);this._notifyEventSubscribers("attachment_add"),this._notifySubscribers()}async removeAttachment(e){let t=this.getAttachmentAdapter();if(!t)throw Error("Attachments are not supported");let n=this._attachments.findIndex(t=>t.id===e);if(-1===n)throw Error("Attachment not found");let r=this._attachments[n];await t.remove(r),this._attachments=[...this._attachments.slice(0,n),...this._attachments.slice(n+1)],this._notifySubscribers()}_eventSubscribers=new Map;_notifyEventSubscribers(e){let t=this._eventSubscribers.get(e);if(t)for(let e of t)e()}unstable_on(e,t){let n=this._eventSubscribers.get(e);return n?n.add(t):this._eventSubscribers.set(e,new Set([t])),()=>{let n=this._eventSubscribers.get(e);n&&n.delete(t)}}};e.s(["BaseComposerRuntimeCore",()=>i],135185);var a=class extends i{constructor(e){super(),this.runtime=e,this.connect()}_canCancel=!1;get canCancel(){return this._canCancel}get attachments(){return super.attachments}getAttachmentAdapter(){return this.runtime.adapters?.attachments}connect(){return this.runtime.subscribe(()=>{this.canCancel!==this.runtime.capabilities.cancel&&(this._canCancel=this.runtime.capabilities.cancel,this._notifySubscribers())})}async handleSend(e){this.runtime.append({...e,parentId:this.runtime.messages.at(-1)?.id??null,sourceId:null})}async handleCancel(){this.runtime.cancelRun()}};e.s(["DefaultThreadComposerRuntimeCore",()=>a],879021);var o=class{_providers=new Set;getModelContext(){return Array.from(this._providers).map(e=>e.getModelContext()).sort((e,t)=>(t.priority??0)-(e.priority??0)).reduce((e,t)=>{if(t.system&&(e.system?e.system+=`
|
|
48
48
|
|
|
49
|
-
${t.system}`:e.system=t.system),t.tools)for(let[n,r]of Object.entries(t.tools)){let t=e.tools?.[n];if(t&&t!==r)throw Error(`You tried to define a tool with the name ${n}, but it already exists.`);e.tools||(e.tools={}),e.tools[n]=r}return t.config&&(e.config={...e.config,...t.config}),t.callSettings&&(e.callSettings={...e.callSettings,...t.callSettings}),e},{})}registerModelContextProvider(e){this._providers.add(e);let t=e.subscribe?.(()=>{this.notifySubscribers()});return this.notifySubscribers(),()=>{this._providers.delete(e),t?.(),this.notifySubscribers()}}_subscribers=new Set;notifySubscribers(){for(let e of this._subscribers)e()}subscribe(e){return this._subscribers.add(e),()=>this._subscribers.delete(e)}};let s=(e,t=21)=>(n=t)=>{let r="",i=0|n;for(;i--;)r+=e[Math.random()*e.length|0];return r};e.s(["customAlphabet",()=>s],850769);var l=s("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7),u=()=>`__optimistic__${l()}`;e.s(["generateId",()=>l,"generateOptimisticId",()=>u],579969);var d=Object.freeze({type:"running"}),c=Object.freeze({type:"complete",reason:"unknown"}),p=(e,t)=>e&&t?d:c,m=e.i(933014),h=Symbol("aui.parse-partial-json-object.meta"),f=e=>{if(0===e.length)return{[h]:{state:"partial",partialPath:[]}};try{let t=m.default.parse(e);if("object"!=typeof t||null===t)throw Error("argsText is expected to be an object");return t[h]={state:"complete",partialPath:[]},t}catch{try{let[t,n]=function(e){let t,n=["ROOT"],r=-1,i=null,a=[];function o(){void 0!==t&&(a.push(JSON.parse('"'+t+'"')),t=void 0)}function s(e,t,a){switch(e){case'"':r=t,n.pop(),n.push(a),n.push("INSIDE_STRING"),o();break;case"f":case"t":case"n":r=t,i=t,n.pop(),n.push(a),n.push("INSIDE_LITERAL");break;case"-":n.pop(),n.push(a),n.push("INSIDE_NUMBER"),o();break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":r=t,n.pop(),n.push(a),n.push("INSIDE_NUMBER"),o();break;case"{":r=t,n.pop(),n.push(a),n.push("INSIDE_OBJECT_START"),o();break;case"[":r=t,n.pop(),n.push(a),n.push("INSIDE_ARRAY_START"),o()}}function l(e,i){switch(e){case",":n.pop(),n.push("INSIDE_OBJECT_AFTER_COMMA");break;case"}":r=i,n.pop(),t=a.pop()}}function u(e,i){switch(e){case",":n.pop(),n.push("INSIDE_ARRAY_AFTER_COMMA"),t=(Number(t)+1).toString();break;case"]":r=i,n.pop(),t=a.pop()}}for(let o=0;o<e.length;o++){let d=e[o];switch(n[n.length-1]){case"ROOT":s(d,o,"FINISH");break;case"INSIDE_OBJECT_START":switch(d){case'"':n.pop(),n.push("INSIDE_OBJECT_KEY"),t="";break;case"}":r=o,n.pop(),t=a.pop()}break;case"INSIDE_OBJECT_AFTER_COMMA":'"'===d&&(n.pop(),n.push("INSIDE_OBJECT_KEY"),t="");break;case"INSIDE_OBJECT_KEY":switch(d){case'"':n.pop(),n.push("INSIDE_OBJECT_AFTER_KEY");break;case"\\":n.push("INSIDE_STRING_ESCAPE"),t+=d;break;default:t+=d}break;case"INSIDE_OBJECT_AFTER_KEY":":"===d&&(n.pop(),n.push("INSIDE_OBJECT_BEFORE_VALUE"));break;case"INSIDE_OBJECT_BEFORE_VALUE":s(d,o,"INSIDE_OBJECT_AFTER_VALUE");break;case"INSIDE_OBJECT_AFTER_VALUE":l(d,o);break;case"INSIDE_STRING":switch(d){case'"':n.pop(),r=o,t=a.pop();break;case"\\":n.push("INSIDE_STRING_ESCAPE");break;default:r=o}break;case"INSIDE_ARRAY_START":"]"===d?(r=o,n.pop(),t=a.pop()):(r=o,t="0",s(d,o,"INSIDE_ARRAY_AFTER_VALUE"));break;case"INSIDE_ARRAY_AFTER_VALUE":switch(d){case",":n.pop(),n.push("INSIDE_ARRAY_AFTER_COMMA"),t=(Number(t)+1).toString();break;case"]":r=o,n.pop(),t=a.pop();break;default:r=o}break;case"INSIDE_ARRAY_AFTER_COMMA":s(d,o,"INSIDE_ARRAY_AFTER_VALUE");break;case"INSIDE_STRING_ESCAPE":n.pop(),"INSIDE_STRING"===n[n.length-1]?r=o:"INSIDE_OBJECT_KEY"===n[n.length-1]&&(t+=d);break;case"INSIDE_NUMBER":switch(d){case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":r=o;break;case"e":case"E":case"-":case".":break;case",":n.pop(),t=a.pop(),"INSIDE_ARRAY_AFTER_VALUE"===n[n.length-1]&&u(d,o),"INSIDE_OBJECT_AFTER_VALUE"===n[n.length-1]&&l(d,o);break;case"}":n.pop(),t=a.pop(),"INSIDE_OBJECT_AFTER_VALUE"===n[n.length-1]&&l(d,o);break;case"]":n.pop(),t=a.pop(),"INSIDE_ARRAY_AFTER_VALUE"===n[n.length-1]&&u(d,o);break;default:n.pop(),t=a.pop()}break;case"INSIDE_LITERAL":{let t=e.substring(i,o+1);"false".startsWith(t)||"true".startsWith(t)||"null".startsWith(t)?r=o:(n.pop(),"INSIDE_OBJECT_AFTER_VALUE"===n[n.length-1]?l(d,o):"INSIDE_ARRAY_AFTER_VALUE"===n[n.length-1]&&u(d,o))}}}let d=e.slice(0,r+1);for(let t=n.length-1;t>=0;t--)switch(n[t]){case"INSIDE_STRING":d+='"';break;case"INSIDE_OBJECT_KEY":case"INSIDE_OBJECT_AFTER_KEY":case"INSIDE_OBJECT_AFTER_COMMA":case"INSIDE_OBJECT_START":case"INSIDE_OBJECT_BEFORE_VALUE":case"INSIDE_OBJECT_AFTER_VALUE":d+="}";break;case"INSIDE_ARRAY_START":case"INSIDE_ARRAY_AFTER_COMMA":case"INSIDE_ARRAY_AFTER_VALUE":d+="]";break;case"INSIDE_LITERAL":{let t=e.substring(i,e.length);"true".startsWith(t)?d+="true".slice(t.length):"false".startsWith(t)?d+="false".slice(t.length):"null".startsWith(t)&&(d+="null".slice(t.length))}}return[d,a]}(e),r=m.default.parse(t);if("object"!=typeof r||null===r)throw Error("argsText is expected to be an object");return r[h]={state:"partial",partialPath:n},r}catch{return}}};e.s(["parsePartialJsonObject",()=>f],938178);var g=(e,t,n)=>{let{role:r,id:i,createdAt:a,attachments:o,status:s,metadata:u}=e,d={id:i??t,createdAt:a??new Date},c="string"==typeof e.content?[{type:"text",text:e.content}]:e.content;if("user"!==r&&o?.length)throw Error("attachments are only supported for user messages");if("assistant"!==r&&s)throw Error("status is only supported for assistant messages");if("assistant"!==r&&u?.steps)throw Error("metadata.steps is only supported for assistant messages");switch(r){case"assistant":return{...d,role:r,content:c.map(e=>{let t=e.type;switch(t){case"text":case"reasoning":if(0===e.text.trim().length)return null;return e;case"file":case"source":return e;case"tool-call":if(e.args)return{...e,toolCallId:e.toolCallId??"tool-"+l(),args:e.args,argsText:JSON.stringify(e.args)};return{...e,toolCallId:e.toolCallId??"tool-"+l(),args:e.args??f(e.argsText??"")??{},argsText:e.argsText??""};default:throw Error(`Unsupported assistant content part type: ${t}`)}}).filter(e=>!!e),status:s??n,metadata:{unstable_state:u?.unstable_state??null,unstable_annotations:u?.unstable_annotations??[],unstable_data:u?.unstable_data??[],custom:u?.custom??{},steps:u?.steps??[]}};case"user":return{...d,role:r,content:c.map(e=>{let t=e.type;switch(t){case"text":case"image":case"audio":case"file":return e;default:throw Error(`Unsupported user content part type: ${t}`)}}),attachments:o??[],metadata:{custom:u?.custom??{}}};case"system":if(1!==c.length||"text"!==c[0].type)throw Error("System messages must have exactly one text content part.");return{...d,role:r,content:c,metadata:{custom:u?.custom??{}}};default:throw Error(`Unknown message role: ${r}`)}};e.s(["fromThreadMessageLike",()=>g],94693);var y={fromArray:e=>{let t=e.map(e=>g(e,l(),p(!1,!1)));return{messages:t.map((e,n)=>({parentId:n>0?t[n-1].id:null,message:e}))}}},v=e=>e.next?v(e.next):"current"in e?e:null,b=class{constructor(e){this.func=e}_value=null;get value(){return null===this._value&&(this._value=this.func()),this._value}dirty(){this._value=null}},x=class{messages=new Map;head=null;root={children:[],next:null};performOp(e,t,n){let r=t.prev??this.root,i=e??this.root;if("relink"!==n||r!==i){if("link"!==n&&(r.children=r.children.filter(e=>e!==t.current.id),r.next===t)){let e=r.children.at(-1),t=e?this.messages.get(e):null;if(void 0===t)throw Error("MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui.");r.next=t}if("cut"!==n){for(let n=e;n;n=n.prev)if(n.current.id===t.current.id)throw Error("MessageRepository(performOp/link): A message with the same id already exists in the parent tree. This error occurs if the same message id is found multiple times. This is likely an internal bug in assistant-ui.");i.children=[...i.children,t.current.id],(v(t)===this.head||null===i.next)&&(i.next=t),t.prev=e}}}_messages=new b(()=>{let e=Array(this.head?.level??0);for(let t=this.head;t;t=t.prev)e[t.level]=t.current;return e});get headId(){return this.head?.current.id??null}getMessages(){return this._messages.value}addOrUpdateMessage(e,t){let n=this.messages.get(t.id),r=e?this.messages.get(e):null;if(void 0===r)throw Error("MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui.");if(n){n.current=t,this.performOp(r,n,"relink"),this._messages.dirty();return}let i={prev:r,current:t,next:null,children:[],level:r?r.level+1:0};this.messages.set(t.id,i),this.performOp(r,i,"link"),this.head===r&&(this.head=i),this._messages.dirty()}getMessage(e){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui.");return{parentId:t.prev?.current.id??null,message:t.current}}appendOptimisticMessage(e,t){let n;do n=u();while(this.messages.has(n))return this.addOrUpdateMessage(e,g(t,n,{type:"running"})),n}deleteMessage(e,t){let n=this.messages.get(e);if(!n)throw Error("MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui.");let r=void 0===t?n.prev:null===t?null:this.messages.get(t);if(void 0===r)throw Error("MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui.");for(let e of n.children){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui.");this.performOp(r,t,"relink")}this.performOp(null,n,"cut"),this.messages.delete(e),this.head===n&&(this.head=v(r??this.root)),this._messages.dirty()}getBranches(e){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui.");let{children:n}=t.prev??this.root;return n}switchToBranch(e){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui.");(t.prev??this.root).next=t,this.head=v(t),this._messages.dirty()}resetHead(e){if(null===e){this.head=null,this._messages.dirty();return}let t=this.messages.get(e);if(!t)throw Error("MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui.");this.head=t;for(let e=t;e;e=e.prev)e.prev&&(e.prev.next=e);this._messages.dirty()}clear(){this.messages.clear(),this.head=null,this.root={children:[],next:null},this._messages.dirty()}export(){let e=[];for(let[,t]of this.messages)e.push({message:t.current,parentId:t.prev?.current.id??null});return{headId:this.head?.current.id??null,messages:e}}import({headId:e,messages:t}){for(let{message:e,parentId:n}of t)this.addOrUpdateMessage(n,e);this.resetHead(e??t.at(-1)?.message.id??null)}};e.s(["ExportedMessageRepository",()=>y,"MessageRepository",()=>x],174700);var _=class{_contextProvider=new o;registerModelContextProvider(e){return this._contextProvider.registerModelContextProvider(e)}};e.s(["BaseAssistantRuntimeCore",()=>_],494093);var k=class{_subscriptions=new Set;_connection;get isConnected(){return!!this._connection}notifySubscribers(){for(let e of this._subscriptions)e()}_updateConnection(){this._subscriptions.size>0?this._connection||(this._connection=this._connect()):(this._connection?.(),this._connection=void 0)}subscribe(e){return this._subscriptions.add(e),this._updateConnection(),()=>{this._subscriptions.delete(e),this._updateConnection()}}},w=Symbol("skip-update"),S=class extends k{constructor(e){super(),this.binding=e}get path(){return this.binding.path}_previousStateDirty=!0;_previousState;getState=()=>{if(!this.isConnected||this._previousStateDirty){let e=this.binding.getState();e!==w&&(this._previousState=e),this._previousStateDirty=!1}if(void 0===this._previousState)throw Error("Entry not available in the store");return this._previousState};_connect(){let e=()=>{this._previousStateDirty=!0,this.notifySubscribers()};return this.binding.subscribe(e)}},I=class{constructor(e,t){this._core=e,this._threadListBinding=t}get path(){return this._core.path}__internal_bindMethods(){this.switchTo=this.switchTo.bind(this),this.rename=this.rename.bind(this),this.archive=this.archive.bind(this),this.unarchive=this.unarchive.bind(this),this.delete=this.delete.bind(this),this.initialize=this.initialize.bind(this),this.generateTitle=this.generateTitle.bind(this),this.subscribe=this.subscribe.bind(this),this.unstable_on=this.unstable_on.bind(this),this.getState=this.getState.bind(this),this.detach=this.detach.bind(this)}getState(){return this._core.getState()}switchTo(){let e=this._core.getState();return this._threadListBinding.switchToThread(e.id)}rename(e){let t=this._core.getState();return this._threadListBinding.rename(t.id,e)}archive(){let e=this._core.getState();return this._threadListBinding.archive(e.id)}unarchive(){let e=this._core.getState();return this._threadListBinding.unarchive(e.id)}delete(){let e=this._core.getState();return this._threadListBinding.delete(e.id)}initialize(){let e=this._core.getState();return this._threadListBinding.initialize(e.id)}generateTitle(){let e=this._core.getState();return this._threadListBinding.generateTitle(e.id)}unstable_on(e,t){let n=this._core.getState().isMain;return this.subscribe(()=>{let r=this._core.getState().isMain;n===r||(n=r,"switched-to"===e&&!r||"switched-away"===e&&r||t())})}subscribe(e){return this._core.subscribe(e)}detach(){let e=this._core.getState();this._threadListBinding.detach(e.id)}},T=class extends k{constructor(e){super(),this.binding=e;const t=e.getState();if(t===w)throw Error("Entry not available in the store");this._previousState=t}get path(){return this.binding.path}_previousState;getState=()=>(this.isConnected||this._syncState(),this._previousState);_syncState(){let e=this.binding.getState();return!(e===w||function(e,t){if(void 0===e&&void 0===t)return!0;if(void 0===e||void 0===t)return!1;for(let n of Object.keys(e))if(!Object.is(e[n],t[n]))return!1;return!0}(e,this._previousState))&&(this._previousState=e,!0)}_connect(){let e=()=>{this._syncState()&&this.notifySubscribers()};return this.binding.subscribe(e)}},C=Symbol("innerMessage");Symbol("innerMessages");var A=e=>e.content.filter(e=>"text"===e.type).map(e=>e.text).join("\n\n");e.s(["getThreadMessageText",()=>A],883846);var P=class{constructor(e){this._core=e}get path(){return this._core.path}__internal_bindMethods(){this.getState=this.getState.bind(this),this.remove=this.remove.bind(this),this.subscribe=this.subscribe.bind(this)}getState(){return this._core.getState()}subscribe(e){return this._core.subscribe(e)}},E=class extends P{constructor(e,t){super(e),this._composerApi=t}remove(){let e=this._composerApi.getState();if(!e)throw Error("Composer is not available");return e.removeAttachment(this.getState().id)}},$=class extends E{get source(){return"thread-composer"}},O=class extends E{get source(){return"edit-composer"}},R=class extends P{get source(){return"message"}constructor(e){super(e)}remove(){throw Error("Message attachments cannot be removed")}},D=class extends k{constructor(e){super(),this.config=e}getState(){return this.config.binding.getState()}outerSubscribe(e){return this.config.binding.subscribe(e)}_connect(){let e=()=>{this.notifySubscribers()},t=this.config.binding.getState(),n=t?.unstable_on(this.config.event,e),r=()=>{let r=this.config.binding.getState();r!==t&&(t=r,n?.(),n=this.config.binding.getState()?.unstable_on(this.config.event,e))},i=this.outerSubscribe(r);return()=>{i?.(),n?.()}}},j=Object.freeze([]),U=Object.freeze({}),N=class{constructor(e){this._core=e}get path(){return this._core.path}__internal_bindMethods(){this.setText=this.setText.bind(this),this.setRunConfig=this.setRunConfig.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this),this.addAttachment=this.addAttachment.bind(this),this.reset=this.reset.bind(this),this.clearAttachments=this.clearAttachments.bind(this),this.send=this.send.bind(this),this.cancel=this.cancel.bind(this),this.setRole=this.setRole.bind(this),this.getAttachmentAccept=this.getAttachmentAccept.bind(this),this.getAttachmentByIndex=this.getAttachmentByIndex.bind(this),this.unstable_on=this.unstable_on.bind(this)}setText(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");t.setText(e)}setRunConfig(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");t.setRunConfig(e)}addAttachment(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");return t.addAttachment(e)}reset(){let e=this._core.getState();if(!e)throw Error("Composer is not available");return e.reset()}clearAttachments(){let e=this._core.getState();if(!e)throw Error("Composer is not available");return e.clearAttachments()}send(){let e=this._core.getState();if(!e)throw Error("Composer is not available");e.send()}cancel(){let e=this._core.getState();if(!e)throw Error("Composer is not available");e.cancel()}setRole(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");t.setRole(e)}subscribe(e){return this._core.subscribe(e)}_eventSubscriptionSubjects=new Map;unstable_on(e,t){let n=this._eventSubscriptionSubjects.get(e);return n||(n=new D({event:e,binding:this._core}),this._eventSubscriptionSubjects.set(e,n)),n.subscribe(t)}getAttachmentAccept(){let e=this._core.getState();if(!e)throw Error("Composer is not available");return e.getAttachmentAccept()}},M=class extends N{get path(){return this._core.path}get type(){return"thread"}_getState;constructor(e){const t=new S({path:e.path,getState:()=>{let t;return t=e.getState(),Object.freeze({type:"thread",isEditing:t?.isEditing??!1,canCancel:t?.canCancel??!1,isEmpty:t?.isEmpty??!0,attachments:t?.attachments??j,text:t?.text??"",role:t?.role??"user",runConfig:t?.runConfig??U,value:t?.text??""})},subscribe:t=>e.subscribe(t)});super({path:e.path,getState:()=>e.getState(),subscribe:e=>t.subscribe(e)}),this._getState=t.getState.bind(t)}getState(){return this._getState()}getAttachmentByIndex(e){return new $(new T({path:{...this.path,attachmentSource:"thread-composer",attachmentSelector:{type:"index",index:e},ref:this.path.ref+`${this.path.ref}.attachments[${e}]`},getState:()=>{let t=this.getState().attachments[e];return t?{...t,source:"thread-composer"}:w},subscribe:e=>this._core.subscribe(e)}),this._core)}},z=class extends N{constructor(e,t){const n=new S({path:e.path,getState:()=>{let t;return t=e.getState(),Object.freeze({type:"edit",isEditing:t?.isEditing??!1,canCancel:t?.canCancel??!1,isEmpty:t?.isEmpty??!0,text:t?.text??"",role:t?.role??"user",attachments:t?.attachments??j,runConfig:t?.runConfig??U,value:t?.text??""})},subscribe:t=>e.subscribe(t)});super({path:e.path,getState:()=>e.getState(),subscribe:e=>n.subscribe(e)}),this._beginEdit=t,this._getState=n.getState.bind(n)}get path(){return this._core.path}get type(){return"edit"}_getState;__internal_bindMethods(){super.__internal_bindMethods(),this.beginEdit=this.beginEdit.bind(this)}getState(){return this._getState()}beginEdit(){this._beginEdit()}getAttachmentByIndex(e){return new O(new T({path:{...this.path,attachmentSource:"edit-composer",attachmentSelector:{type:"index",index:e},ref:this.path.ref+`${this.path.ref}.attachments[${e}]`},getState:()=>{let t=this.getState().attachments[e];return t?{...t,source:"edit-composer"}:w},subscribe:e=>this._core.subscribe(e)}),this._core)}},L=Symbol.for("aui.tool-response"),F=class e{get[L](){return!0}artifact;result;isError;constructor(e){void 0!==e.artifact&&(this.artifact=e.artifact),this.result=e.result,this.isError=e.isError??!1}static[Symbol.hasInstance](e){return"object"==typeof e&&null!==e&&L in e}static toResponse(t){return t instanceof e?t:new e({result:void 0===t?"<no result>":t})}},Z=class{constructor(e,t,n){this.contentBinding=e,this.messageApi=t,this.threadApi=n}get path(){return this.contentBinding.path}__internal_bindMethods(){this.addToolResult=this.addToolResult.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this)}getState(){return this.contentBinding.getState()}addToolResult(e){let t=this.contentBinding.getState();if(!t)throw Error("Content part is not available");if("tool-call"!==t.type)throw Error("Tried to add tool result to non-tool content part");if(!this.messageApi)throw Error("Message API is not available. This is likely a bug in assistant-ui.");if(!this.threadApi)throw Error("Thread API is not available");let n=this.messageApi.getState();if(!n)throw Error("Message is not available");let r=t.toolName,i=t.toolCallId,a=F.toResponse(e);this.threadApi.getState().addToolResult({messageId:n.id,toolName:r,toolCallId:i,result:a.result,artifact:a.artifact,isError:a.isError})}subscribe(e){return this.contentBinding.subscribe(e)}};e.s(["ContentPartRuntimeImpl",()=>Z],744660);var B=class extends k{constructor(e){super(),this.binding=e}get path(){return this.binding.path}getState(){return this.binding.getState()}outerSubscribe(e){return this.binding.subscribe(e)}_connect(){let e=()=>{this.notifySubscribers()},t=this.binding.getState(),n=t?.subscribe(e),r=()=>{let r=this.binding.getState();r!==t&&(t=r,n?.(),n=this.binding.getState()?.subscribe(e),e())},i=this.outerSubscribe(r);return()=>{i?.(),n?.()}}},H=Object.freeze({type:"complete"}),K=(e,t)=>{let n=e.content[t];if(!n)return w;let r=((e,t,n)=>{if("assistant"!==e.role)return H;if("tool-call"===n.type)if(!n.result)return e.status;else return H;let r=t===Math.max(0,e.content.length-1);return"requires-action"===e.status.type?H:r?e.status:H})(e,t,n);return Object.freeze({...n,...{[C]:n[C]},status:r})},V=class{constructor(e,t){this._core=e,this._threadBinding=t,this.composer=new z(new B({path:{...this.path,ref:this.path.ref+`${this.path.ref}.composer`,composerSource:"edit"},getState:this._getEditComposerRuntimeCore,subscribe:e=>this._threadBinding.subscribe(e)}),()=>this._threadBinding.getState().beginEdit(this._core.getState().id))}get path(){return this._core.path}__internal_bindMethods(){this.reload=this.reload.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this),this.getContentPartByIndex=this.getContentPartByIndex.bind(this),this.getContentPartByToolCallId=this.getContentPartByToolCallId.bind(this),this.getAttachmentByIndex=this.getAttachmentByIndex.bind(this),this.unstable_getCopyText=this.unstable_getCopyText.bind(this),this.speak=this.speak.bind(this),this.stopSpeaking=this.stopSpeaking.bind(this),this.submitFeedback=this.submitFeedback.bind(this),this.switchToBranch=this.switchToBranch.bind(this)}composer;_getEditComposerRuntimeCore=()=>this._threadBinding.getState().getEditComposer(this._core.getState().id);getState(){return this._core.getState()}reload(e={}){let t=this._getEditComposerRuntimeCore(),n=t??this._threadBinding.getState().composer,{runConfig:r=(t??n).runConfig}=e,i=this._core.getState();if("assistant"!==i.role)throw Error("Can only reload assistant messages");this._threadBinding.getState().startRun({parentId:i.parentId,sourceId:i.id,runConfig:r})}speak(){let e=this._core.getState();return this._threadBinding.getState().speak(e.id)}stopSpeaking(){let e=this._core.getState(),t=this._threadBinding.getState();if(t.speech?.messageId===e.id)this._threadBinding.getState().stopSpeaking();else throw Error("Message is not being spoken")}submitFeedback({type:e}){let t=this._core.getState();this._threadBinding.getState().submitFeedback({messageId:t.id,type:e})}switchToBranch({position:e,branchId:t}){let n=this._core.getState();if(t&&e)throw Error("May not specify both branchId and position");if(!t&&!e)throw Error("Must specify either branchId or position");let r=this._threadBinding.getState().getBranches(n.id),i=t;if("previous"===e?i=r[n.branchNumber-2]:"next"===e&&(i=r[n.branchNumber]),!i)throw Error("Branch not found");this._threadBinding.getState().switchToBranch(i)}unstable_getCopyText(){return A(this.getState())}subscribe(e){return this._core.subscribe(e)}getContentPartByIndex(e){if(e<0)throw Error("Content part index must be >= 0");return new Z(new T({path:{...this.path,ref:this.path.ref+`${this.path.ref}.content[${e}]`,contentPartSelector:{type:"index",index:e}},getState:()=>K(this.getState(),e),subscribe:e=>this._core.subscribe(e)}),this._core,this._threadBinding)}getContentPartByToolCallId(e){return new Z(new T({path:{...this.path,ref:this.path.ref+`${this.path.ref}.content[toolCallId=${JSON.stringify(e)}]`,contentPartSelector:{type:"toolCallId",toolCallId:e}},getState:()=>{let t=this._core.getState(),n=t.content.findIndex(t=>"tool-call"===t.type&&t.toolCallId===e);return -1===n?w:K(t,n)},subscribe:e=>this._core.subscribe(e)}),this._core,this._threadBinding)}getAttachmentByIndex(e){return new R(new T({path:{...this.path,ref:this.path.ref+`${this.path.ref}.attachments[${e}]`,attachmentSource:"message",attachmentSelector:{type:"index",index:e}},getState:()=>{let t=this.getState().attachments,n=t?.[e];return n?{...n,source:"message"}:w},subscribe:e=>this._core.subscribe(e)}))}},G=class{get path(){return this._threadBinding.path}get __internal_threadBinding(){return this._threadBinding}_threadBinding;constructor(e,t){const n=new T({path:e.path,getState:()=>{var n,r;let i;return n=e.getState(),r=t.getState(),i=n.messages.at(-1),Object.freeze({threadId:r.id,metadata:r,capabilities:n.capabilities,isDisabled:n.isDisabled,isRunning:i?.role==="assistant"&&"running"===i.status.type,messages:n.messages,state:n.state,suggestions:n.suggestions,extras:n.extras,speech:n.speech})},subscribe:n=>{let r=e.subscribe(n),i=t.subscribe(n);return()=>{r(),i()}}});this._threadBinding={path:e.path,getState:()=>e.getState(),getStateState:()=>n.getState(),outerSubscribe:t=>e.outerSubscribe(t),subscribe:t=>e.subscribe(t)},this.composer=new M(new B({path:{...this.path,ref:this.path.ref+`${this.path.ref}.composer`,composerSource:"thread"},getState:()=>this._threadBinding.getState().composer,subscribe:e=>this._threadBinding.subscribe(e)}))}__internal_bindMethods(){this.append=this.append.bind(this),this.unstable_resumeRun=this.unstable_resumeRun.bind(this),this.startRun=this.startRun.bind(this),this.cancelRun=this.cancelRun.bind(this),this.stopSpeaking=this.stopSpeaking.bind(this),this.export=this.export.bind(this),this.import=this.import.bind(this),this.getMesssageByIndex=this.getMesssageByIndex.bind(this),this.getMesssageById=this.getMesssageById.bind(this),this.subscribe=this.subscribe.bind(this),this.unstable_on=this.unstable_on.bind(this),this.getModelContext=this.getModelContext.bind(this),this.getModelConfig=this.getModelConfig.bind(this),this.getState=this.getState.bind(this)}composer;getState(){return this._threadBinding.getStateState()}append(e){var t;this._threadBinding.getState().append((t=this._threadBinding.getState().messages,"string"==typeof e?{createdAt:new Date,parentId:t.at(-1)?.id??null,sourceId:null,runConfig:{},role:"user",content:[{type:"text",text:e}],attachments:[],metadata:{custom:{}}}:{createdAt:e.createdAt??new Date,parentId:e.parentId??t.at(-1)?.id??null,sourceId:e.sourceId??null,role:e.role??"user",content:e.content,attachments:e.attachments??[],metadata:e.metadata??{custom:{}},runConfig:e.runConfig??{},startRun:e.startRun}))}subscribe(e){return this._threadBinding.subscribe(e)}getModelContext(){return this._threadBinding.getState().getModelContext()}getModelConfig(){return this.getModelContext()}startRun(e){let t;return this._threadBinding.getState().startRun({parentId:(t=null===e||"string"==typeof e?{parentId:e}:e).parentId??null,sourceId:t.sourceId??null,runConfig:t.runConfig??{}})}unstable_resumeRun(e){return this._threadBinding.getState().resumeRun({parentId:e.parentId??null,sourceId:e.sourceId??null,runConfig:e.runConfig??{},stream:e.stream})}cancelRun(){this._threadBinding.getState().cancelRun()}stopSpeaking(){return this._threadBinding.getState().stopSpeaking()}export(){return this._threadBinding.getState().export()}import(e){this._threadBinding.getState().import(e)}getMesssageByIndex(e){if(e<0)throw Error("Message index must be >= 0");return this._getMessageRuntime({...this.path,ref:this.path.ref+`${this.path.ref}.messages[${e}]`,messageSelector:{type:"index",index:e}},()=>{let t=this._threadBinding.getState().messages,n=t[e];if(n)return{message:n,parentId:t[e-1]?.id??null}})}getMesssageById(e){return this._getMessageRuntime({...this.path,ref:this.path.ref+`${this.path.ref}.messages[messageId=${JSON.stringify(e)}]`,messageSelector:{type:"messageId",messageId:e}},()=>this._threadBinding.getState().getMessageById(e))}_getMessageRuntime(e,t){return new V(new T({path:e,getState:()=>{let{message:e,parentId:n}=t()??{},{messages:r,speech:i}=this._threadBinding.getState();if(!e||void 0===n)return w;let a=this._threadBinding.getState(),o=a.getBranches(e.id),s=a.getSubmittedFeedback(e.id);return{...e,...{[C]:e[C]},isLast:r.at(-1)?.id===e.id,parentId:n,branchNumber:o.indexOf(e.id)+1,branchCount:o.length,speech:i?.messageId===e.id?i:void 0,submittedFeedback:s}},subscribe:e=>this._threadBinding.subscribe(e)}),this._threadBinding)}_eventSubscriptionSubjects=new Map;unstable_on(e,t){let n=this._eventSubscriptionSubjects.get(e);return n||(n=new D({event:e,binding:this._threadBinding}),this._eventSubscriptionSubjects.set(e,n)),n.subscribe(t)}},q=(e,t)=>{if(void 0===t)return w;let n=e.getItemById(t);return n?{id:n.threadId,threadId:n.threadId,remoteId:n.remoteId,externalId:n.externalId,title:n.title,status:n.status,isMain:n.threadId===e.mainThreadId}:w},J=class{constructor(e,t=G){this._core=e,this._runtimeFactory=t;const n=new S({path:{},getState:()=>({mainThreadId:e.mainThreadId,newThread:e.newThreadId,threads:e.threadIds,archivedThreads:e.archivedThreadIds}),subscribe:t=>e.subscribe(t)});this._getState=n.getState.bind(n),this._mainThreadListItemRuntime=new I(new T({path:{ref:"threadItems[main]",threadSelector:{type:"main"}},getState:()=>q(this._core,this._core.mainThreadId),subscribe:e=>this._core.subscribe(e)}),this._core),this.main=new t(new B({path:{ref:"threads.main",threadSelector:{type:"main"}},getState:()=>e.getMainThreadRuntimeCore(),subscribe:t=>e.subscribe(t)}),this._mainThreadListItemRuntime)}_getState;__internal_bindMethods(){this.switchToThread=this.switchToThread.bind(this),this.switchToNewThread=this.switchToNewThread.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this),this.getById=this.getById.bind(this),this.getItemById=this.getItemById.bind(this),this.getItemByIndex=this.getItemByIndex.bind(this),this.getArchivedItemByIndex=this.getArchivedItemByIndex.bind(this)}switchToThread(e){return this._core.switchToThread(e)}switchToNewThread(){return this._core.switchToNewThread()}getState(){return this._getState()}subscribe(e){return this._core.subscribe(e)}_mainThreadListItemRuntime;main;get mainItem(){return this._mainThreadListItemRuntime}getById(e){return new this._runtimeFactory(new B({path:{ref:"threads[threadId="+JSON.stringify(e)+"]",threadSelector:{type:"threadId",threadId:e}},getState:()=>this._core.getThreadRuntimeCore(e),subscribe:e=>this._core.subscribe(e)}),this.mainItem)}getItemByIndex(e){return new I(new T({path:{ref:`threadItems[${e}]`,threadSelector:{type:"index",index:e}},getState:()=>q(this._core,this._core.threadIds[e]),subscribe:e=>this._core.subscribe(e)}),this._core)}getArchivedItemByIndex(e){return new I(new T({path:{ref:`archivedThreadItems[${e}]`,threadSelector:{type:"archiveIndex",index:e}},getState:()=>q(this._core,this._core.archivedThreadIds[e]),subscribe:e=>this._core.subscribe(e)}),this._core)}getItemById(e){return new I(new T({path:{ref:`threadItems[threadId=${e}]`,threadSelector:{type:"threadId",threadId:e}},getState:()=>q(this._core,e),subscribe:e=>this._core.subscribe(e)}),this._core)}},W=class{constructor(e){this._core=e,this.threads=new J(e.threads),this._thread=this.threads.main}threads;get threadList(){return this.threads}_thread;__internal_bindMethods(){this.switchToNewThread=this.switchToNewThread.bind(this),this.switchToThread=this.switchToThread.bind(this),this.registerModelContextProvider=this.registerModelContextProvider.bind(this),this.registerModelConfigProvider=this.registerModelConfigProvider.bind(this),this.reset=this.reset.bind(this)}get thread(){return this._thread}switchToNewThread(){return this._core.threads.switchToNewThread()}switchToThread(e){return this._core.threads.switchToThread(e)}registerModelContextProvider(e){return this._core.registerModelContextProvider(e)}registerModelConfigProvider(e){return this.registerModelContextProvider(e)}reset({initialMessages:e}={}){return this._core.threads.getMainThreadRuntimeCore().import(y.fromArray(e??[]))}};e.s(["AssistantRuntimeImpl",()=>W],873908);var Y=e=>{let{cloud:t,initialMessages:n,maxSteps:r,adapters:i,unstable_humanToolNames:a,...o}=e;return{localRuntimeOptions:{cloud:t,initialMessages:n,maxSteps:r,adapters:i,unstable_humanToolNames:a},otherOptions:o}};e.s([],730286),e.i(730286);var X=e.i(94283);function Q(e,t){return function(n){let r=(0,X.useContext)(e);if(!n?.optional&&!r)throw Error(`This component must be used within ${t}.`);return r}}function ee(e,t){function n(n){let r=e(n);return r?r[t]:null}return{[t]:function(e){let t,r=!1;"function"==typeof e?t=e:e&&"object"==typeof e&&(r=!!e.optional,t=e.selector);let i=n({optional:r});return i?t?i(t):i():null},[`${t}Store`]:n}}e.s(["createContextHook",()=>Q],887688),e.s(["createContextStoreHook",()=>ee],2262);var et=e=>{e.__isBound||(e.__internal_bindMethods?.(),e.__isBound=!0)};e.s(["ensureBinding",()=>et],240461);function en(e){return function(t){let n,r=!1;"function"==typeof t?n=t:t&&(r=!!t.optional,n=t.selector);let i=e({optional:r});return i?function(e,t=e=>e){et(e);let n=(0,X.useSyncExternalStore)(e.subscribe,()=>t(e.getState()),()=>t(e.getState()));return(0,X.useDebugValue)(n),n}(i,n):null}}e.s(["createStateHookForRuntime",()=>en],419740);var er=(0,X.createContext)(null),ei=Q(er,"a component passed to <ThreadPrimitive.Messages components={...} />");function ea(e){let t=ei(e);return t?t.useMessageRuntime():null}var eo=en(ea),es=en(e=>ea(e)?.composer??null),{useMessageUtils:el,useMessageUtilsStore:eu}=ee(ei,"useMessageUtils");e.s(["MessageContext",()=>er,"useEditComposer",()=>es,"useMessage",()=>eo,"useMessageRuntime",()=>ea,"useMessageUtils",()=>el,"useMessageUtilsStore",()=>eu],809825);var ed=e.i(614323);let ec=e=>{let t,n=new Set,r=(e,r)=>{let i="function"==typeof e?e(t):e;if(!Object.is(i,t)){let e=t;t=(null!=r?r:"object"!=typeof i||null===i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},ep=e=>{let t=e?ec(e):ec,n=e=>(function(e,t=e=>e){let n=X.default.useSyncExternalStore(e.subscribe,()=>t(e.getState()),()=>t(e.getInitialState()));return X.default.useDebugValue(n),n})(t,e);return Object.assign(n,t),n},em=e=>e?ep(e):ep;e.s(["create",()=>em],520629);var eh=(0,X.createContext)(null),ef=Q(eh,"a component passed to <MessagePrimitive.Content components={...}>");function eg(e){let t=ef(e);return t?t.useContentPartRuntime():null}var ey=en(eg);e.s(["ContentPartContext",()=>eh,"useContentPart",()=>ey,"useContentPartRuntime",()=>eg],318066);var ev=(0,X.createContext)(null),eb=({children:e})=>{let n=e_({optional:!0}),r=eg(),[i]=(0,X.useState)(()=>{var e;return e=r.getState().status,{useSmoothStatus:em(()=>e)}});return n?e:(0,t.jsx)(ev.Provider,{value:i,children:e})},ex=e=>{let n=(0,X.forwardRef)((n,r)=>(0,t.jsx)(eb,{children:(0,t.jsx)(e,{...n,ref:r})}));return n.displayName=e.displayName,n};function e_(e){let t=(0,X.useContext)(ev);if(!e?.optional&&!t)throw Error("This component must be used within a SmoothContextProvider.");return t}var{useSmoothStatus:ek,useSmoothStatusStore:ew}=ee(e_,"useSmoothStatus"),eS=e=>e;e.s(["writableStore",()=>eS],618178);var eI=class{constructor(e,t){this.currentText=e,this.setText=t}animationFrameId=null;lastUpdateTime=Date.now();targetText="";start(){null===this.animationFrameId&&(this.lastUpdateTime=Date.now(),this.animate())}stop(){null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}animate=()=>{let e=Date.now(),t=e-this.lastUpdateTime,n=this.targetText.length-this.currentText.length,r=Math.min(5,250/n),i=0;for(;t>=r&&i<n;)i++,t-=r;i!==n?this.animationFrameId=requestAnimationFrame(this.animate):this.animationFrameId=null,0!==i&&(this.currentText=this.targetText.slice(0,this.currentText.length+i),this.lastUpdateTime=e-t,this.setText(this.currentText))}},eT=Object.freeze({type:"running"}),eC=(e,t=!1)=>{let{text:n}=e,r=eo({optional:!0,selector:e=>e.id}),i=(0,X.useRef)(r),[a,o]=(0,X.useState)(n),s=ew({optional:!0}),l=(0,ed.useCallbackRef)(t=>{if(o(t),s){let n=a!==t||"running"===e.status.type?eT:e.status;eS(s).setState(n,!0)}});(0,X.useEffect)(()=>{if(s){let t=a!==n||"running"===e.status.type?eT:e.status;eS(s).setState(t,!0)}},[s,n,a,e.status]);let[u]=(0,X.useState)(new eI(n,l));return(0,X.useEffect)(()=>{if(!t)return void u.stop();if(i.current!==r||!n.startsWith(u.targetText)){i.current=r,l(n),u.currentText=n,u.targetText=n,u.stop();return}u.targetText=n,u.start()},[l,u,r,t,n]),(0,X.useEffect)(()=>()=>{u.stop()},[u]),(0,X.useMemo)(()=>t?{type:"text",text:a,status:n===a?e.status:eT}:e,[t,a,e,n])};e.s(["useSmooth",()=>eC],947629),e.s([],839595),e.i(839595),e.s(["useSmooth",()=>eC,"useSmoothStatus",()=>ek,"withSmoothContextProvider",()=>ex],331963),e.i(331963),e.s(["AssistantRuntimeImpl",()=>W,"BaseAssistantRuntimeCore",()=>_,"CompositeContextProvider",()=>o,"DefaultThreadComposerRuntimeCore",()=>a,"MessageRepository",()=>x,"ThreadRuntimeImpl",()=>G,"fromThreadMessageLike",()=>g,"generateId",()=>l,"getAutoStatus",()=>p,"splitLocalRuntimeOptions",()=>Y,"useSmooth",()=>eC,"useSmoothStatus",()=>ek,"withSmoothContextProvider",()=>ex],12248);var eA=e.i(12248),eA=eA,eP=()=>ey(e=>{if("text"!==e.type&&"reasoning"!==e.type)throw Error("ContentPartText can only be used inside text or reasoning content parts.");return e});function eE(){}function e$(){}e.s(["useContentPartText",()=>eP],865762),e.s(["ok",()=>eE,"unreachable",()=>e$],897802);let eO=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,eR=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,eD={};function ej(e,t){return((t||eD).jsx?eR:eO).test(e)}let eU=/[ \t\n\f\r]/g;function eN(e){return""===e.replace(eU,"")}class eM{constructor(e,t){this.attribute=t,this.property=e}}eM.prototype.attribute="",eM.prototype.booleanish=!1,eM.prototype.boolean=!1,eM.prototype.commaOrSpaceSeparated=!1,eM.prototype.commaSeparated=!1,eM.prototype.defined=!1,eM.prototype.mustUseProperty=!1,eM.prototype.number=!1,eM.prototype.overloadedBoolean=!1,eM.prototype.property="",eM.prototype.spaceSeparated=!1,eM.prototype.space=void 0;let ez=0,eL=eG(),eF=eG(),eZ=eG(),eB=eG(),eH=eG(),eK=eG(),eV=eG();function eG(){return 2**++ez}e.s(["boolean",0,eL,"booleanish",0,eF,"commaOrSpaceSeparated",0,eV,"commaSeparated",0,eK,"number",0,eB,"overloadedBoolean",0,eZ,"spaceSeparated",0,eH],383954);var eq=e.i(383954);let eJ=Object.keys(eq);class eW extends eM{constructor(e,t,n,r){let i=-1;if(super(e,t),function(e,t,n){n&&(e[t]=n)}(this,"space",r),"number"==typeof n)for(;++i<eJ.length;){const e=eJ[i];!function(e,t,n){n&&(e[t]=n)}(this,eJ[i],(n&eq[e])===eq[e])}}}function eY(e){return e.toLowerCase()}eW.prototype.defined=!0;let eX=/[A-Z]/g,eQ=/-[a-z]/g,e0=/^data[-\w.:]+$/i;function e1(e){return"-"+e.toLowerCase()}function e4(e){return e.charAt(1).toUpperCase()}let e6={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"};class e2{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}}function e9(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new e2(n,r,t)}function e5(e){let t={},n={};for(let[r,i]of Object.entries(e.properties)){let a=new eW(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(a.mustUseProperty=!0),t[r]=a,n[eY(r)]=r,n[eY(a.attribute)]=r}return new e2(t,n,e.space)}e2.prototype.normal={},e2.prototype.property={},e2.prototype.space=void 0;let e3=e5({properties:{ariaActiveDescendant:null,ariaAtomic:eF,ariaAutoComplete:null,ariaBusy:eF,ariaChecked:eF,ariaColCount:eB,ariaColIndex:eB,ariaColSpan:eB,ariaControls:eH,ariaCurrent:null,ariaDescribedBy:eH,ariaDetails:null,ariaDisabled:eF,ariaDropEffect:eH,ariaErrorMessage:null,ariaExpanded:eF,ariaFlowTo:eH,ariaGrabbed:eF,ariaHasPopup:null,ariaHidden:eF,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:eH,ariaLevel:eB,ariaLive:null,ariaModal:eF,ariaMultiLine:eF,ariaMultiSelectable:eF,ariaOrientation:null,ariaOwns:eH,ariaPlaceholder:null,ariaPosInSet:eB,ariaPressed:eF,ariaReadOnly:eF,ariaRelevant:null,ariaRequired:eF,ariaRoleDescription:eH,ariaRowCount:eB,ariaRowIndex:eB,ariaRowSpan:eB,ariaSelected:eF,ariaSetSize:eB,ariaSort:null,ariaValueMax:eB,ariaValueMin:eB,ariaValueNow:eB,ariaValueText:null,role:null},transform:(e,t)=>"role"===t?t:"aria-"+t.slice(4).toLowerCase()});function e8(e,t){return t in e?e[t]:t}function e7(e,t){return e8(e,t.toLowerCase())}let te=e5({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:eK,acceptCharset:eH,accessKey:eH,action:null,allow:null,allowFullScreen:eL,allowPaymentRequest:eL,allowUserMedia:eL,alt:null,as:null,async:eL,autoCapitalize:null,autoComplete:eH,autoFocus:eL,autoPlay:eL,blocking:eH,capture:null,charSet:null,checked:eL,cite:null,className:eH,cols:eB,colSpan:null,content:null,contentEditable:eF,controls:eL,controlsList:eH,coords:eB|eK,crossOrigin:null,data:null,dateTime:null,decoding:null,default:eL,defer:eL,dir:null,dirName:null,disabled:eL,download:eZ,draggable:eF,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:eL,formTarget:null,headers:eH,height:eB,hidden:eZ,high:eB,href:null,hrefLang:null,htmlFor:eH,httpEquiv:eH,id:null,imageSizes:null,imageSrcSet:null,inert:eL,inputMode:null,integrity:null,is:null,isMap:eL,itemId:null,itemProp:eH,itemRef:eH,itemScope:eL,itemType:eH,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:eL,low:eB,manifest:null,max:null,maxLength:eB,media:null,method:null,min:null,minLength:eB,multiple:eL,muted:eL,name:null,nonce:null,noModule:eL,noValidate:eL,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:eL,optimum:eB,pattern:null,ping:eH,placeholder:null,playsInline:eL,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:eL,referrerPolicy:null,rel:eH,required:eL,reversed:eL,rows:eB,rowSpan:eB,sandbox:eH,scope:null,scoped:eL,seamless:eL,selected:eL,shadowRootClonable:eL,shadowRootDelegatesFocus:eL,shadowRootMode:null,shape:null,size:eB,sizes:null,slot:null,span:eB,spellCheck:eF,src:null,srcDoc:null,srcLang:null,srcSet:null,start:eB,step:null,style:null,tabIndex:eB,target:null,title:null,translate:null,type:null,typeMustMatch:eL,useMap:null,value:eF,width:eB,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:eH,axis:null,background:null,bgColor:null,border:eB,borderColor:null,bottomMargin:eB,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:eL,declare:eL,event:null,face:null,frame:null,frameBorder:null,hSpace:eB,leftMargin:eB,link:null,longDesc:null,lowSrc:null,marginHeight:eB,marginWidth:eB,noResize:eL,noHref:eL,noShade:eL,noWrap:eL,object:null,profile:null,prompt:null,rev:null,rightMargin:eB,rules:null,scheme:null,scrolling:eF,standby:null,summary:null,text:null,topMargin:eB,valueType:null,version:null,vAlign:null,vLink:null,vSpace:eB,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:eL,disableRemotePlayback:eL,prefix:null,property:null,results:eB,security:null,unselectable:null},space:"html",transform:e7}),tt=e5({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:eV,accentHeight:eB,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:eB,amplitude:eB,arabicForm:null,ascent:eB,attributeName:null,attributeType:null,azimuth:eB,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:eB,by:null,calcMode:null,capHeight:eB,className:eH,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:eB,diffuseConstant:eB,direction:null,display:null,dur:null,divisor:eB,dominantBaseline:null,download:eL,dx:null,dy:null,edgeMode:null,editable:null,elevation:eB,enableBackground:null,end:null,event:null,exponent:eB,externalResourcesRequired:null,fill:null,fillOpacity:eB,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:eK,g2:eK,glyphName:eK,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:eB,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:eB,horizOriginX:eB,horizOriginY:eB,id:null,ideographic:eB,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:eB,k:eB,k1:eB,k2:eB,k3:eB,k4:eB,kernelMatrix:eV,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:eB,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:eB,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:eB,overlineThickness:eB,paintOrder:null,panose1:null,path:null,pathLength:eB,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:eH,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:eB,pointsAtY:eB,pointsAtZ:eB,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:eV,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:eV,rev:eV,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:eV,requiredFeatures:eV,requiredFonts:eV,requiredFormats:eV,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:eB,specularExponent:eB,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:eB,strikethroughThickness:eB,string:null,stroke:null,strokeDashArray:eV,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:eB,strokeOpacity:eB,strokeWidth:null,style:null,surfaceScale:eB,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:eV,tabIndex:eB,tableValues:null,target:null,targetX:eB,targetY:eB,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:eV,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:eB,underlineThickness:eB,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:eB,values:null,vAlphabetic:eB,vMathematical:eB,vectorEffect:null,vHanging:eB,vIdeographic:eB,version:null,vertAdvY:eB,vertOriginX:eB,vertOriginY:eB,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:eB,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:e8}),tn=e5({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform:(e,t)=>"xlink:"+t.slice(5).toLowerCase()}),tr=e5({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:e7}),ti=e5({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform:(e,t)=>"xml:"+t.slice(3).toLowerCase()}),ta=e9([e3,te,tn,tr,ti],"html"),to=e9([e3,tt,tn,tr,ti],"svg");var ts=e.i(692728);let tl=td("end"),tu=td("start");function td(e){return function(t){let n=t&&t.position&&t.position[e]||{};if("number"==typeof n.line&&n.line>0&&"number"==typeof n.column&&n.column>0)return{line:n.line,column:n.column,offset:"number"==typeof n.offset&&n.offset>-1?n.offset:void 0}}}function tc(e){return e&&"object"==typeof e?"position"in e||"type"in e?tm(e.position):"start"in e||"end"in e?tm(e):"line"in e||"column"in e?tp(e):"":""}function tp(e){return th(e&&e.line)+":"+th(e&&e.column)}function tm(e){return tp(e&&e.start)+"-"+tp(e&&e.end)}function th(e){return e&&"number"==typeof e?e:1}class tf extends Error{constructor(e,t,n){super(),"string"==typeof t&&(n=t,t=void 0);let r="",i={},a=!1;if(t&&(i="line"in t&&"column"in t||"start"in t&&"end"in t?{place:t}:"type"in t?{ancestors:[t],place:t.position}:{...t}),"string"==typeof e?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&"string"==typeof n){const e=n.indexOf(":");-1===e?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){const e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}const o=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file,this.message=r,this.line=o?o.line:void 0,this.name=tc(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&"string"==typeof i.cause.stack?i.cause.stack:"",this.actual,this.expected,this.note,this.url}}tf.prototype.file="",tf.prototype.name="",tf.prototype.reason="",tf.prototype.message="",tf.prototype.stack="",tf.prototype.column=void 0,tf.prototype.line=void 0,tf.prototype.ancestors=void 0,tf.prototype.cause=void 0,tf.prototype.fatal=void 0,tf.prototype.place=void 0,tf.prototype.ruleId=void 0,tf.prototype.source=void 0;let tg={}.hasOwnProperty,ty=new Map,tv=/[A-Z]/g,tb=new Set(["table","tbody","thead","tfoot","tr"]),tx=new Set(["td","th"]),t_="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function tk(e,t){var n,r,i,a;let o;if(!t||void 0===t.Fragment)throw TypeError("Expected `Fragment` in options");let s=t.filePath||void 0;if(t.development){if("function"!=typeof t.jsxDEV)throw TypeError("Expected `jsxDEV` in options when `development: true`");n=s,r=t.jsxDEV,o=function(e,t,i,a){let o=Array.isArray(i.children),s=tu(e);return r(t,i,a,o,{columnNumber:s?s.column-1:void 0,fileName:n,lineNumber:s?s.line:void 0},void 0)}}else{if("function"!=typeof t.jsx)throw TypeError("Expected `jsx` in production options");if("function"!=typeof t.jsxs)throw TypeError("Expected `jsxs` in production options");i=t.jsx,a=t.jsxs,o=function(e,t,n,r){let o=Array.isArray(n.children)?a:i;return r?o(t,n,r):o(t,n)}}let l={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:o,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:s,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:!1!==t.passKeys,passNode:t.passNode||!1,schema:"svg"===t.space?to:ta,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:!1!==t.tableCellAlignToStyle},u=tw(l,e,void 0);return u&&"string"!=typeof u?u:l.create(e,l.Fragment,{children:u||void 0},void 0)}function tw(e,t,n){var r,i,a,o,s,l,u,d,c;let p,m,h,f,g,y,v,b,x,_,k;return"element"===t.type?(r=e,i=t,a=n,m=p=r.schema,"svg"===i.tagName.toLowerCase()&&"html"===p.space&&(r.schema=to),r.ancestors.push(i),h=tC(r,i.tagName,!1),f=function(e,t){let n,r,i={};for(r in t.properties)if("children"!==r&&tg.call(t.properties,r)){let a=function(e,t,n){let r=function(e,t){let n=eY(t),r=t,i=eM;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&"data"===n.slice(0,4)&&e0.test(t)){if("-"===t.charAt(4)){let e=t.slice(5).replace(eQ,e4);r="data"+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!eQ.test(e)){let n=e.replace(eX,e1);"-"!==n.charAt(0)&&(n="-"+n),t="data"+n}}i=eW}return new i(r,t)}(e.schema,t);if(!(null==n||"number"==typeof n&&Number.isNaN(n))){var i;let t;if(Array.isArray(n)&&(n=r.commaSeparated?(t={},(""===(i=n)[i.length-1]?[...i,""]:i).join((t.padRight?" ":"")+","+(!1===t.padLeft?"":" ")).trim()):n.join(" ").trim()),"style"===r.property){let t="object"==typeof n?n:function(e,t){try{return(0,ts.default)(t,{reactCompat:!0})}catch(n){if(e.ignoreInvalidStyle)return{};let t=new tf("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw t.file=e.filePath||void 0,t.url=t_+"#cannot-parse-style-attribute",t}}(e,String(n));return"css"===e.stylePropertyNameCase&&(t=function(e){let t,n={};for(t in e)tg.call(e,t)&&(n[function(e){let t=e.replace(tv,tP);return"ms-"===t.slice(0,3)&&(t="-"+t),t}(t)]=e[t]);return n}(t)),["style",t]}return["react"===e.elementAttributeNameCase&&r.space?e6[r.property]||r.property:r.attribute,n]}}(e,r,t.properties[r]);if(a){let[r,o]=a;e.tableCellAlignToStyle&&"align"===r&&"string"==typeof o&&tx.has(t.tagName)?n=o:i[r]=o}}return n&&((i.style||(i.style={}))["css"===e.stylePropertyNameCase?"text-align":"textAlign"]=n),i}(r,i),g=tT(r,i),tb.has(i.tagName)&&(g=g.filter(function(e){return"string"!=typeof e||!("object"==typeof e?"text"===e.type&&eN(e.value):eN(e))})),tS(r,f,h,i),tI(f,g),r.ancestors.pop(),r.schema=p,r.create(i,h,f,a)):"mdxFlowExpression"===t.type||"mdxTextExpression"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater){let n=t.data.estree.body[0];return eE("ExpressionStatement"===n.type),e.evaluater.evaluateExpression(n.expression)}tA(e,t.position)}(e,t):"mdxJsxFlowElement"===t.type||"mdxJsxTextElement"===t.type?(o=e,s=t,l=n,v=y=o.schema,"svg"===s.name&&"html"===y.space&&(o.schema=to),o.ancestors.push(s),b=null===s.name?o.Fragment:tC(o,s.name,!0),x=function(e,t){let n={};for(let r of t.attributes)if("mdxJsxExpressionAttribute"===r.type)if(r.data&&r.data.estree&&e.evaluater){let t=r.data.estree.body[0];eE("ExpressionStatement"===t.type);let i=t.expression;eE("ObjectExpression"===i.type);let a=i.properties[0];eE("SpreadElement"===a.type),Object.assign(n,e.evaluater.evaluateExpression(a.argument))}else tA(e,t.position);else{let i,a=r.name;if(r.value&&"object"==typeof r.value)if(r.value.data&&r.value.data.estree&&e.evaluater){let t=r.value.data.estree.body[0];eE("ExpressionStatement"===t.type),i=e.evaluater.evaluateExpression(t.expression)}else tA(e,t.position);else i=null===r.value||r.value;n[a]=i}return n}(o,s),_=tT(o,s),tS(o,x,b,s),tI(x,_),o.ancestors.pop(),o.schema=y,o.create(s,b,x,l)):"mdxjsEsm"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);tA(e,t.position)}(e,t):"root"===t.type?(u=e,d=t,c=n,tI(k={},tT(u,d)),u.create(d,u.Fragment,k,c)):"text"===t.type?t.value:void 0}function tS(e,t,n,r){"string"!=typeof n&&n!==e.Fragment&&e.passNode&&(t.node=r)}function tI(e,t){if(t.length>0){let n=t.length>1?t:t[0];n&&(e.children=n)}}function tT(e,t){let n=[],r=-1,i=e.passKeys?new Map:ty;for(;++r<t.children.length;){let a,o=t.children[r];if(e.passKeys){let e="element"===o.type?o.tagName:"mdxJsxFlowElement"===o.type||"mdxJsxTextElement"===o.type?o.name:void 0;if(e){let t=i.get(e)||0;a=e+"-"+t,i.set(e,t+1)}}let s=tw(e,o,a);void 0!==s&&n.push(s)}return n}function tC(e,t,n){let r;if(n)if(t.includes(".")){let e,n=t.split("."),i=-1;for(;++i<n.length;){let t=ej(n[i])?{type:"Identifier",name:n[i]}:{type:"Literal",value:n[i]};e=e?{type:"MemberExpression",object:e,property:t,computed:!!(i&&"Literal"===t.type),optional:!1}:t}eE(e,"always a result"),r=e}else r=ej(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};else r={type:"Literal",value:t};if("Literal"===r.type){let t=r.value;return tg.call(e.components,t)?e.components[t]:t}if(e.evaluater)return e.evaluater.evaluateExpression(r);tA(e)}function tA(e,t){let n=new tf("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw n.file=e.filePath||void 0,n.url=t_+"#cannot-handle-mdx-estrees-without-createevaluater",n}function tP(e){return"-"+e.toLowerCase()}e.s(["toJsxRuntime",()=>tk],945334);let tE={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]};e.s(["urlAttributes",0,tE],722259);let t$={};function tO(e,t){let n=t||t$;return tR(e,"boolean"!=typeof n.includeImageAlt||n.includeImageAlt,"boolean"!=typeof n.includeHtml||n.includeHtml)}function tR(e,t,n){var r;if((r=e)&&"object"==typeof r){if("value"in e)return"html"!==e.type||n?e.value:"";if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return tD(e.children,t,n)}return Array.isArray(e)?tD(e,t,n):""}function tD(e,t,n){let r=[],i=-1;for(;++i<e.length;)r[i]=tR(e[i],t,n);return r.join("")}function tj(e,t,n,r){let i,a=e.length,o=0;if(t=t<0?-t>a?0:a+t:t>a?a:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),e.splice(...i);else for(n&&e.splice(t,n);o<r.length;)(i=r.slice(o,o+1e4)).unshift(t,0),e.splice(...i),o+=1e4,t+=1e4}function tU(e,t){return e.length>0?(tj(e,e.length,0,t),e):t}let tN={}.hasOwnProperty;function tM(e){let t={},n=-1;for(;++n<e.length;)!function(e,t){let n;for(n in t){let r,i=(tN.call(e,n)?e[n]:void 0)||(e[n]={}),a=t[n];if(a)for(r in a){tN.call(i,r)||(i[r]=[]);let e=a[r];!function(e,t){let n=-1,r=[];for(;++n<t.length;)("after"===t[n].add?e:r).push(t[n]);tj(e,0,0,r)}(i[r],Array.isArray(e)?e:e?[e]:[])}}}(t,e[n]);return t}let tz=tY(/[A-Za-z]/),tL=tY(/[\dA-Za-z]/),tF=tY(/[#-'*+\--9=?A-Z^-~]/);function tZ(e){return null!==e&&(e<32||127===e)}let tB=tY(/\d/),tH=tY(/[\dA-Fa-f]/),tK=tY(/[!-/:-@[-`{-~]/);function tV(e){return null!==e&&e<-2}function tG(e){return null!==e&&(e<0||32===e)}function tq(e){return -2===e||-1===e||32===e}let tJ=tY(/\p{P}|\p{S}/u),tW=tY(/\s/);function tY(e){return function(t){return null!==t&&t>-1&&e.test(String.fromCharCode(t))}}function tX(e,t,n,r){let i=r?r-1:1/0,a=0;return function(r){return tq(r)?(e.enter(n),function r(o){return tq(o)&&a++<i?(e.consume(o),r):(e.exit(n),t(o))}(r)):t(r)}}let tQ={tokenize:function(e){let t,n=e.attempt(this.parser.constructs.contentInitial,function(t){return null===t?void e.consume(t):(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),tX(e,n,"linePrefix"))},function(n){return e.enter("paragraph"),function n(r){let i=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=i),t=i,function t(r){if(null===r){e.exit("chunkText"),e.exit("paragraph"),e.consume(r);return}return tV(r)?(e.consume(r),e.exit("chunkText"),n):(e.consume(r),t)}(r)}(n)});return n}},t0={tokenize:function(e){let t,n,r,i=this,a=[],o=0;return s;function s(t){if(o<a.length){let n=a[o];return i.containerState=n[1],e.attempt(n[0].continuation,l,u)(t)}return u(t)}function l(e){if(o++,i.containerState._closeFlow){let n;i.containerState._closeFlow=void 0,t&&y();let r=i.events.length,a=r;for(;a--;)if("exit"===i.events[a][0]&&"chunkFlow"===i.events[a][1].type){n=i.events[a][1].end;break}g(o);let s=r;for(;s<i.events.length;)i.events[s][1].end={...n},s++;return tj(i.events,a+1,0,i.events.slice(r)),i.events.length=s,u(e)}return s(e)}function u(n){if(o===a.length){if(!t)return p(n);if(t.currentConstruct&&t.currentConstruct.concrete)return h(n);i.interrupt=!!(t.currentConstruct&&!t._gfmTableDynamicInterruptHack)}return i.containerState={},e.check(t1,d,c)(n)}function d(e){return t&&y(),g(o),p(e)}function c(e){return i.parser.lazy[i.now().line]=o!==a.length,r=i.now().offset,h(e)}function p(t){return i.containerState={},e.attempt(t1,m,h)(t)}function m(e){return o++,a.push([i.currentConstruct,i.containerState]),p(e)}function h(r){if(null===r){t&&y(),g(0),e.consume(r);return}return t=t||i.parser.flow(i.now()),e.enter("chunkFlow",{_tokenizer:t,contentType:"flow",previous:n}),function t(n){if(null===n){f(e.exit("chunkFlow"),!0),g(0),e.consume(n);return}return tV(n)?(e.consume(n),f(e.exit("chunkFlow")),o=0,i.interrupt=void 0,s):(e.consume(n),t)}(r)}function f(e,a){let s=i.sliceStream(e);if(a&&s.push(null),e.previous=n,n&&(n.next=e),n=e,t.defineSkip(e.start),t.write(s),i.parser.lazy[e.start.line]){let e,n,a=t.events.length;for(;a--;)if(t.events[a][1].start.offset<r&&(!t.events[a][1].end||t.events[a][1].end.offset>r))return;let s=i.events.length,l=s;for(;l--;)if("exit"===i.events[l][0]&&"chunkFlow"===i.events[l][1].type){if(e){n=i.events[l][1].end;break}e=!0}for(g(o),a=s;a<i.events.length;)i.events[a][1].end={...n},a++;tj(i.events,l+1,0,i.events.slice(s)),i.events.length=a}}function g(t){let n=a.length;for(;n-- >t;){let t=a[n];i.containerState=t[1],t[0].exit.call(i,e)}a.length=t}function y(){t.write([null]),n=void 0,t=void 0,i.containerState._closeFlow=void 0}}},t1={tokenize:function(e,t,n){return tX(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}},t4={partial:!0,tokenize:function(e,t,n){return function(t){return tq(t)?tX(e,r,"linePrefix")(t):r(t)};function r(e){return null===e||tV(e)?t(e):n(e)}}};class t6{constructor(e){this.left=e?[...e]:[],this.right=[]}get(e){if(e<0||e>=this.left.length+this.right.length)throw RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return e<this.left.length?this.left[e]:this.right[this.right.length-e+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(e,t){let n=null==t?1/0:t;return n<this.left.length?this.left.slice(e,n):e>this.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){this.setCursor(Math.trunc(e));let r=this.right.splice(this.right.length-(t||0),1/0);return n&&t2(this.left,n),r.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),t2(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),t2(this.right,e.reverse())}setCursor(e){if(e!==this.left.length&&(!(e>this.left.length)||0!==this.right.length)&&(!(e<0)||0!==this.left.length))if(e<this.left.length){let t=this.left.splice(e,1/0);t2(this.right,t.reverse())}else{let t=this.right.splice(this.left.length+this.right.length-e,1/0);t2(this.left,t.reverse())}}}function t2(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function t9(e){let t,n,r,i,a,o,s,l={},u=-1,d=new t6(e);for(;++u<d.length;){for(;u in l;)u=l[u];if(t=d.get(u),u&&"chunkFlow"===t[1].type&&"listItemPrefix"===d.get(u-1)[1].type&&((r=0)<(o=t[1]._tokenizer.events).length&&"lineEndingBlank"===o[r][1].type&&(r+=2),r<o.length&&"content"===o[r][1].type))for(;++r<o.length&&"content"!==o[r][1].type;)"chunkText"===o[r][1].type&&(o[r][1]._isInFirstContentOfListItem=!0,r++);if("enter"===t[0])t[1].contentType&&(Object.assign(l,function(e,t){let n,r,i=e.get(t)[1],a=e.get(t)[2],o=t-1,s=[],l=i._tokenizer;!l&&(l=a.parser[i.contentType](i.start),i._contentTypeTextTrailing&&(l._contentTypeTextTrailing=!0));let u=l.events,d=[],c={},p=-1,m=i,h=0,f=0,g=[0];for(;m;){for(;e.get(++o)[1]!==m;);s.push(o),!m._tokenizer&&(n=a.sliceStream(m),m.next||n.push(null),r&&l.defineSkip(m.start),m._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=!0),l.write(n),m._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=void 0)),r=m,m=m.next}for(m=i;++p<u.length;)"exit"===u[p][0]&&"enter"===u[p-1][0]&&u[p][1].type===u[p-1][1].type&&u[p][1].start.line!==u[p][1].end.line&&(f=p+1,g.push(f),m._tokenizer=void 0,m.previous=void 0,m=m.next);for(l.events=[],m?(m._tokenizer=void 0,m.previous=void 0):g.pop(),p=g.length;p--;){let t=u.slice(g[p],g[p+1]),n=s.pop();d.push([n,n+t.length-1]),e.splice(n,2,t)}for(d.reverse(),p=-1;++p<d.length;)c[h+d[p][0]]=h+d[p][1],h+=d[p][1]-d[p][0]-1;return c}(d,u)),u=l[u],s=!0);else if(t[1]._container){for(r=u,n=void 0;r--;)if("lineEnding"===(i=d.get(r))[1].type||"lineEndingBlank"===i[1].type)"enter"===i[0]&&(n&&(d.get(n)[1].type="lineEndingBlank"),i[1].type="lineEnding",n=r);else if("linePrefix"===i[1].type||"listItemIndent"===i[1].type);else break;n&&(t[1].end={...d.get(n)[1].start},(a=d.slice(n,u)).unshift(t),d.splice(n,u-n+1,a))}}return tj(e,0,1/0,d.slice(0)),!s}let t5={resolve:function(e){return t9(e),e},tokenize:function(e,t){let n;return function(t){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),r(t)};function r(t){return null===t?i(t):tV(t)?e.check(t3,a,i)(t):(e.consume(t),r)}function i(n){return e.exit("chunkContent"),e.exit("content"),t(n)}function a(t){return e.consume(t),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,r}}},t3={partial:!0,tokenize:function(e,t,n){let r=this;return function(t){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),tX(e,i,"linePrefix")};function i(i){if(null===i||tV(i))return n(i);let a=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&a&&"linePrefix"===a[1].type&&a[2].sliceSerialize(a[1],!0).length>=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}},t8={tokenize:function(e){let t=this,n=e.attempt(t4,function(r){return null===r?void e.consume(r):(e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n)},e.attempt(this.parser.constructs.flowInitial,r,tX(e,e.attempt(this.parser.constructs.flow,r,e.attempt(t5,r)),"linePrefix")));return n;function r(r){return null===r?void e.consume(r):(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,n)}}},t7={resolveAll:nr()},ne=nn("string"),nt=nn("text");function nn(e){return{resolveAll:nr("text"===e?ni:void 0),tokenize:function(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return l(e)?i(e):o(e)}function o(e){return null===e?void t.consume(e):(t.enter("data"),t.consume(e),s)}function s(e){return l(e)?(t.exit("data"),i(e)):(t.consume(e),s)}function l(e){if(null===e)return!0;let t=r[e],i=-1;if(t)for(;++i<t.length;){let e=t[i];if(!e.previous||e.previous.call(n,n.previous))return!0}return!1}}}}function nr(e){return function(t,n){let r,i=-1;for(;++i<=t.length;)void 0===r?t[i]&&"data"===t[i][1].type&&(r=i,i++):t[i]&&"data"===t[i][1].type||(i!==r+2&&(t[r][1].end=t[i-1][1].end,t.splice(r+2,i-r-2),i=r+2),r=void 0);return e?e(t,n):t}}function ni(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||"lineEnding"===e[n][1].type)&&"data"===e[n-1][1].type){let r,i=e[n-1][1],a=t.sliceStream(i),o=a.length,s=-1,l=0;for(;o--;){let e=a[o];if("string"==typeof e){for(s=e.length;32===e.charCodeAt(s-1);)l++,s--;if(s)break;s=-1}else if(-2===e)r=!0,l++;else if(-1===e);else{o++;break}}if(t._contentTypeTextTrailing&&n===e.length&&(l=0),l){let a={type:n===e.length||r||l<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:o?s:i.start._bufferIndex+s,_index:i.start._index+o,line:i.end.line,column:i.end.column-l,offset:i.end.offset-l},end:{...i.end}};i.end={...a.start},i.start.offset===i.end.offset?Object.assign(i,a):(e.splice(n,0,["enter",a,t],["exit",a,t]),n+=2)}n++}return e}function na(e){return null===e||tG(e)||tW(e)?1:tJ(e)?2:void 0}function no(e,t,n){let r=[],i=-1;for(;++i<e.length;){let a=e[i].resolveAll;a&&!r.includes(a)&&(t=a(t,n),r.push(a))}return t}let ns={name:"attention",resolveAll:function(e,t){let n,r,i,a,o,s,l,u,d=-1;for(;++d<e.length;)if("enter"===e[d][0]&&"attentionSequence"===e[d][1].type&&e[d][1]._close){for(n=d;n--;)if("exit"===e[n][0]&&"attentionSequence"===e[n][1].type&&e[n][1]._open&&t.sliceSerialize(e[n][1]).charCodeAt(0)===t.sliceSerialize(e[d][1]).charCodeAt(0)){if((e[n][1]._close||e[d][1]._open)&&(e[d][1].end.offset-e[d][1].start.offset)%3&&!((e[n][1].end.offset-e[n][1].start.offset+e[d][1].end.offset-e[d][1].start.offset)%3))continue;s=e[n][1].end.offset-e[n][1].start.offset>1&&e[d][1].end.offset-e[d][1].start.offset>1?2:1;let c={...e[n][1].end},p={...e[d][1].start};nl(c,-s),nl(p,s),a={type:s>1?"strongSequence":"emphasisSequence",start:c,end:{...e[n][1].end}},o={type:s>1?"strongSequence":"emphasisSequence",start:{...e[d][1].start},end:p},i={type:s>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[d][1].start}},r={type:s>1?"strong":"emphasis",start:{...a.start},end:{...o.end}},e[n][1].end={...a.start},e[d][1].start={...o.end},l=[],e[n][1].end.offset-e[n][1].start.offset&&(l=tU(l,[["enter",e[n][1],t],["exit",e[n][1],t]])),l=tU(l,[["enter",r,t],["enter",a,t],["exit",a,t],["enter",i,t]]),l=tU(l,no(t.parser.constructs.insideSpan.null,e.slice(n+1,d),t)),l=tU(l,[["exit",i,t],["enter",o,t],["exit",o,t],["exit",r,t]]),e[d][1].end.offset-e[d][1].start.offset?(u=2,l=tU(l,[["enter",e[d][1],t],["exit",e[d][1],t]])):u=0,tj(e,n-1,d-n+3,l),d=n+l.length-u-2;break}}for(d=-1;++d<e.length;)"attentionSequence"===e[d][1].type&&(e[d][1].type="data");return e},tokenize:function(e,t){let n,r=this.parser.constructs.attentionMarkers.null,i=this.previous,a=na(i);return function(o){return n=o,e.enter("attentionSequence"),function o(s){if(s===n)return e.consume(s),o;let l=e.exit("attentionSequence"),u=na(s),d=!u||2===u&&a||r.includes(s),c=!a||2===a&&u||r.includes(i);return l._open=!!(42===n?d:d&&(a||!c)),l._close=!!(42===n?c:c&&(u||!d)),t(s)}(o)}}};function nl(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}let nu={continuation:{tokenize:function(e,t,n){let r=this;return function(t){return tq(t)?tX(e,i,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):i(t)};function i(r){return e.attempt(nu,t,n)(r)}}},exit:function(e){e.exit("blockQuote")},name:"blockQuote",tokenize:function(e,t,n){let r=this;return function(t){if(62===t){let n=r.containerState;return n.open||(e.enter("blockQuote",{_container:!0}),n.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(t),e.exit("blockQuoteMarker"),i}return n(t)};function i(n){return tq(n)?(e.enter("blockQuotePrefixWhitespace"),e.consume(n),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(n))}}},nd={name:"characterEscape",tokenize:function(e,t,n){return function(t){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(t),e.exit("escapeMarker"),r};function r(r){return tK(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(r)}}},nc=document.createElement("i");function np(e){let t="&"+e+";";nc.innerHTML=t;let n=nc.textContent;return(59!==n.charCodeAt(n.length-1)||"semi"===e)&&n!==t&&n}let nm={name:"characterReference",tokenize:function(e,t,n){let r,i,a=this,o=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),s};function s(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),l):(e.enter("characterReferenceValue"),r=31,i=tL,u(t))}function l(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),r=6,i=tH,u):(e.enter("characterReferenceValue"),r=7,i=tB,u(t))}function u(s){if(59===s&&o){let r=e.exit("characterReferenceValue");return i!==tL||np(a.sliceSerialize(r))?(e.enter("characterReferenceMarker"),e.consume(s),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(s)}return i(s)&&o++<r?(e.consume(s),u):n(s)}}},nh={partial:!0,tokenize:function(e,t,n){let r=this;return function(t){return null===t?n(t):(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i)};function i(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},nf={concrete:!0,name:"codeFenced",tokenize:function(e,t,n){let r,i=this,a={partial:!0,tokenize:function(e,t,n){let a=0;return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o};function o(t){return e.enter("codeFencedFence"),tq(t)?tX(e,l,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):l(t)}function l(t){return t===r?(e.enter("codeFencedFenceSequence"),function t(i){return i===r?(a++,e.consume(i),t):a>=s?(e.exit("codeFencedFenceSequence"),tq(i)?tX(e,u,"whitespace")(i):u(i)):n(i)}(t)):n(t)}function u(r){return null===r||tV(r)?(e.exit("codeFencedFence"),t(r)):n(r)}}},o=0,s=0;return function(t){var a;let u;return a=t,o=(u=i.events[i.events.length-1])&&"linePrefix"===u[1].type?u[2].sliceSerialize(u[1],!0).length:0,r=a,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),function t(i){return i===r?(s++,e.consume(i),t):s<3?n(i):(e.exit("codeFencedFenceSequence"),tq(i)?tX(e,l,"whitespace")(i):l(i))}(a)};function l(a){return null===a||tV(a)?(e.exit("codeFencedFence"),i.interrupt?t(a):e.check(nh,d,h)(a)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),function t(i){return null===i||tV(i)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),l(i)):tq(i)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),tX(e,u,"whitespace")(i)):96===i&&i===r?n(i):(e.consume(i),t)}(a))}function u(t){return null===t||tV(t)?l(t):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),function t(i){return null===i||tV(i)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),l(i)):96===i&&i===r?n(i):(e.consume(i),t)}(t))}function d(t){return e.attempt(a,h,c)(t)}function c(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),p}function p(t){return o>0&&tq(t)?tX(e,m,"linePrefix",o+1)(t):m(t)}function m(t){return null===t||tV(t)?e.check(nh,d,h)(t):(e.enter("codeFlowValue"),function t(n){return null===n||tV(n)?(e.exit("codeFlowValue"),m(n)):(e.consume(n),t)}(t))}function h(n){return e.exit("codeFenced"),t(n)}}},ng={name:"codeIndented",tokenize:function(e,t,n){let r=this;return function(t){return e.enter("codeIndented"),tX(e,i,"linePrefix",5)(t)};function i(t){let i=r.events[r.events.length-1];return i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?function t(n){return null===n?a(n):tV(n)?e.attempt(ny,t,a)(n):(e.enter("codeFlowValue"),function n(r){return null===r||tV(r)?(e.exit("codeFlowValue"),t(r)):(e.consume(r),n)}(n))}(t):n(t)}function a(n){return e.exit("codeIndented"),t(n)}}},ny={partial:!0,tokenize:function(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):tV(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i):tX(e,a,"linePrefix",5)(t)}function a(e){let a=r.events[r.events.length-1];return a&&"linePrefix"===a[1].type&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):tV(e)?i(e):n(e)}}};function nv(e,t,n,r,i,a,o,s,l){let u=l||1/0,d=0;return function(t){return 60===t?(e.enter(r),e.enter(i),e.enter(a),e.consume(t),e.exit(a),c):null===t||32===t||41===t||tZ(t)?n(t):(e.enter(r),e.enter(o),e.enter(s),e.enter("chunkString",{contentType:"string"}),h(t))};function c(n){return 62===n?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),e.exit(r),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(n))}function p(t){return 62===t?(e.exit("chunkString"),e.exit(s),c(t)):null===t||60===t||tV(t)?n(t):(e.consume(t),92===t?m:p)}function m(t){return 60===t||62===t||92===t?(e.consume(t),p):p(t)}function h(i){return!d&&(null===i||41===i||tG(i))?(e.exit("chunkString"),e.exit(s),e.exit(o),e.exit(r),t(i)):d<u&&40===i?(e.consume(i),d++,h):41===i?(e.consume(i),d--,h):null===i||32===i||40===i||tZ(i)?n(i):(e.consume(i),92===i?f:h)}function f(t){return 40===t||41===t||92===t?(e.consume(t),h):h(t)}}function nb(e,t,n,r,i,a){let o,s=this,l=0;return function(t){return e.enter(r),e.enter(i),e.consume(t),e.exit(i),e.enter(a),u};function u(c){return l>999||null===c||91===c||93===c&&!o||94===c&&!l&&"_hiddenFootnoteSupport"in s.parser.constructs?n(c):93===c?(e.exit(a),e.enter(i),e.consume(c),e.exit(i),e.exit(r),t):tV(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),u):(e.enter("chunkString",{contentType:"string"}),d(c))}function d(t){return null===t||91===t||93===t||tV(t)||l++>999?(e.exit("chunkString"),u(t)):(e.consume(t),o||(o=!tq(t)),92===t?c:d)}function c(t){return 91===t||92===t||93===t?(e.consume(t),l++,d):d(t)}}function nx(e,t,n,r,i,a){let o;return function(t){return 34===t||39===t||40===t?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=40===t?41:t,s):n(t)};function s(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),s(o)):null===t?n(t):tV(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),tX(e,l,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),u(t))}function u(t){return t===o||null===t||tV(t)?(e.exit("chunkString"),l(t)):(e.consume(t),92===t?d:u)}function d(t){return t===o||92===t?(e.consume(t),u):u(t)}}function n_(e,t){let n;return function r(i){return tV(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):tq(i)?tX(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}function nk(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}let nw={partial:!0,tokenize:function(e,t,n){return function(t){return tG(t)?n_(e,r)(t):n(t)};function r(t){return nx(e,i,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t)}function i(t){return tq(t)?tX(e,a,"whitespace")(t):a(t)}function a(e){return null===e||tV(e)?t(e):n(e)}}},nS=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nI=["pre","script","style","textarea"],nT={partial:!0,tokenize:function(e,t,n){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(t4,t,n)}}},nC={partial:!0,tokenize:function(e,t,n){let r=this;return function(t){return tV(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i):n(t)};function i(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},nA={name:"labelEnd",resolveAll:function(e){let t=-1,n=[];for(;++t<e.length;){let r=e[t][1];if(n.push(e[t]),"labelImage"===r.type||"labelLink"===r.type||"labelEnd"===r.type){let e="labelImage"===r.type?4:2;r.type="data",t+=e}}return e.length!==n.length&&tj(e,0,e.length,n),e},resolveTo:function(e,t){let n,r,i,a,o=e.length,s=0;for(;o--;)if(n=e[o][1],r){if("link"===n.type||"labelLink"===n.type&&n._inactive)break;"enter"===e[o][0]&&"labelLink"===n.type&&(n._inactive=!0)}else if(i){if("enter"===e[o][0]&&("labelImage"===n.type||"labelLink"===n.type)&&!n._balanced&&(r=o,"labelLink"!==n.type)){s=2;break}}else"labelEnd"===n.type&&(i=o);let l={type:"labelLink"===e[r][1].type?"link":"image",start:{...e[r][1].start},end:{...e[e.length-1][1].end}},u={type:"label",start:{...e[r][1].start},end:{...e[i][1].end}},d={type:"labelText",start:{...e[r+s+2][1].end},end:{...e[i-2][1].start}};return a=tU(a=[["enter",l,t],["enter",u,t]],e.slice(r+1,r+s+3)),a=tU(a,[["enter",d,t]]),a=tU(a,no(t.parser.constructs.insideSpan.null,e.slice(r+s+4,i-3),t)),a=tU(a,[["exit",d,t],e[i-2],e[i-1],["exit",u,t]]),a=tU(a,e.slice(i+1)),a=tU(a,[["exit",l,t]]),tj(e,r,e.length,a),e},tokenize:function(e,t,n){let r,i,a=this,o=a.events.length;for(;o--;)if(("labelImage"===a.events[o][1].type||"labelLink"===a.events[o][1].type)&&!a.events[o][1]._balanced){r=a.events[o][1];break}return function(t){return r?r._inactive?d(t):(i=a.parser.defined.includes(nk(a.sliceSerialize({start:r.end,end:a.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelEnd"),s):n(t)};function s(t){return 40===t?e.attempt(nP,u,i?u:d)(t):91===t?e.attempt(nE,u,i?l:d)(t):i?u(t):d(t)}function l(t){return e.attempt(n$,u,d)(t)}function u(e){return t(e)}function d(e){return r._balanced=!0,n(e)}}},nP={tokenize:function(e,t,n){return function(t){return e.enter("resource"),e.enter("resourceMarker"),e.consume(t),e.exit("resourceMarker"),r};function r(t){return tG(t)?n_(e,i)(t):i(t)}function i(t){return 41===t?u(t):nv(e,a,o,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(t)}function a(t){return tG(t)?n_(e,s)(t):u(t)}function o(e){return n(e)}function s(t){return 34===t||39===t||40===t?nx(e,l,n,"resourceTitle","resourceTitleMarker","resourceTitleString")(t):u(t)}function l(t){return tG(t)?n_(e,u)(t):u(t)}function u(r){return 41===r?(e.enter("resourceMarker"),e.consume(r),e.exit("resourceMarker"),e.exit("resource"),t):n(r)}}},nE={tokenize:function(e,t,n){let r=this;return function(t){return nb.call(r,e,i,a,"reference","referenceMarker","referenceString")(t)};function i(e){return r.parser.defined.includes(nk(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?t(e):n(e)}function a(e){return n(e)}}},n$={tokenize:function(e,t,n){return function(t){return e.enter("reference"),e.enter("referenceMarker"),e.consume(t),e.exit("referenceMarker"),r};function r(r){return 93===r?(e.enter("referenceMarker"),e.consume(r),e.exit("referenceMarker"),e.exit("reference"),t):n(r)}}},nO={name:"labelStartImage",resolveAll:nA.resolveAll,tokenize:function(e,t,n){let r=this;return function(t){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(t),e.exit("labelImageMarker"),i};function i(t){return 91===t?(e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelImage"),a):n(t)}function a(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?n(e):t(e)}}},nR={name:"labelStartLink",resolveAll:nA.resolveAll,tokenize:function(e,t,n){let r=this;return function(t){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelLink"),i};function i(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?n(e):t(e)}}},nD={name:"lineEnding",tokenize:function(e,t){return function(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),tX(e,t,"linePrefix")}}},nj={name:"thematicBreak",tokenize:function(e,t,n){let r,i=0;return function(a){var o;return e.enter("thematicBreak"),r=o=a,function a(o){return o===r?(e.enter("thematicBreakSequence"),function t(n){return n===r?(e.consume(n),i++,t):(e.exit("thematicBreakSequence"),tq(n)?tX(e,a,"whitespace")(n):a(n))}(o)):i>=3&&(null===o||tV(o))?(e.exit("thematicBreak"),t(o)):n(o)}(o)}}},nU={continuation:{tokenize:function(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(t4,function(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,tX(e,t,"listItemIndent",r.containerState.size+1)(n)},function(n){return r.containerState.furtherBlankLines||!tq(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,i(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(nM,t,i)(n))});function i(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,tX(e,e.attempt(nU,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)},name:"list",tokenize:function(e,t,n){let r=this,i=r.events[r.events.length-1],a=i&&"linePrefix"===i[1].type?i[2].sliceSerialize(i[1],!0).length:0,o=0;return function(t){let i=r.containerState.type||(42===t||43===t||45===t?"listUnordered":"listOrdered");if("listUnordered"===i?!r.containerState.marker||t===r.containerState.marker:tB(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),"listUnordered"===i)return e.enter("listItemPrefix"),42===t||45===t?e.check(nj,n,s)(t):s(t);if(!r.interrupt||49===t)return e.enter("listItemPrefix"),e.enter("listItemValue"),function t(i){return tB(i)&&++o<10?(e.consume(i),t):(!r.interrupt||o<2)&&(r.containerState.marker?i===r.containerState.marker:41===i||46===i)?(e.exit("listItemValue"),s(i)):n(i)}(t)}return n(t)};function s(t){return e.enter("listItemMarker"),e.consume(t),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||t,e.check(t4,r.interrupt?n:l,e.attempt(nN,d,u))}function l(e){return r.containerState.initialBlankLine=!0,a++,d(e)}function u(t){return tq(t)?(e.enter("listItemPrefixWhitespace"),e.consume(t),e.exit("listItemPrefixWhitespace"),d):n(t)}function d(n){return r.containerState.size=a+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(n)}}},nN={partial:!0,tokenize:function(e,t,n){let r=this;return tX(e,function(e){let i=r.events[r.events.length-1];return!tq(e)&&i&&"listItemPrefixWhitespace"===i[1].type?t(e):n(e)},"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)}},nM={partial:!0,tokenize:function(e,t,n){let r=this;return tX(e,function(e){let i=r.events[r.events.length-1];return i&&"listItemIndent"===i[1].type&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)},"listItemIndent",r.containerState.size+1)}},nz={name:"setextUnderline",resolveTo:function(e,t){let n,r,i,a=e.length;for(;a--;)if("enter"===e[a][0]){if("content"===e[a][1].type){n=a;break}"paragraph"===e[a][1].type&&(r=a)}else"content"===e[a][1].type&&e.splice(a,1),i||"definition"!==e[a][1].type||(i=a);let o={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=o,e.push(["exit",o,t]),e},tokenize:function(e,t,n){let r,i=this;return function(t){var o;let s,l=i.events.length;for(;l--;)if("lineEnding"!==i.events[l][1].type&&"linePrefix"!==i.events[l][1].type&&"content"!==i.events[l][1].type){s="paragraph"===i.events[l][1].type;break}return!i.parser.lazy[i.now().line]&&(i.interrupt||s)?(e.enter("setextHeadingLine"),r=t,o=t,e.enter("setextHeadingLineSequence"),function t(n){return n===r?(e.consume(n),t):(e.exit("setextHeadingLineSequence"),tq(n)?tX(e,a,"lineSuffix")(n):a(n))}(o)):n(t)};function a(r){return null===r||tV(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}}};e.s(["attentionMarkers",0,{null:[42,95]},"contentInitial",0,{91:{name:"definition",tokenize:function(e,t,n){let r,i=this;return function(t){var r;return e.enter("definition"),r=t,nb.call(i,e,a,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(r)};function a(t){return(r=nk(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),58===t)?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),o):n(t)}function o(t){return tG(t)?n_(e,s)(t):s(t)}function s(t){return nv(e,l,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(t)}function l(t){return e.attempt(nw,u,u)(t)}function u(t){return tq(t)?tX(e,d,"whitespace")(t):d(t)}function d(a){return null===a||tV(a)?(e.exit("definition"),i.parser.defined.push(r),t(a)):n(a)}}}},"disable",0,{null:[]},"document",0,{42:nU,43:nU,45:nU,48:nU,49:nU,50:nU,51:nU,52:nU,53:nU,54:nU,55:nU,56:nU,57:nU,62:nu},"flow",0,{35:{name:"headingAtx",resolve:function(e,t){let n,r,i=e.length-2,a=3;return"whitespace"===e[3][1].type&&(a+=2),i-2>a&&"whitespace"===e[i][1].type&&(i-=2),"atxHeadingSequence"===e[i][1].type&&(a===i-1||i-4>a&&"whitespace"===e[i-2][1].type)&&(i-=a+1===i?2:4),i>a&&(n={type:"atxHeadingText",start:e[a][1].start,end:e[i][1].end},r={type:"chunkText",start:e[a][1].start,end:e[i][1].end,contentType:"text"},tj(e,a,i-a+1,[["enter",n,t],["enter",r,t],["exit",r,t],["exit",n,t]])),e},tokenize:function(e,t,n){let r=0;return function(i){var a;return e.enter("atxHeading"),a=i,e.enter("atxHeadingSequence"),function i(a){return 35===a&&r++<6?(e.consume(a),i):null===a||tG(a)?(e.exit("atxHeadingSequence"),function n(r){return 35===r?(e.enter("atxHeadingSequence"),function t(r){return 35===r?(e.consume(r),t):(e.exit("atxHeadingSequence"),n(r))}(r)):null===r||tV(r)?(e.exit("atxHeading"),t(r)):tq(r)?tX(e,n,"whitespace")(r):(e.enter("atxHeadingText"),function t(r){return null===r||35===r||tG(r)?(e.exit("atxHeadingText"),n(r)):(e.consume(r),t)}(r))}(a)):n(a)}(a)}}},42:nj,45:[nz,nj],60:{concrete:!0,name:"htmlFlow",resolveTo:function(e){let t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););return t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e},tokenize:function(e,t,n){let r,i,a,o,s,l=this;return function(t){var n;return n=t,e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(n),u};function u(o){return 33===o?(e.consume(o),d):47===o?(e.consume(o),i=!0,m):63===o?(e.consume(o),r=3,l.interrupt?t:O):tz(o)?(e.consume(o),a=String.fromCharCode(o),h):n(o)}function d(i){return 45===i?(e.consume(i),r=2,c):91===i?(e.consume(i),r=5,o=0,p):tz(i)?(e.consume(i),r=4,l.interrupt?t:O):n(i)}function c(r){return 45===r?(e.consume(r),l.interrupt?t:O):n(r)}function p(r){let i="CDATA[";return r===i.charCodeAt(o++)?(e.consume(r),o===i.length)?l.interrupt?t:S:p:n(r)}function m(t){return tz(t)?(e.consume(t),a=String.fromCharCode(t),h):n(t)}function h(o){if(null===o||47===o||62===o||tG(o)){let s=47===o,u=a.toLowerCase();return!s&&!i&&nI.includes(u)?(r=1,l.interrupt?t(o):S(o)):nS.includes(a.toLowerCase())?(r=6,s)?(e.consume(o),f):l.interrupt?t(o):S(o):(r=7,l.interrupt&&!l.parser.lazy[l.now().line]?n(o):i?function t(n){return tq(n)?(e.consume(n),t):k(n)}(o):g(o))}return 45===o||tL(o)?(e.consume(o),a+=String.fromCharCode(o),h):n(o)}function f(r){return 62===r?(e.consume(r),l.interrupt?t:S):n(r)}function g(t){return 47===t?(e.consume(t),k):58===t||95===t||tz(t)?(e.consume(t),y):tq(t)?(e.consume(t),g):k(t)}function y(t){return 45===t||46===t||58===t||95===t||tL(t)?(e.consume(t),y):v(t)}function v(t){return 61===t?(e.consume(t),b):tq(t)?(e.consume(t),v):g(t)}function b(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),s=t,x):tq(t)?(e.consume(t),b):function t(n){return null===n||34===n||39===n||47===n||60===n||61===n||62===n||96===n||tG(n)?v(n):(e.consume(n),t)}(t)}function x(t){return t===s?(e.consume(t),s=null,_):null===t||tV(t)?n(t):(e.consume(t),x)}function _(e){return 47===e||62===e||tq(e)?g(e):n(e)}function k(t){return 62===t?(e.consume(t),w):n(t)}function w(t){return null===t||tV(t)?S(t):tq(t)?(e.consume(t),w):n(t)}function S(t){return 45===t&&2===r?(e.consume(t),A):60===t&&1===r?(e.consume(t),P):62===t&&4===r?(e.consume(t),R):63===t&&3===r?(e.consume(t),O):93===t&&5===r?(e.consume(t),$):tV(t)&&(6===r||7===r)?(e.exit("htmlFlowData"),e.check(nT,D,I)(t)):null===t||tV(t)?(e.exit("htmlFlowData"),I(t)):(e.consume(t),S)}function I(t){return e.check(nC,T,D)(t)}function T(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),C}function C(t){return null===t||tV(t)?I(t):(e.enter("htmlFlowData"),S(t))}function A(t){return 45===t?(e.consume(t),O):S(t)}function P(t){return 47===t?(e.consume(t),a="",E):S(t)}function E(t){if(62===t){let n=a.toLowerCase();return nI.includes(n)?(e.consume(t),R):S(t)}return tz(t)&&a.length<8?(e.consume(t),a+=String.fromCharCode(t),E):S(t)}function $(t){return 93===t?(e.consume(t),O):S(t)}function O(t){return 62===t?(e.consume(t),R):45===t&&2===r?(e.consume(t),O):S(t)}function R(t){return null===t||tV(t)?(e.exit("htmlFlowData"),D(t)):(e.consume(t),R)}function D(n){return e.exit("htmlFlow"),t(n)}}},61:nz,95:nj,96:nf,126:nf},"flowInitial",0,{[-2]:ng,[-1]:ng,32:ng},"insideSpan",0,{null:[ns,t7]},"string",0,{38:nm,92:nd},"text",0,{[-5]:nD,[-4]:nD,[-3]:nD,33:nO,38:nm,42:ns,60:[{name:"autolink",tokenize:function(e,t,n){let r=0;return function(t){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i};function i(t){return tz(t)?(e.consume(t),a):64===t?n(t):s(t)}function a(t){return 43===t||45===t||46===t||tL(t)?(r=1,function t(n){return 58===n?(e.consume(n),r=0,o):(43===n||45===n||46===n||tL(n))&&r++<32?(e.consume(n),t):(r=0,s(n))}(t)):s(t)}function o(r){return 62===r?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(r),e.exit("autolinkMarker"),e.exit("autolink"),t):null===r||32===r||60===r||tZ(r)?n(r):(e.consume(r),o)}function s(t){return 64===t?(e.consume(t),l):tF(t)?(e.consume(t),s):n(t)}function l(i){return tL(i)?function i(a){return 46===a?(e.consume(a),r=0,l):62===a?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(a),e.exit("autolinkMarker"),e.exit("autolink"),t):function t(a){if((45===a||tL(a))&&r++<63){let n=45===a?t:i;return e.consume(a),n}return n(a)}(a)}(i):n(i)}}},{name:"htmlText",tokenize:function(e,t,n){let r,i,a,o=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),s};function s(t){return 33===t?(e.consume(t),l):47===t?(e.consume(t),x):63===t?(e.consume(t),v):tz(t)?(e.consume(t),k):n(t)}function l(t){return 45===t?(e.consume(t),u):91===t?(e.consume(t),i=0,m):tz(t)?(e.consume(t),y):n(t)}function u(t){return 45===t?(e.consume(t),p):n(t)}function d(t){return null===t?n(t):45===t?(e.consume(t),c):tV(t)?(a=d,E(t)):(e.consume(t),d)}function c(t){return 45===t?(e.consume(t),p):d(t)}function p(e){return 62===e?P(e):45===e?c(e):d(e)}function m(t){let r="CDATA[";return t===r.charCodeAt(i++)?(e.consume(t),i===r.length?h:m):n(t)}function h(t){return null===t?n(t):93===t?(e.consume(t),f):tV(t)?(a=h,E(t)):(e.consume(t),h)}function f(t){return 93===t?(e.consume(t),g):h(t)}function g(t){return 62===t?P(t):93===t?(e.consume(t),g):h(t)}function y(t){return null===t||62===t?P(t):tV(t)?(a=y,E(t)):(e.consume(t),y)}function v(t){return null===t?n(t):63===t?(e.consume(t),b):tV(t)?(a=v,E(t)):(e.consume(t),v)}function b(e){return 62===e?P(e):v(e)}function x(t){return tz(t)?(e.consume(t),_):n(t)}function _(t){return 45===t||tL(t)?(e.consume(t),_):function t(n){return tV(n)?(a=t,E(n)):tq(n)?(e.consume(n),t):P(n)}(t)}function k(t){return 45===t||tL(t)?(e.consume(t),k):47===t||62===t||tG(t)?w(t):n(t)}function w(t){return 47===t?(e.consume(t),P):58===t||95===t||tz(t)?(e.consume(t),S):tV(t)?(a=w,E(t)):tq(t)?(e.consume(t),w):P(t)}function S(t){return 45===t||46===t||58===t||95===t||tL(t)?(e.consume(t),S):function t(n){return 61===n?(e.consume(n),I):tV(n)?(a=t,E(n)):tq(n)?(e.consume(n),t):w(n)}(t)}function I(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),r=t,T):tV(t)?(a=I,E(t)):tq(t)?(e.consume(t),I):(e.consume(t),C)}function T(t){return t===r?(e.consume(t),r=void 0,A):null===t?n(t):tV(t)?(a=T,E(t)):(e.consume(t),T)}function C(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):47===t||62===t||tG(t)?w(t):(e.consume(t),C)}function A(e){return 47===e||62===e||tG(e)?w(e):n(e)}function P(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),t):n(r)}function E(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),$}function $(t){return tq(t)?tX(e,O,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):O(t)}function O(t){return e.enter("htmlTextData"),a(t)}}}],91:nR,92:[{name:"hardBreakEscape",tokenize:function(e,t,n){return function(t){return e.enter("hardBreakEscape"),e.consume(t),r};function r(r){return tV(r)?(e.exit("hardBreakEscape"),t(r)):n(r)}}},nd],93:nA,95:ns,96:{name:"codeText",previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type},resolve:function(e){let t,n,r=e.length-4,i=3;if(("lineEnding"===e[3][1].type||"space"===e[i][1].type)&&("lineEnding"===e[r][1].type||"space"===e[r][1].type)){for(t=i;++t<r;)if("codeTextData"===e[t][1].type){e[i][1].type="codeTextPadding",e[r][1].type="codeTextPadding",i+=2,r-=2;break}}for(t=i-1,r++;++t<=r;)void 0===n?t!==r&&"lineEnding"!==e[t][1].type&&(n=t):(t===r||"lineEnding"===e[t][1].type)&&(e[n][1].type="codeTextData",t!==n+2&&(e[n][1].end=e[t-1][1].end,e.splice(n+2,t-n-2),r-=t-n-2,t=n+2),n=void 0);return e},tokenize:function(e,t,n){let r,i,a=0;return function(t){return e.enter("codeText"),e.enter("codeTextSequence"),function t(n){return 96===n?(e.consume(n),a++,t):(e.exit("codeTextSequence"),o(n))}(t)};function o(l){return null===l?n(l):32===l?(e.enter("space"),e.consume(l),e.exit("space"),o):96===l?(i=e.enter("codeTextSequence"),r=0,function n(o){return 96===o?(e.consume(o),r++,n):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),t(o)):(i.type="codeTextData",s(o))}(l)):tV(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),o):(e.enter("codeTextData"),s(l))}function s(t){return null===t||32===t||96===t||tV(t)?(e.exit("codeTextData"),o(t)):(e.consume(t),s)}}}}],119210);var nL=e.i(119210);let nF=/[\0\t\n\r]/g;function nZ(e,t){let n=Number.parseInt(e,t);return n<9||11===n||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(65535&n)==65535||(65535&n)==65534||n>1114111?"�":String.fromCodePoint(n)}let nB=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function nH(e,t,n){if(t)return t;if(35===n.charCodeAt(0)){let e=n.charCodeAt(1),t=120===e||88===e;return nZ(n.slice(t?2:1),t?16:10)}return np(n)||e}let nK={}.hasOwnProperty;function nV(e){return{line:e.line,column:e.column,offset:e.offset}}function nG(e,t){if(e)throw Error("Cannot close `"+e.type+"` ("+tc({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+tc({start:t.start,end:t.end})+") is open");throw Error("Cannot close document, a token (`"+t.type+"`, "+tc({start:t.start,end:t.end})+") is still open")}function nq(e){let t=this;t.parser=function(n){var r,i;let a,o,s,l;return"string"!=typeof(r={...t.data("settings"),...e,extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]})&&(i=r,r=void 0),(function(e){let t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:r(y),autolinkProtocol:u,autolinkEmail:u,atxHeading:r(h),blockQuote:r(function(){return{type:"blockquote",children:[]}}),characterEscape:u,characterReference:u,codeFenced:r(m),codeFencedFenceInfo:i,codeFencedFenceMeta:i,codeIndented:r(m,i),codeText:r(function(){return{type:"inlineCode",value:""}},i),codeTextData:u,data:u,codeFlowValue:u,definition:r(function(){return{type:"definition",identifier:"",label:null,title:null,url:""}}),definitionDestinationString:i,definitionLabelString:i,definitionTitleString:i,emphasis:r(function(){return{type:"emphasis",children:[]}}),hardBreakEscape:r(f),hardBreakTrailing:r(f),htmlFlow:r(g,i),htmlFlowData:u,htmlText:r(g,i),htmlTextData:u,image:r(function(){return{type:"image",title:null,url:"",alt:null}}),label:i,link:r(y),listItem:r(function(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}),listItemValue:function(e){this.data.expectingFirstListItemValue&&(this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),this.data.expectingFirstListItemValue=void 0)},listOrdered:r(v,function(){this.data.expectingFirstListItemValue=!0}),listUnordered:r(v),paragraph:r(function(){return{type:"paragraph",children:[]}}),reference:function(){this.data.referenceType="collapsed"},referenceString:i,resourceDestinationString:i,resourceTitleString:i,setextHeading:r(h),strong:r(function(){return{type:"strong",children:[]}}),thematicBreak:r(function(){return{type:"thematicBreak"}})},exit:{atxHeading:o(),atxHeadingSequence:function(e){let t=this.stack[this.stack.length-1];t.depth||(t.depth=this.sliceSerialize(e).length)},autolink:o(),autolinkEmail:function(e){d.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)},autolinkProtocol:function(e){d.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)},blockQuote:o(),characterEscapeValue:d,characterReferenceMarkerHexadecimal:p,characterReferenceMarkerNumeric:p,characterReferenceValue:function(e){let t,n=this.sliceSerialize(e),r=this.data.characterReferenceType;r?(t=nZ(n,"characterReferenceMarkerNumeric"===r?10:16),this.data.characterReferenceType=void 0):t=np(n);let i=this.stack[this.stack.length-1];i.value+=t},characterReference:function(e){this.stack.pop().position.end=nV(e.end)},codeFenced:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}),codeFencedFence:function(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)},codeFencedFenceInfo:function(){let e=this.resume();this.stack[this.stack.length-1].lang=e},codeFencedFenceMeta:function(){let e=this.resume();this.stack[this.stack.length-1].meta=e},codeFlowValue:d,codeIndented:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")}),codeText:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),codeTextData:d,data:d,definition:o(),definitionDestinationString:function(){let e=this.resume();this.stack[this.stack.length-1].url=e},definitionLabelString:function(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=nk(this.sliceSerialize(e)).toLowerCase()},definitionTitleString:function(){let e=this.resume();this.stack[this.stack.length-1].title=e},emphasis:o(),hardBreakEscape:o(c),hardBreakTrailing:o(c),htmlFlow:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),htmlFlowData:d,htmlText:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),htmlTextData:d,image:o(function(){let e=this.stack[this.stack.length-1];if(this.data.inReference){let t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0}),label:function(){let e=this.stack[this.stack.length-1],t=this.resume(),n=this.stack[this.stack.length-1];this.data.inReference=!0,"link"===n.type?n.children=e.children:n.alt=t},labelText:function(e){let t=this.sliceSerialize(e),n=this.stack[this.stack.length-2];n.label=t.replace(nB,nH),n.identifier=nk(t).toLowerCase()},lineEnding:function(e){let n=this.stack[this.stack.length-1];if(this.data.atHardBreak){n.children[n.children.length-1].position.end=nV(e.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(n.type)&&(u.call(this,e),d.call(this,e))},link:o(function(){let e=this.stack[this.stack.length-1];if(this.data.inReference){let t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0}),listItem:o(),listOrdered:o(),listUnordered:o(),paragraph:o(),referenceString:function(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=nk(this.sliceSerialize(e)).toLowerCase(),this.data.referenceType="full"},resourceDestinationString:function(){let e=this.resume();this.stack[this.stack.length-1].url=e},resourceTitleString:function(){let e=this.resume();this.stack[this.stack.length-1].title=e},resource:function(){this.data.inReference=void 0},setextHeading:o(function(){this.data.setextHeadingSlurpLineEnding=void 0}),setextHeadingLineSequence:function(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).codePointAt(0)?1:2},setextHeadingText:function(){this.data.setextHeadingSlurpLineEnding=!0},strong:o(),thematicBreak:o()}};!function e(t,n){let r=-1;for(;++r<n.length;){let i=n[r];Array.isArray(i)?e(t,i):function(e,t){let n;for(n in t)if(nK.call(t,n))switch(n){case"canContainEols":{let r=t[n];r&&e[n].push(...r);break}case"transforms":{let r=t[n];r&&e[n].push(...r);break}case"enter":case"exit":{let r=t[n];r&&Object.assign(e[n],r)}}}(t,i)}}(t,(e||{}).mdastExtensions||[]);let n={};return function(e){let r={type:"root",children:[]},o={stack:[r],tokenStack:[],config:t,enter:a,exit:s,buffer:i,resume:l,data:n},u=[],d=-1;for(;++d<e.length;)("listOrdered"===e[d][1].type||"listUnordered"===e[d][1].type)&&("enter"===e[d][0]?u.push(d):d=function(e,t,n){let r,i,a,o,s=t-1,l=-1,u=!1;for(;++s<=n;){let t=e[s];switch(t[1].type){case"listUnordered":case"listOrdered":case"blockQuote":"enter"===t[0]?l++:l--,o=void 0;break;case"lineEndingBlank":"enter"===t[0]&&(!r||o||l||a||(a=s),o=void 0);break;case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:o=void 0}if(!l&&"enter"===t[0]&&"listItemPrefix"===t[1].type||-1===l&&"exit"===t[0]&&("listUnordered"===t[1].type||"listOrdered"===t[1].type)){if(r){let o=s;for(i=void 0;o--;){let t=e[o];if("lineEnding"===t[1].type||"lineEndingBlank"===t[1].type){if("exit"===t[0])continue;i&&(e[i][1].type="lineEndingBlank",u=!0),t[1].type="lineEnding",i=o}else if("linePrefix"===t[1].type||"blockQuotePrefix"===t[1].type||"blockQuotePrefixWhitespace"===t[1].type||"blockQuoteMarker"===t[1].type||"listItemIndent"===t[1].type);else break}a&&(!i||a<i)&&(r._spread=!0),r.end=Object.assign({},i?e[i][1].start:t[1].end),e.splice(i||s,0,["exit",r,t[2]]),s++,n++}if("listItemPrefix"===t[1].type){let i={type:"listItem",_spread:!1,start:Object.assign({},t[1].start),end:void 0};r=i,e.splice(s,0,["enter",i,t[2]]),s++,n++,a=void 0,o=!0}}}return e[t][1]._spread=u,n}(e,u.pop(),d));for(d=-1;++d<e.length;){let n=t[e[d][0]];nK.call(n,e[d][1].type)&&n[e[d][1].type].call(Object.assign({sliceSerialize:e[d][2].sliceSerialize},o),e[d][1])}if(o.tokenStack.length>0){let e=o.tokenStack[o.tokenStack.length-1];(e[1]||nG).call(o,void 0,e[0])}for(r.position={start:nV(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:nV(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},d=-1;++d<t.transforms.length;)r=t.transforms[d](r)||r;return r};function r(e,t){return function(n){a.call(this,e(n),n),t&&t.call(this,n)}}function i(){this.stack.push({type:"fragment",children:[]})}function a(e,t,n){this.stack[this.stack.length-1].children.push(e),this.stack.push(e),this.tokenStack.push([t,n||void 0]),e.position={start:nV(t.start),end:void 0}}function o(e){return function(t){e&&e.call(this,t),s.call(this,t)}}function s(e,t){let n=this.stack.pop(),r=this.tokenStack.pop();if(r)r[0].type!==e.type&&(t?t.call(this,e,r[0]):(r[1]||nG).call(this,e,r[0]));else throw Error("Cannot close `"+e.type+"` ("+tc({start:e.start,end:e.end})+"): it’s not open");n.position.end=nV(e.end)}function l(){return tO(this.stack.pop())}function u(e){let t=this.stack[this.stack.length-1].children,n=t[t.length-1];n&&"text"===n.type||((n={type:"text",value:""}).position={start:nV(e.start),end:void 0},t.push(n)),this.stack.push(n)}function d(e){let t=this.stack.pop();t.value+=this.sliceSerialize(e),t.position.end=nV(e.end)}function c(){this.data.atHardBreak=!0}function p(e){this.data.characterReferenceType=e.type}function m(){return{type:"code",lang:null,meta:null,value:""}}function h(){return{type:"heading",depth:0,children:[]}}function f(){return{type:"break"}}function g(){return{type:"html",value:""}}function y(){return{type:"link",title:null,url:"",children:[]}}function v(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}})(i)(function(e){for(;!t9(e););return e}((function(e){let t={constructs:tM([nL,...(e||{}).extensions||[]]),content:n(tQ),defined:[],document:n(t0),flow:n(t8),lazy:{},string:n(ne),text:n(nt)};return t;function n(e){return function(n){return function(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},i={},a=[],o=[],s=[],l={attempt:h(function(e,t){f(e,t.from)}),check:h(m),consume:function(e){tV(e)?(r.line++,r.column=1,r.offset+=-3===e?2:1,g()):-1!==e&&(r.column++,r.offset++),r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++)),u.previous=e},enter:function(e,t){let n=t||{};return n.type=e,n.start=p(),u.events.push(["enter",n,u]),s.push(n),n},exit:function(e){let t=s.pop();return t.end=p(),u.events.push(["exit",t,u]),t},interrupt:h(m,{interrupt:!0})},u={code:null,containerState:{},defineSkip:function(e){i[e.line]=e.column,g()},events:[],now:p,parser:e,previous:null,sliceSerialize:function(e,t){return function(e,t){let n,r=-1,i=[];for(;++r<e.length;){let a,o=e[r];if("string"==typeof o)a=o;else switch(o){case -5:a="\r";break;case -4:a="\n";break;case -3:a="\r\n";break;case -2:a=t?" ":" ";break;case -1:if(!t&&n)continue;a=" ";break;default:a=String.fromCharCode(o)}n=-2===o,i.push(a)}return i.join("")}(c(e),t)},sliceStream:c,write:function(e){return(o=tU(o,e),function(){let e;for(;r._index<o.length;){let n=o[r._index];if("string"==typeof n)for(e=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===e&&r._bufferIndex<n.length;){var t;t=n.charCodeAt(r._bufferIndex),d=d(t)}else d=d(n)}}(),null!==o[o.length-1])?[]:(f(t,0),u.events=no(a,u.events,u),u.events)}},d=t.tokenize.call(u,l);return t.resolveAll&&a.push(t),u;function c(e){return function(e,t){let n,r=t.start._index,i=t.start._bufferIndex,a=t.end._index,o=t.end._bufferIndex;if(r===a)n=[e[r].slice(i,o)];else{if(n=e.slice(r,a),i>-1){let e=n[0];"string"==typeof e?n[0]=e.slice(i):n.shift()}o>0&&n.push(e[a].slice(0,o))}return n}(o,e)}function p(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:a}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:a}}function m(e,t){t.restore()}function h(e,t){return function(n,i,a){var o;let d,c,m,h;return Array.isArray(n)?f(n):"tokenize"in n?f([n]):(o=n,function(e){let t=null!==e&&o[e],n=null!==e&&o.null;return f([...Array.isArray(t)?t:t?[t]:[],...Array.isArray(n)?n:n?[n]:[]])(e)});function f(e){return(d=e,c=0,0===e.length)?a:y(e[c])}function y(e){return function(n){let i,a,o,d,c;return(i=p(),a=u.previous,o=u.currentConstruct,d=u.events.length,c=Array.from(s),h={from:d,restore:function(){r=i,u.previous=a,u.currentConstruct=o,u.events.length=d,s=c,g()}},m=e,e.partial||(u.currentConstruct=e),e.name&&u.parser.constructs.disable.null.includes(e.name))?b(n):e.tokenize.call(t?Object.assign(Object.create(u),t):u,l,v,b)(n)}}function v(t){return e(m,h),i}function b(e){return(h.restore(),++c<d.length)?y(d[c]):a}}}function f(e,t){e.resolveAll&&!a.includes(e)&&a.push(e),e.resolve&&tj(u.events,t,u.events.length-t,e.resolve(u.events.slice(t),u)),e.resolveTo&&(u.events=e.resolveTo(u.events,u))}function g(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}(t,e,n)}}})(i).document().write((o=1,s="",l=!0,function(e,t,n){let r,i,u,d,c,p=[];for(e=s+("string"==typeof e?e.toString():new TextDecoder(t||void 0).decode(e)),u=0,s="",l&&(65279===e.charCodeAt(0)&&u++,l=void 0);u<e.length;){if(nF.lastIndex=u,d=(r=nF.exec(e))&&void 0!==r.index?r.index:e.length,c=e.charCodeAt(d),!r){s=e.slice(u);break}if(10===c&&u===d&&a)p.push(-3),a=void 0;else switch(a&&(p.push(-5),a=void 0),u<d&&(p.push(e.slice(u,d)),o+=d-u),c){case 0:p.push(65533),o++;break;case 9:for(i=4*Math.ceil(o/4),p.push(-2);o++<i;)p.push(-1);break;case 10:p.push(-4),o=1;break;default:a=!0,o=1}u=d+1}return n&&(a&&p.push(-5),s&&p.push(s),p.push(null)),p})(n,r,!0))))}}e.s(["default",()=>nq],403010);let nJ="object"==typeof self?self:globalThis,nW=e=>{var t;let n,r;return(t=new Map,n=(e,n)=>(t.set(n,e),e),r=i=>{if(t.has(i))return t.get(i);let[a,o]=e[i];switch(a){case 0:case -1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o;return n(new nJ[e](t),i)}case 8:return n(BigInt(o),i);case"BigInt":return n(Object(BigInt(o)),i);case"ArrayBuffer":return n(new Uint8Array(o).buffer,o);case"DataView":{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}return n(new nJ[a](o),i)})(0)},{toString:nY}={},{keys:nX}=Object,nQ=e=>{let t=typeof e;if("object"!==t||!e)return[0,t];let n=nY.call(e).slice(8,-1);switch(n){case"Array":return[1,""];case"Object":return[2,""];case"Date":return[3,""];case"RegExp":return[4,""];case"Map":return[5,""];case"Set":return[6,""];case"DataView":return[1,n]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},n0=([e,t])=>0===e&&("function"===t||"symbol"===t),n1=(e,{json:t,lossy:n}={})=>{var r,i,a;let o,s,l=[];return(r=!(t||n),i=!!t,a=new Map,o=(e,t)=>{let n=l.push(e)-1;return a.set(t,n),n},s=e=>{if(a.has(e))return a.get(e);let[t,n]=nQ(e);switch(t){case 0:{let i=e;switch(n){case"bigint":t=8,i=e.toString();break;case"function":case"symbol":if(r)throw TypeError("unable to serialize "+n);i=null;break;case"undefined":return o([-1],e)}return o([t,i],e)}case 1:{if(n){let t=e;return"DataView"===n?t=new Uint8Array(e.buffer):"ArrayBuffer"===n&&(t=new Uint8Array(e)),o([n,[...t]],e)}let r=[],i=o([t,r],e);for(let t of e)r.push(s(t));return i}case 2:{if(n)switch(n){case"BigInt":return o([n,e.toString()],e);case"Boolean":case"Number":case"String":return o([n,e.valueOf()],e)}if(i&&"toJSON"in e)return s(e.toJSON());let a=[],l=o([t,a],e);for(let t of nX(e))(r||!n0(nQ(e[t])))&&a.push([s(t),s(e[t])]);return l}case 3:return o([t,e.toISOString()],e);case 4:{let{source:n,flags:r}=e;return o([t,{source:n,flags:r}],e)}case 5:{let n=[],i=o([t,n],e);for(let[t,i]of e)(r||!(n0(nQ(t))||n0(nQ(i))))&&n.push([s(t),s(i)]);return i}case 6:{let n=[],i=o([t,n],e);for(let t of e)(r||!n0(nQ(t)))&&n.push(s(t));return i}}let{message:l}=e;return o([t,{name:n,message:l}],e)})(e),l},n4="function"==typeof structuredClone?(e,t)=>t&&("json"in t||"lossy"in t)?nW(n1(e,t)):structuredClone(e):(e,t)=>nW(n1(e,t));function n6(e){let t=[],n=-1,r=0,i=0;for(;++n<e.length;){let a=e.charCodeAt(n),o="";if(37===a&&tL(e.charCodeAt(n+1))&&tL(e.charCodeAt(n+2)))i=2;else if(a<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(a))||(o=String.fromCharCode(a));else if(a>55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o="�"}else o=String.fromCharCode(a);o&&(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,o=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function n2(e,t){let n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function n9(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}let n5=function(e){var t,n;if(null==e)return n8;if("function"==typeof e)return n3(e);if("object"==typeof e){return Array.isArray(e)?function(e){let t=[],n=-1;for(;++n<e.length;)t[n]=n5(e[n]);return n3(function(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1})}(e):(t=e,n3(function(e){let n;for(n in t)if(e[n]!==t[n])return!1;return!0}))}if("string"==typeof e){return n=e,n3(function(e){return e&&e.type===n})}throw Error("Expected function, string, or object as test")};function n3(e){return function(t,n,r){return!!(function(e){return null!==e&&"object"==typeof e&&"type"in e}(t)&&e.call(this,t,"number"==typeof n?n:void 0,r||void 0))}}function n8(){return!0}let n7=[];function re(e,t,n,r){let i;"function"==typeof t&&"function"!=typeof n?(r=n,n=t):i=t;let a=n5(i),o=r?-1:1;(function e(i,s,l){let u=i&&"object"==typeof i?i:{};if("string"==typeof u.type){let e="string"==typeof u.tagName?u.tagName:"string"==typeof u.name?u.name:void 0;Object.defineProperty(d,"name",{value:"node ("+i.type+(e?"<"+e+">":"")+")"})}return d;function d(){var u;let d,c,p,m=n7;if((!t||a(i,s,l[l.length-1]||void 0))&&!1===(m=Array.isArray(u=n(i,l))?u:"number"==typeof u?[!0,u]:null==u?n7:[u])[0])return m;if("children"in i&&i.children&&i.children&&"skip"!==m[0])for(c=(r?i.children.length:-1)+o,p=l.concat(i);c>-1&&c<i.children.length;){if(!1===(d=e(i.children[c],c,p)())[0])return d;c="number"==typeof d[1]?d[1]:c+o}return m}})(e,void 0,[])()}function rt(e,t,n,r){let i,a,o;"function"==typeof t&&"function"!=typeof n?(a=void 0,o=t,i=n):(a=t,o=n,i=r),re(e,a,function(e,t){let n=t[t.length-1],r=n?n.children.indexOf(e):void 0;return o(e,r,n)},i)}function rn(e,t){let n=t.referenceType,r="]";if("collapsed"===n?r+="[]":"full"===n&&(r+="["+(t.label||t.identifier)+"]"),"imageReference"===t.type)return[{type:"text",value:"!["+t.alt+r}];let i=e.all(t),a=i[0];a&&"text"===a.type?a.value="["+a.value:i.unshift({type:"text",value:"["});let o=i[i.length-1];return o&&"text"===o.type?o.value+=r:i.push({type:"text",value:r}),i}function rr(e){let t=e.spread;return null==t?e.children.length>1:t}function ri(e,t,n){let r=0,i=e.length;if(t){let t=e.codePointAt(r);for(;9===t||32===t;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(i-1);for(;9===t||32===t;)i--,t=e.codePointAt(i-1)}return i>r?e.slice(r,i):""}e.s(["visit",()=>rt],446207);let ra={blockquote:function(e,t){let n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)},break:function(e,t){let n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:"\n"}]},code:function(e,t){let n=t.value?t.value+"\n":"",r={};t.lang&&(r.className=["language-"+t.lang]);let i={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i={type:"element",tagName:"pre",properties:{},children:[i=e.applyData(t,i)]},e.patch(t,i),i},delete:function(e,t){let n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},emphasis:function(e,t){let n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},footnoteReference:function(e,t){let n,r="string"==typeof e.options.clobberPrefix?e.options.clobberPrefix:"user-content-",i=String(t.identifier).toUpperCase(),a=n6(i.toLowerCase()),o=e.footnoteOrder.indexOf(i),s=e.footnoteCounts.get(i);void 0===s?(s=0,e.footnoteOrder.push(i),n=e.footnoteOrder.length):n=o+1,s+=1,e.footnoteCounts.set(i,s);let l={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(n)}]};e.patch(t,l);let u={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,u),e.applyData(t,u)},heading:function(e,t){let n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},html:function(e,t){if(e.options.allowDangerousHtml){let n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}},imageReference:function(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return rn(e,t);let i={src:n6(r.url||""),alt:t.alt};null!==r.title&&void 0!==r.title&&(i.title=r.title);let a={type:"element",tagName:"img",properties:i,children:[]};return e.patch(t,a),e.applyData(t,a)},image:function(e,t){let n={src:n6(t.url)};null!==t.alt&&void 0!==t.alt&&(n.alt=t.alt),null!==t.title&&void 0!==t.title&&(n.title=t.title);let r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)},inlineCode:function(e,t){let n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);let r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)},linkReference:function(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return rn(e,t);let i={href:n6(r.url||"")};null!==r.title&&void 0!==r.title&&(i.title=r.title);let a={type:"element",tagName:"a",properties:i,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)},link:function(e,t){let n={href:n6(t.url)};null!==t.title&&void 0!==t.title&&(n.title=t.title);let r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)},listItem:function(e,t,n){let r=e.all(t),i=n?function(e){let t=!1;if("list"===e.type){t=e.spread||!1;let n=e.children,r=-1;for(;!t&&++r<n.length;)t=rr(n[r])}return t}(n):rr(t),a={},o=[];if("boolean"==typeof t.checked){let e,n=r[0];n&&"element"===n.type&&"p"===n.tagName?e=n:(e={type:"element",tagName:"p",properties:{},children:[]},r.unshift(e)),e.children.length>0&&e.children.unshift({type:"text",value:" "}),e.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),a.className=["task-list-item"]}let s=-1;for(;++s<r.length;){let e=r[s];(i||0!==s||"element"!==e.type||"p"!==e.tagName)&&o.push({type:"text",value:"\n"}),"element"!==e.type||"p"!==e.tagName||i?o.push(e):o.push(...e.children)}let l=r[r.length-1];l&&(i||"element"!==l.type||"p"!==l.tagName)&&o.push({type:"text",value:"\n"});let u={type:"element",tagName:"li",properties:a,children:o};return e.patch(t,u),e.applyData(t,u)},list:function(e,t){let n={},r=e.all(t),i=-1;for("number"==typeof t.start&&1!==t.start&&(n.start=t.start);++i<r.length;){let e=r[i];if("element"===e.type&&"li"===e.tagName&&e.properties&&Array.isArray(e.properties.className)&&e.properties.className.includes("task-list-item")){n.className=["contains-task-list"];break}}let a={type:"element",tagName:t.ordered?"ol":"ul",properties:n,children:e.wrap(r,!0)};return e.patch(t,a),e.applyData(t,a)},paragraph:function(e,t){let n={type:"element",tagName:"p",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},root:function(e,t){let n={type:"root",children:e.wrap(e.all(t))};return e.patch(t,n),e.applyData(t,n)},strong:function(e,t){let n={type:"element",tagName:"strong",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},table:function(e,t){let n=e.all(t),r=n.shift(),i=[];if(r){let n={type:"element",tagName:"thead",properties:{},children:e.wrap([r],!0)};e.patch(t.children[0],n),i.push(n)}if(n.length>0){let r={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},a=tu(t.children[1]),o=tl(t.children[t.children.length-1]);a&&o&&(r.position={start:a,end:o}),i.push(r)}let a={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(t,a),e.applyData(t,a)},tableCell:function(e,t){let n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},tableRow:function(e,t,n){let r=n?n.children:void 0,i=0===(r?r.indexOf(t):1)?"th":"td",a=n&&"table"===n.type?n.align:void 0,o=a?a.length:t.children.length,s=-1,l=[];for(;++s<o;){let n=t.children[s],r={},o=a?a[s]:void 0;o&&(r.align=o);let u={type:"element",tagName:i,properties:r,children:[]};n&&(u.children=e.all(n),e.patch(n,u),u=e.applyData(n,u)),l.push(u)}let u={type:"element",tagName:"tr",properties:{},children:e.wrap(l,!0)};return e.patch(t,u),e.applyData(t,u)},text:function(e,t){let n={type:"text",value:function(e){let t=String(e),n=/\r?\n|\r/g,r=n.exec(t),i=0,a=[];for(;r;)a.push(ri(t.slice(i,r.index),i>0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return a.push(ri(t.slice(i),i>0,!1)),a.join("")}(String(t.value))};return e.patch(t,n),e.applyData(t,n)},thematicBreak:function(e,t){let n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)},toml:ro,yaml:ro,definition:ro,footnoteDefinition:ro};function ro(){}let rs={}.hasOwnProperty,rl={};function ru(e,t){e.position&&(t.position=function(e){let t=tu(e),n=tl(e);if(t&&n)return{start:t,end:n}}(e))}function rd(e,t){let n=t;if(e&&e.data){let t=e.data.hName,r=e.data.hChildren,i=e.data.hProperties;"string"==typeof t&&("element"===n.type?n.tagName=t:n={type:"element",tagName:t,properties:{},children:"children"in n?n.children:[n]}),"element"===n.type&&i&&Object.assign(n.properties,n4(i)),"children"in n&&n.children&&null!=r&&(n.children=r)}return n}function rc(e,t){let n=[],r=-1;for(t&&n.push({type:"text",value:"\n"});++r<e.length;)r&&n.push({type:"text",value:"\n"}),n.push(e[r]);return t&&e.length>0&&n.push({type:"text",value:"\n"}),n}function rp(e){let t=0,n=e.charCodeAt(t);for(;9===n||32===n;)t++,n=e.charCodeAt(t);return e.slice(t)}function rm(e,t){let n,r,i,a,o=(n=t||rl,r=new Map,i=new Map,a={all:function(e){let t=[];if("children"in e){let n=e.children,r=-1;for(;++r<n.length;){let i=a.one(n[r],e);if(i){if(r&&"break"===n[r-1].type&&(Array.isArray(i)||"text"!==i.type||(i.value=rp(i.value)),!Array.isArray(i)&&"element"===i.type)){let e=i.children[0];e&&"text"===e.type&&(e.value=rp(e.value))}Array.isArray(i)?t.push(...i):t.push(i)}}}return t},applyData:rd,definitionById:r,footnoteById:i,footnoteCounts:new Map,footnoteOrder:[],handlers:{...ra,...n.handlers},one:function(e,t){let n=e.type,r=a.handlers[n];if(rs.call(a.handlers,n)&&r)return r(a,e,t);if(a.options.passThrough&&a.options.passThrough.includes(n)){if("children"in e){let{children:t,...n}=e,r=n4(n);return r.children=a.all(e),r}return n4(e)}return(a.options.unknownHandler||function(e,t){let n=t.data||{},r="value"in t&&!(rs.call(n,"hProperties")||rs.call(n,"hChildren"))?{type:"text",value:t.value}:{type:"element",tagName:"div",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)})(a,e,t)},options:n,patch:ru,wrap:rc},rt(e,function(e){if("definition"===e.type||"footnoteDefinition"===e.type){let t="definition"===e.type?r:i,n=String(e.identifier).toUpperCase();t.has(n)||t.set(n,e)}}),a),s=o.one(e,void 0),l=function(e){let t="string"==typeof e.options.clobberPrefix?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||n2,r=e.options.footnoteBackLabel||n9,i=e.options.footnoteLabel||"Footnotes",a=e.options.footnoteLabelTagName||"h2",o=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[],l=-1;for(;++l<e.footnoteOrder.length;){let i=e.footnoteById.get(e.footnoteOrder[l]);if(!i)continue;let a=e.all(i),o=String(i.identifier).toUpperCase(),u=n6(o.toLowerCase()),d=0,c=[],p=e.footnoteCounts.get(o);for(;void 0!==p&&++d<=p;){c.length>0&&c.push({type:"text",value:" "});let e="string"==typeof n?n:n(l,d);"string"==typeof e&&(e={type:"text",value:e}),c.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+u+(d>1?"-"+d:""),dataFootnoteBackref:"",ariaLabel:"string"==typeof r?r:r(l,d),className:["data-footnote-backref"]},children:Array.isArray(e)?e:[e]})}let m=a[a.length-1];if(m&&"element"===m.type&&"p"===m.tagName){let e=m.children[m.children.length-1];e&&"text"===e.type?e.value+=" ":m.children.push({type:"text",value:" "}),m.children.push(...c)}else a.push(...c);let h={type:"element",tagName:"li",properties:{id:t+"fn-"+u},children:e.wrap(a,!0)};e.patch(i,h),s.push(h)}if(0!==s.length)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:a,properties:{...n4(o),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:"\n"}]}}(o),u=Array.isArray(s)?{type:"root",children:s}:s||{type:"root",children:[]};return l&&(eE("children"in u),u.children.push({type:"text",value:"\n"},l)),u}function rh(e,t){return e&&"run"in e?async function(n,r){let i=rm(n,{file:r,...t});await e.run(i,r)}:function(n,r){return rm(n,{file:r,...e||t})}}function rf(e){if(e)throw e}e.s(["default",()=>rh],652652);var rg=e.i(975609);function ry(e){if("object"!=typeof e||null===e)return!1;let t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}let rv=function(e,t){let n;if(void 0!==t&&"string"!=typeof t)throw TypeError('"ext" argument must be a string');rk(e);let r=0,i=-1,a=e.length;if(void 0===t||0===t.length||t.length>e.length){for(;a--;)if(47===e.codePointAt(a)){if(n){r=a+1;break}}else i<0&&(n=!0,i=a+1);return i<0?"":e.slice(r,i)}if(t===e)return"";let o=-1,s=t.length-1;for(;a--;)if(47===e.codePointAt(a)){if(n){r=a+1;break}}else o<0&&(n=!0,o=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(i=a):(s=-1,i=o));return r===i?i=o:i<0&&(i=e.length),e.slice(r,i)},rb=function(e){let t;if(rk(e),0===e.length)return".";let n=-1,r=e.length;for(;--r;)if(47===e.codePointAt(r)){if(t){n=r;break}}else t||(t=!0);return n<0?47===e.codePointAt(0)?"/":".":1===n&&47===e.codePointAt(0)?"//":e.slice(0,n)},rx=function(e){let t;rk(e);let n=e.length,r=-1,i=0,a=-1,o=0;for(;n--;){let s=e.codePointAt(n);if(47===s){if(t){i=n+1;break}continue}r<0&&(t=!0,r=n+1),46===s?a<0?a=n:1!==o&&(o=1):a>-1&&(o=-1)}return a<0||r<0||0===o||1===o&&a===r-1&&a===i+1?"":e.slice(a,r)},r_=function(...e){var t;let n,r,i,a=-1;for(;++a<e.length;)rk(e[a]),e[a]&&(i=void 0===i?e[a]:i+"/"+e[a]);return void 0===i?".":(rk(t=i),n=47===t.codePointAt(0),0!==(r=function(e,t){let n,r,i="",a=0,o=-1,s=0,l=-1;for(;++l<=e.length;){if(l<e.length)n=e.codePointAt(l);else if(47===n)break;else n=47;if(47===n){if(o===l-1||1===s);else if(o!==l-1&&2===s){if(i.length<2||2!==a||46!==i.codePointAt(i.length-1)||46!==i.codePointAt(i.length-2)){if(i.length>2){if((r=i.lastIndexOf("/"))!==i.length-1){r<0?(i="",a=0):a=(i=i.slice(0,r)).length-1-i.lastIndexOf("/"),o=l,s=0;continue}}else if(i.length>0){i="",a=0,o=l,s=0;continue}}t&&(i=i.length>0?i+"/..":"..",a=2)}else i.length>0?i+="/"+e.slice(o+1,l):i=e.slice(o+1,l),a=l-o-1;o=l,s=0}else 46===n&&s>-1?s++:s=-1}return i}(t,!n)).length||n||(r="."),r.length>0&&47===t.codePointAt(t.length-1)&&(r+="/"),n?"/"+r:r)};function rk(e){if("string"!=typeof e)throw TypeError("Path must be a string. Received "+JSON.stringify(e))}function rw(e){return!!(null!==e&&"object"==typeof e&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&void 0===e.auth)}let rS=["history","path","basename","stem","extname","dirname"];class rI{constructor(e){let t,n;t=e?rw(e)?{path:e}:"string"==typeof e||function(e){return!!(e&&"object"==typeof e&&"byteLength"in e&&"byteOffset"in e)}(e)?{value:e}:e:{},this.cwd="cwd"in t?"":"/",this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let r=-1;for(;++r<rS.length;){const e=rS[r];e in t&&void 0!==t[e]&&null!==t[e]&&(this[e]="history"===e?[...t[e]]:t[e])}for(n in t)rS.includes(n)||(this[n]=t[n])}get basename(){return"string"==typeof this.path?rv(this.path):void 0}set basename(e){rC(e,"basename"),rT(e,"basename"),this.path=r_(this.dirname||"",e)}get dirname(){return"string"==typeof this.path?rb(this.path):void 0}set dirname(e){rA(this.basename,"dirname"),this.path=r_(e||"",this.basename)}get extname(){return"string"==typeof this.path?rx(this.path):void 0}set extname(e){if(rT(e,"extname"),rA(this.dirname,"extname"),e){if(46!==e.codePointAt(0))throw Error("`extname` must start with `.`");if(e.includes(".",1))throw Error("`extname` cannot contain multiple dots")}this.path=r_(this.dirname,this.stem+(e||""))}get path(){return this.history[this.history.length-1]}set path(e){rw(e)&&(e=function(e){if("string"==typeof e)e=new URL(e);else if(!rw(e)){let t=TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if("file:"!==e.protocol){let e=TypeError("The URL must be of scheme file");throw e.code="ERR_INVALID_URL_SCHEME",e}return function(e){if(""!==e.hostname){let e=TypeError('File URL host must be "localhost" or empty on darwin');throw e.code="ERR_INVALID_FILE_URL_HOST",e}let t=e.pathname,n=-1;for(;++n<t.length;)if(37===t.codePointAt(n)&&50===t.codePointAt(n+1)){let e=t.codePointAt(n+2);if(70===e||102===e){let e=TypeError("File URL path must not include encoded / characters");throw e.code="ERR_INVALID_FILE_URL_PATH",e}}return decodeURIComponent(t)}(e)}(e)),rC(e,"path"),this.path!==e&&this.history.push(e)}get stem(){return"string"==typeof this.path?rv(this.path,this.extname):void 0}set stem(e){rC(e,"stem"),rT(e,"stem"),this.path=r_(this.dirname||"",e+(this.extname||""))}fail(e,t,n){let r=this.message(e,t,n);throw r.fatal=!0,r}info(e,t,n){let r=this.message(e,t,n);return r.fatal=void 0,r}message(e,t,n){let r=new tf(e,t,n);return this.path&&(r.name=this.path+":"+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(e){return void 0===this.value?"":"string"==typeof this.value?this.value:new TextDecoder(e||void 0).decode(this.value)}}function rT(e,t){if(e&&e.includes("/"))throw Error("`"+t+"` cannot be a path: did not expect `/`")}function rC(e,t){if(!e)throw Error("`"+t+"` cannot be empty")}function rA(e,t){if(!e)throw Error("Setting `"+t+"` requires `path` to be set too")}e.s(["VFile",()=>rI],159902);let rP=function(e){let t=this.constructor.prototype,n=t[e],r=function(){return n.apply(r,arguments)};return Object.setPrototypeOf(r,t),r},rE={}.hasOwnProperty;class r$ extends rP{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=function(){let e=[],t={run:function(...t){let n=-1,r=t.pop();if("function"!=typeof r)throw TypeError("Expected function as last argument, not "+r);!function i(a,...o){let s=e[++n],l=-1;if(a)return void r(a);for(;++l<t.length;)(null===o[l]||void 0===o[l])&&(o[l]=t[l]);t=o,s?(function(e,t){let n;return function(...t){let a,o=e.length>t.length;o&&t.push(r);try{a=e.apply(this,t)}catch(e){if(o&&n)throw e;return r(e)}o||(a&&a.then&&"function"==typeof a.then?a.then(i,r):a instanceof Error?r(a):i(a))};function r(e,...i){n||(n=!0,t(e,...i))}function i(e){r(null,e)}})(s,i)(...o):r(null,...o)}(null,...t)},use:function(n){if("function"!=typeof n)throw TypeError("Expected `middelware` to be a function, not "+n);return e.push(n),t}};return t}()}copy(){let e=new r$,t=-1;for(;++t<this.attachers.length;){let n=this.attachers[t];e.use(...n)}return e.data((0,rg.default)(!0,{},this.namespace)),e}data(e,t){return"string"==typeof e?2==arguments.length?(rj("data",this.frozen),this.namespace[e]=t,this):rE.call(this.namespace,e)&&this.namespace[e]||void 0:e?(rj("data",this.frozen),this.namespace=e,this):this.namespace}freeze(){if(this.frozen)return this;for(;++this.freezeIndex<this.attachers.length;){let[e,...t]=this.attachers[this.freezeIndex];if(!1===t[0])continue;!0===t[0]&&(t[0]=void 0);let n=e.call(this,...t);"function"==typeof n&&this.transformers.use(n)}return this.frozen=!0,this.freezeIndex=1/0,this}parse(e){this.freeze();let t=rM(e),n=this.parser||this.Parser;return rR("parse",n),n(String(t),t)}process(e,t){let n=this;return this.freeze(),rR("process",this.parser||this.Parser),rD("process",this.compiler||this.Compiler),t?r(void 0,t):new Promise(r);function r(r,i){let a=rM(e),o=n.parse(a);function s(e,n){e||!n?i(e):r?r(n):(eE(t,"`done` is defined if `resolve` is not"),t(void 0,n))}n.run(o,a,function(e,t,r){var i,a;if(e||!t||!r)return s(e);let o=n.stringify(t,r);"string"==typeof(i=o)||(a=i)&&"object"==typeof a&&"byteLength"in a&&"byteOffset"in a?r.value=o:r.result=o,s(e,r)})}}processSync(e){let t,n=!1;return this.freeze(),rR("processSync",this.parser||this.Parser),rD("processSync",this.compiler||this.Compiler),this.process(e,function(e,r){n=!0,rf(e),t=r}),rN("processSync","process",n),eE(t,"we either bailed on an error or have a tree"),t}run(e,t,n){rU(e),this.freeze();let r=this.transformers;return n||"function"!=typeof t||(n=t,t=void 0),n?i(void 0,n):new Promise(i);function i(i,a){eE("function"!=typeof t,"`file` can’t be a `done` anymore, we checked");let o=rM(t);r.run(e,o,function(t,r,o){let s=r||e;t?a(t):i?i(s):(eE(n,"`done` is defined if `resolve` is not"),n(void 0,s,o))})}}runSync(e,t){let n,r=!1;return this.run(e,t,function(e,t){rf(e),n=t,r=!0}),rN("runSync","run",r),eE(n,"we either bailed on an error or have a tree"),n}stringify(e,t){this.freeze();let n=rM(t),r=this.compiler||this.Compiler;return rD("stringify",r),rU(e),r(e,n)}use(e,...t){let n=this.attachers,r=this.namespace;if(rj("use",this.frozen),null==e);else if("function"==typeof e)o(e,t);else if("object"==typeof e)Array.isArray(e)?a(e):i(e);else throw TypeError("Expected usable value, not `"+e+"`");return this;function i(e){if(!("plugins"in e)&&!("settings"in e))throw Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");a(e.plugins),e.settings&&(r.settings=(0,rg.default)(!0,r.settings,e.settings))}function a(e){let t=-1;if(null==e);else if(Array.isArray(e))for(;++t<e.length;)!function(e){if("function"==typeof e)o(e,[]);else if("object"==typeof e)if(Array.isArray(e)){let[t,...n]=e;o(t,n)}else i(e);else throw TypeError("Expected usable value, not `"+e+"`")}(e[t]);else throw TypeError("Expected a list of plugins, not `"+e+"`")}function o(e,t){let r=-1,i=-1;for(;++r<n.length;)if(n[r][0]===e){i=r;break}if(-1===i)n.push([e,...t]);else if(t.length>0){let[r,...a]=t,o=n[i][1];ry(o)&&ry(r)&&(r=(0,rg.default)(!0,o,r)),n[i]=[e,r,...a]}}}}let rO=new r$().freeze();function rR(e,t){if("function"!=typeof t)throw TypeError("Cannot `"+e+"` without `parser`")}function rD(e,t){if("function"!=typeof t)throw TypeError("Cannot `"+e+"` without `compiler`")}function rj(e,t){if(t)throw Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function rU(e){if(!ry(e)||"string"!=typeof e.type)throw TypeError("Expected node, got `"+e+"`")}function rN(e,t,n){if(!n)throw Error("`"+e+"` finished async. Use `"+t+"` instead")}function rM(e){var t;return(t=e)&&"object"==typeof t&&"message"in t&&"messages"in t?e:new rI(e)}e.s(["unified",0,rO],879302);let rz=[],rL={allowDangerousHtml:!0},rF=/^(https?|ircs?|mailto|xmpp)$/i,rZ=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function rB(e){var n;let r,i,a,o,s,l=(r=(n=e).rehypePlugins||rz,i=n.remarkPlugins||rz,a=n.remarkRehypeOptions?{...n.remarkRehypeOptions,...rL}:rL,rO().use(nq).use(i).use(rh,a).use(r)),u=(o=e.children||"",s=new rI,"string"==typeof o?s.value=o:e$("Unexpected value `"+o+"` for `children` prop, expected `string`"),s);return function(e,n){let r=n.allowedElements,i=n.allowElement,a=n.components,o=n.disallowedElements,s=n.skipHtml,l=n.unwrapDisallowed,u=n.urlTransform||rH;for(let e of rZ)Object.hasOwn(n,e.from)&&e$("Unexpected `"+e.from+"` prop, "+(e.to?"use `"+e.to+"` instead":"remove it")+" (see <https://github.com/remarkjs/react-markdown/blob/main/changelog.md#"+e.id+"> for more info)");return r&&o&&e$("Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other"),rt(e,function(e,t,n){if("raw"===e.type&&n&&"number"==typeof t)return s?n.children.splice(t,1):n.children[t]={type:"text",value:e.value},t;if("element"===e.type){let t;for(t in tE)if(Object.hasOwn(tE,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=tE[t];(null===r||r.includes(e.tagName))&&(e.properties[t]=u(String(n||""),t,e))}}if("element"===e.type){let a=r?!r.includes(e.tagName):!!o&&o.includes(e.tagName);if(!a&&i&&"number"==typeof t&&(a=!i(e,t,n)),a&&n&&"number"==typeof t)return l&&e.children?n.children.splice(t,1,...e.children):n.children.splice(t,1),t}}),tk(e,{Fragment:t.Fragment,components:a,ignoreInvalidStyle:!0,jsx:t.jsx,jsxs:t.jsxs,passKeys:!0,passNode:!0})}(l.runSync(l.parse(u),u),e)}function rH(e){let t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),i=e.indexOf("/");return -1===t||-1!==i&&t>i||-1!==n&&t>n||-1!==r&&t>r||rF.test(e.slice(0,t))?e:""}var rK=(e,t)=>{var n,r,i,a;return n=e.node,r=t.node,!!n&&!!r&&JSON.stringify(n?.properties)===JSON.stringify(r?.properties)&&(i=n?.children,a=r?.children,"string"==typeof i?i===a:JSON.stringify(i)===JSON.stringify(a))},rV=(0,X.createContext)(null),rG=()=>null!==(0,X.useContext)(rV),rq=(0,X.memo)(({children:e,...n})=>(0,t.jsx)(rV.Provider,{value:n,children:e}),rK),rJ=({node:e,...n})=>(0,t.jsx)("pre",{...n}),rW=({node:e,...n})=>(0,t.jsx)("code",{...n}),rY=({node:e,components:{Pre:n,Code:r},code:i})=>(0,t.jsx)(n,{children:(0,t.jsx)(r,{node:e,children:i})}),rX=()=>null,rQ=({node:e,components:{Pre:n,Code:r,SyntaxHighlighter:i,CodeHeader:a},language:o,code:s})=>{let l=(0,X.useMemo)(()=>({Pre:n,Code:r}),[n,r]),u=o?i:rY;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a,{node:e,language:o,code:s}),(0,t.jsx)(u,{node:e,components:l,language:o??"unknown",code:s})]})},r0=e.i(264458),r1=({className:e,...t})=>({className:n,...r})=>({className:(0,r0.default)(e,n),...t,...r}),r4=({node:e,components:{Pre:n,Code:r,SyntaxHighlighter:i,CodeHeader:a},componentsByLanguage:o={},children:s,...l})=>{let u=r1((0,X.useContext)(rV)),d=(0,ed.useCallbackRef)(e=>(0,t.jsx)(n,{...u(e)})),c=r1(l),p=(0,ed.useCallbackRef)(e=>(0,t.jsx)(r,{...c(e)})),m=/language-(\w+)/.exec(l.className||"")?.[1]??"";if("string"!=typeof s)return(0,t.jsx)(rY,{node:e,components:{Pre:d,Code:p},code:s});let h=o[m]?.SyntaxHighlighter??i,f=o[m]?.CodeHeader??a;return(0,t.jsx)(rQ,{node:e,components:{Pre:d,Code:p,SyntaxHighlighter:h,CodeHeader:f},language:m||"unknown",code:s})},r6=(0,X.memo)(({node:e,components:n,componentsByLanguage:r,...i})=>rG()?(0,t.jsx)(r4,{node:e,components:n,componentsByLanguage:r,...i}):(0,t.jsx)(n.Code,{...i}),(e,t)=>e.components===t.components&&e.componentsByLanguage===t.componentsByLanguage&&rK(e,t)),{useSmooth:r2,useSmoothStatus:r9,withSmoothContextProvider:r5}=eA,r3=({components:e,componentsByLanguage:n,smooth:r=!0,...i})=>{let{text:a}=r2(eP(),r),{pre:o=rJ,code:s=rW,SyntaxHighlighter:l=rY,CodeHeader:u=rX}=e??{},d=(0,X.useMemo)(()=>({Pre:o,Code:s,SyntaxHighlighter:l,CodeHeader:u}),[o,s,l,u]),c=(0,ed.useCallbackRef)(e=>(0,t.jsx)(r6,{components:d,componentsByLanguage:n,...e})),p=(0,X.useMemo)(()=>{let{pre:t,code:n,SyntaxHighlighter:r,CodeHeader:i,...a}=e??{};return{...a,pre:rq,code:c}},[c,e]);return(0,t.jsx)(rB,{components:p,...i,children:a})},r8=(0,X.forwardRef)(({className:e,containerProps:n,containerComponent:r="div",...i},a)=>{let o=r9();return(0,t.jsx)(r,{"data-status":o.type,...n,className:(0,r0.default)(e,n?.className),ref:a,children:(0,t.jsx)(r3,{...i})})});r8.displayName="MarkdownTextPrimitive";var r7=r5(r8);function ie(e,t){let n=String(e);if("string"!=typeof t)throw TypeError("Expected character");let r=0,i=n.indexOf(t);for(;-1!==i;)r++,i=n.indexOf(t,i+t.length);return r}let it="phrasing",ir=["autolink","link","image","label"];function ii(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function ia(e){this.config.enter.autolinkProtocol.call(this,e)}function io(e){this.config.exit.autolinkProtocol.call(this,e)}function is(e){this.config.exit.data.call(this,e);let t=this.stack[this.stack.length-1];eE("link"===t.type),t.url="http://"+this.sliceSerialize(e)}function il(e){this.config.exit.autolinkEmail.call(this,e)}function iu(e){this.exit(e)}function id(e){!function(e,t,n){let r=n5((n||{}).ignore||[]),i=function(e){let t=[];if(!Array.isArray(e))throw TypeError("Expected find and replace tuple or list of tuples");let n=!e[0]||Array.isArray(e[0])?e:[e],r=-1;for(;++r<n.length;){var i;let e=n[r];t.push(["string"==typeof(i=e[0])?RegExp(function(e){if("string"!=typeof e)throw TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}(i),"g"):i,function(e){return"function"==typeof e?e:function(){return e}}(e[1])])}return t}(t),a=-1;for(;++a<i.length;)re(e,"text",o);function o(e,t){let n,o=-1;for(;++o<t.length;){let e=t[o],i=n?n.children:void 0;if(r(e,i?i.indexOf(e):void 0,n))return;n=e}if(n)return function(e,t){let n=t[t.length-1],r=i[a][0],o=i[a][1],s=0,l=n.children.indexOf(e),u=!1,d=[];r.lastIndex=0;let c=r.exec(e.value);for(;c;){let n=c.index,i={index:c.index,input:c.input,stack:[...t,e]},a=o(...c,i);if("string"==typeof a&&(a=a.length>0?{type:"text",value:a}:void 0),!1===a?r.lastIndex=n+1:(s!==n&&d.push({type:"text",value:e.value.slice(s,n)}),Array.isArray(a)?d.push(...a):a&&d.push(a),s=n+c[0].length,u=!0),!r.global)break;c=r.exec(e.value)}return u?(s<e.value.length&&d.push({type:"text",value:e.value.slice(s)}),n.children.splice(l,1,...d)):d=[e],l+d.length}(e,t)}}(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,ic],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,ip]],{ignore:["link","linkReference"]})}function ic(e,t,n,r,i){let a,o="";if(!im(i))return!1;if(/^w/i.test(t)&&(n=t+n,t="",o="http://"),(a=n.split(".")).length<2||a[a.length-1]&&(/_/.test(a[a.length-1])||!/[a-zA-Z\d]/.test(a[a.length-1]))||a[a.length-2]&&(/_/.test(a[a.length-2])||!/[a-zA-Z\d]/.test(a[a.length-2])))return!1;let s=function(e){let t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")"),i=ie(e,"("),a=ie(e,")");for(;-1!==r&&i>a;)e+=n.slice(0,r+1),r=(n=n.slice(r+1)).indexOf(")"),a++;return[e,n]}(n+r);if(!s[0])return!1;let l={type:"link",title:null,url:o+t+s[0],children:[{type:"text",value:t+s[0]}]};return s[1]?[l,{type:"text",value:s[1]}]:l}function ip(e,t,n,r){return!(!im(r,!0)||/[-\d_]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function im(e,t){let n=e.input.charCodeAt(e.index-1);return(0===e.index||tW(n)||tJ(n))&&(!t||47!==n)}function ih(){this.buffer()}function ig(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function iy(){this.buffer()}function iv(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function ib(e){let t=this.resume(),n=this.stack[this.stack.length-1];eE("footnoteReference"===n.type),n.identifier=nk(this.sliceSerialize(e)).toLowerCase(),n.label=t}function ix(e){this.exit(e)}function i_(e){let t=this.resume(),n=this.stack[this.stack.length-1];eE("footnoteDefinition"===n.type),n.identifier=nk(this.sliceSerialize(e)).toLowerCase(),n.label=t}function ik(e){this.exit(e)}function iw(e,t,n,r){let i=n.createTracker(r),a=i.move("[^"),o=n.enter("footnoteReference"),s=n.enter("reference");return a+=i.move(n.safe(n.associationId(e),{after:"]",before:a})),s(),o(),a+=i.move("]")}function iS(e,t,n){return 0===t?e:iI(e,t,n)}function iI(e,t,n){return(n?"":" ")+e}iw.peek=function(){return"["};let iT=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];function iC(e){this.enter({type:"delete",children:[]},e)}function iA(e){this.exit(e)}function iP(e,t,n,r){let i=n.createTracker(r),a=n.enter("strikethrough"),o=i.move("~~");return o+=n.containerPhrasing(e,{...i.current(),before:o,after:"~"}),o+=i.move("~~"),a(),o}function iE(e){return e.length}function i$(e){let t="string"==typeof e?e.codePointAt(0):0;return 67===t||99===t?99:76===t||108===t?108:114*(82===t||114===t)}iP.peek=function(){return"~"};function iO(e,t,n){let r=e.value||"",i="`",a=-1;for(;RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++a<n.unsafe.length;){let e,t=n.unsafe[a],i=n.compilePattern(t);if(t.atBreak)for(;e=i.exec(r);){let t=e.index;10===r.charCodeAt(t)&&13===r.charCodeAt(t-1)&&t--,r=r.slice(0,t)+" "+r.slice(e.index+1)}}return i+r+i}iO.peek=function(){return"`"};n5(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);let iR=function(e,t,n,r){let i=function(e){let t=e.options.listItemIndent||"one";if("tab"!==t&&"one"!==t&&"mixed"!==t)throw Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}(n),a=n.bulletCurrent||function(e){let t=e.options.bullet||"*";if("*"!==t&&"+"!==t&&"-"!==t)throw Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}(n);t&&"list"===t.type&&t.ordered&&(a=("number"==typeof t.start&&t.start>-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+a);let o=a.length+1;("tab"===i||"mixed"===i&&(t&&"list"===t.type&&t.spread||e.spread))&&(o=4*Math.ceil(o/4));let s=n.createTracker(r);s.move(a+" ".repeat(o-a.length)),s.shift(o);let l=n.enter("listItem"),u=n.indentLines(n.containerFlow(e,s.current()),function(e,t,n){return t?(n?"":" ".repeat(o))+e:(n?a:a+" ".repeat(o-a.length))+e});return l(),u};function iD(e){let t=e._align;eE(t,"expected `_align` on table"),this.enter({type:"table",align:t.map(function(e){return"none"===e?null:e}),children:[]},e),this.data.inTable=!0}function ij(e){this.exit(e),this.data.inTable=void 0}function iU(e){this.enter({type:"tableRow",children:[]},e)}function iN(e){this.exit(e)}function iM(e){this.enter({type:"tableCell",children:[]},e)}function iz(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,iL));let n=this.stack[this.stack.length-1];eE("inlineCode"===n.type),n.value=t,this.exit(e)}function iL(e,t){return"|"===t?t:e}function iF(e){let t=this.stack[this.stack.length-2];eE("listItem"===t.type),t.checked="taskListCheckValueChecked"===e.type}function iZ(e){let t=this.stack[this.stack.length-2];if(t&&"listItem"===t.type&&"boolean"==typeof t.checked){let e=this.stack[this.stack.length-1];eE("paragraph"===e.type);let n=e.children[0];if(n&&"text"===n.type){let r,i=t.children,a=-1;for(;++a<i.length;){let e=i[a];if("paragraph"===e.type){r=e;break}}r===e&&(n.value=n.value.slice(1),0===n.value.length?e.children.shift():e.position&&n.position&&"number"==typeof n.position.start.offset&&(n.position.start.column++,n.position.start.offset++,e.position.start=Object.assign({},n.position.start)))}}this.exit(e)}function iB(e,t,n,r){let i=e.children[0],a="boolean"==typeof e.checked&&i&&"paragraph"===i.type,o="["+(e.checked?"x":" ")+"] ",s=n.createTracker(r);a&&s.move(o);let l=iR(e,t,n,{...r,...s.current()});return a&&(l=l.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,function(e){return e+o})),l}let iH={tokenize:function(e,t,n){let r=0;return function t(a){return(87===a||119===a)&&r<3?(r++,e.consume(a),t):46===a&&3===r?(e.consume(a),i):n(a)};function i(e){return null===e?n(e):t(e)}},partial:!0},iK={tokenize:function(e,t,n){let r,i,a;return o;function o(t){return 46===t||95===t?e.check(iG,l,s)(t):null===t||tG(t)||tW(t)||45!==t&&tJ(t)?l(t):(a=!0,e.consume(t),o)}function s(t){return 95===t?r=!0:(i=r,r=void 0),e.consume(t),o}function l(e){return i||r||!a?n(e):t(e)}},partial:!0},iV={tokenize:function(e,t){let n=0,r=0;return i;function i(o){return 40===o?(n++,e.consume(o),i):41===o&&r<n?a(o):33===o||34===o||38===o||39===o||41===o||42===o||44===o||46===o||58===o||59===o||60===o||63===o||93===o||95===o||126===o?e.check(iG,t,a)(o):null===o||tG(o)||tW(o)?t(o):(e.consume(o),i)}function a(t){return 41===t&&r++,e.consume(t),i}},partial:!0},iG={tokenize:function(e,t,n){return r;function r(o){return 33===o||34===o||39===o||41===o||42===o||44===o||46===o||58===o||59===o||63===o||95===o||126===o?(e.consume(o),r):38===o?(e.consume(o),a):93===o?(e.consume(o),i):60===o||null===o||tG(o)||tW(o)?t(o):n(o)}function i(e){return null===e||40===e||91===e||tG(e)||tW(e)?t(e):r(e)}function a(t){return tz(t)?function t(i){return 59===i?(e.consume(i),r):tz(i)?(e.consume(i),t):n(i)}(t):n(t)}},partial:!0},iq={tokenize:function(e,t,n){return function(t){return e.consume(t),r};function r(e){return tL(e)?n(e):t(e)}},partial:!0},iJ={name:"wwwAutolink",tokenize:function(e,t,n){let r=this;return function(t){return 87!==t&&119!==t||!i0.call(r,r.previous)||i2(r.events)?n(t):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(iH,e.attempt(iK,e.attempt(iV,i),n),n)(t))};function i(n){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(n)}},previous:i0},iW={name:"protocolAutolink",tokenize:function(e,t,n){let r=this,i="",a=!1;return function(t){return(72===t||104===t)&&i1.call(r,r.previous)&&!i2(r.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),i+=String.fromCodePoint(t),e.consume(t),o):n(t)};function o(t){if(tz(t)&&i.length<5)return i+=String.fromCodePoint(t),e.consume(t),o;if(58===t){let n=i.toLowerCase();if("http"===n||"https"===n)return e.consume(t),s}return n(t)}function s(t){return 47===t?(e.consume(t),a)?l:(a=!0,s):n(t)}function l(t){return null===t||tZ(t)||tG(t)||tW(t)||tJ(t)?n(t):e.attempt(iK,e.attempt(iV,u),n)(t)}function u(n){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(n)}},previous:i1},iY={name:"emailAutolink",tokenize:function(e,t,n){let r,i,a=this;return function(t){return!i6(t)||!i4.call(a,a.previous)||i2(a.events)?n(t):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),function t(r){return i6(r)?(e.consume(r),t):64===r?(e.consume(r),o):n(r)}(t))};function o(t){return 46===t?e.check(iq,l,s)(t):45===t||95===t||tL(t)?(i=!0,e.consume(t),o):l(t)}function s(t){return e.consume(t),r=!0,o}function l(o){return i&&r&&tz(a.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(o)):n(o)}},previous:i4},iX={},iQ=48;for(;iQ<123;)iX[iQ]=iY,58==++iQ?iQ=65:91===iQ&&(iQ=97);function i0(e){return null===e||40===e||42===e||95===e||91===e||93===e||126===e||tG(e)}function i1(e){return!tz(e)}function i4(e){return!(47===e||i6(e))}function i6(e){return 43===e||45===e||46===e||95===e||tL(e)}function i2(e){let t=e.length,n=!1;for(;t--;){let r=e[t][1];if(("labelLink"===r.type||"labelImage"===r.type)&&!r._balanced){n=!0;break}if(r._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}iX[43]=iY,iX[45]=iY,iX[46]=iY,iX[95]=iY,iX[72]=[iY,iW],iX[104]=[iY,iW],iX[87]=[iY,iJ],iX[119]=[iY,iJ];let i9={tokenize:function(e,t,n){let r=this;return tX(e,function(e){let i=r.events[r.events.length-1];return i&&"gfmFootnoteDefinitionIndent"===i[1].type&&4===i[2].sliceSerialize(i[1],!0).length?t(e):n(e)},"gfmFootnoteDefinitionIndent",5)},partial:!0};function i5(e,t,n){let r,i=this,a=i.events.length,o=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);for(;a--;){let e=i.events[a][1];if("labelImage"===e.type){r=e;break}if("gfmFootnoteCall"===e.type||"labelLink"===e.type||"label"===e.type||"image"===e.type||"link"===e.type)break}return function(a){if(!r||!r._balanced)return n(a);let s=nk(i.sliceSerialize({start:r.end,end:i.now()}));return 94===s.codePointAt(0)&&o.includes(s.slice(1))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(a),e.exit("gfmFootnoteCallLabelMarker"),t(a)):n(a)}}function i3(e,t){let n=e.length;for(;n--;)if("labelImage"===e[n][1].type&&"enter"===e[n][0]){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";let r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:"chunkString",contentType:"string",start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",i,t],["exit",i,t],["enter",a,t],["enter",o,t],["exit",o,t],["exit",a,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...s),e}function i8(e,t,n){let r,i=this,a=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]),o=0;return function(t){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(t),e.exit("gfmFootnoteCallLabelMarker"),s};function s(t){return 94!==t?n(t):(e.enter("gfmFootnoteCallMarker"),e.consume(t),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",l)}function l(s){if(o>999||93===s&&!r||null===s||91===s||tG(s))return n(s);if(93===s){e.exit("chunkString");let r=e.exit("gfmFootnoteCallString");return a.includes(nk(i.sliceSerialize(r)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(s),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(s)}return tG(s)||(r=!0),o++,e.consume(s),92===s?u:l}function u(t){return 91===t||92===t||93===t?(e.consume(t),o++,l):l(t)}}function i7(e,t,n){let r,i,a=this,o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]),s=0;return function(t){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),l};function l(t){return 94===t?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",u):n(t)}function u(t){if(s>999||93===t&&!i||null===t||91===t||tG(t))return n(t);if(93===t){e.exit("chunkString");let n=e.exit("gfmFootnoteDefinitionLabelString");return r=nk(a.sliceSerialize(n)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),c}return tG(t)||(i=!0),s++,e.consume(t),92===t?d:u}function d(t){return 91===t||92===t||93===t?(e.consume(t),s++,u):u(t)}function c(t){return 58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),o.includes(r)||o.push(r),tX(e,p,"gfmFootnoteDefinitionWhitespace")):n(t)}function p(e){return t(e)}}function ae(e,t,n){return e.check(t4,t,e.attempt(i9,t,n))}function at(e){e.exit("gfmFootnoteDefinition")}class an{constructor(){this.map=[]}add(e,t,n){!function(e,t,n,r){let i=0;if(0!==n||0!==r.length){for(;i<e.map.length;){if(e.map[i][0]===t){e.map[i][1]+=n,e.map[i][2].push(...r);return}i+=1}e.map.push([t,n,r])}}(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),0===this.map.length)return;let t=this.map.length,n=[];for(;t>0;)t-=1,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}}function ar(e,t,n){let r,i=this,a=0,o=0;return function(e){let t=i.events.length-1;for(;t>-1;){let e=i.events[t][1].type;if("lineEnding"===e||"linePrefix"===e)t--;else break}let r=t>-1?i.events[t][1].type:null,a="tableHead"===r||"tableRow"===r?v:s;return a===v&&i.parser.lazy[i.now().line]?n(e):a(e)};function s(t){var n;return e.enter("tableHead"),e.enter("tableRow"),124===(n=t)||(r=!0,o+=1),l(n)}function l(t){return null===t?n(t):tV(t)?o>1?(o=0,i.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),c):n(t):tq(t)?tX(e,l,"whitespace")(t):(o+=1,r&&(r=!1,a+=1),124===t)?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),r=!0,l):(e.enter("data"),u(t))}function u(t){return null===t||124===t||tG(t)?(e.exit("data"),l(t)):(e.consume(t),92===t?d:u)}function d(t){return 92===t||124===t?(e.consume(t),u):u(t)}function c(t){return(i.interrupt=!1,i.parser.lazy[i.now().line])?n(t):(e.enter("tableDelimiterRow"),r=!1,tq(t))?tX(e,p,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):p(t)}function p(t){return 45===t||58===t?h(t):124===t?(r=!0,e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),m):n(t)}function m(t){return tq(t)?tX(e,h,"whitespace")(t):h(t)}function h(t){return 58===t?(o+=1,r=!0,e.enter("tableDelimiterMarker"),e.consume(t),e.exit("tableDelimiterMarker"),f):45===t?(o+=1,f(t)):null===t||tV(t)?y(t):n(t)}function f(t){return 45===t?(e.enter("tableDelimiterFiller"),function t(n){return 45===n?(e.consume(n),t):58===n?(r=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(n),e.exit("tableDelimiterMarker"),g):(e.exit("tableDelimiterFiller"),g(n))}(t)):n(t)}function g(t){return tq(t)?tX(e,y,"whitespace")(t):y(t)}function y(i){if(124===i)return p(i);if(null===i||tV(i))return r&&a===o?(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(i)):n(i);return n(i)}function v(t){return e.enter("tableRow"),b(t)}function b(n){return 124===n?(e.enter("tableCellDivider"),e.consume(n),e.exit("tableCellDivider"),b):null===n||tV(n)?(e.exit("tableRow"),t(n)):tq(n)?tX(e,b,"whitespace")(n):(e.enter("data"),x(n))}function x(t){return null===t||124===t||tG(t)?(e.exit("data"),b(t)):(e.consume(t),92===t?_:x)}function _(t){return 92===t||124===t?(e.consume(t),x):x(t)}}function ai(e,t){let n,r,i,a=-1,o=!0,s=0,l=[0,0,0,0],u=[0,0,0,0],d=!1,c=0,p=new an;for(;++a<e.length;){let m=e[a],h=m[1];"enter"===m[0]?"tableHead"===h.type?(d=!1,0!==c&&(ao(p,t,c,n,r),r=void 0,c=0),n={type:"table",start:Object.assign({},h.start),end:Object.assign({},h.end)},p.add(a,0,[["enter",n,t]])):"tableRow"===h.type||"tableDelimiterRow"===h.type?(o=!0,i=void 0,l=[0,0,0,0],u=[0,a+1,0,0],d&&(d=!1,r={type:"tableBody",start:Object.assign({},h.start),end:Object.assign({},h.end)},p.add(a,0,[["enter",r,t]])),s="tableDelimiterRow"===h.type?2:r?3:1):s&&("data"===h.type||"tableDelimiterMarker"===h.type||"tableDelimiterFiller"===h.type)?(o=!1,0===u[2]&&(0!==l[1]&&(u[0]=u[1],i=aa(p,t,l,s,void 0,i),l=[0,0,0,0]),u[2]=a)):"tableCellDivider"===h.type&&(o?o=!1:(0!==l[1]&&(u[0]=u[1],i=aa(p,t,l,s,void 0,i)),u=[(l=u)[1],a,0,0])):"tableHead"===h.type?(d=!0,c=a):"tableRow"===h.type||"tableDelimiterRow"===h.type?(c=a,0!==l[1]?(u[0]=u[1],i=aa(p,t,l,s,a,i)):0!==u[1]&&(i=aa(p,t,u,s,a,i)),s=0):s&&("data"===h.type||"tableDelimiterMarker"===h.type||"tableDelimiterFiller"===h.type)&&(u[3]=a)}for(0!==c&&ao(p,t,c,n,r),p.consume(t.events),a=-1;++a<t.events.length;){let e=t.events[a];"enter"===e[0]&&"table"===e[1].type&&(e[1]._align=function(e,t){let n=!1,r=[];for(;t<e.length;){let i=e[t];if(n){if("enter"===i[0])"tableContent"===i[1].type&&r.push("tableDelimiterMarker"===e[t+1][1].type?"left":"none");else if("tableContent"===i[1].type){if("tableDelimiterMarker"===e[t-1][1].type){let e=r.length-1;r[e]="left"===r[e]?"center":"right"}}else if("tableDelimiterRow"===i[1].type)break}else"enter"===i[0]&&"tableDelimiterRow"===i[1].type&&(n=!0);t+=1}return r}(t.events,a))}return e}function aa(e,t,n,r,i,a){0!==n[0]&&(a.end=Object.assign({},as(t.events,n[0])),e.add(n[0],0,[["exit",a,t]]));let o=as(t.events,n[1]);if(a={type:1===r?"tableHeader":2===r?"tableDelimiter":"tableData",start:Object.assign({},o),end:Object.assign({},o)},e.add(n[1],0,[["enter",a,t]]),0!==n[2]){let i=as(t.events,n[2]),a=as(t.events,n[3]),o={type:"tableContent",start:Object.assign({},i),end:Object.assign({},a)};if(e.add(n[2],0,[["enter",o,t]]),2!==r){let r=t.events[n[2]],i=t.events[n[3]];if(r[1].end=Object.assign({},i[1].end),r[1].type="chunkText",r[1].contentType="text",n[3]>n[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[["exit",o,t]])}return void 0!==i&&(a.end=Object.assign({},as(t.events,i)),e.add(i,0,[["exit",a,t]]),a=void 0),a}function ao(e,t,n,r,i){let a=[],o=as(t.events,n);i&&(i.end=Object.assign({},o),a.push(["exit",i,t])),r.end=Object.assign({},o),a.push(["exit",r,t]),e.add(n+1,0,a)}function as(e,t){let n=e[t],r="enter"===n[0]?"start":"end";return n[1][r]}let al={name:"tasklistCheck",tokenize:function(e,t,n){let r=this;return function(t){return null===r.previous&&r._gfmTasklistFirstContentOfListItem?(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),i):n(t)};function i(t){return tG(t)?(e.enter("taskListCheckValueUnchecked"),e.consume(t),e.exit("taskListCheckValueUnchecked"),a):88===t||120===t?(e.enter("taskListCheckValueChecked"),e.consume(t),e.exit("taskListCheckValueChecked"),a):n(t)}function a(t){return 93===t?(e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),o):n(t)}function o(r){return tV(r)?t(r):tq(r)?e.check({tokenize:au},t,n)(r):n(r)}}};function au(e,t,n){return tX(e,function(e){return null===e?n(e):t(e)},"whitespace")}let ad={};function ac(e){let t,n,r,i=e||ad,a=this.data(),o=a.micromarkExtensions||(a.micromarkExtensions=[]),s=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),l=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);o.push(tM([{text:iX},{document:{91:{name:"gfmFootnoteDefinition",tokenize:i7,continuation:{tokenize:ae},exit:at}},text:{91:{name:"gfmFootnoteCall",tokenize:i8},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:i5,resolveTo:i3}}},(t=(i||{}).singleTilde,n={name:"strikethrough",tokenize:function(e,n,r){let i=this.previous,a=this.events,o=0;return function(s){return 126===i&&"characterEscape"!==a[a.length-1][1].type?r(s):(e.enter("strikethroughSequenceTemporary"),function a(s){let l=na(i);if(126===s)return o>1?r(s):(e.consume(s),o++,a);if(o<2&&!t)return r(s);let u=e.exit("strikethroughSequenceTemporary"),d=na(s);return u._open=!d||2===d&&!!l,u._close=!l||2===l&&!!d,n(s)}(s))}},resolveAll:function(e,t){let n=-1;for(;++n<e.length;)if("enter"===e[n][0]&&"strikethroughSequenceTemporary"===e[n][1].type&&e[n][1]._close){let r=n;for(;r--;)if("exit"===e[r][0]&&"strikethroughSequenceTemporary"===e[r][1].type&&e[r][1]._open&&e[n][1].end.offset-e[n][1].start.offset==e[r][1].end.offset-e[r][1].start.offset){e[n][1].type="strikethroughSequence",e[r][1].type="strikethroughSequence";let i={type:"strikethrough",start:Object.assign({},e[r][1].start),end:Object.assign({},e[n][1].end)},a={type:"strikethroughText",start:Object.assign({},e[r][1].end),end:Object.assign({},e[n][1].start)},o=[["enter",i,t],["enter",e[r][1],t],["exit",e[r][1],t],["enter",a,t]],s=t.parser.constructs.insideSpan.null;s&&tj(o,o.length,0,no(s,e.slice(r+1,n),t)),tj(o,o.length,0,[["exit",a,t],["enter",e[n][1],t],["exit",e[n][1],t],["exit",i,t]]),tj(e,r-1,n-r+3,o),n=r+o.length-2;break}}for(n=-1;++n<e.length;)"strikethroughSequenceTemporary"===e[n][1].type&&(e[n][1].type="data");return e}},null==t&&(t=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}}),{flow:{null:{name:"table",tokenize:ar,resolveAll:ai}}},{text:{91:al}}])),s.push([{transforms:[id],enter:{literalAutolink:ii,literalAutolinkEmail:ia,literalAutolinkHttp:ia,literalAutolinkWww:ia},exit:{literalAutolink:iu,literalAutolinkEmail:il,literalAutolinkHttp:io,literalAutolinkWww:is}},{enter:{gfmFootnoteCallString:ih,gfmFootnoteCall:ig,gfmFootnoteDefinitionLabelString:iy,gfmFootnoteDefinition:iv},exit:{gfmFootnoteCallString:ib,gfmFootnoteCall:ix,gfmFootnoteDefinitionLabelString:i_,gfmFootnoteDefinition:ik}},{canContainEols:["delete"],enter:{strikethrough:iC},exit:{strikethrough:iA}},{enter:{table:iD,tableData:iM,tableHeader:iM,tableRow:iU},exit:{codeText:iz,table:ij,tableData:iN,tableHeader:iN,tableRow:iN}},{exit:{taskListCheckValueChecked:iF,taskListCheckValueUnchecked:iF,paragraph:iZ}}]),l.push({extensions:[{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:it,notInConstruct:ir},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:it,notInConstruct:ir},{character:":",before:"[ps]",after:"\\/",inConstruct:it,notInConstruct:ir}]},(r=!1,i&&i.firstLineBlank&&(r=!0),{handlers:{footnoteDefinition:function(e,t,n,i){let a=n.createTracker(i),o=a.move("[^"),s=n.enter("footnoteDefinition"),l=n.enter("label");return o+=a.move(n.safe(n.associationId(e),{before:o,after:"]"})),l(),o+=a.move("]:"),e.children&&e.children.length>0&&(a.shift(4),o+=a.move((r?"\n":" ")+n.indentLines(n.containerFlow(e,a.current()),r?iI:iS))),s(),o},footnoteReference:iw},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]}),{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:iT}],handlers:{delete:iP}},function(e){let t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,a=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:function(e,t,n){let r=iO(e,t,n);return n.stack.includes("tableCell")&&(r=r.replace(/\|/g,"\\$&")),r},table:function(e,t,n,r){return s(function(e,t,n){let r=e.children,i=-1,a=[],o=t.enter("table");for(;++i<r.length;)a[i]=l(r[i],t,n);return o(),a}(e,n,r),e.align)},tableCell:o,tableRow:function(e,t,n,r){let i=s([l(e,n,r)]);return i.slice(0,i.indexOf("\n"))}}};function o(e,t,n,r){let i=n.enter("tableCell"),o=n.enter("phrasing"),s=n.containerPhrasing(e,{...r,before:a,after:a});return o(),i(),s}function s(e,t){return function(e,t){let n=t||{},r=(n.align||[]).concat(),i=n.stringLength||iE,a=[],o=[],s=[],l=[],u=0,d=-1;for(;++d<e.length;){let t=[],r=[],a=-1;for(e[d].length>u&&(u=e[d].length);++a<e[d].length;){var c;let o=null==(c=e[d][a])?"":String(c);if(!1!==n.alignDelimiters){let e=i(o);r[a]=e,(void 0===l[a]||e>l[a])&&(l[a]=e)}t.push(o)}o[d]=t,s[d]=r}let p=-1;if("object"==typeof r&&"length"in r)for(;++p<u;)a[p]=i$(r[p]);else{let e=i$(r);for(;++p<u;)a[p]=e}p=-1;let m=[],h=[];for(;++p<u;){let e=a[p],t="",r="";99===e?(t=":",r=":"):108===e?t=":":114===e&&(r=":");let i=!1===n.alignDelimiters?1:Math.max(1,l[p]-t.length-r.length),o=t+"-".repeat(i)+r;!1!==n.alignDelimiters&&((i=t.length+i+r.length)>l[p]&&(l[p]=i),h[p]=i),m[p]=o}o.splice(1,0,m),s.splice(1,0,h),d=-1;let f=[];for(;++d<o.length;){let e=o[d],t=s[d];p=-1;let r=[];for(;++p<u;){let i=e[p]||"",o="",s="";if(!1!==n.alignDelimiters){let e=l[p]-(t[p]||0),n=a[p];114===n?o=" ".repeat(e):99===n?e%2?(o=" ".repeat(e/2+.5),s=" ".repeat(e/2-.5)):s=o=" ".repeat(e/2):s=" ".repeat(e)}!1===n.delimiterStart||p||r.push("|"),!1!==n.padding&&(!1!==n.alignDelimiters||""!==i)&&(!1!==n.delimiterStart||p)&&r.push(" "),!1!==n.alignDelimiters&&r.push(o),r.push(i),!1!==n.alignDelimiters&&r.push(s),!1!==n.padding&&r.push(" "),(!1!==n.delimiterEnd||p!==u-1)&&r.push("|")}f.push(!1===n.delimiterEnd?r.join("").replace(/ +$/,""):r.join(""))}return f.join("\n")}(e,{align:t,alignDelimiters:r,padding:n,stringLength:i})}function l(e,t,n){let r=e.children,i=-1,a=[],s=t.enter("tableRow");for(;++i<r.length;)a[i]=o(r[i],e,t,n);return s(),a}}(i),{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:iB}}]})}e.s(["default",()=>ac],812878);let ap=(0,X.memo)(()=>(0,t.jsx)(r7,{remarkPlugins:[ac],className:"aui-md",components:am})),am=((e={})=>Object.fromEntries(Object.entries(e??{}).map(([e,n])=>n?[e,(0,X.memo)(({node:e,...r})=>(0,t.jsx)(n,{...r}),rK)]:[e,n])))({h1:({className:e,...r})=>(0,t.jsx)("h1",{className:(0,n.cn)("mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0",e),...r}),h2:({className:e,...r})=>(0,t.jsx)("h2",{className:(0,n.cn)("mb-4 mt-8 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0",e),...r}),h3:({className:e,...r})=>(0,t.jsx)("h3",{className:(0,n.cn)("mb-4 mt-6 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0",e),...r}),h4:({className:e,...r})=>(0,t.jsx)("h4",{className:(0,n.cn)("mb-4 mt-6 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0",e),...r}),h5:({className:e,...r})=>(0,t.jsx)("h5",{className:(0,n.cn)("my-4 text-lg font-semibold first:mt-0 last:mb-0",e),...r}),h6:({className:e,...r})=>(0,t.jsx)("h6",{className:(0,n.cn)("my-4 font-semibold first:mt-0 last:mb-0",e),...r}),p:({className:e,...r})=>(0,t.jsx)("p",{className:(0,n.cn)("mb-5 mt-5 leading-7 first:mt-0 last:mb-0",e),...r}),a:({className:e,...r})=>(0,t.jsx)("a",{className:(0,n.cn)("text-primary font-medium underline underline-offset-4",e),...r}),blockquote:({className:e,...r})=>(0,t.jsx)("blockquote",{className:(0,n.cn)("border-l-2 pl-6 italic",e),...r}),ul:({className:e,...r})=>(0,t.jsx)("ul",{className:(0,n.cn)("my-5 ml-6 list-disc [&>li]:mt-2",e),...r}),ol:({className:e,...r})=>(0,t.jsx)("ol",{className:(0,n.cn)("my-5 ml-6 list-decimal [&>li]:mt-2",e),...r}),hr:({className:e,...r})=>(0,t.jsx)("hr",{className:(0,n.cn)("my-5 border-b",e),...r}),table:({className:e,...r})=>(0,t.jsx)("table",{className:(0,n.cn)("my-5 w-full border-separate border-spacing-0 overflow-y-auto",e),...r}),th:({className:e,...r})=>(0,t.jsx)("th",{className:(0,n.cn)("bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right",e),...r}),td:({className:e,...r})=>(0,t.jsx)("td",{className:(0,n.cn)("border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",e),...r}),tr:({className:e,...r})=>(0,t.jsx)("tr",{className:(0,n.cn)("m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg",e),...r}),sup:({className:e,...r})=>(0,t.jsx)("sup",{className:(0,n.cn)("[&>a]:text-xs [&>a]:no-underline",e),...r}),pre:({className:e,...r})=>(0,t.jsx)("pre",{className:(0,n.cn)("overflow-x-auto rounded-b-lg bg-black p-4 text-white",e),...r}),code:function({className:e,...r}){let i=rG();return(0,t.jsx)("code",{className:(0,n.cn)(!i&&"bg-muted rounded border font-semibold",e),...r})},CodeHeader:({language:e})=>e?(0,t.jsx)("div",{className:"flex items-center rounded-t-lg bg-zinc-900 px-4 py-2 text-sm font-semibold text-white",children:(0,t.jsx)("span",{className:"lowercase [&>span]:text-xs",children:e})}):null});e.s(["MarkdownText",0,ap],558262);var ah=e.i(901387);e.i(403150);var af=e.i(35617),ag=e.i(468759);let ay=(0,X.forwardRef)(({children:e,tooltip:r,side:i="bottom",className:a,...o},s)=>(0,t.jsx)(af.TooltipProvider,{children:(0,t.jsxs)(af.Tooltip,{children:[(0,t.jsx)(af.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)(ag.Button,{variant:"ghost",size:"icon",...o,className:(0,n.cn)("size-6 p-1",a),ref:s,children:[e,(0,t.jsx)("span",{className:"sr-only",children:r})]})}),(0,t.jsx)(ah.Portal,{children:(0,t.jsx)(af.TooltipContent,{side:i,collisionPadding:8,children:r})})]})}));ay.displayName="TooltipIconButton",e.s(["TooltipIconButton",0,ay],539119)},775760,279377,54317,629962,915629,610551,e=>{"use strict";var t,n=e.i(592426),r=e.i(558262),i=e.i(539119);e.i(403150);var a=e.i(468759),o=e.i(550209),s=e.i(838497),l=e.i(215146);function u(e){return e>l.MAX_IMAGES_PER_MESSAGE?{ok:!1,reason:`Maximum ${l.MAX_IMAGES_PER_MESSAGE} images per message.`}:{ok:!0}}var d=e.i(150373),c=e.i(94283),p=e.i(809825),m=e.i(887688),h=e.i(419740),f=(0,c.createContext)(null),g=(0,m.createContextHook)(f,"AssistantRuntimeProvider");function y(e){let t=g(e);return t?t.useThreadRuntime():null}var v=(0,h.createStateHookForRuntime)(y);(0,h.createStateHookForRuntime)(e=>y(e)?.composer??null),e.s(["ThreadContext",()=>f,"useThread",()=>v,"useThreadRuntime",()=>y],279377);var b=(e,t)=>(0,c.useMemo)(()=>{let t;return t=t=>{let n=e.map(e=>e.subscribe(t));return()=>{for(let e of n)e()}},n=>{let r=()=>n(...e.map(e=>e.getState()));return(0,c.useSyncExternalStore)(t,r,r)}},e)(t),x=((t=x||{}).Hidden="hidden",t.Floating="floating",t.Normal="normal",t),_=(0,c.forwardRef)(({hideWhenRunning:e,autohide:t,autohideFloat:r,...i},a)=>{let o=(({hideWhenRunning:e,autohide:t,autohideFloat:n})=>b([y(),(0,p.useMessageRuntime)(),(0,p.useMessageUtilsStore)()],(r,i,a)=>e&&r.isRunning?"hidden":"always"!==t&&("not-last"!==t||i.isLast)?"normal":a.isHovering?"always"===n||"single-branch"===n&&i.branchCount<=1?"floating":"normal":"hidden"))({hideWhenRunning:e,autohide:t,autohideFloat:r});return o===x.Hidden?null:(0,n.jsx)(d.Primitive.div,{...o===x.Floating?{"data-floating":"true"}:null,...i,ref:a})});function k(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),!1===n||!r.defaultPrevented)return t?.(r)}}function w(e){let t=(0,p.useMessageRuntime)({optional:!0}),n=y(e);return t?t.composer:n?.composer??null}_.displayName="ActionBarPrimitive.Root";var S=(0,h.createStateHookForRuntime)(w);e.s(["useComposer",()=>S,"useComposerRuntime",()=>w],54317);var I=(0,c.forwardRef)(({copiedDuration:e,onClick:t,disabled:r,...i},a)=>{let o=(0,p.useMessageUtils)(e=>e.isCopied),s=(({copiedDuration:e=3e3}={})=>{let t=(0,p.useMessageRuntime)(),n=w(),r=(0,p.useMessageUtils)(e=>e.setIsCopied),i=(0,p.useMessage)(e=>("assistant"!==e.role||"running"!==e.status.type)&&e.content.some(e=>"text"===e.type&&e.text.length>0)),a=(0,c.useCallback)(()=>{let{isEditing:i,text:a}=n.getState(),o=i?a:t.unstable_getCopyText();navigator.clipboard.writeText(o).then(()=>{r(!0),setTimeout(()=>r(!1),e)})},[t,r,n,e]);return i?a:null})({copiedDuration:e});return(0,n.jsx)(d.Primitive.button,{type:"button",...o?{"data-copied":"true"}:{},...i,ref:a,disabled:r||!s,onClick:k(t,()=>{s?.()})})});I.displayName="ActionBarPrimitive.Copy";var T=(e,t,r=[])=>{let i=(0,c.forwardRef)((e,i)=>{let a={},o={};Object.keys(e).forEach(t=>{r.includes(t)?a[t]=e[t]:o[t]=e[t]});let s=t(a)??void 0;return(0,n.jsx)(d.Primitive.button,{type:"button",...o,ref:i,disabled:o.disabled||!s,onClick:k(o.onClick,s)})});return i.displayName=e,i},C=T("ActionBarPrimitive.Reload",()=>{let e=(0,p.useMessageRuntime)(),t=b([y(),e],(e,t)=>e.isRunning||e.isDisabled||"assistant"!==t.role),n=(0,c.useCallback)(()=>{e.reload()},[e]);return t?null:n}),A=T("ActionBarPrimitive.Edit",()=>{let e=(0,p.useMessageRuntime)(),t=(0,p.useEditComposer)(e=>e.isEditing),n=(0,c.useCallback)(()=>{e.composer.beginEdit()},[e]);return t?null:n}),P=T("ActionBarPrimitive.Speak",()=>{let e=(0,p.useMessageRuntime)(),t=(0,c.useCallback)(async()=>{e.speak()},[e]);return(0,p.useMessage)(e=>("assistant"!==e.role||"running"!==e.status.type)&&e.content.some(e=>"text"===e.type&&e.text.length>0))?t:null}),E=e.i(552425),$=(0,c.forwardRef)((e,t)=>{let r,i,a,o=(r=(0,p.useMessageRuntime)(),i=(0,p.useMessage)(e=>null!=e.speech),a=(0,c.useCallback)(()=>{r.stopSpeaking()},[r]),i?a:null);return(0,E.useEscapeKeydown)(e=>{o&&(e.preventDefault(),o())}),(0,n.jsx)(d.Primitive.button,{type:"button",disabled:!o,...e,ref:t,onClick:k(e.onClick,()=>{o?.()})})});$.displayName="ActionBarPrimitive.StopSpeaking";var O=(0,c.forwardRef)(({onClick:e,disabled:t,...r},i)=>{let a,o=(0,p.useMessage)(e=>e.submittedFeedback?.type==="positive"),s=(a=(0,p.useMessageRuntime)(),(0,c.useCallback)(()=>{a.submitFeedback({type:"positive"})},[a]));return(0,n.jsx)(d.Primitive.button,{type:"button",...o?{"data-submitted":"true"}:{},...r,ref:i,disabled:t||!s,onClick:k(e,()=>{s?.()})})});O.displayName="ActionBarPrimitive.FeedbackPositive";var R=(0,c.forwardRef)(({onClick:e,disabled:t,...r},i)=>{let a,o=(0,p.useMessage)(e=>e.submittedFeedback?.type==="negative"),s=(a=(0,p.useMessageRuntime)(),(0,c.useCallback)(()=>{a.submitFeedback({type:"negative"})},[a]));return(0,n.jsx)(d.Primitive.button,{type:"button",...o?{"data-submitted":"true"}:{},...r,ref:i,disabled:t||!s,onClick:k(e,()=>{s?.()})})});R.displayName="ActionBarPrimitive.FeedbackNegative",e.s([],416941),e.i(416941),e.s(["Copy",()=>I,"Edit",()=>A,"FeedbackNegative",()=>R,"FeedbackPositive",()=>O,"Reload",()=>C,"Root",()=>_,"Speak",()=>P,"StopSpeaking",()=>$],679409);var D=e.i(679409),D=D,j=T("BranchPickerPrimitive.Next",()=>{let e=(0,p.useMessageRuntime)(),t=(0,p.useMessage)(e=>e.branchNumber>=e.branchCount),n=(0,c.useCallback)(()=>{e.switchToBranch({position:"next"})},[e]);return t?null:n}),U=T("BranchPickerPrimitive.Previous",()=>{let e=(0,p.useMessageRuntime)(),t=(0,p.useMessage)(e=>e.branchNumber<=1),n=(0,c.useCallback)(()=>{e.switchToBranch({position:"previous"})},[e]);return t?null:n}),N=()=>{let e=(0,p.useMessage)(e=>e.branchCount);return(0,n.jsx)(n.Fragment,{children:e})};N.displayName="BranchPickerPrimitive.Count";var M=()=>{let e=(0,p.useMessage)(e=>e.branchNumber);return(0,n.jsx)(n.Fragment,{children:e})};M.displayName="BranchPickerPrimitive.Number";var z=({children:e,...t})=>b([(0,p.useMessageRuntime)(),(0,p.useMessageUtilsStore)()],({role:e,attachments:n,content:r,branchCount:i,isLast:a,speech:o,submittedFeedback:s},{isCopied:l,isHovering:u})=>(!0!==t.hasBranches||!(i<2))&&(!t.user||"user"===e)&&(!t.assistant||"assistant"===e)&&(!t.system||"system"===e)&&(!0!==t.lastOrHover||!!u||!!a)&&(void 0===t.last||t.last===a)&&(!0!==t.copied||!!l)&&(!1!==t.copied||!l)&&(!0!==t.speaking||null!=o)&&(!1!==t.speaking||null==o)&&(!0!==t.hasAttachments||"user"===e&&!!n.length)&&(!1!==t.hasAttachments||"user"!==e||!n.length)&&(!0!==t.hasContent||0!==r.length)&&(!1!==t.hasContent||!(r.length>0))&&(void 0===t.submittedFeedback||(s?.type??null)===t.submittedFeedback)&&!0)?e:null;z.displayName="MessagePrimitive.If";var L=(0,c.forwardRef)(({hideWhenSingleBranch:e,...t},r)=>(0,n.jsx)(z,{hasBranches:!!e||void 0,children:(0,n.jsx)(d.Primitive.div,{...t,ref:r})}));L.displayName="BranchPickerPrimitive.Root",e.s([],448462),e.i(448462),e.s(["Count",()=>N,"Next",()=>j,"Number",()=>M,"Previous",()=>U,"Root",()=>L],728852);var F=e.i(728852),F=F,Z=()=>{let e=w(),t=b([y(),e],(e,t)=>e.isRunning||!t.isEditing||t.isEmpty),n=(0,c.useCallback)(()=>{e.send()},[e]);return t?null:n},B=T("ComposerPrimitive.Send",Z),H=(0,c.forwardRef)(({onSubmit:e,...t},r)=>{let i=Z();return(0,n.jsx)(d.Primitive.form,{...t,ref:r,onSubmit:k(e,e=>{e.preventDefault(),i&&i()})})});H.displayName="ComposerPrimitive.Root";var K=e.i(353616),V=e.i(479975),G=e.i(230330),q=e.i(382034),J=c.useLayoutEffect,W=function(e){var t=c.default.useRef(e);return J(function(){t.current=e}),t},Y=function(e,t){"function"==typeof e?e(t):e.current=t},X=function(e,t){var n=c.default.useRef();return c.default.useCallback(function(r){e.current=r,n.current&&Y(n.current,null),n.current=t,t&&Y(t,r)},[t])},Q={"min-height":"0","max-height":"none",height:"0",visibility:"hidden",overflow:"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0",display:"block"},ee=function(e){Object.keys(Q).forEach(function(t){e.style.setProperty(t,Q[t],"important")})},et=null,en=function(e,t){var n=e.scrollHeight;return"border-box"===t.sizingStyle.boxSizing?n+t.borderSize:n-t.paddingSize},er=function(){},ei=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","boxSizing","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","paddingBottom","paddingLeft","paddingRight","paddingTop","tabSize","textIndent","textRendering","textTransform","width","wordBreak","wordSpacing","scrollbarGutter"],ea=!!document.documentElement.currentStyle,eo=function(e){var t=window.getComputedStyle(e);if(null===t)return null;var n=ei.reduce(function(e,n){return e[n]=t[n],e},{}),r=n.boxSizing;if(""===r)return null;ea&&"border-box"===r&&(n.width=parseFloat(n.width)+parseFloat(n.borderRightWidth)+parseFloat(n.borderLeftWidth)+parseFloat(n.paddingRight)+parseFloat(n.paddingLeft)+"px");var i=parseFloat(n.paddingBottom)+parseFloat(n.paddingTop),a=parseFloat(n.borderBottomWidth)+parseFloat(n.borderTopWidth);return{sizingStyle:n,paddingSize:i,borderSize:a}};function es(e,t,n){var r=W(n);c.useLayoutEffect(function(){var n=function(e){return r.current(e)};if(e)return e.addEventListener(t,n),function(){return e.removeEventListener(t,n)}},[])}var el=function(e,t){es(document.body,"reset",function(n){e.current.form===n.target&&t(n)})},eu=function(e){es(window,"resize",e)},ed=function(e){es(document.fonts,"loadingdone",e)},ec=["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"],ep=c.forwardRef(function(e,t){var n=e.cacheMeasurements,r=e.maxRows,i=e.minRows,a=e.onChange,o=void 0===a?er:a,s=e.onHeightChange,l=void 0===s?er:s,u=(0,q.default)(e,ec),d=void 0!==u.value,p=c.useRef(null),m=X(p,t),h=c.useRef(0),f=c.useRef(),g=function(){var e=p.current,t=n&&f.current?f.current:eo(e);if(t){f.current=t;var a,o,s,u,d,c,m,g,y,v,b,x=(a=e.value||e.placeholder||"x",void 0===(o=i)&&(o=1),void 0===(s=r)&&(s=1/0),et||((et=document.createElement("textarea")).setAttribute("tabindex","-1"),et.setAttribute("aria-hidden","true"),ee(et)),null===et.parentNode&&document.body.appendChild(et),u=t.paddingSize,d=t.borderSize,m=(c=t.sizingStyle).boxSizing,Object.keys(c).forEach(function(e){et.style[e]=c[e]}),ee(et),et.value=a,g=en(et,t),et.value=a,g=en(et,t),et.value="x",v=(y=et.scrollHeight-u)*o,"border-box"===m&&(v=v+u+d),g=Math.max(v,g),b=y*s,"border-box"===m&&(b=b+u+d),[g=Math.min(b,g),y]),_=x[0],k=x[1];h.current!==_&&(h.current=_,e.style.setProperty("height",_+"px","important"),l(_,{rowHeight:k}))}};return c.useLayoutEffect(g),el(p,function(){if(!d){var e=p.current.value;requestAnimationFrame(function(){var t=p.current;t&&e!==t.value&&g()})}}),eu(g),ed(g),c.createElement("textarea",(0,G.default)({},u,{onChange:function(e){d||g(),o(e)},ref:m}))}),em=e.i(614323),eh=e.i(2262),ef=(0,c.createContext)(null),eg=(0,m.createContextHook)(ef,"ThreadPrimitive.Viewport"),{useThreadViewport:ey,useThreadViewportStore:ev}=(0,eh.createContextStoreHook)(eg,"useThreadViewport"),eb=e=>{let t=(0,em.useCallbackRef)(e),n=ey(e=>e.onScrollToBottom);(0,c.useEffect)(()=>n(t),[n,t])},ex=(0,c.createContext)(null),e_=(0,m.createContextHook)(ex,"a component passed to <ThreadListPrimitive.Items components={...}>");function ek(e){let t=e_(e);return t?t.useThreadListItemRuntime():null}var ew=(0,h.createStateHookForRuntime)(ek);e.s(["ThreadListItemContext",()=>ex,"useThreadListItem",()=>ew,"useThreadListItemRuntime",()=>ek],629962);var eS=(0,c.forwardRef)(({autoFocus:e=!1,asChild:t,disabled:r,onChange:i,onKeyDown:a,onPaste:o,submitOnEnter:s=!0,cancelOnEscape:l=!0,unstable_focusOnRunStart:u=!0,unstable_focusOnScrollToBottom:d=!0,unstable_focusOnThreadSwitched:p=!0,addAttachmentOnPaste:m=!0,...h},f)=>{let g=ek(),b=y(),x=w(),_=S(e=>e.isEditing?e.text:""),I=t?V.Slot:ep,T=!!(v(e=>e.isDisabled)||r),C=(0,c.useRef)(null),A=(0,K.useComposedRefs)(f,C);(0,E.useEscapeKeydown)(e=>{l&&x.getState().canCancel&&(x.cancel(),e.preventDefault())});let P=async e=>{if(!m)return;let t=b.getState().capabilities,n=Array.from(e.clipboardData?.files||[]);if(t.attachments&&n.length>0)try{e.preventDefault(),await Promise.all(n.map(e=>x.addAttachment(e)))}catch(e){console.error("Error adding attachment:",e)}},$=e&&!T,O=(0,c.useCallback)(()=>{let e=C.current;e&&$&&(e.focus({preventScroll:!0}),e.setSelectionRange(e.value.length,e.value.length))},[$]);return(0,c.useEffect)(()=>O(),[O]),eb(()=>{"thread"===x.type&&d&&O()}),(0,c.useEffect)(()=>{if("thread"===x.type&&u)return b.unstable_on("run-start",O)},[u,O,x,b]),(0,c.useEffect)(()=>{if("thread"===x.type&&p)return g.unstable_on("switched-to",O)},[p,O,x,g]),(0,n.jsx)(I,{name:"input",value:_,...h,ref:A,disabled:T,onChange:k(i,e=>{if(x.getState().isEditing)return x.setText(e.target.value)}),onKeyDown:k(a,e=>{if(!T&&s&&!e.nativeEvent.isComposing&&"Enter"===e.key&&!1===e.shiftKey){let{isRunning:t}=b.getState();t||(e.preventDefault(),C.current?.closest("form")?.requestSubmit())}}),onPaste:k(o,P)})});eS.displayName="ComposerPrimitive.Input";var eI=T("ComposerPrimitive.Cancel",()=>{let e=w(),t=S(e=>!e.canCancel),n=(0,c.useCallback)(()=>{e.cancel()},[e]);return t?null:n}),eT=T("ComposerPrimitive.AddAttachment",({multiple:e=!0}={})=>{let t=S(e=>!e.isEditing),n=w(),r=(0,c.useCallback)(()=>{let t=document.createElement("input");t.type="file",t.multiple=e,t.hidden=!0;let r=n.getAttachmentAccept();"*"!==r&&(t.accept=r),document.body.appendChild(t),t.onchange=e=>{let r=e.target.files;if(r){for(let e of r)n.addAttachment(e);document.body.removeChild(t)}},t.oncancel=()=>{t.files&&0!==t.files.length||document.body.removeChild(t)},t.click()},[n,e]);return t?null:r},["multiple"]),eC=(0,c.createContext)(null),eA=(0,m.createContextHook)(eC,"a ComposerPrimitive.Attachments or MessagePrimitive.Attachments component");function eP(e){let t=eA(e);return t?t.useAttachmentRuntime():null}(0,h.createStateHookForRuntime)(eP);var eE=(0,h.createStateHookForRuntime)(function(e){let t=eP(e);if(!t)return null;if("thread-composer"!==t.source)throw Error("This component must be used within a thread's ComposerPrimitive.Attachments component.");return t});(0,h.createStateHookForRuntime)(function(e){let t=eP(e);if(!t)return null;if("edit-composer"!==t.source)throw Error("This component must be used within a message's ComposerPrimitive.Attachments component.");return t});var e$=(0,h.createStateHookForRuntime)(function(e){let t=eP(e);if(!t)return null;if("message"!==t.source)throw Error("This component must be used within a MessagePrimitive.Attachments component.");return t}),eO=e.i(520629),eR=e.i(618178),eD=e.i(240461),ej=({runtime:e,children:t})=>{let r=(e=>{let[t]=(0,c.useState)(()=>(0,eO.create)(()=>e));return(0,c.useEffect)(()=>{(0,eD.ensureBinding)(e),(0,eR.writableStore)(t).setState(e,!0)},[e,t]),t})(e),[i]=(0,c.useState)(()=>({useAttachmentRuntime:r}));return(0,n.jsx)(eC.Provider,{value:i,children:t})},eU=({components:e})=>{let t=eE(t=>((e,t)=>{let n=t.type;switch(n){case"image":return e?.Image??e?.Attachment;case"document":return e?.Document??e?.Attachment;case"file":return e?.File??e?.Attachment;default:throw Error(`Unknown attachment type: ${n}`)}})(e,t));return t?(0,n.jsx)(t,{}):null},eN=(0,c.memo)(({components:e,attachmentIndex:t})=>{let r=w(),i=(0,c.useMemo)(()=>r.getAttachmentByIndex(t),[r,t]);return(0,n.jsx)(ej,{runtime:i,children:(0,n.jsx)(eU,{components:e})})},(e,t)=>e.attachmentIndex===t.attachmentIndex&&e.components?.Image===t.components?.Image&&e.components?.Document===t.components?.Document&&e.components?.File===t.components?.File&&e.components?.Attachment===t.components?.Attachment),eM=({components:e})=>{let t=S(e=>e.attachments.length);return(0,c.useMemo)(()=>Array.from({length:t},(t,r)=>(0,n.jsx)(eN,{attachmentIndex:r,components:e},r)),[t,e])};eM.displayName="ComposerPrimitive.Attachments";var ez=({children:e,...t})=>S(e=>(!0!==t.editing||!!e.isEditing)&&(!1!==t.editing||!e.isEditing))?e:null;ez.displayName="ComposerPrimitive.If",e.s([],687059),e.i(687059),e.s(["AddAttachment",()=>eT,"Attachments",()=>eM,"Cancel",()=>eI,"If",()=>ez,"Input",()=>eS,"Root",()=>H,"Send",()=>B],851030);var eL=e.i(851030),eL=eL,eF=e=>{let t=(0,c.useRef)(void 0);return(0,c.useCallback)(n=>{t.current&&t.current(),n&&(t.current=e(n))},[e])},eZ=(0,c.forwardRef)((e,t)=>{let r,i=(r=(0,p.useMessageUtilsStore)(),eF((0,c.useCallback)(e=>{let t=r.getState().setIsHovering,n=()=>{t(!0)},i=()=>{t(!1)};return e.addEventListener("mouseenter",n),e.addEventListener("mouseleave",i),()=>{e.removeEventListener("mouseenter",n),e.removeEventListener("mouseleave",i),t(!1)}},[r]))),a=(0,K.useComposedRefs)(t,i);return(0,n.jsx)(d.Primitive.div,{...e,ref:a})});eZ.displayName="MessagePrimitive.Root";var eB=e.i(318066),eH=e.i(744660),eK={type:"complete"},eV={type:"running"},eG=({children:e,text:t,isRunning:r})=>{let[i]=(0,c.useState)(()=>{let e=(0,eO.create)(()=>({status:r?eV:eK,type:"text",text:t})),n=new eH.ContentPartRuntimeImpl({path:{ref:"text",threadSelector:{type:"main"},messageSelector:{type:"messageId",messageId:""},contentPartSelector:{type:"index",index:0}},getState:e.getState,subscribe:e.subscribe});return(0,eD.ensureBinding)(n),{useContentPartRuntime:(0,eO.create)(()=>n),useContentPart:e}});return(0,c.useEffect)(()=>{let e=i.useContentPart.getState(),n=e.text!==t,a=r?eV:eK,o=e.status!==a;(n||o)&&(0,eR.writableStore)(i.useContentPart).setState({type:"text",text:t,status:a},!0)},[i,r,t]),(0,n.jsx)(eB.ContentPartContext.Provider,{value:i,children:e})},eq=(0,c.createContext)(null),eJ=(0,m.createContextHook)(eq,"AssistantRuntimeProvider");function eW(e){let t=eJ(e);return t?t.useAssistantRuntime():null}var{useToolUIs:eY,useToolUIsStore:eX}=(0,eh.createContextStoreHook)(eJ,"useToolUIs");(0,h.createStateHookForRuntime)(e=>eW(e)?.threads??null),e.s(["AssistantContext",()=>eq,"useAssistantRuntime",()=>eW,"useToolUIs",()=>eY,"useToolUIsStore",()=>eX],915629);var eQ=({runtime:e,children:t})=>{let r=(e=>{let[t]=(0,c.useState)(()=>(0,eO.create)(()=>e));return(0,c.useEffect)(()=>{(0,eD.ensureBinding)(e),(0,eR.writableStore)(t).setState(e,!0)},[e,t]),t})(e),[i]=(0,c.useState)(()=>({useContentPartRuntime:r}));return(0,n.jsx)(eB.ContentPartContext.Provider,{value:i,children:t})},e0=e.i(865762),e1=e.i(947629),e4=(0,c.forwardRef)(({smooth:e=!0,component:t="span",...r},i)=>{let{text:a,status:o}=(0,e1.useSmooth)((0,e0.useContentPartText)(),e);return(0,n.jsx)(t,{"data-status":o.type,...r,ref:i,children:a})});e4.displayName="ContentPartPrimitive.Text";var e6=(0,c.forwardRef)((e,t)=>{let{image:r}=(0,eB.useContentPart)(e=>{if("image"!==e.type)throw Error("ContentPartImage can only be used inside image content parts.");return e});return(0,n.jsx)(d.Primitive.img,{src:r,...e,ref:t})});e6.displayName="ContentPartPrimitive.Image";var e2=({children:e})=>(0,eB.useContentPart)(e=>"running"===e.status.type)?e:null;e2.displayName="ContentPartPrimitive.InProgress";var e9=({Fallback:e,...t})=>{let r=eY(e=>e.getToolUI(t.toolName))??e;return r?(0,n.jsx)(r,{...t}):null},e5=()=>(0,n.jsxs)("p",{style:{whiteSpace:"pre-line"},children:[(0,n.jsx)(e4,{}),(0,n.jsx)(e2,{children:(0,n.jsx)("span",{style:{fontFamily:"revert"},children:" ●"})})]}),e3=()=>null,e8=()=>null,e7=()=>(0,n.jsx)(e6,{}),te=()=>null,tt=()=>null,tn=({components:{Text:e=e5,Reasoning:t=e3,Image:r=e7,Source:i=e8,File:a=te,Unstable_Audio:o=tt,tools:s={}}={}})=>{let l=(0,eB.useContentPartRuntime)(),u=(0,eB.useContentPart)(),d=u.type;if("tool-call"===d){let e=e=>l.addToolResult(e);if("Override"in s)return(0,n.jsx)(s.Override,{...u,addResult:e});let t=s.by_name?.[u.toolName]??s.Fallback;return(0,n.jsx)(e9,{...u,Fallback:t,addResult:e})}if("requires-action"===u.status.type)throw Error("Encountered unexpected requires-action status");switch(d){case"text":return(0,n.jsx)(e,{...u});case"reasoning":return(0,n.jsx)(t,{...u});case"source":return(0,n.jsx)(i,{...u});case"image":return(0,n.jsx)(r,{...u});case"file":return(0,n.jsx)(a,{...u});case"audio":return(0,n.jsx)(o,{...u});default:throw Error(`Unknown content part type: ${d}`)}},tr=(0,c.memo)(({partIndex:e,components:t})=>{let r=(0,p.useMessageRuntime)(),i=(0,c.useMemo)(()=>r.getContentPartByIndex(e),[r,e]);return(0,n.jsx)(eQ,{runtime:i,children:(0,n.jsx)(tn,{components:t})})},(e,t)=>e.partIndex===t.partIndex&&e.components?.Text===t.components?.Text&&e.components?.Reasoning===t.components?.Reasoning&&e.components?.Source===t.components?.Source&&e.components?.Image===t.components?.Image&&e.components?.File===t.components?.File&&e.components?.Unstable_Audio===t.components?.Unstable_Audio&&e.components?.tools===t.components?.tools),ti=Object.freeze({type:"complete"}),ta=({status:e,component:t})=>(0,n.jsx)(eG,{text:"",isRunning:"running"===e.type,children:(0,n.jsx)(t,{type:"text",text:"",status:e})}),to=(0,c.memo)(({components:e})=>{let t=(0,p.useMessage)(e=>e.status)??ti;return e?.Empty?(0,n.jsx)(e.Empty,{status:t}):(0,n.jsx)(ta,{status:t,component:e?.Text??e5})},(e,t)=>e.components?.Empty===t.components?.Empty&&e.components?.Text===t.components?.Text),ts=({components:e})=>{let t=(0,p.useMessage)(e=>e.content.length),r=(0,c.useMemo)(()=>0===t?(0,n.jsx)(to,{components:e}):Array.from({length:t},(t,r)=>(0,n.jsx)(tr,{partIndex:r,components:e},r)),[t,e]);return(0,n.jsx)(n.Fragment,{children:r})};ts.displayName="MessagePrimitive.Content";var tl=({components:e})=>{let t=e$(t=>((e,t)=>{let n=t.type;switch(n){case"image":return e?.Image??e?.Attachment;case"document":return e?.Document??e?.Attachment;case"file":return e?.File??e?.Attachment;default:throw Error(`Unknown attachment type: ${n}`)}})(e,t));return t?(0,n.jsx)(t,{}):null},tu=(0,c.memo)(({components:e,attachmentIndex:t})=>{let r=(0,p.useMessageRuntime)(),i=(0,c.useMemo)(()=>r.getAttachmentByIndex(t),[r,t]);return(0,n.jsx)(ej,{runtime:i,children:(0,n.jsx)(tl,{components:e})})},(e,t)=>e.attachmentIndex===t.attachmentIndex&&e.components?.Image===t.components?.Image&&e.components?.Document===t.components?.Document&&e.components?.File===t.components?.File&&e.components?.Attachment===t.components?.Attachment),td=({components:e})=>{let t=(0,p.useMessage)(e=>"user"!==e.role?0:e.attachments.length);return(0,c.useMemo)(()=>Array.from({length:t},(t,r)=>(0,n.jsx)(tu,{attachmentIndex:r,components:e},r)),[t,e])};td.displayName="MessagePrimitive.Attachments";var tc=({children:e})=>(0,p.useMessage)(e=>e.status?.type==="incomplete"&&"error"===e.status.reason)?(0,n.jsx)(n.Fragment,{children:e}):null;tc.displayName="MessagePrimitive.Error",e.s([],411197),e.i(411197),e.s(["Attachments",()=>td,"Content",()=>ts,"Error",()=>tc,"If",()=>z,"Root",()=>eZ],673666);var tp=e.i(673666),tp=tp,tm=(0,c.forwardRef)((e,t)=>(0,n.jsx)(d.Primitive.div,{...e,ref:t}));tm.displayName="ThreadPrimitive.Root";var th=({children:e})=>v(e=>0===e.messages.length)?e:null;th.displayName="ThreadPrimitive.Empty";var tf=({children:e,...t})=>v(e=>(!0!==t.empty||0===e.messages.length)&&(!1!==t.empty||0!==e.messages.length)&&(!0!==t.running||!!e.isRunning)&&(!1!==t.running||!e.isRunning)&&(!0!==t.disabled||!!e.isDisabled)&&(!1!==t.disabled||!e.isDisabled)&&!0)?e:null;tf.displayName="ThreadPrimitive.If";var tg=({children:e})=>{let t=(()=>{let e=ev({optional:!0}),[t]=(0,c.useState)(()=>{let e;return e=new Set,(0,eO.create)(()=>({isAtBottom:!0,scrollToBottom:()=>{for(let t of e)t()},onScrollToBottom:t=>(e.add(t),()=>{e.delete(t)})}))});return(0,c.useEffect)(()=>e?.getState().onScrollToBottom(()=>{t.getState().scrollToBottom()}),[e,t]),(0,c.useEffect)(()=>{if(e)return t.subscribe(t=>{e.getState().isAtBottom!==t.isAtBottom&&(0,eR.writableStore)(e).setState({isAtBottom:t.isAtBottom})})},[t,e]),t})(),[r]=(0,c.useState)(()=>({useThreadViewport:t}));return(0,n.jsx)(ef.Provider,{value:r,children:e})};e.s(["ThreadViewportProvider",()=>tg],610551);var ty=(0,c.forwardRef)(({autoScroll:e,children:t,...r},i)=>{let a=(({autoScroll:e=!0})=>{var t;let n,r=(0,c.useRef)(null),i=ev(),a=(0,c.useRef)(0),o=(0,c.useRef)(!1),s=(0,c.useCallback)(t=>{let n=r.current;n&&e&&(o.current=!0,n.scrollTo({top:n.scrollHeight,behavior:t}))},[e]),l=()=>{let e=r.current;if(!e)return;let t=i.getState().isAtBottom,n=e.scrollHeight-e.scrollTop<=e.clientHeight+1;!n&&a.current<e.scrollTop||(n&&(o.current=!1),n!==t&&(0,eR.writableStore)(i).setState({isAtBottom:n})),a.current=e.scrollTop},u=(t=()=>{(o.current||i.getState().isAtBottom)&&s("instant"),l()},n=(0,em.useCallbackRef)(t),eF((0,c.useCallback)(e=>{let t=new ResizeObserver(()=>{n()}),r=new MutationObserver(()=>{n()});return t.observe(e),r.observe(e,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),()=>{t.disconnect(),r.disconnect()}},[n]))),d=eF(e=>(e.addEventListener("scroll",l),()=>{e.removeEventListener("scroll",l)}));eb(()=>{s("auto")});let p=y();return(0,c.useEffect)(()=>p.unstable_on("run-start",()=>s("auto")),[s,p]),(0,K.useComposedRefs)(u,d,r)})({autoScroll:e}),o=(0,K.useComposedRefs)(i,a);return(0,n.jsx)(d.Primitive.div,{...r,ref:o,children:t})});ty.displayName="ThreadPrimitive.ViewportScrollable";var tv=(0,c.forwardRef)((e,t)=>(0,n.jsx)(tg,{children:(0,n.jsx)(ty,{...e,ref:t})}));tv.displayName="ThreadPrimitive.Viewport";var tb=({runtime:e,children:t})=>{let r=(e=>{let[t]=(0,c.useState)(()=>(0,eO.create)(()=>e));return(0,c.useEffect)(()=>{(0,eD.ensureBinding)(e),(0,eR.writableStore)(t).setState(e,!0)},[e,t]),t})(e),i=(()=>{let[e]=(0,c.useState)(()=>(0,eO.create)(e=>({isCopied:!1,setIsCopied:t=>{e({isCopied:t})},isHovering:!1,setIsHovering:t=>{e({isHovering:t})}})));return e})(),[a]=(0,c.useState)(()=>({useMessageRuntime:r,useMessageUtils:i}));return(0,n.jsx)(p.MessageContext.Provider,{value:a,children:t})},tx=(e,t)=>e.Message===t.Message&&e.EditComposer===t.EditComposer&&e.UserEditComposer===t.UserEditComposer&&e.AssistantEditComposer===t.AssistantEditComposer&&e.SystemEditComposer===t.SystemEditComposer&&e.UserMessage===t.UserMessage&&e.AssistantMessage===t.AssistantMessage&&e.SystemMessage===t.SystemMessage,t_=()=>null,tk=({components:e})=>{let t=((e,t,n)=>{switch(t){case"user":if(n)return e.UserEditComposer??e.EditComposer??e.UserMessage??e.Message;return e.UserMessage??e.Message;case"assistant":if(n)return e.AssistantEditComposer??e.EditComposer??e.AssistantMessage??e.Message;return e.AssistantMessage??e.Message;case"system":if(n)return e.SystemEditComposer??e.EditComposer??e.SystemMessage??e.Message;return e.SystemMessage??t_;default:throw Error(`Unknown message role: ${t}`)}})(e,(0,p.useMessage)(e=>e.role),(0,p.useEditComposer)(e=>e.isEditing));return(0,n.jsx)(t,{})},tw=(0,c.memo)(({messageIndex:e,components:t})=>{let r=y(),i=(0,c.useMemo)(()=>r.getMesssageByIndex(e),[r,e]);return(0,n.jsx)(tb,{runtime:i,children:(0,n.jsx)(tk,{components:t})})},(e,t)=>e.messageIndex===t.messageIndex&&tx(e.components,t.components)),tS=({components:e})=>{let t=v(e=>e.messages.length);return(0,c.useMemo)(()=>0===t?null:Array.from({length:t},(t,r)=>(0,n.jsx)(tw,{messageIndex:r,components:e},r)),[t,e])};tS.displayName="ThreadPrimitive.Messages";var tI=(0,c.memo)(tS,(e,t)=>tx(e.components,t.components)),tT=T("ThreadPrimitive.ScrollToBottom",()=>{let e=ey(e=>e.isAtBottom),t=ev(),n=(0,c.useCallback)(()=>{t.getState().scrollToBottom()},[t]);return e?null:n}),tC=T("ThreadPrimitive.Suggestion",({prompt:e,autoSend:t})=>{let n=y(),r=v(e=>e.isDisabled),i=(0,c.useCallback)(()=>{t&&!n.getState().isRunning?n.append(e):n.composer.setText(e)},[n,t,e]);return r?null:i},["prompt","autoSend","method"]);e.s([],872152),e.i(872152),e.s(["Empty",()=>th,"If",()=>tf,"Messages",()=>tI,"Root",()=>tm,"ScrollToBottom",()=>tT,"Suggestion",()=>tC,"Viewport",()=>tv],390723);var tA=e.i(390723),tA=tA,tP=e.i(149724),tE=e.i(398430),t$=e.i(206435),tO=e.i(546703),tR=e.i(53607),tD=e.i(497709),tj=e.i(398365),tU=e.i(209114),tN=e.i(126701),tM=e.i(289587),tz=e.i(596984),tL=e.i(606886);let tF=(0,c.createContext)(void 0),tZ=(0,c.createContext)(!1),tB=(0,c.createContext)(!1),tH=(0,c.createContext)(!1),tK=(0,c.createContext)(null);function tV(){return(0,c.useContext)(tH)}let tG=()=>(0,n.jsx)(tA.ScrollToBottom,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Scroll to bottom",variant:"outline",className:"absolute -top-10 rounded-full disabled:invisible shadow-lg bg-background/80 backdrop-blur-sm ring-1 ring-foreground/[0.06]",children:(0,n.jsx)(tE.ArrowDownIcon,{size:14})})}),tq=()=>(0,n.jsx)(tA.Empty,{children:(0,n.jsx)("div",{className:"flex w-full max-w-[var(--thread-max-width)] flex-grow flex-col",children:(0,n.jsxs)("div",{className:"flex w-full flex-grow flex-col items-center justify-center py-16",children:[(0,n.jsx)("div",{className:"w-14 h-14 rounded-2xl bg-gradient-to-br from-blue-500/20 to-blue-600/10 flex items-center justify-center mb-5 ring-1 ring-blue-500/20 shadow-lg shadow-blue-500/10",children:(0,n.jsx)(tU.PaperPlaneRightIcon,{className:"w-7 h-7 text-blue-500",weight:"duotone"})}),(0,n.jsx)("h2",{className:"text-lg font-semibold tracking-tight text-foreground mb-2",children:"Hello! 👋"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground text-center max-w-[260px] leading-relaxed",children:"I'm here to help you create beautiful, modern email templates. Describe what you'd like to build."})]})})});function tJ(e){return"complete"===e.status.type}function tW(e){return"complete"!==e.status.type}async function tY(e,t){if(0===e.length)return[];if(null==t){if(e.some(tW))throw Error("Image attachments are not available in this composer.");return e.filter(tJ)}let n=[];for(let r of e){if(tJ(r)){n.push(r);continue}n.push(await t.send(r))}return n}let tX=({attachment:e,onRemove:t})=>{let{file:r,name:i,content:a}=e,o=r instanceof Blob?r:null,[s,l]=(0,c.useState)(null);(0,c.useEffect)(()=>{if(!o)return void l(null);let e=URL.createObjectURL(o);return l(e),()=>{URL.revokeObjectURL(e)}},[o]);let u=(0,c.useMemo)(()=>(function(e){if(!Array.isArray(e))return null;for(let t of e)if(t&&"object"==typeof t&&"image"===t.type){let e=t.image;if("string"==typeof e)return e}return null})(a),[a]),d=s??u;return(0,n.jsxs)("div",{className:"group/attachment relative h-14 w-14 overflow-hidden rounded-xl ring-1 ring-foreground/[0.08] bg-foreground/[0.03] shadow-sm",children:[d?(0,n.jsx)("img",{src:d,alt:i,className:"h-full w-full object-cover",draggable:!1}):(0,n.jsx)("div",{className:"flex h-full w-full items-center justify-center text-muted-foreground",children:(0,n.jsx)(tj.ImageIcon,{className:"h-5 w-5"})}),t&&(0,n.jsx)("button",{type:"button","aria-label":`Remove ${i}`,onClick:t,className:"absolute right-1 top-1 grid h-5 w-5 place-items-center rounded-full bg-background/95 text-foreground/80 ring-1 ring-foreground/[0.1] shadow opacity-0 group-hover/attachment:opacity-100 focus-visible:opacity-100 transition-opacity hover:text-foreground",children:(0,n.jsx)(tz.XIcon,{className:"h-3 w-3",weight:"bold"})})]})},tQ=()=>{let e=w(),t=S(e=>e.attachments);return 0===t.length?null:(0,n.jsx)("div",{className:"flex flex-wrap items-center gap-2 px-3 pt-3 pb-1 border-b border-foreground/[0.04]",children:t.map((t,r)=>(0,n.jsx)(tX,{attachment:t,onRemove:()=>(0,tL.runAsynchronously)(e.getAttachmentByIndex(r).remove())},t.id))})},t0=()=>{let e=(0,p.useMessage)(e=>"user"===e.role?e.attachments:void 0);return e&&0!==e.length?(0,n.jsx)("div",{className:"flex flex-wrap items-center justify-end gap-2 mb-1.5",children:e.map(e=>(0,n.jsx)(tX,{attachment:e},e.id))}):null},t1=()=>{let e=w(),t=S(e=>e.attachments.length),{toast:r}=(0,o.useToast)(),a=t>=l.MAX_IMAGES_PER_MESSAGE,d=a?`Limit reached (${l.MAX_IMAGES_PER_MESSAGE}/${l.MAX_IMAGES_PER_MESSAGE})`:`Attach image (${t}/${l.MAX_IMAGES_PER_MESSAGE})`;return(0,n.jsx)(i.TooltipIconButton,{tooltip:d,side:"top",onClick:()=>{let t=u(e.getState().attachments.length+1);if(!t.ok)return void r({variant:"destructive",description:t.reason});let n=document.createElement("input");n.type="file",n.accept="image/*",n.multiple=!0,n.hidden=!0,document.body.appendChild(n),n.onchange=t=>{let i=t.target.files;if(i&&i.length>0){let t=e.getState().attachments.length,n=Math.max(0,l.MAX_IMAGES_PER_MESSAGE-t),a=Array.from(i),o=a.slice(0,n),s=u(t+a.length);s.ok||r({variant:"destructive",description:s.reason}),(0,tL.runAsynchronously)((async()=>{for(let t of o){if(e.getState().attachments.length>=l.MAX_IMAGES_PER_MESSAGE)break;try{await e.addAttachment(t)}catch(e){r({variant:"destructive",description:e instanceof Error?e.message:`Failed to attach "${t.name}".`})}}})())}document.body.removeChild(n)},n.oncancel=()=>{(!n.files||0===n.files.length)&&n.parentNode&&document.body.removeChild(n)},n.click()},className:(0,s.cn)("h-7 w-7 rounded-lg text-muted-foreground hover:bg-foreground/[0.05] hover:text-foreground",a&&"text-muted-foreground/70"),children:(0,n.jsx)(tj.ImageIcon,{className:"h-[15px] w-[15px]",weight:"regular"})})},t4="placeholder:text-muted-foreground/60 max-h-32 w-full resize-none border-none bg-transparent px-4 py-3 text-sm outline-none focus:ring-0 disabled:cursor-not-allowed leading-relaxed",t6=({prefix:e,suffixes:t,typeSpeed:r,deleteSpeed:i,pauseAfterType:a,pauseAfterDelete:o,autoFocus:s=!0})=>{let[l,u]=(0,c.useState)(""),d=(0,c.useRef)({suffixIndex:0,charIndex:0,phase:"typing"});return(0,c.useEffect)(()=>{let e;return e=setTimeout(function n(){let s=d.current,l=t[s.suffixIndex%t.length];switch(s.phase){case"typing":s.charIndex<l.length?(s.charIndex++,u(l.slice(0,s.charIndex)),e=setTimeout(n,r)):(s.phase="pausing",e=setTimeout(n,a));break;case"pausing":s.phase="deleting",e=setTimeout(n,i);break;case"deleting":s.charIndex>0?(s.charIndex--,u(l.slice(0,s.charIndex)),e=setTimeout(n,i)):(s.phase="waiting",e=setTimeout(n,o));break;case"waiting":s.suffixIndex=(s.suffixIndex+1)%t.length,s.charIndex=0,s.phase="typing",e=setTimeout(n,r)}},500),()=>clearTimeout(e)},[t,r,i,a,o]),(0,n.jsx)(eL.Input,{rows:1,autoFocus:s,placeholder:e+l,className:t4})},t2=({placeholder:e,autoFocus:t=!0})=>(0,n.jsx)(eL.Input,{rows:1,autoFocus:t,placeholder:e??"Describe what you want...",className:t4}),t9=({placeholder:e,autoFocus:t=!0})=>{let r=tV();return(0,n.jsxs)(eL.Root,{className:"group/composer relative flex w-full flex-col rounded-2xl border border-border/20 dark:border-foreground/[0.08] bg-background/95 dark:bg-background/80 shadow-sm ring-1 ring-foreground/[0.04] transition-all duration-150 hover:transition-none focus-within:ring-2 focus-within:ring-blue-500/20 focus-within:border-blue-500/30",children:[r&&(0,n.jsx)(tQ,{}),"object"==typeof e?(0,n.jsx)(t6,{prefix:e.prefix,suffixes:e.suffixes,typeSpeed:e.typeSpeed??70,deleteSpeed:e.deleteSpeed??40,pauseAfterType:e.pauseAfterType??2e3,pauseAfterDelete:e.pauseAfterDelete??400,autoFocus:t}):(0,n.jsx)(t2,{placeholder:e,autoFocus:t}),(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 pb-2.5 gap-2",children:[(0,n.jsx)("div",{className:"flex items-center gap-1",children:r&&(0,n.jsx)(t1,{})}),(0,n.jsx)(t5,{})]})]})},t5=()=>(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(tA.If,{running:!1,children:(0,n.jsx)(eL.Send,{asChild:!0,children:(0,n.jsxs)(a.Button,{size:"sm",className:"rounded-xl h-7 px-3 bg-blue-600 hover:bg-blue-500 text-white shadow-md shadow-blue-500/20 transition-all duration-150 hover:transition-none active:scale-[0.98]",children:[(0,n.jsx)(tU.PaperPlaneRightIcon,{className:"mr-1.5 h-3 w-3",weight:"bold"}),(0,n.jsx)("span",{className:"text-[11px] font-semibold",children:"Generate"})]})})}),(0,n.jsx)(tA.If,{running:!0,children:(0,n.jsx)(eL.Cancel,{asChild:!0,children:(0,n.jsxs)(a.Button,{size:"sm",variant:"outline",className:"rounded-xl h-7 px-3 border-orange-500/30 bg-orange-500/10 text-orange-600 dark:text-orange-400 hover:bg-orange-500/20",children:[(0,n.jsx)(na,{className:"mr-1.5 h-3 w-3"}),(0,n.jsx)("span",{className:"text-[11px] font-semibold",children:"Stop"})]})})})]}),t3=()=>(0,n.jsxs)(tp.Root,{className:"group flex flex-col items-end w-full max-w-[var(--thread-max-width)] py-3 gap-1.5",children:[(0,n.jsx)(t0,{}),(0,n.jsxs)("div",{className:"flex items-start gap-2 justify-end w-full",children:[(0,n.jsx)(t8,{}),(0,n.jsx)(tp.If,{hasContent:!0,children:(0,n.jsx)("div",{className:"bg-foreground/[0.05] text-foreground max-w-[90%] break-words rounded-2xl px-3.5 py-2.5 text-sm ring-1 ring-foreground/[0.06]",children:(0,n.jsx)(tp.Content,{})})})]}),(0,n.jsx)(nr,{className:"justify-end mr-1"})]}),t8=()=>(0,c.useContext)(tZ)?null:(0,n.jsx)(D.Root,{hideWhenRunning:!0,autohide:"not-last",className:"flex items-center gap-0.5 self-center opacity-0 group-hover:opacity-100 transition-opacity duration-150",children:(0,n.jsx)(D.Edit,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Edit",className:"h-7 w-7 rounded-md hover:bg-foreground/[0.05]",children:(0,n.jsx)(tN.PencilSimpleIcon,{size:13})})})}),t7=()=>{let e=tV(),t=(0,c.useContext)(tK),r=w(),i=y(),{toast:s}=(0,o.useToast)(),l=(0,p.useMessage)(e=>e.id),u=(0,p.useMessage)(e=>e.parentId??null),d=(0,p.useMessage)(e=>e.role),m=(0,p.useMessage)(e=>e.content),h=(0,p.useMessage)(e=>e.attachments??[]),f=S(e=>e.text),g=S(e=>e.attachments),v=f!==(0,c.useMemo)(()=>m.filter(e=>"text"===e.type&&"string"==typeof e.text).map(e=>e.text??"").join(""),[m])||g.length!==h.length||g.some((e,t)=>e.id!==h[t].id),b=async()=>{if(v)try{let e=r.getState(),n=await tY(e.attachments,t);i.append({parentId:u,sourceId:l,role:d,content:e.text?[{type:"text",text:e.text}]:[],attachments:n,metadata:{custom:{}},runConfig:e.runConfig}),r.cancel()}catch(e){s({variant:"destructive",description:e instanceof Error?e.message:"Failed to send edited message."})}};return(0,n.jsxs)(eL.Root,{className:"bg-foreground/[0.03] my-3 flex w-full max-w-[var(--thread-max-width)] flex-col gap-2 rounded-xl ring-1 ring-foreground/[0.08]",children:[e&&(0,n.jsx)(tQ,{}),(0,n.jsx)(eL.Input,{className:"text-foreground flex min-h-[2.5rem] w-full resize-none bg-transparent p-3 pb-0 text-sm outline-none"}),(0,n.jsxs)("div",{className:"px-3 pb-2.5 flex items-center justify-between gap-2",children:[(0,n.jsx)("div",{className:"flex items-center gap-1",children:e&&(0,n.jsx)(t1,{})}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(eL.Cancel,{asChild:!0,children:(0,n.jsx)(a.Button,{variant:"ghost",size:"sm",className:"h-7 px-2.5 text-xs",children:"Cancel"})}),(0,n.jsx)(a.Button,{size:"sm",className:"h-7 px-3 text-xs bg-blue-600 hover:bg-blue-500",disabled:!v,onClick:b,children:"Send"})]})]})]})},ne=()=>{let e=(0,c.useContext)(tB),t=(0,c.useContext)(tF)??{Text:r.MarkdownText};return(0,n.jsxs)(tp.Root,{className:"flex flex-col relative w-full max-w-[var(--thread-max-width)] py-4 group",children:[(0,n.jsxs)("div",{className:"flex items-start gap-3",children:[(0,n.jsx)("div",{className:"w-7 h-7 rounded-full bg-gradient-to-br from-blue-500/20 to-blue-600/10 flex items-center justify-center shrink-0 ring-1 ring-blue-500/20 shadow-sm",children:e?(0,n.jsx)("div",{className:"w-2.5 h-2.5 rounded-full bg-blue-500"}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(tA.If,{running:!0,children:(0,n.jsx)("div",{className:"w-2.5 h-2.5 rounded-full bg-blue-500 animate-pulse"})}),(0,n.jsx)(tA.If,{running:!1,children:(0,n.jsx)("div",{className:"w-2.5 h-2.5 rounded-full bg-blue-500"})})]})}),(0,n.jsxs)("div",{className:"flex-1 min-w-0 space-y-2",children:[(0,n.jsx)("div",{className:"text-foreground break-words leading-relaxed text-sm",children:(0,n.jsx)(tp.Content,{components:t})}),(0,n.jsx)(nt,{}),(0,n.jsx)(nn,{})]})]}),(0,n.jsx)(nr,{className:"mt-1.5 ml-10"})]})},nt=()=>(0,n.jsx)(tp.Error,{children:(0,n.jsxs)("div",{className:"mt-3 rounded-xl bg-destructive/5 border border-destructive/15 p-4 flex flex-col gap-3 items-center text-center",children:[(0,n.jsx)("div",{className:"w-10 h-10 rounded-full bg-destructive/10 flex items-center justify-center ring-1 ring-destructive/20",children:(0,n.jsx)(tM.WarningCircle,{className:"w-5 h-5 text-destructive",weight:"fill"})}),(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("p",{className:"text-sm font-semibold text-foreground",children:"Generation Failed"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground max-w-[220px] leading-relaxed",children:"Something went wrong while generating your design. Please try again."})]}),(0,n.jsx)(D.Root,{className:"w-full mt-1",children:(0,n.jsx)(D.Reload,{asChild:!0,children:(0,n.jsxs)(a.Button,{variant:"outline",size:"sm",className:"w-full h-8 gap-2 rounded-lg border-destructive/20 bg-destructive/5 text-destructive hover:bg-destructive/10 hover:text-destructive transition-all duration-150 hover:transition-none",children:[(0,n.jsx)(tP.ArrowClockwiseIcon,{className:"w-3.5 h-3.5"}),(0,n.jsx)("span",{className:"text-xs font-medium",children:"Retry Generation"})]})})})]})}),nn=()=>(0,c.useContext)(tZ)?null:(0,n.jsxs)(D.Root,{hideWhenRunning:!0,autohide:"not-last",autohideFloat:"single-branch",className:"text-muted-foreground flex gap-0.5 -ml-1 opacity-0 group-hover:opacity-100 transition-opacity duration-150 data-[floating]:bg-background/95 data-[floating]:backdrop-blur-sm data-[floating]:absolute data-[floating]:rounded-lg data-[floating]:ring-1 data-[floating]:ring-foreground/[0.06] data-[floating]:p-1 data-[floating]:shadow-md",children:[(0,n.jsx)(D.Copy,{asChild:!0,children:(0,n.jsxs)(i.TooltipIconButton,{tooltip:"Copy",className:"h-7 w-7 rounded-md !text-muted-foreground hover:bg-foreground/[0.05] hover:!text-foreground",children:[(0,n.jsx)(tp.If,{copied:!0,children:(0,n.jsx)(tR.CheckIcon,{size:14,className:"text-green-500"})}),(0,n.jsx)(tp.If,{copied:!1,children:(0,n.jsx)(tD.CopyIcon,{size:14})})]})}),(0,n.jsx)(D.Reload,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Regenerate",className:"h-7 w-7 rounded-md !text-muted-foreground hover:bg-foreground/[0.05] hover:!text-foreground",children:(0,n.jsx)(tP.ArrowClockwiseIcon,{size:14})})})]}),nr=({className:e,...t})=>(0,n.jsxs)(F.Root,{hideWhenSingleBranch:!0,className:(0,s.cn)("text-muted-foreground inline-flex items-center gap-0.5 text-[11px]",e),...t,children:[(0,n.jsx)(F.Previous,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Previous",className:"h-6 w-6 rounded-md hover:bg-foreground/[0.05]",children:(0,n.jsx)(t$.CaretLeftIcon,{size:12})})}),(0,n.jsxs)("span",{className:"font-medium tabular-nums px-1",children:[(0,n.jsx)(F.Number,{})," / ",(0,n.jsx)(F.Count,{})]}),(0,n.jsx)(F.Next,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Next",className:"h-6 w-6 rounded-md hover:bg-foreground/[0.05]",children:(0,n.jsx)(tO.CaretRightIcon,{size:12})})})]}),ni=({messages:e})=>{let[t,r]=(0,c.useState)(0),i=(0,c.useRef)(e);return(0,c.useEffect)(()=>{i.current!==e&&(i.current=e,r(0))},[e]),(0,c.useEffect)(()=>{let t=setInterval(()=>{r(t=>(t+1)%e.length)},1200);return()=>clearInterval(t)},[e.length]),(0,n.jsx)("div",{className:"flex w-full max-w-[var(--thread-max-width)] py-3",children:(0,n.jsxs)("div",{className:"flex items-center gap-3 ml-10",children:[(0,n.jsxs)("div",{className:"flex gap-1",children:[(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse"}),(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse",style:{animationDelay:"150ms"}}),(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse",style:{animationDelay:"300ms"}})]}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground transition-opacity duration-300",children:e[t]})]})})},na=({className:e})=>(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor",width:"16",height:"16",className:e,children:(0,n.jsx)("rect",{width:"10",height:"10",x:"3",y:"3",rx:"2"})});e.s(["Thread",0,({useOffWhiteLightMode:e=!1,composerPlaceholder:t,hideMessageActions:r=!1,runningStatusMessages:i,composerAttachments:a=!1,attachmentAdapter:o,welcome:s,assistantContentComponents:l,autoFocusComposer:u=!0})=>(0,n.jsx)(tZ.Provider,{value:r,children:(0,n.jsx)(tB.Provider,{value:!!i,children:(0,n.jsx)(tF.Provider,{value:l,children:(0,n.jsx)(tK.Provider,{value:o??null,children:(0,n.jsx)(tH.Provider,{value:a,children:(0,n.jsx)(tA.Root,{className:"box-border flex h-0 flex-grow flex-col overflow-hidden bg-transparent",style:{"--thread-max-width":"100%"},children:(0,n.jsxs)(tA.Viewport,{className:"flex h-full flex-col items-center overflow-y-auto scroll-smooth px-3 bg-inherit",children:[s?(0,n.jsx)(tA.Empty,{children:s}):(0,n.jsx)(tq,{}),(0,n.jsx)(tA.Messages,{components:{UserMessage:t3,EditComposer:t7,AssistantMessage:ne}}),i&&(0,n.jsx)(tA.If,{running:!0,children:(0,n.jsx)(ni,{messages:i})}),(0,n.jsx)(tA.If,{empty:!1,children:(0,n.jsx)("div",{className:"min-h-6 flex-grow"})}),(0,n.jsxs)("div",{className:"sticky bottom-0 mt-2 flex w-full max-w-[var(--thread-max-width)] flex-col items-center justify-end pt-6 pb-3",children:[(0,n.jsx)(tG,{}),(0,n.jsx)(t9,{placeholder:t,autoFocus:u})]})]})})})})})})})],775760)},181407,314921,e=>{"use strict";var t=e.i(94283),n=e.i(915629),r=e.i(520629),i=e.i(279377),a=e.i(618178),o=e.i(629962),s=e.i(240461),l=e.i(592426),u=({runtime:e,children:n})=>{let i=(e=>{let[n]=(0,t.useState)(()=>(0,r.create)(()=>e));return(0,t.useEffect)(()=>{(0,s.ensureBinding)(e),(0,a.writableStore)(n).setState(e,!0)},[e,n]),n})(e),[u]=(0,t.useState)(()=>({useThreadListItemRuntime:i}));return(0,l.jsx)(o.ThreadListItemContext.Provider,{value:u,children:n})};e.s(["ThreadListItemRuntimeProvider",()=>u],314921);var d=e.i(610551),c=({children:e,listItemRuntime:n,runtime:o})=>{let c=(e=>{let[n]=(0,t.useState)(()=>(0,r.create)(()=>e));return(0,t.useEffect)(()=>{(0,s.ensureBinding)(e),(0,s.ensureBinding)(e.composer),(0,a.writableStore)(n).setState(e,!0)},[e,n]),n})(o),[p]=(0,t.useState)(()=>({useThreadRuntime:c}));return(0,l.jsx)(u,{runtime:n,children:(0,l.jsx)(i.ThreadContext.Provider,{value:p,children:(0,l.jsx)(d.ThreadViewportProvider,{children:e})})})},p=(0,t.memo)(({children:e,runtime:i})=>{let o=(e=>{let[n]=(0,t.useState)(()=>(0,r.create)(()=>e));return(0,t.useEffect)(()=>{(0,s.ensureBinding)(e),(0,s.ensureBinding)(e.threads),(0,a.writableStore)(n).setState(e,!0)},[e,n]),n})(i),u=(0,t.useMemo)(()=>(0,r.create)(e=>{let t=new Map;return Object.freeze({getToolUI:e=>{let n=t.get(e);return n?.at(-1)||null},setToolUI:(n,r)=>{let i=t.get(n);return i||(i=[],t.set(n,i)),i.push(r),e({}),()=>{let t=i.indexOf(r);-1!==t&&i.splice(t,1),t===i.length&&e({})}}})}),[]),[d]=(0,t.useState)(()=>({useToolUIs:u,useAssistantRuntime:o})),p=i._core?.RenderComponent;return(0,l.jsxs)(n.AssistantContext.Provider,{value:d,children:[p&&(0,l.jsx)(p,{}),(0,l.jsx)(c,{runtime:i.thread,listItemRuntime:i.threads.mainItem,children:e})]})});e.s(["AssistantRuntimeProvider",()=>p],181407)},681140,e=>{"use strict";var t,n=e.i(94283),r=e.i(494093),i=e.i(94693),a=e.i(579969),o=(e,t)=>void 0===t?e.status?.type==="requires-action"&&"tool-calls"===e.status.reason&&e.content.every(e=>"tool-call"!==e.type||!!e.result):e.status?.type==="requires-action"&&"tool-calls"===e.status.reason&&e.content.every(e=>"tool-call"!==e.type||!!e.result||!t.includes(e.toolName)),s=e.i(174700),l=e.i(879021),u=e.i(883846),d=e.i(135185),c=class extends d.BaseComposerRuntimeCore{constructor(e,t,{parentId:n,message:r}){super(),this.runtime=e,this.endEditCallback=t,this._parentId=n,this._sourceId=r.id,this._previousText=(0,u.getThreadMessageText)(r),this.setText(this._previousText),this.setRole(r.role),this.setAttachments(r.attachments??[]),this._nonTextParts=r.content.filter(e=>"text"!==e.type),this.setRunConfig({...e.composer.runConfig})}get canCancel(){return!0}getAttachmentAdapter(){return this.runtime.adapters?.attachments}_nonTextParts;_previousText;_parentId;_sourceId;async handleSend(e){(0,u.getThreadMessageText)(e)!==this._previousText&&this.runtime.append({...e,content:[...e.content,...this._nonTextParts],parentId:this._parentId,sourceId:this._sourceId}),this.handleCancel()}handleCancel(){this.endEditCallback(),this._notifySubscribers()}},p=class{constructor(e){this._contextProvider=e}_subscriptions=new Set;_isInitialized=!1;repository=new s.MessageRepository;get messages(){return this.repository.getMessages()}get state(){let e;for(let t of this.messages)if("assistant"===t.role){e=t;break}return e?.metadata.unstable_state??null}composer=new l.DefaultThreadComposerRuntimeCore(this);getModelContext(){return this._contextProvider.getModelContext()}_editComposers=new Map;getEditComposer(e){return this._editComposers.get(e)}beginEdit(e){if(this._editComposers.has(e))throw Error("Edit already in progress");this._editComposers.set(e,new c(this,()=>this._editComposers.delete(e),this.repository.getMessage(e))),this._notifySubscribers()}getMessageById(e){return this.repository.getMessage(e)}getBranches(e){return this.repository.getBranches(e)}switchToBranch(e){this.repository.switchToBranch(e),this._notifySubscribers()}_notifySubscribers(){for(let e of this._subscriptions)e()}_notifyEventSubscribers(e){let t=this._eventSubscribers.get(e);if(t)for(let e of t)e()}subscribe(e){return this._subscriptions.add(e),()=>this._subscriptions.delete(e)}_submittedFeedback={};getSubmittedFeedback(e){return this._submittedFeedback[e]}submitFeedback({messageId:e,type:t}){let n=this.adapters?.feedback;if(!n)throw Error("Feedback adapter not configured");let{message:r}=this.repository.getMessage(e);n.submit({message:r,type:t}),this._submittedFeedback[e]={type:t},this._notifySubscribers()}_stopSpeaking;speech;speak(e){let t=this.adapters?.speech;if(!t)throw Error("Speech adapter not configured");let{message:n}=this.repository.getMessage(e);this._stopSpeaking?.();let r=t.speak((0,u.getThreadMessageText)(n)),i=r.subscribe(()=>{"ended"===r.status.type?(this._stopSpeaking=void 0,this.speech=void 0):this.speech={messageId:e,status:r.status},this._notifySubscribers()});this.speech={messageId:e,status:r.status},this._notifySubscribers(),this._stopSpeaking=()=>{r.cancel(),i(),this.speech=void 0,this._stopSpeaking=void 0}}stopSpeaking(){if(!this._stopSpeaking)throw Error("No message is being spoken");this._stopSpeaking(),this._notifySubscribers()}ensureInitialized(){this._isInitialized||(this._isInitialized=!0,this._notifyEventSubscribers("initialize"))}export(){return this.repository.export()}import(e){this.ensureInitialized(),this.repository.clear(),this.repository.import(e),this._notifySubscribers()}_eventSubscribers=new Map;unstable_on(e,t){if("model-context-update"===e)return this._contextProvider.subscribe?.(t)??(()=>{});let n=this._eventSubscribers.get(e);return n?n.add(t):this._eventSubscribers.set(e,new Set([t])),()=>{this._eventSubscribers.get(e).delete(t)}}},m=class extends p{capabilities={switchToBranch:!0,edit:!0,reload:!0,cancel:!0,unstable_copy:!0,speech:!1,attachments:!1,feedback:!1};abortController=null;isDisabled=!1;_suggestions=[];_suggestionsController=null;get suggestions(){return this._suggestions}get adapters(){return this._options.adapters}constructor(e,t){super(e),this.__internal_setOptions(t)}_options;_lastRunConfig={};get extras(){}__internal_setOptions(e){if(this._options===e)return;this._options=e;let t=!1,n=e.adapters?.speech!==void 0;this.capabilities.speech!==n&&(this.capabilities.speech=n,t=!0);let r=e.adapters?.attachments!==void 0;this.capabilities.attachments!==r&&(this.capabilities.attachments=r,t=!0);let i=e.adapters?.feedback!==void 0;this.capabilities.feedback!==i&&(this.capabilities.feedback=i,t=!0),t&&this._notifySubscribers()}_loadPromise;__internal_load(){if(this._loadPromise)return this._loadPromise;let e=this.adapters.history?.load()??Promise.resolve(null);return this._loadPromise=e.then(e=>{if(!e)return;this.repository.import(e),this._notifySubscribers();let t=this.adapters.history?.resume?.bind(this.adapters.history);e.unstable_resume&&t&&this.startRun({parentId:this.repository.headId,sourceId:this.repository.headId,runConfig:this._lastRunConfig},t)}),this._loadPromise}async append(e){this.ensureInitialized();let t=(0,i.fromThreadMessageLike)(e,(0,a.generateId)(),{type:"complete",reason:"unknown"});this.repository.addOrUpdateMessage(e.parentId,t),this._options.adapters.history?.append({parentId:e.parentId,message:t}),e.startRun??"user"===e.role?await this.startRun({parentId:t.id,sourceId:e.sourceId,runConfig:e.runConfig??{}}):(this.repository.resetHead(t.id),this._notifySubscribers())}resumeRun({stream:e,...t}){return this.startRun(t,e)}async startRun({parentId:e,runConfig:t},n){this.ensureInitialized(),this.repository.resetHead(e);let r={id:(0,a.generateId)(),role:"assistant",status:{type:"running"},content:[],metadata:{unstable_state:this.state,unstable_annotations:[],unstable_data:[],steps:[],custom:{}},createdAt:new Date};this._notifyEventSubscribers("run-start");try{this._suggestions=[],this._suggestionsController?.abort(),this._suggestionsController=null;do r=await this.performRoundtrip(e,r,t,n),n=void 0;while(o(r,this._options.unstable_humanToolNames))}finally{this._notifyEventSubscribers("run-end")}this._suggestionsController=new AbortController;let i=this._suggestionsController.signal;if(this.adapters.suggestion&&r.status?.type!=="requires-action"){let e=this.adapters.suggestion?.generate({messages:this.messages});if(Symbol.asyncIterator in e)for await(let t of e){if(i.aborted)break;this._suggestions=t}else{let t=await e;if(i.aborted)return;this._suggestions=t}}}async performRoundtrip(e,t,n,r){let i=this.repository.getMessages();this.abortController?.abort(),this.abortController=new AbortController;let a=t.content,o=t.metadata?.unstable_annotations,s=t.metadata?.unstable_data,l=t.metadata?.steps,u=t.metadata?.custom,d=n=>{let r=n.metadata?.steps,i=r?[...l??[],...r]:void 0,d=n.metadata?.unstable_annotations,c=n.metadata?.unstable_data,p=d?[...o??[],...d]:void 0,m=c?[...s??[],...c]:void 0;t={...t,...n.content?{content:[...a,...n.content??[]]}:void 0,status:n.status??t.status,...n.metadata?{metadata:{...t.metadata,...n.metadata.unstable_state?{unstable_state:n.metadata.unstable_state}:void 0,...p?{unstable_annotations:p}:void 0,...m?{unstable_data:m}:void 0,...i?{steps:i}:void 0,...n.metadata?.custom?{custom:{...u??{},...n.metadata.custom}}:void 0}}:void 0},this.repository.addOrUpdateMessage(e,t),this._notifySubscribers()},c=this._options.maxSteps??2;if((t.metadata?.steps?.length??0)>=c)return d({status:{type:"incomplete",reason:"tool-calls"}}),t;d({status:{type:"running"}});try{this._lastRunConfig=n??{};let e=this.getModelContext();r=r??this.adapters.chatModel.run.bind(this.adapters.chatModel);let a=this.abortController.signal,o=r({messages:i,runConfig:this._lastRunConfig,abortSignal:a,context:e,config:e,unstable_assistantMessageId:t.id,unstable_getMessage:()=>t});if(Symbol.asyncIterator in o)for await(let e of o){if(a.aborted){d({status:{type:"incomplete",reason:"cancelled"}});break}d(e)}else d(await o);"running"===t.status.type&&d({status:{type:"complete",reason:"unknown"}})}catch(e){if(e instanceof Error&&"AbortError"===e.name)d({status:{type:"incomplete",reason:"cancelled"}});else throw d({status:{type:"incomplete",reason:"error",error:e instanceof Error?e.message:`[${typeof e}] ${new String(e).toString()}`}}),e}finally{this.abortController=null,("complete"===t.status.type||"incomplete"===t.status.type)&&await this._options.adapters.history?.append({parentId:e,message:t})}return t}detach(){this.abortController?.abort({detach:!0}),this.abortController=null}cancelRun(){this.abortController?.abort({detach:!1}),this.abortController=null}addToolResult({messageId:e,toolCallId:t,result:n,isError:r,artifact:i}){let a=this.repository.getMessage(e),{parentId:s}=a,{message:l}=a;if("assistant"!==l.role)throw Error("Tried to add tool result to non-assistant message");let u=!1,d=!1,c=l.content.map(e=>"tool-call"!==e.type||e.toolCallId!==t?e:(d=!0,e.result||(u=!0),{...e,result:n,artifact:i,isError:r}));if(!d)throw Error("Tried to add tool result to non-existing tool call");l={...l,content:c},this.repository.addOrUpdateMessage(s,l),u&&o(l,this._options.unstable_humanToolNames)&&this.performRoundtrip(s,l,this._lastRunConfig)}},h=e.i(163298),f=Object.freeze([]),g=class extends h.BaseSubscribable{_mainThread;constructor(e){super(),this._mainThread=e()}getMainThreadRuntimeCore(){return this._mainThread}get newThreadId(){throw Error("Method not implemented.")}get threadIds(){throw f}get archivedThreadIds(){throw f}get mainThreadId(){return"__DEFAULT_ID__"}getThreadRuntimeCore(){throw Error("Method not implemented.")}getLoadThreadsPromise(){throw Error("Method not implemented.")}getItemById(e){if(e===this.mainThreadId)return{status:"regular",threadId:this.mainThreadId,remoteId:this.mainThreadId,externalId:void 0,title:void 0,isMain:!0};throw Error("Method not implemented")}async switchToThread(){throw Error("Method not implemented.")}switchToNewThread(){throw Error("Method not implemented.")}rename(){throw Error("Method not implemented.")}archive(){throw Error("Method not implemented.")}detach(){throw Error("Method not implemented.")}unarchive(){throw Error("Method not implemented.")}delete(){throw Error("Method not implemented.")}initialize(){throw Error("Method not implemented.")}generateTitle(){throw Error("Method not implemented.")}},y=class extends r.BaseAssistantRuntimeCore{threads;Provider=void 0;_options;constructor(e,t){super(),this._options=e,this.threads=new g(()=>new m(this._contextProvider,this._options)),t&&this.threads.getMainThreadRuntimeCore().import(s.ExportedMessageRepository.fromArray(t))}},v=e.i(592426),b=(0,n.createContext)(null),x=({adapters:e,children:t})=>{let r=(0,n.useContext)(b);return(0,v.jsx)(b.Provider,{value:{...r,...e},children:t})},_=r,k=e.i(520629),w=e.i(915629),S=e.i(314921),I=e.i(629962),T=h,C=class extends T.BaseSubscribable{useRuntimeHook;instances=new Map;useAliveThreadsKeysChanged=(0,k.create)(()=>({}));constructor(e){super(),this.useRuntimeHook=(0,k.create)(()=>({useRuntime:e}))}startThreadRuntime(e){return this.instances.has(e)||(this.instances.set(e,{}),this.useAliveThreadsKeysChanged.setState({},!0)),new Promise((t,n)=>{let r=()=>{let r=this.instances.get(e);if(r){if(!r.runtime)return;i(),t(r.runtime)}else i(),n(Error("Thread was deleted before runtime was started"))},i=this.subscribe(r);r()})}getThreadRuntimeCore(e){let t=this.instances.get(e);if(!t)throw Error("getThreadRuntimeCore not found. This is a bug in assistant-ui.");return t.runtime}stopThreadRuntime(e){this.instances.delete(e),this.useAliveThreadsKeysChanged.setState({},!0)}setRuntimeHook(e){this.useRuntimeHook.getState().useRuntime!==e&&this.useRuntimeHook.setState({useRuntime:e},!0)}_InnerActiveThreadProvider=()=>{let{id:e}=(0,I.useThreadListItem)(),{useRuntime:t}=this.useRuntimeHook(),r=t(),i=r.thread.__internal_threadBinding,a=(0,n.useCallback)(()=>{let t=this.instances.get(e);if(!t)throw Error("Thread not found. This is a bug in assistant-ui.");t.runtime=i.getState(),o&&this._notifySubscribers()},[e,i]),o=(0,n.useRef)(!1);o.current||a(),(0,n.useEffect)(()=>(o.current=!0,a(),i.outerSubscribe(a)),[i,a]);let s=(0,I.useThreadListItemRuntime)();return(0,n.useEffect)(()=>r.threads.main.unstable_on("initialize",()=>{if("new"===s.getState().status){s.initialize();let e=r.thread.unstable_on("run-end",()=>{e(),s.generateTitle()})}}),[r,s]),null};_OuterActiveThreadProvider=(0,n.memo)(({threadId:e,provider:t})=>{let r=(0,w.useAssistantRuntime)(),i=(0,n.useMemo)(()=>r.threads.getItemById(e),[r,e]);return(0,v.jsx)(S.ThreadListItemRuntimeProvider,{runtime:i,children:(0,v.jsx)(t,{children:(0,v.jsx)(this._InnerActiveThreadProvider,{})})})});__internal_RenderThreadRuntimes=({provider:e})=>(this.useAliveThreadsKeysChanged(),Array.from(this.instances.keys()).map(t=>(0,v.jsx)(this._OuterActiveThreadProvider,{threadId:t,provider:e},t)))},A=h,P=Error("This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead."),E={getMessageById(){},getBranches:()=>[],switchToBranch(){throw P},append(){throw P},startRun(){throw P},resumeRun(){throw P},cancelRun(){throw P},addToolResult(){throw P},speak(){throw P},stopSpeaking(){throw P},getSubmittedFeedback(){},submitFeedback(){throw P},getModelContext:()=>({}),composer:{attachments:[],getAttachmentAccept:()=>"*",async addAttachment(){throw P},async removeAttachment(){throw P},isEditing:!1,canCancel:!1,isEmpty:!0,text:"",setText(){throw P},role:"user",setRole(){throw P},runConfig:{},setRunConfig(){throw P},async reset(){},async clearAttachments(){},send(){throw P},cancel(){},subscribe:()=>()=>{},unstable_on:()=>()=>{}},getEditComposer(){},beginEdit(){throw P},speech:void 0,capabilities:{switchToBranch:!1,edit:!1,reload:!1,cancel:!1,unstable_copy:!1,speech:!1,attachments:!1,feedback:!1},isDisabled:!0,messages:[],state:null,suggestions:[],extras:void 0,subscribe:()=>()=>{},import(){throw P},export:()=>({messages:[]}),unstable_on:()=>()=>{}},$=h,O=(e,t,n)=>n.reduce((e,n)=>n?.(e,t)??e,e),R=class extends $.BaseSubscribable{_pendingTransforms=[];_baseValue;_cachedValue;constructor(e){super(),this._baseValue=e,this._cachedValue=e}_updateState(){this._cachedValue=this._pendingTransforms.reduce((e,t)=>O(e,t.task,[t.loading,t.optimistic]),this._baseValue),this._notifySubscribers()}get baseValue(){return this._baseValue}get value(){return this._cachedValue}update(e){this._baseValue=e,this._updateState()}async optimisticUpdate(e){let t=e.execute(),n={...e,task:t};try{this._pendingTransforms.push(n),this._updateState();let r=await t;return this._baseValue=O(this._baseValue,r,[e.optimistic,e.then]),r}finally{let e=this._pendingTransforms.indexOf(n);e>-1&&this._pendingTransforms.splice(e,1),this._updateState()}}},D=(0,e.i(850769).customAlphabet)("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7),j=e.i(938178),U=class e{_state;constructor(e=null){this._state=e}get state(){return this._state}append(t){this._state=t.reduce((t,n)=>e.apply(t,n),this._state)}static apply(t,n){let r=n.type;switch(r){case"set":return e.updatePath(t,n.path,()=>n.value);case"append-text":return e.updatePath(t,n.path,e=>{if("string"!=typeof e)throw Error(`Expected string at path [${n.path.join(", ")}]`);return e+n.value});default:throw Error(`Invalid operation type: ${r}`)}}static updatePath(e,t,n){if(0===t.length)return n(e);if("object"!=typeof(e??={}))throw Error(`Invalid path: [${t.join(", ")}]`);let[r,...i]=t;if(Array.isArray(e)){let a=Number(r);if(isNaN(a))throw Error(`Expected array index at [${t.join(", ")}]`);if(a>e.length||a<0)throw Error("Insert array index out of bounds");let o=[...e];return o[a]=this.updatePath(o[a],i,n),o}let a={...e};return a[r]=this.updatePath(a[r],i,n),a}},N=(e,t,n)=>{if(0===e.parts.length)throw Error("No parts available to update.");if(1!==t.path.length)throw Error("Nested paths are not supported yet.");let r=t.path[0],i=n(e.parts[r]);return{...e,parts:[...e.parts.slice(0,r),i,...e.parts.slice(r+1)],get content(){return this.parts}}},M=(e,t)=>{let n=z(t);return{...e,status:n}},z=e=>"tool-calls"===e.finishReason?{type:"requires-action",reason:"tool-calls"}:"stop"===e.finishReason||"unknown"===e.finishReason?{type:"complete",reason:e.finishReason}:{type:"incomplete",reason:e.finishReason},L=class extends TransformStream{constructor({initialMessage:e}={}){let t=e??{role:"assistant",status:{type:"running"},parts:[],get content(){return this.parts},metadata:{unstable_state:null,unstable_data:[],unstable_annotations:[],steps:[],custom:{}}};super({transform(e,n){var r,i;let a=e.type;switch(a){case"part-start":t=((e,t)=>{let n=t.part;if("text"===n.type||"reasoning"===n.type){let t={type:n.type,text:"",status:{type:"running"}};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}if("tool-call"===n.type){let t={type:"tool-call",state:"partial-call",status:{type:"running",isArgsComplete:!1},toolCallId:n.toolCallId,toolName:n.toolName,argsText:"",args:{}};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}if("source"===n.type){let t={type:"source",sourceType:n.sourceType,id:n.id,url:n.url,...n.title?{title:n.title}:void 0};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}if("file"===n.type){let t={type:"file",mimeType:n.mimeType,data:n.data};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}throw Error(`Unsupported part type: ${n.type}`)})(t,e);break;case"tool-call-args-text-finish":t=N(t,e,e=>{if("tool-call"!==e.type)throw Error("Last is not a tool call");return"partial-call"!==e.state?e:{...e,state:"call"}});break;case"part-finish":t=N(t,e,e=>({...e,status:{type:"complete",reason:"unknown"}}));break;case"text-delta":t=N(t,e,t=>{if("text"===t.type||"reasoning"===t.type)return{...t,text:t.text+e.textDelta};if("tool-call"===t.type){let n=t.argsText+e.textDelta,r=(0,j.parsePartialJsonObject)(n)??t.args;return{...t,argsText:n,args:r}}throw Error("text-delta received but part is neither text nor tool-call")});break;case"result":t=N(t,e,t=>{if("tool-call"===t.type)return{...t,state:"result",...void 0!==e.artifact?{artifact:e.artifact}:{},result:e.result,isError:e.isError??!1,status:{type:"complete",reason:"stop"}};throw Error("Result chunk received but part is not a tool-call")});break;case"message-finish":t=M(t,e);break;case"annotations":let o;t={...o=t,metadata:{...o.metadata,unstable_annotations:[...o.metadata.unstable_annotations,...e.annotations]}};break;case"data":let s;t={...s=t,metadata:{...s.metadata,unstable_data:[...s.metadata.unstable_data,...e.data]}};break;case"step-start":let l;t={...l=t,metadata:{...l.metadata,steps:[...l.metadata.steps,{state:"started",messageId:e.messageId}]}};break;case"step-finish":let u,d;d=(u=(r=t).metadata.steps.slice()).length-1,u.length>0&&u[d]?.state==="started"?u[d]={...u[d],state:"finished",finishReason:e.finishReason,usage:e.usage,isContinued:e.isContinued}:u.push({state:"finished",messageId:D(),finishReason:e.finishReason,usage:e.usage,isContinued:e.isContinued}),t={...r,metadata:{...r.metadata,steps:u}};break;case"error":t={...t,status:{type:"incomplete",reason:"error",error:e.error}};break;case"update-state":let c;(c=new U((i=t).metadata.unstable_state)).append(e.operations),t={...i,metadata:{...i.metadata,unstable_state:c.state}};break;default:throw Error(`Unsupported chunk type: ${a}`)}n.enqueue(t)},flush(e){if(t.status?.type==="running"){let n=t.parts?.at(-1)?.type==="tool-call";t=M(t,{type:"message-finish",path:[],finishReason:n?"tool-calls":"unknown",usage:{promptTokens:0,completionTokens:0}}),e.enqueue(t)}}})}},F=class e{constructor(e){this.readable=e,this.readable=e}static fromAssistantStream(t){return new e(t.pipeThrough(new L))}async unstable_result(){let e;for await(let t of this)e=t;return e||{role:"assistant",status:{type:"complete",reason:"unknown"},parts:[],content:[],metadata:{unstable_state:null,unstable_data:[],unstable_annotations:[],steps:[],custom:{}}}}[Symbol.asyncIterator](){let e=this.readable.getReader();return{async next(){let{done:t,value:n}=await e.read();return t?{done:!0,value:void 0}:{done:!1,value:n}}}}tee(){let[t,n]=this.readable.tee();return[new e(t),new e(n)]}},Z=(e,t)=>{let n=e.threadIdMap[t];if(void 0!==n)return e.threadData[n]},B=(e,t,n)=>{let r=Z(e,t);if(!r)return e;let{threadId:i,remoteId:a,status:o}=r;if(o===n)return e;let s={...e};switch(o){case"new":s.newThreadId=void 0;break;case"regular":s.threadIds=s.threadIds.filter(e=>e!==i);break;case"archived":s.archivedThreadIds=s.archivedThreadIds.filter(e=>e!==i);break;default:throw Error(`Unsupported state: ${o}`)}switch(n){case"regular":s.threadIds=[i,...s.threadIds];break;case"archived":s.archivedThreadIds=[i,...s.archivedThreadIds];break;case"deleted":s.threadData=Object.fromEntries(Object.entries(s.threadData).filter(([e])=>e!==i)),s.threadIdMap=Object.fromEntries(Object.entries(s.threadIdMap).filter(([e])=>e!==i&&e!==a));break;default:throw Error(`Unsupported state: ${n}`)}return"deleted"!==n&&(s.threadData={...s.threadData,[i]:{...r,status:n}}),s},H=class extends A.BaseSubscribable{constructor(e,t){super(),this.contextProvider=t,this._state.subscribe(()=>this._notifySubscribers()),this._hookManager=new C(e.runtimeHook),this.useProvider=(0,k.create)(()=>({Provider:e.adapter.unstable_Provider??n.Fragment})),this.__internal_setOptions(e),this.switchToNewThread()}_options;_hookManager;_loadThreadsPromise;_mainThreadId;_state=new R({isLoading:!1,newThreadId:void 0,threadIds:[],archivedThreadIds:[],threadIdMap:{},threadData:{}});getLoadThreadsPromise(){return this._loadThreadsPromise||(this._loadThreadsPromise=this._state.optimisticUpdate({execute:()=>this._options.adapter.list(),loading:e=>({...e,isLoading:!0}),then:(e,t)=>{let n=[],r=[],i={},a={};for(let e of t.threads){switch(e.status){case"regular":n.push(e.remoteId);break;case"archived":r.push(e.remoteId);break;default:{let t=e.status;throw Error(`Unsupported state: ${t}`)}}let t=e.remoteId;i[e.remoteId]=t,a[t]={threadId:e.remoteId,remoteId:e.remoteId,externalId:e.externalId,status:e.status,title:e.title,initializeTask:Promise.resolve({remoteId:e.remoteId,externalId:e.externalId})}}return{...e,threadIds:n,archivedThreadIds:r,threadIdMap:{...e.threadIdMap,...i},threadData:{...e.threadData,...a}}}}).then(()=>{})),this._loadThreadsPromise}useProvider;__internal_setOptions(e){if(this._options===e)return;this._options=e;let t=e.adapter.unstable_Provider??n.Fragment;t!==this.useProvider.getState().Provider&&this.useProvider.setState({Provider:t},!0),this._hookManager.setRuntimeHook(e.runtimeHook)}__internal_load(){this.getLoadThreadsPromise()}get threadIds(){return this._state.value.threadIds}get archivedThreadIds(){return this._state.value.archivedThreadIds}get newThreadId(){return this._state.value.newThreadId}get mainThreadId(){return this._mainThreadId}getMainThreadRuntimeCore(){let e=this._hookManager.getThreadRuntimeCore(this._mainThreadId);return e||E}getThreadRuntimeCore(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");let n=this._hookManager.getThreadRuntimeCore(t.threadId);if(!n)throw Error("Thread not found");return n}getItemById(e){return Z(this._state.value,e)}async switchToThread(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if(this._mainThreadId===t.threadId)return;let n=this._hookManager.startThreadRuntime(t.threadId);void 0!==this.mainThreadId?await n:n.then(()=>this._notifySubscribers()),"archived"===t.status&&await this.unarchive(t.threadId),this._mainThreadId=t.threadId,this._notifySubscribers()}async switchToNewThread(){for(;void 0!==this._state.baseValue.newThreadId&&void 0===this._state.value.newThreadId;)await this._state.waitForUpdate();let e=this._state.value,t=this._state.value.newThreadId;if(void 0===t){do t=`__LOCALID_${(0,a.generateId)()}`;while(e.threadIdMap[t])let n=t;this._state.update({...e,newThreadId:t,threadIdMap:{...e.threadIdMap,[t]:n},threadData:{...e.threadData,[t]:{status:"new",threadId:t}}})}return this.switchToThread(t)}initialize=async e=>{if(this._state.value.newThreadId!==e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("new"===t.status)throw Error("Unexpected new state");return t.initializeTask}return this._state.optimisticUpdate({execute:()=>this._options.adapter.initialize(e),optimistic:t=>B(t,e,"regular"),loading:(t,n)=>({...t,threadData:{...t.threadData,[e]:{...t.threadData[e],initializeTask:n}}}),then:(t,{remoteId:n,externalId:r})=>{let i=Z(t,e);return i?{...t,threadIdMap:{...t.threadIdMap,[n]:e},threadData:{...t.threadData,[e]:{...i,initializeTask:Promise.resolve({remoteId:n,externalId:r}),remoteId:n,externalId:r}}}:t}})};generateTitle=async e=>{let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("new"===t.status)throw Error("Thread is not yet initialized");let{remoteId:n}=await t.initializeTask,r=this.getThreadRuntimeCore(e).messages,i=await this._options.adapter.generateTitle(n,r);for await(let e of F.fromAssistantStream(i)){let n=e.parts.filter(e=>"text"===e.type)[0]?.text,r=this._state.baseValue;this._state.update({...r,threadData:{...r.threadData,[t.threadId]:{...t,title:n}}})}};rename(e,t){let n=this.getItemById(e);if(!n)throw Error("Thread not found");if("new"===n.status)throw Error("Thread is not yet initialized");return this._state.optimisticUpdate({execute:async()=>{let{remoteId:e}=await n.initializeTask;return this._options.adapter.rename(e,t)},optimistic:n=>{let r=Z(n,e);return r?{...n,threadData:{...n.threadData,[r.threadId]:{...r,title:t}}}:n}})}async _ensureThreadIsNotMain(e){if(e===this.newThreadId)throw Error("Cannot ensure new thread is not main");e===this._mainThreadId&&await this.switchToNewThread()}async archive(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("regular"!==t.status)throw Error("Thread is not yet initialized or already archived");return this._state.optimisticUpdate({execute:async()=>{await this._ensureThreadIsNotMain(t.threadId);let{remoteId:e}=await t.initializeTask;return this._options.adapter.archive(e)},optimistic:e=>B(e,t.threadId,"archived")})}unarchive(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("archived"!==t.status)throw Error("Thread is not archived");return this._state.optimisticUpdate({execute:async()=>{try{let{remoteId:e}=await t.initializeTask;return await this._options.adapter.unarchive(e)}catch(e){throw await this._ensureThreadIsNotMain(t.threadId),e}},optimistic:e=>B(e,t.threadId,"regular")})}async delete(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("regular"!==t.status&&"archived"!==t.status)throw Error("Thread is not yet initialized");return this._state.optimisticUpdate({execute:async()=>{await this._ensureThreadIsNotMain(t.threadId);let{remoteId:e}=await t.initializeTask;return await this._options.adapter.delete(e)},optimistic:e=>B(e,t.threadId,"deleted")})}async detach(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("regular"!==t.status&&"archived"!==t.status)throw Error("Thread is not yet initialized");await this._ensureThreadIsNotMain(t.threadId),this._hookManager.stopThreadRuntime(t.threadId)}useBoundIds=(0,k.create)(()=>[]);__internal_RenderComponent=()=>{let e=(0,n.useId)();(0,n.useEffect)(()=>(this.useBoundIds.setState(t=>[...t,e],!0),()=>{this.useBoundIds.setState(t=>t.filter(t=>t!==e),!0)}),[e]);let t=this.useBoundIds(),{Provider:r}=this.useProvider(),i={modelContext:this.contextProvider};return(0===t.length||t[0]===e)&&(0,v.jsx)(x,{adapters:i,children:(0,v.jsx)(this._hookManager.__internal_RenderThreadRuntimes,{provider:r})})}},K=e.i(873908),V=class extends _.BaseAssistantRuntimeCore{threads;constructor(e){super(),this.threads=new H(e,this._contextProvider)}get RenderComponent(){return this.threads.__internal_RenderComponent}},G=e.i(552302),q=e=>{try{let t=e.split(".")[1];if(!t)throw Error("Invalid JWT format");let n=t.replace(/-/g,"+").replace(/_/g,"/");for(;n.length%4!=0;)n+="=";let r=atob(n),i=JSON.parse(r).exp;if(!i||"number"!=typeof i)throw Error('JWT does not contain a valid "exp" field');return 1e3*i}catch(e){throw Error("Unable to determine the token expiry: "+e)}},J=class{strategy="jwt";cachedToken=null;tokenExpiry=null;#e;constructor(e){this.#e=e}async getAuthHeaders(){let e=Date.now();if(this.cachedToken&&this.tokenExpiry&&this.tokenExpiry-e>3e4)return{Authorization:`Bearer ${this.cachedToken}`};let t=await this.#e();return!!t&&(this.cachedToken=t,this.tokenExpiry=q(t),{Authorization:`Bearer ${t}`})}readAuthHeaders(e){let t=e.get("Authorization");if(!t)return;let[n,r]=t.split(" ");if("Bearer"!==n||!r)throw Error("Invalid auth header received");this.cachedToken=r,this.tokenExpiry=q(r)}},W=class{strategy="api-key";#t;#n;#r;constructor(e,t,n){this.#t=e,this.#n=t,this.#r=n}async getAuthHeaders(){return{Authorization:`Bearer ${this.#t}`,"Aui-User-Id":this.#n,"Aui-Workspace-Id":this.#r}}readAuthHeaders(){}},Y="aui:refresh_token",X=class{strategy="anon";baseUrl;jwtStrategy;constructor(e){this.baseUrl=e,this.jwtStrategy=new J(async()=>{let e=Date.now(),t=localStorage.getItem(Y),n=t?JSON.parse(t):void 0;if(n)if(new Date(n.expires_at).getTime()-e>3e4){let e=await fetch(`${this.baseUrl}/v1/auth/tokens/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:n.token})});if(e.ok){let{access_token:t,refresh_token:n}=await e.json();return n&&localStorage.setItem(Y,JSON.stringify(n)),t}}else localStorage.removeItem(Y);let r=await fetch(`${this.baseUrl}/v1/auth/tokens/anonymous`,{method:"POST"});if(!r.ok)return null;let{access_token:i,refresh_token:a}=await r.json();return i&&a?(localStorage.setItem(Y,JSON.stringify(a)),i):null})}async getAuthHeaders(){return this.jwtStrategy.getAuthHeaders()}readAuthHeaders(e){this.jwtStrategy.readAuthHeaders(e)}},Q=class extends Error{constructor(e){super(e),this.name="APIError"}},ee=class{_auth;_baseUrl;constructor(e){if("authToken"in e)this._baseUrl=e.baseUrl,this._auth=new J(e.authToken);else if("apiKey"in e)this._baseUrl="https://backend.assistant-api.com",this._auth=new W(e.apiKey,e.userId,e.workspaceId);else if("anonymous"in e)this._baseUrl=e.baseUrl,this._auth=new X(e.baseUrl);else throw Error("Invalid configuration: Must provide authToken, apiKey, or anonymous configuration")}async initializeAuth(){return!!this._auth.getAuthHeaders()}async makeRawRequest(e,t={}){let n=await this._auth.getAuthHeaders();if(!n)throw Error("Authorization failed");let r={...n,...t.headers,"Content-Type":"application/json"},i=new URLSearchParams;if(t.query)for(let[e,n]of Object.entries(t.query))!1!==n&&(!0===n?i.set(e,"true"):i.set(e,n.toString()));let a=new URL(`${this._baseUrl}/v1${e}`);a.search=i.toString();let o=await fetch(a,{method:t.method??"GET",headers:r,body:t.body?JSON.stringify(t.body):null});if(this._auth.readAuthHeaders(o.headers),!o.ok){let e=await o.text();try{let t=JSON.parse(e);throw new Q(t.message)}catch{throw Error(`Request failed with status ${o.status}, ${e}`)}}return o}async makeRequest(e,t={}){return(await this.makeRawRequest(e,t)).json()}},et=class{constructor(e){this.cloud=e}async create(){return this.cloud.makeRequest("/auth/tokens",{method:"POST"})}},en={toResponse:(e,t)=>new Response(en.toByteStream(e,t),{headers:t.headers??{}}),fromResponse:(e,t)=>en.fromByteStream(e.body,t),toByteStream:(e,t)=>e.pipeThrough(t),fromByteStream:(e,t)=>e.pipeThrough(t)},er=function(){let e,t,n=new Promise((n,r)=>{e=n,t=r});if(!e||!t)throw Error("Failed to create promise");return{promise:n,resolve:e,reject:t}},ei=class{_controller;_isClosed=!1;constructor(e){this._controller=e}append(e){return this._controller.enqueue({type:"text-delta",path:[],textDelta:e}),this}close(){this._isClosed||(this._isClosed=!0,this._controller.enqueue({type:"part-finish",path:[]}),this._controller.close())}},ea=e=>new ReadableStream({start:t=>e.start?.(new ei(t)),pull:t=>e.pull?.(new ei(t)),cancel:t=>e.cancel?.(t)}),eo=()=>{let e;return[ea({start(t){e=t}}),e]},es=class{constructor(e){this._controller=e;const t=ea({start:e=>{this._argsTextController=e}});this._mergeTask=t.pipeTo(new WritableStream({write:e=>{switch(e.type){case"text-delta":this._controller.enqueue(e);break;case"part-finish":this._controller.enqueue({type:"tool-call-args-text-finish",path:[]});break;default:throw Error(`Unexpected chunk type: ${e.type}`)}}}))}_isClosed=!1;_mergeTask;get argsText(){return this._argsTextController}_argsTextController;async setResponse(e){this._argsTextController.close(),await Promise.resolve(),this._controller.enqueue({type:"result",path:[],...void 0!==e.artifact?{artifact:e.artifact}:{},result:e.result,isError:e.isError??!1})}async close(){this._isClosed||(this._isClosed=!0,this._argsTextController.close(),await this._mergeTask,this._controller.enqueue({type:"part-finish",path:[]}),this._controller.close())}},el=class{value=-1;up(){return++this.value}},eu=class extends TransformStream{constructor(e){super({transform(t,n){n.enqueue({...t,path:[e,...t.path]})}})}};TransformStream;var ed=class extends TransformStream{constructor(e){const t=new el,n=new Map;super({transform(r,i){"part-start"===r.type&&0===r.path.length&&n.set(t.up(),e.up());let[a,...o]=r.path;if(void 0===a)return void i.enqueue(r);let s=n.get(a);if(void 0===s)throw Error("Path not found");i.enqueue({...r,path:[s,...o]})}})}},ec=class extends TransformStream{constructor(e){super(),Object.defineProperty(this,"readable",{value:e(super.readable),writable:!1})}},ep=((t=ep||{}).TextDelta="0",t.Data="2",t.Error="3",t.Annotation="8",t.ToolCall="9",t.ToolCallResult="a",t.StartToolCall="b",t.ToolCallArgsTextDelta="c",t.FinishMessage="d",t.FinishStep="e",t.StartStep="f",t.ReasoningDelta="g",t.Source="h",t.RedactedReasoning="i",t.ReasoningSignature="j",t.File="k",t.AuiUpdateStateOperations="aui-state",t);TransformStream,TransformStream,TransformStream,TransformStream,ep.StartToolCall,ep.ToolCall,ep.TextDelta,ep.ReasoningDelta,ep.Source,ep.Error,ep.FinishStep,ep.FinishMessage;var em=class{_merger=(()=>{let e,t,n=[],r=!1,i=i=>{i.promise||(i.promise=i.reader.read().then(({done:a,value:o})=>{i.promise=void 0,a?(n.splice(n.indexOf(i),1),r&&0===n.length&&e.close()):e.enqueue(o),t?.resolve(),t=void 0}).catch(r=>{console.error(r),n.forEach(e=>{e.reader.cancel()}),n.length=0,e.error(r),t?.reject(r),t=void 0}))};return{readable:new ReadableStream({start(t){e=t},pull:()=>(t=er(),n.forEach(e=>{i(e)}),t.promise),cancel(){n.forEach(e=>{e.reader.cancel()}),n.length=0}}),isSealed:()=>r,seal(){r=!0,0===n.length&&e.close()},addStream(e){if(r)throw Error("Cannot add streams after the run callback has settled.");let t={reader:e.getReader()};n.push(t),i(t)},enqueue(e){this.addStream(new ReadableStream({start(t){t.enqueue(e),t.close()}}))}}})();_append;_contentCounter=new el;get __internal_isClosed(){return this._merger.isSealed()}__internal_getReadable(){return this._merger.readable}_closeSubscriber;__internal_subscribeToClose(e){this._closeSubscriber=e}_addPart(e,t){this._append&&(this._append.controller.close(),this._append=void 0),this.enqueue({type:"part-start",part:e,path:[]}),this._merger.addStream(t.pipeThrough(new eu(this._contentCounter.value)))}merge(e){this._merger.addStream(e.pipeThrough(new ed(this._contentCounter)))}appendText(e){this._append?.kind!=="text"&&(this._append={kind:"text",controller:this.addTextPart()}),this._append.controller.append(e)}appendReasoning(e){this._append?.kind!=="reasoning"&&(this._append={kind:"reasoning",controller:this.addReasoningPart()}),this._append.controller.append(e)}addTextPart(){let[e,t]=eo();return this._addPart({type:"text"},e),t}addReasoningPart(){let[e,t]=eo();return this._addPart({type:"reasoning"},e),t}addToolCallPart(e){let t,n,r="string"==typeof e?{toolName:e}:e,i=r.toolName,a=r.toolCallId??D(),[o,s]=[(n={start(e){t=e}},new ReadableStream({start:e=>n.start?.(new es(e)),pull:e=>n.pull?.(new es(e)),cancel:e=>n.cancel?.(e)})),t];return this._addPart({type:"tool-call",toolName:i,toolCallId:a},o),void 0!==r.argsText&&(s.argsText.append(r.argsText),s.argsText.close()),void 0!==r.args&&(s.argsText.append(JSON.stringify(r.args)),s.argsText.close()),void 0!==r.response&&s.setResponse(r.response),s}appendSource(e){this._addPart(e,new ReadableStream({start(e){e.enqueue({type:"part-finish",path:[]}),e.close()}}))}appendFile(e){this._addPart(e,new ReadableStream({start(e){e.enqueue({type:"part-finish",path:[]}),e.close()}}))}enqueue(e){this._merger.enqueue(e),"part-start"===e.type&&0===e.path.length&&this._contentCounter.up()}close(){this._merger.seal(),this._append?.controller?.close(),this._closeSubscriber?.()}},eh=class extends TransformStream{constructor(e,t,n){let r;const[i,a]=function(){let e,{resolve:t,promise:n}=er();return[function(e){let t,n=new em;try{t=e(n)}catch(e){throw n.__internal_isClosed||(n.enqueue({type:"error",path:[],error:String(e)}),n.close()),e}return t instanceof Promise?(async()=>{try{await t}catch(e){throw n.__internal_isClosed||n.enqueue({type:"error",path:[],error:String(e)}),e}finally{n.__internal_isClosed||n.close()}})():n.__internal_isClosed||n.close(),n.__internal_getReadable()}(r=>((e=r).__internal_subscribeToClose(t),n)),e]}();super({start:t=>(r=i.pipeTo(new WritableStream({write(e){t.enqueue(e)},abort(e){t.error(e)},close(){t.terminate()}})).catch(e=>{t.error(e)}),e.start?.(a)),transform:t=>e.transform?.(t,a),async flush(){await e.flush?.(a),a.close(),await r}},t,n)}},ef=class extends ec{constructor(){super(e=>{let t=new eh({transform(e,t){t.appendText(e)}});return e.pipeThrough(new TextDecoderStream).pipeThrough(t)})}},eg=class{constructor(e){this.cloud=e}__internal_getAssistantOptions(e){return{api:this.cloud._baseUrl+"/v1/runs/stream",headers:async()=>{let e=await this.cloud._auth.getAuthHeaders();if(!e)throw Error("Authorization failed");return{...e,Accept:"text/plain"}},body:{assistant_id:e,response_format:"vercel-ai-data-stream/v1",thread_id:"unstable_todo"}}}async stream(e){let t=await this.cloud.makeRawRequest("/runs/stream",{method:"POST",headers:{Accept:"text/plain"},body:e});return en.fromResponse(t,new ef)}},ey=class{constructor(e){this.cloud=e}async list(e){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}/messages`)}async create(e,t){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}/messages`,{method:"POST",body:t})}},ev=class{constructor(e){this.cloud=e,this.messages=new ey(e)}messages;async list(e){return this.cloud.makeRequest("/threads",{query:e})}async create(e){return this.cloud.makeRequest("/threads",{method:"POST",body:e})}async update(e,t){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}`,{method:"PUT",body:t})}async delete(e){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}`,{method:"DELETE"})}},eb=class{constructor(e){this.cloud=e}async pdfToImages(e){return this.cloud.makeRequest("/files/pdf-to-images",{method:"POST",body:e})}async generatePresignedUploadUrl(e){return this.cloud.makeRequest("/files/attachments/generate-presigned-upload-url",{method:"POST",body:e})}},ex=class{threads;auth;runs;files;constructor(e){const t=new ee(e);this.threads=new ev(t),this.auth={tokens:new et(t)},this.runs=new eg(t),this.files=new eb(t)}},e_=e=>{let t=e.content,n=(0,i.fromThreadMessageLike)({id:e.id,createdAt:e.created_at,...t},e.id,{type:"complete",reason:"unknown"});return{parentId:e.parent_id,message:n}},ek=class{constructor(e,t){this.cloudRef=e,this.threadListItemRuntime=t}_getIdForLocalId={};async append({parentId:e,message:t}){let{remoteId:n}=await this.threadListItemRuntime.initialize(),r=this.cloudRef.current.threads.messages.create(n,{parent_id:e?await this._getIdForLocalId[e]??e:null,format:"aui/v0",content:{role:t.role,content:t.content.map(e=>{let t=e.type;switch(t){case"text":return{type:"text",text:e.text};case"reasoning":return{type:"reasoning",text:e.text};case"source":return{type:"source",sourceType:e.sourceType,id:e.id,url:e.url,...e.title?{title:e.title}:void 0};case"tool-call":return!function e(t,n=0){return!(n>100)&&(null===t||"string"==typeof t||"boolean"==typeof t||("number"==typeof t?!Number.isNaN(t)&&Number.isFinite(t):Array.isArray(t)?t.every(t=>e(t,n+1)):"object"==typeof t&&Object.entries(t).every(([t,r])=>"string"==typeof t&&e(r,n+1))))}(e.result)&&console.warn("tool-call result is not JSON! "+JSON.stringify(e)),{type:"tool-call",toolCallId:e.toolCallId,toolName:e.toolName,...JSON.stringify(e.args)===e.argsText?{args:e.args}:{argsText:e.argsText},...e.result?{result:e.result}:{},...e.isError?{isError:!0}:{}};default:throw Error(`Content part type not supported by aui/v0: ${t}`)}}),metadata:t.metadata,...t.status?{status:t.status?.type==="running"?{type:"incomplete",reason:"cancelled"}:t.status}:void 0}}).then(({message_id:e})=>(this._getIdForLocalId[t.id]=e,e));return this._getIdForLocalId[t.id]=r,r.then(()=>{})}async load(){let e=this.threadListItemRuntime.getState().remoteId;if(!e)return{messages:[]};let{messages:t}=await this.cloudRef.current.threads.messages.list(e);return{messages:t.filter(e=>"aui/v0"===e.format).map(e_).reverse()}}},ew=class{list(){return Promise.resolve({threads:[]})}rename(){return Promise.resolve()}archive(){return Promise.resolve()}unarchive(){return Promise.resolve()}delete(){return Promise.resolve()}initialize(e){return Promise.resolve({remoteId:e,externalId:void 0})}generateTitle(){return Promise.resolve(new ReadableStream)}},eS=void 0!==G.default&&G.default?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL,eI=eS?new ex({baseUrl:eS,anonymous:!0}):void 0,eT=(e,{initialMessages:t,...r})=>{let{modelContext:i,...a}=(0,n.useContext)(b)??{},o=(0,n.useMemo)(()=>({...r,adapters:{...a,...r.adapters,chatModel:e}}),[e,r,a]),[s]=(0,n.useState)(()=>new y(o,t));return(0,n.useEffect)(()=>()=>{s.threads.getMainThreadRuntimeCore().detach()},[s]),(0,n.useEffect)(()=>{s.threads.getMainThreadRuntimeCore().__internal_setOptions(o),s.threads.getMainThreadRuntimeCore().__internal_load()},[s,o]),(0,n.useEffect)(()=>{if(i)return s.registerModelContextProvider(i)},[i,s]),(0,n.useMemo)(()=>new K.AssistantRuntimeImpl(s),[s])},eC=(e,{cloud:t,...r}={})=>{var i;let a,o,s;return(e=>{let[t]=(0,n.useState)(()=>new V(e));return(0,n.useEffect)(()=>{t.threads.__internal_setOptions(e),t.threads.__internal_load()},[t,e]),(0,n.useMemo)(()=>new K.AssistantRuntimeImpl(t),[t])})({runtimeHook:function(){return eT(e,r)},adapter:(i={cloud:t},a=(0,n.useRef)(i),(0,n.useEffect)(()=>{a.current=i},[i]),o=(0,n.useCallback)(function({children:e}){let t=(e=>{let t=(0,I.useThreadListItemRuntime)(),[r]=(0,n.useState)(()=>new ek(e,t));return r})({get current(){return a.current.cloud??eI}}),r=(0,n.useMemo)(()=>({history:t}),[t]);return(0,v.jsx)(x,{adapters:r,children:e})},[]),(s=i.cloud??eI)?{list:async()=>{let{threads:e}=await s.threads.list();return{threads:e.map(e=>({status:e.is_archived?"archived":"regular",remoteId:e.id,title:e.title,externalId:e.external_id??void 0}))}},initialize:async()=>{let e=i.create?.()??Promise.resolve(),t=await e,n=t?t.externalId:void 0,{thread_id:r}=await s.threads.create({last_message_at:new Date,external_id:n});return{externalId:n,remoteId:r}},rename:async(e,t)=>s.threads.update(e,{title:t}),archive:async e=>s.threads.update(e,{is_archived:!0}),unarchive:async e=>s.threads.update(e,{is_archived:!1}),delete:async e=>(await i.delete?.(e),s.threads.delete(e)),generateTitle:async(e,t)=>s.runs.stream({thread_id:e,assistant_id:"system/thread_title",messages:t}),unstable_Provider:o}:new ew)})};e.s(["useLocalRuntime",()=>eC,"useLocalThreadRuntime",()=>eT],681140)},810450,e=>{"use strict";let t=[{path:"api-keys/index.ts",content:'import { TeamApiKeysCrud, UserApiKeysCrud, teamApiKeysCreateInputSchema, userApiKeysCreateInputSchema } from "@stackframe/stack-shared/dist/interface/crud/project-api-keys";\nimport { filterUndefined } from "@stackframe/stack-shared/dist/utils/objects";\nimport { IfAndOnlyIf, PrettifyType } from "@stackframe/stack-shared/dist/utils/types";\nimport type * as yup from "yup";\n\nexport type ApiKeyType = "user" | "team";\n\nexport type ApiKey<Type extends ApiKeyType = ApiKeyType, IsFirstView extends boolean = false> =\n & {\n id: string,\n description: string,\n expiresAt?: Date,\n manuallyRevokedAt?: Date | null,\n createdAt: Date,\n value: IfAndOnlyIf<IsFirstView, true, string, { lastFour: string }>,\n update(options: ApiKeyUpdateOptions<Type>): Promise<void>,\n revoke: () => Promise<void>,\n isValid: () => boolean,\n whyInvalid: () => "manually-revoked" | "expired" | null,\n }\n & (\n | ("user" extends Type ? { type: "user", userId: string } : never)\n | ("team" extends Type ? { type: "team", teamId: string } : never)\n );\n\nexport type UserApiKeyFirstView = PrettifyType<ApiKey<"user", true>>;\nexport type UserApiKey = PrettifyType<ApiKey<"user", false>>;\n\nexport type TeamApiKeyFirstView = PrettifyType<ApiKey<"team", true>>;\nexport type TeamApiKey = PrettifyType<ApiKey<"team", false>>;\n\nexport type ApiKeyCreationOptions<Type extends ApiKeyType = ApiKeyType> =\n & {\n description: string,\n expiresAt: Date | null,\n /**\n * Whether the API key should be considered public. A public API key will not be detected by the secret scanner, which\n * automatically revokes API keys when it detects that they may have been exposed to the public.\n */\n isPublic?: boolean,\n };\nexport function apiKeyCreationOptionsToCrud(type: "user", userId: string, options: ApiKeyCreationOptions<"user">): Promise<yup.InferType<typeof userApiKeysCreateInputSchema>>;\nexport function apiKeyCreationOptionsToCrud(type: "team", teamId: string, options: ApiKeyCreationOptions<"team">): Promise<yup.InferType<typeof teamApiKeysCreateInputSchema>>;\nexport function apiKeyCreationOptionsToCrud(type: ApiKeyType, userIdOrTeamId: string, options: ApiKeyCreationOptions): Promise<yup.InferType<typeof userApiKeysCreateInputSchema> | yup.InferType<typeof teamApiKeysCreateInputSchema>>;\nexport async function apiKeyCreationOptionsToCrud(type: ApiKeyType, userIdOrTeamId: string, options: ApiKeyCreationOptions): Promise<yup.InferType<typeof userApiKeysCreateInputSchema> | yup.InferType<typeof teamApiKeysCreateInputSchema>> {\n return {\n description: options.description,\n expires_at_millis: options.expiresAt == null ? options.expiresAt : options.expiresAt.getTime(),\n is_public: options.isPublic,\n ...(type === "user" ? { user_id: userIdOrTeamId } : { team_id: userIdOrTeamId }),\n };\n}\n\n\nexport type ApiKeyUpdateOptions<Type extends ApiKeyType = ApiKeyType> = {\n description?: string,\n expiresAt?: Date | null,\n revoked?: boolean,\n};\nexport function apiKeyUpdateOptionsToCrud(type: "user", options: ApiKeyUpdateOptions<"user">): Promise<UserApiKeysCrud["Client"]["Update"]>;\nexport function apiKeyUpdateOptionsToCrud(type: "team", options: ApiKeyUpdateOptions<"team">): Promise<TeamApiKeysCrud["Client"]["Update"]>;\nexport function apiKeyUpdateOptionsToCrud(type: ApiKeyType, options: ApiKeyUpdateOptions): Promise<UserApiKeysCrud["Client"]["Update"] | TeamApiKeysCrud["Client"]["Update"]>;\nexport async function apiKeyUpdateOptionsToCrud(type: ApiKeyType, options: ApiKeyUpdateOptions): Promise<UserApiKeysCrud["Client"]["Update"] | TeamApiKeysCrud["Client"]["Update"]> {\n return filterUndefined({\n description: options.description,\n expires_at_millis: options.expiresAt == null ? options.expiresAt : options.expiresAt.getTime(),\n revoked: options.revoked,\n });\n}\n'},{path:"apps/index.ts",content:'export {\n StackClientApp\n} from "./interfaces/client-app";\nexport type {\n StackClientAppConstructor,\n StackClientAppConstructorOptions,\n StackClientAppJson\n} from "./interfaces/client-app";\n\nexport {\n StackServerApp\n} from "./interfaces/server-app";\nexport type {\n StackServerAppConstructor,\n StackServerAppConstructorOptions\n} from "./interfaces/server-app";\n\nexport {\n StackAdminApp\n} from "./interfaces/admin-app";\nexport type {\n StackAdminAppConstructor,\n StackAdminAppConstructorOptions,\n} from "./interfaces/admin-app";\n\n'},{path:"apps/interfaces/admin-app.ts",content:'import { AnalyticsQueryOptions, AnalyticsQueryResponse } from "@stackframe/stack-shared/dist/interface/crud/analytics";\nimport type { AdminGetSessionReplayChunkEventsResponse, AdminGetSessionReplayAllEventsResponse } from "@stackframe/stack-shared/dist/interface/crud/session-replays";\nimport type { Transaction, TransactionType } from "@stackframe/stack-shared/dist/interface/crud/transactions";\nimport { InternalSession } from "@stackframe/stack-shared/dist/sessions";\nimport type { MoneyAmount } from "@stackframe/stack-shared/dist/utils/currency-constants";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport { AsyncStoreProperty, EmailConfig } from "../../common";\nimport { AdminEmailOutbox, AdminSentEmail } from "../../email";\nimport { InternalApiKey, InternalApiKeyCreateOptions, InternalApiKeyFirstView } from "../../internal-api-keys";\nimport { AdminProjectPermission, AdminProjectPermissionDefinition, AdminProjectPermissionDefinitionCreateOptions, AdminProjectPermissionDefinitionUpdateOptions, AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions } from "../../permissions";\nimport { AdminProject } from "../../projects";\nimport { _StackAdminAppImpl } from "../implementations";\nimport { StackServerApp, StackServerAppConstructorOptions } from "./server-app";\n\nexport type EmailOutboxListOptions = {\n status?: string,\n simpleStatus?: string,\n limit?: number,\n cursor?: string,\n};\n\nexport type EmailOutboxListResult = {\n items: AdminEmailOutbox[],\n nextCursor: string | null,\n};\n\nexport type EmailOutboxUpdateOptions = {\n isPaused?: boolean,\n scheduledAtMillis?: number,\n cancel?: boolean,\n tsxSource?: string,\n themeId?: string | null,\n};\n\nexport type ManagedEmailProviderSetupResult = {\n domainId: string,\n subdomain: string,\n senderLocalPart: string,\n nameServerRecords: string[],\n status: ManagedEmailProviderStatus["status"],\n};\n\nexport type ManagedEmailProviderStatus = {\n status: "pending_dns" | "pending_verification" | "verified" | "applied" | "failed",\n};\n\nexport type ManagedEmailProviderListItem = {\n domainId: string,\n subdomain: string,\n senderLocalPart: string,\n status: ManagedEmailProviderStatus["status"],\n nameServerRecords: string[],\n};\n\nimport type { AdminSessionReplay, ListSessionReplayChunksOptions, ListSessionReplayChunksResult, ListSessionReplaysOptions, ListSessionReplaysResult, SessionReplayAllEventsResult } from "../../session-replays";\nexport type { AdminSessionReplay, AdminSessionReplayChunk, ListSessionReplaysOptions, ListSessionReplaysResult, ListSessionReplayChunksOptions, ListSessionReplayChunksResult, SessionReplayAllEventsResult } from "../../session-replays";\n\n\nexport type StackAdminAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = (\n & StackServerAppConstructorOptions<HasTokenStore, ProjectId>\n & {\n superSecretAdminKey?: string,\n projectOwnerSession?: InternalSession | (() => Promise<string | null>),\n }\n);\n\n\nexport type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & AsyncStoreProperty<"project", [], AdminProject, false>\n & AsyncStoreProperty<"internalApiKeys", [], InternalApiKey[], true>\n & AsyncStoreProperty<"teamPermissionDefinitions", [], AdminTeamPermissionDefinition[], true>\n & AsyncStoreProperty<"projectPermissionDefinitions", [], AdminProjectPermissionDefinition[], true>\n & AsyncStoreProperty<"emailThemes", [], { id: string, displayName: string }[], true>\n & AsyncStoreProperty<"emailPreview", [{ themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string }], string, false>\n & AsyncStoreProperty<"emailPreviewWithEditableMarkers", [{ themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string, editableSource?: \'template\' | \'theme\' | \'both\' }], { html: string, editableRegions?: Record<string, unknown> }, false> // THIS_LINE_PLATFORM react-like\n & AsyncStoreProperty<"emailTemplates", [], { id: string, displayName: string, themeId?: string, tsxSource: string }[], true>\n & AsyncStoreProperty<"emailDrafts", [], { id: string, displayName: string, themeId: string | undefined | false, tsxSource: string, sentAt: Date | null }[], true>\n & AsyncStoreProperty<"stripeAccountInfo", [], { account_id: string, charges_enabled: boolean, details_submitted: boolean, payouts_enabled: boolean } | null, false>\n & AsyncStoreProperty<\n "transactions",\n [{\n cursor?: string,\n limit?: number,\n type?: TransactionType,\n customerType?: \'user\' | \'team\' | \'custom\',\n customerId?: string,\n }],\n { transactions: Transaction[], nextCursor: string | null },\n true\n >\n & {\n createInternalApiKey(options: InternalApiKeyCreateOptions): Promise<InternalApiKeyFirstView>,\n\n createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise<AdminTeamPermission>,\n updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions): Promise<void>,\n deleteTeamPermissionDefinition(permissionId: string): Promise<void>,\n /**\n * @param options.query Free-text search; matches against permission ID and description.\n */\n listTeamPermissionDefinitionsPaginated(options: { limit: number, cursor?: string, query?: string }): Promise<{ items: AdminTeamPermissionDefinition[], nextCursor: string | null }>,\n\n createProjectPermissionDefinition(data: AdminProjectPermissionDefinitionCreateOptions): Promise<AdminProjectPermission>,\n updateProjectPermissionDefinition(permissionId: string, data: AdminProjectPermissionDefinitionUpdateOptions): Promise<void>,\n deleteProjectPermissionDefinition(permissionId: string): Promise<void>,\n\n useSvixToken(): { token: string, url: string | undefined }, // THIS_LINE_PLATFORM react-like\n\n sendTestEmail(options: {\n recipientEmail: string,\n emailConfig: EmailConfig,\n }): Promise<Result<undefined, { errorMessage: string }>>,\n\n sendTestWebhook(options: { endpointId: string }): Promise<Result<undefined, { errorMessage: string }>>,\n\n sendSignInInvitationEmail(email: string, callbackUrl: string): Promise<void>,\n\n listSentEmails(): Promise<AdminSentEmail[]>,\n setupManagedEmailProvider(options: { subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderSetupResult>,\n checkManagedEmailStatus(options: { domainId: string, subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderStatus>,\n listManagedEmailDomains(): Promise<ManagedEmailProviderListItem[]>,\n applyManagedEmailProvider(options: { domainId: string }): Promise<{ status: "applied" }>,\n\n useEmailTheme(id: string): { displayName: string, tsxSource: string }, // THIS_LINE_PLATFORM react-like\n createEmailTheme(displayName: string): Promise<{ id: string }>,\n updateEmailTheme(id: string, tsxSource: string): Promise<void>,\n deleteEmailTheme(id: string): Promise<void>,\n saveChatMessage(threadId: string, message: any): Promise<void>,\n listChatMessages(threadId: string): Promise<{ messages: Array<any> }>,\n rewriteTemplateSourceWithAI(templateTsxSource: string): Promise<{ tsxSource: string }>,\n updateEmailTemplate(id: string, tsxSource: string, themeId: string | null | false): Promise<{ renderedHtml: string }>,\n createEmailTemplate(displayName: string): Promise<{ id: string }>,\n deleteEmailTemplate(id: string): Promise<void>,\n\n setupPayments(): Promise<{ url: string }>,\n createStripeWidgetAccountSession(): Promise<{ client_secret: string }>,\n getPaymentMethodConfigs(): Promise<{ configId: string, methods: Array<{ id: string, name: string, enabled: boolean, available: boolean, overridable: boolean }> } | null>,\n updatePaymentMethodConfigs(configId: string, updates: Record<string, \'on\' | \'off\'>): Promise<void>,\n createEmailDraft(options: { displayName: string, themeId?: string | undefined | false, tsxSource?: string }): Promise<{ id: string }>,\n updateEmailDraft(id: string, data: { displayName?: string, themeId?: string | undefined | false, tsxSource?: string }): Promise<void>,\n deleteEmailDraft(id: string): Promise<void>,\n refreshEmailDrafts(): Promise<void>,\n createItemQuantityChange(options: (\n { userId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { teamId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { customCustomerId: string, itemId: string, quantity: number, expiresAt?: string, description?: string }\n )): Promise<void>,\n refundTransaction(options: {\n type: "subscription" | "one-time-purchase",\n id: string,\n invoiceId?: string,\n amountUsd: MoneyAmount,\n endAction?: "now" | "at-period-end",\n }): Promise<{ refundTransactionId: string }>,\n queryAnalytics(options: AnalyticsQueryOptions): Promise<AnalyticsQueryResponse>,\n\n listSessionReplays(options?: ListSessionReplaysOptions): Promise<ListSessionReplaysResult>,\n getSessionReplay(sessionReplayId: string): Promise<AdminSessionReplay>,\n listSessionReplayChunks(sessionReplayId: string, options?: ListSessionReplayChunksOptions): Promise<ListSessionReplayChunksResult>,\n getSessionReplayChunkEvents(sessionReplayId: string, chunkId: string): Promise<AdminGetSessionReplayChunkEventsResponse>,\n getSessionReplayEvents(sessionReplayId: string, options?: { offset?: number, limit?: number }): Promise<SessionReplayAllEventsResult>,\n\n // Email Outbox methods\n listOutboxEmails(options?: EmailOutboxListOptions): Promise<EmailOutboxListResult>,\n getOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n updateOutboxEmail(id: string, options: EmailOutboxUpdateOptions): Promise<AdminEmailOutbox>,\n pauseOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n unpauseOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n cancelOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n }\n & StackServerApp<HasTokenStore, ProjectId>\n);\nexport type StackAdminAppConstructor = {\n new <\n HasTokenStore extends boolean,\n ProjectId extends string\n >(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>,\n new(options: StackAdminAppConstructorOptions<boolean, string>): StackAdminApp<boolean, string>,\n};\nexport const StackAdminApp: StackAdminAppConstructor = _StackAdminAppImpl;\n'},{path:"apps/interfaces/client-app.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { CurrentUserCrud } from "@stackframe/stack-shared/dist/interface/crud/current-user";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport { AsyncStoreProperty, AuthLike, GetCurrentPartialUserOptions, GetCurrentUserOptions, HandlerUrlOptions, HandlerUrls, OAuthScopesOnSignIn, RedirectMethod, RedirectToOptions, ResolvedHandlerUrls, stackAppInternalsSymbol, TokenStoreInit } from "../../common";\nimport type { RequestListener } from "@stackframe/stack-shared/dist/interface/client-interface";\nimport { CustomerInvoicesList, CustomerInvoicesRequestOptions, CustomerProductsList, CustomerProductsRequestOptions, Item } from "../../customers";\nimport { Project } from "../../projects";\nimport { ProjectCurrentUser, SyncedPartialUser, TokenPartialUser } from "../../users";\nimport { _StackClientAppImpl } from "../implementations";\nimport { AnalyticsOptions } from "../implementations/session-replay";\n\nexport type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = {\n baseUrl?: string | { browser: string, server: string },\n extraRequestHeaders?: Record<string, string>,\n projectId?: ProjectId,\n publishableClientKey?: string,\n urls?: HandlerUrlOptions,\n oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn>,\n tokenStore?: TokenStoreInit<HasTokenStore>,\n redirectMethod?: RedirectMethod,\n inheritsFrom?: StackClientApp<any, any>,\n\n /**\n * Whether to show the Stack Auth dev tool indicator in browser-like development environments.\n *\n * Defaults to true.\n */\n devTool?: boolean,\n\n /**\n * By default, the Stack app will automatically prefetch some data from Stack\'s server when this app is first\n * constructed. This improves the performance of your app, but will create network requests that are unnecessary if\n * the app is never used or disposed of immediately. To disable this behavior, set this option to true.\n */\n noAutomaticPrefetch?: boolean,\n\n /**\n * Options for analytics and session recording. Replays are disabled by default;\n * set `{ replays: { enabled: true } }` to opt in.\n */\n analytics?: AnalyticsOptions,\n} & (\n { tokenStore: TokenStoreInit<HasTokenStore> } | { tokenStore?: undefined, inheritsFrom: StackClientApp<HasTokenStore, any> }\n) & (\n string extends ProjectId ? unknown : ({ projectId: ProjectId } | { inheritsFrom: StackClientApp<any, ProjectId> })\n);\n\n\nexport type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & { inheritsFrom?: undefined } & {\n uniqueIdentifier: string,\n // note: if you add more fields here, make sure to ensure the checkString in the constructor has/doesn\'t have them\n};\n\nexport type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n readonly projectId: ProjectId,\n\n /**\n * The version of the Stack Auth SDK.\n */\n readonly version: string,\n\n /**\n * @deprecated `app.urls` is static and does not include runtime redirect-back parameters.\n * For navigation, prefer `redirectToXyz()` methods (for example `redirectToSignIn()`).\n */\n readonly urls: Readonly<ResolvedHandlerUrls>,\n\n signInWithOAuth(provider: string, options?: { returnTo?: string }): Promise<void>,\n signInWithCredential(options: { email: string, password: string, noRedirect?: boolean }): Promise<Result<undefined, KnownErrors["EmailPasswordMismatch"] | KnownErrors["InvalidTotpCode"]>>,\n signUpWithCredential(options: {\n email: string,\n password: string,\n noRedirect?: boolean,\n } & ({ noVerificationCallback: true } | { noVerificationCallback?: false, verificationCallbackUrl?: string })): Promise<Result<undefined, KnownErrors["UserWithEmailAlreadyExists"] | KnownErrors["PasswordRequirementsNotMet"] | KnownErrors["BotChallengeFailed"]>>,\n signInWithPasskey(): Promise<Result<undefined, KnownErrors["PasskeyAuthenticationFailed"] | KnownErrors["InvalidTotpCode"] | KnownErrors["PasskeyWebAuthnError"]>>,\n callOAuthCallback(): Promise<boolean>,\n promptCliLogin(options: { appUrl: string, expiresInMillis?: number, anonRefreshToken?: string, promptLink?: (url: string, loginCode: string) => void }): Promise<Result<string, KnownErrors["CliAuthError"] | KnownErrors["CliAuthExpiredError"] | KnownErrors["CliAuthUsedError"]>>,\n sendForgotPasswordEmail(email: string, options?: { callbackUrl?: string }): Promise<Result<undefined, KnownErrors["UserNotFound"]>>,\n sendMagicLinkEmail(email: string, options?: { callbackUrl?: string }): Promise<Result<{ nonce: string }, KnownErrors["RedirectUrlNotWhitelisted"] | KnownErrors["BotChallengeFailed"]>>,\n resetPassword(options: { code: string, password: string }): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>,\n verifyPasswordResetCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>,\n verifyTeamInvitationCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["TeamInvitationEmailMismatch"]>>,\n acceptTeamInvitation(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["TeamInvitationEmailMismatch"]>>,\n getTeamInvitationDetails(code: string): Promise<Result<{ teamDisplayName: string }, KnownErrors["VerificationCodeError"] | KnownErrors["TeamInvitationEmailMismatch"]>>,\n verifyEmail(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>,\n signInWithMagicLink(code: string, options?: { noRedirect?: boolean }): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"]>>,\n signInWithMfa(otp: string, code: string, options?: { noRedirect?: boolean }): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"]>>,\n\n redirectToOAuthCallback(): Promise<void>,\n\n getConvexClientAuth(options: HasTokenStore extends false ? { tokenStore: TokenStoreInit } : { tokenStore?: TokenStoreInit }): (args: { forceRefreshToken: boolean }) => Promise<string | null>,\n getConvexHttpClientAuth(options: { tokenStore: TokenStoreInit }): Promise<string>,\n\n // IF_PLATFORM react-like\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): ProjectCurrentUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): ProjectCurrentUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): ProjectCurrentUser<ProjectId>,\n useUser(options?: GetCurrentUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null,\n // END_PLATFORM\n\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options?: GetCurrentUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>,\n\n cancelSubscription(options: { productId: string, subscriptionId?: string } | { productId: string, subscriptionId?: string, teamId: string }): Promise<void>,\n\n // note: we don\'t special-case \'anonymous\' here to return non-null, see GetPartialUserOptions for more details\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): Promise<SyncedPartialUser | TokenPartialUser | null>,\n // IF_PLATFORM react-like\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): SyncedPartialUser | TokenPartialUser | null,\n // END_PLATFORM\n useNavigate(): (to: string) => void, // THIS_LINE_PLATFORM react-like\n\n [stackAppInternalsSymbol]: {\n toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>,\n setCurrentUser(userJsonPromise: Promise<CurrentUserCrud[\'Client\'][\'Read\'] | null>): void,\n getConstructorOptions(): StackClientAppConstructorOptions<HasTokenStore, ProjectId> & { inheritsFrom?: undefined },\n sendSessionReplayBatch(body: string, options: { keepalive: boolean }): Promise<Result<Response, Error>>,\n sendAnalyticsEventBatch(body: string, options: { keepalive: boolean }): Promise<Result<Response, Error>>,\n addRequestListener(listener: RequestListener): () => void,\n sendRequest(path: string, requestOptions: RequestInit, requestType?: "client" | "server" | "admin"): Promise<Response>,\n getRedirectMethod(): RedirectMethod,\n redirectToUrl(url: string | URL, options?: { replace?: boolean }): Promise<void>,\n redirectToHandler(handlerName: keyof HandlerUrls, options?: RedirectToOptions): Promise<void>,\n signInWithTokens(tokens: { accessToken: string, refreshToken: string }): Promise<void>,\n },\n }\n & AsyncStoreProperty<"project", [], Project, false>\n & AsyncStoreProperty<\n "item",\n [{ itemId: string, userId: string } | { itemId: string, teamId: string } | { itemId: string, customCustomerId: string }],\n Item,\n false\n >\n & AsyncStoreProperty<\n "products",\n [options: CustomerProductsRequestOptions],\n CustomerProductsList,\n true\n >\n & AsyncStoreProperty<\n "invoices",\n [options: CustomerInvoicesRequestOptions],\n CustomerInvoicesList,\n true\n >\n & { [K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, \'handler\' | \'oauthCallback\'>>}`]: (options?: RedirectToOptions) => Promise<void> }\n & AuthLike<HasTokenStore extends false ? { tokenStore: TokenStoreInit } : { tokenStore?: TokenStoreInit }>\n);\nexport type StackClientAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackClientAppConstructorOptions<HasTokenStore, ProjectId>): StackClientApp<HasTokenStore, ProjectId>,\n new(options: StackClientAppConstructorOptions<boolean, string>): StackClientApp<boolean, string>,\n\n [stackAppInternalsSymbol]: {\n fromClientJson<HasTokenStore extends boolean, ProjectId extends string>(\n json: StackClientAppJson<HasTokenStore, ProjectId>\n ): StackClientApp<HasTokenStore, ProjectId>,\n },\n};\nexport const StackClientApp: StackClientAppConstructor = _StackClientAppImpl;\n'},{path:"apps/interfaces/server-app.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport type { GenericQueryCtx } from "convex/server";\nimport { AsyncStoreProperty, GetCurrentPartialUserOptions, GetCurrentUserOptions } from "../../common";\nimport { CustomerProductsList, CustomerProductsRequestOptions, InlineProduct, ServerItem } from "../../customers";\nimport { DataVaultStore } from "../../data-vault";\nimport { EmailDeliveryInfo, SendEmailOptions } from "../../email";\nimport { ServerListTeamsOptions, ServerListUsersOptions, ServerTeam, ServerTeamCreateOptions } from "../../teams";\nimport { ProjectCurrentServerUser, ServerOAuthProvider, ServerUser, ServerUserCreateOptions, SyncedPartialServerUser, TokenPartialUser } from "../../users";\nimport { _StackServerAppImpl } from "../implementations";\nimport { StackClientApp, StackClientAppConstructorOptions } from "./client-app";\n\n\nexport type StackServerAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {\n secretServerKey?: string,\n};\n\nexport type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n createTeam(data: ServerTeamCreateOptions): Promise<ServerTeam>,\n /**\n * @deprecated use `getUser()` instead\n */\n getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n\n createUser(options: ServerUserCreateOptions): Promise<ServerUser>,\n grantProduct(options: (\n ({ userId: string } | { teamId: string } | { customCustomerId: string }) &\n ({ productId: string } | { product: InlineProduct }) &\n { quantity?: number }\n )): Promise<void>,\n\n // IF_PLATFORM react-like\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options?: GetCurrentUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null,\n useUser(id: string): ServerUser | null,\n useUser(options: { apiKey: string, or?: "return-null" | "anonymous" }): ServerUser | null,\n useUser(options: { from: "convex", ctx: GenericQueryCtx<any>, or?: "return-null" | "anonymous" }): ServerUser | null,\n // END_PLATFORM\n\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options?: GetCurrentUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n getUser(id: string): Promise<ServerUser | null>,\n getUser(options: { apiKey: string, or?: "return-null" | "anonymous" }): Promise<ServerUser | null>,\n getUser(options: { from: "convex", ctx: GenericQueryCtx<any>, or?: "return-null" | "anonymous" }): Promise<ServerUser | null>,\n\n // note: we don\'t special-case \'anonymous\' here to return non-null, see GetPartialUserOptions for more details\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): Promise<SyncedPartialServerUser | TokenPartialUser | null>,\n // IF_PLATFORM react-like\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): SyncedPartialServerUser | TokenPartialUser | null,\n // END_PLATFORM\n // IF_PLATFORM react-like\n useTeam(id: string): ServerTeam | null,\n useTeam(options: { apiKey: string }): ServerTeam | null,\n // END_PLATFORM\n getTeam(id: string): Promise<ServerTeam | null>,\n getTeam(options: { apiKey: string }): Promise<ServerTeam | null>,\n\n\n useUsers(options?: ServerListUsersOptions): ServerUser[] & { nextCursor: string | null }, // THIS_LINE_PLATFORM react-like\n listUsers(options?: ServerListUsersOptions): Promise<ServerUser[] & { nextCursor: string | null }>,\n\n /**\n * Returns every direct (or recursive) team permission grant for every\n * member of the given team in one request. Use this instead of calling\n * `user.listPermissions(team)` per row when rendering a roster — that\n * pattern produces an N+1 over the team-member endpoint.\n */\n listTeamMemberPermissions(teamId: string, options?: { recursive?: boolean }): Promise<{ userId: string, permissionId: string }[]>,\n // IF_PLATFORM react-like\n useTeamMemberPermissions(teamId: string, options?: { recursive?: boolean }): { userId: string, permissionId: string }[],\n // END_PLATFORM\n\n // TODO this should actually be on ServerUser\n createOAuthProvider(options: {\n userId: string,\n accountId: string,\n providerConfigId: string,\n email: string,\n allowSignIn: boolean,\n allowConnectedAccounts: boolean,\n }): Promise<Result<ServerOAuthProvider, InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>>>,\n\n sendEmail(options: SendEmailOptions): Promise<void>,\n\n getEmailDeliveryStats(): Promise<EmailDeliveryInfo>,\n // IF_PLATFORM react-like\n useEmailDeliveryStats(): EmailDeliveryInfo,\n // END_PLATFORM\n\n activateEmailCapacityBoost(): Promise<void>,\n }\n & AsyncStoreProperty<"user", [id: string], ServerUser | null, false>\n & Omit<AsyncStoreProperty<"users", [], ServerUser[], true>, "listUsers" | "useUsers">\n & AsyncStoreProperty<"teams", [options?: ServerListTeamsOptions], ServerTeam[] & { nextCursor: string | null }, true>\n & AsyncStoreProperty<"dataVaultStore", [id: string], DataVaultStore, false>\n & AsyncStoreProperty<\n "item",\n [{ itemId: string, userId: string } | { itemId: string, teamId: string } | { itemId: string, customCustomerId: string }],\n ServerItem,\n false\n >\n & AsyncStoreProperty<\n "products",\n [options: CustomerProductsRequestOptions],\n CustomerProductsList,\n true\n >\n & StackClientApp<HasTokenStore, ProjectId>\n);\nexport type StackServerAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackServerAppConstructorOptions<HasTokenStore, ProjectId>): StackServerApp<HasTokenStore, ProjectId>,\n new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>,\n};\nexport const StackServerApp: StackServerAppConstructor = _StackServerAppImpl;\n'},{path:"common.ts",content:'import { ProviderType } from "@stackframe/stack-shared/dist/utils/oauth";\nimport type { GenericQueryCtx, UserIdentity } from "convex/server";\nexport type {\n DefaultHandlerUrlTarget,\n HandlerPageUrls,\n HandlerRedirectUrls,\n HandlerUrlOptions,\n HandlerUrlTarget,\n HandlerUrls,\n ResolvedHandlerUrls,\n} from "@stackframe/stack-shared/dist/interface/handler-urls";\n\nexport type RedirectToOptions = {\n replace?: boolean,\n noRedirectBack?: boolean,\n};\n\nexport type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> =\n & { [key in `${IsMultiple extends true ? "list" : "get"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value> }\n & { [key in `use${Capitalize<Name>}`]: (...args: Args) => Value } // THIS_LINE_PLATFORM react-like\n\nexport type EmailConfig = {\n host: string,\n port: number,\n username: string,\n password: string,\n senderEmail: string,\n senderName: string,\n}\n\nexport type RedirectMethod = "window"\n | "nextjs" // THIS_LINE_PLATFORM next\n | "tanstack-start" // THIS_LINE_PLATFORM tanstack-start\n | "none"\n | {\n useNavigate: () => (to: string) => void,\n navigate?: (to: string) => void,\n }\n\n\nexport type GetCurrentUserOptions<HasTokenStore> =\n & {\n or?: \'redirect\' | \'throw\' | \'return-null\' | \'anonymous\' | /** @deprecated */ \'anonymous-if-exists[deprecated]\',\n /**\n * Whether to include restricted users (users who haven\'t completed onboarding requirements like email verification).\n * By default, restricted users are filtered out (treated similar to anonymous users).\n *\n * Note: This option cannot be set to false when `or: \'anonymous\'` is used, as all anonymous users are also restricted.\n *\n * @default false\n */\n includeRestricted?: boolean,\n tokenStore?: TokenStoreInit,\n }\n & (HasTokenStore extends false ? {\n tokenStore: TokenStoreInit,\n } : {});\n\nexport type ConvexCtx =\n| GenericQueryCtx<any>\n| { auth: { getUserIdentity: () => Promise<UserIdentity | null> } };\n\nexport type GetCurrentPartialUserOptions<HasTokenStore> =\n & {\n or?: \'return-null\' | \'anonymous-if-exists\', // note: unlike normal getUser, \'anonymous\' still returns null sometimes (eg. if no token is present)\n tokenStore?: TokenStoreInit,\n }\n & (\n | {\n from: \'token\',\n }\n | {\n from: \'convex\',\n ctx: ConvexCtx,\n }\n )\n & (HasTokenStore extends false ? {\n tokenStore: TokenStoreInit,\n } : {});\n\nexport type RequestLike = {\n headers:\n | {\n get: (name: string) => string | null,\n }\n | Record<string, string | null>,\n};\n\nexport type TokenStoreInit<HasTokenStore extends boolean = boolean> =\n HasTokenStore extends true ? (\n | "cookie"\n | "nextjs-cookie"\n | "memory"\n | RequestLike\n | { accessToken: string, refreshToken: string }\n )\n : HasTokenStore extends false ? null\n : TokenStoreInit<true> | TokenStoreInit<false>;\n\nexport type OAuthScopesOnSignIn = {\n [key in ProviderType]: string[];\n};\n\n/**\n * Contains the authentication methods without session-related fields.\n * Used for apps that have token storage capabilities.\n */\nexport type AuthLike<ExtraOptions = {}> = {\n signOut(options?: { redirectUrl?: URL | string } & ExtraOptions): Promise<void>,\n signOut(options?: { redirectUrl?: URL | string }): Promise<void>,\n\n /**\n * Returns the current access token, or null if the user is not signed in.\n *\n * The access token is a short-lived JWT that can be used to authenticate requests to external servers.\n * It will be automatically refreshed when it expires.\n */\n getAccessToken(options?: {} & ExtraOptions): Promise<string | null>,\n useAccessToken(options?: {} & ExtraOptions): string | null, // THIS_LINE_PLATFORM react-like\n\n /**\n * Returns the current refresh token, or null if the user is not signed in.\n *\n * The refresh token is a long-lived token that can be used to obtain new access tokens.\n * It should be kept secret and never exposed to the client.\n */\n getRefreshToken(options?: {} & ExtraOptions): Promise<string | null>,\n useRefreshToken(options?: {} & ExtraOptions): string | null, // THIS_LINE_PLATFORM react-like\n\n /**\n * Returns the value for the HTTP `Authorization` header for authenticated requests to external servers.\n * Most commonly used in cross-origin requests. Similar to `getAuthJson`, but specifically for HTTP requests.\n *\n * If you are using `tokenStore: "cookie"`, you don\'t need this for same-origin requests. However, most\n * browsers now disable third-party cookies by default, so we must pass authentication tokens by header instead\n * if the client and server are on different origins.\n *\n * This function returns the header value in this format:\n * `Bearer stackauth_<base64(getAuthJson())>`, or `null` if the user is not signed in.\n * You can use this with `fetch` or other HTTP request libraries to send authenticated requests.\n *\n * On the server, you can then pass in the `Request` object to the `tokenStore` option\n * of your Stack app. Please note that CORS does not allow most headers by default, so you\n * must include `authorization` in the [`Access-Control-Allow-Headers` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)\n * of the CORS preflight response.\n *\n * If you are not using HTTP (and hence cannot set headers), use `getAuthJson()` instead.\n *\n * Example:\n *\n * ```ts\n * // client\n * const authorizationHeader = await stackApp.getAuthorizationHeader();\n * const res = await fetch("https://api.example.com", {\n * headers: {\n * ...(authorizationHeader ? { Authorization: authorizationHeader } : {})\n * // you can also add your own headers here\n * },\n * });\n *\n * // server\n * function handleRequest(req: Request) {\n * const user = await stackServerApp.getUser({ tokenStore: req });\n * return new Response("Welcome, " + user.displayName);\n * }\n * ```\n */\n getAuthorizationHeader(options?: {} & ExtraOptions): Promise<string | null>,\n useAuthorizationHeader(options?: {} & ExtraOptions): string | null, // THIS_LINE_PLATFORM react-like\n\n /**\n * @deprecated Use `getAuthorizationHeader()` instead.\n *\n * Returns the legacy `x-stack-auth` headers for authenticated HTTP requests. This remains for backwards\n * compatibility with existing integrations.\n */\n getAuthHeaders(options?: {} & ExtraOptions): Promise<{ "x-stack-auth": string }>,\n /** @deprecated Use `useAuthorizationHeader()` instead. */\n useAuthHeaders(options?: {} & ExtraOptions): { "x-stack-auth": string }, // THIS_LINE_PLATFORM react-like\n\n /**\n * Creates a JSON-serializable object containing the information to authenticate a user on an external server.\n * Similar to `getAuthorizationHeader`, but returns an object that can be sent over any protocol instead of just\n * HTTP headers.\n *\n * While `getAuthorizationHeader` is the recommended way to send authentication tokens over HTTP, your app may use\n * a different protocol, for example WebSockets or gRPC. This function returns a token object that can be JSON-serialized and sent to the server in any way you like.\n *\n * On the server, you can pass in this token object into the `tokenStore` option to fetch user details.\n *\n * Example:\n *\n * ```ts\n * // client\n * const res = await rpcCall(rpcEndpoint, {\n * data: {\n * auth: await stackApp.getAuthJson(),\n * },\n * });\n *\n * // server\n * function handleRequest(data) {\n * const user = await stackServerApp.getUser({ tokenStore: data.auth });\n * return new Response("Welcome, " + user.displayName);\n * }\n * ```\n */\n getAuthJson(options?: {} & ExtraOptions): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n useAuthJson(options?: {} & ExtraOptions): { accessToken: string | null, refreshToken: string | null }, // THIS_LINE_PLATFORM react-like\n};\n\n/** @internal */\nexport const stackAppInternalsSymbol = Symbol.for("StackAuth--DO-NOT-USE-OR-YOU-WILL-BE-FIRED--StackAppInternals");\n'},{path:"connected-accounts/index.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\n\nexport type Connection = {\n /**\n * @deprecated Use `provider` instead. This field returns the provider for backward compatibility.\n */\n id: string,\n /** Provider config ID (e.g., "google", "github") */\n provider: string,\n /** Account ID from the OAuth provider (e.g., Google user ID) */\n providerAccountId: string,\n};\n\nexport type OAuthConnection = {\n /**\n * Get an OAuth access token for this connected account.\n *\n * Returns `{ status: "ok", data: { accessToken } }` on success, or\n * `{ status: "error", error: KnownErrors["OAuthAccessTokenNotAvailable"] }` if the\n * refresh token has been revoked/expired or the requested scopes are not available.\n *\n * @param options.scopes - If provided, only returns a token that has all of these scopes.\n */\n getAccessToken(options?: { scopes?: string[] }): Promise<Result<{ accessToken: string }, KnownErrors["OAuthAccessTokenNotAvailable"]>>,\n /**\n * React hook to get an OAuth access token for this connected account.\n *\n * Returns `{ status: "ok", data: { accessToken } }` on success, or\n * `{ status: "error", error: KnownErrors["OAuthAccessTokenNotAvailable"] }` if the\n * refresh token has been revoked/expired or the requested scopes are not available.\n *\n * @param options.scopes - If provided, only returns a token that has all of these scopes.\n */\n useAccessToken(options?: { scopes?: string[] }): Result<{ accessToken: string }, KnownErrors["OAuthAccessTokenNotAvailable"]>, // THIS_LINE_PLATFORM react-like\n} & Connection;\n\n/**\n * @deprecated Used by legacy `getConnectedAccount(providerId)`. Use `OAuthConnection` instead,\n * which returns a `Result` from `getAccessToken`/`useAccessToken` instead of throwing.\n */\nexport type DeprecatedOAuthConnection = {\n getAccessToken(): Promise<{ accessToken: string }>,\n useAccessToken(): { accessToken: string }, // THIS_LINE_PLATFORM react-like\n} & Connection;\n'},{path:"contact-channels/index.ts",content:'import { ContactChannelsCrud } from "@stackframe/stack-shared/dist/interface/crud/contact-channels";\n\n\nexport type ContactChannel = {\n id: string,\n value: string,\n type: \'email\',\n isPrimary: boolean,\n isVerified: boolean,\n usedForAuth: boolean,\n\n sendVerificationEmail(options?: { callbackUrl?: string }): Promise<void>,\n update(data: ContactChannelUpdateOptions): Promise<void>,\n delete(): Promise<void>,\n}\n\nexport type ContactChannelCreateOptions = {\n value: string,\n type: \'email\',\n usedForAuth: boolean,\n isPrimary?: boolean,\n}\n\nexport function contactChannelCreateOptionsToCrud(userId: string, options: ContactChannelCreateOptions): ContactChannelsCrud["Client"]["Create"] {\n return {\n value: options.value,\n type: options.type,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n user_id: userId,\n };\n}\n\nexport type ContactChannelUpdateOptions = {\n usedForAuth?: boolean,\n value?: string,\n isPrimary?: boolean,\n}\n\nexport function contactChannelUpdateOptionsToCrud(options: ContactChannelUpdateOptions): ContactChannelsCrud["Client"]["Update"] {\n return {\n value: options.value,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n };\n}\n\nexport type ServerContactChannel = ContactChannel & {\n update(data: ServerContactChannelUpdateOptions): Promise<void>,\n}\nexport type ServerContactChannelUpdateOptions = ContactChannelUpdateOptions & {\n isVerified?: boolean,\n}\n\nexport function serverContactChannelUpdateOptionsToCrud(options: ServerContactChannelUpdateOptions): ContactChannelsCrud["Server"]["Update"] {\n return {\n value: options.value,\n is_verified: options.isVerified,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n };\n}\n\nexport type ServerContactChannelCreateOptions = ContactChannelCreateOptions & {\n isVerified?: boolean,\n}\nexport function serverContactChannelCreateOptionsToCrud(userId: string, options: ServerContactChannelCreateOptions): ContactChannelsCrud["Server"]["Create"] {\n return {\n type: options.type,\n value: options.value,\n is_verified: options.isVerified,\n user_id: userId,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n };\n}\n'},{path:"customers/index.ts",content:'import { inlineProductSchema } from "@stackframe/stack-shared/dist/schema-fields";\nimport * as yup from "yup";\nimport { AsyncStoreProperty } from "../common";\n\nexport type InlineProduct = yup.InferType<typeof inlineProductSchema>;\n\nexport type Item = {\n displayName: string,\n /**\n * May be negative.\n */\n quantity: number,\n /**\n * Equal to Math.max(0, quantity).\n */\n nonNegativeQuantity: number,\n};\n\nexport type ServerItem = Item & {\n increaseQuantity(amount: number): Promise<void>,\n /**\n * Decreases the quantity by the given amount.\n *\n * Note that you may want to use tryDecreaseQuantity instead, as it will prevent the quantity from going below 0 in a race-condition-free way.\n */\n decreaseQuantity(amount: number): Promise<void>,\n /**\n * Decreases the quantity by the given amount and returns true if the result is non-negative; returns false and does nothing if the result would be negative.\n *\n * Most useful for pre-paid credits.\n */\n tryDecreaseQuantity(amount: number): Promise<boolean>,\n};\n\nexport type CustomerProduct = {\n id: string | null,\n quantity: number,\n displayName: string,\n customerType: "user" | "team" | "custom",\n isServerOnly: boolean,\n stackable: boolean,\n /** @deprecated Product ownership is independent of purchase type. Will be removed in a future version. */\n type?: "one_time" | "subscription",\n subscription: null | {\n subscriptionId: string | null,\n currentPeriodEnd: Date | null,\n cancelAtPeriodEnd: boolean,\n isCancelable: boolean,\n },\n switchOptions?: Array<{\n productId: string,\n displayName: string,\n prices: InlineProduct["prices"],\n }>,\n};\n\nexport type CustomerProductsList = CustomerProduct[] & {\n nextCursor: string | null,\n};\n\nexport type CustomerProductsListOptions = {\n cursor?: string,\n limit?: number,\n};\n\nexport type CustomerProductsRequestOptions =\n | ({ userId: string } & CustomerProductsListOptions)\n | ({ teamId: string } & CustomerProductsListOptions)\n | ({ customCustomerId: string } & CustomerProductsListOptions);\n\nexport type CustomerInvoiceStatus = "draft" | "open" | "paid" | "uncollectible" | "void" | null;\n\nexport type CustomerInvoice = {\n createdAt: Date,\n status: CustomerInvoiceStatus,\n amountTotal: number,\n hostedInvoiceUrl: string | null,\n};\n\nexport type CustomerInvoicesList = CustomerInvoice[] & {\n nextCursor: string | null,\n};\n\nexport type CustomerInvoicesListOptions = {\n cursor?: string,\n limit?: number,\n};\n\nexport type CustomerInvoicesRequestOptions =\n | ({ userId: string } & CustomerInvoicesListOptions)\n | ({ teamId: string } & CustomerInvoicesListOptions);\n\nexport type CustomerDefaultPaymentMethod = {\n id: string,\n brand: string | null,\n last4: string | null,\n exp_month: number | null,\n exp_year: number | null,\n} | null;\n\nexport type CustomerBilling = {\n hasCustomer: boolean,\n defaultPaymentMethod: CustomerDefaultPaymentMethod,\n};\n\nexport type CustomerPaymentMethodSetupIntent = {\n clientSecret: string,\n stripeAccountId: string,\n};\n\nexport type Customer<IsServer extends boolean = false> =\n & {\n readonly id: string,\n\n createCheckoutUrl(options: (\n | { productId: string, returnUrl?: string }\n | (IsServer extends true ? { product: InlineProduct, returnUrl?: string } : never)\n )): Promise<string>,\n\n createPaymentMethodSetupIntent(): Promise<CustomerPaymentMethodSetupIntent>,\n\n setDefaultPaymentMethodFromSetupIntent(setupIntentId: string): Promise<CustomerDefaultPaymentMethod>,\n\n switchSubscription(options: { fromProductId: string, toProductId: string, priceId?: string, quantity?: number }): Promise<void>,\n }\n & AsyncStoreProperty<\n "billing",\n [],\n CustomerBilling,\n false\n >\n & AsyncStoreProperty<\n "item",\n [itemId: string],\n IsServer extends true ? ServerItem : Item,\n false\n >\n & AsyncStoreProperty<\n "products",\n [options?: CustomerProductsListOptions],\n CustomerProductsList,\n true\n >\n & AsyncStoreProperty<\n "invoices",\n [options?: CustomerInvoicesListOptions],\n CustomerInvoicesList,\n true\n >\n & (IsServer extends true ? {\n grantProduct(\n product: { productId: string, quantity?: number } | { product: InlineProduct, quantity?: number },\n ): Promise<void>,\n } : {});\n'},{path:"data-vault/index.ts",content:'import { AsyncStoreProperty } from "../common";\n\nexport type DataVaultStore =\n & {\n id: string,\n setValue: (key: string, value: string, options: { secret: string }) => Promise<void>,\n }\n & AsyncStoreProperty<"value", [key: string, options: { secret: string }], string | null, false>;\n'},{path:"email-templates/index.ts",content:"import { EmailTemplateCrud, EmailTemplateType } from \"@stackframe/stack-shared/dist/interface/crud/email-templates\";\n\n\nexport type AdminEmailTemplate = {\n type: EmailTemplateType,\n subject: string,\n content: any,\n isDefault: boolean,\n}\n\nexport type AdminEmailTemplateUpdateOptions = {\n subject?: string,\n content?: any,\n};\nexport function adminEmailTemplateUpdateOptionsToCrud(options: AdminEmailTemplateUpdateOptions): EmailTemplateCrud['Admin']['Update'] {\n return {\n subject: options.subject,\n content: options.content,\n };\n}\n"},{path:"email/index.ts",content:'import type { Json } from "@stackframe/stack-shared/dist/utils/json";\nimport { XOR } from "@stackframe/stack-shared/dist/utils/types";\n\nexport type AdminSentEmail = {\n id: string,\n to: string[],\n subject: string,\n recipient: string, // We\'ll derive this from to[0] for display\n sentAt: Date, // We\'ll derive this from sent_at_millis for display\n error?: unknown,\n}\n\nexport type AdminEmailOutboxRecipient =\n | { type: "user-primary-email", userId: string }\n | { type: "user-custom-emails", userId: string, emails: string[] }\n | { type: "custom-emails", emails: string[] };\n\nexport type AdminEmailOutboxStatus =\n | "paused"\n | "preparing"\n | "rendering"\n | "render-error"\n | "scheduled"\n | "queued"\n | "sending"\n | "server-error"\n | "skipped"\n | "bounced"\n | "delivery-delayed"\n | "sent"\n | "opened"\n | "clicked"\n | "marked-as-spam";\n\nexport type AdminEmailOutboxSimpleStatus =\n | "in-progress"\n | "ok"\n | "error";\n\nexport type AdminEmailOutboxCreatedWith = "draft" | "programmatic-call";\n\n// Error entry from a failed send attempt\nexport type AdminSendAttemptError = {\n attemptNumber: number,\n timestamp: string,\n externalMessage: string,\n externalDetails: Record<string, unknown>,\n internalMessage: string,\n internalDetails: Record<string, unknown>,\n};\n\n// =============================== BASE TYPES ===============================\n\n// Base fields present on all emails\ntype AdminEmailOutboxBase = {\n id: string,\n createdAt: Date,\n updatedAt: Date,\n tsxSource: string,\n themeId: string | null,\n to: AdminEmailOutboxRecipient,\n scheduledAt: Date,\n // Source tracking for grouping emails by template/draft\n createdWith: AdminEmailOutboxCreatedWith,\n emailDraftId: string | null,\n emailProgrammaticCallTemplateId: string | null,\n variables: Record<string, Json>,\n isPaused: false,\n hasRendered: false,\n hasDelivered: false,\n // Retry tracking fields\n sendRetries: number,\n nextSendRetryAt: Date | null,\n sendAttemptErrors: AdminSendAttemptError[] | null,\n};\n\n// Fields available after rendering completes successfully\n// Use Omit to properly override hasRendered from base\ntype AdminEmailOutboxRenderedFields = Omit<AdminEmailOutboxBase, "hasRendered"> & {\n hasRendered: true,\n startedRenderingAt: Date,\n renderedAt: Date,\n subject: string,\n html: string | null,\n text: string | null,\n isTransactional: boolean,\n isHighPriority: boolean,\n notificationCategoryId: string | null,\n};\n\n// Fields available after sending starts\ntype AdminEmailOutboxStartedSendingFields = AdminEmailOutboxRenderedFields & {\n startedSendingAt: Date,\n};\n\n// Fields available after delivery completes\n// Use Omit to properly override hasDelivered from base (inherited through chain)\ntype AdminEmailOutboxFinishedDeliveringFields = Omit<AdminEmailOutboxStartedSendingFields, "hasDelivered"> & {\n hasDelivered: true,\n deliveredAt: Date,\n};\n\n// =============================== STATUS-SPECIFIC TYPES ===============================\n\n// Use Omit to properly override isPaused from base\nexport type AdminEmailOutboxPaused = Omit<AdminEmailOutboxBase, "isPaused"> & {\n status: "paused",\n simpleStatus: "in-progress",\n isPaused: true,\n};\n\nexport type AdminEmailOutboxPreparing = AdminEmailOutboxBase & {\n status: "preparing",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxRendering = AdminEmailOutboxBase & {\n status: "rendering",\n simpleStatus: "in-progress",\n startedRenderingAt: Date,\n};\n\nexport type AdminEmailOutboxRenderError = AdminEmailOutboxBase & {\n status: "render-error",\n simpleStatus: "error",\n startedRenderingAt: Date,\n renderedAt: Date,\n renderError: string,\n};\n\nexport type AdminEmailOutboxScheduled = AdminEmailOutboxRenderedFields & {\n status: "scheduled",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxQueued = AdminEmailOutboxRenderedFields & {\n status: "queued",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxSending = AdminEmailOutboxStartedSendingFields & {\n status: "sending",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxServerError = AdminEmailOutboxStartedSendingFields & {\n status: "server-error",\n simpleStatus: "error",\n errorAt: Date,\n serverError: string,\n};\n\n// SKIPPED can happen at any time, so rendering/sending fields are optional\n// Use Omit to properly override hasRendered from base (can be true or false when skipped)\nexport type AdminEmailOutboxSkipped = Omit<AdminEmailOutboxBase, "hasRendered"> & {\n status: "skipped",\n simpleStatus: "ok",\n hasRendered: boolean,\n skippedAt: Date,\n skippedReason: string,\n skippedDetails: Record<string, unknown>,\n // Optional fields depending on when skipped\n startedRenderingAt?: Date,\n renderedAt?: Date,\n subject?: string,\n html?: string | null,\n text?: string | null,\n isTransactional?: boolean,\n isHighPriority?: boolean,\n notificationCategoryId?: string | null,\n startedSendingAt?: Date,\n};\n\nexport type AdminEmailOutboxBounced = AdminEmailOutboxStartedSendingFields & {\n status: "bounced",\n simpleStatus: "error",\n bouncedAt: Date,\n};\n\nexport type AdminEmailOutboxDeliveryDelayed = AdminEmailOutboxStartedSendingFields & {\n status: "delivery-delayed",\n simpleStatus: "ok",\n deliveryDelayedAt: Date,\n};\n\nexport type AdminEmailOutboxSent = AdminEmailOutboxFinishedDeliveringFields & {\n status: "sent",\n simpleStatus: "ok",\n canHaveDeliveryInfo: boolean,\n};\n\nexport type AdminEmailOutboxOpened = AdminEmailOutboxFinishedDeliveringFields & {\n status: "opened",\n simpleStatus: "ok",\n openedAt: Date,\n canHaveDeliveryInfo: true,\n};\n\nexport type AdminEmailOutboxClicked = AdminEmailOutboxFinishedDeliveringFields & {\n status: "clicked",\n simpleStatus: "ok",\n clickedAt: Date,\n canHaveDeliveryInfo: true,\n};\n\nexport type AdminEmailOutboxMarkedAsSpam = AdminEmailOutboxFinishedDeliveringFields & {\n status: "marked-as-spam",\n simpleStatus: "ok",\n markedAsSpamAt: Date,\n canHaveDeliveryInfo: true,\n};\n\n// =============================== DISCRIMINATED UNION ===============================\n\nexport type AdminEmailOutbox =\n | AdminEmailOutboxPaused\n | AdminEmailOutboxPreparing\n | AdminEmailOutboxRendering\n | AdminEmailOutboxRenderError\n | AdminEmailOutboxScheduled\n | AdminEmailOutboxQueued\n | AdminEmailOutboxSending\n | AdminEmailOutboxServerError\n | AdminEmailOutboxSkipped\n | AdminEmailOutboxBounced\n | AdminEmailOutboxDeliveryDelayed\n | AdminEmailOutboxSent\n | AdminEmailOutboxOpened\n | AdminEmailOutboxClicked\n | AdminEmailOutboxMarkedAsSpam;\n\ntype SendEmailOptionsBase = {\n themeId?: string | null | false,\n subject?: string,\n notificationCategoryName?: string,\n scheduledAt?: Date,\n variables?: Record<string, unknown>,\n}\n\n\nexport type SendEmailOptions = SendEmailOptionsBase\n & XOR<[\n { userIds: string[] },\n { allUsers: true }\n ]>\n & XOR<[\n { html: string },\n { templateId: string },\n { draftId: string }\n ]>\n\nexport type EmailDeliveryWindowStats = {\n sent: number,\n bounced: number,\n marked_as_spam: number,\n};\n\nexport type EmailDeliveryStats = {\n hour: EmailDeliveryWindowStats,\n day: EmailDeliveryWindowStats,\n week: EmailDeliveryWindowStats,\n month: EmailDeliveryWindowStats,\n};\n\nexport type EmailDeliveryCapacity = {\n rate_per_second: number,\n boost_multiplier: number,\n penalty_factor: number,\n is_boost_active: boolean,\n boost_expires_at: string | null,\n};\n\nexport type EmailDeliveryInfo = {\n stats: EmailDeliveryStats,\n capacity: EmailDeliveryCapacity,\n};\n'},{path:"index.ts",content:'export {\n StackAdminApp, StackClientApp,\n StackServerApp\n} from "./apps";\nexport type {\n StackAdminAppConstructor,\n StackAdminAppConstructorOptions,\n StackClientAppConstructor,\n StackClientAppConstructorOptions,\n StackClientAppJson,\n StackServerAppConstructor,\n StackServerAppConstructorOptions\n} from "./apps";\n\nexport type {\n EmailOutboxListOptions,\n EmailOutboxListResult,\n EmailOutboxUpdateOptions\n} from "./apps/interfaces/admin-app";\n\nexport type {\n ProjectConfig\n} from "./project-configs";\n\nexport type {\n InternalApiKey,\n InternalApiKeyBase,\n InternalApiKeyBaseCrudRead,\n InternalApiKeyCreateOptions,\n InternalApiKeyFirstView\n} from "./internal-api-keys";\n\nexport {\n stackAppInternalsSymbol\n} from "./common";\nexport {\n getPagePrompt,\n} from "./url-targets";\nexport type {\n GetCurrentUserOptions,\n /** @deprecated Use GetCurrentUserOptions instead */\n GetCurrentUserOptions as GetUserOptions,\n HandlerUrlOptions,\n HandlerUrls, OAuthScopesOnSignIn, ResolvedHandlerUrls\n} from "./common";\n\nexport type {\n Connection,\n OAuthConnection\n} from "./connected-accounts";\n\nexport type {\n ContactChannel,\n ServerContactChannel\n} from "./contact-channels";\n\nexport type {\n AdminEmailOutbox,\n AdminEmailOutboxRecipient,\n AdminEmailOutboxSimpleStatus,\n AdminEmailOutboxStatus,\n AdminSendAttemptError,\n AdminSentEmail\n} from "./email";\n\nexport type {\n AdminProjectPermission,\n AdminProjectPermissionDefinition,\n AdminProjectPermissionDefinitionCreateOptions,\n AdminProjectPermissionDefinitionUpdateOptions, AdminTeamPermission,\n AdminTeamPermissionDefinition,\n AdminTeamPermissionDefinitionCreateOptions,\n AdminTeamPermissionDefinitionUpdateOptions\n} from "./permissions";\n\nexport type {\n AdminDomainConfig,\n AdminEmailConfig,\n AdminOAuthProviderConfig,\n AdminProjectConfig,\n AdminProjectConfigUpdateOptions,\n OAuthProviderConfig\n} from "./project-configs";\n\nexport type {\n AdminOwnedProject,\n AdminProject,\n AdminProjectCreateOptions,\n AdminProjectUpdateOptions,\n Project,\n PushedConfigSource\n} from "./projects";\n\nexport type {\n EditableTeamMemberProfile, ReceivedTeamInvitation,\n SentTeamInvitation, ServerListUsersOptions,\n ServerTeam,\n ServerTeamCreateOptions, ServerTeamMemberProfile,\n ServerTeamUpdateOptions,\n ServerTeamUser,\n Team,\n TeamCreateOptions,\n TeamInvitation,\n TeamMemberProfile,\n TeamUpdateOptions,\n TeamUser\n} from "./teams";\n\nexport type {\n Auth,\n CurrentInternalServerUser,\n CurrentInternalUser,\n CurrentServerUser,\n CurrentUser,\n OAuthProvider,\n ServerOAuthProvider,\n ServerUser,\n User\n} from "./users";\n\n'},{path:"internal-api-keys/index.ts",content:'\nimport { InternalApiKeyCreateCrudRequest } from "@stackframe/stack-shared/dist/interface/admin-interface";\nimport { InternalApiKeysCrud } from "@stackframe/stack-shared/dist/interface/crud/internal-api-keys";\n\nexport type InternalApiKeyBase = {\n id: string,\n description: string,\n expiresAt: Date,\n manuallyRevokedAt: Date | null,\n createdAt: Date,\n isValid(): boolean,\n whyInvalid(): "expired" | "manually-revoked" | null,\n revoke(): Promise<void>,\n};\n\nexport type InternalApiKeyBaseCrudRead = Pick<InternalApiKeysCrud["Admin"]["Read"], "id" | "created_at_millis" | "description" | "expires_at_millis" | "manually_revoked_at_millis">;\n\nexport type InternalApiKeyFirstView = {\n publishableClientKey?: string,\n secretServerKey?: string,\n superSecretAdminKey?: string,\n} & InternalApiKeyBase;\n\nexport type InternalApiKey = {\n publishableClientKey: null | {\n lastFour: string,\n },\n secretServerKey: null | {\n lastFour: string,\n },\n superSecretAdminKey: null | {\n lastFour: string,\n },\n} & InternalApiKeyBase;\n\nexport type InternalApiKeyCreateOptions = {\n description: string,\n expiresAt: Date,\n hasPublishableClientKey: boolean,\n hasSecretServerKey: boolean,\n hasSuperSecretAdminKey: boolean,\n};\nexport function internalApiKeyCreateOptionsToCrud(options: InternalApiKeyCreateOptions): InternalApiKeyCreateCrudRequest {\n return {\n description: options.description,\n expires_at_millis: options.expiresAt.getTime(),\n has_publishable_client_key: options.hasPublishableClientKey,\n has_secret_server_key: options.hasSecretServerKey,\n has_super_secret_admin_key: options.hasSuperSecretAdminKey,\n };\n}\n'},{path:"notification-categories/index.ts",content:"export type NotificationCategory = {\n id: string,\n name: string,\n enabled: boolean,\n canDisable: boolean,\n\n setEnabled(enabled: boolean): Promise<void>,\n}\n"},{path:"permissions/index.ts",content:'import { ProjectPermissionDefinitionsCrud } from "@stackframe/stack-shared/dist/interface/crud/project-permissions";\nimport { TeamPermissionDefinitionsCrud } from "@stackframe/stack-shared/dist/interface/crud/team-permissions";\n\n\nexport type TeamPermission = {\n id: string,\n};\n\nexport type AdminTeamPermission = TeamPermission;\n\nexport type AdminTeamPermissionDefinition = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n isDefaultUserPermission?: boolean,\n};\n\nexport type AdminTeamPermissionDefinitionCreateOptions = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n isDefaultUserPermission?: boolean,\n};\nexport function adminTeamPermissionDefinitionCreateOptionsToCrud(options: AdminTeamPermissionDefinitionCreateOptions): TeamPermissionDefinitionsCrud["Admin"]["Create"] {\n return {\n id: options.id,\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n\nexport type AdminTeamPermissionDefinitionUpdateOptions = Pick<Partial<AdminTeamPermissionDefinitionCreateOptions>, "description" | "containedPermissionIds">;\nexport function adminTeamPermissionDefinitionUpdateOptionsToCrud(options: AdminTeamPermissionDefinitionUpdateOptions): TeamPermissionDefinitionsCrud["Admin"]["Update"] {\n return {\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n\nexport type ProjectPermission = {\n id: string,\n};\n\nexport type AdminProjectPermission = ProjectPermission;\n\nexport type AdminProjectPermissionDefinition = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n};\n\nexport type AdminProjectPermissionDefinitionCreateOptions = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n};\nexport function adminProjectPermissionDefinitionCreateOptionsToCrud(options: AdminProjectPermissionDefinitionCreateOptions): ProjectPermissionDefinitionsCrud["Admin"]["Create"] {\n return {\n id: options.id,\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n\nexport type AdminProjectPermissionDefinitionUpdateOptions = Pick<Partial<AdminProjectPermissionDefinitionCreateOptions>, "description" | "containedPermissionIds">;\nexport function adminProjectPermissionDefinitionUpdateOptionsToCrud(options: AdminProjectPermissionDefinitionUpdateOptions): ProjectPermissionDefinitionsCrud["Admin"]["Update"] {\n return {\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n'},{path:"project-configs/index.ts",content:"import { AdminTeamPermission } from \"../permissions\";\n\nexport type ProjectConfig = {\n readonly signUpEnabled: boolean,\n readonly credentialEnabled: boolean,\n readonly magicLinkEnabled: boolean,\n readonly passkeyEnabled: boolean,\n readonly clientTeamCreationEnabled: boolean,\n readonly clientUserDeletionEnabled: boolean,\n readonly oauthProviders: OAuthProviderConfig[],\n readonly allowUserApiKeys: boolean,\n readonly allowTeamApiKeys: boolean,\n};\n\nexport type OAuthProviderConfig = {\n readonly id: string,\n};\n\n/**\n * @deprecated This type is deprecated. Use the new config override setup instead.\n */\nexport type AdminProjectConfig = {\n readonly signUpEnabled: boolean,\n readonly credentialEnabled: boolean,\n readonly magicLinkEnabled: boolean,\n readonly passkeyEnabled: boolean,\n readonly clientTeamCreationEnabled: boolean,\n readonly clientUserDeletionEnabled: boolean,\n readonly allowLocalhost: boolean,\n readonly oauthProviders: AdminOAuthProviderConfig[],\n readonly emailConfig?: AdminEmailConfig,\n readonly emailTheme: string,\n readonly domains: AdminDomainConfig[],\n readonly createTeamOnSignUp: boolean,\n readonly teamCreatorDefaultPermissions: AdminTeamPermission[],\n readonly teamMemberDefaultPermissions: AdminTeamPermission[],\n readonly userDefaultPermissions: AdminTeamPermission[],\n readonly oauthAccountMergeStrategy: 'link_method' | 'raise_error' | 'allow_duplicates',\n readonly allowUserApiKeys: boolean,\n readonly allowTeamApiKeys: boolean,\n};\n\nexport type AdminEmailConfig = (\n {\n type: \"standard\" | \"resend\",\n senderName: string,\n senderEmail: string,\n host: string,\n port: number,\n username: string,\n password: string,\n }\n | {\n type: \"shared\",\n }\n);\n\nexport type AdminDomainConfig = {\n domain: string,\n handlerPath: string,\n};\n\nexport type AdminOAuthProviderConfig = {\n id: string,\n} & (\n | { type: 'shared' }\n | {\n type: 'standard',\n clientId: string,\n clientSecret: string,\n facebookConfigId?: string,\n microsoftTenantId?: string,\n appleBundleIds?: string[],\n }\n ) & OAuthProviderConfig;\n\nexport type AdminProjectConfigUpdateOptions = {\n domains?: {\n domain: string,\n handlerPath: string,\n }[],\n oauthProviders?: AdminOAuthProviderConfig[],\n signUpEnabled?: boolean,\n credentialEnabled?: boolean,\n magicLinkEnabled?: boolean,\n passkeyEnabled?: boolean,\n clientTeamCreationEnabled?: boolean,\n clientUserDeletionEnabled?: boolean,\n allowLocalhost?: boolean,\n createTeamOnSignUp?: boolean,\n emailConfig?: AdminEmailConfig,\n emailTheme?: string,\n teamCreatorDefaultPermissions?: { id: string }[],\n teamMemberDefaultPermissions?: { id: string }[],\n userDefaultPermissions?: { id: string }[],\n oauthAccountMergeStrategy?: 'link_method' | 'raise_error' | 'allow_duplicates',\n allowUserApiKeys?: boolean,\n allowTeamApiKeys?: boolean,\n};\n"},{path:"projects/index.ts",content:'import { ProductionModeError } from "@stackframe/stack-shared/dist/helpers/production-mode";\nimport { AdminUserProjectsCrud, ProjectsCrud } from "@stackframe/stack-shared/dist/interface/crud/projects";\nimport { ProjectOnboardingStatus } from "@stackframe/stack-shared/dist/schema-fields";\n\nimport { CompleteConfig, EnvironmentConfigNormalizedOverride, EnvironmentConfigOverrideOverride } from "@stackframe/stack-shared/dist/config/schema";\nimport { StackAdminApp } from "../apps/interfaces/admin-app";\nimport { AdminProjectConfig, AdminProjectConfigUpdateOptions, ProjectConfig } from "../project-configs";\n\n/**\n * SDK type for pushed config source (camelCase for SDK).\n * Represents where the branch config was pushed from.\n */\nexport type PushedConfigSource =\n | { type: "pushed-from-github", owner: string, repo: string, branch: string, commitHash: string, configFilePath: string, workflowPath?: string }\n | { type: "pushed-from-unknown" }\n | { type: "unlinked" };\n\nexport type PushConfigOptions = {\n /**\n * The source of this config push.\n */\n source: PushedConfigSource,\n};\n\n\nexport type Project = {\n readonly id: string,\n readonly displayName: string,\n readonly config: ProjectConfig,\n};\n\nexport type AdminProject = {\n readonly id: string,\n readonly displayName: string,\n readonly description: string | null,\n readonly createdAt: Date,\n readonly isProductionMode: boolean,\n readonly isDevelopmentEnvironment: boolean,\n readonly ownerTeamId: string | null,\n readonly onboardingStatus: ProjectOnboardingStatus,\n readonly logoUrl: string | null | undefined,\n readonly logoFullUrl: string | null | undefined,\n readonly logoDarkModeUrl: string | null | undefined,\n readonly logoFullDarkModeUrl: string | null | undefined,\n\n readonly config: AdminProjectConfig,\n\n update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>,\n delete(this: AdminProject): Promise<void>,\n\n getConfig(this: AdminProject): Promise<CompleteConfig>,\n // NEXT_LINE_PLATFORM react-like\n useConfig(this: AdminProject): CompleteConfig,\n\n /**\n * Updates the environment\'s config by merging the provided config into the existing config.\n *\n * Changes made with `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`. This is best for environment-specific\n * configuration like secrets, API keys, and other values that you wouldn\'t push into a source repository.\n */\n // We have some strict types here in order to prevent accidental overwriting of a top-level property of a config object\n updateConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n ): Promise<void>,\n\n /**\n * Pushes a config, replacing any previous config pushed with `pushConfig`.\n *\n * **Note:** This function does **not** replace any changes made with `updateConfig`. Changes made with\n * `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`.\n *\n * This is useful for programmatically deploying configuration. More often than not, you\'ll want to use\n * `updateConfig` instead.\n */\n pushConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n options: PushConfigOptions,\n ): Promise<void>,\n\n /**\n * Updates the pushed config by merging the provided config into the existing pushed config.\n *\n * **Warning:** This is almost always **not** the function you want to call. Changes made with\n * `updatePushedConfig` will be replaced entirely the next time `pushConfig` is called. Consider using\n * `pushConfig` to set the full pushed config, or `updateConfig` for environment-specific values that\n * should persist across pushes.\n *\n * This function is useful for making temporary modifications to the pushed config before the next push.\n */\n updatePushedConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride\n ): Promise<void>,\n\n /**\n * Gets the source metadata for the pushed config, indicating where it was pushed from.\n *\n * The source can be:\n * - `pushed-from-github`: Config was pushed from a GitHub repository\n * - `pushed-from-unknown`: Config was pushed via CLI but source details unknown\n * - `unlinked`: Config can be edited directly on the dashboard\n */\n getPushedConfigSource(this: AdminProject): Promise<PushedConfigSource>,\n\n /**\n * Unlinks the pushed config source, setting it to "unlinked".\n * This allows the config to be edited directly on the dashboard without external push restrictions.\n */\n unlinkPushedConfigSource(this: AdminProject): Promise<void>,\n\n /**\n * Resets (removes) specific keys from the config override at the specified level.\n * Uses the same nested key logic as the override algorithm: resetting key "a.b" also resets "a.b.c".\n *\n * This is useful when updating the pushed config (branch level) and wanting to remove the same keys\n * from the environment config override so that the branch config values take precedence.\n */\n resetConfigOverrideKeys(this: AdminProject, level: "branch" | "environment", keys: string[]): Promise<void>,\n\n /**\n * Gets the raw config override at the specified level (before merging/defaults).\n * Useful for inspecting exactly what\'s been set at each level.\n */\n getConfigOverride(this: AdminProject, level: "branch" | "environment"): Promise<Record<string, unknown>>,\n\n /**\n * Replaces the entire config override at the specified level.\n * For branch level, preserves the existing source metadata.\n */\n replaceConfigOverride(this: AdminProject, level: "branch" | "environment", config: Record<string, unknown>): Promise<void>,\n\n getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>,\n // NEXT_LINE_PLATFORM react-like\n useProductionModeErrors(this: AdminProject): ProductionModeError[],\n} & Project;\n\nexport type AdminOwnedProject = {\n readonly app: StackAdminApp<false>,\n} & AdminProject;\n\nexport type AdminProjectUpdateOptions = {\n displayName?: string,\n description?: string,\n isProductionMode?: boolean,\n onboardingStatus?: ProjectOnboardingStatus,\n /**\n * Updates `project.requirePublishableClientKey` in the project-level config override.\n */\n requirePublishableClientKey?: boolean,\n logoUrl?: string | null,\n logoFullUrl?: string | null,\n logoDarkModeUrl?: string | null,\n logoFullDarkModeUrl?: string | null,\n config?: AdminProjectConfigUpdateOptions,\n};\nexport function adminProjectUpdateOptionsToCrud(options: AdminProjectUpdateOptions): ProjectsCrud["Admin"]["Update"] {\n return {\n display_name: options.displayName,\n description: options.description,\n is_production_mode: options.isProductionMode,\n onboarding_status: options.onboardingStatus,\n logo_url: options.logoUrl,\n logo_full_url: options.logoFullUrl,\n logo_dark_mode_url: options.logoDarkModeUrl,\n logo_full_dark_mode_url: options.logoFullDarkModeUrl,\n /**\n * NOTE: Do not update this config anymore. It\'s been superseded by the new config in schema.ts.\n * @deprecated\n */\n config: {\n domains: options.config?.domains?.map((d) => ({\n domain: d.domain,\n handler_path: d.handlerPath\n })),\n oauth_providers: options.config?.oauthProviders?.map((p) => ({\n id: p.id as any,\n type: p.type,\n ...(p.type === \'standard\' && {\n client_id: p.clientId,\n client_secret: p.clientSecret,\n facebook_config_id: p.facebookConfigId,\n microsoft_tenant_id: p.microsoftTenantId,\n apple_bundle_ids: p.appleBundleIds,\n }),\n })),\n email_config: options.config?.emailConfig && (\n options.config.emailConfig.type === \'shared\' ? {\n type: \'shared\',\n } : {\n type: \'standard\',\n host: options.config.emailConfig.host,\n port: options.config.emailConfig.port,\n username: options.config.emailConfig.username,\n password: options.config.emailConfig.password,\n sender_name: options.config.emailConfig.senderName,\n sender_email: options.config.emailConfig.senderEmail,\n }\n ),\n email_theme: options.config?.emailTheme,\n sign_up_enabled: options.config?.signUpEnabled,\n credential_enabled: options.config?.credentialEnabled,\n magic_link_enabled: options.config?.magicLinkEnabled,\n passkey_enabled: options.config?.passkeyEnabled,\n allow_localhost: options.config?.allowLocalhost,\n create_team_on_sign_up: options.config?.createTeamOnSignUp,\n client_team_creation_enabled: options.config?.clientTeamCreationEnabled,\n client_user_deletion_enabled: options.config?.clientUserDeletionEnabled,\n team_creator_default_permissions: options.config?.teamCreatorDefaultPermissions,\n team_member_default_permissions: options.config?.teamMemberDefaultPermissions,\n user_default_permissions: options.config?.userDefaultPermissions,\n oauth_account_merge_strategy: options.config?.oauthAccountMergeStrategy,\n allow_user_api_keys: options.config?.allowUserApiKeys,\n allow_team_api_keys: options.config?.allowTeamApiKeys,\n },\n };\n}\n\nexport type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, \'displayName\'> & {\n displayName: string,\n teamId: string,\n isDevelopmentEnvironment?: boolean,\n};\nexport function adminProjectCreateOptionsToCrud(options: AdminProjectCreateOptions): AdminUserProjectsCrud["Server"]["Create"] {\n return {\n ...adminProjectUpdateOptionsToCrud(options),\n display_name: options.displayName,\n is_development_environment: options.isDevelopmentEnvironment,\n owner_team_id: options.teamId,\n };\n}\n'},{path:"session-replays/index.ts",content:"export type AdminSessionReplay = {\n id: string,\n projectUser: {\n id: string,\n displayName: string | null,\n primaryEmail: string | null,\n },\n startedAt: Date,\n lastEventAt: Date,\n chunkCount: number,\n eventCount: number,\n};\n\nexport type AdminSessionReplayChunk = {\n id: string,\n batchId: string,\n sessionReplaySegmentId: string | null,\n browserSessionId: string | null,\n eventCount: number,\n byteLength: number,\n firstEventAt: Date,\n lastEventAt: Date,\n createdAt: Date,\n};\n\nexport type ListSessionReplaysOptions = {\n limit?: number,\n cursor?: string,\n userIds?: string[],\n teamIds?: string[],\n durationMsMin?: number,\n durationMsMax?: number,\n lastEventAtFromMillis?: number,\n lastEventAtToMillis?: number,\n clickCountMin?: number,\n};\n\nexport type ListSessionReplaysResult = {\n items: AdminSessionReplay[],\n nextCursor: string | null,\n};\n\nexport type ListSessionReplayChunksOptions = {\n limit?: number,\n cursor?: string,\n};\n\nexport type ListSessionReplayChunksResult = {\n items: AdminSessionReplayChunk[],\n nextCursor: string | null,\n};\n\nexport type SessionReplayAllEventsResult = {\n chunks: Array<{\n id: string,\n batchId: string,\n sessionReplaySegmentId: string | null,\n eventCount: number,\n byteLength: number,\n firstEventAt: Date,\n lastEventAt: Date,\n createdAt: Date,\n }>,\n chunkEvents: Array<{\n chunkId: string,\n events: unknown[],\n }>,\n};\n"},{path:"teams/index.ts",content:'import { TeamsCrud } from "@stackframe/stack-shared/dist/interface/crud/teams";\nimport { ReadonlyJson } from "@stackframe/stack-shared/dist/utils/json";\n\nimport { ApiKeyCreationOptions, TeamApiKey, TeamApiKeyFirstView } from "../api-keys";\nimport { AsyncStoreProperty } from "../common";\nimport { Customer } from "../customers";\nimport { ServerUser } from "../users";\n\n\nexport type TeamMemberProfile = {\n displayName: string | null,\n profileImageUrl: string | null,\n}\n\nexport type TeamMemberProfileUpdateOptions = {\n displayName?: string,\n profileImageUrl?: string | null,\n};\n\nexport type EditableTeamMemberProfile = TeamMemberProfile & {\n update(update: TeamMemberProfileUpdateOptions): Promise<void>,\n}\n\nexport type TeamUser = {\n id: string,\n teamProfile: TeamMemberProfile,\n}\n\n/**\n * A team invitation as seen from the team\'s perspective (ie. the sender).\n *\n * Returned by `team.listInvitations()`. Contains the recipient email and allows\n * revoking the invitation.\n */\nexport type SentTeamInvitation = {\n id: string,\n recipientEmail: string | null,\n expiresAt: Date,\n revoke(): Promise<void>,\n}\n\n/**\n * @deprecated Use `SentTeamInvitation` instead.\n */\nexport type TeamInvitation = SentTeamInvitation;\n\n/**\n * A team invitation as seen from the invited user\'s perspective (ie. the receiver).\n *\n * Returned by `user.listTeamInvitations()`. Contains information about teams that have\n * sent invitations to any of the user\'s verified email addresses, and allows accepting\n * the invitation to join the team.\n */\nexport type ReceivedTeamInvitation = {\n id: string,\n teamId: string,\n teamDisplayName: string,\n recipientEmail: string,\n expiresAt: Date,\n\n /**\n * Accepts the invitation, adding the current user to the team.\n *\n * The user must have a verified email address matching the invitation\'s recipient email.\n */\n accept(): Promise<void>,\n}\n\nexport type Team = {\n id: string,\n displayName: string,\n profileImageUrl: string | null,\n clientMetadata: any,\n clientReadOnlyMetadata: any,\n inviteUser(options: { email: string, callbackUrl?: string }): Promise<void>,\n listUsers(): Promise<TeamUser[]>,\n useUsers(): TeamUser[], // THIS_LINE_PLATFORM react-like\n listInvitations(): Promise<SentTeamInvitation[]>,\n useInvitations(): SentTeamInvitation[], // THIS_LINE_PLATFORM react-like\n update(update: TeamUpdateOptions): Promise<void>,\n delete(): Promise<void>,\n createApiKey(options: ApiKeyCreationOptions<"team">): Promise<TeamApiKeyFirstView>,\n} & AsyncStoreProperty<"apiKeys", [], TeamApiKey[], true> & Customer;\n\nexport type TeamUpdateOptions = {\n displayName?: string,\n profileImageUrl?: string | null,\n clientMetadata?: ReadonlyJson,\n};\nexport function teamUpdateOptionsToCrud(options: TeamUpdateOptions): TeamsCrud["Client"]["Update"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n client_metadata: options.clientMetadata,\n };\n}\n\nexport type TeamCreateOptions = {\n displayName: string,\n profileImageUrl?: string,\n}\nexport function teamCreateOptionsToCrud(options: TeamCreateOptions, creatorUserId: string): TeamsCrud["Client"]["Create"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n creator_user_id: creatorUserId,\n };\n}\n\n\nexport type ServerTeamMemberProfile = TeamMemberProfile;\n\nexport type ServerTeamUser = ServerUser & {\n teamProfile: ServerTeamMemberProfile,\n}\n\nexport type ServerTeam = {\n createdAt: Date,\n serverMetadata: any,\n listUsers(): Promise<ServerTeamUser[]>,\n useUsers(): ServerUser[], // THIS_LINE_PLATFORM react-like\n update(update: ServerTeamUpdateOptions): Promise<void>,\n delete(): Promise<void>,\n addUser(userId: string): Promise<void>,\n inviteUser(options: { email: string, callbackUrl?: string }): Promise<void>,\n removeUser(userId: string): Promise<void>,\n} & Team;\n\ntype ServerListUsersOptionsBase = {\n cursor?: string,\n limit?: number,\n orderBy?: \'signedUpAt\' | \'lastActiveAt\',\n desc?: boolean,\n /**\n * Free-text search. Matches user ID (exact UUID), display name, and contact channels (e.g. primary email).\n */\n query?: string,\n /**\n * Only return users who are members of the given team.\n */\n teamId?: string,\n /**\n * Whether to include restricted users (users who haven\'t completed onboarding requirements).\n * Defaults to false.\n */\n includeRestricted?: boolean,\n /**\n * Whether to include anonymous users (and restricted users).\n * Defaults to false.\n */\n includeAnonymous?: boolean,\n};\n\nexport type ServerListUsersOptions = ServerListUsersOptionsBase & (\n {\n onlyAnonymous?: false,\n } | {\n /**\n * Whether to return only anonymous users.\n * Requires includeAnonymous=true.\n * Defaults to false.\n */\n onlyAnonymous: true,\n includeAnonymous: true,\n }\n);\n\nexport type ServerListTeamsOptions = {\n orderBy?: \'createdAt\',\n desc?: boolean,\n cursor?: string,\n limit?: number,\n /**\n * Free-text search. Matches team ID (exact UUID) and display name.\n */\n query?: string,\n};\n\nexport type ServerTeamCreateOptions = TeamCreateOptions & {\n creatorUserId?: string,\n};\nexport function serverTeamCreateOptionsToCrud(options: ServerTeamCreateOptions): TeamsCrud["Server"]["Create"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n creator_user_id: options.creatorUserId,\n };\n}\n\nexport type ServerTeamUpdateOptions = TeamUpdateOptions & {\n clientReadOnlyMetadata?: ReadonlyJson,\n serverMetadata?: ReadonlyJson,\n};\nexport function serverTeamUpdateOptionsToCrud(options: ServerTeamUpdateOptions): TeamsCrud["Server"]["Update"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n client_metadata: options.clientMetadata,\n client_read_only_metadata: options.clientReadOnlyMetadata,\n server_metadata: options.serverMetadata,\n };\n}\n'},{path:"url-targets.test.ts",content:'import { afterEach, describe, expect, it, vi } from "vitest";\nimport { buildCliAuthConfirmUrl, getPagePrompt, isLocalHandlerUrlTarget, resolveHandlerUrls, resolveUnknownHandlerPathFallbackUrl } from "./url-targets";\n\ndescribe("handler URL targets", () => {\n afterEach(() => {\n vi.unstubAllEnvs();\n });\n\n it("treats handler-component targets the same as omitted values", () => {\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: "/custom-handler",\n signIn: { type: "handler-component" },\n },\n });\n\n expect(urls.signIn).toBe("/custom-handler/sign-in");\n });\n\n it("treats custom v0 page targets like legacy string targets", () => {\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: "/custom-handler",\n signIn: { type: "handler-component" },\n signUp: { type: "custom", url: "/sign-up-explicit", version: 0 },\n },\n });\n\n expect(urls.signIn).toBe("/custom-handler/sign-in");\n expect(urls.signUp).toBe("/sign-up-explicit");\n });\n\n it("throws on v0 custom target for handler page", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: { type: "custom", url: "/custom-handler", version: 0 },\n },\n })).toThrowError(/cannot be a custom page/);\n });\n\n it("supports the latest documented custom target version", () => {\n const signInPrompt = getPagePrompt("signIn");\n if (signInPrompt == null) {\n throw new Error("Expected signIn prompt metadata to exist");\n }\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n signIn: { type: "custom", url: "/custom-sign-in", version: signInPrompt.latestVersion },\n },\n });\n\n expect(urls.signIn).toBe("/custom-sign-in");\n });\n\n it("throws on custom target versions newer than the latest supported version", () => {\n const signInPrompt = getPagePrompt("signIn");\n if (signInPrompt == null) {\n throw new Error("Expected signIn prompt metadata to exist");\n }\n\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n signIn: { type: "custom", url: "/custom-sign-in", version: signInPrompt.latestVersion + 1 },\n },\n })).toThrowError(/Unsupported custom page version/);\n });\n\n it("throws on non-zero custom version for handler page", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: { type: "custom", url: "/custom-handler", version: 1 },\n },\n })).toThrowError(/cannot be a custom page/);\n });\n\n it("uses hosted defaults for unspecified URLs", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n signUp: "/sign-up",\n default: { type: "hosted" },\n },\n });\n\n expect(urls.signUp).toBe("/sign-up");\n expect(urls.signIn).toBe("https://project-id.example-stack-hosted.test/handler/sign-in");\n expect(urls.cliAuthConfirm).toBe("https://project-id.example-stack-hosted.test/handler/cli-auth-confirm");\n });\n\n it("rejects absolute OAuth callback string targets", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n oauthCallback: "https://app.example.test/oauth-callback",\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [StackAssertionError: OAuth callback URLs must be relative.\n\n This is likely an error in Stack. Please make sure you are running the newest version and report it.]\n `);\n });\n\n it("rejects absolute OAuth callback custom targets", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n oauthCallback: { type: "custom", url: "https://app.example.test/oauth-callback", version: 0 },\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [StackAssertionError: OAuth callback URLs must be relative.\n\n This is likely an error in Stack. Please make sure you are running the newest version and report it.]\n `);\n });\n\n it("inherits a hosted default target for the OAuth callback", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n });\n\n expect(urls.signIn).toBe("https://project-id.example-stack-hosted.test/handler/sign-in");\n expect(urls.oauthCallback).toBe("https://project-id.example-stack-hosted.test/handler/oauth-callback");\n });\n\n it("supports custom CLI auth confirmation targets", () => {\n const cliAuthConfirmPrompt = getPagePrompt("cliAuthConfirm");\n if (cliAuthConfirmPrompt == null) {\n throw new Error("Expected cliAuthConfirm prompt metadata to exist");\n }\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n cliAuthConfirm: { type: "custom", url: "/cli/authorize", version: cliAuthConfirmPrompt.latestVersion },\n },\n });\n\n expect(urls.cliAuthConfirm).toBe("/cli/authorize");\n });\n\n it("builds CLI auth login URLs from the resolved confirmation target", () => {\n expect(buildCliAuthConfirmUrl({\n cliAuthConfirmUrl: "/cli/authorize",\n appUrl: "https://app.example.test/base",\n loginCode: "login-code",\n })).toBe("https://app.example.test/cli/authorize?login_code=login-code");\n });\n\n it("uses default target for unknown /handler/* pages", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");\n\n const url = resolveUnknownHandlerPathFallbackUrl({\n defaultTarget: { type: "hosted" },\n projectId: "project-id",\n unknownPath: "custom-page",\n });\n\n expect(url).toBe("https://project-id.example-stack-hosted.test/handler/custom-page");\n });\n\n it("uses the full hosted handler URL template when configured", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://{projectId}.localhost:${NEXT_PUBLIC_STACK_PORT_PREFIX:-81}09/{hostedPath}");\n vi.stubEnv("NEXT_PUBLIC_STACK_PORT_PREFIX", "93");\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n });\n\n expect(urls.signIn).toBe("http://project-id.localhost:9309/handler/sign-in");\n expect(urls.accountSettings).toBe("http://project-id.localhost:9309/handler/account-settings");\n });\n\n it("validates the hosted handler URL template placeholders", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://localhost:9309/{projectId}/handler");\n\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n })).toThrowError(/\\{projectId\\} and \\{hostedPath\\}/);\n });\n\n it("rejects hosted handler URL templates that put the project ID in the path", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://localhost:9309/{projectId}/{hostedPath}");\n\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [StackAssertionError: The hosted handler URL template must put {projectId} in the hostname.\n\n This is likely an error in Stack. Please make sure you are running the newest version and report it.]\n `);\n });\n});\n\ndescribe("isLocalHandlerUrlTarget", () => {\n it("treats relative handler URLs as local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "/handler/sign-in",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(true);\n });\n\n it("treats same-origin absolute handler URLs as local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "http://p91.localhost:9101/handler/sign-in",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(true);\n });\n\n it("treats cross-origin absolute handler URLs as non-local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "https://project-id.built-with-stack-auth.com/handler/sign-in",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(false);\n });\n\n it("treats non-handler paths as non-local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "/projects",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(false);\n });\n});\n'},{path:"url-targets.ts",content:'import { getCustomPagePrompts, type CustomPagePrompt } from "@stackframe/stack-shared/dist/interface/handler-urls";\nimport { StackAssertionError } from "@stackframe/stack-shared/dist/utils/errors";\nimport { getHostedHandlerUrlFromConfig } from "@stackframe/stack-shared/dist/utils/redirect-urls";\nimport { envVars } from "../env";\nimport { DefaultHandlerUrlTarget, HandlerPageUrls, HandlerUrlOptions, HandlerUrlTarget, HandlerUrls, ResolvedHandlerUrls } from "./common";\n\nconst localUrlPlaceholderOrigin = "http://example.com";\nconst schemePrefixRegex = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\n\nconst customPagePrompts: Record<keyof Omit<HandlerPageUrls, "handler">, CustomPagePrompt> = getCustomPagePrompts();\n\nconst joinHandlerComponentPath = (basePath: string, pagePath: string): string => {\n const normalizedBasePath = basePath.endsWith("/") && basePath.length > 1\n ? basePath.slice(0, -1)\n : basePath;\n if (pagePath.length === 0) {\n return normalizedBasePath;\n }\n if (normalizedBasePath === "/") {\n return `/${pagePath}`;\n }\n return `${normalizedBasePath}/${pagePath}`;\n};\n\nconst getHostedPagePathForHandlerName = (handlerName: keyof HandlerUrls): string => {\n switch (handlerName) {\n case "handler": {\n return "";\n }\n case "home": {\n return "";\n }\n case "afterSignIn": {\n return "";\n }\n case "afterSignUp": {\n return "";\n }\n case "afterSignOut": {\n return "";\n }\n case "signIn": {\n return "sign-in";\n }\n case "signUp": {\n return "sign-up";\n }\n case "signOut": {\n return "sign-out";\n }\n case "emailVerification": {\n return "email-verification";\n }\n case "passwordReset": {\n return "password-reset";\n }\n case "forgotPassword": {\n return "forgot-password";\n }\n case "oauthCallback": {\n return "oauth-callback";\n }\n case "magicLinkCallback": {\n return "magic-link-callback";\n }\n case "accountSettings": {\n return "account-settings";\n }\n case "teamInvitation": {\n return "team-invitation";\n }\n case "cliAuthConfirm": {\n return "cli-auth-confirm";\n }\n case "mfa": {\n return "mfa";\n }\n case "error": {\n return "error";\n }\n case "onboarding": {\n return "onboarding";\n }\n }\n};\n\nconst resolveCustomTargetUrl = (options: {\n target: { type: "custom", url: string, version: number },\n handlerName: keyof HandlerUrls,\n}): string => {\n const handlerName = options.handlerName;\n if (handlerName in customPagePrompts) {\n const customPagePrompt = customPagePrompts[handlerName as keyof typeof customPagePrompts];\n if (options.target.version === 0 || options.target.version in customPagePrompt.versions) {\n return options.target.url;\n }\n\n throw new Error(`Unsupported custom page version ${options.target.version} for ${options.handlerName} page at ${options.target.url}. The latest supported version of this page is ${Math.max(0, ...Object.keys(customPagePrompt.versions).map(Number))}. Please upgrade your Stack Auth SDK to a version that supports this version.`);\n } else {\n throw new Error(`URL target ${options.handlerName} cannot be a custom page. Please specify the URL as a string instead.`);\n }\n};\n\nexport const getHostedHandlerUrl = (options: { projectId: string, pagePath: string }): string => {\n const normalizedPagePath = options.pagePath.replace(/^\\/+/, "");\n const hostedPath = normalizedPagePath.length > 0 ? `handler/${normalizedPagePath}` : "handler";\n return getHostedHandlerUrlFromConfig({\n projectId: options.projectId,\n hostedPath,\n hostedHandlerDomainSuffix: envVars.NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX,\n hostedHandlerUrlTemplate: envVars.NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE,\n stackPortPrefix: envVars.NEXT_PUBLIC_STACK_PORT_PREFIX,\n });\n};\n\nconst isRelativeUrlString = (url: string): boolean => {\n if (url.startsWith("//")) {\n return false;\n }\n return !schemePrefixRegex.test(url);\n};\n\nexport const isLocalHandlerUrlTarget = (options: {\n targetUrl: string,\n handlerPath: string,\n currentOrigin?: string,\n}): boolean => {\n const urlObject = new URL(options.targetUrl, localUrlPlaceholderOrigin);\n const isHandlerPathTarget = urlObject.pathname === options.handlerPath\n || urlObject.pathname.startsWith(`${options.handlerPath}/`);\n if (!isHandlerPathTarget) {\n return false;\n }\n\n // On server we only have path information, so treat matching handler paths as local.\n if (options.currentOrigin == null) {\n return true;\n }\n\n return isRelativeUrlString(options.targetUrl) || urlObject.origin === options.currentOrigin;\n};\n\nconst resolveUrlTarget = (options: {\n target: HandlerUrlTarget,\n fallbackPath: string,\n handlerName: keyof HandlerUrls,\n projectId: string,\n}): string => {\n if (typeof options.target === "string") {\n return options.target;\n }\n\n switch (options.target.type) {\n case "handler-component": {\n return options.fallbackPath;\n }\n case "hosted": {\n return getHostedHandlerUrl({\n projectId: options.projectId,\n pagePath: getHostedPagePathForHandlerName(options.handlerName),\n });\n }\n case "custom": {\n return resolveCustomTargetUrl({\n target: options.target,\n handlerName: options.handlerName,\n });\n }\n }\n};\n\nconst assertOAuthCallbackTargetIsRelative = (target: HandlerUrlTarget): void => {\n const url = typeof target === "string"\n ? target\n : target.type === "custom"\n ? target.url\n : null;\n if (url != null && !isRelativeUrlString(url)) {\n throw new StackAssertionError("OAuth callback URLs must be relative.", {\n oauthCallbackUrl: url,\n hint: "Use a relative URL like \'/handler/oauth-callback\', or use { type: \'hosted\' } to let Stack use the current page for hosted callbacks.",\n });\n }\n};\n\nexport const resolveHandlerUrls = (options: { urls: HandlerUrlOptions | undefined, projectId: string }): ResolvedHandlerUrls => {\n const configuredUrls = options.urls;\n const defaultTarget = configuredUrls?.default ?? { type: "handler-component" } as const;\n const oauthCallbackTarget: HandlerUrlTarget = configuredUrls?.oauthCallback ?? (\n defaultTarget.type === "hosted"\n ? defaultTarget\n : { type: "handler-component" }\n );\n assertOAuthCallbackTargetIsRelative(oauthCallbackTarget);\n let handlerComponentBasePath = "/handler";\n if (typeof configuredUrls?.handler === "string") {\n handlerComponentBasePath = configuredUrls.handler;\n } else if (configuredUrls?.handler != null && configuredUrls.handler.type === "custom") {\n handlerComponentBasePath = resolveCustomTargetUrl({\n target: configuredUrls.handler,\n handlerName: "handler",\n });\n }\n\n const home = resolveUrlTarget({\n target: configuredUrls?.home ?? defaultTarget,\n fallbackPath: "/",\n handlerName: "home",\n projectId: options.projectId,\n });\n const afterSignIn = resolveUrlTarget({\n target: configuredUrls?.afterSignIn ?? defaultTarget,\n fallbackPath: home,\n handlerName: "afterSignIn",\n projectId: options.projectId,\n });\n\n return {\n handler: resolveUrlTarget({\n target: configuredUrls?.handler ?? defaultTarget,\n fallbackPath: handlerComponentBasePath,\n handlerName: "handler",\n projectId: options.projectId,\n }),\n signIn: resolveUrlTarget({\n target: configuredUrls?.signIn ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "sign-in"),\n handlerName: "signIn",\n projectId: options.projectId,\n }),\n signUp: resolveUrlTarget({\n target: configuredUrls?.signUp ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "sign-up"),\n handlerName: "signUp",\n projectId: options.projectId,\n }),\n afterSignIn,\n afterSignUp: resolveUrlTarget({\n target: configuredUrls?.afterSignUp ?? defaultTarget,\n fallbackPath: afterSignIn,\n handlerName: "afterSignUp",\n projectId: options.projectId,\n }),\n signOut: resolveUrlTarget({\n target: configuredUrls?.signOut ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "sign-out"),\n handlerName: "signOut",\n projectId: options.projectId,\n }),\n afterSignOut: resolveUrlTarget({\n target: configuredUrls?.afterSignOut ?? defaultTarget,\n fallbackPath: home,\n handlerName: "afterSignOut",\n projectId: options.projectId,\n }),\n emailVerification: resolveUrlTarget({\n target: configuredUrls?.emailVerification ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "email-verification"),\n handlerName: "emailVerification",\n projectId: options.projectId,\n }),\n passwordReset: resolveUrlTarget({\n target: configuredUrls?.passwordReset ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "password-reset"),\n handlerName: "passwordReset",\n projectId: options.projectId,\n }),\n forgotPassword: resolveUrlTarget({\n target: configuredUrls?.forgotPassword ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "forgot-password"),\n handlerName: "forgotPassword",\n projectId: options.projectId,\n }),\n home,\n oauthCallback: resolveUrlTarget({\n target: oauthCallbackTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "oauth-callback"),\n handlerName: "oauthCallback",\n projectId: options.projectId,\n }),\n magicLinkCallback: resolveUrlTarget({\n target: configuredUrls?.magicLinkCallback ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "magic-link-callback"),\n handlerName: "magicLinkCallback",\n projectId: options.projectId,\n }),\n accountSettings: resolveUrlTarget({\n target: configuredUrls?.accountSettings ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "account-settings"),\n handlerName: "accountSettings",\n projectId: options.projectId,\n }),\n teamInvitation: resolveUrlTarget({\n target: configuredUrls?.teamInvitation ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "team-invitation"),\n handlerName: "teamInvitation",\n projectId: options.projectId,\n }),\n cliAuthConfirm: resolveUrlTarget({\n target: configuredUrls?.cliAuthConfirm ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "cli-auth-confirm"),\n handlerName: "cliAuthConfirm",\n projectId: options.projectId,\n }),\n mfa: resolveUrlTarget({\n target: configuredUrls?.mfa ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "mfa"),\n handlerName: "mfa",\n projectId: options.projectId,\n }),\n error: resolveUrlTarget({\n target: configuredUrls?.error ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "error"),\n handlerName: "error",\n projectId: options.projectId,\n }),\n onboarding: resolveUrlTarget({\n target: configuredUrls?.onboarding ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "onboarding"),\n handlerName: "onboarding",\n projectId: options.projectId,\n }),\n };\n};\n\nexport const buildCliAuthConfirmUrl = (options: {\n cliAuthConfirmUrl: string,\n /** Used as the base URL only when cliAuthConfirmUrl is relative. */\n appUrl: string,\n loginCode: string,\n}): string => {\n const url = new URL(options.cliAuthConfirmUrl, options.appUrl);\n url.searchParams.set("login_code", options.loginCode);\n return url.toString();\n};\n\nexport const resolveUnknownHandlerPathFallbackUrl = (options: {\n defaultTarget: DefaultHandlerUrlTarget | undefined,\n projectId: string,\n unknownPath: string,\n}): string | null => {\n const defaultTarget = options.defaultTarget ?? { type: "handler-component" } satisfies DefaultHandlerUrlTarget;\n\n switch (defaultTarget.type) {\n case "handler-component": {\n return null;\n }\n case "hosted": {\n return getHostedHandlerUrl({\n projectId: options.projectId,\n pagePath: options.unknownPath,\n });\n }\n }\n};\n\nexport function getPagePrompt(pageName: string, currentVersion?: number): { title: string; fullPrompt: string; upgradePrompt: string | null; latestVersion: number } | null {\n if (!(pageName in customPagePrompts)) return null;\n const prompt = customPagePrompts[pageName as keyof typeof customPagePrompts];\n const versionKeys = Object.keys(prompt.versions).map(Number);\n const latestVersion = versionKeys.length > 0 ? Math.max(...versionKeys) : 0;\n\n let upgradePrompt: string | null = null;\n if (currentVersion != null) {\n const relevantVersions = versionKeys\n .filter(v => v > currentVersion)\n .sort((a, b) => a - b);\n const prompts = relevantVersions\n .map(v => prompt.versions[v].upgradePrompt)\n .filter(p => p.length > 0);\n upgradePrompt = prompts.length > 0 ? prompts.join("\\n\\n") : null;\n } else {\n const upgradeEntry = latestVersion > 0 ? prompt.versions[latestVersion] : undefined;\n upgradePrompt = upgradeEntry?.upgradePrompt ?? null;\n }\n\n return { title: prompt.title, fullPrompt: prompt.fullPrompt, upgradePrompt, latestVersion };\n}\n\nexport const isHostedHandlerUrlForProject = (options: { url: string, projectId: string }): boolean => {\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(options.url);\n } catch {\n return false;\n }\n\n const hostedBaseUrl = new URL(getHostedHandlerUrl({ projectId: options.projectId, pagePath: "" }));\n return parsedUrl.origin === hostedBaseUrl.origin\n && (parsedUrl.pathname === hostedBaseUrl.pathname || parsedUrl.pathname.startsWith(`${hostedBaseUrl.pathname}/`));\n};\n'},{path:"users/index.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { CurrentUserCrud } from "@stackframe/stack-shared/dist/interface/crud/current-user";\nimport { UsersCrud } from "@stackframe/stack-shared/dist/interface/crud/users";\nimport type { RestrictedReason } from "@stackframe/stack-shared/dist/schema-fields";\nimport { InternalSession } from "@stackframe/stack-shared/dist/sessions";\nimport { encodeBase64 } from "@stackframe/stack-shared/dist/utils/bytes";\nimport { GeoInfo } from "@stackframe/stack-shared/dist/utils/geo";\nimport { ReadonlyJson } from "@stackframe/stack-shared/dist/utils/json";\nimport { ProviderType } from "@stackframe/stack-shared/dist/utils/oauth";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport { ApiKeyCreationOptions, UserApiKey, UserApiKeyFirstView } from "../api-keys";\nimport { AsyncStoreProperty, AuthLike } from "../common";\nimport { DeprecatedOAuthConnection, OAuthConnection } from "../connected-accounts";\nimport { ContactChannel, ContactChannelCreateOptions, ServerContactChannel, ServerContactChannelCreateOptions } from "../contact-channels";\nimport { Customer } from "../customers";\nimport { NotificationCategory } from "../notification-categories";\nimport { AdminTeamPermission, TeamPermission } from "../permissions";\nimport { AdminOwnedProject, AdminProjectCreateOptions } from "../projects";\nimport { EditableTeamMemberProfile, ReceivedTeamInvitation, ServerListTeamsOptions, ServerTeam, ServerTeamCreateOptions, Team, TeamCreateOptions } from "../teams";\n\nconst userGetterErrorMessage = "Stack Auth: useUser() already returns the user object. Use `const user = useUser()` (or `const user = await app.getUser()`) instead of destructuring it like `const { user } = ...`.";\n\nexport function withUserDestructureGuard<T extends object>(target: T): T {\n Object.freeze(target);\n return new Proxy(target, {\n get(target, prop, receiver) {\n if (prop === "user") {\n return guardGetter();\n }\n return target[prop as keyof T];\n },\n });\n}\n\nfunction guardGetter(): never {\n throw new Error(userGetterErrorMessage);\n}\n\nexport type OAuthProvider = {\n readonly id: string,\n readonly type: string,\n readonly userId: string,\n readonly accountId?: string,\n readonly email?: string,\n readonly allowSignIn: boolean,\n readonly allowConnectedAccounts: boolean,\n update(data: { allowSignIn?: boolean, allowConnectedAccounts?: boolean }): Promise<Result<void,\n InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>\n >>,\n delete(): Promise<void>,\n};\n\nexport type ServerOAuthProvider = {\n readonly id: string,\n readonly type: string,\n readonly userId: string,\n readonly accountId: string,\n readonly email?: string,\n readonly allowSignIn: boolean,\n readonly allowConnectedAccounts: boolean,\n update(data: { accountId?: string, email?: string, allowSignIn?: boolean, allowConnectedAccounts?: boolean }): Promise<Result<void,\n InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>\n >>,\n delete(): Promise<void>,\n};\n\n\n/**\n * Contains everything related to the current user session.\n */\nexport type Auth = AuthLike<{}> & {\n readonly _internalSession: InternalSession,\n readonly currentSession: {\n getTokens(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n useTokens(): { accessToken: string | null, refreshToken: string | null }, // THIS_LINE_PLATFORM react-like\n },\n};\n\n/**\n * ```\n * +----------+-------------+-------------------+\n * | \\ | !Server | Server |\n * +----------+-------------+-------------------+\n * | !Session | User | ServerUser |\n * | Session | CurrentUser | CurrentServerUser |\n * +----------+-------------+-------------------+\n * ```\n *\n * The fields on each of these types are available iff:\n * BaseUser: true\n * Auth: Session\n * ServerBaseUser: Server\n * UserExtra: Session OR Server\n *\n * The types are defined as follows (in the typescript manner):\n * User = BaseUser\n * CurrentUser = BaseUser & Auth & UserExtra\n * ServerUser = BaseUser & ServerBaseUser & UserExtra\n * CurrentServerUser = BaseUser & ServerBaseUser & Auth & UserExtra\n **/\n\nexport type BaseUser = {\n readonly id: string,\n\n readonly displayName: string | null,\n\n /**\n * The user\'s email address.\n *\n * Note: This might NOT be unique across multiple users, so always use `id` for unique identification.\n */\n readonly primaryEmail: string | null,\n readonly primaryEmailVerified: boolean,\n readonly profileImageUrl: string | null,\n\n readonly signedUpAt: Date,\n\n readonly clientMetadata: any,\n readonly clientReadOnlyMetadata: any,\n\n /**\n * Whether the user has a password set.\n */\n readonly hasPassword: boolean,\n readonly otpAuthEnabled: boolean,\n readonly passkeyAuthEnabled: boolean,\n\n readonly isMultiFactorRequired: boolean,\n readonly isAnonymous: boolean,\n /**\n * Whether the user is in restricted state (signed up but hasn\'t completed onboarding requirements).\n * For example, if email verification is required but the user hasn\'t verified their email yet.\n */\n readonly isRestricted: boolean,\n /**\n * The reason why the user is restricted, e.g., { type: "email_not_verified" }, { type: "anonymous" }, or { type: "restricted_by_administrator" }.\n * Null if the user is not restricted.\n */\n readonly restrictedReason: RestrictedReason | null,\n toClientJson(): CurrentUserCrud["Client"]["Read"],\n\n /**\n * @deprecated, use contact channel\'s usedForAuth instead\n */\n readonly emailAuthEnabled: boolean,\n /**\n * @deprecated\n */\n readonly oauthProviders: readonly { id: string }[],\n}\n\nexport type UserExtra = {\n setDisplayName(displayName: string | null): Promise<void>,\n /** @deprecated Use contact channel\'s sendVerificationEmail instead */\n sendVerificationEmail(): Promise<KnownErrors["EmailAlreadyVerified"] | void>,\n setClientMetadata(metadata: any): Promise<void>,\n updatePassword(options: { oldPassword: string, newPassword: string}): Promise<KnownErrors["PasswordConfirmationMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>,\n setPassword(options: { password: string }): Promise<KnownErrors["PasswordRequirementsNotMet"] | void>,\n\n /**\n * A shorthand method to update multiple fields of the user at once.\n */\n update(update: UserUpdateOptions): Promise<void>,\n\n useContactChannels(): ContactChannel[], // THIS_LINE_PLATFORM react-like\n listContactChannels(): Promise<ContactChannel[]>,\n createContactChannel(data: ContactChannelCreateOptions): Promise<ContactChannel>,\n\n useNotificationCategories(): NotificationCategory[], // THIS_LINE_PLATFORM react-like\n listNotificationCategories(): Promise<NotificationCategory[]>,\n\n delete(): Promise<void>,\n\n /** @deprecated Use `getOrLinkConnectedAccount` for redirect behavior, or `getConnectedAccount({ provider, providerAccountId })` for existence check. */\n getConnectedAccount(id: ProviderType, options: { or: \'redirect\', scopes?: string[] }): Promise<DeprecatedOAuthConnection>,\n /** @deprecated Use `getConnectedAccount({ provider, providerAccountId })` for existence check, or `getOrLinkConnectedAccount` for redirect behavior. */\n getConnectedAccount(id: ProviderType, options?: { or?: \'redirect\' | \'throw\' | \'return-null\', scopes?: string[] }): Promise<DeprecatedOAuthConnection | null>,\n /** Get a specific connected account by provider and providerAccountId. Returns null if not found. */\n getConnectedAccount(account: { provider: string, providerAccountId: string }): Promise<OAuthConnection | null>,\n\n // IF_PLATFORM react-like\n /** @deprecated Use `useOrLinkConnectedAccount` for redirect behavior, or `useConnectedAccount({ provider, providerAccountId })` for existence check. */\n useConnectedAccount(id: ProviderType, options: { or: \'redirect\', scopes?: string[] }): DeprecatedOAuthConnection,\n /** @deprecated Use `useConnectedAccount({ provider, providerAccountId })` for existence check, or `useOrLinkConnectedAccount` for redirect behavior. */\n useConnectedAccount(id: ProviderType, options?: { or?: \'redirect\' | \'throw\' | \'return-null\', scopes?: string[] }): DeprecatedOAuthConnection | null,\n /** Get a specific connected account by provider and providerAccountId. Returns null if not found. */\n useConnectedAccount(account: { provider: string, providerAccountId: string }): OAuthConnection | null,\n // END_PLATFORM\n\n /** List all connected accounts for this user (only those with allowConnectedAccounts enabled). */\n listConnectedAccounts(): Promise<OAuthConnection[]>,\n /** React hook to list all connected accounts. */\n useConnectedAccounts(): OAuthConnection[], // THIS_LINE_PLATFORM react-like\n /** Redirect the user to the OAuth flow to link a new connected account. Always redirects, never returns. */\n linkConnectedAccount(provider: string, options?: { scopes?: string[] }): Promise<void>,\n /** Get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */\n getOrLinkConnectedAccount(provider: string, options?: { scopes?: string[] }): Promise<OAuthConnection>,\n /** React hook: get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */\n useOrLinkConnectedAccount(provider: string, options?: { scopes?: string[] }): OAuthConnection, // THIS_LINE_PLATFORM react-like\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n hasPermission(permissionId: string): Promise<boolean>,\n\n getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>,\n getPermission(permissionId: string): Promise<TeamPermission | null>,\n\n listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n listPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n\n // IF_PLATFORM react-like\n usePermissions(scope: Team, options?: { recursive?: boolean }): TeamPermission[],\n usePermissions(options?: { recursive?: boolean }): TeamPermission[],\n\n usePermission(scope: Team, permissionId: string): TeamPermission | null,\n usePermission(permissionId: string): TeamPermission | null,\n // END_PLATFORM\n\n readonly selectedTeam: Team | null,\n setSelectedTeam(teamOrId: string | Team | null): Promise<void>,\n createTeam(data: TeamCreateOptions): Promise<Team>,\n leaveTeam(team: Team): Promise<void>,\n\n /**\n * Lists all pending team invitations sent to any of the current user\'s verified email addresses.\n *\n * This allows the user to discover which teams have invited them, even if they haven\'t\n * joined those teams yet. Only invitations sent to verified email addresses are included.\n *\n * @returns An array of `ReceivedTeamInvitation` objects, each containing the team ID, team\n * display name, recipient email, and expiration date.\n *\n * @example\n * ```ts\n * const invitations = await user.listTeamInvitations();\n * for (const invitation of invitations) {\n * console.log(`Invited to ${invitation.teamDisplayName} via ${invitation.recipientEmail}`);\n * }\n * ```\n */\n listTeamInvitations(): Promise<ReceivedTeamInvitation[]>,\n /**\n * Lists all pending team invitations sent to any of the current user\'s verified email addresses.\n *\n * React hook version of `listTeamInvitations()`. Automatically re-renders when invitations change.\n */\n useTeamInvitations(): ReceivedTeamInvitation[], // THIS_LINE_PLATFORM react-like\n\n getActiveSessions(): Promise<ActiveSession[]>,\n revokeSession(sessionId: string): Promise<void>,\n getTeamProfile(team: Team): Promise<EditableTeamMemberProfile>,\n useTeamProfile(team: Team): EditableTeamMemberProfile, // THIS_LINE_PLATFORM react-like\n\n createApiKey(options: ApiKeyCreationOptions<"user">): Promise<UserApiKeyFirstView>,\n\n useOAuthProviders(): OAuthProvider[], // THIS_LINE_PLATFORM react-like\n listOAuthProviders(): Promise<OAuthProvider[]>,\n\n useOAuthProvider(id: string): OAuthProvider | null, // THIS_LINE_PLATFORM react-like\n getOAuthProvider(id: string): Promise<OAuthProvider | null>,\n\n registerPasskey(options?: { hostname?: string }): Promise<Result<undefined, KnownErrors["PasskeyRegistrationFailed"] | KnownErrors["PasskeyWebAuthnError"]>>,\n}\n& AsyncStoreProperty<"apiKeys", [], UserApiKey[], true>\n& AsyncStoreProperty<"team", [id: string], Team | null, false>\n& AsyncStoreProperty<"teams", [], Team[], true>\n& AsyncStoreProperty<"teamInvitations", [], ReceivedTeamInvitation[], true>\n& AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: { recursive?: boolean }], TeamPermission | null, false>\n& AsyncStoreProperty<"permissions", [scope: Team, options?: { recursive?: boolean }], TeamPermission[], true>;\n\nexport type InternalUserExtra =\n & {\n createProject(newProject: AdminProjectCreateOptions): Promise<AdminOwnedProject>,\n transferProject(projectIdToTransfer: string, newTeamId: string): Promise<void>,\n }\n & AsyncStoreProperty<"ownedProjects", [], AdminOwnedProject[], true>\n\nexport type User = BaseUser;\n\nexport type CurrentUser = BaseUser & Auth & UserExtra & Customer;\n\nexport type CurrentInternalUser = CurrentUser & InternalUserExtra;\n\nexport type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;\n\nexport type TokenPartialUser = Pick<\n User,\n | "id"\n | "displayName"\n | "primaryEmail"\n | "primaryEmailVerified"\n | "isAnonymous"\n | "isMultiFactorRequired"\n | "isRestricted"\n | "restrictedReason"\n>\n\nexport type SyncedPartialUser = TokenPartialUser & Pick<\n User,\n | "id"\n | "displayName"\n | "primaryEmail"\n | "primaryEmailVerified"\n | "profileImageUrl"\n | "signedUpAt"\n | "clientMetadata"\n | "clientReadOnlyMetadata"\n | "isAnonymous"\n | "hasPassword"\n | "isRestricted"\n | "restrictedReason"\n>;\n\n\nexport type ActiveSession = {\n id: string,\n userId: string,\n createdAt: Date,\n isImpersonation: boolean,\n lastUsedAt: Date | undefined,\n isCurrentSession: boolean,\n geoInfo?: GeoInfo,\n};\n\nexport type UserUpdateOptions = {\n displayName?: string | null,\n clientMetadata?: ReadonlyJson,\n selectedTeamId?: string | null,\n totpMultiFactorSecret?: Uint8Array | null,\n profileImageUrl?: string | null,\n otpAuthEnabled?: boolean,\n passkeyAuthEnabled?: boolean,\n primaryEmail?: string | null,\n}\nexport function userUpdateOptionsToCrud(options: UserUpdateOptions): CurrentUserCrud["Client"]["Update"] {\n return {\n display_name: options.displayName,\n client_metadata: options.clientMetadata,\n selected_team_id: options.selectedTeamId,\n totp_secret_base64: options.totpMultiFactorSecret != null ? encodeBase64(options.totpMultiFactorSecret) : options.totpMultiFactorSecret,\n profile_image_url: options.profileImageUrl,\n otp_auth_enabled: options.otpAuthEnabled,\n passkey_auth_enabled: options.passkeyAuthEnabled,\n primary_email: options.primaryEmail,\n };\n}\n\n\nexport type ServerBaseUser = {\n setPrimaryEmail(email: string | null, options?: { verified?: boolean | undefined }): Promise<void>,\n\n readonly lastActiveAt: Date,\n\n readonly serverMetadata: any,\n setServerMetadata(metadata: any): Promise<void>,\n setClientReadOnlyMetadata(metadata: any): Promise<void>,\n\n /** Whether the user is restricted by an administrator. Can be set manually or by sign-up rules. */\n readonly restrictedByAdmin: boolean,\n /** Public reason shown to the user explaining why they are restricted. Optional. */\n readonly restrictedByAdminReason: string | null,\n /** Private details about the restriction (e.g., which sign-up rule triggered). Only visible to server access and above. */\n readonly restrictedByAdminPrivateDetails: string | null,\n /** Best-effort ISO country code captured at sign-up time from request geo headers. */\n readonly countryCode: string | null,\n /** Server-only risk scores used during sign-up risk evaluation. */\n readonly riskScores: {\n readonly signUp: {\n readonly bot: number,\n readonly freeTrialAbuse: number,\n },\n },\n\n createTeam(data: Omit<ServerTeamCreateOptions, "creatorUserId">): Promise<ServerTeam>,\n\n useContactChannels(): ServerContactChannel[], // THIS_LINE_PLATFORM react-like\n listContactChannels(): Promise<ServerContactChannel[]>,\n createContactChannel(data: ServerContactChannelCreateOptions): Promise<ServerContactChannel>,\n\n update(user: ServerUserUpdateOptions): Promise<void>,\n\n grantPermission(scope: Team, permissionId: string): Promise<void>,\n grantPermission(permissionId: string): Promise<void>,\n\n revokePermission(scope: Team, permissionId: string): Promise<void>,\n revokePermission(permissionId: string): Promise<void>,\n\n getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>,\n getPermission(permissionId: string): Promise<TeamPermission | null>,\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n hasPermission(permissionId: string): Promise<boolean>,\n\n listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n listPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n\n // IF_PLATFORM react-like\n usePermissions(scope: Team, options?: { recursive?: boolean }): TeamPermission[],\n usePermissions(options?: { recursive?: boolean }): TeamPermission[],\n\n usePermission(scope: Team, permissionId: string): TeamPermission | null,\n usePermission(permissionId: string): TeamPermission | null,\n // END_PLATFORM\n\n useOAuthProviders(): ServerOAuthProvider[], // THIS_LINE_PLATFORM react-like\n listOAuthProviders(): Promise<ServerOAuthProvider[]>,\n\n useOAuthProvider(id: string): ServerOAuthProvider | null, // THIS_LINE_PLATFORM react-like\n getOAuthProvider(id: string): Promise<ServerOAuthProvider | null>,\n\n /**\n * Creates a new session object with a refresh token for this user. Can be used to impersonate them.\n */\n createSession(options?: { expiresInMillis?: number, isImpersonation?: boolean }): Promise<{\n getTokens(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n }>,\n}\n& AsyncStoreProperty<"team", [id: string], ServerTeam | null, false>\n& AsyncStoreProperty<"teams", [options?: ServerListTeamsOptions], ServerTeam[] & { nextCursor: string | null }, true>\n& AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: { direct?: boolean }], AdminTeamPermission | null, false>\n& AsyncStoreProperty<"permissions", [scope: Team, options?: { direct?: boolean }], AdminTeamPermission[], true>;\n\n/**\n * A user including sensitive fields that should only be used on the server, never sent to the client\n * (such as sensitive information and serverMetadata).\n */\nexport type ServerUser = ServerBaseUser & BaseUser & UserExtra & Customer<true>;\n\nexport type CurrentServerUser = Auth & ServerUser;\n\nexport type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;\n\nexport type ProjectCurrentServerUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser;\n\nexport type SyncedPartialServerUser = SyncedPartialUser & Pick<\n ServerUser,\n | "serverMetadata"\n>;\n\nexport type ServerUserUpdateOptions = {\n primaryEmail?: string | null,\n primaryEmailVerified?: boolean,\n primaryEmailAuthEnabled?: boolean,\n clientReadOnlyMetadata?: ReadonlyJson,\n serverMetadata?: ReadonlyJson,\n password?: string,\n restrictedByAdmin?: boolean,\n restrictedByAdminReason?: string | null,\n restrictedByAdminPrivateDetails?: string | null,\n countryCode?: string | null,\n riskScores?: {\n signUp: {\n bot: number,\n freeTrialAbuse: number,\n },\n },\n} & UserUpdateOptions;\nexport function serverUserUpdateOptionsToCrud(options: ServerUserUpdateOptions): CurrentUserCrud["Server"]["Update"] {\n // Base update options\n const baseUpdate: CurrentUserCrud["Server"]["Update"] = {\n display_name: options.displayName,\n primary_email: options.primaryEmail,\n client_metadata: options.clientMetadata,\n client_read_only_metadata: options.clientReadOnlyMetadata,\n server_metadata: options.serverMetadata,\n selected_team_id: options.selectedTeamId,\n primary_email_auth_enabled: options.primaryEmailAuthEnabled,\n primary_email_verified: options.primaryEmailVerified,\n password: options.password,\n profile_image_url: options.profileImageUrl,\n totp_secret_base64: options.totpMultiFactorSecret != null ? encodeBase64(options.totpMultiFactorSecret) : options.totpMultiFactorSecret,\n };\n return {\n ...baseUpdate,\n restricted_by_admin: options.restrictedByAdmin,\n restricted_by_admin_reason: options.restrictedByAdminReason,\n restricted_by_admin_private_details: options.restrictedByAdminPrivateDetails,\n country_code: options.countryCode,\n risk_scores: options.riskScores ? {\n sign_up: {\n bot: options.riskScores.signUp.bot,\n free_trial_abuse: options.riskScores.signUp.freeTrialAbuse,\n },\n } : undefined,\n };\n}\n\n\nexport type ServerUserCreateOptions = {\n primaryEmail?: string | null,\n primaryEmailAuthEnabled?: boolean,\n password?: string,\n otpAuthEnabled?: boolean,\n displayName?: string,\n primaryEmailVerified?: boolean,\n clientMetadata?: any,\n clientReadOnlyMetadata?: any,\n serverMetadata?: any,\n countryCode?: string | null,\n riskScores?: {\n signUp: {\n bot: number,\n freeTrialAbuse: number,\n },\n },\n}\nexport function serverUserCreateOptionsToCrud(options: ServerUserCreateOptions): UsersCrud["Server"]["Create"] {\n return {\n primary_email: options.primaryEmail,\n password: options.password,\n otp_auth_enabled: options.otpAuthEnabled,\n primary_email_auth_enabled: options.primaryEmailAuthEnabled,\n display_name: options.displayName,\n primary_email_verified: options.primaryEmailVerified,\n client_metadata: options.clientMetadata,\n client_read_only_metadata: options.clientReadOnlyMetadata,\n server_metadata: options.serverMetadata,\n country_code: options.countryCode,\n risk_scores: options.riskScores ? {\n sign_up: {\n bot: options.riskScores.signUp.bot,\n free_trial_abuse: options.riskScores.signUp.freeTrialAbuse,\n },\n } : undefined,\n };\n}\n'}],n='//#region src/components/alert.d.ts\ntype DesignAlertVariant = "default" | "success" | "error" | "warning" | "info";\ntype DesignAlertProps = React.HTMLAttributes<HTMLDivElement> & {\n variant?: DesignAlertVariant;\n title?: React.ReactNode;\n description?: React.ReactNode;\n glassmorphic?: boolean;\n};\ndeclare function DesignAlert({\n variant,\n title,\n description,\n glassmorphic,\n className,\n children,\n ...props\n}: DesignAlertProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/analytics-chart-pie.d.ts\ntype SegmentColors = {\n primary: {\n light: string[];\n dark: string[];\n };\n compare: {\n light: string[];\n dark: string[];\n };\n};\ntype AnalyticsChartPieBodyProps = {\n wrapperRef: Ref<HTMLDivElement>;\n primarySegmentSeries: readonly AnalyticsChartSeries[];\n compareSegmentSeries: readonly AnalyticsChartSeries[];\n aggregatedPrimarySegments: number[];\n aggregatedCompareSegments: number[];\n aggregatedPrimaryTotal: number;\n aggregatedCompareTotal: number;\n segmentColors: SegmentColors;\n showPrimary: boolean;\n showCompare: boolean;\n xFormatKind: FormatKind;\n yFormatKind: FormatKind;\n hoverKey: string | null;\n setHoverKey: (k: string | null) => void;\n zoomRange: [number, number] | null;\n onResetZoom: () => void;\n visibleStart: number;\n visibleEnd: number;\n fullData: Point[];\n strings: AnalyticsChartStrings;\n fmtValue: (value: number, kind: FormatKind) => string;\n pie: AnalyticsChartPieProps | undefined;\n};\ndeclare function AnalyticsChartPie({\n wrapperRef,\n primarySegmentSeries,\n compareSegmentSeries,\n aggregatedPrimarySegments,\n aggregatedCompareSegments,\n aggregatedPrimaryTotal,\n aggregatedCompareTotal,\n segmentColors,\n showPrimary,\n showCompare,\n xFormatKind,\n yFormatKind,\n hoverKey,\n setHoverKey,\n zoomRange,\n onResetZoom,\n visibleStart,\n visibleEnd,\n fullData,\n strings,\n fmtValue,\n pie\n}: AnalyticsChartPieBodyProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/analytics-chart.d.ts\n/** Mirrors Recharts\' internal `Margin` shape (not exported from their typings). */\ntype Margin = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n};\n/**\n * Props for {@link AnalyticsChart}.\n *\n * ## HOW TO REFERENCE THIS COMPONENT\n *\n * **In the custom dashboard sandbox** (AI-generated dashboard code): every\n * export lives on the global `DashboardUI` object. Use\n * `DashboardUI.AnalyticsChart`, `DashboardUI.ANALYTICS_CHART_DEFAULT_STATE`,\n * `DashboardUI.pointValue`, etc. **Never** use bare identifiers like\n * `<AnalyticsChart />` inside the sandbox — there is no module system and\n * nothing is destructured into scope. Types (`AnalyticsChartState`,\n * `Point`, …) don\'t exist at runtime anyway, so just drop the type\n * annotations in sandbox code.\n *\n * **In a regular TypeScript app** (anywhere importing `@stackframe/dashboard-ui-components`\n * directly): `import { AnalyticsChart, ANALYTICS_CHART_DEFAULT_STATE } from\n * "@stackframe/dashboard-ui-components"` and use the bare name. Drop the\n * `DashboardUI.` prefix from the examples below when doing so.\n *\n * ## Data shape in 30 seconds\n *\n * - `data` is `Point[]`. Each `Point` is `{ ts: number, values: Record<string, number> }`.\n * `ts` is a Unix millisecond timestamp; `values` is keyed by **layer id**.\n * - `state` is fully controlled. Start from\n * `DashboardUI.ANALYTICS_CHART_DEFAULT_STATE` (which ships with a\n * `"primary"` + `"compare"` + `"annotations"` layer set) and override\n * what you need. Do **not** hand-build the layer array from scratch.\n * - For a breakdown (e.g. signups by region), add `segments` (a `number[][]`\n * with one row per `data` point) and `segmentSeries` (the category labels)\n * to the primary layer. Rows of `segments` should sum to the point\'s layer\n * value. Same for the compare layer if you want a compared breakdown.\n *\n * ## **SCALE YOUR DATA BEFORE PUTTING IT ON A POINT** (critical)\n *\n * The chart renders every visible layer on a **single shared y-axis**. If\n * two layers are on different orders of magnitude (e.g. revenue in cents\n * `1_200_000` and sign-ups `450`), the smaller series collapses to a flat\n * line at the bottom and the chart looks broken. You **must** normalize\n * both metrics into the same range before building `data`. Rules of thumb:\n *\n * - **Cents → dollars / units**: divide money amounts by 100 (or 1000 for\n * large currencies). Use a `valueFormatter` to render the original unit\n * in tooltips so the UX still reads as "$12,543".\n * - **Counts vs rates**: if one layer is a count (e.g. requests) and the\n * other is a ratio (e.g. error rate 0.02), multiply the ratio by the\n * count\'s scale (or by `max(counts)`) so both sit in the same band.\n * - **Very different counts** (e.g. page views `120_000` vs sign-ups `430`):\n * either divide the large metric (`views / 100`) or promote the small\n * one to a rate (`signups / views * 1000`). Note the transformation in\n * the layer `label` ("Sign-ups per 1k views") so it\'s honest.\n * - **Pick the target range from the layer with the most natural scale**\n * — usually the metric the user actually cares about — and normalize\n * everything else into it. Don\'t normalize by fighting Recharts with\n * `yDomain` hacks; do it in the data.\n *\n * If the two metrics truly can\'t share an axis (e.g. latency ms vs error\n * count), render them as **two separate `AnalyticsChart` instances** stacked\n * in the layout instead of jamming them into one chart.\n *\n * ## Example 1 — simplest possible: one area layer, no compare\n *\n * ```jsx\n * // Sandbox dashboard code — everything prefixed with DashboardUI.*\n * function Dashboard() {\n * const data = [\n * { ts: Date.UTC(2026, 2, 1), values: { primary: 420 } },\n * { ts: Date.UTC(2026, 2, 2), values: { primary: 512 } },\n * { ts: Date.UTC(2026, 2, 3), values: { primary: 604 } },\n * // ...one row per time bucket\n * ];\n *\n * // Start from defaults, hide the compare layer so it\'s a single series.\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) =>\n * l.kind === "compare" ? { ...l, visible: false } : l,\n * ),\n * });\n *\n * return (\n * <DashboardUI.DesignChartCard title="Sign-ups" description="Last 30 days">\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * </DashboardUI.DesignChartCard>\n * );\n * }\n * ```\n *\n * ## Example 2 — current vs previous period (compare)\n *\n * Each point carries both layer values under their layer ids. The default\n * state\'s `"primary"` and `"compare"` layers are already visible, so no\n * state customization is needed.\n *\n * ```jsx\n * function Dashboard() {\n * const data = rows.map((r) => ({\n * ts: r.bucketTs,\n * values: {\n * primary: r.signupsThisPeriod, // keyed by layer id "primary"\n * compare: r.signupsLastPeriod, // keyed by layer id "compare"\n * },\n * }));\n *\n * const [state, setState] = React.useState(\n * DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * );\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * );\n * }\n * ```\n *\n * ## Example 3 — stacked bar with region breakdown (segmented)\n *\n * ```jsx\n * function Dashboard() {\n * const regions = [\n * { key: "us", label: "United States" },\n * { key: "eu", label: "European Union" },\n * { key: "asia", label: "Asia-Pacific" },\n * ];\n *\n * // Row index matches `data` index; column index matches `regions`.\n * // Each row MUST sum to data[i].values.primary.\n * const segments = [\n * [210, 140, 70], // day 0 → total 420\n * [250, 170, 92], // day 1 → total 512\n * [300, 200, 104], // day 2 → total 604\n * ];\n *\n * const data = [\n * { ts: Date.UTC(2026, 2, 1), values: { primary: 420 } },\n * { ts: Date.UTC(2026, 2, 2), values: { primary: 512 } },\n * { ts: Date.UTC(2026, 2, 3), values: { primary: 604 } },\n * ];\n *\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) => {\n * if (l.kind === "primary") {\n * return {\n * ...l,\n * type: "bar", // switch from area → stacked bars\n * segmented: true,\n * segments,\n * segmentSeries: regions,\n * };\n * }\n * if (l.kind === "compare") {\n * return { ...l, visible: false };\n * }\n * return l;\n * }),\n * });\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * );\n * }\n * ```\n *\n * ## Example 4 — mixing display types (e.g. revenue bars + signups area)\n *\n * Use two layers. The "primary" layer holds one metric; reuse the "compare"\n * layer slot for the second metric by overriding its `id`, `label`, and\n * `type`. Then key both values in each `Point`.\n *\n * **IMPORTANT**: the two metrics share a single y-axis, so scale them into\n * the same range before putting them on the point. A common trick is to\n * pass a `valueFormatter` that reports each layer\'s number with its own\n * unit so tooltips still read correctly.\n *\n * ```jsx\n * function Dashboard() {\n * // Sign-ups are already in range; revenue cents would dwarf them, so\n * // we normalize revenue (cents → dollars) onto the same scale.\n * const data = rows.map((r) => ({\n * ts: r.bucketTs,\n * values: {\n * revenue: r.revenueCents / 100,\n * signups: r.signups,\n * },\n * }));\n *\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) => {\n * if (l.kind === "primary") {\n * return { ...l, id: "revenue", label: "Revenue", type: "bar" };\n * }\n * if (l.kind === "compare") {\n * return {\n * ...l,\n * id: "signups",\n * label: "Sign-ups",\n * type: "area",\n * visible: true,\n * };\n * }\n * return l;\n * }),\n * });\n *\n * // Per-layer formatter: `kind` lets you branch per-axis vs per-layer\n * // using the layer id passed in via the tooltip context. For most\n * // cases formatting by raw value is enough.\n * const valueFormatter = (value, kind) => {\n * if (kind.type === "currency") return `$${value.toFixed(0)}`;\n * return value.toLocaleString();\n * };\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * valueFormatter={valueFormatter}\n * />\n * );\n * }\n * ```\n *\n * ## Example 5 — segmented sign-ups stacked with a revenue line (mix + segment)\n *\n * Combines Example 3 and Example 4: primary layer is revenue as a line\n * (un-segmented), compare layer is sign-ups as a stacked bar (segmented\n * by region). Remember: row sums of the compare segments must equal\n * `point.values.signups`, and both metrics share one y-axis.\n *\n * ```jsx\n * function Dashboard() {\n * const regions = [\n * { key: "us", label: "United States" },\n * { key: "eu", label: "European Union" },\n * { key: "asia", label: "Asia-Pacific" },\n * ];\n *\n * // Normalize revenue to the same order of magnitude as sign-ups.\n * const data = rows.map((r) => ({\n * ts: r.bucketTs,\n * values: {\n * revenue: r.revenueCents / 100,\n * signups: r.signupsTotal,\n * },\n * }));\n *\n * // Row index matches `data` index. Each row sums to signupsTotal.\n * const signupSegments = rows.map((r) => [\n * r.signupsUs,\n * r.signupsEu,\n * r.signupsAsia,\n * ]);\n *\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) => {\n * if (l.kind === "primary") {\n * return { ...l, id: "revenue", label: "Revenue", type: "line" };\n * }\n * if (l.kind === "compare") {\n * return {\n * ...l,\n * id: "signups",\n * label: "Sign-ups",\n * type: "bar",\n * visible: true,\n * segmented: true,\n * segments: signupSegments,\n * segmentSeries: regions,\n * };\n * }\n * return l;\n * }),\n * });\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * );\n * }\n * ```\n */\ntype AnalyticsChartProps = {\n /** Time-series points — each point carries `values` keyed by layer id.\n * See {@link AnalyticsChartProps} for full data-shape examples. */\n data: Point[]; /** Annotations. Fully prop-driven; the consumer owns the array. */\n annotations?: Annotation[];\n /** Fully-controlled state + dispatch. The chart reads every config and\n * persistent-interaction slice from `state` and mutates it through\n * `onChange`. Ephemeral interaction state (hover, brush, pin, draft) is\n * managed internally and surfaces only through the state callbacks. */\n state: AnalyticsChartState;\n onChange: React.Dispatch<React.SetStateAction<AnalyticsChartState>>;\n /** Fired when the user submits the in-chart annotation form. The consumer\n * is expected to append to its own annotations array. */\n onAnnotationCreate?: (annotation: Annotation) => void; /** Override any user-visible copy. Shallow-merges over the defaults. */\n strings?: Partial<AnalyticsChartStrings>;\n /** Override segment color ramps. Each ramp is either procedural\n * (hue + sat + lightness range) or explicit (concrete color lists). */\n palette?: Partial<AnalyticsChartPalette>;\n /** Render slot for the tooltip body. Receives a prepared context with\n * the active point, primary/compare layer views, pre-bound formatters,\n * and resolved strings. Defaults to `DefaultAnalyticsChartTooltip`. */\n renderTooltip?: (ctx: AnalyticsChartTooltipContext) => ReactNode;\n /** Recharts plot margins. Also drives overlay positioning math so the\n * crosshair, tooltip anchor, brush popup, and flag markers line up with\n * the actual plot area. Defaults to `{ top: 16, right: 24, bottom: 8, left: 12 }`. */\n plotMargin?: Margin; /** Y-axis reserved width in pixels. Defaults to 48. */\n yAxisWidth?: number; /** Fractional headroom added to the y-axis top. Defaults to 0.1. */\n yDomainPadding?: number; /** Grouped pie configuration. Each field has a sensible default. */\n pie?: AnalyticsChartPieProps;\n /** Custom number formatter. Receives the raw value and the kind to format\n * with — the same function is invoked for both x-axis and y-axis values. */\n valueFormatter?: (value: number, kind: FormatKind) => string;\n};\n/**\n * Preferred chart for all time-series: area, line, bar, compare layers,\n * segmented stacks, tooltips, zoom, and annotations. Wrap in\n * `DesignChartCard` for the title/description chrome. Only fall back to\n * raw Recharts for non-time-series visuals (static rankings etc.).\n *\n * ## Data shape\n *\n * `data` is `Point[]`, where `Point = { ts: number, values: Record<string, number> }`.\n * `ts` is a Unix milliseconds timestamp. `values` maps layer id → numeric value\n * at that bucket. Example:\n *\n * ```ts\n * { ts: 1743465600000, values: { primary: 420 } }\n * { ts: 1743465600000, values: { primary: 420, compare: 380 } } // with compare layer\n * ```\n *\n * ## State is fully controlled — start from ANALYTICS_CHART_DEFAULT_STATE\n *\n * The default state ships with three pre-configured layers: `"primary"`,\n * `"compare"`, and `"annotations"`. ALWAYS spread from\n * `ANALYTICS_CHART_DEFAULT_STATE` and map over `layers` to override. Do NOT\n * hand-build the layer array from scratch — you will miss fields and crash.\n *\n * ```ts\n * // Default state shape (for reference — spread from the constant, don\'t copy):\n * {\n * view: "timeseries",\n * layers: [\n * { id: "primary", kind: "primary", label: "Current", visible: true, color: "#2563eb",\n * segmented: false, type: "area", strokeStyle: "solid", fillOpacity: 0.22, inProgressFromIndex: null },\n * { id: "compare", kind: "compare", label: "Previous period", visible: true, color: "#f59e0b",\n * segmented: false, type: "line", strokeStyle: "dashed", inProgressFromIndex: null },\n * { id: "annotations", kind: "annotations", label: "Annotations", visible: true, color: "#f59e0b" },\n * ],\n * xFormatKind: { type: "datetime", style: "short" },\n * yFormatKind: { type: "short" },\n * showGrid: true, showXAxis: true, showYAxis: true,\n * zoomRange: null, pinnedIndex: null,\n * }\n * ```\n *\n * ## onChange — CRITICAL, get this right\n *\n * `onChange` fires with an `AnalyticsChartState` object — NOT your custom\n * wrapper. If you store chart data and state together, `onChange` MUST only\n * update the state part. Keep data and state in SEPARATE hooks:\n *\n * ```tsx\n * // WRONG — overwrites your data with a bare state object, crashes on next render:\n * const [combined, setCombined] = React.useState({ data: [], state: ANALYTICS_CHART_DEFAULT_STATE });\n * <AnalyticsChart data={combined.data} state={combined.state} onChange={setCombined} />\n *\n * // RIGHT — two hooks:\n * const [data, setData] = React.useState([]);\n * const [chartState, setChartState] = React.useState({ ...ANALYTICS_CHART_DEFAULT_STATE });\n * <AnalyticsChart data={data} state={chartState} onChange={setChartState} />\n * ```\n *\n * NEVER pass a setter that manages a combined `{ data, state }` object directly to `onChange`.\n *\n * ## Common patterns\n *\n * ### 1. Simplest — one area layer, no compare\n *\n * ```tsx\n * const data = rows.map(r => ({ ts: r.bucketTs, values: { primary: r.count } }));\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l =>\n * l.kind === "compare" ? { ...l, visible: false } : l\n * ),\n * });\n * <DesignChartCard title="Signups" description="Last 30 days">\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * </DesignChartCard>\n * ```\n *\n * ### 2. Current vs previous period (compare)\n *\n * ```tsx\n * const data = rows.map(r => ({\n * ts: r.bucketTs,\n * values: { primary: r.thisPeriod, compare: r.lastPeriod },\n * }));\n * const [state, setState] = React.useState(ANALYTICS_CHART_DEFAULT_STATE);\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ### 3. Stacked bar with breakdown (segmented)\n *\n * ```tsx\n * const regions = [{ key: "us", label: "US" }, { key: "eu", label: "EU" }];\n * const segments = rows.map(r => [r.signupsUs, r.signupsEu]); // MUST sum to primary value per row\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l => {\n * if (l.kind === "primary") return { ...l, type: "bar", segmented: true, segments, segmentSeries: regions };\n * if (l.kind === "compare") return { ...l, visible: false };\n * return l;\n * }),\n * });\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ### 4. Two metrics on one chart (revenue bars + signups area)\n *\n * ```tsx\n * // IMPORTANT: metrics share one y-axis, so normalize into the same range.\n * const data = rows.map(r => ({\n * ts: r.bucketTs,\n * values: { revenue: r.revenueCents / 100, signups: r.signups },\n * }));\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l => {\n * if (l.kind === "primary") return { ...l, id: "revenue", label: "Revenue", type: "bar" };\n * if (l.kind === "compare") return { ...l, id: "signups", label: "Sign-ups", type: "area", visible: true };\n * return l;\n * }),\n * });\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ### 5. Pie view (distribution / breakdown, non-time-series)\n *\n * Pie needs one data point, `segments` with one row, and `segmentSeries` with labels:\n *\n * ```tsx\n * const categories = [{ key: "verified", label: "Verified" }, { key: "unverified", label: "Unverified" }, { key: "anonymous", label: "Anonymous" }];\n * const total = verified + unverified + anonymous;\n * const data = [{ ts: 0, values: { primary: total } }];\n * const segments = [[verified, unverified, anonymous]]; // one row; values sum to total\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * view: "pie",\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l => {\n * if (l.kind === "primary") return { ...l, segmented: true, segments, segmentSeries: categories };\n * if (l.kind === "compare") return { ...l, visible: false };\n * return l;\n * }),\n * });\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ## Segment data contract (MUST follow when segmented: true)\n *\n * `segments` is a 2D array: `segments[dayIndex][categoryIndex] = number`.\n *\n * - Outer length MUST equal `data.length` (one row per Point).\n * - Inner length MUST equal `segmentSeries.length` (one value per category).\n * - Each row MUST sum to `data[dayIndex].values[layerId]` (the layer\'s total for that day).\n * - `segmentSeries` defines the category labels, in the SAME order as segment columns.\n *\n * Example: if `segmentSeries = [{ key: "us", label: "US" }, { key: "eu", label: "EU" }]`\n * and `data[0].values.primary = 420`, then `segments[0]` must be `[usValue, euValue]`\n * where `usValue + euValue === 420`. If rows don\'t sum to the layer total, stacked bars\n * will render incorrectly (gaps or overflow).\n *\n * ## Palette\n *\n * AnalyticsChart auto-generates segment colors (blue shades for primary, amber for\n * compare). You do NOT need to pass a palette prop — it just works. Segment keys\n * can be any string; the component sanitizes them for CSS purposes internally.\n *\n * ## Layer quick reference\n *\n * - Layer `type` options: `"area" | "line" | "bar"`\n * - Layer `kind` values: `"primary" | "compare" | "annotations"`\n * - To hide a layer: `{ ...l, visible: false }`\n * - To switch chart type: `{ ...l, type: "bar" }` (or `"line"`, `"area"`)\n * - To rename a layer: `{ ...l, id: "myMetric", label: "My Metric" }`\n *\n * ## Formatting (xFormatKind / yFormatKind on state)\n *\n * - `{ type: "numeric" }` — plain number\n * - `{ type: "short" }` — abbreviated (1.2K, 3.4M) — good default for y-axis\n * - `{ type: "currency", currency: "USD", divisor: 100 }` — for cents → dollars\n * - `{ type: "percent", source: "fraction" }` — for 0..1 → "45.2%"\n * - `{ type: "datetime", style: "short" }` — good default for x-axis timestamps\n *\n * Set these on state:\n * `{ ...ANALYTICS_CHART_DEFAULT_STATE, yFormatKind: { type: "currency", currency: "USD" } }`\n *\n * ## Scale warning\n *\n * All visible layers share ONE y-axis. If magnitudes differ wildly (e.g. revenue\n * cents vs signup count), normalize the data BEFORE building Points. If\n * normalization is impossible, use two separate `AnalyticsChart` instances stacked\n * vertically.\n */\ndeclare function AnalyticsChart({\n data: fullData,\n annotations: fullAnnotations,\n state,\n onChange,\n onAnnotationCreate,\n strings: stringsOverride,\n palette: paletteOverride,\n renderTooltip,\n plotMargin,\n yAxisWidth,\n yDomainPadding,\n pie,\n valueFormatter\n}: AnalyticsChartProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/default-analytics-chart-tooltip.d.ts\n/** Trend pill — small rounded badge with an up/down/flat arrow, a signed\n * percentage, and an optional trailing label. Shared between the default\n * tooltip, the pie view, and the demo panels (which re-export it). */\ndeclare function TrendPill({\n delta,\n label,\n size\n}: {\n delta: AnalyticsChartDelta;\n label?: string;\n size?: "sm" | "md";\n}): react_jsx_runtime0.JSX.Element;\ntype AnalyticsChartTooltipSegmentRow = {\n key: string;\n label: string;\n value: number; /** Light-theme color for the dot / swatch. */\n color: string; /** Dark-theme color for the dot / swatch. */\n colorDark: string;\n};\ntype AnalyticsChartTooltipLayerView = {\n /** Stable layer id (e.g. `"signups"`, `"previous"`). */id: string; /** Consumer-provided layer label. */\n label: string; /** Resolved layer color (light theme). */\n color: string; /** Resolved layer color (dark theme). */\n colorDark: string;\n /** Flat total for this layer at the hovered index. Populated regardless\n * of segmentation so consumers can render the same number in either mode. */\n total: number; /** True iff this layer is rendered as a stacked breakdown. */\n segmented: boolean;\n /** Per-segment rows — empty when `segmented === false`. Order matches\n * `segmentSeries`. */\n segments: AnalyticsChartTooltipSegmentRow[];\n};\ntype AnalyticsChartTooltipContext = {\n /** Index into the visible window. */activeIndex: number; /** Raw point at `activeIndex` — convenient for `.ts` access. */\n point: Point; /** True when the tooltip is pinned (via click) and stable under hover. */\n isPinned: boolean; /** Primary layer view or null when the primary layer is hidden. */\n primary: AnalyticsChartTooltipLayerView | null; /** Compare layer view or null when the compare layer is hidden. */\n compare: AnalyticsChartTooltipLayerView | null;\n /** Flat-mode delta between primary and compare totals. Null when either\n * side is hidden. Consumers should feed this into their trend pill. */\n delta: AnalyticsChartDelta | null; /** Pre-bound value formatter for y-axis values. */\n formatValue: (v: number) => string; /** Pre-bound formatter for x-axis values. */\n formatDate: (ts: number) => string; /** Resolved strings — already merged with defaults. */\n strings: AnalyticsChartStrings;\n};\ntype DefaultAnalyticsChartTooltipProps = {\n ctx: AnalyticsChartTooltipContext;\n};\n/** The default tooltip body. The tooltip is rendered as an\n * absolutely-positioned sibling of `<ChartContainer>`, which means it sits\n * OUTSIDE the `[data-chart=…]` subtree that scopes shadcn\'s `--color-${key}`\n * CSS variables. We therefore cannot reference those variables for segment\n * swatches — instead, every swatch uses a single span with `--c-l`/`--c-d`\n * custom properties + Tailwind arbitrary variants so one DOM element covers\n * both themes. */\ndeclare function DefaultAnalyticsChartTooltip({\n ctx\n}: DefaultAnalyticsChartTooltipProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/format.d.ts\ndeclare const FORMAT_KIND_TYPES: FormatKindType[];\ndeclare const DEFAULT_FORMAT_KIND: { [K in FormatKindType]: Extract<FormatKind, {\n type: K;\n}> };\n/** `short` uses compact notation (e.g. `1.2K`), not a custom `k` suffix. */\ndeclare function formatValue(value: number, kind: FormatKind): string;\ndeclare function formatDelta(current: number, previous: number): AnalyticsChartDelta;\n//#endregion\n\n//#region src/components/analytics-chart/palette.d.ts\ndeclare const ANALYTICS_CHART_DEFAULT_PALETTE: AnalyticsChartPalette;\ndeclare function resolveAnalyticsChartPalette(override: Partial<AnalyticsChartPalette> | undefined): AnalyticsChartPalette;\n/** Expand a ramp into N colors for a given theme. */\ndeclare function buildRampColors(ramp: AnalyticsChartSegmentRamp, count: number, theme: "light" | "dark"): string[];\n/** Per-segment light/dark colors for `ChartConfig.theme` (SVG only; siblings use inline vars). */\ndeclare function buildSegmentThemeMap(series: readonly AnalyticsChartSeries[], ramp: AnalyticsChartSegmentRamp): Record<string, {\n light: string;\n dark: string;\n}>;\n//#endregion\n\n//#region src/components/analytics-chart/render-data-series.d.ts\n/** Area layers use fill-only `<Area>` plus `<Line>` for the top edge (not Recharts\' closed-path stroke). */\ntype RenderDataSeriesArgs = {\n layer: AnalyticsChartDataLayer;\n segmented: boolean;\n segmentSeries: readonly AnalyticsChartSeries[];\n segKey: (segKey: string) => string;\n stackId: string;\n strokeDasharray: string | undefined;\n segmentedStrokeDasharray: string | undefined;\n fillOpacity: number;\n segmentedFillOpacity: number;\n baseOpacity?: number;\n strokeWidth: number;\n segmentedStrokeWidth: number;\n inProgressKeys: {\n solid: string;\n dashed: string;\n } | null;\n};\n/** Return value must be spread into `<ComposedChart>` as siblings — do not wrap in `<Fragment>`. */\ndeclare function renderDataSeries(args: RenderDataSeriesArgs): ReactNode[];\n//#endregion\n\n//#region src/components/analytics-chart/state.d.ts\ndeclare const STROKE_DASHARRAY: Record<AnalyticsChartStrokeStyle, string | undefined>;\ndeclare const EMPTY_SERIES: readonly AnalyticsChartSeries[];\ndeclare const EMPTY_MATRIX: readonly (readonly number[])[];\n/** Generic non-segmented defaults; demos swap in segment data. */\ndeclare const ANALYTICS_CHART_DEFAULT_LAYERS: AnalyticsChartLayers;\n/**\n * Default state for `AnalyticsChart`. ALWAYS spread from this when\n * initializing state; never build the state object by hand. Ships with\n * three pre-configured layers (primary, compare, annotations) — map over\n * `layers` to override individual ones.\n *\n * ```tsx\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l =>\n * l.kind === "compare" ? { ...l, visible: false } : l\n * ),\n * });\n * ```\n *\n * See the JSDoc on `AnalyticsChart` for the full contract, examples, and\n * the segment data format.\n */\ndeclare const ANALYTICS_CHART_DEFAULT_STATE: AnalyticsChartState;\ndeclare function findPrimaryLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined;\ndeclare function findCompareLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined;\ndeclare function findAnnotationsLayer(layers: AnalyticsChartLayers): AnalyticsChartAnnotationsLayer | undefined;\ndeclare function findLayerById(layers: AnalyticsChartLayers, id: string): AnalyticsChartLayer | undefined;\ndeclare function isAnalyticsChartDataLayer(l: AnalyticsChartLayer): l is AnalyticsChartDataLayer;\ndeclare function isTimeseriesState(state: AnalyticsChartState): state is AnalyticsChartTimeseriesState;\n/** Replace a single layer (looked up by id) with a new layer object. */\ndeclare function setLayerById(layers: AnalyticsChartLayers, id: string, next: AnalyticsChartLayer): AnalyticsChartLayers;\n/** Shallow-patch fields on a layer by id. The patch type is deliberately\n * loose — callers are trusted to supply only fields the layer\'s\n * `kind`/`type` actually owns. */\ndeclare function patchLayerById(layers: AnalyticsChartLayers, id: string, patch: Record<string, unknown>): AnalyticsChartLayers;\ntype ResolvedDataLayerStyle = {\n color: string;\n type: AnalyticsChartLayerType;\n strokeStyle: AnalyticsChartStrokeStyle;\n fillOpacity: number;\n};\ndeclare function resolveDataLayerStyle(layer: AnalyticsChartDataLayer): ResolvedDataLayerStyle;\n/** Translate a layer\'s absolute `inProgressFromIndex` into a local index\n * inside the visible window. Returns `null` when the marker sits beyond\n * the visible window, `0` when it sits before the window (whole window\n * is dashed), or the clamped local index otherwise. */\ndeclare function computeLocalInProgressIdx(absIdx: number | null | undefined, visibleStart: number, visibleEnd: number): number | null;\n//#endregion\n\n//#region src/components/analytics-chart/strings.d.ts\ntype AnalyticsChartStrings = {\n /** Reset-zoom badge in the top-right corner when `state.zoomRange` is set. */resetZoom: string; /** Header label above the timestamps in the live range-brush popup. */\n rangeLabel: string; /** Formatted day-count suffix used by the brush + action-bar. */\n daysShort: (days: number) => string; /** "Zoom in" button inside the committed-range action bar. */\n zoomIn: string; /** "Annotate" button inside the committed-range action bar. */\n annotate: string; /** Placeholder for the annotation label input. */\n annotationPlaceholder: string; /** `aria-label` for the annotation label input. */\n annotationLabelAria: string; /** Save button in the annotation form. */\n save: string; /** Cancel button in the annotation form. */\n cancel: string; /** `aria-label` for the X button that clears the committed range. */\n clearSelection: string; /** Pinned badge shown in the tooltip header when the tooltip is pinned. */\n pinnedBadge: string; /** "Δ vs prev" row label in the tooltip (both segmented and flat modes). */\n deltaVsPrev: string;\n /** Suffix appended to a layer\'s label in the per-layer totals section\n * (e.g. "Sign-ups" → "Sign-ups total"). */\n layerTotalSuffix: string; /** Hint row shown in the tooltip while it is floating (not pinned). */\n hintClickToPin: string; /** Hint row shown in the tooltip while it is pinned. */\n hintClickAnywhereUnpin: string; /** Center-stat heading shown in the pie when no segment is hovered. */\n pieTotalCenter: string; /** Label on the TrendPill in the pie center. */\n pieVsPrev: string; /** `aria-label` for the PieChart SVG. */\n pieAriaLabel: (ctx: {\n segmentCount: number;\n windowDays: number;\n }) => string; /** Percentage-of-total caption shown under an active pie slice. */\n piePercentOfTotal: (pct: number) => string;\n};\ndeclare const ANALYTICS_CHART_DEFAULT_STRINGS: AnalyticsChartStrings;\n/** Shallow merge — every field is a primitive or a flat function. */\ndeclare function resolveAnalyticsChartStrings(override: Partial<AnalyticsChartStrings> | undefined): AnalyticsChartStrings;\n//#endregion\n\n//#region src/components/analytics-chart/types.d.ts\n/** Time-series point. `values` is keyed by layer id. */\ntype Point = {\n ts: number;\n values: Record<string, number>;\n};\n/** Missing or non-finite values become 0. */\ndeclare function pointValue(p: Point, id: string): number;\n/** Sanitize a string into a valid CSS `<ident>` token.\n * Replaces characters not allowed in CSS identifiers (like `$`, spaces,\n * slashes, dots) with underscores. Used to build safe `var(--color-xxx)`\n * custom property names from arbitrary segment keys. */\ndeclare function cssIdent(raw: string): string;\ntype Annotation = {\n index: number;\n label: string;\n description: string;\n};\n/** Breakdown category definition — `{ key, label }` tuple. */\ntype AnalyticsChartSeries = {\n key: string;\n label: string;\n};\ntype FormatKindType = "numeric" | "short" | "currency" | "duration" | "datetime" | "percent";\ntype FormatKindNumeric = {\n type: "numeric"; /** Locale used for grouping and digit separators. Defaults to "en-US". */\n locale?: string; /** Fixed decimal places (0-4). Defaults to 0. */\n decimals?: number;\n};\ntype FormatKindShort = {\n type: "short"; /** Decimal places after the unit suffix (1.2K vs 1.20K). Defaults to 1. */\n precision?: number;\n locale?: string;\n};\ntype FormatKindCurrency = {\n type: "currency"; /** ISO 4217 code. Defaults to "USD". */\n currency?: string; /** Divisor applied before formatting — e.g. 100 for cents → dollars. Defaults to 1. */\n divisor?: number;\n locale?: string;\n};\ntype FormatKindDuration = {\n type: "duration"; /** Source unit of the input value. Defaults to "s". */\n unit?: "ms" | "s" | "m" | "h"; /** Show the smallest unit even when zero. Defaults to false. */\n showZero?: boolean;\n};\ntype FormatKindDatetime = {\n type: "datetime"; /** Render style. Defaults to "short". */\n style?: "short" | "long" | "iso" | "relative";\n locale?: string;\n};\ntype FormatKindPercent = {\n type: "percent";\n /** How to interpret the input value:\n * - "fraction" → 0..1 → multiply by 100 (default)\n * - "basis" → 0..10000 → divide by 100\n * - "whole" → 0..100 → no scaling\n */\n source?: "fraction" | "basis" | "whole"; /** Decimal places. Defaults to 1. */\n decimals?: number;\n};\ntype FormatKind = FormatKindNumeric | FormatKindShort | FormatKindCurrency | FormatKindDuration | FormatKindDatetime | FormatKindPercent;\ntype AnalyticsChartView = "timeseries" | "pie";\ntype AnalyticsChartLayerType = "line" | "area" | "bar";\ntype AnalyticsChartStrokeStyle = "solid" | "dashed" | "dotted";\ntype AnalyticsChartDataLayerCommon = {\n id: string;\n kind: "primary" | "compare";\n label: string;\n visible: boolean;\n color: string;\n segmented: boolean;\n /** Per-day per-category values. Outer index is the day (matches the\n * chart data array index); inner index is the category (matches\n * `segmentSeries`). Rows should sum to `point.values[layer.id]`. */\n segments?: readonly (readonly number[])[];\n /** Breakdown category definitions ordered to match the inner index of\n * `segments`. */\n segmentSeries?: readonly AnalyticsChartSeries[];\n /** Absolute index into the full data array at which this layer\'s values\n * become "in progress" (incomplete and still changing). Points from this\n * index onward render with a dashed overlay so users don\'t panic at a\n * half-filled bucket. Applies to line and area rendering only. */\n inProgressFromIndex?: number | null;\n};\ntype AnalyticsChartLineLayer = AnalyticsChartDataLayerCommon & {\n type: "line";\n strokeStyle: AnalyticsChartStrokeStyle;\n};\ntype AnalyticsChartAreaLayer = AnalyticsChartDataLayerCommon & {\n type: "area";\n strokeStyle: AnalyticsChartStrokeStyle;\n fillOpacity: number;\n};\ntype AnalyticsChartBarLayer = AnalyticsChartDataLayerCommon & {\n type: "bar";\n fillOpacity: number;\n};\ntype AnalyticsChartDataLayer = AnalyticsChartLineLayer | AnalyticsChartAreaLayer | AnalyticsChartBarLayer;\ntype AnalyticsChartAnnotationsLayer = {\n id: string;\n kind: "annotations";\n label: string;\n visible: boolean;\n color: string;\n};\ntype AnalyticsChartLayer = AnalyticsChartDataLayer | AnalyticsChartAnnotationsLayer;\ntype AnalyticsChartLayers = readonly AnalyticsChartLayer[];\ntype AnalyticsChartTimeseriesState = {\n view: "timeseries";\n layers: AnalyticsChartLayers; /** Format applied to every x-axis value. Defaults to `datetime / short`. */\n xFormatKind: FormatKind; /** Format applied to every y-axis value. Defaults to `short`. */\n yFormatKind: FormatKind;\n showGrid: boolean;\n showXAxis: boolean;\n showYAxis: boolean;\n zoomRange: [number, number] | null;\n pinnedIndex: number | null;\n};\ntype AnalyticsChartPieState = {\n view: "pie";\n layers: AnalyticsChartLayers;\n xFormatKind: FormatKind;\n yFormatKind: FormatKind;\n};\ntype AnalyticsChartState = AnalyticsChartTimeseriesState | AnalyticsChartPieState;\ntype AnalyticsChartDelta = {\n pct: number | null;\n sign: "up" | "down" | "flat" | "na";\n};\n/** Grouped pie config — collapses the formerly-separate\n * `pieInnerRadius` / `pieOuterRadius` / `pieCompareInnerRadius` /\n * `pieCompareOuterRadius` / `pieContainerClassName` props into one object. */\ntype AnalyticsChartPieProps = {\n innerRadius?: number;\n outerRadius?: number;\n compareInnerRadius?: number;\n compareOuterRadius?: number;\n className?: string;\n};\ntype AnalyticsChartSegmentRamp = {\n kind: "procedural"; /** HSL hue (0-360). */\n hue: number; /** HSL saturation percent (0-100). */\n sat: number; /** Lightness range `[start, end]` for the light theme (0-100). */\n shadeRangeLight: [number, number]; /** Lightness range `[start, end]` for the dark theme (0-100). */\n shadeRangeDark: [number, number];\n} | {\n kind: "explicit"; /** Concrete light-theme color list. Indexed by segment. */\n light: readonly string[]; /** Concrete dark-theme color list. Indexed by segment. */\n dark: readonly string[];\n};\ntype AnalyticsChartPalette = {\n /** Color ramp for the primary data layer (current period). */primary: AnalyticsChartSegmentRamp; /** Color ramp for the compare data layer (previous period). */\n compare: AnalyticsChartSegmentRamp;\n};\n//#endregion\n\n//#region src/components/badge.d.ts\ntype DesignBadgeColor = "blue" | "cyan" | "purple" | "green" | "orange" | "red";\ntype DesignBadgeSize = "sm" | "md";\n/** At least one of showLabel or showIcon must be true. */\ntype DesignBadgeContentMode = "both" | "text" | "icon";\ntype DesignBadgeProps = {\n label: string;\n color: DesignBadgeColor;\n icon?: React.ElementType;\n size?: DesignBadgeSize; /** What to display: "both" (default), "text" (label only), or "icon" (icon only; requires icon prop). */\n contentMode?: DesignBadgeContentMode;\n};\n/**\n * Small pill used for status tags, roles, categories, and other short\n * labels. Not a variant-based component — pick a semantic `color` and\n * optionally pass an `icon` (as a component type, not a rendered node).\n *\n * ```tsx\n * <DesignBadge label="Verified" color="green" icon={CheckIcon} />\n * <DesignBadge label="Beta" color="purple" />\n * <DesignBadge label="Error" color="red" size="sm" />\n * ```\n *\n * Notes:\n * - Props are `label` + `color`, NOT `variant` + children.\n * - `color` is one of: `"blue" | "cyan" | "purple" | "green" | "orange" | "red"`.\n * - `icon` is optional but, if set via `contentMode: "icon"`, is required.\n */\ndeclare function DesignBadge({\n label,\n color,\n icon,\n size,\n contentMode\n}: DesignBadgeProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/button.d.ts\ndeclare const designButtonVariants: (props?: ({\n variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "plain" | null | undefined;\n size?: "icon" | "default" | "sm" | "lg" | null | undefined;\n} & class_variance_authority_types0.ClassProp) | undefined) => string;\ntype DesignOriginalButtonProps = {\n asChild?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof designButtonVariants>;\ntype DesignButtonProps = {\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n loading?: boolean;\n loadingStyle?: "spinner" | "disabled";\n} & DesignOriginalButtonProps;\n/**\n * Standard button. Variants: `default | destructive | outline | secondary | ghost | link | plain`.\n * Sizes: `default | sm | lg | icon`.\n *\n * ```tsx\n * <DesignButton variant="default" onClick={handleSave}>Save</DesignButton>\n * <DesignButton variant="outline" size="sm" onClick={handleCancel}>Cancel</DesignButton>\n * <DesignButton variant="ghost" size="icon"><PlusIcon className="h-4 w-4" /></DesignButton>\n * ```\n *\n * Pass an async `onClick` and the button will automatically show a spinner\n * while the promise is pending (set `loadingStyle="disabled"` if you prefer\n * a simple disabled state instead).\n */\ndeclare const DesignButton: React.FC<{\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n loading?: boolean;\n loadingStyle?: "spinner" | "disabled";\n} & {\n asChild?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({\n variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "plain" | null | undefined;\n size?: "icon" | "default" | "sm" | "lg" | null | undefined;\n} & class_variance_authority_types0.ClassProp) | undefined) => string> & {\n ref?: React.Ref<HTMLButtonElement> | undefined;\n}>;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/card.d.ts\n/**\n * Returns `true` when the calling component is rendered inside a DesignCard.\n * Useful for deriving a glassmorphic default.\n */\ndeclare function useInsideDesignCard(): boolean;\n/**\n * Resolve the effective glassmorphic value.\n * - If the caller passed an explicit boolean → honour it.\n * - Otherwise → fall back to whether we\'re inside a DesignCard.\n */\ndeclare function useGlassmorphicDefault(explicit: boolean | undefined): boolean;\ntype DesignCardGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignCardBaseProps = {\n glassmorphic?: boolean;\n gradient?: DesignCardGradient;\n contentClassName?: string;\n} & Omit<React.ComponentProps<typeof Card>, "title">;\ntype WithTitleProps = {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n icon: React.ElementType;\n actions?: React.ReactNode;\n};\ntype WithoutTitleProps = {\n title?: never;\n subtitle?: never;\n icon?: never;\n actions?: never;\n};\ntype DesignCardProps = DesignCardBaseProps & (WithTitleProps | WithoutTitleProps);\n/**\n * General-purpose card for grouping related content: section headers,\n * description blocks, chart-less panels, etc. If the content is a\n * big-number metric, use `DesignMetricCard` instead. If it contains a\n * chart, wrap it in `DesignChartCard`.\n *\n * Two shapes, picked automatically by the props you pass:\n *\n * ```tsx\n * // With a header (title requires icon):\n * <DesignCard title="Recent activity" icon={ActivityIcon}>\n * ...body...\n * </DesignCard>\n *\n * // Body-only (no header):\n * <DesignCard>\n * <h2 className="text-2xl font-semibold">Dashboard</h2>\n * <p className="text-muted-foreground">Overview of your user base</p>\n * </DesignCard>\n * ```\n *\n * Rules:\n * - DO NOT add padding classes (`p-6`, `p-5`, etc.) to `className` — the\n * component already has built-in padding and extra padding will look wrong.\n * - If you set `title`, you MUST also set `icon`. The TS types enforce this,\n * but writing `title` without `icon` will fail.\n * - Body-only cards (no `title`) automatically go transparent in dark mode.\n */\ndeclare function DesignCard({\n title,\n subtitle,\n icon: Icon,\n actions,\n glassmorphic: glassmorphicProp,\n gradient,\n children,\n className,\n contentClassName,\n ...props\n}: DesignCardProps): react_jsx_runtime0.JSX.Element;\ntype DesignCardTintProps = {\n gradient: DesignCardGradient;\n} & React.ComponentProps<"div">;\ndeclare function DesignCardTint({\n gradient,\n className,\n children,\n ...props\n}: DesignCardTintProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/chart-card.d.ts\ntype DesignChartCardGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignChartCardProps = {\n gradient?: DesignChartCardGradient;\n title?: React.ReactNode;\n description?: React.ReactNode;\n} & Omit<React.ComponentProps<"div">, "title">;\n/**\n * Card chrome (title + description + border) for a chart. Wrap every\n * `AnalyticsChart` in this so the chart has context. Also used around raw\n * Recharts components paired with `DesignChartContainer` for non-time-series\n * fallbacks.\n *\n * ```tsx\n * // Time-series chart (preferred):\n * <DesignChartCard title="Signups" description="Last 30 days">\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * </DesignChartCard>\n *\n * // Non-time-series fallback (static ranking, distribution, etc.):\n * <DesignChartCard title="Top referrers" description="This month">\n * <DesignChartContainer config={chartConfig} maxHeight={300}>\n * <Recharts.BarChart data={data}>\n * <Recharts.CartesianGrid strokeDasharray="3 3" stroke="hsl(var(--border))" />\n * <Recharts.XAxis dataKey="name" tick={{ fill: \'hsl(var(--muted-foreground))\', fontSize: 12 }} />\n * <Recharts.YAxis tick={{ fill: \'hsl(var(--muted-foreground))\', fontSize: 12 }} />\n * <Recharts.Tooltip content={<DesignChartTooltipContent />} />\n * <Recharts.Bar dataKey="count" fill={getDesignChartColor(0)} radius={[4, 4, 0, 0]} />\n * </Recharts.BarChart>\n * </DesignChartContainer>\n * </DesignChartCard>\n * ```\n *\n * `chartConfig` for `DesignChartContainer` maps each `dataKey` to its label and color:\n * `{ count: { label: "Count", color: getDesignChartColor(0) } }`.\n */\ndeclare function DesignChartCard({\n gradient,\n title,\n description,\n className,\n children,\n ...props\n}: DesignChartCardProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/chart-container.d.ts\ndeclare const THEMES: {\n readonly light: "";\n readonly dark: ".dark";\n};\ntype DesignChartConfig = { [k in string]: {\n label?: React$1.ReactNode;\n icon?: React$1.ComponentType;\n} & ({\n color?: string;\n theme?: never;\n} | {\n color?: never;\n theme: Record<keyof typeof THEMES, string>;\n}) };\ntype ChartContextProps = {\n config: DesignChartConfig;\n};\ndeclare function useDesignChart(): ChartContextProps;\ndeclare function DesignChartStyle({\n id,\n config\n}: {\n id: string;\n config: DesignChartConfig;\n}): react_jsx_runtime0.JSX.Element | null;\ndeclare const DesignChartContainer: React$1.ForwardRefExoticComponent<Omit<React$1.ClassAttributes<HTMLDivElement> & React$1.HTMLAttributes<HTMLDivElement> & {\n maxHeight?: number;\n config: DesignChartConfig;\n children: React$1.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];\n}, "ref"> & React$1.RefAttributes<HTMLDivElement>>;\n/**\n * Helper to extract item config from a Recharts payload object.\n */\ndeclare function getPayloadConfigFromPayload(config: DesignChartConfig, payload: unknown, key: string): ({\n label?: React$1.ReactNode;\n icon?: React$1.ComponentType;\n} & ({\n color?: string;\n theme?: never;\n} | {\n color?: never;\n theme: Record<keyof typeof THEMES, string>;\n})) | undefined;\n//#endregion\n\n//#region src/components/chart-legend.d.ts\ndeclare const DesignChartLegendContent: React$1.ForwardRefExoticComponent<Omit<React$1.ClassAttributes<HTMLDivElement> & React$1.HTMLAttributes<HTMLDivElement> & Pick<RechartsPrimitive.LegendProps, "verticalAlign" | "payload"> & {\n hideIcon?: boolean;\n nameKey?: string;\n}, "ref"> & React$1.RefAttributes<HTMLDivElement>>;\n//#endregion\n\n//#region src/components/chart-theme.d.ts\ntype DesignChartColorEntry = {\n light: string;\n dark: string;\n};\n/**\n * Design-system-consistent chart colors that work in light and dark mode.\n * Maps to the gradient system used across the dashboard design components.\n */\ndeclare const DESIGN_CHART_COLORS: readonly DesignChartColorEntry[];\ntype DesignChartColorName = "blue" | "cyan" | "purple" | "green" | "orange" | "red";\n/**\n * Get a chart color by index (wraps around) or by name.\n */\ndeclare function getDesignChartColor(indexOrName: number | DesignChartColorName, mode?: "light" | "dark"): string;\n/**\n * Recharts-compatible grid/axis styling constants that match the design system.\n */\ndeclare const DESIGN_CHART_GRID_COLOR = "hsl(0 0% 50% / 0.12)";\ndeclare const DESIGN_CHART_AXIS_TICK_STYLE: {\n readonly fill: "hsl(0 0% 50% / 0.5)";\n readonly fontSize: 11;\n};\n//#endregion\n\n//#region src/components/chart-tooltip.d.ts\ndeclare const DesignChartTooltip: typeof RechartsPrimitive.Tooltip;\ndeclare const DesignChartTooltipContent: React$1.ForwardRefExoticComponent<Omit<RechartsPrimitive.DefaultTooltipContentProps<recharts_types_component_DefaultTooltipContent0.ValueType, recharts_types_component_DefaultTooltipContent0.NameType> & {\n accessibilityLayer?: boolean;\n active?: boolean | undefined;\n includeHidden?: boolean | undefined;\n allowEscapeViewBox?: recharts_types_util_types0.AllowInDimension;\n animationDuration?: recharts_types_util_types0.AnimationDuration;\n animationEasing?: recharts_types_util_types0.AnimationTiming;\n content?: recharts_types_component_Tooltip0.ContentType<recharts_types_component_DefaultTooltipContent0.ValueType, recharts_types_component_DefaultTooltipContent0.NameType> | undefined;\n coordinate?: Partial<recharts_types_util_types0.Coordinate>;\n cursor?: boolean | React$1.ReactElement | React$1.SVGProps<SVGElement>;\n filterNull?: boolean;\n defaultIndex?: number;\n isAnimationActive?: boolean;\n offset?: number;\n payloadUniqBy?: recharts_types_util_payload_getUniqPayload0.UniqueOption<recharts_types_component_DefaultTooltipContent0.Payload<recharts_types_component_DefaultTooltipContent0.ValueType, recharts_types_component_DefaultTooltipContent0.NameType>> | undefined;\n position?: Partial<recharts_types_util_types0.Coordinate>;\n reverseDirection?: recharts_types_util_types0.AllowInDimension;\n shared?: boolean;\n trigger?: "hover" | "click";\n useTranslate3d?: boolean;\n viewBox?: recharts_types_util_types0.CartesianViewBox;\n wrapperStyle?: React$1.CSSProperties;\n} & React$1.ClassAttributes<HTMLDivElement> & React$1.HTMLAttributes<HTMLDivElement> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: "line" | "dot" | "dashed";\n nameKey?: string;\n labelKey?: string;\n}, "ref"> & React$1.RefAttributes<HTMLDivElement>>;\n//#endregion\n\n//#region src/components/cursor-blast-effect.d.ts\ntype CursorBlastEffectProps = {\n /** Lifetime of each blast animation in ms. Default: 720 */blastLifetimeMs?: number; /** Maximum number of concurrent active blasts. Default: 18 */\n maxActiveBlasts?: number; /** Minimum rapid clicks in the time window to trigger a blast. Default: 3 */\n rageClickThreshold?: number; /** Time window (ms) for counting rage clicks. Default: 600 */\n rageClickWindowMs?: number; /** Max distance (px) between clicks to count as same-spot rage clicking. Default: 60 */\n rageClickRadiusPx?: number;\n /**\n * When provided, the blast effect is scoped to this container element.\n * Clicks are only detected within the container and blasts are positioned\n * relative to the container rather than the viewport.\n */\n containerRef?: React.RefObject<HTMLElement | null>;\n};\ndeclare function CursorBlastEffect({\n blastLifetimeMs,\n maxActiveBlasts,\n rageClickThreshold,\n rageClickWindowMs,\n rageClickRadiusPx,\n containerRef\n}?: CursorBlastEffectProps): react_jsx_runtime0.JSX.Element | null;\n//#endregion\n\n//#region src/components/data-grid/data-grid-sizing.d.ts\ndeclare const DEFAULT_MAX_COL_WIDTH = 800;\ndeclare const DEFAULT_COL_WIDTH = 150;\n/** Effective minimum column width. When `col.minWidth` is unset, derive\n * one from the header label so it never gets clipped during resize. */\ndeclare function getEffectiveMinWidth<TRow>(col: DataGridColumnDef<TRow>): number;\ndeclare function getEffectiveMaxWidth<TRow>(col: DataGridColumnDef<TRow>): number;\ndeclare function clampColumnWidth<TRow>(col: DataGridColumnDef<TRow>, width: number): number;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/data-grid/data-grid-toolbar.d.ts\ndeclare function DataGridToolbar<TRow>({\n ctx,\n extra,\n extraLeading,\n hideQuickSearch\n}: {\n ctx: DataGridToolbarContext<TRow>;\n /** Extra content rendered inside the toolbar row, to the left of the\n * built-in columns / export actions. Use this to add table-specific\n * affordances (refresh, custom toggles, row counts) without giving up\n * the default actions. */\n extra?: React.ReactNode;\n /** Extra content rendered at the START of the toolbar row — occupies\n * the same position as the built-in quick search (after it, if the\n * quick search is visible). Use this together with `hideQuickSearch`\n * to fully replace the quick search with a custom input, e.g. an\n * AI-powered search bar. */\n extraLeading?: React.ReactNode;\n /** Whether to hide the built-in quick-search input. When `true`,\n * callers are expected to provide their own search UI via\n * `extraLeading`. */\n hideQuickSearch?: boolean;\n}): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/data-grid/data-grid.d.ts\ndeclare function isDataGridInteractiveRowClickTarget(target: EventTarget | null): boolean;\n/**\n * Interactive table built on TanStack Table v8. Sorting, column sizing,\n * visibility, ordering, and pinning are owned by the table instance; we\n * layer virtualization, sticky toolbar/header/footer, infinite scroll,\n * quick search, CSV export, and date-format toggling on top.\n *\n * The grid is display-only — it does not fetch or page data itself. Pair\n * with `useDataSource` for client- or server-side data and pass the\n * already-processed slice through `rows`.\n *\n * ```tsx\n * const columns = useMemo(() => [...], []);\n * const [gridState, setGridState] = useState(() => createDefaultDataGridState(columns));\n * const gridData = useDataSource({\n * data: users, columns, getRowId: (r) => r.id,\n * sorting: gridState.sorting,\n * quickSearch: gridState.quickSearch,\n * pagination: gridState.pagination,\n * paginationMode: "client",\n * });\n *\n * <DataGrid\n * columns={columns}\n * rows={gridData.rows}\n * getRowId={(r) => r.id}\n * totalRowCount={gridData.totalRowCount}\n * isLoading={gridData.isLoading}\n * state={gridState}\n * onChange={setGridState}\n * />\n * ```\n *\n * Iron rules:\n * - `rows` is always `gridData.rows`, never your raw array.\n * - Columns must be stable (define outside the component or wrap in `useMemo`).\n * - Initialize state with `createDefaultDataGridState(columns)`.\n * - `renderCell` must be a pure function — no React hooks inside.\n */\ndeclare function DataGrid<TRow>(props: DataGridProps<TRow>): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/data-grid/state.d.ts\n/**\n * Build the initial `DataGridState` for a set of columns. Pass this as the\n * lazy initializer to `useState` — never hand-assemble the state object.\n *\n * ```tsx\n * const [gridState, setGridState] = React.useState(() =>\n * createDefaultDataGridState(columns)\n * );\n * ```\n */\ndeclare function createDefaultDataGridState(columns: readonly DataGridColumnDef<any>[]): DataGridState;\ndeclare function resolveColumnValue<TRow>(col: DataGridColumnDef<TRow>, row: TRow): unknown;\ndeclare function buildRowComparator<TRow>(sortModel: DataGridSortModel, columns: readonly DataGridColumnDef<TRow>[]): ((a: TRow, b: TRow) => number) | null;\ndeclare function paginateRows<TRow>(rows: readonly TRow[], pagination: DataGridPaginationModel): TRow[];\n/** Default row matcher: case-insensitive substring across every column. */\ndeclare function defaultMatchRow<TRow>(row: TRow, query: string, columns: readonly DataGridColumnDef<TRow>[]): boolean;\ndeclare function applyQuickSearch<TRow>(rows: readonly TRow[], query: string, columns: readonly DataGridColumnDef<TRow>[], matchRow?: (row: TRow, query: string, columns: readonly DataGridColumnDef<TRow>[]) => boolean): readonly TRow[];\ndeclare function defaultParseDate(value: unknown): Date | null;\ndeclare function defaultFormatRelative(date: Date): string;\ndeclare function defaultFormatAbsolute(date: Date): string;\ndeclare function formatGridDate(value: unknown, mode: DataGridDateDisplay, opts?: {\n parseValue?: (value: unknown) => Date | null;\n dateFormat?: DataGridDateFormat;\n}): {\n display: string | null;\n tooltip: string | null;\n};\ndeclare function exportToCsv<TRow>(rows: readonly TRow[], columns: readonly DataGridColumnDef<TRow>[], filename: string): void;\n//#endregion\n\n//#region src/components/data-grid/strings.d.ts\ndeclare const DATA_GRID_DEFAULT_STRINGS: DataGridStrings;\ndeclare function resolveDataGridStrings(override: Partial<DataGridStrings> | undefined): DataGridStrings;\n//#endregion\n\n//#region src/components/data-grid/types.d.ts\n/** Every row must be uniquely identifiable. The grid resolves identity\n * through the top-level `getRowId` prop. */\ntype RowId = string;\ntype DataGridColumnType = "string" | "number" | "date" | "dateTime" | "boolean" | "singleSelect" | "custom";\ntype DataGridColumnAlign = "left" | "center" | "right";\ntype DataGridColumnPin = "left" | "right" | false;\n/** How `date` / `dateTime` cells render their value. `"relative"` shows\n * "1 day ago"–style text with the full datetime in a tooltip; `"absolute"`\n * shows the full datetime inline. */\ntype DataGridDateDisplay = "relative" | "absolute";\n/** Per-column overrides for how a `date` / `dateTime` cell is formatted.\n * If either function is omitted the grid falls back to its default\n * (Intl.RelativeTimeFormat + `toLocaleString()`). */\ntype DataGridDateFormat = {\n relative?: (date: Date) => string;\n absolute?: (date: Date) => string;\n};\n/** Context passed to `renderCell`. */\ntype DataGridCellContext<TRow> = {\n row: TRow;\n rowId: RowId;\n rowIndex: number;\n value: unknown;\n columnId: string;\n isSelected: boolean;\n /** Current date display mode — consumers writing custom `renderCell`\n * for `date` / `dateTime` columns should branch on this to match the\n * grid\'s built-in behaviour. */\n dateDisplay: DataGridDateDisplay;\n};\n/** Context passed to `renderHeader`. */\ntype DataGridHeaderContext<TRow> = {\n columnId: string;\n columnDef: DataGridColumnDef<TRow>;\n isSorted: false | "asc" | "desc";\n sortIndex: number | null;\n};\n/** A single column\'s full configuration. Generic over the row type. */\ntype DataGridColumnDef<TRow> = {\n /** Unique identifier for this column. */id: string; /** Display label. If a function is given it receives the header context. */\n header: string | ((ctx: DataGridHeaderContext<TRow>) => ReactNode);\n /** Accessor — either a key of TRow or a function. If omitted, `id` is\n * used as the key. */\n accessor?: keyof TRow | ((row: TRow) => unknown); /** Custom cell renderer. Falls back to plain text of the resolved value. */\n renderCell?: (ctx: DataGridCellContext<TRow>) => ReactNode; /** Initial width in pixels. Defaults to 150. */\n width?: number; /** Minimum width during resize. Defaults to 50. */\n minWidth?: number; /** Maximum width during resize. Defaults to 800. */\n maxWidth?: number;\n /** Flex grow factor. When set, remaining space is distributed among flex\n * columns proportionally. */\n flex?: number;\n sortable?: boolean;\n resizable?: boolean;\n hideable?: boolean; /** Pin position. Defaults to `false` (unpinned). */\n pin?: DataGridColumnPin;\n align?: DataGridColumnAlign; /** Column type affects default sorting. */\n type?: DataGridColumnType; /** For `singleSelect` type — available value options. */\n valueOptions?: readonly DataGridSelectOption[];\n /** How cell content handles overflow.\n * - `"truncate"` (default): single-line with text-overflow ellipsis.\n * - `"wrap"`: content wraps naturally. When combined with\n * `rowHeight="auto"` on the grid, the row grows to fit. With a\n * fixed `rowHeight`, wrapped content is clipped at the row boundary. */\n cellOverflow?: "truncate" | "wrap";\n /** Custom sort comparator. Receives two resolved cell values.\n * Return negative if a < b, positive if a > b, 0 if equal. */\n sortComparator?: (a: unknown, b: unknown) => number;\n /** Format a cell value to a plain string — used for export and\n * clipboard copy. Defaults to `String(value)`. */\n formatValue?: (value: unknown, row: TRow) => string;\n /** Parse a raw cell value into a `Date`. Only consulted when `type` is\n * `"date"` or `"dateTime"`. Defaults to `new Date(value)` with graceful\n * handling of `null` / `undefined` / invalid dates. Override for\n * non-standard formats (e.g. ClickHouse\'s space-separated UTC strings). */\n parseValue?: (value: unknown) => Date | null; /** Per-column override for the relative / absolute date formatters. */\n dateFormat?: DataGridDateFormat; /** Fired when a cell in this column is clicked. */\n onCellClick?: (ctx: DataGridCellContext<TRow>, event: React.MouseEvent) => void; /** Fired when a cell in this column is double-clicked. */\n onCellDoubleClick?: (ctx: DataGridCellContext<TRow>, event: React.MouseEvent) => void;\n};\ntype DataGridSelectOption = {\n value: string;\n label: string;\n};\ntype DataGridSortItem = {\n columnId: string;\n direction: "asc" | "desc";\n};\ntype DataGridSortModel = readonly DataGridSortItem[];\ntype DataGridSelectionMode = "none" | "single" | "multiple";\ntype DataGridSelectionModel = {\n selectedIds: ReadonlySet<RowId>; /** Tracks the last-clicked row for shift-range selection. */\n anchorId: RowId | null;\n};\ntype DataGridColumnVisibility = Record<string, boolean>;\ntype DataGridColumnPinning = {\n left: readonly string[];\n right: readonly string[];\n};\n/** UI display mode — "paginated" shows page controls, "infinite" shows scroll sentinel. */\ntype DataGridPaginationMode = "paginated" | "infinite";\n/** Data-fetching strategy used by `useDataSource`. */\ntype DataGridDataPaginationMode = "client" | "server" | "infinite";\ntype DataGridPaginationModel = {\n pageIndex: number;\n pageSize: number;\n};\ntype DataGridState = {\n sorting: DataGridSortModel;\n columnVisibility: DataGridColumnVisibility;\n columnWidths: Record<string, number>;\n columnPinning: DataGridColumnPinning;\n columnOrder: readonly string[];\n pagination: DataGridPaginationModel;\n selection: DataGridSelectionModel;\n /** How `date` / `dateTime` columns render. Defaults to `"relative"`\n * via `createDefaultDataGridState`. Toggled from the Columns popover\n * whenever the grid has at least one date column. */\n dateDisplay: DataGridDateDisplay;\n /** Current quick-search text. Written by the built-in search input in\n * the toolbar. `useDataSource` in client mode auto-filters by this\n * value (via `applyQuickSearch`); in async mode it\'s passed through\n * to the generator as `params.quickSearch`, where the consumer owns\n * the "how do I match?" decision (typically by modifying the backend\n * query). Defaults to `""`. */\n quickSearch: string;\n};\n/** Params sent to the async data source on each fetch. */\ntype DataGridFetchParams = {\n sorting: DataGridSortModel;\n pagination: DataGridPaginationModel;\n /** Current quick-search text. Passed through from `state.quickSearch`\n * so the async generator can fold it into its query (e.g. a SQL WHERE\n * clause). Empty string when the search box is empty. A change in\n * this value triggers a refetch, same mechanism as sorting. */\n quickSearch: string; /** For cursor-based: the last row of the previous page. */\n cursor: unknown;\n};\n/** Return type from a data source fetch. */\ntype DataGridFetchResult<TRow> = {\n rows: TRow[]; /** Total row count if known. `-1` or `undefined` for unknown (infinite). */\n totalRowCount?: number; /** Cursor for the next page (for cursor-based pagination). */\n nextCursor?: unknown; /** If `false`, there are no more pages. */\n hasMore?: boolean;\n};\n/** An async-generator data source yields pages of rows. The generator\n * receives fetch params as its argument and yields pages. Yielding\n * allows the grid to display partial results during loading. */\ntype DataGridDataSource<TRow> = (params: DataGridFetchParams) => AsyncGenerator<DataGridFetchResult<TRow>, void, undefined>;\ntype DataGridCallbacks<TRow> = {\n onRowClick?: (row: TRow, rowId: RowId, event: React.MouseEvent) => void;\n onRowDoubleClick?: (row: TRow, rowId: RowId, event: React.MouseEvent) => void;\n onCellClick?: (row: TRow, columnId: string, value: unknown, event: React.MouseEvent) => void;\n /**\n * Fires when the selection set changes. **Page-scoped:** the header "select\n * all" checkbox and `selectedRows` only cover the rows currently rendered\n * (the visible page in paginated mode, or the loaded prefix in infinite\n * mode). The grid does not load other pages to satisfy the selection — if\n * you need cross-page selection, drive `selectedIds` from your own state\n * and load all rows you care about up-front.\n */\n onSelectionChange?: (selectedIds: ReadonlySet<RowId>, selectedRows: TRow[]) => void;\n onSortChange?: (model: DataGridSortModel) => void;\n onColumnResize?: (columnId: string, width: number) => void;\n onColumnVisibilityChange?: (model: DataGridColumnVisibility) => void;\n};\ntype DataGridProps<TRow> = {\n /** Column definitions. */columns: readonly DataGridColumnDef<TRow>[];\n /** The rows to display. The consumer is responsible for sorting\n * and paginating before passing them in. */\n rows: readonly TRow[]; /** Extract a unique identifier from each row. */\n getRowId: (row: TRow) => RowId; /** Total row count across all pages (used for pagination UI). */\n totalRowCount?: number; /** True while the initial data load is in progress (shows skeleton). */\n isLoading?: boolean; /** True during a background refetch (shows subtle indicator, keeps rows). */\n isRefetching?: boolean; /** Whether more rows can be loaded (shows infinite scroll sentinel). */\n hasMore?: boolean; /** True while loading the next page of infinite scroll. */\n isLoadingMore?: boolean; /** Called when the infinite scroll sentinel becomes visible. */\n onLoadMore?: () => void;\n state: DataGridState;\n onChange: React.Dispatch<React.SetStateAction<DataGridState>>;\n /** UI mode for pagination. "paginated" shows page controls in the\n * footer. "infinite" shows a scroll sentinel instead. Defaults to\n * "paginated". */\n paginationMode?: "paginated" | "infinite"; /** Selection behaviour. Defaults to "none". */\n selectionMode?: DataGridSelectionMode; /** Whether columns can be resized by dragging. Defaults to true. */\n resizable?: boolean;\n /** Row height in pixels, or `"auto"` for dynamic measurement.\n *\n * - **number** (default `44`): every row is exactly this tall.\n * Fast and predictable; content that overflows is clipped.\n * - **`"auto"`**: each row is measured by the browser after render\n * and the virtualizer adjusts positions accordingly. Columns\n * with `cellOverflow: "wrap"` will push the row taller; columns\n * with `cellOverflow: "truncate"` (or the default) stay\n * single-line. Use `estimatedRowHeight` to reduce scroll-jank\n * when rows haven\'t been measured yet. */\n rowHeight?: number | "auto";\n /** Estimated row height used by the virtualizer when\n * `rowHeight="auto"`. Better estimates = less scroll-position\n * jank before rows are measured. Defaults to 44. Ignored when\n * `rowHeight` is a number. */\n estimatedRowHeight?: number; /** Header row height in pixels. Defaults to 44. */\n headerHeight?: number; /** Number of rows to render outside the visible area. Defaults to 5. */\n overscan?: number; /** Grid max height. If omitted, grid takes available space (when `fillHeight`). */\n maxHeight?: number | string;\n /**\n * When `true` (default), the grid uses `h-full` and the row area scrolls inside the grid.\n * When `false`, the grid is only as tall as toolbar + header + rows (`h-auto`), so sibling\n * content (e.g. metadata) sits directly under the table without a large empty gap.\n */\n fillHeight?: boolean; /** Top offset for the sticky toolbar + header (px or CSS string). */\n stickyTop?: number | string;\n} & DataGridCallbacks<TRow> & {\n /** Custom toolbar renderer. When `false`, toolbar is hidden entirely. */toolbar?: false | ((ctx: DataGridToolbarContext<TRow>) => ReactNode);\n /** Extra content rendered inside the default toolbar row, to the left of\n * the built-in columns / export actions. Use this to slot in\n * refresh buttons, custom toggles, row counts, etc. without giving up\n * the built-in actions. Ignored if a custom `toolbar` render function\n * is provided — that function owns the entire row. */\n toolbarExtra?: ReactNode | ((ctx: DataGridToolbarContext<TRow>) => ReactNode); /** Custom empty state. Defaults to a centered "No data" message. */\n emptyState?: ReactNode; /** Custom loading state. Defaults to skeleton rows. */\n loadingState?: ReactNode; /** Custom footer. When `false`, footer is hidden. */\n footer?: false | ((ctx: DataGridFooterContext<TRow>) => ReactNode); /** Extra content rendered to the right of the default footer info. */\n footerExtra?: ReactNode | ((ctx: DataGridFooterContext<TRow>) => ReactNode); /** Filename stem for CSV export (without extension). */\n exportFilename?: string; /** i18n overrides. */\n strings?: Partial<DataGridStrings>;\n className?: string;\n};\ntype DataGridToolbarContext<TRow> = {\n state: DataGridState;\n onChange: React.Dispatch<React.SetStateAction<DataGridState>>;\n columns: readonly DataGridColumnDef<TRow>[];\n visibleColumns: readonly DataGridColumnDef<TRow>[];\n totalRowCount: number | undefined;\n selectedRowCount: number;\n strings: DataGridStrings; /** Trigger a CSV export. */\n exportCsv: () => void;\n};\ntype DataGridFooterContext<TRow> = {\n state: DataGridState;\n totalRowCount: number | undefined;\n visibleRowCount: number;\n selectedRowCount: number;\n paginationMode: DataGridPaginationMode;\n strings: DataGridStrings;\n};\ntype DataGridStrings = {\n searchPlaceholder: string;\n columns: string;\n export: string;\n density: string;\n showAll: string;\n hideAll: string;\n resetColumns: string;\n dateFormat: string;\n dateFormatRelative: string;\n dateFormatAbsolute: string;\n rowsSelected: (count: number) => string;\n rowsPerPage: string;\n pageOf: (page: number, total: number) => string;\n noData: string;\n loading: string;\n loadingMore: string;\n exportCsv: string;\n exportCopied: string;\n sortAsc: string;\n sortDesc: string;\n unsort: string;\n pinLeft: string;\n pinRight: string;\n unpin: string;\n hideColumn: string;\n};\n//#endregion\n\n//#region src/components/data-grid/use-data-source.d.ts\ntype UseDataSourceResult<TRow> = {\n /** All rows currently loaded (for infinite mode, the accumulated set). */rows: readonly TRow[]; /** Total row count if known. */\n totalRowCount: number | undefined; /** Whether the initial load is in progress (no data at all yet). */\n isLoading: boolean; /** Whether a background refetch is happening (data already shown). */\n isRefetching: boolean; /** Whether more rows are being fetched (infinite scroll). */\n isLoadingMore: boolean; /** Request the next page (infinite scroll). */\n loadMore: () => void; /** Whether there are more pages to load. */\n hasMore: boolean; /** Reload from scratch. */\n reload: () => void;\n /**\n * Error from the most recent async fetch, if any. Consumers should render\n * an error UI and offer a `reload()` button when this is non-null. Client\n * mode never sets this (no fetching). Cleared on next successful fetch.\n */\n error: Error | null;\n};\n/**\n * Hook that processes raw data through the grid\'s sort/pagination state\n * and returns the `rows` slice ready to pass to `DataGrid`. This is the\n * only correct way to feed client-side data into a grid.\n *\n * Two modes, picked by which prop you pass:\n * - `data: TRow[]` → client-side mode. In-memory sort + paginate.\n * - `dataSource: (params) => AsyncGenerator` → server / infinite mode.\n * The generator yields pages as you scroll or change pages.\n *\n * ```tsx\n * // Client-side (most common):\n * const gridData = useDataSource({\n * data: users,\n * columns,\n * getRowId: (row) => row.id,\n * sorting: gridState.sorting,\n * quickSearch: gridState.quickSearch,\n * pagination: gridState.pagination,\n * paginationMode: "client",\n * });\n *\n * <DataGrid\n * columns={columns}\n * rows={gridData.rows}\n * totalRowCount={gridData.totalRowCount}\n * isLoading={gridData.isLoading}\n * state={gridState}\n * onChange={setGridState}\n * getRowId={(row) => row.id}\n * />\n * ```\n *\n * Rules:\n * - Call this hook unconditionally at the top level, before any early return.\n * - `rows` on `DataGrid` must ALWAYS be `gridData.rows`, never your raw array.\n * - For server or infinite pagination, use `dataSource` — see the\n * `DataGridDataSource` type for the generator signature.\n *\n * Quick search:\n * - Client mode (`data` prop): the hook auto-filters rows via\n * `applyQuickSearch` using a default case-insensitive substring match\n * across every column. Override with `matchRow` for custom matching\n * (fuzzy, weighted, field-specific, etc.).\n * - Async mode (`dataSource` prop): the hook passes `quickSearch` into\n * `params.quickSearch` and re-runs the generator whenever the search\n * string changes. The consumer owns the matching logic (typically by\n * folding it into a backend query). The grid performs NO client-side\n * filtering in async mode.\n */\ndeclare function useDataSource<TRow>(opts: {\n data?: readonly TRow[];\n dataSource?: DataGridDataSource<TRow>;\n columns: readonly DataGridColumnDef<TRow>[];\n getRowId: (row: TRow) => RowId;\n sorting: DataGridSortModel; /** Current quick-search text, typically `gridState.quickSearch`. */\n quickSearch: string;\n /** Override the default client-mode matcher. Ignored in async mode\n * (there the generator is the matcher). */\n matchRow?: (row: TRow, query: string, columns: readonly DataGridColumnDef<TRow>[]) => boolean;\n pagination: DataGridPaginationModel;\n paginationMode: DataGridDataPaginationMode;\n}): UseDataSourceResult<TRow>;\n//#endregion\n\n//#region src/components/data-grid/use-url-state.d.ts\ntype UrlStateOptions = {\n /** Disambiguates URL params when multiple grids share a page. Defaults\n * to `"grid"`. Use unique prefixes per-grid (e.g. `"users"`, `"teams"`). */\n paramPrefix?: string;\n /** Overrides for default state used when the URL has no value for a\n * given key. Useful for things like a sensible initial sort (e.g.\n * "newest signups first") that should appear on first load but be\n * overridden when the user navigates to a bookmarked URL. */\n initial?: Partial<Pick<DataGridState, "sorting" | "quickSearch" | "columnVisibility">>;\n};\n/**\n * Drop-in replacement for `useState(() => createDefaultDataGridState(columns))`\n * that persists user view preferences to URL search params, so a view\n * can be bookmarked / shared / restored on reload.\n *\n * **Persisted:** column widths, hidden columns, sort model, quick-search.\n * **Not persisted** (deliberately): pagination scroll position, selection,\n * column pinning/order, date display mode — these are session-scoped.\n *\n * ```tsx\n * const [gridState, setGridState] = useDataGridUrlState(columns, {\n * paramPrefix: "users",\n * initial: { sorting: [{ columnId: "signedUpAt", direction: "desc" }] },\n * });\n * ```\n *\n * URL encoding: `?{prefix}_w=...&{prefix}_h=...&{prefix}_s=...&{prefix}_q=...`.\n * Default values are omitted so URLs stay clean. Updates use\n * `history.replaceState` (not pushState) so back/forward isn\'t polluted,\n * and `popstate` is observed so external URL changes flow back into state.\n */\ndeclare function useDataGridUrlState<TRow>(columns: readonly DataGridColumnDef<TRow>[], opts?: UrlStateOptions): [DataGridState, React.Dispatch<React.SetStateAction<DataGridState>>];\n//#endregion\n\nimport React from "react";\n\n//#region src/components/dialog.d.ts\ntype DesignDialogSize = "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl" | "full";\ntype DesignDialogVariant = "glassmorphic" | "plain";\ntype DesignDialogIcon = React.ElementType<{\n className?: string;\n}>;\ntype DesignDialogRootProps = Omit<React.ComponentProps<typeof Dialog>, "children">;\ntype DesignDialogProps = {\n trigger?: React.ReactElement;\n size?: DesignDialogSize;\n variant?: DesignDialogVariant;\n icon?: DesignDialogIcon | null;\n title?: React.ReactNode;\n description?: React.ReactNode;\n headerContent?: React.ReactNode;\n customHeader?: React.ReactNode;\n footer?: React.ReactNode;\n noBodyPadding?: boolean;\n hideTopCloseButton?: boolean;\n className?: string;\n overlayClassName?: string;\n headerClassName?: string;\n bodyClassName?: string;\n footerClassName?: string;\n children?: React.ReactNode;\n} & DesignDialogRootProps;\n/**\n * Canonical dashboard modal surface. This wraps the base dialog primitives with\n * a reusable glassmorphic shell and consistent header/body/footer regions.\n */\ndeclare function DesignDialog({\n trigger,\n size,\n variant,\n icon: Icon,\n title,\n description,\n headerContent,\n customHeader,\n footer,\n noBodyPadding,\n hideTopCloseButton,\n className,\n overlayClassName,\n headerClassName,\n bodyClassName,\n footerClassName,\n children,\n ...dialogRootProps\n}: DesignDialogProps): react_jsx_runtime0.JSX.Element;\ndeclare const DesignDialogRoot: React.FC<_radix_ui_react_dialog0.DialogProps>;\ndeclare const DesignDialogTrigger: React.ForwardRefExoticComponent<_radix_ui_react_dialog0.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;\ndeclare const DesignDialogClose: React.ForwardRefExoticComponent<_radix_ui_react_dialog0.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;\ndeclare const DesignDialogTitle: React.FC<Omit<_radix_ui_react_dialog0.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & {\n ref?: React.Ref<HTMLHeadingElement> | undefined;\n}>;\ndeclare const DesignDialogDescription: React.FC<Omit<_radix_ui_react_dialog0.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & {\n ref?: React.Ref<HTMLParagraphElement> | undefined;\n}>;\n//#endregion\n\n//#region src/components/edit-mode.d.ts\ndeclare function DesignEditMode({\n children\n}: {\n children: React.ReactNode;\n}): react_jsx_runtime0.JSX.Element;\ndeclare function useDesignEditMode(): boolean;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/empty-state.d.ts\ntype DesignEmptyStateProps = {\n icon?: React.ElementType;\n title?: string;\n description?: string;\n children?: React.ReactNode;\n className?: string;\n};\n/**\n * Centered "no data" placeholder. Show this inside a `DataGrid` via the\n * `emptyState` prop, inside a chart when a query returns zero rows, or\n * inside a card when a section has nothing to display.\n *\n * ```tsx\n * <DesignEmptyState\n * icon={SearchIcon}\n * title="No results"\n * description="Try adjusting your filters."\n * />\n * ```\n *\n * Prefer this over a raw "No data" div — it handles spacing, typography,\n * and the optional icon for you. `icon` is a component type, not a rendered node.\n */\ndeclare function DesignEmptyState({\n icon: Icon,\n title,\n description,\n children,\n className\n}: DesignEmptyStateProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/input.d.ts\ntype DesignInputProps = {\n prefixItem?: React.ReactNode;\n leadingIcon?: React.ReactNode;\n size?: "sm" | "md" | "lg";\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, "size">;\ndeclare const DesignInput: React.FC<{\n prefixItem?: React.ReactNode;\n leadingIcon?: React.ReactNode;\n size?: "sm" | "md" | "lg";\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> & {\n ref?: React.Ref<HTMLInputElement> | undefined;\n}>;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/metric-card.d.ts\ntype DesignMetricCardGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignMetricCardTrend = {\n value: number;\n direction: "up" | "down";\n label?: string;\n};\ntype DesignMetricCardProps = {\n label: string;\n value: string | number;\n description?: string;\n trend?: DesignMetricCardTrend;\n icon?: React.ElementType;\n gradient?: DesignMetricCardGradient;\n} & Omit<React.ComponentProps<"div">, "children">;\n/**\n * KPI card for big-number metrics (users, revenue, signups, etc.).\n * Use this instead of a plain `DesignCard` when the value is the focal point.\n *\n * ```tsx\n * <DesignMetricCard\n * label="Total Users"\n * value="1,234"\n * description="+12% from last month"\n * trend={{ direction: "up", value: 12, label: "vs. last period" }}\n * icon={UsersIcon}\n * gradient="blue"\n * />\n * ```\n *\n * Notes:\n * - `label` is the short caption (NOT `title`).\n * - `value` can be a pre-formatted string ("1,234") or a number — prefer\n * strings so you control the format.\n * - `description` is the subline (NOT `subtitle`).\n * - `trend.value` is a NUMBER, not a pre-formatted "12%" string. The card\n * renders the arrow and formatting.\n * - `icon` is a component type (e.g. `UsersIcon`), not a rendered node.\n */\ndeclare function DesignMetricCard({\n label,\n value,\n description,\n trend,\n icon: Icon,\n gradient,\n className,\n ...props\n}: DesignMetricCardProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/pill-toggle.d.ts\ntype DesignPillToggleSize = "sm" | "md" | "lg";\ntype DesignPillToggleGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignPillToggleOption = {\n id: string;\n label: string;\n icon?: React.ElementType;\n};\ntype DesignPillToggleProps = {\n options: DesignPillToggleOption[];\n selected: string;\n onSelect: (id: string) => void | Promise<void>;\n size?: DesignPillToggleSize;\n glassmorphic?: boolean;\n gradient?: DesignPillToggleGradient; /** When false, hides labels and shows a tooltip on hover instead. Defaults to true. */\n showLabels?: boolean;\n className?: string;\n};\ndeclare function DesignPillToggle({\n options,\n selected,\n onSelect,\n size,\n glassmorphic: glassmorphicProp,\n gradient,\n showLabels,\n className\n}: DesignPillToggleProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/progress-bar.d.ts\ntype DesignProgressBarGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignProgressBarProps = {\n value: number;\n max?: number;\n gradient?: DesignProgressBarGradient;\n label?: string;\n showPercentage?: boolean;\n size?: "sm" | "md" | "lg";\n className?: string;\n};\n/**\n * Horizontal progress bar for quota / fill-level indicators. Takes a\n * `value` and optional `max` (defaults to 100 — pass raw values, the\n * component computes the percentage). Optional label + percentage display.\n *\n * ```tsx\n * <DesignProgressBar value={usedSeats} max={totalSeats} label="Seats used" showPercentage />\n * <DesignProgressBar value={75} gradient="green" />\n * ```\n */\ndeclare function DesignProgressBar({\n value,\n max,\n gradient,\n label,\n showPercentage,\n size,\n className\n}: DesignProgressBarProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/separator.d.ts\ntype DesignSeparatorProps = {\n orientation?: "horizontal" | "vertical";\n} & React.HTMLAttributes<HTMLDivElement>;\n/**\n * Thin divider line. Use `orientation="vertical"` inside a flex row to\n * separate inline groups, or omit for a horizontal rule between sections.\n *\n * ```tsx\n * <DesignSeparator />\n * <DesignSeparator orientation="vertical" className="h-6" />\n * ```\n */\ndeclare function DesignSeparator({\n orientation,\n className,\n ...props\n}: DesignSeparatorProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/skeleton.d.ts\ntype DesignSkeletonProps = React.HTMLAttributes<HTMLDivElement>;\n/**\n * Animated placeholder block. Use while data is loading — size it via\n * `className` to match the content it\'s standing in for.\n *\n * ```tsx\n * <DesignSkeleton className="h-4 w-[200px]" />\n * <DesignSkeleton className="h-24 w-full rounded-lg" />\n * ```\n *\n * Rule: always show a skeleton during initial load, not a spinner or\n * "Loading..." text. Skeletons preserve layout and feel faster.\n */\ndeclare function DesignSkeleton({\n className,\n ...props\n}: DesignSkeletonProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/table.d.ts\n/**\n * Simple static table — header + rows + cells. Use this for small,\n * read-only lists (< 20 rows, no interaction). For anything that needs\n * sorting, filtering, pagination, or virtualization, use `DataGrid` +\n * `useDataSource` instead.\n *\n * ```tsx\n * <DesignTable>\n * <DesignTableHeader>\n * <DesignTableRow>\n * <DesignTableHead>Name</DesignTableHead>\n * <DesignTableHead>Email</DesignTableHead>\n * </DesignTableRow>\n * </DesignTableHeader>\n * <DesignTableBody>\n * {rows.map(row => (\n * <DesignTableRow key={row.id}>\n * <DesignTableCell>{row.name}</DesignTableCell>\n * <DesignTableCell>{row.email}</DesignTableCell>\n * </DesignTableRow>\n * ))}\n * </DesignTableBody>\n * </DesignTable>\n * ```\n */\ndeclare const DesignTable: React.FC<React.HTMLAttributes<HTMLTableElement> & {\n ref?: React.Ref<HTMLTableElement> | undefined;\n}>;\ndeclare const DesignTableHeader: React.FC<React.HTMLAttributes<HTMLTableSectionElement> & {\n ref?: React.Ref<HTMLTableSectionElement> | undefined;\n}>;\ndeclare const DesignTableBody: React.FC<React.HTMLAttributes<HTMLTableSectionElement> & {\n ref?: React.Ref<HTMLTableSectionElement> | undefined;\n}>;\ndeclare const DesignTableRow: React.FC<React.HTMLAttributes<HTMLTableRowElement> & {\n ref?: React.Ref<HTMLTableRowElement> | undefined;\n}>;\ndeclare const DesignTableHead: React.FC<React.ThHTMLAttributes<HTMLTableCellElement> & {\n ref?: React.Ref<HTMLTableCellElement> | undefined;\n}>;\ndeclare const DesignTableCell: React.FC<React.TdHTMLAttributes<HTMLTableCellElement> & {\n ref?: React.Ref<HTMLTableCellElement> | undefined;\n}>;\n//#endregion\n\n//#region src/components/tabs.d.ts\ntype DesignTabsSize = "sm" | "md";\ntype DesignTabsGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignCategoryTabItem = {\n id: string;\n label: string;\n count?: number;\n badgeCount?: number;\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n};\ntype DesignCategoryTabsProps = Omit<React.ComponentProps<"div">, "onSelect"> & {\n categories: DesignCategoryTabItem[];\n selectedCategory: string;\n onSelect: (id: string) => void | Promise<void>;\n showBadge?: boolean;\n size?: DesignTabsSize;\n glassmorphic?: boolean;\n gradient?: DesignTabsGradient; /** Renders inside the tab bar after the tab buttons (not a tab). */\n trailing?: ReactNode;\n};\ndeclare function DesignCategoryTabs({\n categories,\n selectedCategory,\n onSelect,\n showBadge,\n size,\n glassmorphic: glassmorphicProp,\n gradient,\n trailing,\n className,\n ...props\n}: DesignCategoryTabsProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nexport * from "./components/analytics-chart";\nexport * from "./components/data-grid";';var r=e.i(160173),i=e.i(216874);async function a(e,n,r){let a=t.map(e=>e.path),o=`You are a code assistant helping to generate dashboard code for Stack Auth.
|
|
49
|
+
${t.system}`:e.system=t.system),t.tools)for(let[n,r]of Object.entries(t.tools)){let t=e.tools?.[n];if(t&&t!==r)throw Error(`You tried to define a tool with the name ${n}, but it already exists.`);e.tools||(e.tools={}),e.tools[n]=r}return t.config&&(e.config={...e.config,...t.config}),t.callSettings&&(e.callSettings={...e.callSettings,...t.callSettings}),e},{})}registerModelContextProvider(e){this._providers.add(e);let t=e.subscribe?.(()=>{this.notifySubscribers()});return this.notifySubscribers(),()=>{this._providers.delete(e),t?.(),this.notifySubscribers()}}_subscribers=new Set;notifySubscribers(){for(let e of this._subscribers)e()}subscribe(e){return this._subscribers.add(e),()=>this._subscribers.delete(e)}};let s=(e,t=21)=>(n=t)=>{let r="",i=0|n;for(;i--;)r+=e[Math.random()*e.length|0];return r};e.s(["customAlphabet",()=>s],850769);var l=s("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7),u=()=>`__optimistic__${l()}`;e.s(["generateId",()=>l,"generateOptimisticId",()=>u],579969);var d=Object.freeze({type:"running"}),c=Object.freeze({type:"complete",reason:"unknown"}),p=(e,t)=>e&&t?d:c,m=e.i(933014),h=Symbol("aui.parse-partial-json-object.meta"),f=e=>{if(0===e.length)return{[h]:{state:"partial",partialPath:[]}};try{let t=m.default.parse(e);if("object"!=typeof t||null===t)throw Error("argsText is expected to be an object");return t[h]={state:"complete",partialPath:[]},t}catch{try{let[t,n]=function(e){let t,n=["ROOT"],r=-1,i=null,a=[];function o(){void 0!==t&&(a.push(JSON.parse('"'+t+'"')),t=void 0)}function s(e,t,a){switch(e){case'"':r=t,n.pop(),n.push(a),n.push("INSIDE_STRING"),o();break;case"f":case"t":case"n":r=t,i=t,n.pop(),n.push(a),n.push("INSIDE_LITERAL");break;case"-":n.pop(),n.push(a),n.push("INSIDE_NUMBER"),o();break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":r=t,n.pop(),n.push(a),n.push("INSIDE_NUMBER"),o();break;case"{":r=t,n.pop(),n.push(a),n.push("INSIDE_OBJECT_START"),o();break;case"[":r=t,n.pop(),n.push(a),n.push("INSIDE_ARRAY_START"),o()}}function l(e,i){switch(e){case",":n.pop(),n.push("INSIDE_OBJECT_AFTER_COMMA");break;case"}":r=i,n.pop(),t=a.pop()}}function u(e,i){switch(e){case",":n.pop(),n.push("INSIDE_ARRAY_AFTER_COMMA"),t=(Number(t)+1).toString();break;case"]":r=i,n.pop(),t=a.pop()}}for(let o=0;o<e.length;o++){let d=e[o];switch(n[n.length-1]){case"ROOT":s(d,o,"FINISH");break;case"INSIDE_OBJECT_START":switch(d){case'"':n.pop(),n.push("INSIDE_OBJECT_KEY"),t="";break;case"}":r=o,n.pop(),t=a.pop()}break;case"INSIDE_OBJECT_AFTER_COMMA":'"'===d&&(n.pop(),n.push("INSIDE_OBJECT_KEY"),t="");break;case"INSIDE_OBJECT_KEY":switch(d){case'"':n.pop(),n.push("INSIDE_OBJECT_AFTER_KEY");break;case"\\":n.push("INSIDE_STRING_ESCAPE"),t+=d;break;default:t+=d}break;case"INSIDE_OBJECT_AFTER_KEY":":"===d&&(n.pop(),n.push("INSIDE_OBJECT_BEFORE_VALUE"));break;case"INSIDE_OBJECT_BEFORE_VALUE":s(d,o,"INSIDE_OBJECT_AFTER_VALUE");break;case"INSIDE_OBJECT_AFTER_VALUE":l(d,o);break;case"INSIDE_STRING":switch(d){case'"':n.pop(),r=o,t=a.pop();break;case"\\":n.push("INSIDE_STRING_ESCAPE");break;default:r=o}break;case"INSIDE_ARRAY_START":"]"===d?(r=o,n.pop(),t=a.pop()):(r=o,t="0",s(d,o,"INSIDE_ARRAY_AFTER_VALUE"));break;case"INSIDE_ARRAY_AFTER_VALUE":switch(d){case",":n.pop(),n.push("INSIDE_ARRAY_AFTER_COMMA"),t=(Number(t)+1).toString();break;case"]":r=o,n.pop(),t=a.pop();break;default:r=o}break;case"INSIDE_ARRAY_AFTER_COMMA":s(d,o,"INSIDE_ARRAY_AFTER_VALUE");break;case"INSIDE_STRING_ESCAPE":n.pop(),"INSIDE_STRING"===n[n.length-1]?r=o:"INSIDE_OBJECT_KEY"===n[n.length-1]&&(t+=d);break;case"INSIDE_NUMBER":switch(d){case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":r=o;break;case"e":case"E":case"-":case".":break;case",":n.pop(),t=a.pop(),"INSIDE_ARRAY_AFTER_VALUE"===n[n.length-1]&&u(d,o),"INSIDE_OBJECT_AFTER_VALUE"===n[n.length-1]&&l(d,o);break;case"}":n.pop(),t=a.pop(),"INSIDE_OBJECT_AFTER_VALUE"===n[n.length-1]&&l(d,o);break;case"]":n.pop(),t=a.pop(),"INSIDE_ARRAY_AFTER_VALUE"===n[n.length-1]&&u(d,o);break;default:n.pop(),t=a.pop()}break;case"INSIDE_LITERAL":{let t=e.substring(i,o+1);"false".startsWith(t)||"true".startsWith(t)||"null".startsWith(t)?r=o:(n.pop(),"INSIDE_OBJECT_AFTER_VALUE"===n[n.length-1]?l(d,o):"INSIDE_ARRAY_AFTER_VALUE"===n[n.length-1]&&u(d,o))}}}let d=e.slice(0,r+1);for(let t=n.length-1;t>=0;t--)switch(n[t]){case"INSIDE_STRING":d+='"';break;case"INSIDE_OBJECT_KEY":case"INSIDE_OBJECT_AFTER_KEY":case"INSIDE_OBJECT_AFTER_COMMA":case"INSIDE_OBJECT_START":case"INSIDE_OBJECT_BEFORE_VALUE":case"INSIDE_OBJECT_AFTER_VALUE":d+="}";break;case"INSIDE_ARRAY_START":case"INSIDE_ARRAY_AFTER_COMMA":case"INSIDE_ARRAY_AFTER_VALUE":d+="]";break;case"INSIDE_LITERAL":{let t=e.substring(i,e.length);"true".startsWith(t)?d+="true".slice(t.length):"false".startsWith(t)?d+="false".slice(t.length):"null".startsWith(t)&&(d+="null".slice(t.length))}}return[d,a]}(e),r=m.default.parse(t);if("object"!=typeof r||null===r)throw Error("argsText is expected to be an object");return r[h]={state:"partial",partialPath:n},r}catch{return}}};e.s(["parsePartialJsonObject",()=>f],938178);var g=(e,t,n)=>{let{role:r,id:i,createdAt:a,attachments:o,status:s,metadata:u}=e,d={id:i??t,createdAt:a??new Date},c="string"==typeof e.content?[{type:"text",text:e.content}]:e.content;if("user"!==r&&o?.length)throw Error("attachments are only supported for user messages");if("assistant"!==r&&s)throw Error("status is only supported for assistant messages");if("assistant"!==r&&u?.steps)throw Error("metadata.steps is only supported for assistant messages");switch(r){case"assistant":return{...d,role:r,content:c.map(e=>{let t=e.type;switch(t){case"text":case"reasoning":if(0===e.text.trim().length)return null;return e;case"file":case"source":return e;case"tool-call":if(e.args)return{...e,toolCallId:e.toolCallId??"tool-"+l(),args:e.args,argsText:JSON.stringify(e.args)};return{...e,toolCallId:e.toolCallId??"tool-"+l(),args:e.args??f(e.argsText??"")??{},argsText:e.argsText??""};default:throw Error(`Unsupported assistant content part type: ${t}`)}}).filter(e=>!!e),status:s??n,metadata:{unstable_state:u?.unstable_state??null,unstable_annotations:u?.unstable_annotations??[],unstable_data:u?.unstable_data??[],custom:u?.custom??{},steps:u?.steps??[]}};case"user":return{...d,role:r,content:c.map(e=>{let t=e.type;switch(t){case"text":case"image":case"audio":case"file":return e;default:throw Error(`Unsupported user content part type: ${t}`)}}),attachments:o??[],metadata:{custom:u?.custom??{}}};case"system":if(1!==c.length||"text"!==c[0].type)throw Error("System messages must have exactly one text content part.");return{...d,role:r,content:c,metadata:{custom:u?.custom??{}}};default:throw Error(`Unknown message role: ${r}`)}};e.s(["fromThreadMessageLike",()=>g],94693);var y={fromArray:e=>{let t=e.map(e=>g(e,l(),p(!1,!1)));return{messages:t.map((e,n)=>({parentId:n>0?t[n-1].id:null,message:e}))}}},v=e=>e.next?v(e.next):"current"in e?e:null,b=class{constructor(e){this.func=e}_value=null;get value(){return null===this._value&&(this._value=this.func()),this._value}dirty(){this._value=null}},x=class{messages=new Map;head=null;root={children:[],next:null};performOp(e,t,n){let r=t.prev??this.root,i=e??this.root;if("relink"!==n||r!==i){if("link"!==n&&(r.children=r.children.filter(e=>e!==t.current.id),r.next===t)){let e=r.children.at(-1),t=e?this.messages.get(e):null;if(void 0===t)throw Error("MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui.");r.next=t}if("cut"!==n){for(let n=e;n;n=n.prev)if(n.current.id===t.current.id)throw Error("MessageRepository(performOp/link): A message with the same id already exists in the parent tree. This error occurs if the same message id is found multiple times. This is likely an internal bug in assistant-ui.");i.children=[...i.children,t.current.id],(v(t)===this.head||null===i.next)&&(i.next=t),t.prev=e}}}_messages=new b(()=>{let e=Array(this.head?.level??0);for(let t=this.head;t;t=t.prev)e[t.level]=t.current;return e});get headId(){return this.head?.current.id??null}getMessages(){return this._messages.value}addOrUpdateMessage(e,t){let n=this.messages.get(t.id),r=e?this.messages.get(e):null;if(void 0===r)throw Error("MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui.");if(n){n.current=t,this.performOp(r,n,"relink"),this._messages.dirty();return}let i={prev:r,current:t,next:null,children:[],level:r?r.level+1:0};this.messages.set(t.id,i),this.performOp(r,i,"link"),this.head===r&&(this.head=i),this._messages.dirty()}getMessage(e){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui.");return{parentId:t.prev?.current.id??null,message:t.current}}appendOptimisticMessage(e,t){let n;do n=u();while(this.messages.has(n))return this.addOrUpdateMessage(e,g(t,n,{type:"running"})),n}deleteMessage(e,t){let n=this.messages.get(e);if(!n)throw Error("MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui.");let r=void 0===t?n.prev:null===t?null:this.messages.get(t);if(void 0===r)throw Error("MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui.");for(let e of n.children){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui.");this.performOp(r,t,"relink")}this.performOp(null,n,"cut"),this.messages.delete(e),this.head===n&&(this.head=v(r??this.root)),this._messages.dirty()}getBranches(e){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui.");let{children:n}=t.prev??this.root;return n}switchToBranch(e){let t=this.messages.get(e);if(!t)throw Error("MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui.");(t.prev??this.root).next=t,this.head=v(t),this._messages.dirty()}resetHead(e){if(null===e){this.head=null,this._messages.dirty();return}let t=this.messages.get(e);if(!t)throw Error("MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui.");this.head=t;for(let e=t;e;e=e.prev)e.prev&&(e.prev.next=e);this._messages.dirty()}clear(){this.messages.clear(),this.head=null,this.root={children:[],next:null},this._messages.dirty()}export(){let e=[];for(let[,t]of this.messages)e.push({message:t.current,parentId:t.prev?.current.id??null});return{headId:this.head?.current.id??null,messages:e}}import({headId:e,messages:t}){for(let{message:e,parentId:n}of t)this.addOrUpdateMessage(n,e);this.resetHead(e??t.at(-1)?.message.id??null)}};e.s(["ExportedMessageRepository",()=>y,"MessageRepository",()=>x],174700);var _=class{_contextProvider=new o;registerModelContextProvider(e){return this._contextProvider.registerModelContextProvider(e)}};e.s(["BaseAssistantRuntimeCore",()=>_],494093);var k=class{_subscriptions=new Set;_connection;get isConnected(){return!!this._connection}notifySubscribers(){for(let e of this._subscriptions)e()}_updateConnection(){this._subscriptions.size>0?this._connection||(this._connection=this._connect()):(this._connection?.(),this._connection=void 0)}subscribe(e){return this._subscriptions.add(e),this._updateConnection(),()=>{this._subscriptions.delete(e),this._updateConnection()}}},w=Symbol("skip-update"),S=class extends k{constructor(e){super(),this.binding=e}get path(){return this.binding.path}_previousStateDirty=!0;_previousState;getState=()=>{if(!this.isConnected||this._previousStateDirty){let e=this.binding.getState();e!==w&&(this._previousState=e),this._previousStateDirty=!1}if(void 0===this._previousState)throw Error("Entry not available in the store");return this._previousState};_connect(){let e=()=>{this._previousStateDirty=!0,this.notifySubscribers()};return this.binding.subscribe(e)}},I=class{constructor(e,t){this._core=e,this._threadListBinding=t}get path(){return this._core.path}__internal_bindMethods(){this.switchTo=this.switchTo.bind(this),this.rename=this.rename.bind(this),this.archive=this.archive.bind(this),this.unarchive=this.unarchive.bind(this),this.delete=this.delete.bind(this),this.initialize=this.initialize.bind(this),this.generateTitle=this.generateTitle.bind(this),this.subscribe=this.subscribe.bind(this),this.unstable_on=this.unstable_on.bind(this),this.getState=this.getState.bind(this),this.detach=this.detach.bind(this)}getState(){return this._core.getState()}switchTo(){let e=this._core.getState();return this._threadListBinding.switchToThread(e.id)}rename(e){let t=this._core.getState();return this._threadListBinding.rename(t.id,e)}archive(){let e=this._core.getState();return this._threadListBinding.archive(e.id)}unarchive(){let e=this._core.getState();return this._threadListBinding.unarchive(e.id)}delete(){let e=this._core.getState();return this._threadListBinding.delete(e.id)}initialize(){let e=this._core.getState();return this._threadListBinding.initialize(e.id)}generateTitle(){let e=this._core.getState();return this._threadListBinding.generateTitle(e.id)}unstable_on(e,t){let n=this._core.getState().isMain;return this.subscribe(()=>{let r=this._core.getState().isMain;n===r||(n=r,"switched-to"===e&&!r||"switched-away"===e&&r||t())})}subscribe(e){return this._core.subscribe(e)}detach(){let e=this._core.getState();this._threadListBinding.detach(e.id)}},T=class extends k{constructor(e){super(),this.binding=e;const t=e.getState();if(t===w)throw Error("Entry not available in the store");this._previousState=t}get path(){return this.binding.path}_previousState;getState=()=>(this.isConnected||this._syncState(),this._previousState);_syncState(){let e=this.binding.getState();return!(e===w||function(e,t){if(void 0===e&&void 0===t)return!0;if(void 0===e||void 0===t)return!1;for(let n of Object.keys(e))if(!Object.is(e[n],t[n]))return!1;return!0}(e,this._previousState))&&(this._previousState=e,!0)}_connect(){let e=()=>{this._syncState()&&this.notifySubscribers()};return this.binding.subscribe(e)}},C=Symbol("innerMessage");Symbol("innerMessages");var A=e=>e.content.filter(e=>"text"===e.type).map(e=>e.text).join("\n\n");e.s(["getThreadMessageText",()=>A],883846);var P=class{constructor(e){this._core=e}get path(){return this._core.path}__internal_bindMethods(){this.getState=this.getState.bind(this),this.remove=this.remove.bind(this),this.subscribe=this.subscribe.bind(this)}getState(){return this._core.getState()}subscribe(e){return this._core.subscribe(e)}},E=class extends P{constructor(e,t){super(e),this._composerApi=t}remove(){let e=this._composerApi.getState();if(!e)throw Error("Composer is not available");return e.removeAttachment(this.getState().id)}},$=class extends E{get source(){return"thread-composer"}},O=class extends E{get source(){return"edit-composer"}},R=class extends P{get source(){return"message"}constructor(e){super(e)}remove(){throw Error("Message attachments cannot be removed")}},D=class extends k{constructor(e){super(),this.config=e}getState(){return this.config.binding.getState()}outerSubscribe(e){return this.config.binding.subscribe(e)}_connect(){let e=()=>{this.notifySubscribers()},t=this.config.binding.getState(),n=t?.unstable_on(this.config.event,e),r=()=>{let r=this.config.binding.getState();r!==t&&(t=r,n?.(),n=this.config.binding.getState()?.unstable_on(this.config.event,e))},i=this.outerSubscribe(r);return()=>{i?.(),n?.()}}},j=Object.freeze([]),U=Object.freeze({}),N=class{constructor(e){this._core=e}get path(){return this._core.path}__internal_bindMethods(){this.setText=this.setText.bind(this),this.setRunConfig=this.setRunConfig.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this),this.addAttachment=this.addAttachment.bind(this),this.reset=this.reset.bind(this),this.clearAttachments=this.clearAttachments.bind(this),this.send=this.send.bind(this),this.cancel=this.cancel.bind(this),this.setRole=this.setRole.bind(this),this.getAttachmentAccept=this.getAttachmentAccept.bind(this),this.getAttachmentByIndex=this.getAttachmentByIndex.bind(this),this.unstable_on=this.unstable_on.bind(this)}setText(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");t.setText(e)}setRunConfig(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");t.setRunConfig(e)}addAttachment(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");return t.addAttachment(e)}reset(){let e=this._core.getState();if(!e)throw Error("Composer is not available");return e.reset()}clearAttachments(){let e=this._core.getState();if(!e)throw Error("Composer is not available");return e.clearAttachments()}send(){let e=this._core.getState();if(!e)throw Error("Composer is not available");e.send()}cancel(){let e=this._core.getState();if(!e)throw Error("Composer is not available");e.cancel()}setRole(e){let t=this._core.getState();if(!t)throw Error("Composer is not available");t.setRole(e)}subscribe(e){return this._core.subscribe(e)}_eventSubscriptionSubjects=new Map;unstable_on(e,t){let n=this._eventSubscriptionSubjects.get(e);return n||(n=new D({event:e,binding:this._core}),this._eventSubscriptionSubjects.set(e,n)),n.subscribe(t)}getAttachmentAccept(){let e=this._core.getState();if(!e)throw Error("Composer is not available");return e.getAttachmentAccept()}},M=class extends N{get path(){return this._core.path}get type(){return"thread"}_getState;constructor(e){const t=new S({path:e.path,getState:()=>{let t;return t=e.getState(),Object.freeze({type:"thread",isEditing:t?.isEditing??!1,canCancel:t?.canCancel??!1,isEmpty:t?.isEmpty??!0,attachments:t?.attachments??j,text:t?.text??"",role:t?.role??"user",runConfig:t?.runConfig??U,value:t?.text??""})},subscribe:t=>e.subscribe(t)});super({path:e.path,getState:()=>e.getState(),subscribe:e=>t.subscribe(e)}),this._getState=t.getState.bind(t)}getState(){return this._getState()}getAttachmentByIndex(e){return new $(new T({path:{...this.path,attachmentSource:"thread-composer",attachmentSelector:{type:"index",index:e},ref:this.path.ref+`${this.path.ref}.attachments[${e}]`},getState:()=>{let t=this.getState().attachments[e];return t?{...t,source:"thread-composer"}:w},subscribe:e=>this._core.subscribe(e)}),this._core)}},z=class extends N{constructor(e,t){const n=new S({path:e.path,getState:()=>{let t;return t=e.getState(),Object.freeze({type:"edit",isEditing:t?.isEditing??!1,canCancel:t?.canCancel??!1,isEmpty:t?.isEmpty??!0,text:t?.text??"",role:t?.role??"user",attachments:t?.attachments??j,runConfig:t?.runConfig??U,value:t?.text??""})},subscribe:t=>e.subscribe(t)});super({path:e.path,getState:()=>e.getState(),subscribe:e=>n.subscribe(e)}),this._beginEdit=t,this._getState=n.getState.bind(n)}get path(){return this._core.path}get type(){return"edit"}_getState;__internal_bindMethods(){super.__internal_bindMethods(),this.beginEdit=this.beginEdit.bind(this)}getState(){return this._getState()}beginEdit(){this._beginEdit()}getAttachmentByIndex(e){return new O(new T({path:{...this.path,attachmentSource:"edit-composer",attachmentSelector:{type:"index",index:e},ref:this.path.ref+`${this.path.ref}.attachments[${e}]`},getState:()=>{let t=this.getState().attachments[e];return t?{...t,source:"edit-composer"}:w},subscribe:e=>this._core.subscribe(e)}),this._core)}},L=Symbol.for("aui.tool-response"),F=class e{get[L](){return!0}artifact;result;isError;constructor(e){void 0!==e.artifact&&(this.artifact=e.artifact),this.result=e.result,this.isError=e.isError??!1}static[Symbol.hasInstance](e){return"object"==typeof e&&null!==e&&L in e}static toResponse(t){return t instanceof e?t:new e({result:void 0===t?"<no result>":t})}},Z=class{constructor(e,t,n){this.contentBinding=e,this.messageApi=t,this.threadApi=n}get path(){return this.contentBinding.path}__internal_bindMethods(){this.addToolResult=this.addToolResult.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this)}getState(){return this.contentBinding.getState()}addToolResult(e){let t=this.contentBinding.getState();if(!t)throw Error("Content part is not available");if("tool-call"!==t.type)throw Error("Tried to add tool result to non-tool content part");if(!this.messageApi)throw Error("Message API is not available. This is likely a bug in assistant-ui.");if(!this.threadApi)throw Error("Thread API is not available");let n=this.messageApi.getState();if(!n)throw Error("Message is not available");let r=t.toolName,i=t.toolCallId,a=F.toResponse(e);this.threadApi.getState().addToolResult({messageId:n.id,toolName:r,toolCallId:i,result:a.result,artifact:a.artifact,isError:a.isError})}subscribe(e){return this.contentBinding.subscribe(e)}};e.s(["ContentPartRuntimeImpl",()=>Z],744660);var B=class extends k{constructor(e){super(),this.binding=e}get path(){return this.binding.path}getState(){return this.binding.getState()}outerSubscribe(e){return this.binding.subscribe(e)}_connect(){let e=()=>{this.notifySubscribers()},t=this.binding.getState(),n=t?.subscribe(e),r=()=>{let r=this.binding.getState();r!==t&&(t=r,n?.(),n=this.binding.getState()?.subscribe(e),e())},i=this.outerSubscribe(r);return()=>{i?.(),n?.()}}},H=Object.freeze({type:"complete"}),K=(e,t)=>{let n=e.content[t];if(!n)return w;let r=((e,t,n)=>{if("assistant"!==e.role)return H;if("tool-call"===n.type)if(!n.result)return e.status;else return H;let r=t===Math.max(0,e.content.length-1);return"requires-action"===e.status.type?H:r?e.status:H})(e,t,n);return Object.freeze({...n,...{[C]:n[C]},status:r})},V=class{constructor(e,t){this._core=e,this._threadBinding=t,this.composer=new z(new B({path:{...this.path,ref:this.path.ref+`${this.path.ref}.composer`,composerSource:"edit"},getState:this._getEditComposerRuntimeCore,subscribe:e=>this._threadBinding.subscribe(e)}),()=>this._threadBinding.getState().beginEdit(this._core.getState().id))}get path(){return this._core.path}__internal_bindMethods(){this.reload=this.reload.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this),this.getContentPartByIndex=this.getContentPartByIndex.bind(this),this.getContentPartByToolCallId=this.getContentPartByToolCallId.bind(this),this.getAttachmentByIndex=this.getAttachmentByIndex.bind(this),this.unstable_getCopyText=this.unstable_getCopyText.bind(this),this.speak=this.speak.bind(this),this.stopSpeaking=this.stopSpeaking.bind(this),this.submitFeedback=this.submitFeedback.bind(this),this.switchToBranch=this.switchToBranch.bind(this)}composer;_getEditComposerRuntimeCore=()=>this._threadBinding.getState().getEditComposer(this._core.getState().id);getState(){return this._core.getState()}reload(e={}){let t=this._getEditComposerRuntimeCore(),n=t??this._threadBinding.getState().composer,{runConfig:r=(t??n).runConfig}=e,i=this._core.getState();if("assistant"!==i.role)throw Error("Can only reload assistant messages");this._threadBinding.getState().startRun({parentId:i.parentId,sourceId:i.id,runConfig:r})}speak(){let e=this._core.getState();return this._threadBinding.getState().speak(e.id)}stopSpeaking(){let e=this._core.getState(),t=this._threadBinding.getState();if(t.speech?.messageId===e.id)this._threadBinding.getState().stopSpeaking();else throw Error("Message is not being spoken")}submitFeedback({type:e}){let t=this._core.getState();this._threadBinding.getState().submitFeedback({messageId:t.id,type:e})}switchToBranch({position:e,branchId:t}){let n=this._core.getState();if(t&&e)throw Error("May not specify both branchId and position");if(!t&&!e)throw Error("Must specify either branchId or position");let r=this._threadBinding.getState().getBranches(n.id),i=t;if("previous"===e?i=r[n.branchNumber-2]:"next"===e&&(i=r[n.branchNumber]),!i)throw Error("Branch not found");this._threadBinding.getState().switchToBranch(i)}unstable_getCopyText(){return A(this.getState())}subscribe(e){return this._core.subscribe(e)}getContentPartByIndex(e){if(e<0)throw Error("Content part index must be >= 0");return new Z(new T({path:{...this.path,ref:this.path.ref+`${this.path.ref}.content[${e}]`,contentPartSelector:{type:"index",index:e}},getState:()=>K(this.getState(),e),subscribe:e=>this._core.subscribe(e)}),this._core,this._threadBinding)}getContentPartByToolCallId(e){return new Z(new T({path:{...this.path,ref:this.path.ref+`${this.path.ref}.content[toolCallId=${JSON.stringify(e)}]`,contentPartSelector:{type:"toolCallId",toolCallId:e}},getState:()=>{let t=this._core.getState(),n=t.content.findIndex(t=>"tool-call"===t.type&&t.toolCallId===e);return -1===n?w:K(t,n)},subscribe:e=>this._core.subscribe(e)}),this._core,this._threadBinding)}getAttachmentByIndex(e){return new R(new T({path:{...this.path,ref:this.path.ref+`${this.path.ref}.attachments[${e}]`,attachmentSource:"message",attachmentSelector:{type:"index",index:e}},getState:()=>{let t=this.getState().attachments,n=t?.[e];return n?{...n,source:"message"}:w},subscribe:e=>this._core.subscribe(e)}))}},G=class{get path(){return this._threadBinding.path}get __internal_threadBinding(){return this._threadBinding}_threadBinding;constructor(e,t){const n=new T({path:e.path,getState:()=>{var n,r;let i;return n=e.getState(),r=t.getState(),i=n.messages.at(-1),Object.freeze({threadId:r.id,metadata:r,capabilities:n.capabilities,isDisabled:n.isDisabled,isRunning:i?.role==="assistant"&&"running"===i.status.type,messages:n.messages,state:n.state,suggestions:n.suggestions,extras:n.extras,speech:n.speech})},subscribe:n=>{let r=e.subscribe(n),i=t.subscribe(n);return()=>{r(),i()}}});this._threadBinding={path:e.path,getState:()=>e.getState(),getStateState:()=>n.getState(),outerSubscribe:t=>e.outerSubscribe(t),subscribe:t=>e.subscribe(t)},this.composer=new M(new B({path:{...this.path,ref:this.path.ref+`${this.path.ref}.composer`,composerSource:"thread"},getState:()=>this._threadBinding.getState().composer,subscribe:e=>this._threadBinding.subscribe(e)}))}__internal_bindMethods(){this.append=this.append.bind(this),this.unstable_resumeRun=this.unstable_resumeRun.bind(this),this.startRun=this.startRun.bind(this),this.cancelRun=this.cancelRun.bind(this),this.stopSpeaking=this.stopSpeaking.bind(this),this.export=this.export.bind(this),this.import=this.import.bind(this),this.getMesssageByIndex=this.getMesssageByIndex.bind(this),this.getMesssageById=this.getMesssageById.bind(this),this.subscribe=this.subscribe.bind(this),this.unstable_on=this.unstable_on.bind(this),this.getModelContext=this.getModelContext.bind(this),this.getModelConfig=this.getModelConfig.bind(this),this.getState=this.getState.bind(this)}composer;getState(){return this._threadBinding.getStateState()}append(e){var t;this._threadBinding.getState().append((t=this._threadBinding.getState().messages,"string"==typeof e?{createdAt:new Date,parentId:t.at(-1)?.id??null,sourceId:null,runConfig:{},role:"user",content:[{type:"text",text:e}],attachments:[],metadata:{custom:{}}}:{createdAt:e.createdAt??new Date,parentId:e.parentId??t.at(-1)?.id??null,sourceId:e.sourceId??null,role:e.role??"user",content:e.content,attachments:e.attachments??[],metadata:e.metadata??{custom:{}},runConfig:e.runConfig??{},startRun:e.startRun}))}subscribe(e){return this._threadBinding.subscribe(e)}getModelContext(){return this._threadBinding.getState().getModelContext()}getModelConfig(){return this.getModelContext()}startRun(e){let t;return this._threadBinding.getState().startRun({parentId:(t=null===e||"string"==typeof e?{parentId:e}:e).parentId??null,sourceId:t.sourceId??null,runConfig:t.runConfig??{}})}unstable_resumeRun(e){return this._threadBinding.getState().resumeRun({parentId:e.parentId??null,sourceId:e.sourceId??null,runConfig:e.runConfig??{},stream:e.stream})}cancelRun(){this._threadBinding.getState().cancelRun()}stopSpeaking(){return this._threadBinding.getState().stopSpeaking()}export(){return this._threadBinding.getState().export()}import(e){this._threadBinding.getState().import(e)}getMesssageByIndex(e){if(e<0)throw Error("Message index must be >= 0");return this._getMessageRuntime({...this.path,ref:this.path.ref+`${this.path.ref}.messages[${e}]`,messageSelector:{type:"index",index:e}},()=>{let t=this._threadBinding.getState().messages,n=t[e];if(n)return{message:n,parentId:t[e-1]?.id??null}})}getMesssageById(e){return this._getMessageRuntime({...this.path,ref:this.path.ref+`${this.path.ref}.messages[messageId=${JSON.stringify(e)}]`,messageSelector:{type:"messageId",messageId:e}},()=>this._threadBinding.getState().getMessageById(e))}_getMessageRuntime(e,t){return new V(new T({path:e,getState:()=>{let{message:e,parentId:n}=t()??{},{messages:r,speech:i}=this._threadBinding.getState();if(!e||void 0===n)return w;let a=this._threadBinding.getState(),o=a.getBranches(e.id),s=a.getSubmittedFeedback(e.id);return{...e,...{[C]:e[C]},isLast:r.at(-1)?.id===e.id,parentId:n,branchNumber:o.indexOf(e.id)+1,branchCount:o.length,speech:i?.messageId===e.id?i:void 0,submittedFeedback:s}},subscribe:e=>this._threadBinding.subscribe(e)}),this._threadBinding)}_eventSubscriptionSubjects=new Map;unstable_on(e,t){let n=this._eventSubscriptionSubjects.get(e);return n||(n=new D({event:e,binding:this._threadBinding}),this._eventSubscriptionSubjects.set(e,n)),n.subscribe(t)}},q=(e,t)=>{if(void 0===t)return w;let n=e.getItemById(t);return n?{id:n.threadId,threadId:n.threadId,remoteId:n.remoteId,externalId:n.externalId,title:n.title,status:n.status,isMain:n.threadId===e.mainThreadId}:w},J=class{constructor(e,t=G){this._core=e,this._runtimeFactory=t;const n=new S({path:{},getState:()=>({mainThreadId:e.mainThreadId,newThread:e.newThreadId,threads:e.threadIds,archivedThreads:e.archivedThreadIds}),subscribe:t=>e.subscribe(t)});this._getState=n.getState.bind(n),this._mainThreadListItemRuntime=new I(new T({path:{ref:"threadItems[main]",threadSelector:{type:"main"}},getState:()=>q(this._core,this._core.mainThreadId),subscribe:e=>this._core.subscribe(e)}),this._core),this.main=new t(new B({path:{ref:"threads.main",threadSelector:{type:"main"}},getState:()=>e.getMainThreadRuntimeCore(),subscribe:t=>e.subscribe(t)}),this._mainThreadListItemRuntime)}_getState;__internal_bindMethods(){this.switchToThread=this.switchToThread.bind(this),this.switchToNewThread=this.switchToNewThread.bind(this),this.getState=this.getState.bind(this),this.subscribe=this.subscribe.bind(this),this.getById=this.getById.bind(this),this.getItemById=this.getItemById.bind(this),this.getItemByIndex=this.getItemByIndex.bind(this),this.getArchivedItemByIndex=this.getArchivedItemByIndex.bind(this)}switchToThread(e){return this._core.switchToThread(e)}switchToNewThread(){return this._core.switchToNewThread()}getState(){return this._getState()}subscribe(e){return this._core.subscribe(e)}_mainThreadListItemRuntime;main;get mainItem(){return this._mainThreadListItemRuntime}getById(e){return new this._runtimeFactory(new B({path:{ref:"threads[threadId="+JSON.stringify(e)+"]",threadSelector:{type:"threadId",threadId:e}},getState:()=>this._core.getThreadRuntimeCore(e),subscribe:e=>this._core.subscribe(e)}),this.mainItem)}getItemByIndex(e){return new I(new T({path:{ref:`threadItems[${e}]`,threadSelector:{type:"index",index:e}},getState:()=>q(this._core,this._core.threadIds[e]),subscribe:e=>this._core.subscribe(e)}),this._core)}getArchivedItemByIndex(e){return new I(new T({path:{ref:`archivedThreadItems[${e}]`,threadSelector:{type:"archiveIndex",index:e}},getState:()=>q(this._core,this._core.archivedThreadIds[e]),subscribe:e=>this._core.subscribe(e)}),this._core)}getItemById(e){return new I(new T({path:{ref:`threadItems[threadId=${e}]`,threadSelector:{type:"threadId",threadId:e}},getState:()=>q(this._core,e),subscribe:e=>this._core.subscribe(e)}),this._core)}},W=class{constructor(e){this._core=e,this.threads=new J(e.threads),this._thread=this.threads.main}threads;get threadList(){return this.threads}_thread;__internal_bindMethods(){this.switchToNewThread=this.switchToNewThread.bind(this),this.switchToThread=this.switchToThread.bind(this),this.registerModelContextProvider=this.registerModelContextProvider.bind(this),this.registerModelConfigProvider=this.registerModelConfigProvider.bind(this),this.reset=this.reset.bind(this)}get thread(){return this._thread}switchToNewThread(){return this._core.threads.switchToNewThread()}switchToThread(e){return this._core.threads.switchToThread(e)}registerModelContextProvider(e){return this._core.registerModelContextProvider(e)}registerModelConfigProvider(e){return this.registerModelContextProvider(e)}reset({initialMessages:e}={}){return this._core.threads.getMainThreadRuntimeCore().import(y.fromArray(e??[]))}};e.s(["AssistantRuntimeImpl",()=>W],873908);var Y=e=>{let{cloud:t,initialMessages:n,maxSteps:r,adapters:i,unstable_humanToolNames:a,...o}=e;return{localRuntimeOptions:{cloud:t,initialMessages:n,maxSteps:r,adapters:i,unstable_humanToolNames:a},otherOptions:o}};e.s([],730286),e.i(730286);var X=e.i(94283);function Q(e,t){return function(n){let r=(0,X.useContext)(e);if(!n?.optional&&!r)throw Error(`This component must be used within ${t}.`);return r}}function ee(e,t){function n(n){let r=e(n);return r?r[t]:null}return{[t]:function(e){let t,r=!1;"function"==typeof e?t=e:e&&"object"==typeof e&&(r=!!e.optional,t=e.selector);let i=n({optional:r});return i?t?i(t):i():null},[`${t}Store`]:n}}e.s(["createContextHook",()=>Q],887688),e.s(["createContextStoreHook",()=>ee],2262);var et=e=>{e.__isBound||(e.__internal_bindMethods?.(),e.__isBound=!0)};e.s(["ensureBinding",()=>et],240461);function en(e){return function(t){let n,r=!1;"function"==typeof t?n=t:t&&(r=!!t.optional,n=t.selector);let i=e({optional:r});return i?function(e,t=e=>e){et(e);let n=(0,X.useSyncExternalStore)(e.subscribe,()=>t(e.getState()),()=>t(e.getState()));return(0,X.useDebugValue)(n),n}(i,n):null}}e.s(["createStateHookForRuntime",()=>en],419740);var er=(0,X.createContext)(null),ei=Q(er,"a component passed to <ThreadPrimitive.Messages components={...} />");function ea(e){let t=ei(e);return t?t.useMessageRuntime():null}var eo=en(ea),es=en(e=>ea(e)?.composer??null),{useMessageUtils:el,useMessageUtilsStore:eu}=ee(ei,"useMessageUtils");e.s(["MessageContext",()=>er,"useEditComposer",()=>es,"useMessage",()=>eo,"useMessageRuntime",()=>ea,"useMessageUtils",()=>el,"useMessageUtilsStore",()=>eu],809825);var ed=e.i(614323);let ec=e=>{let t,n=new Set,r=(e,r)=>{let i="function"==typeof e?e(t):e;if(!Object.is(i,t)){let e=t;t=(null!=r?r:"object"!=typeof i||null===i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},ep=e=>{let t=e?ec(e):ec,n=e=>(function(e,t=e=>e){let n=X.default.useSyncExternalStore(e.subscribe,()=>t(e.getState()),()=>t(e.getInitialState()));return X.default.useDebugValue(n),n})(t,e);return Object.assign(n,t),n},em=e=>e?ep(e):ep;e.s(["create",()=>em],520629);var eh=(0,X.createContext)(null),ef=Q(eh,"a component passed to <MessagePrimitive.Content components={...}>");function eg(e){let t=ef(e);return t?t.useContentPartRuntime():null}var ey=en(eg);e.s(["ContentPartContext",()=>eh,"useContentPart",()=>ey,"useContentPartRuntime",()=>eg],318066);var ev=(0,X.createContext)(null),eb=({children:e})=>{let n=e_({optional:!0}),r=eg(),[i]=(0,X.useState)(()=>{var e;return e=r.getState().status,{useSmoothStatus:em(()=>e)}});return n?e:(0,t.jsx)(ev.Provider,{value:i,children:e})},ex=e=>{let n=(0,X.forwardRef)((n,r)=>(0,t.jsx)(eb,{children:(0,t.jsx)(e,{...n,ref:r})}));return n.displayName=e.displayName,n};function e_(e){let t=(0,X.useContext)(ev);if(!e?.optional&&!t)throw Error("This component must be used within a SmoothContextProvider.");return t}var{useSmoothStatus:ek,useSmoothStatusStore:ew}=ee(e_,"useSmoothStatus"),eS=e=>e;e.s(["writableStore",()=>eS],618178);var eI=class{constructor(e,t){this.currentText=e,this.setText=t}animationFrameId=null;lastUpdateTime=Date.now();targetText="";start(){null===this.animationFrameId&&(this.lastUpdateTime=Date.now(),this.animate())}stop(){null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}animate=()=>{let e=Date.now(),t=e-this.lastUpdateTime,n=this.targetText.length-this.currentText.length,r=Math.min(5,250/n),i=0;for(;t>=r&&i<n;)i++,t-=r;i!==n?this.animationFrameId=requestAnimationFrame(this.animate):this.animationFrameId=null,0!==i&&(this.currentText=this.targetText.slice(0,this.currentText.length+i),this.lastUpdateTime=e-t,this.setText(this.currentText))}},eT=Object.freeze({type:"running"}),eC=(e,t=!1)=>{let{text:n}=e,r=eo({optional:!0,selector:e=>e.id}),i=(0,X.useRef)(r),[a,o]=(0,X.useState)(n),s=ew({optional:!0}),l=(0,ed.useCallbackRef)(t=>{if(o(t),s){let n=a!==t||"running"===e.status.type?eT:e.status;eS(s).setState(n,!0)}});(0,X.useEffect)(()=>{if(s){let t=a!==n||"running"===e.status.type?eT:e.status;eS(s).setState(t,!0)}},[s,n,a,e.status]);let[u]=(0,X.useState)(new eI(n,l));return(0,X.useEffect)(()=>{if(!t)return void u.stop();if(i.current!==r||!n.startsWith(u.targetText)){i.current=r,l(n),u.currentText=n,u.targetText=n,u.stop();return}u.targetText=n,u.start()},[l,u,r,t,n]),(0,X.useEffect)(()=>()=>{u.stop()},[u]),(0,X.useMemo)(()=>t?{type:"text",text:a,status:n===a?e.status:eT}:e,[t,a,e,n])};e.s(["useSmooth",()=>eC],947629),e.s([],839595),e.i(839595),e.s(["useSmooth",()=>eC,"useSmoothStatus",()=>ek,"withSmoothContextProvider",()=>ex],331963),e.i(331963),e.s(["AssistantRuntimeImpl",()=>W,"BaseAssistantRuntimeCore",()=>_,"CompositeContextProvider",()=>o,"DefaultThreadComposerRuntimeCore",()=>a,"MessageRepository",()=>x,"ThreadRuntimeImpl",()=>G,"fromThreadMessageLike",()=>g,"generateId",()=>l,"getAutoStatus",()=>p,"splitLocalRuntimeOptions",()=>Y,"useSmooth",()=>eC,"useSmoothStatus",()=>ek,"withSmoothContextProvider",()=>ex],12248);var eA=e.i(12248),eA=eA,eP=()=>ey(e=>{if("text"!==e.type&&"reasoning"!==e.type)throw Error("ContentPartText can only be used inside text or reasoning content parts.");return e});function eE(){}function e$(){}e.s(["useContentPartText",()=>eP],865762),e.s(["ok",()=>eE,"unreachable",()=>e$],897802);let eO=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,eR=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,eD={};function ej(e,t){return((t||eD).jsx?eR:eO).test(e)}let eU=/[ \t\n\f\r]/g;function eN(e){return""===e.replace(eU,"")}class eM{constructor(e,t){this.attribute=t,this.property=e}}eM.prototype.attribute="",eM.prototype.booleanish=!1,eM.prototype.boolean=!1,eM.prototype.commaOrSpaceSeparated=!1,eM.prototype.commaSeparated=!1,eM.prototype.defined=!1,eM.prototype.mustUseProperty=!1,eM.prototype.number=!1,eM.prototype.overloadedBoolean=!1,eM.prototype.property="",eM.prototype.spaceSeparated=!1,eM.prototype.space=void 0;let ez=0,eL=eG(),eF=eG(),eZ=eG(),eB=eG(),eH=eG(),eK=eG(),eV=eG();function eG(){return 2**++ez}e.s(["boolean",0,eL,"booleanish",0,eF,"commaOrSpaceSeparated",0,eV,"commaSeparated",0,eK,"number",0,eB,"overloadedBoolean",0,eZ,"spaceSeparated",0,eH],383954);var eq=e.i(383954);let eJ=Object.keys(eq);class eW extends eM{constructor(e,t,n,r){let i=-1;if(super(e,t),function(e,t,n){n&&(e[t]=n)}(this,"space",r),"number"==typeof n)for(;++i<eJ.length;){const e=eJ[i];!function(e,t,n){n&&(e[t]=n)}(this,eJ[i],(n&eq[e])===eq[e])}}}function eY(e){return e.toLowerCase()}eW.prototype.defined=!0;let eX=/[A-Z]/g,eQ=/-[a-z]/g,e0=/^data[-\w.:]+$/i;function e1(e){return"-"+e.toLowerCase()}function e4(e){return e.charAt(1).toUpperCase()}let e6={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"};class e2{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}}function e9(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new e2(n,r,t)}function e5(e){let t={},n={};for(let[r,i]of Object.entries(e.properties)){let a=new eW(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(a.mustUseProperty=!0),t[r]=a,n[eY(r)]=r,n[eY(a.attribute)]=r}return new e2(t,n,e.space)}e2.prototype.normal={},e2.prototype.property={},e2.prototype.space=void 0;let e3=e5({properties:{ariaActiveDescendant:null,ariaAtomic:eF,ariaAutoComplete:null,ariaBusy:eF,ariaChecked:eF,ariaColCount:eB,ariaColIndex:eB,ariaColSpan:eB,ariaControls:eH,ariaCurrent:null,ariaDescribedBy:eH,ariaDetails:null,ariaDisabled:eF,ariaDropEffect:eH,ariaErrorMessage:null,ariaExpanded:eF,ariaFlowTo:eH,ariaGrabbed:eF,ariaHasPopup:null,ariaHidden:eF,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:eH,ariaLevel:eB,ariaLive:null,ariaModal:eF,ariaMultiLine:eF,ariaMultiSelectable:eF,ariaOrientation:null,ariaOwns:eH,ariaPlaceholder:null,ariaPosInSet:eB,ariaPressed:eF,ariaReadOnly:eF,ariaRelevant:null,ariaRequired:eF,ariaRoleDescription:eH,ariaRowCount:eB,ariaRowIndex:eB,ariaRowSpan:eB,ariaSelected:eF,ariaSetSize:eB,ariaSort:null,ariaValueMax:eB,ariaValueMin:eB,ariaValueNow:eB,ariaValueText:null,role:null},transform:(e,t)=>"role"===t?t:"aria-"+t.slice(4).toLowerCase()});function e8(e,t){return t in e?e[t]:t}function e7(e,t){return e8(e,t.toLowerCase())}let te=e5({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:eK,acceptCharset:eH,accessKey:eH,action:null,allow:null,allowFullScreen:eL,allowPaymentRequest:eL,allowUserMedia:eL,alt:null,as:null,async:eL,autoCapitalize:null,autoComplete:eH,autoFocus:eL,autoPlay:eL,blocking:eH,capture:null,charSet:null,checked:eL,cite:null,className:eH,cols:eB,colSpan:null,content:null,contentEditable:eF,controls:eL,controlsList:eH,coords:eB|eK,crossOrigin:null,data:null,dateTime:null,decoding:null,default:eL,defer:eL,dir:null,dirName:null,disabled:eL,download:eZ,draggable:eF,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:eL,formTarget:null,headers:eH,height:eB,hidden:eZ,high:eB,href:null,hrefLang:null,htmlFor:eH,httpEquiv:eH,id:null,imageSizes:null,imageSrcSet:null,inert:eL,inputMode:null,integrity:null,is:null,isMap:eL,itemId:null,itemProp:eH,itemRef:eH,itemScope:eL,itemType:eH,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:eL,low:eB,manifest:null,max:null,maxLength:eB,media:null,method:null,min:null,minLength:eB,multiple:eL,muted:eL,name:null,nonce:null,noModule:eL,noValidate:eL,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:eL,optimum:eB,pattern:null,ping:eH,placeholder:null,playsInline:eL,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:eL,referrerPolicy:null,rel:eH,required:eL,reversed:eL,rows:eB,rowSpan:eB,sandbox:eH,scope:null,scoped:eL,seamless:eL,selected:eL,shadowRootClonable:eL,shadowRootDelegatesFocus:eL,shadowRootMode:null,shape:null,size:eB,sizes:null,slot:null,span:eB,spellCheck:eF,src:null,srcDoc:null,srcLang:null,srcSet:null,start:eB,step:null,style:null,tabIndex:eB,target:null,title:null,translate:null,type:null,typeMustMatch:eL,useMap:null,value:eF,width:eB,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:eH,axis:null,background:null,bgColor:null,border:eB,borderColor:null,bottomMargin:eB,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:eL,declare:eL,event:null,face:null,frame:null,frameBorder:null,hSpace:eB,leftMargin:eB,link:null,longDesc:null,lowSrc:null,marginHeight:eB,marginWidth:eB,noResize:eL,noHref:eL,noShade:eL,noWrap:eL,object:null,profile:null,prompt:null,rev:null,rightMargin:eB,rules:null,scheme:null,scrolling:eF,standby:null,summary:null,text:null,topMargin:eB,valueType:null,version:null,vAlign:null,vLink:null,vSpace:eB,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:eL,disableRemotePlayback:eL,prefix:null,property:null,results:eB,security:null,unselectable:null},space:"html",transform:e7}),tt=e5({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:eV,accentHeight:eB,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:eB,amplitude:eB,arabicForm:null,ascent:eB,attributeName:null,attributeType:null,azimuth:eB,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:eB,by:null,calcMode:null,capHeight:eB,className:eH,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:eB,diffuseConstant:eB,direction:null,display:null,dur:null,divisor:eB,dominantBaseline:null,download:eL,dx:null,dy:null,edgeMode:null,editable:null,elevation:eB,enableBackground:null,end:null,event:null,exponent:eB,externalResourcesRequired:null,fill:null,fillOpacity:eB,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:eK,g2:eK,glyphName:eK,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:eB,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:eB,horizOriginX:eB,horizOriginY:eB,id:null,ideographic:eB,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:eB,k:eB,k1:eB,k2:eB,k3:eB,k4:eB,kernelMatrix:eV,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:eB,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:eB,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:eB,overlineThickness:eB,paintOrder:null,panose1:null,path:null,pathLength:eB,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:eH,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:eB,pointsAtY:eB,pointsAtZ:eB,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:eV,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:eV,rev:eV,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:eV,requiredFeatures:eV,requiredFonts:eV,requiredFormats:eV,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:eB,specularExponent:eB,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:eB,strikethroughThickness:eB,string:null,stroke:null,strokeDashArray:eV,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:eB,strokeOpacity:eB,strokeWidth:null,style:null,surfaceScale:eB,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:eV,tabIndex:eB,tableValues:null,target:null,targetX:eB,targetY:eB,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:eV,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:eB,underlineThickness:eB,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:eB,values:null,vAlphabetic:eB,vMathematical:eB,vectorEffect:null,vHanging:eB,vIdeographic:eB,version:null,vertAdvY:eB,vertOriginX:eB,vertOriginY:eB,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:eB,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:e8}),tn=e5({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform:(e,t)=>"xlink:"+t.slice(5).toLowerCase()}),tr=e5({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:e7}),ti=e5({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform:(e,t)=>"xml:"+t.slice(3).toLowerCase()}),ta=e9([e3,te,tn,tr,ti],"html"),to=e9([e3,tt,tn,tr,ti],"svg");var ts=e.i(692728);let tl=td("end"),tu=td("start");function td(e){return function(t){let n=t&&t.position&&t.position[e]||{};if("number"==typeof n.line&&n.line>0&&"number"==typeof n.column&&n.column>0)return{line:n.line,column:n.column,offset:"number"==typeof n.offset&&n.offset>-1?n.offset:void 0}}}function tc(e){return e&&"object"==typeof e?"position"in e||"type"in e?tm(e.position):"start"in e||"end"in e?tm(e):"line"in e||"column"in e?tp(e):"":""}function tp(e){return th(e&&e.line)+":"+th(e&&e.column)}function tm(e){return tp(e&&e.start)+"-"+tp(e&&e.end)}function th(e){return e&&"number"==typeof e?e:1}class tf extends Error{constructor(e,t,n){super(),"string"==typeof t&&(n=t,t=void 0);let r="",i={},a=!1;if(t&&(i="line"in t&&"column"in t||"start"in t&&"end"in t?{place:t}:"type"in t?{ancestors:[t],place:t.position}:{...t}),"string"==typeof e?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&"string"==typeof n){const e=n.indexOf(":");-1===e?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){const e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}const o=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file,this.message=r,this.line=o?o.line:void 0,this.name=tc(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&"string"==typeof i.cause.stack?i.cause.stack:"",this.actual,this.expected,this.note,this.url}}tf.prototype.file="",tf.prototype.name="",tf.prototype.reason="",tf.prototype.message="",tf.prototype.stack="",tf.prototype.column=void 0,tf.prototype.line=void 0,tf.prototype.ancestors=void 0,tf.prototype.cause=void 0,tf.prototype.fatal=void 0,tf.prototype.place=void 0,tf.prototype.ruleId=void 0,tf.prototype.source=void 0;let tg={}.hasOwnProperty,ty=new Map,tv=/[A-Z]/g,tb=new Set(["table","tbody","thead","tfoot","tr"]),tx=new Set(["td","th"]),t_="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function tk(e,t){var n,r,i,a;let o;if(!t||void 0===t.Fragment)throw TypeError("Expected `Fragment` in options");let s=t.filePath||void 0;if(t.development){if("function"!=typeof t.jsxDEV)throw TypeError("Expected `jsxDEV` in options when `development: true`");n=s,r=t.jsxDEV,o=function(e,t,i,a){let o=Array.isArray(i.children),s=tu(e);return r(t,i,a,o,{columnNumber:s?s.column-1:void 0,fileName:n,lineNumber:s?s.line:void 0},void 0)}}else{if("function"!=typeof t.jsx)throw TypeError("Expected `jsx` in production options");if("function"!=typeof t.jsxs)throw TypeError("Expected `jsxs` in production options");i=t.jsx,a=t.jsxs,o=function(e,t,n,r){let o=Array.isArray(n.children)?a:i;return r?o(t,n,r):o(t,n)}}let l={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:o,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:s,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:!1!==t.passKeys,passNode:t.passNode||!1,schema:"svg"===t.space?to:ta,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:!1!==t.tableCellAlignToStyle},u=tw(l,e,void 0);return u&&"string"!=typeof u?u:l.create(e,l.Fragment,{children:u||void 0},void 0)}function tw(e,t,n){var r,i,a,o,s,l,u,d,c;let p,m,h,f,g,y,v,b,x,_,k;return"element"===t.type?(r=e,i=t,a=n,m=p=r.schema,"svg"===i.tagName.toLowerCase()&&"html"===p.space&&(r.schema=to),r.ancestors.push(i),h=tC(r,i.tagName,!1),f=function(e,t){let n,r,i={};for(r in t.properties)if("children"!==r&&tg.call(t.properties,r)){let a=function(e,t,n){let r=function(e,t){let n=eY(t),r=t,i=eM;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&"data"===n.slice(0,4)&&e0.test(t)){if("-"===t.charAt(4)){let e=t.slice(5).replace(eQ,e4);r="data"+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!eQ.test(e)){let n=e.replace(eX,e1);"-"!==n.charAt(0)&&(n="-"+n),t="data"+n}}i=eW}return new i(r,t)}(e.schema,t);if(!(null==n||"number"==typeof n&&Number.isNaN(n))){var i;let t;if(Array.isArray(n)&&(n=r.commaSeparated?(t={},(""===(i=n)[i.length-1]?[...i,""]:i).join((t.padRight?" ":"")+","+(!1===t.padLeft?"":" ")).trim()):n.join(" ").trim()),"style"===r.property){let t="object"==typeof n?n:function(e,t){try{return(0,ts.default)(t,{reactCompat:!0})}catch(n){if(e.ignoreInvalidStyle)return{};let t=new tf("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw t.file=e.filePath||void 0,t.url=t_+"#cannot-parse-style-attribute",t}}(e,String(n));return"css"===e.stylePropertyNameCase&&(t=function(e){let t,n={};for(t in e)tg.call(e,t)&&(n[function(e){let t=e.replace(tv,tP);return"ms-"===t.slice(0,3)&&(t="-"+t),t}(t)]=e[t]);return n}(t)),["style",t]}return["react"===e.elementAttributeNameCase&&r.space?e6[r.property]||r.property:r.attribute,n]}}(e,r,t.properties[r]);if(a){let[r,o]=a;e.tableCellAlignToStyle&&"align"===r&&"string"==typeof o&&tx.has(t.tagName)?n=o:i[r]=o}}return n&&((i.style||(i.style={}))["css"===e.stylePropertyNameCase?"text-align":"textAlign"]=n),i}(r,i),g=tT(r,i),tb.has(i.tagName)&&(g=g.filter(function(e){return"string"!=typeof e||!("object"==typeof e?"text"===e.type&&eN(e.value):eN(e))})),tS(r,f,h,i),tI(f,g),r.ancestors.pop(),r.schema=p,r.create(i,h,f,a)):"mdxFlowExpression"===t.type||"mdxTextExpression"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater){let n=t.data.estree.body[0];return eE("ExpressionStatement"===n.type),e.evaluater.evaluateExpression(n.expression)}tA(e,t.position)}(e,t):"mdxJsxFlowElement"===t.type||"mdxJsxTextElement"===t.type?(o=e,s=t,l=n,v=y=o.schema,"svg"===s.name&&"html"===y.space&&(o.schema=to),o.ancestors.push(s),b=null===s.name?o.Fragment:tC(o,s.name,!0),x=function(e,t){let n={};for(let r of t.attributes)if("mdxJsxExpressionAttribute"===r.type)if(r.data&&r.data.estree&&e.evaluater){let t=r.data.estree.body[0];eE("ExpressionStatement"===t.type);let i=t.expression;eE("ObjectExpression"===i.type);let a=i.properties[0];eE("SpreadElement"===a.type),Object.assign(n,e.evaluater.evaluateExpression(a.argument))}else tA(e,t.position);else{let i,a=r.name;if(r.value&&"object"==typeof r.value)if(r.value.data&&r.value.data.estree&&e.evaluater){let t=r.value.data.estree.body[0];eE("ExpressionStatement"===t.type),i=e.evaluater.evaluateExpression(t.expression)}else tA(e,t.position);else i=null===r.value||r.value;n[a]=i}return n}(o,s),_=tT(o,s),tS(o,x,b,s),tI(x,_),o.ancestors.pop(),o.schema=y,o.create(s,b,x,l)):"mdxjsEsm"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);tA(e,t.position)}(e,t):"root"===t.type?(u=e,d=t,c=n,tI(k={},tT(u,d)),u.create(d,u.Fragment,k,c)):"text"===t.type?t.value:void 0}function tS(e,t,n,r){"string"!=typeof n&&n!==e.Fragment&&e.passNode&&(t.node=r)}function tI(e,t){if(t.length>0){let n=t.length>1?t:t[0];n&&(e.children=n)}}function tT(e,t){let n=[],r=-1,i=e.passKeys?new Map:ty;for(;++r<t.children.length;){let a,o=t.children[r];if(e.passKeys){let e="element"===o.type?o.tagName:"mdxJsxFlowElement"===o.type||"mdxJsxTextElement"===o.type?o.name:void 0;if(e){let t=i.get(e)||0;a=e+"-"+t,i.set(e,t+1)}}let s=tw(e,o,a);void 0!==s&&n.push(s)}return n}function tC(e,t,n){let r;if(n)if(t.includes(".")){let e,n=t.split("."),i=-1;for(;++i<n.length;){let t=ej(n[i])?{type:"Identifier",name:n[i]}:{type:"Literal",value:n[i]};e=e?{type:"MemberExpression",object:e,property:t,computed:!!(i&&"Literal"===t.type),optional:!1}:t}eE(e,"always a result"),r=e}else r=ej(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};else r={type:"Literal",value:t};if("Literal"===r.type){let t=r.value;return tg.call(e.components,t)?e.components[t]:t}if(e.evaluater)return e.evaluater.evaluateExpression(r);tA(e)}function tA(e,t){let n=new tf("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw n.file=e.filePath||void 0,n.url=t_+"#cannot-handle-mdx-estrees-without-createevaluater",n}function tP(e){return"-"+e.toLowerCase()}e.s(["toJsxRuntime",()=>tk],945334);let tE={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]};e.s(["urlAttributes",0,tE],722259);let t$={};function tO(e,t){let n=t||t$;return tR(e,"boolean"!=typeof n.includeImageAlt||n.includeImageAlt,"boolean"!=typeof n.includeHtml||n.includeHtml)}function tR(e,t,n){var r;if((r=e)&&"object"==typeof r){if("value"in e)return"html"!==e.type||n?e.value:"";if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return tD(e.children,t,n)}return Array.isArray(e)?tD(e,t,n):""}function tD(e,t,n){let r=[],i=-1;for(;++i<e.length;)r[i]=tR(e[i],t,n);return r.join("")}function tj(e,t,n,r){let i,a=e.length,o=0;if(t=t<0?-t>a?0:a+t:t>a?a:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),e.splice(...i);else for(n&&e.splice(t,n);o<r.length;)(i=r.slice(o,o+1e4)).unshift(t,0),e.splice(...i),o+=1e4,t+=1e4}function tU(e,t){return e.length>0?(tj(e,e.length,0,t),e):t}let tN={}.hasOwnProperty;function tM(e){let t={},n=-1;for(;++n<e.length;)!function(e,t){let n;for(n in t){let r,i=(tN.call(e,n)?e[n]:void 0)||(e[n]={}),a=t[n];if(a)for(r in a){tN.call(i,r)||(i[r]=[]);let e=a[r];!function(e,t){let n=-1,r=[];for(;++n<t.length;)("after"===t[n].add?e:r).push(t[n]);tj(e,0,0,r)}(i[r],Array.isArray(e)?e:e?[e]:[])}}}(t,e[n]);return t}let tz=tY(/[A-Za-z]/),tL=tY(/[\dA-Za-z]/),tF=tY(/[#-'*+\--9=?A-Z^-~]/);function tZ(e){return null!==e&&(e<32||127===e)}let tB=tY(/\d/),tH=tY(/[\dA-Fa-f]/),tK=tY(/[!-/:-@[-`{-~]/);function tV(e){return null!==e&&e<-2}function tG(e){return null!==e&&(e<0||32===e)}function tq(e){return -2===e||-1===e||32===e}let tJ=tY(/\p{P}|\p{S}/u),tW=tY(/\s/);function tY(e){return function(t){return null!==t&&t>-1&&e.test(String.fromCharCode(t))}}function tX(e,t,n,r){let i=r?r-1:1/0,a=0;return function(r){return tq(r)?(e.enter(n),function r(o){return tq(o)&&a++<i?(e.consume(o),r):(e.exit(n),t(o))}(r)):t(r)}}let tQ={tokenize:function(e){let t,n=e.attempt(this.parser.constructs.contentInitial,function(t){return null===t?void e.consume(t):(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),tX(e,n,"linePrefix"))},function(n){return e.enter("paragraph"),function n(r){let i=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=i),t=i,function t(r){if(null===r){e.exit("chunkText"),e.exit("paragraph"),e.consume(r);return}return tV(r)?(e.consume(r),e.exit("chunkText"),n):(e.consume(r),t)}(r)}(n)});return n}},t0={tokenize:function(e){let t,n,r,i=this,a=[],o=0;return s;function s(t){if(o<a.length){let n=a[o];return i.containerState=n[1],e.attempt(n[0].continuation,l,u)(t)}return u(t)}function l(e){if(o++,i.containerState._closeFlow){let n;i.containerState._closeFlow=void 0,t&&y();let r=i.events.length,a=r;for(;a--;)if("exit"===i.events[a][0]&&"chunkFlow"===i.events[a][1].type){n=i.events[a][1].end;break}g(o);let s=r;for(;s<i.events.length;)i.events[s][1].end={...n},s++;return tj(i.events,a+1,0,i.events.slice(r)),i.events.length=s,u(e)}return s(e)}function u(n){if(o===a.length){if(!t)return p(n);if(t.currentConstruct&&t.currentConstruct.concrete)return h(n);i.interrupt=!!(t.currentConstruct&&!t._gfmTableDynamicInterruptHack)}return i.containerState={},e.check(t1,d,c)(n)}function d(e){return t&&y(),g(o),p(e)}function c(e){return i.parser.lazy[i.now().line]=o!==a.length,r=i.now().offset,h(e)}function p(t){return i.containerState={},e.attempt(t1,m,h)(t)}function m(e){return o++,a.push([i.currentConstruct,i.containerState]),p(e)}function h(r){if(null===r){t&&y(),g(0),e.consume(r);return}return t=t||i.parser.flow(i.now()),e.enter("chunkFlow",{_tokenizer:t,contentType:"flow",previous:n}),function t(n){if(null===n){f(e.exit("chunkFlow"),!0),g(0),e.consume(n);return}return tV(n)?(e.consume(n),f(e.exit("chunkFlow")),o=0,i.interrupt=void 0,s):(e.consume(n),t)}(r)}function f(e,a){let s=i.sliceStream(e);if(a&&s.push(null),e.previous=n,n&&(n.next=e),n=e,t.defineSkip(e.start),t.write(s),i.parser.lazy[e.start.line]){let e,n,a=t.events.length;for(;a--;)if(t.events[a][1].start.offset<r&&(!t.events[a][1].end||t.events[a][1].end.offset>r))return;let s=i.events.length,l=s;for(;l--;)if("exit"===i.events[l][0]&&"chunkFlow"===i.events[l][1].type){if(e){n=i.events[l][1].end;break}e=!0}for(g(o),a=s;a<i.events.length;)i.events[a][1].end={...n},a++;tj(i.events,l+1,0,i.events.slice(s)),i.events.length=a}}function g(t){let n=a.length;for(;n-- >t;){let t=a[n];i.containerState=t[1],t[0].exit.call(i,e)}a.length=t}function y(){t.write([null]),n=void 0,t=void 0,i.containerState._closeFlow=void 0}}},t1={tokenize:function(e,t,n){return tX(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}},t4={partial:!0,tokenize:function(e,t,n){return function(t){return tq(t)?tX(e,r,"linePrefix")(t):r(t)};function r(e){return null===e||tV(e)?t(e):n(e)}}};class t6{constructor(e){this.left=e?[...e]:[],this.right=[]}get(e){if(e<0||e>=this.left.length+this.right.length)throw RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return e<this.left.length?this.left[e]:this.right[this.right.length-e+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(e,t){let n=null==t?1/0:t;return n<this.left.length?this.left.slice(e,n):e>this.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){this.setCursor(Math.trunc(e));let r=this.right.splice(this.right.length-(t||0),1/0);return n&&t2(this.left,n),r.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),t2(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),t2(this.right,e.reverse())}setCursor(e){if(e!==this.left.length&&(!(e>this.left.length)||0!==this.right.length)&&(!(e<0)||0!==this.left.length))if(e<this.left.length){let t=this.left.splice(e,1/0);t2(this.right,t.reverse())}else{let t=this.right.splice(this.left.length+this.right.length-e,1/0);t2(this.left,t.reverse())}}}function t2(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function t9(e){let t,n,r,i,a,o,s,l={},u=-1,d=new t6(e);for(;++u<d.length;){for(;u in l;)u=l[u];if(t=d.get(u),u&&"chunkFlow"===t[1].type&&"listItemPrefix"===d.get(u-1)[1].type&&((r=0)<(o=t[1]._tokenizer.events).length&&"lineEndingBlank"===o[r][1].type&&(r+=2),r<o.length&&"content"===o[r][1].type))for(;++r<o.length&&"content"!==o[r][1].type;)"chunkText"===o[r][1].type&&(o[r][1]._isInFirstContentOfListItem=!0,r++);if("enter"===t[0])t[1].contentType&&(Object.assign(l,function(e,t){let n,r,i=e.get(t)[1],a=e.get(t)[2],o=t-1,s=[],l=i._tokenizer;!l&&(l=a.parser[i.contentType](i.start),i._contentTypeTextTrailing&&(l._contentTypeTextTrailing=!0));let u=l.events,d=[],c={},p=-1,m=i,h=0,f=0,g=[0];for(;m;){for(;e.get(++o)[1]!==m;);s.push(o),!m._tokenizer&&(n=a.sliceStream(m),m.next||n.push(null),r&&l.defineSkip(m.start),m._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=!0),l.write(n),m._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=void 0)),r=m,m=m.next}for(m=i;++p<u.length;)"exit"===u[p][0]&&"enter"===u[p-1][0]&&u[p][1].type===u[p-1][1].type&&u[p][1].start.line!==u[p][1].end.line&&(f=p+1,g.push(f),m._tokenizer=void 0,m.previous=void 0,m=m.next);for(l.events=[],m?(m._tokenizer=void 0,m.previous=void 0):g.pop(),p=g.length;p--;){let t=u.slice(g[p],g[p+1]),n=s.pop();d.push([n,n+t.length-1]),e.splice(n,2,t)}for(d.reverse(),p=-1;++p<d.length;)c[h+d[p][0]]=h+d[p][1],h+=d[p][1]-d[p][0]-1;return c}(d,u)),u=l[u],s=!0);else if(t[1]._container){for(r=u,n=void 0;r--;)if("lineEnding"===(i=d.get(r))[1].type||"lineEndingBlank"===i[1].type)"enter"===i[0]&&(n&&(d.get(n)[1].type="lineEndingBlank"),i[1].type="lineEnding",n=r);else if("linePrefix"===i[1].type||"listItemIndent"===i[1].type);else break;n&&(t[1].end={...d.get(n)[1].start},(a=d.slice(n,u)).unshift(t),d.splice(n,u-n+1,a))}}return tj(e,0,1/0,d.slice(0)),!s}let t5={resolve:function(e){return t9(e),e},tokenize:function(e,t){let n;return function(t){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),r(t)};function r(t){return null===t?i(t):tV(t)?e.check(t3,a,i)(t):(e.consume(t),r)}function i(n){return e.exit("chunkContent"),e.exit("content"),t(n)}function a(t){return e.consume(t),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,r}}},t3={partial:!0,tokenize:function(e,t,n){let r=this;return function(t){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),tX(e,i,"linePrefix")};function i(i){if(null===i||tV(i))return n(i);let a=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&a&&"linePrefix"===a[1].type&&a[2].sliceSerialize(a[1],!0).length>=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}},t8={tokenize:function(e){let t=this,n=e.attempt(t4,function(r){return null===r?void e.consume(r):(e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n)},e.attempt(this.parser.constructs.flowInitial,r,tX(e,e.attempt(this.parser.constructs.flow,r,e.attempt(t5,r)),"linePrefix")));return n;function r(r){return null===r?void e.consume(r):(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,n)}}},t7={resolveAll:nr()},ne=nn("string"),nt=nn("text");function nn(e){return{resolveAll:nr("text"===e?ni:void 0),tokenize:function(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return l(e)?i(e):o(e)}function o(e){return null===e?void t.consume(e):(t.enter("data"),t.consume(e),s)}function s(e){return l(e)?(t.exit("data"),i(e)):(t.consume(e),s)}function l(e){if(null===e)return!0;let t=r[e],i=-1;if(t)for(;++i<t.length;){let e=t[i];if(!e.previous||e.previous.call(n,n.previous))return!0}return!1}}}}function nr(e){return function(t,n){let r,i=-1;for(;++i<=t.length;)void 0===r?t[i]&&"data"===t[i][1].type&&(r=i,i++):t[i]&&"data"===t[i][1].type||(i!==r+2&&(t[r][1].end=t[i-1][1].end,t.splice(r+2,i-r-2),i=r+2),r=void 0);return e?e(t,n):t}}function ni(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||"lineEnding"===e[n][1].type)&&"data"===e[n-1][1].type){let r,i=e[n-1][1],a=t.sliceStream(i),o=a.length,s=-1,l=0;for(;o--;){let e=a[o];if("string"==typeof e){for(s=e.length;32===e.charCodeAt(s-1);)l++,s--;if(s)break;s=-1}else if(-2===e)r=!0,l++;else if(-1===e);else{o++;break}}if(t._contentTypeTextTrailing&&n===e.length&&(l=0),l){let a={type:n===e.length||r||l<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:o?s:i.start._bufferIndex+s,_index:i.start._index+o,line:i.end.line,column:i.end.column-l,offset:i.end.offset-l},end:{...i.end}};i.end={...a.start},i.start.offset===i.end.offset?Object.assign(i,a):(e.splice(n,0,["enter",a,t],["exit",a,t]),n+=2)}n++}return e}function na(e){return null===e||tG(e)||tW(e)?1:tJ(e)?2:void 0}function no(e,t,n){let r=[],i=-1;for(;++i<e.length;){let a=e[i].resolveAll;a&&!r.includes(a)&&(t=a(t,n),r.push(a))}return t}let ns={name:"attention",resolveAll:function(e,t){let n,r,i,a,o,s,l,u,d=-1;for(;++d<e.length;)if("enter"===e[d][0]&&"attentionSequence"===e[d][1].type&&e[d][1]._close){for(n=d;n--;)if("exit"===e[n][0]&&"attentionSequence"===e[n][1].type&&e[n][1]._open&&t.sliceSerialize(e[n][1]).charCodeAt(0)===t.sliceSerialize(e[d][1]).charCodeAt(0)){if((e[n][1]._close||e[d][1]._open)&&(e[d][1].end.offset-e[d][1].start.offset)%3&&!((e[n][1].end.offset-e[n][1].start.offset+e[d][1].end.offset-e[d][1].start.offset)%3))continue;s=e[n][1].end.offset-e[n][1].start.offset>1&&e[d][1].end.offset-e[d][1].start.offset>1?2:1;let c={...e[n][1].end},p={...e[d][1].start};nl(c,-s),nl(p,s),a={type:s>1?"strongSequence":"emphasisSequence",start:c,end:{...e[n][1].end}},o={type:s>1?"strongSequence":"emphasisSequence",start:{...e[d][1].start},end:p},i={type:s>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[d][1].start}},r={type:s>1?"strong":"emphasis",start:{...a.start},end:{...o.end}},e[n][1].end={...a.start},e[d][1].start={...o.end},l=[],e[n][1].end.offset-e[n][1].start.offset&&(l=tU(l,[["enter",e[n][1],t],["exit",e[n][1],t]])),l=tU(l,[["enter",r,t],["enter",a,t],["exit",a,t],["enter",i,t]]),l=tU(l,no(t.parser.constructs.insideSpan.null,e.slice(n+1,d),t)),l=tU(l,[["exit",i,t],["enter",o,t],["exit",o,t],["exit",r,t]]),e[d][1].end.offset-e[d][1].start.offset?(u=2,l=tU(l,[["enter",e[d][1],t],["exit",e[d][1],t]])):u=0,tj(e,n-1,d-n+3,l),d=n+l.length-u-2;break}}for(d=-1;++d<e.length;)"attentionSequence"===e[d][1].type&&(e[d][1].type="data");return e},tokenize:function(e,t){let n,r=this.parser.constructs.attentionMarkers.null,i=this.previous,a=na(i);return function(o){return n=o,e.enter("attentionSequence"),function o(s){if(s===n)return e.consume(s),o;let l=e.exit("attentionSequence"),u=na(s),d=!u||2===u&&a||r.includes(s),c=!a||2===a&&u||r.includes(i);return l._open=!!(42===n?d:d&&(a||!c)),l._close=!!(42===n?c:c&&(u||!d)),t(s)}(o)}}};function nl(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}let nu={continuation:{tokenize:function(e,t,n){let r=this;return function(t){return tq(t)?tX(e,i,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):i(t)};function i(r){return e.attempt(nu,t,n)(r)}}},exit:function(e){e.exit("blockQuote")},name:"blockQuote",tokenize:function(e,t,n){let r=this;return function(t){if(62===t){let n=r.containerState;return n.open||(e.enter("blockQuote",{_container:!0}),n.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(t),e.exit("blockQuoteMarker"),i}return n(t)};function i(n){return tq(n)?(e.enter("blockQuotePrefixWhitespace"),e.consume(n),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(n))}}},nd={name:"characterEscape",tokenize:function(e,t,n){return function(t){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(t),e.exit("escapeMarker"),r};function r(r){return tK(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(r)}}},nc=document.createElement("i");function np(e){let t="&"+e+";";nc.innerHTML=t;let n=nc.textContent;return(59!==n.charCodeAt(n.length-1)||"semi"===e)&&n!==t&&n}let nm={name:"characterReference",tokenize:function(e,t,n){let r,i,a=this,o=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),s};function s(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),l):(e.enter("characterReferenceValue"),r=31,i=tL,u(t))}function l(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),r=6,i=tH,u):(e.enter("characterReferenceValue"),r=7,i=tB,u(t))}function u(s){if(59===s&&o){let r=e.exit("characterReferenceValue");return i!==tL||np(a.sliceSerialize(r))?(e.enter("characterReferenceMarker"),e.consume(s),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(s)}return i(s)&&o++<r?(e.consume(s),u):n(s)}}},nh={partial:!0,tokenize:function(e,t,n){let r=this;return function(t){return null===t?n(t):(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i)};function i(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},nf={concrete:!0,name:"codeFenced",tokenize:function(e,t,n){let r,i=this,a={partial:!0,tokenize:function(e,t,n){let a=0;return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o};function o(t){return e.enter("codeFencedFence"),tq(t)?tX(e,l,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):l(t)}function l(t){return t===r?(e.enter("codeFencedFenceSequence"),function t(i){return i===r?(a++,e.consume(i),t):a>=s?(e.exit("codeFencedFenceSequence"),tq(i)?tX(e,u,"whitespace")(i):u(i)):n(i)}(t)):n(t)}function u(r){return null===r||tV(r)?(e.exit("codeFencedFence"),t(r)):n(r)}}},o=0,s=0;return function(t){var a;let u;return a=t,o=(u=i.events[i.events.length-1])&&"linePrefix"===u[1].type?u[2].sliceSerialize(u[1],!0).length:0,r=a,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),function t(i){return i===r?(s++,e.consume(i),t):s<3?n(i):(e.exit("codeFencedFenceSequence"),tq(i)?tX(e,l,"whitespace")(i):l(i))}(a)};function l(a){return null===a||tV(a)?(e.exit("codeFencedFence"),i.interrupt?t(a):e.check(nh,d,h)(a)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),function t(i){return null===i||tV(i)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),l(i)):tq(i)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),tX(e,u,"whitespace")(i)):96===i&&i===r?n(i):(e.consume(i),t)}(a))}function u(t){return null===t||tV(t)?l(t):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),function t(i){return null===i||tV(i)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),l(i)):96===i&&i===r?n(i):(e.consume(i),t)}(t))}function d(t){return e.attempt(a,h,c)(t)}function c(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),p}function p(t){return o>0&&tq(t)?tX(e,m,"linePrefix",o+1)(t):m(t)}function m(t){return null===t||tV(t)?e.check(nh,d,h)(t):(e.enter("codeFlowValue"),function t(n){return null===n||tV(n)?(e.exit("codeFlowValue"),m(n)):(e.consume(n),t)}(t))}function h(n){return e.exit("codeFenced"),t(n)}}},ng={name:"codeIndented",tokenize:function(e,t,n){let r=this;return function(t){return e.enter("codeIndented"),tX(e,i,"linePrefix",5)(t)};function i(t){let i=r.events[r.events.length-1];return i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?function t(n){return null===n?a(n):tV(n)?e.attempt(ny,t,a)(n):(e.enter("codeFlowValue"),function n(r){return null===r||tV(r)?(e.exit("codeFlowValue"),t(r)):(e.consume(r),n)}(n))}(t):n(t)}function a(n){return e.exit("codeIndented"),t(n)}}},ny={partial:!0,tokenize:function(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):tV(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i):tX(e,a,"linePrefix",5)(t)}function a(e){let a=r.events[r.events.length-1];return a&&"linePrefix"===a[1].type&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):tV(e)?i(e):n(e)}}};function nv(e,t,n,r,i,a,o,s,l){let u=l||1/0,d=0;return function(t){return 60===t?(e.enter(r),e.enter(i),e.enter(a),e.consume(t),e.exit(a),c):null===t||32===t||41===t||tZ(t)?n(t):(e.enter(r),e.enter(o),e.enter(s),e.enter("chunkString",{contentType:"string"}),h(t))};function c(n){return 62===n?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),e.exit(r),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(n))}function p(t){return 62===t?(e.exit("chunkString"),e.exit(s),c(t)):null===t||60===t||tV(t)?n(t):(e.consume(t),92===t?m:p)}function m(t){return 60===t||62===t||92===t?(e.consume(t),p):p(t)}function h(i){return!d&&(null===i||41===i||tG(i))?(e.exit("chunkString"),e.exit(s),e.exit(o),e.exit(r),t(i)):d<u&&40===i?(e.consume(i),d++,h):41===i?(e.consume(i),d--,h):null===i||32===i||40===i||tZ(i)?n(i):(e.consume(i),92===i?f:h)}function f(t){return 40===t||41===t||92===t?(e.consume(t),h):h(t)}}function nb(e,t,n,r,i,a){let o,s=this,l=0;return function(t){return e.enter(r),e.enter(i),e.consume(t),e.exit(i),e.enter(a),u};function u(c){return l>999||null===c||91===c||93===c&&!o||94===c&&!l&&"_hiddenFootnoteSupport"in s.parser.constructs?n(c):93===c?(e.exit(a),e.enter(i),e.consume(c),e.exit(i),e.exit(r),t):tV(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),u):(e.enter("chunkString",{contentType:"string"}),d(c))}function d(t){return null===t||91===t||93===t||tV(t)||l++>999?(e.exit("chunkString"),u(t)):(e.consume(t),o||(o=!tq(t)),92===t?c:d)}function c(t){return 91===t||92===t||93===t?(e.consume(t),l++,d):d(t)}}function nx(e,t,n,r,i,a){let o;return function(t){return 34===t||39===t||40===t?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=40===t?41:t,s):n(t)};function s(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),s(o)):null===t?n(t):tV(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),tX(e,l,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),u(t))}function u(t){return t===o||null===t||tV(t)?(e.exit("chunkString"),l(t)):(e.consume(t),92===t?d:u)}function d(t){return t===o||92===t?(e.consume(t),u):u(t)}}function n_(e,t){let n;return function r(i){return tV(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):tq(i)?tX(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}function nk(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}let nw={partial:!0,tokenize:function(e,t,n){return function(t){return tG(t)?n_(e,r)(t):n(t)};function r(t){return nx(e,i,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t)}function i(t){return tq(t)?tX(e,a,"whitespace")(t):a(t)}function a(e){return null===e||tV(e)?t(e):n(e)}}},nS=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nI=["pre","script","style","textarea"],nT={partial:!0,tokenize:function(e,t,n){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(t4,t,n)}}},nC={partial:!0,tokenize:function(e,t,n){let r=this;return function(t){return tV(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i):n(t)};function i(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},nA={name:"labelEnd",resolveAll:function(e){let t=-1,n=[];for(;++t<e.length;){let r=e[t][1];if(n.push(e[t]),"labelImage"===r.type||"labelLink"===r.type||"labelEnd"===r.type){let e="labelImage"===r.type?4:2;r.type="data",t+=e}}return e.length!==n.length&&tj(e,0,e.length,n),e},resolveTo:function(e,t){let n,r,i,a,o=e.length,s=0;for(;o--;)if(n=e[o][1],r){if("link"===n.type||"labelLink"===n.type&&n._inactive)break;"enter"===e[o][0]&&"labelLink"===n.type&&(n._inactive=!0)}else if(i){if("enter"===e[o][0]&&("labelImage"===n.type||"labelLink"===n.type)&&!n._balanced&&(r=o,"labelLink"!==n.type)){s=2;break}}else"labelEnd"===n.type&&(i=o);let l={type:"labelLink"===e[r][1].type?"link":"image",start:{...e[r][1].start},end:{...e[e.length-1][1].end}},u={type:"label",start:{...e[r][1].start},end:{...e[i][1].end}},d={type:"labelText",start:{...e[r+s+2][1].end},end:{...e[i-2][1].start}};return a=tU(a=[["enter",l,t],["enter",u,t]],e.slice(r+1,r+s+3)),a=tU(a,[["enter",d,t]]),a=tU(a,no(t.parser.constructs.insideSpan.null,e.slice(r+s+4,i-3),t)),a=tU(a,[["exit",d,t],e[i-2],e[i-1],["exit",u,t]]),a=tU(a,e.slice(i+1)),a=tU(a,[["exit",l,t]]),tj(e,r,e.length,a),e},tokenize:function(e,t,n){let r,i,a=this,o=a.events.length;for(;o--;)if(("labelImage"===a.events[o][1].type||"labelLink"===a.events[o][1].type)&&!a.events[o][1]._balanced){r=a.events[o][1];break}return function(t){return r?r._inactive?d(t):(i=a.parser.defined.includes(nk(a.sliceSerialize({start:r.end,end:a.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelEnd"),s):n(t)};function s(t){return 40===t?e.attempt(nP,u,i?u:d)(t):91===t?e.attempt(nE,u,i?l:d)(t):i?u(t):d(t)}function l(t){return e.attempt(n$,u,d)(t)}function u(e){return t(e)}function d(e){return r._balanced=!0,n(e)}}},nP={tokenize:function(e,t,n){return function(t){return e.enter("resource"),e.enter("resourceMarker"),e.consume(t),e.exit("resourceMarker"),r};function r(t){return tG(t)?n_(e,i)(t):i(t)}function i(t){return 41===t?u(t):nv(e,a,o,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(t)}function a(t){return tG(t)?n_(e,s)(t):u(t)}function o(e){return n(e)}function s(t){return 34===t||39===t||40===t?nx(e,l,n,"resourceTitle","resourceTitleMarker","resourceTitleString")(t):u(t)}function l(t){return tG(t)?n_(e,u)(t):u(t)}function u(r){return 41===r?(e.enter("resourceMarker"),e.consume(r),e.exit("resourceMarker"),e.exit("resource"),t):n(r)}}},nE={tokenize:function(e,t,n){let r=this;return function(t){return nb.call(r,e,i,a,"reference","referenceMarker","referenceString")(t)};function i(e){return r.parser.defined.includes(nk(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?t(e):n(e)}function a(e){return n(e)}}},n$={tokenize:function(e,t,n){return function(t){return e.enter("reference"),e.enter("referenceMarker"),e.consume(t),e.exit("referenceMarker"),r};function r(r){return 93===r?(e.enter("referenceMarker"),e.consume(r),e.exit("referenceMarker"),e.exit("reference"),t):n(r)}}},nO={name:"labelStartImage",resolveAll:nA.resolveAll,tokenize:function(e,t,n){let r=this;return function(t){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(t),e.exit("labelImageMarker"),i};function i(t){return 91===t?(e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelImage"),a):n(t)}function a(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?n(e):t(e)}}},nR={name:"labelStartLink",resolveAll:nA.resolveAll,tokenize:function(e,t,n){let r=this;return function(t){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelLink"),i};function i(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?n(e):t(e)}}},nD={name:"lineEnding",tokenize:function(e,t){return function(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),tX(e,t,"linePrefix")}}},nj={name:"thematicBreak",tokenize:function(e,t,n){let r,i=0;return function(a){var o;return e.enter("thematicBreak"),r=o=a,function a(o){return o===r?(e.enter("thematicBreakSequence"),function t(n){return n===r?(e.consume(n),i++,t):(e.exit("thematicBreakSequence"),tq(n)?tX(e,a,"whitespace")(n):a(n))}(o)):i>=3&&(null===o||tV(o))?(e.exit("thematicBreak"),t(o)):n(o)}(o)}}},nU={continuation:{tokenize:function(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(t4,function(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,tX(e,t,"listItemIndent",r.containerState.size+1)(n)},function(n){return r.containerState.furtherBlankLines||!tq(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,i(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(nM,t,i)(n))});function i(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,tX(e,e.attempt(nU,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)},name:"list",tokenize:function(e,t,n){let r=this,i=r.events[r.events.length-1],a=i&&"linePrefix"===i[1].type?i[2].sliceSerialize(i[1],!0).length:0,o=0;return function(t){let i=r.containerState.type||(42===t||43===t||45===t?"listUnordered":"listOrdered");if("listUnordered"===i?!r.containerState.marker||t===r.containerState.marker:tB(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),"listUnordered"===i)return e.enter("listItemPrefix"),42===t||45===t?e.check(nj,n,s)(t):s(t);if(!r.interrupt||49===t)return e.enter("listItemPrefix"),e.enter("listItemValue"),function t(i){return tB(i)&&++o<10?(e.consume(i),t):(!r.interrupt||o<2)&&(r.containerState.marker?i===r.containerState.marker:41===i||46===i)?(e.exit("listItemValue"),s(i)):n(i)}(t)}return n(t)};function s(t){return e.enter("listItemMarker"),e.consume(t),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||t,e.check(t4,r.interrupt?n:l,e.attempt(nN,d,u))}function l(e){return r.containerState.initialBlankLine=!0,a++,d(e)}function u(t){return tq(t)?(e.enter("listItemPrefixWhitespace"),e.consume(t),e.exit("listItemPrefixWhitespace"),d):n(t)}function d(n){return r.containerState.size=a+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(n)}}},nN={partial:!0,tokenize:function(e,t,n){let r=this;return tX(e,function(e){let i=r.events[r.events.length-1];return!tq(e)&&i&&"listItemPrefixWhitespace"===i[1].type?t(e):n(e)},"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)}},nM={partial:!0,tokenize:function(e,t,n){let r=this;return tX(e,function(e){let i=r.events[r.events.length-1];return i&&"listItemIndent"===i[1].type&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)},"listItemIndent",r.containerState.size+1)}},nz={name:"setextUnderline",resolveTo:function(e,t){let n,r,i,a=e.length;for(;a--;)if("enter"===e[a][0]){if("content"===e[a][1].type){n=a;break}"paragraph"===e[a][1].type&&(r=a)}else"content"===e[a][1].type&&e.splice(a,1),i||"definition"!==e[a][1].type||(i=a);let o={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=o,e.push(["exit",o,t]),e},tokenize:function(e,t,n){let r,i=this;return function(t){var o;let s,l=i.events.length;for(;l--;)if("lineEnding"!==i.events[l][1].type&&"linePrefix"!==i.events[l][1].type&&"content"!==i.events[l][1].type){s="paragraph"===i.events[l][1].type;break}return!i.parser.lazy[i.now().line]&&(i.interrupt||s)?(e.enter("setextHeadingLine"),r=t,o=t,e.enter("setextHeadingLineSequence"),function t(n){return n===r?(e.consume(n),t):(e.exit("setextHeadingLineSequence"),tq(n)?tX(e,a,"lineSuffix")(n):a(n))}(o)):n(t)};function a(r){return null===r||tV(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}}};e.s(["attentionMarkers",0,{null:[42,95]},"contentInitial",0,{91:{name:"definition",tokenize:function(e,t,n){let r,i=this;return function(t){var r;return e.enter("definition"),r=t,nb.call(i,e,a,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(r)};function a(t){return(r=nk(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),58===t)?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),o):n(t)}function o(t){return tG(t)?n_(e,s)(t):s(t)}function s(t){return nv(e,l,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(t)}function l(t){return e.attempt(nw,u,u)(t)}function u(t){return tq(t)?tX(e,d,"whitespace")(t):d(t)}function d(a){return null===a||tV(a)?(e.exit("definition"),i.parser.defined.push(r),t(a)):n(a)}}}},"disable",0,{null:[]},"document",0,{42:nU,43:nU,45:nU,48:nU,49:nU,50:nU,51:nU,52:nU,53:nU,54:nU,55:nU,56:nU,57:nU,62:nu},"flow",0,{35:{name:"headingAtx",resolve:function(e,t){let n,r,i=e.length-2,a=3;return"whitespace"===e[3][1].type&&(a+=2),i-2>a&&"whitespace"===e[i][1].type&&(i-=2),"atxHeadingSequence"===e[i][1].type&&(a===i-1||i-4>a&&"whitespace"===e[i-2][1].type)&&(i-=a+1===i?2:4),i>a&&(n={type:"atxHeadingText",start:e[a][1].start,end:e[i][1].end},r={type:"chunkText",start:e[a][1].start,end:e[i][1].end,contentType:"text"},tj(e,a,i-a+1,[["enter",n,t],["enter",r,t],["exit",r,t],["exit",n,t]])),e},tokenize:function(e,t,n){let r=0;return function(i){var a;return e.enter("atxHeading"),a=i,e.enter("atxHeadingSequence"),function i(a){return 35===a&&r++<6?(e.consume(a),i):null===a||tG(a)?(e.exit("atxHeadingSequence"),function n(r){return 35===r?(e.enter("atxHeadingSequence"),function t(r){return 35===r?(e.consume(r),t):(e.exit("atxHeadingSequence"),n(r))}(r)):null===r||tV(r)?(e.exit("atxHeading"),t(r)):tq(r)?tX(e,n,"whitespace")(r):(e.enter("atxHeadingText"),function t(r){return null===r||35===r||tG(r)?(e.exit("atxHeadingText"),n(r)):(e.consume(r),t)}(r))}(a)):n(a)}(a)}}},42:nj,45:[nz,nj],60:{concrete:!0,name:"htmlFlow",resolveTo:function(e){let t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););return t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e},tokenize:function(e,t,n){let r,i,a,o,s,l=this;return function(t){var n;return n=t,e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(n),u};function u(o){return 33===o?(e.consume(o),d):47===o?(e.consume(o),i=!0,m):63===o?(e.consume(o),r=3,l.interrupt?t:O):tz(o)?(e.consume(o),a=String.fromCharCode(o),h):n(o)}function d(i){return 45===i?(e.consume(i),r=2,c):91===i?(e.consume(i),r=5,o=0,p):tz(i)?(e.consume(i),r=4,l.interrupt?t:O):n(i)}function c(r){return 45===r?(e.consume(r),l.interrupt?t:O):n(r)}function p(r){let i="CDATA[";return r===i.charCodeAt(o++)?(e.consume(r),o===i.length)?l.interrupt?t:S:p:n(r)}function m(t){return tz(t)?(e.consume(t),a=String.fromCharCode(t),h):n(t)}function h(o){if(null===o||47===o||62===o||tG(o)){let s=47===o,u=a.toLowerCase();return!s&&!i&&nI.includes(u)?(r=1,l.interrupt?t(o):S(o)):nS.includes(a.toLowerCase())?(r=6,s)?(e.consume(o),f):l.interrupt?t(o):S(o):(r=7,l.interrupt&&!l.parser.lazy[l.now().line]?n(o):i?function t(n){return tq(n)?(e.consume(n),t):k(n)}(o):g(o))}return 45===o||tL(o)?(e.consume(o),a+=String.fromCharCode(o),h):n(o)}function f(r){return 62===r?(e.consume(r),l.interrupt?t:S):n(r)}function g(t){return 47===t?(e.consume(t),k):58===t||95===t||tz(t)?(e.consume(t),y):tq(t)?(e.consume(t),g):k(t)}function y(t){return 45===t||46===t||58===t||95===t||tL(t)?(e.consume(t),y):v(t)}function v(t){return 61===t?(e.consume(t),b):tq(t)?(e.consume(t),v):g(t)}function b(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),s=t,x):tq(t)?(e.consume(t),b):function t(n){return null===n||34===n||39===n||47===n||60===n||61===n||62===n||96===n||tG(n)?v(n):(e.consume(n),t)}(t)}function x(t){return t===s?(e.consume(t),s=null,_):null===t||tV(t)?n(t):(e.consume(t),x)}function _(e){return 47===e||62===e||tq(e)?g(e):n(e)}function k(t){return 62===t?(e.consume(t),w):n(t)}function w(t){return null===t||tV(t)?S(t):tq(t)?(e.consume(t),w):n(t)}function S(t){return 45===t&&2===r?(e.consume(t),A):60===t&&1===r?(e.consume(t),P):62===t&&4===r?(e.consume(t),R):63===t&&3===r?(e.consume(t),O):93===t&&5===r?(e.consume(t),$):tV(t)&&(6===r||7===r)?(e.exit("htmlFlowData"),e.check(nT,D,I)(t)):null===t||tV(t)?(e.exit("htmlFlowData"),I(t)):(e.consume(t),S)}function I(t){return e.check(nC,T,D)(t)}function T(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),C}function C(t){return null===t||tV(t)?I(t):(e.enter("htmlFlowData"),S(t))}function A(t){return 45===t?(e.consume(t),O):S(t)}function P(t){return 47===t?(e.consume(t),a="",E):S(t)}function E(t){if(62===t){let n=a.toLowerCase();return nI.includes(n)?(e.consume(t),R):S(t)}return tz(t)&&a.length<8?(e.consume(t),a+=String.fromCharCode(t),E):S(t)}function $(t){return 93===t?(e.consume(t),O):S(t)}function O(t){return 62===t?(e.consume(t),R):45===t&&2===r?(e.consume(t),O):S(t)}function R(t){return null===t||tV(t)?(e.exit("htmlFlowData"),D(t)):(e.consume(t),R)}function D(n){return e.exit("htmlFlow"),t(n)}}},61:nz,95:nj,96:nf,126:nf},"flowInitial",0,{[-2]:ng,[-1]:ng,32:ng},"insideSpan",0,{null:[ns,t7]},"string",0,{38:nm,92:nd},"text",0,{[-5]:nD,[-4]:nD,[-3]:nD,33:nO,38:nm,42:ns,60:[{name:"autolink",tokenize:function(e,t,n){let r=0;return function(t){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i};function i(t){return tz(t)?(e.consume(t),a):64===t?n(t):s(t)}function a(t){return 43===t||45===t||46===t||tL(t)?(r=1,function t(n){return 58===n?(e.consume(n),r=0,o):(43===n||45===n||46===n||tL(n))&&r++<32?(e.consume(n),t):(r=0,s(n))}(t)):s(t)}function o(r){return 62===r?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(r),e.exit("autolinkMarker"),e.exit("autolink"),t):null===r||32===r||60===r||tZ(r)?n(r):(e.consume(r),o)}function s(t){return 64===t?(e.consume(t),l):tF(t)?(e.consume(t),s):n(t)}function l(i){return tL(i)?function i(a){return 46===a?(e.consume(a),r=0,l):62===a?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(a),e.exit("autolinkMarker"),e.exit("autolink"),t):function t(a){if((45===a||tL(a))&&r++<63){let n=45===a?t:i;return e.consume(a),n}return n(a)}(a)}(i):n(i)}}},{name:"htmlText",tokenize:function(e,t,n){let r,i,a,o=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),s};function s(t){return 33===t?(e.consume(t),l):47===t?(e.consume(t),x):63===t?(e.consume(t),v):tz(t)?(e.consume(t),k):n(t)}function l(t){return 45===t?(e.consume(t),u):91===t?(e.consume(t),i=0,m):tz(t)?(e.consume(t),y):n(t)}function u(t){return 45===t?(e.consume(t),p):n(t)}function d(t){return null===t?n(t):45===t?(e.consume(t),c):tV(t)?(a=d,E(t)):(e.consume(t),d)}function c(t){return 45===t?(e.consume(t),p):d(t)}function p(e){return 62===e?P(e):45===e?c(e):d(e)}function m(t){let r="CDATA[";return t===r.charCodeAt(i++)?(e.consume(t),i===r.length?h:m):n(t)}function h(t){return null===t?n(t):93===t?(e.consume(t),f):tV(t)?(a=h,E(t)):(e.consume(t),h)}function f(t){return 93===t?(e.consume(t),g):h(t)}function g(t){return 62===t?P(t):93===t?(e.consume(t),g):h(t)}function y(t){return null===t||62===t?P(t):tV(t)?(a=y,E(t)):(e.consume(t),y)}function v(t){return null===t?n(t):63===t?(e.consume(t),b):tV(t)?(a=v,E(t)):(e.consume(t),v)}function b(e){return 62===e?P(e):v(e)}function x(t){return tz(t)?(e.consume(t),_):n(t)}function _(t){return 45===t||tL(t)?(e.consume(t),_):function t(n){return tV(n)?(a=t,E(n)):tq(n)?(e.consume(n),t):P(n)}(t)}function k(t){return 45===t||tL(t)?(e.consume(t),k):47===t||62===t||tG(t)?w(t):n(t)}function w(t){return 47===t?(e.consume(t),P):58===t||95===t||tz(t)?(e.consume(t),S):tV(t)?(a=w,E(t)):tq(t)?(e.consume(t),w):P(t)}function S(t){return 45===t||46===t||58===t||95===t||tL(t)?(e.consume(t),S):function t(n){return 61===n?(e.consume(n),I):tV(n)?(a=t,E(n)):tq(n)?(e.consume(n),t):w(n)}(t)}function I(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),r=t,T):tV(t)?(a=I,E(t)):tq(t)?(e.consume(t),I):(e.consume(t),C)}function T(t){return t===r?(e.consume(t),r=void 0,A):null===t?n(t):tV(t)?(a=T,E(t)):(e.consume(t),T)}function C(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):47===t||62===t||tG(t)?w(t):(e.consume(t),C)}function A(e){return 47===e||62===e||tG(e)?w(e):n(e)}function P(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),t):n(r)}function E(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),$}function $(t){return tq(t)?tX(e,O,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):O(t)}function O(t){return e.enter("htmlTextData"),a(t)}}}],91:nR,92:[{name:"hardBreakEscape",tokenize:function(e,t,n){return function(t){return e.enter("hardBreakEscape"),e.consume(t),r};function r(r){return tV(r)?(e.exit("hardBreakEscape"),t(r)):n(r)}}},nd],93:nA,95:ns,96:{name:"codeText",previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type},resolve:function(e){let t,n,r=e.length-4,i=3;if(("lineEnding"===e[3][1].type||"space"===e[i][1].type)&&("lineEnding"===e[r][1].type||"space"===e[r][1].type)){for(t=i;++t<r;)if("codeTextData"===e[t][1].type){e[i][1].type="codeTextPadding",e[r][1].type="codeTextPadding",i+=2,r-=2;break}}for(t=i-1,r++;++t<=r;)void 0===n?t!==r&&"lineEnding"!==e[t][1].type&&(n=t):(t===r||"lineEnding"===e[t][1].type)&&(e[n][1].type="codeTextData",t!==n+2&&(e[n][1].end=e[t-1][1].end,e.splice(n+2,t-n-2),r-=t-n-2,t=n+2),n=void 0);return e},tokenize:function(e,t,n){let r,i,a=0;return function(t){return e.enter("codeText"),e.enter("codeTextSequence"),function t(n){return 96===n?(e.consume(n),a++,t):(e.exit("codeTextSequence"),o(n))}(t)};function o(l){return null===l?n(l):32===l?(e.enter("space"),e.consume(l),e.exit("space"),o):96===l?(i=e.enter("codeTextSequence"),r=0,function n(o){return 96===o?(e.consume(o),r++,n):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),t(o)):(i.type="codeTextData",s(o))}(l)):tV(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),o):(e.enter("codeTextData"),s(l))}function s(t){return null===t||32===t||96===t||tV(t)?(e.exit("codeTextData"),o(t)):(e.consume(t),s)}}}}],119210);var nL=e.i(119210);let nF=/[\0\t\n\r]/g;function nZ(e,t){let n=Number.parseInt(e,t);return n<9||11===n||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(65535&n)==65535||(65535&n)==65534||n>1114111?"�":String.fromCodePoint(n)}let nB=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function nH(e,t,n){if(t)return t;if(35===n.charCodeAt(0)){let e=n.charCodeAt(1),t=120===e||88===e;return nZ(n.slice(t?2:1),t?16:10)}return np(n)||e}let nK={}.hasOwnProperty;function nV(e){return{line:e.line,column:e.column,offset:e.offset}}function nG(e,t){if(e)throw Error("Cannot close `"+e.type+"` ("+tc({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+tc({start:t.start,end:t.end})+") is open");throw Error("Cannot close document, a token (`"+t.type+"`, "+tc({start:t.start,end:t.end})+") is still open")}function nq(e){let t=this;t.parser=function(n){var r,i;let a,o,s,l;return"string"!=typeof(r={...t.data("settings"),...e,extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]})&&(i=r,r=void 0),(function(e){let t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:r(y),autolinkProtocol:u,autolinkEmail:u,atxHeading:r(h),blockQuote:r(function(){return{type:"blockquote",children:[]}}),characterEscape:u,characterReference:u,codeFenced:r(m),codeFencedFenceInfo:i,codeFencedFenceMeta:i,codeIndented:r(m,i),codeText:r(function(){return{type:"inlineCode",value:""}},i),codeTextData:u,data:u,codeFlowValue:u,definition:r(function(){return{type:"definition",identifier:"",label:null,title:null,url:""}}),definitionDestinationString:i,definitionLabelString:i,definitionTitleString:i,emphasis:r(function(){return{type:"emphasis",children:[]}}),hardBreakEscape:r(f),hardBreakTrailing:r(f),htmlFlow:r(g,i),htmlFlowData:u,htmlText:r(g,i),htmlTextData:u,image:r(function(){return{type:"image",title:null,url:"",alt:null}}),label:i,link:r(y),listItem:r(function(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}),listItemValue:function(e){this.data.expectingFirstListItemValue&&(this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),this.data.expectingFirstListItemValue=void 0)},listOrdered:r(v,function(){this.data.expectingFirstListItemValue=!0}),listUnordered:r(v),paragraph:r(function(){return{type:"paragraph",children:[]}}),reference:function(){this.data.referenceType="collapsed"},referenceString:i,resourceDestinationString:i,resourceTitleString:i,setextHeading:r(h),strong:r(function(){return{type:"strong",children:[]}}),thematicBreak:r(function(){return{type:"thematicBreak"}})},exit:{atxHeading:o(),atxHeadingSequence:function(e){let t=this.stack[this.stack.length-1];t.depth||(t.depth=this.sliceSerialize(e).length)},autolink:o(),autolinkEmail:function(e){d.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)},autolinkProtocol:function(e){d.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)},blockQuote:o(),characterEscapeValue:d,characterReferenceMarkerHexadecimal:p,characterReferenceMarkerNumeric:p,characterReferenceValue:function(e){let t,n=this.sliceSerialize(e),r=this.data.characterReferenceType;r?(t=nZ(n,"characterReferenceMarkerNumeric"===r?10:16),this.data.characterReferenceType=void 0):t=np(n);let i=this.stack[this.stack.length-1];i.value+=t},characterReference:function(e){this.stack.pop().position.end=nV(e.end)},codeFenced:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}),codeFencedFence:function(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)},codeFencedFenceInfo:function(){let e=this.resume();this.stack[this.stack.length-1].lang=e},codeFencedFenceMeta:function(){let e=this.resume();this.stack[this.stack.length-1].meta=e},codeFlowValue:d,codeIndented:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")}),codeText:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),codeTextData:d,data:d,definition:o(),definitionDestinationString:function(){let e=this.resume();this.stack[this.stack.length-1].url=e},definitionLabelString:function(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=nk(this.sliceSerialize(e)).toLowerCase()},definitionTitleString:function(){let e=this.resume();this.stack[this.stack.length-1].title=e},emphasis:o(),hardBreakEscape:o(c),hardBreakTrailing:o(c),htmlFlow:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),htmlFlowData:d,htmlText:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),htmlTextData:d,image:o(function(){let e=this.stack[this.stack.length-1];if(this.data.inReference){let t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0}),label:function(){let e=this.stack[this.stack.length-1],t=this.resume(),n=this.stack[this.stack.length-1];this.data.inReference=!0,"link"===n.type?n.children=e.children:n.alt=t},labelText:function(e){let t=this.sliceSerialize(e),n=this.stack[this.stack.length-2];n.label=t.replace(nB,nH),n.identifier=nk(t).toLowerCase()},lineEnding:function(e){let n=this.stack[this.stack.length-1];if(this.data.atHardBreak){n.children[n.children.length-1].position.end=nV(e.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(n.type)&&(u.call(this,e),d.call(this,e))},link:o(function(){let e=this.stack[this.stack.length-1];if(this.data.inReference){let t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0}),listItem:o(),listOrdered:o(),listUnordered:o(),paragraph:o(),referenceString:function(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=nk(this.sliceSerialize(e)).toLowerCase(),this.data.referenceType="full"},resourceDestinationString:function(){let e=this.resume();this.stack[this.stack.length-1].url=e},resourceTitleString:function(){let e=this.resume();this.stack[this.stack.length-1].title=e},resource:function(){this.data.inReference=void 0},setextHeading:o(function(){this.data.setextHeadingSlurpLineEnding=void 0}),setextHeadingLineSequence:function(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).codePointAt(0)?1:2},setextHeadingText:function(){this.data.setextHeadingSlurpLineEnding=!0},strong:o(),thematicBreak:o()}};!function e(t,n){let r=-1;for(;++r<n.length;){let i=n[r];Array.isArray(i)?e(t,i):function(e,t){let n;for(n in t)if(nK.call(t,n))switch(n){case"canContainEols":{let r=t[n];r&&e[n].push(...r);break}case"transforms":{let r=t[n];r&&e[n].push(...r);break}case"enter":case"exit":{let r=t[n];r&&Object.assign(e[n],r)}}}(t,i)}}(t,(e||{}).mdastExtensions||[]);let n={};return function(e){let r={type:"root",children:[]},o={stack:[r],tokenStack:[],config:t,enter:a,exit:s,buffer:i,resume:l,data:n},u=[],d=-1;for(;++d<e.length;)("listOrdered"===e[d][1].type||"listUnordered"===e[d][1].type)&&("enter"===e[d][0]?u.push(d):d=function(e,t,n){let r,i,a,o,s=t-1,l=-1,u=!1;for(;++s<=n;){let t=e[s];switch(t[1].type){case"listUnordered":case"listOrdered":case"blockQuote":"enter"===t[0]?l++:l--,o=void 0;break;case"lineEndingBlank":"enter"===t[0]&&(!r||o||l||a||(a=s),o=void 0);break;case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:o=void 0}if(!l&&"enter"===t[0]&&"listItemPrefix"===t[1].type||-1===l&&"exit"===t[0]&&("listUnordered"===t[1].type||"listOrdered"===t[1].type)){if(r){let o=s;for(i=void 0;o--;){let t=e[o];if("lineEnding"===t[1].type||"lineEndingBlank"===t[1].type){if("exit"===t[0])continue;i&&(e[i][1].type="lineEndingBlank",u=!0),t[1].type="lineEnding",i=o}else if("linePrefix"===t[1].type||"blockQuotePrefix"===t[1].type||"blockQuotePrefixWhitespace"===t[1].type||"blockQuoteMarker"===t[1].type||"listItemIndent"===t[1].type);else break}a&&(!i||a<i)&&(r._spread=!0),r.end=Object.assign({},i?e[i][1].start:t[1].end),e.splice(i||s,0,["exit",r,t[2]]),s++,n++}if("listItemPrefix"===t[1].type){let i={type:"listItem",_spread:!1,start:Object.assign({},t[1].start),end:void 0};r=i,e.splice(s,0,["enter",i,t[2]]),s++,n++,a=void 0,o=!0}}}return e[t][1]._spread=u,n}(e,u.pop(),d));for(d=-1;++d<e.length;){let n=t[e[d][0]];nK.call(n,e[d][1].type)&&n[e[d][1].type].call(Object.assign({sliceSerialize:e[d][2].sliceSerialize},o),e[d][1])}if(o.tokenStack.length>0){let e=o.tokenStack[o.tokenStack.length-1];(e[1]||nG).call(o,void 0,e[0])}for(r.position={start:nV(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:nV(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},d=-1;++d<t.transforms.length;)r=t.transforms[d](r)||r;return r};function r(e,t){return function(n){a.call(this,e(n),n),t&&t.call(this,n)}}function i(){this.stack.push({type:"fragment",children:[]})}function a(e,t,n){this.stack[this.stack.length-1].children.push(e),this.stack.push(e),this.tokenStack.push([t,n||void 0]),e.position={start:nV(t.start),end:void 0}}function o(e){return function(t){e&&e.call(this,t),s.call(this,t)}}function s(e,t){let n=this.stack.pop(),r=this.tokenStack.pop();if(r)r[0].type!==e.type&&(t?t.call(this,e,r[0]):(r[1]||nG).call(this,e,r[0]));else throw Error("Cannot close `"+e.type+"` ("+tc({start:e.start,end:e.end})+"): it’s not open");n.position.end=nV(e.end)}function l(){return tO(this.stack.pop())}function u(e){let t=this.stack[this.stack.length-1].children,n=t[t.length-1];n&&"text"===n.type||((n={type:"text",value:""}).position={start:nV(e.start),end:void 0},t.push(n)),this.stack.push(n)}function d(e){let t=this.stack.pop();t.value+=this.sliceSerialize(e),t.position.end=nV(e.end)}function c(){this.data.atHardBreak=!0}function p(e){this.data.characterReferenceType=e.type}function m(){return{type:"code",lang:null,meta:null,value:""}}function h(){return{type:"heading",depth:0,children:[]}}function f(){return{type:"break"}}function g(){return{type:"html",value:""}}function y(){return{type:"link",title:null,url:"",children:[]}}function v(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}})(i)(function(e){for(;!t9(e););return e}((function(e){let t={constructs:tM([nL,...(e||{}).extensions||[]]),content:n(tQ),defined:[],document:n(t0),flow:n(t8),lazy:{},string:n(ne),text:n(nt)};return t;function n(e){return function(n){return function(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},i={},a=[],o=[],s=[],l={attempt:h(function(e,t){f(e,t.from)}),check:h(m),consume:function(e){tV(e)?(r.line++,r.column=1,r.offset+=-3===e?2:1,g()):-1!==e&&(r.column++,r.offset++),r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++)),u.previous=e},enter:function(e,t){let n=t||{};return n.type=e,n.start=p(),u.events.push(["enter",n,u]),s.push(n),n},exit:function(e){let t=s.pop();return t.end=p(),u.events.push(["exit",t,u]),t},interrupt:h(m,{interrupt:!0})},u={code:null,containerState:{},defineSkip:function(e){i[e.line]=e.column,g()},events:[],now:p,parser:e,previous:null,sliceSerialize:function(e,t){return function(e,t){let n,r=-1,i=[];for(;++r<e.length;){let a,o=e[r];if("string"==typeof o)a=o;else switch(o){case -5:a="\r";break;case -4:a="\n";break;case -3:a="\r\n";break;case -2:a=t?" ":" ";break;case -1:if(!t&&n)continue;a=" ";break;default:a=String.fromCharCode(o)}n=-2===o,i.push(a)}return i.join("")}(c(e),t)},sliceStream:c,write:function(e){return(o=tU(o,e),function(){let e;for(;r._index<o.length;){let n=o[r._index];if("string"==typeof n)for(e=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===e&&r._bufferIndex<n.length;){var t;t=n.charCodeAt(r._bufferIndex),d=d(t)}else d=d(n)}}(),null!==o[o.length-1])?[]:(f(t,0),u.events=no(a,u.events,u),u.events)}},d=t.tokenize.call(u,l);return t.resolveAll&&a.push(t),u;function c(e){return function(e,t){let n,r=t.start._index,i=t.start._bufferIndex,a=t.end._index,o=t.end._bufferIndex;if(r===a)n=[e[r].slice(i,o)];else{if(n=e.slice(r,a),i>-1){let e=n[0];"string"==typeof e?n[0]=e.slice(i):n.shift()}o>0&&n.push(e[a].slice(0,o))}return n}(o,e)}function p(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:a}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:a}}function m(e,t){t.restore()}function h(e,t){return function(n,i,a){var o;let d,c,m,h;return Array.isArray(n)?f(n):"tokenize"in n?f([n]):(o=n,function(e){let t=null!==e&&o[e],n=null!==e&&o.null;return f([...Array.isArray(t)?t:t?[t]:[],...Array.isArray(n)?n:n?[n]:[]])(e)});function f(e){return(d=e,c=0,0===e.length)?a:y(e[c])}function y(e){return function(n){let i,a,o,d,c;return(i=p(),a=u.previous,o=u.currentConstruct,d=u.events.length,c=Array.from(s),h={from:d,restore:function(){r=i,u.previous=a,u.currentConstruct=o,u.events.length=d,s=c,g()}},m=e,e.partial||(u.currentConstruct=e),e.name&&u.parser.constructs.disable.null.includes(e.name))?b(n):e.tokenize.call(t?Object.assign(Object.create(u),t):u,l,v,b)(n)}}function v(t){return e(m,h),i}function b(e){return(h.restore(),++c<d.length)?y(d[c]):a}}}function f(e,t){e.resolveAll&&!a.includes(e)&&a.push(e),e.resolve&&tj(u.events,t,u.events.length-t,e.resolve(u.events.slice(t),u)),e.resolveTo&&(u.events=e.resolveTo(u.events,u))}function g(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}(t,e,n)}}})(i).document().write((o=1,s="",l=!0,function(e,t,n){let r,i,u,d,c,p=[];for(e=s+("string"==typeof e?e.toString():new TextDecoder(t||void 0).decode(e)),u=0,s="",l&&(65279===e.charCodeAt(0)&&u++,l=void 0);u<e.length;){if(nF.lastIndex=u,d=(r=nF.exec(e))&&void 0!==r.index?r.index:e.length,c=e.charCodeAt(d),!r){s=e.slice(u);break}if(10===c&&u===d&&a)p.push(-3),a=void 0;else switch(a&&(p.push(-5),a=void 0),u<d&&(p.push(e.slice(u,d)),o+=d-u),c){case 0:p.push(65533),o++;break;case 9:for(i=4*Math.ceil(o/4),p.push(-2);o++<i;)p.push(-1);break;case 10:p.push(-4),o=1;break;default:a=!0,o=1}u=d+1}return n&&(a&&p.push(-5),s&&p.push(s),p.push(null)),p})(n,r,!0))))}}e.s(["default",()=>nq],403010);let nJ="object"==typeof self?self:globalThis,nW=e=>{var t;let n,r;return(t=new Map,n=(e,n)=>(t.set(n,e),e),r=i=>{if(t.has(i))return t.get(i);let[a,o]=e[i];switch(a){case 0:case -1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o;return n(new nJ[e](t),i)}case 8:return n(BigInt(o),i);case"BigInt":return n(Object(BigInt(o)),i);case"ArrayBuffer":return n(new Uint8Array(o).buffer,o);case"DataView":{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}return n(new nJ[a](o),i)})(0)},{toString:nY}={},{keys:nX}=Object,nQ=e=>{let t=typeof e;if("object"!==t||!e)return[0,t];let n=nY.call(e).slice(8,-1);switch(n){case"Array":return[1,""];case"Object":return[2,""];case"Date":return[3,""];case"RegExp":return[4,""];case"Map":return[5,""];case"Set":return[6,""];case"DataView":return[1,n]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},n0=([e,t])=>0===e&&("function"===t||"symbol"===t),n1=(e,{json:t,lossy:n}={})=>{var r,i,a;let o,s,l=[];return(r=!(t||n),i=!!t,a=new Map,o=(e,t)=>{let n=l.push(e)-1;return a.set(t,n),n},s=e=>{if(a.has(e))return a.get(e);let[t,n]=nQ(e);switch(t){case 0:{let i=e;switch(n){case"bigint":t=8,i=e.toString();break;case"function":case"symbol":if(r)throw TypeError("unable to serialize "+n);i=null;break;case"undefined":return o([-1],e)}return o([t,i],e)}case 1:{if(n){let t=e;return"DataView"===n?t=new Uint8Array(e.buffer):"ArrayBuffer"===n&&(t=new Uint8Array(e)),o([n,[...t]],e)}let r=[],i=o([t,r],e);for(let t of e)r.push(s(t));return i}case 2:{if(n)switch(n){case"BigInt":return o([n,e.toString()],e);case"Boolean":case"Number":case"String":return o([n,e.valueOf()],e)}if(i&&"toJSON"in e)return s(e.toJSON());let a=[],l=o([t,a],e);for(let t of nX(e))(r||!n0(nQ(e[t])))&&a.push([s(t),s(e[t])]);return l}case 3:return o([t,e.toISOString()],e);case 4:{let{source:n,flags:r}=e;return o([t,{source:n,flags:r}],e)}case 5:{let n=[],i=o([t,n],e);for(let[t,i]of e)(r||!(n0(nQ(t))||n0(nQ(i))))&&n.push([s(t),s(i)]);return i}case 6:{let n=[],i=o([t,n],e);for(let t of e)(r||!n0(nQ(t)))&&n.push(s(t));return i}}let{message:l}=e;return o([t,{name:n,message:l}],e)})(e),l},n4="function"==typeof structuredClone?(e,t)=>t&&("json"in t||"lossy"in t)?nW(n1(e,t)):structuredClone(e):(e,t)=>nW(n1(e,t));function n6(e){let t=[],n=-1,r=0,i=0;for(;++n<e.length;){let a=e.charCodeAt(n),o="";if(37===a&&tL(e.charCodeAt(n+1))&&tL(e.charCodeAt(n+2)))i=2;else if(a<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(a))||(o=String.fromCharCode(a));else if(a>55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o="�"}else o=String.fromCharCode(a);o&&(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,o=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function n2(e,t){let n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function n9(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}let n5=function(e){var t,n;if(null==e)return n8;if("function"==typeof e)return n3(e);if("object"==typeof e){return Array.isArray(e)?function(e){let t=[],n=-1;for(;++n<e.length;)t[n]=n5(e[n]);return n3(function(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1})}(e):(t=e,n3(function(e){let n;for(n in t)if(e[n]!==t[n])return!1;return!0}))}if("string"==typeof e){return n=e,n3(function(e){return e&&e.type===n})}throw Error("Expected function, string, or object as test")};function n3(e){return function(t,n,r){return!!(function(e){return null!==e&&"object"==typeof e&&"type"in e}(t)&&e.call(this,t,"number"==typeof n?n:void 0,r||void 0))}}function n8(){return!0}let n7=[];function re(e,t,n,r){let i;"function"==typeof t&&"function"!=typeof n?(r=n,n=t):i=t;let a=n5(i),o=r?-1:1;(function e(i,s,l){let u=i&&"object"==typeof i?i:{};if("string"==typeof u.type){let e="string"==typeof u.tagName?u.tagName:"string"==typeof u.name?u.name:void 0;Object.defineProperty(d,"name",{value:"node ("+i.type+(e?"<"+e+">":"")+")"})}return d;function d(){var u;let d,c,p,m=n7;if((!t||a(i,s,l[l.length-1]||void 0))&&!1===(m=Array.isArray(u=n(i,l))?u:"number"==typeof u?[!0,u]:null==u?n7:[u])[0])return m;if("children"in i&&i.children&&i.children&&"skip"!==m[0])for(c=(r?i.children.length:-1)+o,p=l.concat(i);c>-1&&c<i.children.length;){if(!1===(d=e(i.children[c],c,p)())[0])return d;c="number"==typeof d[1]?d[1]:c+o}return m}})(e,void 0,[])()}function rt(e,t,n,r){let i,a,o;"function"==typeof t&&"function"!=typeof n?(a=void 0,o=t,i=n):(a=t,o=n,i=r),re(e,a,function(e,t){let n=t[t.length-1],r=n?n.children.indexOf(e):void 0;return o(e,r,n)},i)}function rn(e,t){let n=t.referenceType,r="]";if("collapsed"===n?r+="[]":"full"===n&&(r+="["+(t.label||t.identifier)+"]"),"imageReference"===t.type)return[{type:"text",value:"!["+t.alt+r}];let i=e.all(t),a=i[0];a&&"text"===a.type?a.value="["+a.value:i.unshift({type:"text",value:"["});let o=i[i.length-1];return o&&"text"===o.type?o.value+=r:i.push({type:"text",value:r}),i}function rr(e){let t=e.spread;return null==t?e.children.length>1:t}function ri(e,t,n){let r=0,i=e.length;if(t){let t=e.codePointAt(r);for(;9===t||32===t;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(i-1);for(;9===t||32===t;)i--,t=e.codePointAt(i-1)}return i>r?e.slice(r,i):""}e.s(["visit",()=>rt],446207);let ra={blockquote:function(e,t){let n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)},break:function(e,t){let n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:"\n"}]},code:function(e,t){let n=t.value?t.value+"\n":"",r={};t.lang&&(r.className=["language-"+t.lang]);let i={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i={type:"element",tagName:"pre",properties:{},children:[i=e.applyData(t,i)]},e.patch(t,i),i},delete:function(e,t){let n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},emphasis:function(e,t){let n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},footnoteReference:function(e,t){let n,r="string"==typeof e.options.clobberPrefix?e.options.clobberPrefix:"user-content-",i=String(t.identifier).toUpperCase(),a=n6(i.toLowerCase()),o=e.footnoteOrder.indexOf(i),s=e.footnoteCounts.get(i);void 0===s?(s=0,e.footnoteOrder.push(i),n=e.footnoteOrder.length):n=o+1,s+=1,e.footnoteCounts.set(i,s);let l={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(n)}]};e.patch(t,l);let u={type:"element",tagName:"sup",properties:{},children:[l]};return e.patch(t,u),e.applyData(t,u)},heading:function(e,t){let n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},html:function(e,t){if(e.options.allowDangerousHtml){let n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}},imageReference:function(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return rn(e,t);let i={src:n6(r.url||""),alt:t.alt};null!==r.title&&void 0!==r.title&&(i.title=r.title);let a={type:"element",tagName:"img",properties:i,children:[]};return e.patch(t,a),e.applyData(t,a)},image:function(e,t){let n={src:n6(t.url)};null!==t.alt&&void 0!==t.alt&&(n.alt=t.alt),null!==t.title&&void 0!==t.title&&(n.title=t.title);let r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)},inlineCode:function(e,t){let n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);let r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)},linkReference:function(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return rn(e,t);let i={href:n6(r.url||"")};null!==r.title&&void 0!==r.title&&(i.title=r.title);let a={type:"element",tagName:"a",properties:i,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)},link:function(e,t){let n={href:n6(t.url)};null!==t.title&&void 0!==t.title&&(n.title=t.title);let r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)},listItem:function(e,t,n){let r=e.all(t),i=n?function(e){let t=!1;if("list"===e.type){t=e.spread||!1;let n=e.children,r=-1;for(;!t&&++r<n.length;)t=rr(n[r])}return t}(n):rr(t),a={},o=[];if("boolean"==typeof t.checked){let e,n=r[0];n&&"element"===n.type&&"p"===n.tagName?e=n:(e={type:"element",tagName:"p",properties:{},children:[]},r.unshift(e)),e.children.length>0&&e.children.unshift({type:"text",value:" "}),e.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),a.className=["task-list-item"]}let s=-1;for(;++s<r.length;){let e=r[s];(i||0!==s||"element"!==e.type||"p"!==e.tagName)&&o.push({type:"text",value:"\n"}),"element"!==e.type||"p"!==e.tagName||i?o.push(e):o.push(...e.children)}let l=r[r.length-1];l&&(i||"element"!==l.type||"p"!==l.tagName)&&o.push({type:"text",value:"\n"});let u={type:"element",tagName:"li",properties:a,children:o};return e.patch(t,u),e.applyData(t,u)},list:function(e,t){let n={},r=e.all(t),i=-1;for("number"==typeof t.start&&1!==t.start&&(n.start=t.start);++i<r.length;){let e=r[i];if("element"===e.type&&"li"===e.tagName&&e.properties&&Array.isArray(e.properties.className)&&e.properties.className.includes("task-list-item")){n.className=["contains-task-list"];break}}let a={type:"element",tagName:t.ordered?"ol":"ul",properties:n,children:e.wrap(r,!0)};return e.patch(t,a),e.applyData(t,a)},paragraph:function(e,t){let n={type:"element",tagName:"p",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},root:function(e,t){let n={type:"root",children:e.wrap(e.all(t))};return e.patch(t,n),e.applyData(t,n)},strong:function(e,t){let n={type:"element",tagName:"strong",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},table:function(e,t){let n=e.all(t),r=n.shift(),i=[];if(r){let n={type:"element",tagName:"thead",properties:{},children:e.wrap([r],!0)};e.patch(t.children[0],n),i.push(n)}if(n.length>0){let r={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},a=tu(t.children[1]),o=tl(t.children[t.children.length-1]);a&&o&&(r.position={start:a,end:o}),i.push(r)}let a={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(t,a),e.applyData(t,a)},tableCell:function(e,t){let n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},tableRow:function(e,t,n){let r=n?n.children:void 0,i=0===(r?r.indexOf(t):1)?"th":"td",a=n&&"table"===n.type?n.align:void 0,o=a?a.length:t.children.length,s=-1,l=[];for(;++s<o;){let n=t.children[s],r={},o=a?a[s]:void 0;o&&(r.align=o);let u={type:"element",tagName:i,properties:r,children:[]};n&&(u.children=e.all(n),e.patch(n,u),u=e.applyData(n,u)),l.push(u)}let u={type:"element",tagName:"tr",properties:{},children:e.wrap(l,!0)};return e.patch(t,u),e.applyData(t,u)},text:function(e,t){let n={type:"text",value:function(e){let t=String(e),n=/\r?\n|\r/g,r=n.exec(t),i=0,a=[];for(;r;)a.push(ri(t.slice(i,r.index),i>0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return a.push(ri(t.slice(i),i>0,!1)),a.join("")}(String(t.value))};return e.patch(t,n),e.applyData(t,n)},thematicBreak:function(e,t){let n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)},toml:ro,yaml:ro,definition:ro,footnoteDefinition:ro};function ro(){}let rs={}.hasOwnProperty,rl={};function ru(e,t){e.position&&(t.position=function(e){let t=tu(e),n=tl(e);if(t&&n)return{start:t,end:n}}(e))}function rd(e,t){let n=t;if(e&&e.data){let t=e.data.hName,r=e.data.hChildren,i=e.data.hProperties;"string"==typeof t&&("element"===n.type?n.tagName=t:n={type:"element",tagName:t,properties:{},children:"children"in n?n.children:[n]}),"element"===n.type&&i&&Object.assign(n.properties,n4(i)),"children"in n&&n.children&&null!=r&&(n.children=r)}return n}function rc(e,t){let n=[],r=-1;for(t&&n.push({type:"text",value:"\n"});++r<e.length;)r&&n.push({type:"text",value:"\n"}),n.push(e[r]);return t&&e.length>0&&n.push({type:"text",value:"\n"}),n}function rp(e){let t=0,n=e.charCodeAt(t);for(;9===n||32===n;)t++,n=e.charCodeAt(t);return e.slice(t)}function rm(e,t){let n,r,i,a,o=(n=t||rl,r=new Map,i=new Map,a={all:function(e){let t=[];if("children"in e){let n=e.children,r=-1;for(;++r<n.length;){let i=a.one(n[r],e);if(i){if(r&&"break"===n[r-1].type&&(Array.isArray(i)||"text"!==i.type||(i.value=rp(i.value)),!Array.isArray(i)&&"element"===i.type)){let e=i.children[0];e&&"text"===e.type&&(e.value=rp(e.value))}Array.isArray(i)?t.push(...i):t.push(i)}}}return t},applyData:rd,definitionById:r,footnoteById:i,footnoteCounts:new Map,footnoteOrder:[],handlers:{...ra,...n.handlers},one:function(e,t){let n=e.type,r=a.handlers[n];if(rs.call(a.handlers,n)&&r)return r(a,e,t);if(a.options.passThrough&&a.options.passThrough.includes(n)){if("children"in e){let{children:t,...n}=e,r=n4(n);return r.children=a.all(e),r}return n4(e)}return(a.options.unknownHandler||function(e,t){let n=t.data||{},r="value"in t&&!(rs.call(n,"hProperties")||rs.call(n,"hChildren"))?{type:"text",value:t.value}:{type:"element",tagName:"div",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)})(a,e,t)},options:n,patch:ru,wrap:rc},rt(e,function(e){if("definition"===e.type||"footnoteDefinition"===e.type){let t="definition"===e.type?r:i,n=String(e.identifier).toUpperCase();t.has(n)||t.set(n,e)}}),a),s=o.one(e,void 0),l=function(e){let t="string"==typeof e.options.clobberPrefix?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||n2,r=e.options.footnoteBackLabel||n9,i=e.options.footnoteLabel||"Footnotes",a=e.options.footnoteLabelTagName||"h2",o=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[],l=-1;for(;++l<e.footnoteOrder.length;){let i=e.footnoteById.get(e.footnoteOrder[l]);if(!i)continue;let a=e.all(i),o=String(i.identifier).toUpperCase(),u=n6(o.toLowerCase()),d=0,c=[],p=e.footnoteCounts.get(o);for(;void 0!==p&&++d<=p;){c.length>0&&c.push({type:"text",value:" "});let e="string"==typeof n?n:n(l,d);"string"==typeof e&&(e={type:"text",value:e}),c.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+u+(d>1?"-"+d:""),dataFootnoteBackref:"",ariaLabel:"string"==typeof r?r:r(l,d),className:["data-footnote-backref"]},children:Array.isArray(e)?e:[e]})}let m=a[a.length-1];if(m&&"element"===m.type&&"p"===m.tagName){let e=m.children[m.children.length-1];e&&"text"===e.type?e.value+=" ":m.children.push({type:"text",value:" "}),m.children.push(...c)}else a.push(...c);let h={type:"element",tagName:"li",properties:{id:t+"fn-"+u},children:e.wrap(a,!0)};e.patch(i,h),s.push(h)}if(0!==s.length)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:a,properties:{...n4(o),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:"\n"}]}}(o),u=Array.isArray(s)?{type:"root",children:s}:s||{type:"root",children:[]};return l&&(eE("children"in u),u.children.push({type:"text",value:"\n"},l)),u}function rh(e,t){return e&&"run"in e?async function(n,r){let i=rm(n,{file:r,...t});await e.run(i,r)}:function(n,r){return rm(n,{file:r,...e||t})}}function rf(e){if(e)throw e}e.s(["default",()=>rh],652652);var rg=e.i(975609);function ry(e){if("object"!=typeof e||null===e)return!1;let t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}let rv=function(e,t){let n;if(void 0!==t&&"string"!=typeof t)throw TypeError('"ext" argument must be a string');rk(e);let r=0,i=-1,a=e.length;if(void 0===t||0===t.length||t.length>e.length){for(;a--;)if(47===e.codePointAt(a)){if(n){r=a+1;break}}else i<0&&(n=!0,i=a+1);return i<0?"":e.slice(r,i)}if(t===e)return"";let o=-1,s=t.length-1;for(;a--;)if(47===e.codePointAt(a)){if(n){r=a+1;break}}else o<0&&(n=!0,o=a+1),s>-1&&(e.codePointAt(a)===t.codePointAt(s--)?s<0&&(i=a):(s=-1,i=o));return r===i?i=o:i<0&&(i=e.length),e.slice(r,i)},rb=function(e){let t;if(rk(e),0===e.length)return".";let n=-1,r=e.length;for(;--r;)if(47===e.codePointAt(r)){if(t){n=r;break}}else t||(t=!0);return n<0?47===e.codePointAt(0)?"/":".":1===n&&47===e.codePointAt(0)?"//":e.slice(0,n)},rx=function(e){let t;rk(e);let n=e.length,r=-1,i=0,a=-1,o=0;for(;n--;){let s=e.codePointAt(n);if(47===s){if(t){i=n+1;break}continue}r<0&&(t=!0,r=n+1),46===s?a<0?a=n:1!==o&&(o=1):a>-1&&(o=-1)}return a<0||r<0||0===o||1===o&&a===r-1&&a===i+1?"":e.slice(a,r)},r_=function(...e){var t;let n,r,i,a=-1;for(;++a<e.length;)rk(e[a]),e[a]&&(i=void 0===i?e[a]:i+"/"+e[a]);return void 0===i?".":(rk(t=i),n=47===t.codePointAt(0),0!==(r=function(e,t){let n,r,i="",a=0,o=-1,s=0,l=-1;for(;++l<=e.length;){if(l<e.length)n=e.codePointAt(l);else if(47===n)break;else n=47;if(47===n){if(o===l-1||1===s);else if(o!==l-1&&2===s){if(i.length<2||2!==a||46!==i.codePointAt(i.length-1)||46!==i.codePointAt(i.length-2)){if(i.length>2){if((r=i.lastIndexOf("/"))!==i.length-1){r<0?(i="",a=0):a=(i=i.slice(0,r)).length-1-i.lastIndexOf("/"),o=l,s=0;continue}}else if(i.length>0){i="",a=0,o=l,s=0;continue}}t&&(i=i.length>0?i+"/..":"..",a=2)}else i.length>0?i+="/"+e.slice(o+1,l):i=e.slice(o+1,l),a=l-o-1;o=l,s=0}else 46===n&&s>-1?s++:s=-1}return i}(t,!n)).length||n||(r="."),r.length>0&&47===t.codePointAt(t.length-1)&&(r+="/"),n?"/"+r:r)};function rk(e){if("string"!=typeof e)throw TypeError("Path must be a string. Received "+JSON.stringify(e))}function rw(e){return!!(null!==e&&"object"==typeof e&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&void 0===e.auth)}let rS=["history","path","basename","stem","extname","dirname"];class rI{constructor(e){let t,n;t=e?rw(e)?{path:e}:"string"==typeof e||function(e){return!!(e&&"object"==typeof e&&"byteLength"in e&&"byteOffset"in e)}(e)?{value:e}:e:{},this.cwd="cwd"in t?"":"/",this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let r=-1;for(;++r<rS.length;){const e=rS[r];e in t&&void 0!==t[e]&&null!==t[e]&&(this[e]="history"===e?[...t[e]]:t[e])}for(n in t)rS.includes(n)||(this[n]=t[n])}get basename(){return"string"==typeof this.path?rv(this.path):void 0}set basename(e){rC(e,"basename"),rT(e,"basename"),this.path=r_(this.dirname||"",e)}get dirname(){return"string"==typeof this.path?rb(this.path):void 0}set dirname(e){rA(this.basename,"dirname"),this.path=r_(e||"",this.basename)}get extname(){return"string"==typeof this.path?rx(this.path):void 0}set extname(e){if(rT(e,"extname"),rA(this.dirname,"extname"),e){if(46!==e.codePointAt(0))throw Error("`extname` must start with `.`");if(e.includes(".",1))throw Error("`extname` cannot contain multiple dots")}this.path=r_(this.dirname,this.stem+(e||""))}get path(){return this.history[this.history.length-1]}set path(e){rw(e)&&(e=function(e){if("string"==typeof e)e=new URL(e);else if(!rw(e)){let t=TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if("file:"!==e.protocol){let e=TypeError("The URL must be of scheme file");throw e.code="ERR_INVALID_URL_SCHEME",e}return function(e){if(""!==e.hostname){let e=TypeError('File URL host must be "localhost" or empty on darwin');throw e.code="ERR_INVALID_FILE_URL_HOST",e}let t=e.pathname,n=-1;for(;++n<t.length;)if(37===t.codePointAt(n)&&50===t.codePointAt(n+1)){let e=t.codePointAt(n+2);if(70===e||102===e){let e=TypeError("File URL path must not include encoded / characters");throw e.code="ERR_INVALID_FILE_URL_PATH",e}}return decodeURIComponent(t)}(e)}(e)),rC(e,"path"),this.path!==e&&this.history.push(e)}get stem(){return"string"==typeof this.path?rv(this.path,this.extname):void 0}set stem(e){rC(e,"stem"),rT(e,"stem"),this.path=r_(this.dirname||"",e+(this.extname||""))}fail(e,t,n){let r=this.message(e,t,n);throw r.fatal=!0,r}info(e,t,n){let r=this.message(e,t,n);return r.fatal=void 0,r}message(e,t,n){let r=new tf(e,t,n);return this.path&&(r.name=this.path+":"+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(e){return void 0===this.value?"":"string"==typeof this.value?this.value:new TextDecoder(e||void 0).decode(this.value)}}function rT(e,t){if(e&&e.includes("/"))throw Error("`"+t+"` cannot be a path: did not expect `/`")}function rC(e,t){if(!e)throw Error("`"+t+"` cannot be empty")}function rA(e,t){if(!e)throw Error("Setting `"+t+"` requires `path` to be set too")}e.s(["VFile",()=>rI],159902);let rP=function(e){let t=this.constructor.prototype,n=t[e],r=function(){return n.apply(r,arguments)};return Object.setPrototypeOf(r,t),r},rE={}.hasOwnProperty;class r$ extends rP{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=function(){let e=[],t={run:function(...t){let n=-1,r=t.pop();if("function"!=typeof r)throw TypeError("Expected function as last argument, not "+r);!function i(a,...o){let s=e[++n],l=-1;if(a)return void r(a);for(;++l<t.length;)(null===o[l]||void 0===o[l])&&(o[l]=t[l]);t=o,s?(function(e,t){let n;return function(...t){let a,o=e.length>t.length;o&&t.push(r);try{a=e.apply(this,t)}catch(e){if(o&&n)throw e;return r(e)}o||(a&&a.then&&"function"==typeof a.then?a.then(i,r):a instanceof Error?r(a):i(a))};function r(e,...i){n||(n=!0,t(e,...i))}function i(e){r(null,e)}})(s,i)(...o):r(null,...o)}(null,...t)},use:function(n){if("function"!=typeof n)throw TypeError("Expected `middelware` to be a function, not "+n);return e.push(n),t}};return t}()}copy(){let e=new r$,t=-1;for(;++t<this.attachers.length;){let n=this.attachers[t];e.use(...n)}return e.data((0,rg.default)(!0,{},this.namespace)),e}data(e,t){return"string"==typeof e?2==arguments.length?(rj("data",this.frozen),this.namespace[e]=t,this):rE.call(this.namespace,e)&&this.namespace[e]||void 0:e?(rj("data",this.frozen),this.namespace=e,this):this.namespace}freeze(){if(this.frozen)return this;for(;++this.freezeIndex<this.attachers.length;){let[e,...t]=this.attachers[this.freezeIndex];if(!1===t[0])continue;!0===t[0]&&(t[0]=void 0);let n=e.call(this,...t);"function"==typeof n&&this.transformers.use(n)}return this.frozen=!0,this.freezeIndex=1/0,this}parse(e){this.freeze();let t=rM(e),n=this.parser||this.Parser;return rR("parse",n),n(String(t),t)}process(e,t){let n=this;return this.freeze(),rR("process",this.parser||this.Parser),rD("process",this.compiler||this.Compiler),t?r(void 0,t):new Promise(r);function r(r,i){let a=rM(e),o=n.parse(a);function s(e,n){e||!n?i(e):r?r(n):(eE(t,"`done` is defined if `resolve` is not"),t(void 0,n))}n.run(o,a,function(e,t,r){var i,a;if(e||!t||!r)return s(e);let o=n.stringify(t,r);"string"==typeof(i=o)||(a=i)&&"object"==typeof a&&"byteLength"in a&&"byteOffset"in a?r.value=o:r.result=o,s(e,r)})}}processSync(e){let t,n=!1;return this.freeze(),rR("processSync",this.parser||this.Parser),rD("processSync",this.compiler||this.Compiler),this.process(e,function(e,r){n=!0,rf(e),t=r}),rN("processSync","process",n),eE(t,"we either bailed on an error or have a tree"),t}run(e,t,n){rU(e),this.freeze();let r=this.transformers;return n||"function"!=typeof t||(n=t,t=void 0),n?i(void 0,n):new Promise(i);function i(i,a){eE("function"!=typeof t,"`file` can’t be a `done` anymore, we checked");let o=rM(t);r.run(e,o,function(t,r,o){let s=r||e;t?a(t):i?i(s):(eE(n,"`done` is defined if `resolve` is not"),n(void 0,s,o))})}}runSync(e,t){let n,r=!1;return this.run(e,t,function(e,t){rf(e),n=t,r=!0}),rN("runSync","run",r),eE(n,"we either bailed on an error or have a tree"),n}stringify(e,t){this.freeze();let n=rM(t),r=this.compiler||this.Compiler;return rD("stringify",r),rU(e),r(e,n)}use(e,...t){let n=this.attachers,r=this.namespace;if(rj("use",this.frozen),null==e);else if("function"==typeof e)o(e,t);else if("object"==typeof e)Array.isArray(e)?a(e):i(e);else throw TypeError("Expected usable value, not `"+e+"`");return this;function i(e){if(!("plugins"in e)&&!("settings"in e))throw Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");a(e.plugins),e.settings&&(r.settings=(0,rg.default)(!0,r.settings,e.settings))}function a(e){let t=-1;if(null==e);else if(Array.isArray(e))for(;++t<e.length;)!function(e){if("function"==typeof e)o(e,[]);else if("object"==typeof e)if(Array.isArray(e)){let[t,...n]=e;o(t,n)}else i(e);else throw TypeError("Expected usable value, not `"+e+"`")}(e[t]);else throw TypeError("Expected a list of plugins, not `"+e+"`")}function o(e,t){let r=-1,i=-1;for(;++r<n.length;)if(n[r][0]===e){i=r;break}if(-1===i)n.push([e,...t]);else if(t.length>0){let[r,...a]=t,o=n[i][1];ry(o)&&ry(r)&&(r=(0,rg.default)(!0,o,r)),n[i]=[e,r,...a]}}}}let rO=new r$().freeze();function rR(e,t){if("function"!=typeof t)throw TypeError("Cannot `"+e+"` without `parser`")}function rD(e,t){if("function"!=typeof t)throw TypeError("Cannot `"+e+"` without `compiler`")}function rj(e,t){if(t)throw Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function rU(e){if(!ry(e)||"string"!=typeof e.type)throw TypeError("Expected node, got `"+e+"`")}function rN(e,t,n){if(!n)throw Error("`"+e+"` finished async. Use `"+t+"` instead")}function rM(e){var t;return(t=e)&&"object"==typeof t&&"message"in t&&"messages"in t?e:new rI(e)}e.s(["unified",0,rO],879302);let rz=[],rL={allowDangerousHtml:!0},rF=/^(https?|ircs?|mailto|xmpp)$/i,rZ=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function rB(e){var n;let r,i,a,o,s,l=(r=(n=e).rehypePlugins||rz,i=n.remarkPlugins||rz,a=n.remarkRehypeOptions?{...n.remarkRehypeOptions,...rL}:rL,rO().use(nq).use(i).use(rh,a).use(r)),u=(o=e.children||"",s=new rI,"string"==typeof o?s.value=o:e$("Unexpected value `"+o+"` for `children` prop, expected `string`"),s);return function(e,n){let r=n.allowedElements,i=n.allowElement,a=n.components,o=n.disallowedElements,s=n.skipHtml,l=n.unwrapDisallowed,u=n.urlTransform||rH;for(let e of rZ)Object.hasOwn(n,e.from)&&e$("Unexpected `"+e.from+"` prop, "+(e.to?"use `"+e.to+"` instead":"remove it")+" (see <https://github.com/remarkjs/react-markdown/blob/main/changelog.md#"+e.id+"> for more info)");return r&&o&&e$("Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other"),rt(e,function(e,t,n){if("raw"===e.type&&n&&"number"==typeof t)return s?n.children.splice(t,1):n.children[t]={type:"text",value:e.value},t;if("element"===e.type){let t;for(t in tE)if(Object.hasOwn(tE,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=tE[t];(null===r||r.includes(e.tagName))&&(e.properties[t]=u(String(n||""),t,e))}}if("element"===e.type){let a=r?!r.includes(e.tagName):!!o&&o.includes(e.tagName);if(!a&&i&&"number"==typeof t&&(a=!i(e,t,n)),a&&n&&"number"==typeof t)return l&&e.children?n.children.splice(t,1,...e.children):n.children.splice(t,1),t}}),tk(e,{Fragment:t.Fragment,components:a,ignoreInvalidStyle:!0,jsx:t.jsx,jsxs:t.jsxs,passKeys:!0,passNode:!0})}(l.runSync(l.parse(u),u),e)}function rH(e){let t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),i=e.indexOf("/");return -1===t||-1!==i&&t>i||-1!==n&&t>n||-1!==r&&t>r||rF.test(e.slice(0,t))?e:""}var rK=(e,t)=>{var n,r,i,a;return n=e.node,r=t.node,!!n&&!!r&&JSON.stringify(n?.properties)===JSON.stringify(r?.properties)&&(i=n?.children,a=r?.children,"string"==typeof i?i===a:JSON.stringify(i)===JSON.stringify(a))},rV=(0,X.createContext)(null),rG=()=>null!==(0,X.useContext)(rV),rq=(0,X.memo)(({children:e,...n})=>(0,t.jsx)(rV.Provider,{value:n,children:e}),rK),rJ=({node:e,...n})=>(0,t.jsx)("pre",{...n}),rW=({node:e,...n})=>(0,t.jsx)("code",{...n}),rY=({node:e,components:{Pre:n,Code:r},code:i})=>(0,t.jsx)(n,{children:(0,t.jsx)(r,{node:e,children:i})}),rX=()=>null,rQ=({node:e,components:{Pre:n,Code:r,SyntaxHighlighter:i,CodeHeader:a},language:o,code:s})=>{let l=(0,X.useMemo)(()=>({Pre:n,Code:r}),[n,r]),u=o?i:rY;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a,{node:e,language:o,code:s}),(0,t.jsx)(u,{node:e,components:l,language:o??"unknown",code:s})]})},r0=e.i(264458),r1=({className:e,...t})=>({className:n,...r})=>({className:(0,r0.default)(e,n),...t,...r}),r4=({node:e,components:{Pre:n,Code:r,SyntaxHighlighter:i,CodeHeader:a},componentsByLanguage:o={},children:s,...l})=>{let u=r1((0,X.useContext)(rV)),d=(0,ed.useCallbackRef)(e=>(0,t.jsx)(n,{...u(e)})),c=r1(l),p=(0,ed.useCallbackRef)(e=>(0,t.jsx)(r,{...c(e)})),m=/language-(\w+)/.exec(l.className||"")?.[1]??"";if("string"!=typeof s)return(0,t.jsx)(rY,{node:e,components:{Pre:d,Code:p},code:s});let h=o[m]?.SyntaxHighlighter??i,f=o[m]?.CodeHeader??a;return(0,t.jsx)(rQ,{node:e,components:{Pre:d,Code:p,SyntaxHighlighter:h,CodeHeader:f},language:m||"unknown",code:s})},r6=(0,X.memo)(({node:e,components:n,componentsByLanguage:r,...i})=>rG()?(0,t.jsx)(r4,{node:e,components:n,componentsByLanguage:r,...i}):(0,t.jsx)(n.Code,{...i}),(e,t)=>e.components===t.components&&e.componentsByLanguage===t.componentsByLanguage&&rK(e,t)),{useSmooth:r2,useSmoothStatus:r9,withSmoothContextProvider:r5}=eA,r3=({components:e,componentsByLanguage:n,smooth:r=!0,...i})=>{let{text:a}=r2(eP(),r),{pre:o=rJ,code:s=rW,SyntaxHighlighter:l=rY,CodeHeader:u=rX}=e??{},d=(0,X.useMemo)(()=>({Pre:o,Code:s,SyntaxHighlighter:l,CodeHeader:u}),[o,s,l,u]),c=(0,ed.useCallbackRef)(e=>(0,t.jsx)(r6,{components:d,componentsByLanguage:n,...e})),p=(0,X.useMemo)(()=>{let{pre:t,code:n,SyntaxHighlighter:r,CodeHeader:i,...a}=e??{};return{...a,pre:rq,code:c}},[c,e]);return(0,t.jsx)(rB,{components:p,...i,children:a})},r8=(0,X.forwardRef)(({className:e,containerProps:n,containerComponent:r="div",...i},a)=>{let o=r9();return(0,t.jsx)(r,{"data-status":o.type,...n,className:(0,r0.default)(e,n?.className),ref:a,children:(0,t.jsx)(r3,{...i})})});r8.displayName="MarkdownTextPrimitive";var r7=r5(r8);function ie(e,t){let n=String(e);if("string"!=typeof t)throw TypeError("Expected character");let r=0,i=n.indexOf(t);for(;-1!==i;)r++,i=n.indexOf(t,i+t.length);return r}let it="phrasing",ir=["autolink","link","image","label"];function ii(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function ia(e){this.config.enter.autolinkProtocol.call(this,e)}function io(e){this.config.exit.autolinkProtocol.call(this,e)}function is(e){this.config.exit.data.call(this,e);let t=this.stack[this.stack.length-1];eE("link"===t.type),t.url="http://"+this.sliceSerialize(e)}function il(e){this.config.exit.autolinkEmail.call(this,e)}function iu(e){this.exit(e)}function id(e){!function(e,t,n){let r=n5((n||{}).ignore||[]),i=function(e){let t=[];if(!Array.isArray(e))throw TypeError("Expected find and replace tuple or list of tuples");let n=!e[0]||Array.isArray(e[0])?e:[e],r=-1;for(;++r<n.length;){var i;let e=n[r];t.push(["string"==typeof(i=e[0])?RegExp(function(e){if("string"!=typeof e)throw TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}(i),"g"):i,function(e){return"function"==typeof e?e:function(){return e}}(e[1])])}return t}(t),a=-1;for(;++a<i.length;)re(e,"text",o);function o(e,t){let n,o=-1;for(;++o<t.length;){let e=t[o],i=n?n.children:void 0;if(r(e,i?i.indexOf(e):void 0,n))return;n=e}if(n)return function(e,t){let n=t[t.length-1],r=i[a][0],o=i[a][1],s=0,l=n.children.indexOf(e),u=!1,d=[];r.lastIndex=0;let c=r.exec(e.value);for(;c;){let n=c.index,i={index:c.index,input:c.input,stack:[...t,e]},a=o(...c,i);if("string"==typeof a&&(a=a.length>0?{type:"text",value:a}:void 0),!1===a?r.lastIndex=n+1:(s!==n&&d.push({type:"text",value:e.value.slice(s,n)}),Array.isArray(a)?d.push(...a):a&&d.push(a),s=n+c[0].length,u=!0),!r.global)break;c=r.exec(e.value)}return u?(s<e.value.length&&d.push({type:"text",value:e.value.slice(s)}),n.children.splice(l,1,...d)):d=[e],l+d.length}(e,t)}}(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,ic],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,ip]],{ignore:["link","linkReference"]})}function ic(e,t,n,r,i){let a,o="";if(!im(i))return!1;if(/^w/i.test(t)&&(n=t+n,t="",o="http://"),(a=n.split(".")).length<2||a[a.length-1]&&(/_/.test(a[a.length-1])||!/[a-zA-Z\d]/.test(a[a.length-1]))||a[a.length-2]&&(/_/.test(a[a.length-2])||!/[a-zA-Z\d]/.test(a[a.length-2])))return!1;let s=function(e){let t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")"),i=ie(e,"("),a=ie(e,")");for(;-1!==r&&i>a;)e+=n.slice(0,r+1),r=(n=n.slice(r+1)).indexOf(")"),a++;return[e,n]}(n+r);if(!s[0])return!1;let l={type:"link",title:null,url:o+t+s[0],children:[{type:"text",value:t+s[0]}]};return s[1]?[l,{type:"text",value:s[1]}]:l}function ip(e,t,n,r){return!(!im(r,!0)||/[-\d_]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function im(e,t){let n=e.input.charCodeAt(e.index-1);return(0===e.index||tW(n)||tJ(n))&&(!t||47!==n)}function ih(){this.buffer()}function ig(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function iy(){this.buffer()}function iv(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function ib(e){let t=this.resume(),n=this.stack[this.stack.length-1];eE("footnoteReference"===n.type),n.identifier=nk(this.sliceSerialize(e)).toLowerCase(),n.label=t}function ix(e){this.exit(e)}function i_(e){let t=this.resume(),n=this.stack[this.stack.length-1];eE("footnoteDefinition"===n.type),n.identifier=nk(this.sliceSerialize(e)).toLowerCase(),n.label=t}function ik(e){this.exit(e)}function iw(e,t,n,r){let i=n.createTracker(r),a=i.move("[^"),o=n.enter("footnoteReference"),s=n.enter("reference");return a+=i.move(n.safe(n.associationId(e),{after:"]",before:a})),s(),o(),a+=i.move("]")}function iS(e,t,n){return 0===t?e:iI(e,t,n)}function iI(e,t,n){return(n?"":" ")+e}iw.peek=function(){return"["};let iT=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];function iC(e){this.enter({type:"delete",children:[]},e)}function iA(e){this.exit(e)}function iP(e,t,n,r){let i=n.createTracker(r),a=n.enter("strikethrough"),o=i.move("~~");return o+=n.containerPhrasing(e,{...i.current(),before:o,after:"~"}),o+=i.move("~~"),a(),o}function iE(e){return e.length}function i$(e){let t="string"==typeof e?e.codePointAt(0):0;return 67===t||99===t?99:76===t||108===t?108:114*(82===t||114===t)}iP.peek=function(){return"~"};function iO(e,t,n){let r=e.value||"",i="`",a=-1;for(;RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++a<n.unsafe.length;){let e,t=n.unsafe[a],i=n.compilePattern(t);if(t.atBreak)for(;e=i.exec(r);){let t=e.index;10===r.charCodeAt(t)&&13===r.charCodeAt(t-1)&&t--,r=r.slice(0,t)+" "+r.slice(e.index+1)}}return i+r+i}iO.peek=function(){return"`"};n5(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);let iR=function(e,t,n,r){let i=function(e){let t=e.options.listItemIndent||"one";if("tab"!==t&&"one"!==t&&"mixed"!==t)throw Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}(n),a=n.bulletCurrent||function(e){let t=e.options.bullet||"*";if("*"!==t&&"+"!==t&&"-"!==t)throw Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}(n);t&&"list"===t.type&&t.ordered&&(a=("number"==typeof t.start&&t.start>-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+a);let o=a.length+1;("tab"===i||"mixed"===i&&(t&&"list"===t.type&&t.spread||e.spread))&&(o=4*Math.ceil(o/4));let s=n.createTracker(r);s.move(a+" ".repeat(o-a.length)),s.shift(o);let l=n.enter("listItem"),u=n.indentLines(n.containerFlow(e,s.current()),function(e,t,n){return t?(n?"":" ".repeat(o))+e:(n?a:a+" ".repeat(o-a.length))+e});return l(),u};function iD(e){let t=e._align;eE(t,"expected `_align` on table"),this.enter({type:"table",align:t.map(function(e){return"none"===e?null:e}),children:[]},e),this.data.inTable=!0}function ij(e){this.exit(e),this.data.inTable=void 0}function iU(e){this.enter({type:"tableRow",children:[]},e)}function iN(e){this.exit(e)}function iM(e){this.enter({type:"tableCell",children:[]},e)}function iz(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,iL));let n=this.stack[this.stack.length-1];eE("inlineCode"===n.type),n.value=t,this.exit(e)}function iL(e,t){return"|"===t?t:e}function iF(e){let t=this.stack[this.stack.length-2];eE("listItem"===t.type),t.checked="taskListCheckValueChecked"===e.type}function iZ(e){let t=this.stack[this.stack.length-2];if(t&&"listItem"===t.type&&"boolean"==typeof t.checked){let e=this.stack[this.stack.length-1];eE("paragraph"===e.type);let n=e.children[0];if(n&&"text"===n.type){let r,i=t.children,a=-1;for(;++a<i.length;){let e=i[a];if("paragraph"===e.type){r=e;break}}r===e&&(n.value=n.value.slice(1),0===n.value.length?e.children.shift():e.position&&n.position&&"number"==typeof n.position.start.offset&&(n.position.start.column++,n.position.start.offset++,e.position.start=Object.assign({},n.position.start)))}}this.exit(e)}function iB(e,t,n,r){let i=e.children[0],a="boolean"==typeof e.checked&&i&&"paragraph"===i.type,o="["+(e.checked?"x":" ")+"] ",s=n.createTracker(r);a&&s.move(o);let l=iR(e,t,n,{...r,...s.current()});return a&&(l=l.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,function(e){return e+o})),l}let iH={tokenize:function(e,t,n){let r=0;return function t(a){return(87===a||119===a)&&r<3?(r++,e.consume(a),t):46===a&&3===r?(e.consume(a),i):n(a)};function i(e){return null===e?n(e):t(e)}},partial:!0},iK={tokenize:function(e,t,n){let r,i,a;return o;function o(t){return 46===t||95===t?e.check(iG,l,s)(t):null===t||tG(t)||tW(t)||45!==t&&tJ(t)?l(t):(a=!0,e.consume(t),o)}function s(t){return 95===t?r=!0:(i=r,r=void 0),e.consume(t),o}function l(e){return i||r||!a?n(e):t(e)}},partial:!0},iV={tokenize:function(e,t){let n=0,r=0;return i;function i(o){return 40===o?(n++,e.consume(o),i):41===o&&r<n?a(o):33===o||34===o||38===o||39===o||41===o||42===o||44===o||46===o||58===o||59===o||60===o||63===o||93===o||95===o||126===o?e.check(iG,t,a)(o):null===o||tG(o)||tW(o)?t(o):(e.consume(o),i)}function a(t){return 41===t&&r++,e.consume(t),i}},partial:!0},iG={tokenize:function(e,t,n){return r;function r(o){return 33===o||34===o||39===o||41===o||42===o||44===o||46===o||58===o||59===o||63===o||95===o||126===o?(e.consume(o),r):38===o?(e.consume(o),a):93===o?(e.consume(o),i):60===o||null===o||tG(o)||tW(o)?t(o):n(o)}function i(e){return null===e||40===e||91===e||tG(e)||tW(e)?t(e):r(e)}function a(t){return tz(t)?function t(i){return 59===i?(e.consume(i),r):tz(i)?(e.consume(i),t):n(i)}(t):n(t)}},partial:!0},iq={tokenize:function(e,t,n){return function(t){return e.consume(t),r};function r(e){return tL(e)?n(e):t(e)}},partial:!0},iJ={name:"wwwAutolink",tokenize:function(e,t,n){let r=this;return function(t){return 87!==t&&119!==t||!i0.call(r,r.previous)||i2(r.events)?n(t):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(iH,e.attempt(iK,e.attempt(iV,i),n),n)(t))};function i(n){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(n)}},previous:i0},iW={name:"protocolAutolink",tokenize:function(e,t,n){let r=this,i="",a=!1;return function(t){return(72===t||104===t)&&i1.call(r,r.previous)&&!i2(r.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),i+=String.fromCodePoint(t),e.consume(t),o):n(t)};function o(t){if(tz(t)&&i.length<5)return i+=String.fromCodePoint(t),e.consume(t),o;if(58===t){let n=i.toLowerCase();if("http"===n||"https"===n)return e.consume(t),s}return n(t)}function s(t){return 47===t?(e.consume(t),a)?l:(a=!0,s):n(t)}function l(t){return null===t||tZ(t)||tG(t)||tW(t)||tJ(t)?n(t):e.attempt(iK,e.attempt(iV,u),n)(t)}function u(n){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(n)}},previous:i1},iY={name:"emailAutolink",tokenize:function(e,t,n){let r,i,a=this;return function(t){return!i6(t)||!i4.call(a,a.previous)||i2(a.events)?n(t):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),function t(r){return i6(r)?(e.consume(r),t):64===r?(e.consume(r),o):n(r)}(t))};function o(t){return 46===t?e.check(iq,l,s)(t):45===t||95===t||tL(t)?(i=!0,e.consume(t),o):l(t)}function s(t){return e.consume(t),r=!0,o}function l(o){return i&&r&&tz(a.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(o)):n(o)}},previous:i4},iX={},iQ=48;for(;iQ<123;)iX[iQ]=iY,58==++iQ?iQ=65:91===iQ&&(iQ=97);function i0(e){return null===e||40===e||42===e||95===e||91===e||93===e||126===e||tG(e)}function i1(e){return!tz(e)}function i4(e){return!(47===e||i6(e))}function i6(e){return 43===e||45===e||46===e||95===e||tL(e)}function i2(e){let t=e.length,n=!1;for(;t--;){let r=e[t][1];if(("labelLink"===r.type||"labelImage"===r.type)&&!r._balanced){n=!0;break}if(r._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}iX[43]=iY,iX[45]=iY,iX[46]=iY,iX[95]=iY,iX[72]=[iY,iW],iX[104]=[iY,iW],iX[87]=[iY,iJ],iX[119]=[iY,iJ];let i9={tokenize:function(e,t,n){let r=this;return tX(e,function(e){let i=r.events[r.events.length-1];return i&&"gfmFootnoteDefinitionIndent"===i[1].type&&4===i[2].sliceSerialize(i[1],!0).length?t(e):n(e)},"gfmFootnoteDefinitionIndent",5)},partial:!0};function i5(e,t,n){let r,i=this,a=i.events.length,o=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);for(;a--;){let e=i.events[a][1];if("labelImage"===e.type){r=e;break}if("gfmFootnoteCall"===e.type||"labelLink"===e.type||"label"===e.type||"image"===e.type||"link"===e.type)break}return function(a){if(!r||!r._balanced)return n(a);let s=nk(i.sliceSerialize({start:r.end,end:i.now()}));return 94===s.codePointAt(0)&&o.includes(s.slice(1))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(a),e.exit("gfmFootnoteCallLabelMarker"),t(a)):n(a)}}function i3(e,t){let n=e.length;for(;n--;)if("labelImage"===e[n][1].type&&"enter"===e[n][0]){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";let r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:"chunkString",contentType:"string",start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",i,t],["exit",i,t],["enter",a,t],["enter",o,t],["exit",o,t],["exit",a,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...s),e}function i8(e,t,n){let r,i=this,a=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]),o=0;return function(t){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(t),e.exit("gfmFootnoteCallLabelMarker"),s};function s(t){return 94!==t?n(t):(e.enter("gfmFootnoteCallMarker"),e.consume(t),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",l)}function l(s){if(o>999||93===s&&!r||null===s||91===s||tG(s))return n(s);if(93===s){e.exit("chunkString");let r=e.exit("gfmFootnoteCallString");return a.includes(nk(i.sliceSerialize(r)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(s),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(s)}return tG(s)||(r=!0),o++,e.consume(s),92===s?u:l}function u(t){return 91===t||92===t||93===t?(e.consume(t),o++,l):l(t)}}function i7(e,t,n){let r,i,a=this,o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]),s=0;return function(t){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),l};function l(t){return 94===t?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",u):n(t)}function u(t){if(s>999||93===t&&!i||null===t||91===t||tG(t))return n(t);if(93===t){e.exit("chunkString");let n=e.exit("gfmFootnoteDefinitionLabelString");return r=nk(a.sliceSerialize(n)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),c}return tG(t)||(i=!0),s++,e.consume(t),92===t?d:u}function d(t){return 91===t||92===t||93===t?(e.consume(t),s++,u):u(t)}function c(t){return 58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),o.includes(r)||o.push(r),tX(e,p,"gfmFootnoteDefinitionWhitespace")):n(t)}function p(e){return t(e)}}function ae(e,t,n){return e.check(t4,t,e.attempt(i9,t,n))}function at(e){e.exit("gfmFootnoteDefinition")}class an{constructor(){this.map=[]}add(e,t,n){!function(e,t,n,r){let i=0;if(0!==n||0!==r.length){for(;i<e.map.length;){if(e.map[i][0]===t){e.map[i][1]+=n,e.map[i][2].push(...r);return}i+=1}e.map.push([t,n,r])}}(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),0===this.map.length)return;let t=this.map.length,n=[];for(;t>0;)t-=1,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}}function ar(e,t,n){let r,i=this,a=0,o=0;return function(e){let t=i.events.length-1;for(;t>-1;){let e=i.events[t][1].type;if("lineEnding"===e||"linePrefix"===e)t--;else break}let r=t>-1?i.events[t][1].type:null,a="tableHead"===r||"tableRow"===r?v:s;return a===v&&i.parser.lazy[i.now().line]?n(e):a(e)};function s(t){var n;return e.enter("tableHead"),e.enter("tableRow"),124===(n=t)||(r=!0,o+=1),l(n)}function l(t){return null===t?n(t):tV(t)?o>1?(o=0,i.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),c):n(t):tq(t)?tX(e,l,"whitespace")(t):(o+=1,r&&(r=!1,a+=1),124===t)?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),r=!0,l):(e.enter("data"),u(t))}function u(t){return null===t||124===t||tG(t)?(e.exit("data"),l(t)):(e.consume(t),92===t?d:u)}function d(t){return 92===t||124===t?(e.consume(t),u):u(t)}function c(t){return(i.interrupt=!1,i.parser.lazy[i.now().line])?n(t):(e.enter("tableDelimiterRow"),r=!1,tq(t))?tX(e,p,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):p(t)}function p(t){return 45===t||58===t?h(t):124===t?(r=!0,e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),m):n(t)}function m(t){return tq(t)?tX(e,h,"whitespace")(t):h(t)}function h(t){return 58===t?(o+=1,r=!0,e.enter("tableDelimiterMarker"),e.consume(t),e.exit("tableDelimiterMarker"),f):45===t?(o+=1,f(t)):null===t||tV(t)?y(t):n(t)}function f(t){return 45===t?(e.enter("tableDelimiterFiller"),function t(n){return 45===n?(e.consume(n),t):58===n?(r=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(n),e.exit("tableDelimiterMarker"),g):(e.exit("tableDelimiterFiller"),g(n))}(t)):n(t)}function g(t){return tq(t)?tX(e,y,"whitespace")(t):y(t)}function y(i){if(124===i)return p(i);if(null===i||tV(i))return r&&a===o?(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(i)):n(i);return n(i)}function v(t){return e.enter("tableRow"),b(t)}function b(n){return 124===n?(e.enter("tableCellDivider"),e.consume(n),e.exit("tableCellDivider"),b):null===n||tV(n)?(e.exit("tableRow"),t(n)):tq(n)?tX(e,b,"whitespace")(n):(e.enter("data"),x(n))}function x(t){return null===t||124===t||tG(t)?(e.exit("data"),b(t)):(e.consume(t),92===t?_:x)}function _(t){return 92===t||124===t?(e.consume(t),x):x(t)}}function ai(e,t){let n,r,i,a=-1,o=!0,s=0,l=[0,0,0,0],u=[0,0,0,0],d=!1,c=0,p=new an;for(;++a<e.length;){let m=e[a],h=m[1];"enter"===m[0]?"tableHead"===h.type?(d=!1,0!==c&&(ao(p,t,c,n,r),r=void 0,c=0),n={type:"table",start:Object.assign({},h.start),end:Object.assign({},h.end)},p.add(a,0,[["enter",n,t]])):"tableRow"===h.type||"tableDelimiterRow"===h.type?(o=!0,i=void 0,l=[0,0,0,0],u=[0,a+1,0,0],d&&(d=!1,r={type:"tableBody",start:Object.assign({},h.start),end:Object.assign({},h.end)},p.add(a,0,[["enter",r,t]])),s="tableDelimiterRow"===h.type?2:r?3:1):s&&("data"===h.type||"tableDelimiterMarker"===h.type||"tableDelimiterFiller"===h.type)?(o=!1,0===u[2]&&(0!==l[1]&&(u[0]=u[1],i=aa(p,t,l,s,void 0,i),l=[0,0,0,0]),u[2]=a)):"tableCellDivider"===h.type&&(o?o=!1:(0!==l[1]&&(u[0]=u[1],i=aa(p,t,l,s,void 0,i)),u=[(l=u)[1],a,0,0])):"tableHead"===h.type?(d=!0,c=a):"tableRow"===h.type||"tableDelimiterRow"===h.type?(c=a,0!==l[1]?(u[0]=u[1],i=aa(p,t,l,s,a,i)):0!==u[1]&&(i=aa(p,t,u,s,a,i)),s=0):s&&("data"===h.type||"tableDelimiterMarker"===h.type||"tableDelimiterFiller"===h.type)&&(u[3]=a)}for(0!==c&&ao(p,t,c,n,r),p.consume(t.events),a=-1;++a<t.events.length;){let e=t.events[a];"enter"===e[0]&&"table"===e[1].type&&(e[1]._align=function(e,t){let n=!1,r=[];for(;t<e.length;){let i=e[t];if(n){if("enter"===i[0])"tableContent"===i[1].type&&r.push("tableDelimiterMarker"===e[t+1][1].type?"left":"none");else if("tableContent"===i[1].type){if("tableDelimiterMarker"===e[t-1][1].type){let e=r.length-1;r[e]="left"===r[e]?"center":"right"}}else if("tableDelimiterRow"===i[1].type)break}else"enter"===i[0]&&"tableDelimiterRow"===i[1].type&&(n=!0);t+=1}return r}(t.events,a))}return e}function aa(e,t,n,r,i,a){0!==n[0]&&(a.end=Object.assign({},as(t.events,n[0])),e.add(n[0],0,[["exit",a,t]]));let o=as(t.events,n[1]);if(a={type:1===r?"tableHeader":2===r?"tableDelimiter":"tableData",start:Object.assign({},o),end:Object.assign({},o)},e.add(n[1],0,[["enter",a,t]]),0!==n[2]){let i=as(t.events,n[2]),a=as(t.events,n[3]),o={type:"tableContent",start:Object.assign({},i),end:Object.assign({},a)};if(e.add(n[2],0,[["enter",o,t]]),2!==r){let r=t.events[n[2]],i=t.events[n[3]];if(r[1].end=Object.assign({},i[1].end),r[1].type="chunkText",r[1].contentType="text",n[3]>n[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[["exit",o,t]])}return void 0!==i&&(a.end=Object.assign({},as(t.events,i)),e.add(i,0,[["exit",a,t]]),a=void 0),a}function ao(e,t,n,r,i){let a=[],o=as(t.events,n);i&&(i.end=Object.assign({},o),a.push(["exit",i,t])),r.end=Object.assign({},o),a.push(["exit",r,t]),e.add(n+1,0,a)}function as(e,t){let n=e[t],r="enter"===n[0]?"start":"end";return n[1][r]}let al={name:"tasklistCheck",tokenize:function(e,t,n){let r=this;return function(t){return null===r.previous&&r._gfmTasklistFirstContentOfListItem?(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),i):n(t)};function i(t){return tG(t)?(e.enter("taskListCheckValueUnchecked"),e.consume(t),e.exit("taskListCheckValueUnchecked"),a):88===t||120===t?(e.enter("taskListCheckValueChecked"),e.consume(t),e.exit("taskListCheckValueChecked"),a):n(t)}function a(t){return 93===t?(e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),o):n(t)}function o(r){return tV(r)?t(r):tq(r)?e.check({tokenize:au},t,n)(r):n(r)}}};function au(e,t,n){return tX(e,function(e){return null===e?n(e):t(e)},"whitespace")}let ad={};function ac(e){let t,n,r,i=e||ad,a=this.data(),o=a.micromarkExtensions||(a.micromarkExtensions=[]),s=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),l=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);o.push(tM([{text:iX},{document:{91:{name:"gfmFootnoteDefinition",tokenize:i7,continuation:{tokenize:ae},exit:at}},text:{91:{name:"gfmFootnoteCall",tokenize:i8},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:i5,resolveTo:i3}}},(t=(i||{}).singleTilde,n={name:"strikethrough",tokenize:function(e,n,r){let i=this.previous,a=this.events,o=0;return function(s){return 126===i&&"characterEscape"!==a[a.length-1][1].type?r(s):(e.enter("strikethroughSequenceTemporary"),function a(s){let l=na(i);if(126===s)return o>1?r(s):(e.consume(s),o++,a);if(o<2&&!t)return r(s);let u=e.exit("strikethroughSequenceTemporary"),d=na(s);return u._open=!d||2===d&&!!l,u._close=!l||2===l&&!!d,n(s)}(s))}},resolveAll:function(e,t){let n=-1;for(;++n<e.length;)if("enter"===e[n][0]&&"strikethroughSequenceTemporary"===e[n][1].type&&e[n][1]._close){let r=n;for(;r--;)if("exit"===e[r][0]&&"strikethroughSequenceTemporary"===e[r][1].type&&e[r][1]._open&&e[n][1].end.offset-e[n][1].start.offset==e[r][1].end.offset-e[r][1].start.offset){e[n][1].type="strikethroughSequence",e[r][1].type="strikethroughSequence";let i={type:"strikethrough",start:Object.assign({},e[r][1].start),end:Object.assign({},e[n][1].end)},a={type:"strikethroughText",start:Object.assign({},e[r][1].end),end:Object.assign({},e[n][1].start)},o=[["enter",i,t],["enter",e[r][1],t],["exit",e[r][1],t],["enter",a,t]],s=t.parser.constructs.insideSpan.null;s&&tj(o,o.length,0,no(s,e.slice(r+1,n),t)),tj(o,o.length,0,[["exit",a,t],["enter",e[n][1],t],["exit",e[n][1],t],["exit",i,t]]),tj(e,r-1,n-r+3,o),n=r+o.length-2;break}}for(n=-1;++n<e.length;)"strikethroughSequenceTemporary"===e[n][1].type&&(e[n][1].type="data");return e}},null==t&&(t=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}}),{flow:{null:{name:"table",tokenize:ar,resolveAll:ai}}},{text:{91:al}}])),s.push([{transforms:[id],enter:{literalAutolink:ii,literalAutolinkEmail:ia,literalAutolinkHttp:ia,literalAutolinkWww:ia},exit:{literalAutolink:iu,literalAutolinkEmail:il,literalAutolinkHttp:io,literalAutolinkWww:is}},{enter:{gfmFootnoteCallString:ih,gfmFootnoteCall:ig,gfmFootnoteDefinitionLabelString:iy,gfmFootnoteDefinition:iv},exit:{gfmFootnoteCallString:ib,gfmFootnoteCall:ix,gfmFootnoteDefinitionLabelString:i_,gfmFootnoteDefinition:ik}},{canContainEols:["delete"],enter:{strikethrough:iC},exit:{strikethrough:iA}},{enter:{table:iD,tableData:iM,tableHeader:iM,tableRow:iU},exit:{codeText:iz,table:ij,tableData:iN,tableHeader:iN,tableRow:iN}},{exit:{taskListCheckValueChecked:iF,taskListCheckValueUnchecked:iF,paragraph:iZ}}]),l.push({extensions:[{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:it,notInConstruct:ir},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:it,notInConstruct:ir},{character:":",before:"[ps]",after:"\\/",inConstruct:it,notInConstruct:ir}]},(r=!1,i&&i.firstLineBlank&&(r=!0),{handlers:{footnoteDefinition:function(e,t,n,i){let a=n.createTracker(i),o=a.move("[^"),s=n.enter("footnoteDefinition"),l=n.enter("label");return o+=a.move(n.safe(n.associationId(e),{before:o,after:"]"})),l(),o+=a.move("]:"),e.children&&e.children.length>0&&(a.shift(4),o+=a.move((r?"\n":" ")+n.indentLines(n.containerFlow(e,a.current()),r?iI:iS))),s(),o},footnoteReference:iw},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]}),{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:iT}],handlers:{delete:iP}},function(e){let t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,a=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:function(e,t,n){let r=iO(e,t,n);return n.stack.includes("tableCell")&&(r=r.replace(/\|/g,"\\$&")),r},table:function(e,t,n,r){return s(function(e,t,n){let r=e.children,i=-1,a=[],o=t.enter("table");for(;++i<r.length;)a[i]=l(r[i],t,n);return o(),a}(e,n,r),e.align)},tableCell:o,tableRow:function(e,t,n,r){let i=s([l(e,n,r)]);return i.slice(0,i.indexOf("\n"))}}};function o(e,t,n,r){let i=n.enter("tableCell"),o=n.enter("phrasing"),s=n.containerPhrasing(e,{...r,before:a,after:a});return o(),i(),s}function s(e,t){return function(e,t){let n=t||{},r=(n.align||[]).concat(),i=n.stringLength||iE,a=[],o=[],s=[],l=[],u=0,d=-1;for(;++d<e.length;){let t=[],r=[],a=-1;for(e[d].length>u&&(u=e[d].length);++a<e[d].length;){var c;let o=null==(c=e[d][a])?"":String(c);if(!1!==n.alignDelimiters){let e=i(o);r[a]=e,(void 0===l[a]||e>l[a])&&(l[a]=e)}t.push(o)}o[d]=t,s[d]=r}let p=-1;if("object"==typeof r&&"length"in r)for(;++p<u;)a[p]=i$(r[p]);else{let e=i$(r);for(;++p<u;)a[p]=e}p=-1;let m=[],h=[];for(;++p<u;){let e=a[p],t="",r="";99===e?(t=":",r=":"):108===e?t=":":114===e&&(r=":");let i=!1===n.alignDelimiters?1:Math.max(1,l[p]-t.length-r.length),o=t+"-".repeat(i)+r;!1!==n.alignDelimiters&&((i=t.length+i+r.length)>l[p]&&(l[p]=i),h[p]=i),m[p]=o}o.splice(1,0,m),s.splice(1,0,h),d=-1;let f=[];for(;++d<o.length;){let e=o[d],t=s[d];p=-1;let r=[];for(;++p<u;){let i=e[p]||"",o="",s="";if(!1!==n.alignDelimiters){let e=l[p]-(t[p]||0),n=a[p];114===n?o=" ".repeat(e):99===n?e%2?(o=" ".repeat(e/2+.5),s=" ".repeat(e/2-.5)):s=o=" ".repeat(e/2):s=" ".repeat(e)}!1===n.delimiterStart||p||r.push("|"),!1!==n.padding&&(!1!==n.alignDelimiters||""!==i)&&(!1!==n.delimiterStart||p)&&r.push(" "),!1!==n.alignDelimiters&&r.push(o),r.push(i),!1!==n.alignDelimiters&&r.push(s),!1!==n.padding&&r.push(" "),(!1!==n.delimiterEnd||p!==u-1)&&r.push("|")}f.push(!1===n.delimiterEnd?r.join("").replace(/ +$/,""):r.join(""))}return f.join("\n")}(e,{align:t,alignDelimiters:r,padding:n,stringLength:i})}function l(e,t,n){let r=e.children,i=-1,a=[],s=t.enter("tableRow");for(;++i<r.length;)a[i]=o(r[i],e,t,n);return s(),a}}(i),{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:iB}}]})}e.s(["default",()=>ac],812878);let ap=(0,X.memo)(()=>(0,t.jsx)(r7,{remarkPlugins:[ac],className:"aui-md",components:am})),am=((e={})=>Object.fromEntries(Object.entries(e??{}).map(([e,n])=>n?[e,(0,X.memo)(({node:e,...r})=>(0,t.jsx)(n,{...r}),rK)]:[e,n])))({h1:({className:e,...r})=>(0,t.jsx)("h1",{className:(0,n.cn)("mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0",e),...r}),h2:({className:e,...r})=>(0,t.jsx)("h2",{className:(0,n.cn)("mb-4 mt-8 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0",e),...r}),h3:({className:e,...r})=>(0,t.jsx)("h3",{className:(0,n.cn)("mb-4 mt-6 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0",e),...r}),h4:({className:e,...r})=>(0,t.jsx)("h4",{className:(0,n.cn)("mb-4 mt-6 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0",e),...r}),h5:({className:e,...r})=>(0,t.jsx)("h5",{className:(0,n.cn)("my-4 text-lg font-semibold first:mt-0 last:mb-0",e),...r}),h6:({className:e,...r})=>(0,t.jsx)("h6",{className:(0,n.cn)("my-4 font-semibold first:mt-0 last:mb-0",e),...r}),p:({className:e,...r})=>(0,t.jsx)("p",{className:(0,n.cn)("mb-5 mt-5 leading-7 first:mt-0 last:mb-0",e),...r}),a:({className:e,...r})=>(0,t.jsx)("a",{className:(0,n.cn)("text-primary font-medium underline underline-offset-4",e),...r}),blockquote:({className:e,...r})=>(0,t.jsx)("blockquote",{className:(0,n.cn)("border-l-2 pl-6 italic",e),...r}),ul:({className:e,...r})=>(0,t.jsx)("ul",{className:(0,n.cn)("my-5 ml-6 list-disc [&>li]:mt-2",e),...r}),ol:({className:e,...r})=>(0,t.jsx)("ol",{className:(0,n.cn)("my-5 ml-6 list-decimal [&>li]:mt-2",e),...r}),hr:({className:e,...r})=>(0,t.jsx)("hr",{className:(0,n.cn)("my-5 border-b",e),...r}),table:({className:e,...r})=>(0,t.jsx)("table",{className:(0,n.cn)("my-5 w-full border-separate border-spacing-0 overflow-y-auto",e),...r}),th:({className:e,...r})=>(0,t.jsx)("th",{className:(0,n.cn)("bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right",e),...r}),td:({className:e,...r})=>(0,t.jsx)("td",{className:(0,n.cn)("border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",e),...r}),tr:({className:e,...r})=>(0,t.jsx)("tr",{className:(0,n.cn)("m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg",e),...r}),sup:({className:e,...r})=>(0,t.jsx)("sup",{className:(0,n.cn)("[&>a]:text-xs [&>a]:no-underline",e),...r}),pre:({className:e,...r})=>(0,t.jsx)("pre",{className:(0,n.cn)("overflow-x-auto rounded-b-lg bg-black p-4 text-white",e),...r}),code:function({className:e,...r}){let i=rG();return(0,t.jsx)("code",{className:(0,n.cn)(!i&&"bg-muted rounded border font-semibold",e),...r})},CodeHeader:({language:e})=>e?(0,t.jsx)("div",{className:"flex items-center rounded-t-lg bg-zinc-900 px-4 py-2 text-sm font-semibold text-white",children:(0,t.jsx)("span",{className:"lowercase [&>span]:text-xs",children:e})}):null});e.s(["MarkdownText",0,ap],558262);var ah=e.i(901387);e.i(403150);var af=e.i(35617),ag=e.i(468759);let ay=(0,X.forwardRef)(({children:e,tooltip:r,side:i="bottom",className:a,...o},s)=>(0,t.jsx)(af.TooltipProvider,{children:(0,t.jsxs)(af.Tooltip,{children:[(0,t.jsx)(af.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)(ag.Button,{variant:"ghost",size:"icon",...o,className:(0,n.cn)("size-6 p-1",a),ref:s,children:[e,(0,t.jsx)("span",{className:"sr-only",children:r})]})}),(0,t.jsx)(ah.Portal,{children:(0,t.jsx)(af.TooltipContent,{side:i,collisionPadding:8,children:r})})]})}));ay.displayName="TooltipIconButton",e.s(["TooltipIconButton",0,ay],539119)},775760,279377,54317,629962,915629,610551,e=>{"use strict";var t,n=e.i(592426),r=e.i(558262),i=e.i(539119);e.i(403150);var a=e.i(468759),o=e.i(550209),s=e.i(838497),l=e.i(215146);function u(e){return e>l.MAX_IMAGES_PER_MESSAGE?{ok:!1,reason:`Maximum ${l.MAX_IMAGES_PER_MESSAGE} images per message.`}:{ok:!0}}var d=e.i(150373),c=e.i(94283),p=e.i(809825),m=e.i(887688),h=e.i(419740),f=(0,c.createContext)(null),g=(0,m.createContextHook)(f,"AssistantRuntimeProvider");function y(e){let t=g(e);return t?t.useThreadRuntime():null}var v=(0,h.createStateHookForRuntime)(y);(0,h.createStateHookForRuntime)(e=>y(e)?.composer??null),e.s(["ThreadContext",()=>f,"useThread",()=>v,"useThreadRuntime",()=>y],279377);var b=(e,t)=>(0,c.useMemo)(()=>{let t;return t=t=>{let n=e.map(e=>e.subscribe(t));return()=>{for(let e of n)e()}},n=>{let r=()=>n(...e.map(e=>e.getState()));return(0,c.useSyncExternalStore)(t,r,r)}},e)(t),x=((t=x||{}).Hidden="hidden",t.Floating="floating",t.Normal="normal",t),_=(0,c.forwardRef)(({hideWhenRunning:e,autohide:t,autohideFloat:r,...i},a)=>{let o=(({hideWhenRunning:e,autohide:t,autohideFloat:n})=>b([y(),(0,p.useMessageRuntime)(),(0,p.useMessageUtilsStore)()],(r,i,a)=>e&&r.isRunning?"hidden":"always"!==t&&("not-last"!==t||i.isLast)?"normal":a.isHovering?"always"===n||"single-branch"===n&&i.branchCount<=1?"floating":"normal":"hidden"))({hideWhenRunning:e,autohide:t,autohideFloat:r});return o===x.Hidden?null:(0,n.jsx)(d.Primitive.div,{...o===x.Floating?{"data-floating":"true"}:null,...i,ref:a})});function k(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),!1===n||!r.defaultPrevented)return t?.(r)}}function w(e){let t=(0,p.useMessageRuntime)({optional:!0}),n=y(e);return t?t.composer:n?.composer??null}_.displayName="ActionBarPrimitive.Root";var S=(0,h.createStateHookForRuntime)(w);e.s(["useComposer",()=>S,"useComposerRuntime",()=>w],54317);var I=(0,c.forwardRef)(({copiedDuration:e,onClick:t,disabled:r,...i},a)=>{let o=(0,p.useMessageUtils)(e=>e.isCopied),s=(({copiedDuration:e=3e3}={})=>{let t=(0,p.useMessageRuntime)(),n=w(),r=(0,p.useMessageUtils)(e=>e.setIsCopied),i=(0,p.useMessage)(e=>("assistant"!==e.role||"running"!==e.status.type)&&e.content.some(e=>"text"===e.type&&e.text.length>0)),a=(0,c.useCallback)(()=>{let{isEditing:i,text:a}=n.getState(),o=i?a:t.unstable_getCopyText();navigator.clipboard.writeText(o).then(()=>{r(!0),setTimeout(()=>r(!1),e)})},[t,r,n,e]);return i?a:null})({copiedDuration:e});return(0,n.jsx)(d.Primitive.button,{type:"button",...o?{"data-copied":"true"}:{},...i,ref:a,disabled:r||!s,onClick:k(t,()=>{s?.()})})});I.displayName="ActionBarPrimitive.Copy";var T=(e,t,r=[])=>{let i=(0,c.forwardRef)((e,i)=>{let a={},o={};Object.keys(e).forEach(t=>{r.includes(t)?a[t]=e[t]:o[t]=e[t]});let s=t(a)??void 0;return(0,n.jsx)(d.Primitive.button,{type:"button",...o,ref:i,disabled:o.disabled||!s,onClick:k(o.onClick,s)})});return i.displayName=e,i},C=T("ActionBarPrimitive.Reload",()=>{let e=(0,p.useMessageRuntime)(),t=b([y(),e],(e,t)=>e.isRunning||e.isDisabled||"assistant"!==t.role),n=(0,c.useCallback)(()=>{e.reload()},[e]);return t?null:n}),A=T("ActionBarPrimitive.Edit",()=>{let e=(0,p.useMessageRuntime)(),t=(0,p.useEditComposer)(e=>e.isEditing),n=(0,c.useCallback)(()=>{e.composer.beginEdit()},[e]);return t?null:n}),P=T("ActionBarPrimitive.Speak",()=>{let e=(0,p.useMessageRuntime)(),t=(0,c.useCallback)(async()=>{e.speak()},[e]);return(0,p.useMessage)(e=>("assistant"!==e.role||"running"!==e.status.type)&&e.content.some(e=>"text"===e.type&&e.text.length>0))?t:null}),E=e.i(552425),$=(0,c.forwardRef)((e,t)=>{let r,i,a,o=(r=(0,p.useMessageRuntime)(),i=(0,p.useMessage)(e=>null!=e.speech),a=(0,c.useCallback)(()=>{r.stopSpeaking()},[r]),i?a:null);return(0,E.useEscapeKeydown)(e=>{o&&(e.preventDefault(),o())}),(0,n.jsx)(d.Primitive.button,{type:"button",disabled:!o,...e,ref:t,onClick:k(e.onClick,()=>{o?.()})})});$.displayName="ActionBarPrimitive.StopSpeaking";var O=(0,c.forwardRef)(({onClick:e,disabled:t,...r},i)=>{let a,o=(0,p.useMessage)(e=>e.submittedFeedback?.type==="positive"),s=(a=(0,p.useMessageRuntime)(),(0,c.useCallback)(()=>{a.submitFeedback({type:"positive"})},[a]));return(0,n.jsx)(d.Primitive.button,{type:"button",...o?{"data-submitted":"true"}:{},...r,ref:i,disabled:t||!s,onClick:k(e,()=>{s?.()})})});O.displayName="ActionBarPrimitive.FeedbackPositive";var R=(0,c.forwardRef)(({onClick:e,disabled:t,...r},i)=>{let a,o=(0,p.useMessage)(e=>e.submittedFeedback?.type==="negative"),s=(a=(0,p.useMessageRuntime)(),(0,c.useCallback)(()=>{a.submitFeedback({type:"negative"})},[a]));return(0,n.jsx)(d.Primitive.button,{type:"button",...o?{"data-submitted":"true"}:{},...r,ref:i,disabled:t||!s,onClick:k(e,()=>{s?.()})})});R.displayName="ActionBarPrimitive.FeedbackNegative",e.s([],416941),e.i(416941),e.s(["Copy",()=>I,"Edit",()=>A,"FeedbackNegative",()=>R,"FeedbackPositive",()=>O,"Reload",()=>C,"Root",()=>_,"Speak",()=>P,"StopSpeaking",()=>$],679409);var D=e.i(679409),D=D,j=T("BranchPickerPrimitive.Next",()=>{let e=(0,p.useMessageRuntime)(),t=(0,p.useMessage)(e=>e.branchNumber>=e.branchCount),n=(0,c.useCallback)(()=>{e.switchToBranch({position:"next"})},[e]);return t?null:n}),U=T("BranchPickerPrimitive.Previous",()=>{let e=(0,p.useMessageRuntime)(),t=(0,p.useMessage)(e=>e.branchNumber<=1),n=(0,c.useCallback)(()=>{e.switchToBranch({position:"previous"})},[e]);return t?null:n}),N=()=>{let e=(0,p.useMessage)(e=>e.branchCount);return(0,n.jsx)(n.Fragment,{children:e})};N.displayName="BranchPickerPrimitive.Count";var M=()=>{let e=(0,p.useMessage)(e=>e.branchNumber);return(0,n.jsx)(n.Fragment,{children:e})};M.displayName="BranchPickerPrimitive.Number";var z=({children:e,...t})=>b([(0,p.useMessageRuntime)(),(0,p.useMessageUtilsStore)()],({role:e,attachments:n,content:r,branchCount:i,isLast:a,speech:o,submittedFeedback:s},{isCopied:l,isHovering:u})=>(!0!==t.hasBranches||!(i<2))&&(!t.user||"user"===e)&&(!t.assistant||"assistant"===e)&&(!t.system||"system"===e)&&(!0!==t.lastOrHover||!!u||!!a)&&(void 0===t.last||t.last===a)&&(!0!==t.copied||!!l)&&(!1!==t.copied||!l)&&(!0!==t.speaking||null!=o)&&(!1!==t.speaking||null==o)&&(!0!==t.hasAttachments||"user"===e&&!!n.length)&&(!1!==t.hasAttachments||"user"!==e||!n.length)&&(!0!==t.hasContent||0!==r.length)&&(!1!==t.hasContent||!(r.length>0))&&(void 0===t.submittedFeedback||(s?.type??null)===t.submittedFeedback)&&!0)?e:null;z.displayName="MessagePrimitive.If";var L=(0,c.forwardRef)(({hideWhenSingleBranch:e,...t},r)=>(0,n.jsx)(z,{hasBranches:!!e||void 0,children:(0,n.jsx)(d.Primitive.div,{...t,ref:r})}));L.displayName="BranchPickerPrimitive.Root",e.s([],448462),e.i(448462),e.s(["Count",()=>N,"Next",()=>j,"Number",()=>M,"Previous",()=>U,"Root",()=>L],728852);var F=e.i(728852),F=F,Z=()=>{let e=w(),t=b([y(),e],(e,t)=>e.isRunning||!t.isEditing||t.isEmpty),n=(0,c.useCallback)(()=>{e.send()},[e]);return t?null:n},B=T("ComposerPrimitive.Send",Z),H=(0,c.forwardRef)(({onSubmit:e,...t},r)=>{let i=Z();return(0,n.jsx)(d.Primitive.form,{...t,ref:r,onSubmit:k(e,e=>{e.preventDefault(),i&&i()})})});H.displayName="ComposerPrimitive.Root";var K=e.i(353616),V=e.i(479975),G=e.i(230330),q=e.i(382034),J=c.useLayoutEffect,W=function(e){var t=c.default.useRef(e);return J(function(){t.current=e}),t},Y=function(e,t){"function"==typeof e?e(t):e.current=t},X=function(e,t){var n=c.default.useRef();return c.default.useCallback(function(r){e.current=r,n.current&&Y(n.current,null),n.current=t,t&&Y(t,r)},[t])},Q={"min-height":"0","max-height":"none",height:"0",visibility:"hidden",overflow:"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0",display:"block"},ee=function(e){Object.keys(Q).forEach(function(t){e.style.setProperty(t,Q[t],"important")})},et=null,en=function(e,t){var n=e.scrollHeight;return"border-box"===t.sizingStyle.boxSizing?n+t.borderSize:n-t.paddingSize},er=function(){},ei=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","boxSizing","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","paddingBottom","paddingLeft","paddingRight","paddingTop","tabSize","textIndent","textRendering","textTransform","width","wordBreak","wordSpacing","scrollbarGutter"],ea=!!document.documentElement.currentStyle,eo=function(e){var t=window.getComputedStyle(e);if(null===t)return null;var n=ei.reduce(function(e,n){return e[n]=t[n],e},{}),r=n.boxSizing;if(""===r)return null;ea&&"border-box"===r&&(n.width=parseFloat(n.width)+parseFloat(n.borderRightWidth)+parseFloat(n.borderLeftWidth)+parseFloat(n.paddingRight)+parseFloat(n.paddingLeft)+"px");var i=parseFloat(n.paddingBottom)+parseFloat(n.paddingTop),a=parseFloat(n.borderBottomWidth)+parseFloat(n.borderTopWidth);return{sizingStyle:n,paddingSize:i,borderSize:a}};function es(e,t,n){var r=W(n);c.useLayoutEffect(function(){var n=function(e){return r.current(e)};if(e)return e.addEventListener(t,n),function(){return e.removeEventListener(t,n)}},[])}var el=function(e,t){es(document.body,"reset",function(n){e.current.form===n.target&&t(n)})},eu=function(e){es(window,"resize",e)},ed=function(e){es(document.fonts,"loadingdone",e)},ec=["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"],ep=c.forwardRef(function(e,t){var n=e.cacheMeasurements,r=e.maxRows,i=e.minRows,a=e.onChange,o=void 0===a?er:a,s=e.onHeightChange,l=void 0===s?er:s,u=(0,q.default)(e,ec),d=void 0!==u.value,p=c.useRef(null),m=X(p,t),h=c.useRef(0),f=c.useRef(),g=function(){var e=p.current,t=n&&f.current?f.current:eo(e);if(t){f.current=t;var a,o,s,u,d,c,m,g,y,v,b,x=(a=e.value||e.placeholder||"x",void 0===(o=i)&&(o=1),void 0===(s=r)&&(s=1/0),et||((et=document.createElement("textarea")).setAttribute("tabindex","-1"),et.setAttribute("aria-hidden","true"),ee(et)),null===et.parentNode&&document.body.appendChild(et),u=t.paddingSize,d=t.borderSize,m=(c=t.sizingStyle).boxSizing,Object.keys(c).forEach(function(e){et.style[e]=c[e]}),ee(et),et.value=a,g=en(et,t),et.value=a,g=en(et,t),et.value="x",v=(y=et.scrollHeight-u)*o,"border-box"===m&&(v=v+u+d),g=Math.max(v,g),b=y*s,"border-box"===m&&(b=b+u+d),[g=Math.min(b,g),y]),_=x[0],k=x[1];h.current!==_&&(h.current=_,e.style.setProperty("height",_+"px","important"),l(_,{rowHeight:k}))}};return c.useLayoutEffect(g),el(p,function(){if(!d){var e=p.current.value;requestAnimationFrame(function(){var t=p.current;t&&e!==t.value&&g()})}}),eu(g),ed(g),c.createElement("textarea",(0,G.default)({},u,{onChange:function(e){d||g(),o(e)},ref:m}))}),em=e.i(614323),eh=e.i(2262),ef=(0,c.createContext)(null),eg=(0,m.createContextHook)(ef,"ThreadPrimitive.Viewport"),{useThreadViewport:ey,useThreadViewportStore:ev}=(0,eh.createContextStoreHook)(eg,"useThreadViewport"),eb=e=>{let t=(0,em.useCallbackRef)(e),n=ey(e=>e.onScrollToBottom);(0,c.useEffect)(()=>n(t),[n,t])},ex=(0,c.createContext)(null),e_=(0,m.createContextHook)(ex,"a component passed to <ThreadListPrimitive.Items components={...}>");function ek(e){let t=e_(e);return t?t.useThreadListItemRuntime():null}var ew=(0,h.createStateHookForRuntime)(ek);e.s(["ThreadListItemContext",()=>ex,"useThreadListItem",()=>ew,"useThreadListItemRuntime",()=>ek],629962);var eS=(0,c.forwardRef)(({autoFocus:e=!1,asChild:t,disabled:r,onChange:i,onKeyDown:a,onPaste:o,submitOnEnter:s=!0,cancelOnEscape:l=!0,unstable_focusOnRunStart:u=!0,unstable_focusOnScrollToBottom:d=!0,unstable_focusOnThreadSwitched:p=!0,addAttachmentOnPaste:m=!0,...h},f)=>{let g=ek(),b=y(),x=w(),_=S(e=>e.isEditing?e.text:""),I=t?V.Slot:ep,T=!!(v(e=>e.isDisabled)||r),C=(0,c.useRef)(null),A=(0,K.useComposedRefs)(f,C);(0,E.useEscapeKeydown)(e=>{l&&x.getState().canCancel&&(x.cancel(),e.preventDefault())});let P=async e=>{if(!m)return;let t=b.getState().capabilities,n=Array.from(e.clipboardData?.files||[]);if(t.attachments&&n.length>0)try{e.preventDefault(),await Promise.all(n.map(e=>x.addAttachment(e)))}catch(e){console.error("Error adding attachment:",e)}},$=e&&!T,O=(0,c.useCallback)(()=>{let e=C.current;e&&$&&(e.focus({preventScroll:!0}),e.setSelectionRange(e.value.length,e.value.length))},[$]);return(0,c.useEffect)(()=>O(),[O]),eb(()=>{"thread"===x.type&&d&&O()}),(0,c.useEffect)(()=>{if("thread"===x.type&&u)return b.unstable_on("run-start",O)},[u,O,x,b]),(0,c.useEffect)(()=>{if("thread"===x.type&&p)return g.unstable_on("switched-to",O)},[p,O,x,g]),(0,n.jsx)(I,{name:"input",value:_,...h,ref:A,disabled:T,onChange:k(i,e=>{if(x.getState().isEditing)return x.setText(e.target.value)}),onKeyDown:k(a,e=>{if(!T&&s&&!e.nativeEvent.isComposing&&"Enter"===e.key&&!1===e.shiftKey){let{isRunning:t}=b.getState();t||(e.preventDefault(),C.current?.closest("form")?.requestSubmit())}}),onPaste:k(o,P)})});eS.displayName="ComposerPrimitive.Input";var eI=T("ComposerPrimitive.Cancel",()=>{let e=w(),t=S(e=>!e.canCancel),n=(0,c.useCallback)(()=>{e.cancel()},[e]);return t?null:n}),eT=T("ComposerPrimitive.AddAttachment",({multiple:e=!0}={})=>{let t=S(e=>!e.isEditing),n=w(),r=(0,c.useCallback)(()=>{let t=document.createElement("input");t.type="file",t.multiple=e,t.hidden=!0;let r=n.getAttachmentAccept();"*"!==r&&(t.accept=r),document.body.appendChild(t),t.onchange=e=>{let r=e.target.files;if(r){for(let e of r)n.addAttachment(e);document.body.removeChild(t)}},t.oncancel=()=>{t.files&&0!==t.files.length||document.body.removeChild(t)},t.click()},[n,e]);return t?null:r},["multiple"]),eC=(0,c.createContext)(null),eA=(0,m.createContextHook)(eC,"a ComposerPrimitive.Attachments or MessagePrimitive.Attachments component");function eP(e){let t=eA(e);return t?t.useAttachmentRuntime():null}(0,h.createStateHookForRuntime)(eP);var eE=(0,h.createStateHookForRuntime)(function(e){let t=eP(e);if(!t)return null;if("thread-composer"!==t.source)throw Error("This component must be used within a thread's ComposerPrimitive.Attachments component.");return t});(0,h.createStateHookForRuntime)(function(e){let t=eP(e);if(!t)return null;if("edit-composer"!==t.source)throw Error("This component must be used within a message's ComposerPrimitive.Attachments component.");return t});var e$=(0,h.createStateHookForRuntime)(function(e){let t=eP(e);if(!t)return null;if("message"!==t.source)throw Error("This component must be used within a MessagePrimitive.Attachments component.");return t}),eO=e.i(520629),eR=e.i(618178),eD=e.i(240461),ej=({runtime:e,children:t})=>{let r=(e=>{let[t]=(0,c.useState)(()=>(0,eO.create)(()=>e));return(0,c.useEffect)(()=>{(0,eD.ensureBinding)(e),(0,eR.writableStore)(t).setState(e,!0)},[e,t]),t})(e),[i]=(0,c.useState)(()=>({useAttachmentRuntime:r}));return(0,n.jsx)(eC.Provider,{value:i,children:t})},eU=({components:e})=>{let t=eE(t=>((e,t)=>{let n=t.type;switch(n){case"image":return e?.Image??e?.Attachment;case"document":return e?.Document??e?.Attachment;case"file":return e?.File??e?.Attachment;default:throw Error(`Unknown attachment type: ${n}`)}})(e,t));return t?(0,n.jsx)(t,{}):null},eN=(0,c.memo)(({components:e,attachmentIndex:t})=>{let r=w(),i=(0,c.useMemo)(()=>r.getAttachmentByIndex(t),[r,t]);return(0,n.jsx)(ej,{runtime:i,children:(0,n.jsx)(eU,{components:e})})},(e,t)=>e.attachmentIndex===t.attachmentIndex&&e.components?.Image===t.components?.Image&&e.components?.Document===t.components?.Document&&e.components?.File===t.components?.File&&e.components?.Attachment===t.components?.Attachment),eM=({components:e})=>{let t=S(e=>e.attachments.length);return(0,c.useMemo)(()=>Array.from({length:t},(t,r)=>(0,n.jsx)(eN,{attachmentIndex:r,components:e},r)),[t,e])};eM.displayName="ComposerPrimitive.Attachments";var ez=({children:e,...t})=>S(e=>(!0!==t.editing||!!e.isEditing)&&(!1!==t.editing||!e.isEditing))?e:null;ez.displayName="ComposerPrimitive.If",e.s([],687059),e.i(687059),e.s(["AddAttachment",()=>eT,"Attachments",()=>eM,"Cancel",()=>eI,"If",()=>ez,"Input",()=>eS,"Root",()=>H,"Send",()=>B],851030);var eL=e.i(851030),eL=eL,eF=e=>{let t=(0,c.useRef)(void 0);return(0,c.useCallback)(n=>{t.current&&t.current(),n&&(t.current=e(n))},[e])},eZ=(0,c.forwardRef)((e,t)=>{let r,i=(r=(0,p.useMessageUtilsStore)(),eF((0,c.useCallback)(e=>{let t=r.getState().setIsHovering,n=()=>{t(!0)},i=()=>{t(!1)};return e.addEventListener("mouseenter",n),e.addEventListener("mouseleave",i),()=>{e.removeEventListener("mouseenter",n),e.removeEventListener("mouseleave",i),t(!1)}},[r]))),a=(0,K.useComposedRefs)(t,i);return(0,n.jsx)(d.Primitive.div,{...e,ref:a})});eZ.displayName="MessagePrimitive.Root";var eB=e.i(318066),eH=e.i(744660),eK={type:"complete"},eV={type:"running"},eG=({children:e,text:t,isRunning:r})=>{let[i]=(0,c.useState)(()=>{let e=(0,eO.create)(()=>({status:r?eV:eK,type:"text",text:t})),n=new eH.ContentPartRuntimeImpl({path:{ref:"text",threadSelector:{type:"main"},messageSelector:{type:"messageId",messageId:""},contentPartSelector:{type:"index",index:0}},getState:e.getState,subscribe:e.subscribe});return(0,eD.ensureBinding)(n),{useContentPartRuntime:(0,eO.create)(()=>n),useContentPart:e}});return(0,c.useEffect)(()=>{let e=i.useContentPart.getState(),n=e.text!==t,a=r?eV:eK,o=e.status!==a;(n||o)&&(0,eR.writableStore)(i.useContentPart).setState({type:"text",text:t,status:a},!0)},[i,r,t]),(0,n.jsx)(eB.ContentPartContext.Provider,{value:i,children:e})},eq=(0,c.createContext)(null),eJ=(0,m.createContextHook)(eq,"AssistantRuntimeProvider");function eW(e){let t=eJ(e);return t?t.useAssistantRuntime():null}var{useToolUIs:eY,useToolUIsStore:eX}=(0,eh.createContextStoreHook)(eJ,"useToolUIs");(0,h.createStateHookForRuntime)(e=>eW(e)?.threads??null),e.s(["AssistantContext",()=>eq,"useAssistantRuntime",()=>eW,"useToolUIs",()=>eY,"useToolUIsStore",()=>eX],915629);var eQ=({runtime:e,children:t})=>{let r=(e=>{let[t]=(0,c.useState)(()=>(0,eO.create)(()=>e));return(0,c.useEffect)(()=>{(0,eD.ensureBinding)(e),(0,eR.writableStore)(t).setState(e,!0)},[e,t]),t})(e),[i]=(0,c.useState)(()=>({useContentPartRuntime:r}));return(0,n.jsx)(eB.ContentPartContext.Provider,{value:i,children:t})},e0=e.i(865762),e1=e.i(947629),e4=(0,c.forwardRef)(({smooth:e=!0,component:t="span",...r},i)=>{let{text:a,status:o}=(0,e1.useSmooth)((0,e0.useContentPartText)(),e);return(0,n.jsx)(t,{"data-status":o.type,...r,ref:i,children:a})});e4.displayName="ContentPartPrimitive.Text";var e6=(0,c.forwardRef)((e,t)=>{let{image:r}=(0,eB.useContentPart)(e=>{if("image"!==e.type)throw Error("ContentPartImage can only be used inside image content parts.");return e});return(0,n.jsx)(d.Primitive.img,{src:r,...e,ref:t})});e6.displayName="ContentPartPrimitive.Image";var e2=({children:e})=>(0,eB.useContentPart)(e=>"running"===e.status.type)?e:null;e2.displayName="ContentPartPrimitive.InProgress";var e9=({Fallback:e,...t})=>{let r=eY(e=>e.getToolUI(t.toolName))??e;return r?(0,n.jsx)(r,{...t}):null},e5=()=>(0,n.jsxs)("p",{style:{whiteSpace:"pre-line"},children:[(0,n.jsx)(e4,{}),(0,n.jsx)(e2,{children:(0,n.jsx)("span",{style:{fontFamily:"revert"},children:" ●"})})]}),e3=()=>null,e8=()=>null,e7=()=>(0,n.jsx)(e6,{}),te=()=>null,tt=()=>null,tn=({components:{Text:e=e5,Reasoning:t=e3,Image:r=e7,Source:i=e8,File:a=te,Unstable_Audio:o=tt,tools:s={}}={}})=>{let l=(0,eB.useContentPartRuntime)(),u=(0,eB.useContentPart)(),d=u.type;if("tool-call"===d){let e=e=>l.addToolResult(e);if("Override"in s)return(0,n.jsx)(s.Override,{...u,addResult:e});let t=s.by_name?.[u.toolName]??s.Fallback;return(0,n.jsx)(e9,{...u,Fallback:t,addResult:e})}if("requires-action"===u.status.type)throw Error("Encountered unexpected requires-action status");switch(d){case"text":return(0,n.jsx)(e,{...u});case"reasoning":return(0,n.jsx)(t,{...u});case"source":return(0,n.jsx)(i,{...u});case"image":return(0,n.jsx)(r,{...u});case"file":return(0,n.jsx)(a,{...u});case"audio":return(0,n.jsx)(o,{...u});default:throw Error(`Unknown content part type: ${d}`)}},tr=(0,c.memo)(({partIndex:e,components:t})=>{let r=(0,p.useMessageRuntime)(),i=(0,c.useMemo)(()=>r.getContentPartByIndex(e),[r,e]);return(0,n.jsx)(eQ,{runtime:i,children:(0,n.jsx)(tn,{components:t})})},(e,t)=>e.partIndex===t.partIndex&&e.components?.Text===t.components?.Text&&e.components?.Reasoning===t.components?.Reasoning&&e.components?.Source===t.components?.Source&&e.components?.Image===t.components?.Image&&e.components?.File===t.components?.File&&e.components?.Unstable_Audio===t.components?.Unstable_Audio&&e.components?.tools===t.components?.tools),ti=Object.freeze({type:"complete"}),ta=({status:e,component:t})=>(0,n.jsx)(eG,{text:"",isRunning:"running"===e.type,children:(0,n.jsx)(t,{type:"text",text:"",status:e})}),to=(0,c.memo)(({components:e})=>{let t=(0,p.useMessage)(e=>e.status)??ti;return e?.Empty?(0,n.jsx)(e.Empty,{status:t}):(0,n.jsx)(ta,{status:t,component:e?.Text??e5})},(e,t)=>e.components?.Empty===t.components?.Empty&&e.components?.Text===t.components?.Text),ts=({components:e})=>{let t=(0,p.useMessage)(e=>e.content.length),r=(0,c.useMemo)(()=>0===t?(0,n.jsx)(to,{components:e}):Array.from({length:t},(t,r)=>(0,n.jsx)(tr,{partIndex:r,components:e},r)),[t,e]);return(0,n.jsx)(n.Fragment,{children:r})};ts.displayName="MessagePrimitive.Content";var tl=({components:e})=>{let t=e$(t=>((e,t)=>{let n=t.type;switch(n){case"image":return e?.Image??e?.Attachment;case"document":return e?.Document??e?.Attachment;case"file":return e?.File??e?.Attachment;default:throw Error(`Unknown attachment type: ${n}`)}})(e,t));return t?(0,n.jsx)(t,{}):null},tu=(0,c.memo)(({components:e,attachmentIndex:t})=>{let r=(0,p.useMessageRuntime)(),i=(0,c.useMemo)(()=>r.getAttachmentByIndex(t),[r,t]);return(0,n.jsx)(ej,{runtime:i,children:(0,n.jsx)(tl,{components:e})})},(e,t)=>e.attachmentIndex===t.attachmentIndex&&e.components?.Image===t.components?.Image&&e.components?.Document===t.components?.Document&&e.components?.File===t.components?.File&&e.components?.Attachment===t.components?.Attachment),td=({components:e})=>{let t=(0,p.useMessage)(e=>"user"!==e.role?0:e.attachments.length);return(0,c.useMemo)(()=>Array.from({length:t},(t,r)=>(0,n.jsx)(tu,{attachmentIndex:r,components:e},r)),[t,e])};td.displayName="MessagePrimitive.Attachments";var tc=({children:e})=>(0,p.useMessage)(e=>e.status?.type==="incomplete"&&"error"===e.status.reason)?(0,n.jsx)(n.Fragment,{children:e}):null;tc.displayName="MessagePrimitive.Error",e.s([],411197),e.i(411197),e.s(["Attachments",()=>td,"Content",()=>ts,"Error",()=>tc,"If",()=>z,"Root",()=>eZ],673666);var tp=e.i(673666),tp=tp,tm=(0,c.forwardRef)((e,t)=>(0,n.jsx)(d.Primitive.div,{...e,ref:t}));tm.displayName="ThreadPrimitive.Root";var th=({children:e})=>v(e=>0===e.messages.length)?e:null;th.displayName="ThreadPrimitive.Empty";var tf=({children:e,...t})=>v(e=>(!0!==t.empty||0===e.messages.length)&&(!1!==t.empty||0!==e.messages.length)&&(!0!==t.running||!!e.isRunning)&&(!1!==t.running||!e.isRunning)&&(!0!==t.disabled||!!e.isDisabled)&&(!1!==t.disabled||!e.isDisabled)&&!0)?e:null;tf.displayName="ThreadPrimitive.If";var tg=({children:e})=>{let t=(()=>{let e=ev({optional:!0}),[t]=(0,c.useState)(()=>{let e;return e=new Set,(0,eO.create)(()=>({isAtBottom:!0,scrollToBottom:()=>{for(let t of e)t()},onScrollToBottom:t=>(e.add(t),()=>{e.delete(t)})}))});return(0,c.useEffect)(()=>e?.getState().onScrollToBottom(()=>{t.getState().scrollToBottom()}),[e,t]),(0,c.useEffect)(()=>{if(e)return t.subscribe(t=>{e.getState().isAtBottom!==t.isAtBottom&&(0,eR.writableStore)(e).setState({isAtBottom:t.isAtBottom})})},[t,e]),t})(),[r]=(0,c.useState)(()=>({useThreadViewport:t}));return(0,n.jsx)(ef.Provider,{value:r,children:e})};e.s(["ThreadViewportProvider",()=>tg],610551);var ty=(0,c.forwardRef)(({autoScroll:e,children:t,...r},i)=>{let a=(({autoScroll:e=!0})=>{var t;let n,r=(0,c.useRef)(null),i=ev(),a=(0,c.useRef)(0),o=(0,c.useRef)(!1),s=(0,c.useCallback)(t=>{let n=r.current;n&&e&&(o.current=!0,n.scrollTo({top:n.scrollHeight,behavior:t}))},[e]),l=()=>{let e=r.current;if(!e)return;let t=i.getState().isAtBottom,n=e.scrollHeight-e.scrollTop<=e.clientHeight+1;!n&&a.current<e.scrollTop||(n&&(o.current=!1),n!==t&&(0,eR.writableStore)(i).setState({isAtBottom:n})),a.current=e.scrollTop},u=(t=()=>{(o.current||i.getState().isAtBottom)&&s("instant"),l()},n=(0,em.useCallbackRef)(t),eF((0,c.useCallback)(e=>{let t=new ResizeObserver(()=>{n()}),r=new MutationObserver(()=>{n()});return t.observe(e),r.observe(e,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),()=>{t.disconnect(),r.disconnect()}},[n]))),d=eF(e=>(e.addEventListener("scroll",l),()=>{e.removeEventListener("scroll",l)}));eb(()=>{s("auto")});let p=y();return(0,c.useEffect)(()=>p.unstable_on("run-start",()=>s("auto")),[s,p]),(0,K.useComposedRefs)(u,d,r)})({autoScroll:e}),o=(0,K.useComposedRefs)(i,a);return(0,n.jsx)(d.Primitive.div,{...r,ref:o,children:t})});ty.displayName="ThreadPrimitive.ViewportScrollable";var tv=(0,c.forwardRef)((e,t)=>(0,n.jsx)(tg,{children:(0,n.jsx)(ty,{...e,ref:t})}));tv.displayName="ThreadPrimitive.Viewport";var tb=({runtime:e,children:t})=>{let r=(e=>{let[t]=(0,c.useState)(()=>(0,eO.create)(()=>e));return(0,c.useEffect)(()=>{(0,eD.ensureBinding)(e),(0,eR.writableStore)(t).setState(e,!0)},[e,t]),t})(e),i=(()=>{let[e]=(0,c.useState)(()=>(0,eO.create)(e=>({isCopied:!1,setIsCopied:t=>{e({isCopied:t})},isHovering:!1,setIsHovering:t=>{e({isHovering:t})}})));return e})(),[a]=(0,c.useState)(()=>({useMessageRuntime:r,useMessageUtils:i}));return(0,n.jsx)(p.MessageContext.Provider,{value:a,children:t})},tx=(e,t)=>e.Message===t.Message&&e.EditComposer===t.EditComposer&&e.UserEditComposer===t.UserEditComposer&&e.AssistantEditComposer===t.AssistantEditComposer&&e.SystemEditComposer===t.SystemEditComposer&&e.UserMessage===t.UserMessage&&e.AssistantMessage===t.AssistantMessage&&e.SystemMessage===t.SystemMessage,t_=()=>null,tk=({components:e})=>{let t=((e,t,n)=>{switch(t){case"user":if(n)return e.UserEditComposer??e.EditComposer??e.UserMessage??e.Message;return e.UserMessage??e.Message;case"assistant":if(n)return e.AssistantEditComposer??e.EditComposer??e.AssistantMessage??e.Message;return e.AssistantMessage??e.Message;case"system":if(n)return e.SystemEditComposer??e.EditComposer??e.SystemMessage??e.Message;return e.SystemMessage??t_;default:throw Error(`Unknown message role: ${t}`)}})(e,(0,p.useMessage)(e=>e.role),(0,p.useEditComposer)(e=>e.isEditing));return(0,n.jsx)(t,{})},tw=(0,c.memo)(({messageIndex:e,components:t})=>{let r=y(),i=(0,c.useMemo)(()=>r.getMesssageByIndex(e),[r,e]);return(0,n.jsx)(tb,{runtime:i,children:(0,n.jsx)(tk,{components:t})})},(e,t)=>e.messageIndex===t.messageIndex&&tx(e.components,t.components)),tS=({components:e})=>{let t=v(e=>e.messages.length);return(0,c.useMemo)(()=>0===t?null:Array.from({length:t},(t,r)=>(0,n.jsx)(tw,{messageIndex:r,components:e},r)),[t,e])};tS.displayName="ThreadPrimitive.Messages";var tI=(0,c.memo)(tS,(e,t)=>tx(e.components,t.components)),tT=T("ThreadPrimitive.ScrollToBottom",()=>{let e=ey(e=>e.isAtBottom),t=ev(),n=(0,c.useCallback)(()=>{t.getState().scrollToBottom()},[t]);return e?null:n}),tC=T("ThreadPrimitive.Suggestion",({prompt:e,autoSend:t})=>{let n=y(),r=v(e=>e.isDisabled),i=(0,c.useCallback)(()=>{t&&!n.getState().isRunning?n.append(e):n.composer.setText(e)},[n,t,e]);return r?null:i},["prompt","autoSend","method"]);e.s([],872152),e.i(872152),e.s(["Empty",()=>th,"If",()=>tf,"Messages",()=>tI,"Root",()=>tm,"ScrollToBottom",()=>tT,"Suggestion",()=>tC,"Viewport",()=>tv],390723);var tA=e.i(390723),tA=tA,tP=e.i(149724),tE=e.i(398430),t$=e.i(206435),tO=e.i(546703),tR=e.i(53607),tD=e.i(497709),tj=e.i(398365),tU=e.i(209114),tN=e.i(126701),tM=e.i(289587),tz=e.i(596984),tL=e.i(606886);let tF=(0,c.createContext)(void 0),tZ=(0,c.createContext)(!1),tB=(0,c.createContext)(!1),tH=(0,c.createContext)(!1),tK=(0,c.createContext)(null);function tV(){return(0,c.useContext)(tH)}let tG=()=>(0,n.jsx)(tA.ScrollToBottom,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Scroll to bottom",variant:"outline",className:"absolute -top-10 rounded-full disabled:invisible shadow-lg bg-background/80 backdrop-blur-sm ring-1 ring-foreground/[0.06]",children:(0,n.jsx)(tE.ArrowDownIcon,{size:14})})}),tq=()=>(0,n.jsx)(tA.Empty,{children:(0,n.jsx)("div",{className:"flex w-full max-w-[var(--thread-max-width)] flex-grow flex-col",children:(0,n.jsxs)("div",{className:"flex w-full flex-grow flex-col items-center justify-center py-16",children:[(0,n.jsx)("div",{className:"w-14 h-14 rounded-2xl bg-gradient-to-br from-blue-500/20 to-blue-600/10 flex items-center justify-center mb-5 ring-1 ring-blue-500/20 shadow-lg shadow-blue-500/10",children:(0,n.jsx)(tU.PaperPlaneRightIcon,{className:"w-7 h-7 text-blue-500",weight:"duotone"})}),(0,n.jsx)("h2",{className:"text-lg font-semibold tracking-tight text-foreground mb-2",children:"Hello! 👋"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground text-center max-w-[260px] leading-relaxed",children:"I'm here to help you create beautiful, modern email templates. Describe what you'd like to build."})]})})});function tJ(e){return"complete"===e.status.type}function tW(e){return"complete"!==e.status.type}async function tY(e,t){if(0===e.length)return[];if(null==t){if(e.some(tW))throw Error("Image attachments are not available in this composer.");return e.filter(tJ)}let n=[];for(let r of e){if(tJ(r)){n.push(r);continue}n.push(await t.send(r))}return n}let tX=({attachment:e,onRemove:t})=>{let{file:r,name:i,content:a}=e,o=r instanceof Blob?r:null,[s,l]=(0,c.useState)(null);(0,c.useEffect)(()=>{if(!o)return void l(null);let e=URL.createObjectURL(o);return l(e),()=>{URL.revokeObjectURL(e)}},[o]);let u=(0,c.useMemo)(()=>(function(e){if(!Array.isArray(e))return null;for(let t of e)if(t&&"object"==typeof t&&"image"===t.type){let e=t.image;if("string"==typeof e)return e}return null})(a),[a]),d=s??u;return(0,n.jsxs)("div",{className:"group/attachment relative h-14 w-14 overflow-hidden rounded-xl ring-1 ring-foreground/[0.08] bg-foreground/[0.03] shadow-sm",children:[d?(0,n.jsx)("img",{src:d,alt:i,className:"h-full w-full object-cover",draggable:!1}):(0,n.jsx)("div",{className:"flex h-full w-full items-center justify-center text-muted-foreground",children:(0,n.jsx)(tj.ImageIcon,{className:"h-5 w-5"})}),t&&(0,n.jsx)("button",{type:"button","aria-label":`Remove ${i}`,onClick:t,className:"absolute right-1 top-1 grid h-5 w-5 place-items-center rounded-full bg-background/95 text-foreground/80 ring-1 ring-foreground/[0.1] shadow opacity-0 group-hover/attachment:opacity-100 focus-visible:opacity-100 transition-opacity hover:text-foreground",children:(0,n.jsx)(tz.XIcon,{className:"h-3 w-3",weight:"bold"})})]})},tQ=()=>{let e=w(),t=S(e=>e.attachments);return 0===t.length?null:(0,n.jsx)("div",{className:"flex flex-wrap items-center gap-2 px-3 pt-3 pb-1 border-b border-foreground/[0.04]",children:t.map((t,r)=>(0,n.jsx)(tX,{attachment:t,onRemove:()=>(0,tL.runAsynchronously)(e.getAttachmentByIndex(r).remove())},t.id))})},t0=()=>{let e=(0,p.useMessage)(e=>"user"===e.role?e.attachments:void 0);return e&&0!==e.length?(0,n.jsx)("div",{className:"flex flex-wrap items-center justify-end gap-2 mb-1.5",children:e.map(e=>(0,n.jsx)(tX,{attachment:e},e.id))}):null},t1=()=>{let e=w(),t=S(e=>e.attachments.length),{toast:r}=(0,o.useToast)(),a=t>=l.MAX_IMAGES_PER_MESSAGE,d=a?`Limit reached (${l.MAX_IMAGES_PER_MESSAGE}/${l.MAX_IMAGES_PER_MESSAGE})`:`Attach image (${t}/${l.MAX_IMAGES_PER_MESSAGE})`;return(0,n.jsx)(i.TooltipIconButton,{tooltip:d,side:"top",onClick:()=>{let t=u(e.getState().attachments.length+1);if(!t.ok)return void r({variant:"destructive",description:t.reason});let n=document.createElement("input");n.type="file",n.accept="image/*",n.multiple=!0,n.hidden=!0,document.body.appendChild(n),n.onchange=t=>{let i=t.target.files;if(i&&i.length>0){let t=e.getState().attachments.length,n=Math.max(0,l.MAX_IMAGES_PER_MESSAGE-t),a=Array.from(i),o=a.slice(0,n),s=u(t+a.length);s.ok||r({variant:"destructive",description:s.reason}),(0,tL.runAsynchronously)((async()=>{for(let t of o){if(e.getState().attachments.length>=l.MAX_IMAGES_PER_MESSAGE)break;try{await e.addAttachment(t)}catch(e){r({variant:"destructive",description:e instanceof Error?e.message:`Failed to attach "${t.name}".`})}}})())}document.body.removeChild(n)},n.oncancel=()=>{(!n.files||0===n.files.length)&&n.parentNode&&document.body.removeChild(n)},n.click()},className:(0,s.cn)("h-7 w-7 rounded-lg text-muted-foreground hover:bg-foreground/[0.05] hover:text-foreground",a&&"text-muted-foreground/70"),children:(0,n.jsx)(tj.ImageIcon,{className:"h-[15px] w-[15px]",weight:"regular"})})},t4="placeholder:text-muted-foreground/60 max-h-32 w-full resize-none border-none bg-transparent px-4 py-3 text-sm outline-none focus:ring-0 disabled:cursor-not-allowed leading-relaxed",t6=({prefix:e,suffixes:t,typeSpeed:r,deleteSpeed:i,pauseAfterType:a,pauseAfterDelete:o,autoFocus:s=!0})=>{let[l,u]=(0,c.useState)(""),d=(0,c.useRef)({suffixIndex:0,charIndex:0,phase:"typing"});return(0,c.useEffect)(()=>{let e;return e=setTimeout(function n(){let s=d.current,l=t[s.suffixIndex%t.length];switch(s.phase){case"typing":s.charIndex<l.length?(s.charIndex++,u(l.slice(0,s.charIndex)),e=setTimeout(n,r)):(s.phase="pausing",e=setTimeout(n,a));break;case"pausing":s.phase="deleting",e=setTimeout(n,i);break;case"deleting":s.charIndex>0?(s.charIndex--,u(l.slice(0,s.charIndex)),e=setTimeout(n,i)):(s.phase="waiting",e=setTimeout(n,o));break;case"waiting":s.suffixIndex=(s.suffixIndex+1)%t.length,s.charIndex=0,s.phase="typing",e=setTimeout(n,r)}},500),()=>clearTimeout(e)},[t,r,i,a,o]),(0,n.jsx)(eL.Input,{rows:1,autoFocus:s,placeholder:e+l,className:t4})},t2=({placeholder:e,autoFocus:t=!0})=>(0,n.jsx)(eL.Input,{rows:1,autoFocus:t,placeholder:e??"Describe what you want...",className:t4}),t9=({placeholder:e,autoFocus:t=!0})=>{let r=tV();return(0,n.jsxs)(eL.Root,{className:"group/composer relative flex w-full flex-col rounded-2xl border border-border/20 dark:border-foreground/[0.08] bg-background/95 dark:bg-background/80 shadow-sm ring-1 ring-foreground/[0.04] transition-all duration-150 hover:transition-none focus-within:ring-2 focus-within:ring-blue-500/20 focus-within:border-blue-500/30",children:[r&&(0,n.jsx)(tQ,{}),"object"==typeof e?(0,n.jsx)(t6,{prefix:e.prefix,suffixes:e.suffixes,typeSpeed:e.typeSpeed??70,deleteSpeed:e.deleteSpeed??40,pauseAfterType:e.pauseAfterType??2e3,pauseAfterDelete:e.pauseAfterDelete??400,autoFocus:t}):(0,n.jsx)(t2,{placeholder:e,autoFocus:t}),(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 pb-2.5 gap-2",children:[(0,n.jsx)("div",{className:"flex items-center gap-1",children:r&&(0,n.jsx)(t1,{})}),(0,n.jsx)(t5,{})]})]})},t5=()=>(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(tA.If,{running:!1,children:(0,n.jsx)(eL.Send,{asChild:!0,children:(0,n.jsxs)(a.Button,{size:"sm",className:"rounded-xl h-7 px-3 bg-blue-600 hover:bg-blue-500 text-white shadow-md shadow-blue-500/20 transition-all duration-150 hover:transition-none active:scale-[0.98]",children:[(0,n.jsx)(tU.PaperPlaneRightIcon,{className:"mr-1.5 h-3 w-3",weight:"bold"}),(0,n.jsx)("span",{className:"text-[11px] font-semibold",children:"Generate"})]})})}),(0,n.jsx)(tA.If,{running:!0,children:(0,n.jsx)(eL.Cancel,{asChild:!0,children:(0,n.jsxs)(a.Button,{size:"sm",variant:"outline",className:"rounded-xl h-7 px-3 border-orange-500/30 bg-orange-500/10 text-orange-600 dark:text-orange-400 hover:bg-orange-500/20",children:[(0,n.jsx)(na,{className:"mr-1.5 h-3 w-3"}),(0,n.jsx)("span",{className:"text-[11px] font-semibold",children:"Stop"})]})})})]}),t3=()=>(0,n.jsxs)(tp.Root,{className:"group flex flex-col items-end w-full max-w-[var(--thread-max-width)] py-3 gap-1.5",children:[(0,n.jsx)(t0,{}),(0,n.jsxs)("div",{className:"flex items-start gap-2 justify-end w-full",children:[(0,n.jsx)(t8,{}),(0,n.jsx)(tp.If,{hasContent:!0,children:(0,n.jsx)("div",{className:"bg-foreground/[0.05] text-foreground max-w-[90%] break-words rounded-2xl px-3.5 py-2.5 text-sm ring-1 ring-foreground/[0.06]",children:(0,n.jsx)(tp.Content,{})})})]}),(0,n.jsx)(nr,{className:"justify-end mr-1"})]}),t8=()=>(0,c.useContext)(tZ)?null:(0,n.jsx)(D.Root,{hideWhenRunning:!0,autohide:"not-last",className:"flex items-center gap-0.5 self-center opacity-0 group-hover:opacity-100 transition-opacity duration-150",children:(0,n.jsx)(D.Edit,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Edit",className:"h-7 w-7 rounded-md hover:bg-foreground/[0.05]",children:(0,n.jsx)(tN.PencilSimpleIcon,{size:13})})})}),t7=()=>{let e=tV(),t=(0,c.useContext)(tK),r=w(),i=y(),{toast:s}=(0,o.useToast)(),l=(0,p.useMessage)(e=>e.id),u=(0,p.useMessage)(e=>e.parentId??null),d=(0,p.useMessage)(e=>e.role),m=(0,p.useMessage)(e=>e.content),h=(0,p.useMessage)(e=>e.attachments??[]),f=S(e=>e.text),g=S(e=>e.attachments),v=f!==(0,c.useMemo)(()=>m.filter(e=>"text"===e.type&&"string"==typeof e.text).map(e=>e.text??"").join(""),[m])||g.length!==h.length||g.some((e,t)=>e.id!==h[t].id),b=async()=>{if(v)try{let e=r.getState(),n=await tY(e.attachments,t);i.append({parentId:u,sourceId:l,role:d,content:e.text?[{type:"text",text:e.text}]:[],attachments:n,metadata:{custom:{}},runConfig:e.runConfig}),r.cancel()}catch(e){s({variant:"destructive",description:e instanceof Error?e.message:"Failed to send edited message."})}};return(0,n.jsxs)(eL.Root,{className:"bg-foreground/[0.03] my-3 flex w-full max-w-[var(--thread-max-width)] flex-col gap-2 rounded-xl ring-1 ring-foreground/[0.08]",children:[e&&(0,n.jsx)(tQ,{}),(0,n.jsx)(eL.Input,{className:"text-foreground flex min-h-[2.5rem] w-full resize-none bg-transparent p-3 pb-0 text-sm outline-none"}),(0,n.jsxs)("div",{className:"px-3 pb-2.5 flex items-center justify-between gap-2",children:[(0,n.jsx)("div",{className:"flex items-center gap-1",children:e&&(0,n.jsx)(t1,{})}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(eL.Cancel,{asChild:!0,children:(0,n.jsx)(a.Button,{variant:"ghost",size:"sm",className:"h-7 px-2.5 text-xs",children:"Cancel"})}),(0,n.jsx)(a.Button,{size:"sm",className:"h-7 px-3 text-xs bg-blue-600 hover:bg-blue-500",disabled:!v,onClick:b,children:"Send"})]})]})]})},ne=()=>{let e=(0,c.useContext)(tB),t=(0,c.useContext)(tF)??{Text:r.MarkdownText};return(0,n.jsxs)(tp.Root,{className:"flex flex-col relative w-full max-w-[var(--thread-max-width)] py-4 group",children:[(0,n.jsxs)("div",{className:"flex items-start gap-3",children:[(0,n.jsx)("div",{className:"w-7 h-7 rounded-full bg-gradient-to-br from-blue-500/20 to-blue-600/10 flex items-center justify-center shrink-0 ring-1 ring-blue-500/20 shadow-sm",children:e?(0,n.jsx)("div",{className:"w-2.5 h-2.5 rounded-full bg-blue-500"}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(tA.If,{running:!0,children:(0,n.jsx)("div",{className:"w-2.5 h-2.5 rounded-full bg-blue-500 animate-pulse"})}),(0,n.jsx)(tA.If,{running:!1,children:(0,n.jsx)("div",{className:"w-2.5 h-2.5 rounded-full bg-blue-500"})})]})}),(0,n.jsxs)("div",{className:"flex-1 min-w-0 space-y-2",children:[(0,n.jsx)("div",{className:"text-foreground break-words leading-relaxed text-sm",children:(0,n.jsx)(tp.Content,{components:t})}),(0,n.jsx)(nt,{}),(0,n.jsx)(nn,{})]})]}),(0,n.jsx)(nr,{className:"mt-1.5 ml-10"})]})},nt=()=>(0,n.jsx)(tp.Error,{children:(0,n.jsxs)("div",{className:"mt-3 rounded-xl bg-destructive/5 border border-destructive/15 p-4 flex flex-col gap-3 items-center text-center",children:[(0,n.jsx)("div",{className:"w-10 h-10 rounded-full bg-destructive/10 flex items-center justify-center ring-1 ring-destructive/20",children:(0,n.jsx)(tM.WarningCircle,{className:"w-5 h-5 text-destructive",weight:"fill"})}),(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("p",{className:"text-sm font-semibold text-foreground",children:"Generation Failed"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground max-w-[220px] leading-relaxed",children:"Something went wrong while generating your design. Please try again."})]}),(0,n.jsx)(D.Root,{className:"w-full mt-1",children:(0,n.jsx)(D.Reload,{asChild:!0,children:(0,n.jsxs)(a.Button,{variant:"outline",size:"sm",className:"w-full h-8 gap-2 rounded-lg border-destructive/20 bg-destructive/5 text-destructive hover:bg-destructive/10 hover:text-destructive transition-all duration-150 hover:transition-none",children:[(0,n.jsx)(tP.ArrowClockwiseIcon,{className:"w-3.5 h-3.5"}),(0,n.jsx)("span",{className:"text-xs font-medium",children:"Retry Generation"})]})})})]})}),nn=()=>(0,c.useContext)(tZ)?null:(0,n.jsxs)(D.Root,{hideWhenRunning:!0,autohide:"not-last",autohideFloat:"single-branch",className:"text-muted-foreground flex gap-0.5 -ml-1 opacity-0 group-hover:opacity-100 transition-opacity duration-150 data-[floating]:bg-background/95 data-[floating]:backdrop-blur-sm data-[floating]:absolute data-[floating]:rounded-lg data-[floating]:ring-1 data-[floating]:ring-foreground/[0.06] data-[floating]:p-1 data-[floating]:shadow-md",children:[(0,n.jsx)(D.Copy,{asChild:!0,children:(0,n.jsxs)(i.TooltipIconButton,{tooltip:"Copy",className:"h-7 w-7 rounded-md !text-muted-foreground hover:bg-foreground/[0.05] hover:!text-foreground",children:[(0,n.jsx)(tp.If,{copied:!0,children:(0,n.jsx)(tR.CheckIcon,{size:14,className:"text-green-500"})}),(0,n.jsx)(tp.If,{copied:!1,children:(0,n.jsx)(tD.CopyIcon,{size:14})})]})}),(0,n.jsx)(D.Reload,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Regenerate",className:"h-7 w-7 rounded-md !text-muted-foreground hover:bg-foreground/[0.05] hover:!text-foreground",children:(0,n.jsx)(tP.ArrowClockwiseIcon,{size:14})})})]}),nr=({className:e,...t})=>(0,n.jsxs)(F.Root,{hideWhenSingleBranch:!0,className:(0,s.cn)("text-muted-foreground inline-flex items-center gap-0.5 text-[11px]",e),...t,children:[(0,n.jsx)(F.Previous,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Previous",className:"h-6 w-6 rounded-md hover:bg-foreground/[0.05]",children:(0,n.jsx)(t$.CaretLeftIcon,{size:12})})}),(0,n.jsxs)("span",{className:"font-medium tabular-nums px-1",children:[(0,n.jsx)(F.Number,{})," / ",(0,n.jsx)(F.Count,{})]}),(0,n.jsx)(F.Next,{asChild:!0,children:(0,n.jsx)(i.TooltipIconButton,{tooltip:"Next",className:"h-6 w-6 rounded-md hover:bg-foreground/[0.05]",children:(0,n.jsx)(tO.CaretRightIcon,{size:12})})})]}),ni=({messages:e})=>{let[t,r]=(0,c.useState)(0),i=(0,c.useRef)(e);return(0,c.useEffect)(()=>{i.current!==e&&(i.current=e,r(0))},[e]),(0,c.useEffect)(()=>{let t=setInterval(()=>{r(t=>(t+1)%e.length)},1200);return()=>clearInterval(t)},[e.length]),(0,n.jsx)("div",{className:"flex w-full max-w-[var(--thread-max-width)] py-3",children:(0,n.jsxs)("div",{className:"flex items-center gap-3 ml-10",children:[(0,n.jsxs)("div",{className:"flex gap-1",children:[(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse"}),(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse",style:{animationDelay:"150ms"}}),(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse",style:{animationDelay:"300ms"}})]}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground transition-opacity duration-300",children:e[t]})]})})},na=({className:e})=>(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor",width:"16",height:"16",className:e,children:(0,n.jsx)("rect",{width:"10",height:"10",x:"3",y:"3",rx:"2"})});e.s(["Thread",0,({useOffWhiteLightMode:e=!1,composerPlaceholder:t,hideMessageActions:r=!1,runningStatusMessages:i,composerAttachments:a=!1,attachmentAdapter:o,welcome:s,assistantContentComponents:l,autoFocusComposer:u=!0})=>(0,n.jsx)(tZ.Provider,{value:r,children:(0,n.jsx)(tB.Provider,{value:!!i,children:(0,n.jsx)(tF.Provider,{value:l,children:(0,n.jsx)(tK.Provider,{value:o??null,children:(0,n.jsx)(tH.Provider,{value:a,children:(0,n.jsx)(tA.Root,{className:"box-border flex h-0 flex-grow flex-col overflow-hidden bg-transparent",style:{"--thread-max-width":"100%"},children:(0,n.jsxs)(tA.Viewport,{className:"flex h-full flex-col items-center overflow-y-auto scroll-smooth px-3 bg-inherit",children:[s?(0,n.jsx)(tA.Empty,{children:s}):(0,n.jsx)(tq,{}),(0,n.jsx)(tA.Messages,{components:{UserMessage:t3,EditComposer:t7,AssistantMessage:ne}}),i&&(0,n.jsx)(tA.If,{running:!0,children:(0,n.jsx)(ni,{messages:i})}),(0,n.jsx)(tA.If,{empty:!1,children:(0,n.jsx)("div",{className:"min-h-6 flex-grow"})}),(0,n.jsxs)("div",{className:"sticky bottom-0 mt-2 flex w-full max-w-[var(--thread-max-width)] flex-col items-center justify-end pt-6 pb-3",children:[(0,n.jsx)(tG,{}),(0,n.jsx)(t9,{placeholder:t,autoFocus:u})]})]})})})})})})})],775760)},181407,314921,e=>{"use strict";var t=e.i(94283),n=e.i(915629),r=e.i(520629),i=e.i(279377),a=e.i(618178),o=e.i(629962),s=e.i(240461),l=e.i(592426),u=({runtime:e,children:n})=>{let i=(e=>{let[n]=(0,t.useState)(()=>(0,r.create)(()=>e));return(0,t.useEffect)(()=>{(0,s.ensureBinding)(e),(0,a.writableStore)(n).setState(e,!0)},[e,n]),n})(e),[u]=(0,t.useState)(()=>({useThreadListItemRuntime:i}));return(0,l.jsx)(o.ThreadListItemContext.Provider,{value:u,children:n})};e.s(["ThreadListItemRuntimeProvider",()=>u],314921);var d=e.i(610551),c=({children:e,listItemRuntime:n,runtime:o})=>{let c=(e=>{let[n]=(0,t.useState)(()=>(0,r.create)(()=>e));return(0,t.useEffect)(()=>{(0,s.ensureBinding)(e),(0,s.ensureBinding)(e.composer),(0,a.writableStore)(n).setState(e,!0)},[e,n]),n})(o),[p]=(0,t.useState)(()=>({useThreadRuntime:c}));return(0,l.jsx)(u,{runtime:n,children:(0,l.jsx)(i.ThreadContext.Provider,{value:p,children:(0,l.jsx)(d.ThreadViewportProvider,{children:e})})})},p=(0,t.memo)(({children:e,runtime:i})=>{let o=(e=>{let[n]=(0,t.useState)(()=>(0,r.create)(()=>e));return(0,t.useEffect)(()=>{(0,s.ensureBinding)(e),(0,s.ensureBinding)(e.threads),(0,a.writableStore)(n).setState(e,!0)},[e,n]),n})(i),u=(0,t.useMemo)(()=>(0,r.create)(e=>{let t=new Map;return Object.freeze({getToolUI:e=>{let n=t.get(e);return n?.at(-1)||null},setToolUI:(n,r)=>{let i=t.get(n);return i||(i=[],t.set(n,i)),i.push(r),e({}),()=>{let t=i.indexOf(r);-1!==t&&i.splice(t,1),t===i.length&&e({})}}})}),[]),[d]=(0,t.useState)(()=>({useToolUIs:u,useAssistantRuntime:o})),p=i._core?.RenderComponent;return(0,l.jsxs)(n.AssistantContext.Provider,{value:d,children:[p&&(0,l.jsx)(p,{}),(0,l.jsx)(c,{runtime:i.thread,listItemRuntime:i.threads.mainItem,children:e})]})});e.s(["AssistantRuntimeProvider",()=>p],181407)},681140,e=>{"use strict";var t,n=e.i(94283),r=e.i(494093),i=e.i(94693),a=e.i(579969),o=(e,t)=>void 0===t?e.status?.type==="requires-action"&&"tool-calls"===e.status.reason&&e.content.every(e=>"tool-call"!==e.type||!!e.result):e.status?.type==="requires-action"&&"tool-calls"===e.status.reason&&e.content.every(e=>"tool-call"!==e.type||!!e.result||!t.includes(e.toolName)),s=e.i(174700),l=e.i(879021),u=e.i(883846),d=e.i(135185),c=class extends d.BaseComposerRuntimeCore{constructor(e,t,{parentId:n,message:r}){super(),this.runtime=e,this.endEditCallback=t,this._parentId=n,this._sourceId=r.id,this._previousText=(0,u.getThreadMessageText)(r),this.setText(this._previousText),this.setRole(r.role),this.setAttachments(r.attachments??[]),this._nonTextParts=r.content.filter(e=>"text"!==e.type),this.setRunConfig({...e.composer.runConfig})}get canCancel(){return!0}getAttachmentAdapter(){return this.runtime.adapters?.attachments}_nonTextParts;_previousText;_parentId;_sourceId;async handleSend(e){(0,u.getThreadMessageText)(e)!==this._previousText&&this.runtime.append({...e,content:[...e.content,...this._nonTextParts],parentId:this._parentId,sourceId:this._sourceId}),this.handleCancel()}handleCancel(){this.endEditCallback(),this._notifySubscribers()}},p=class{constructor(e){this._contextProvider=e}_subscriptions=new Set;_isInitialized=!1;repository=new s.MessageRepository;get messages(){return this.repository.getMessages()}get state(){let e;for(let t of this.messages)if("assistant"===t.role){e=t;break}return e?.metadata.unstable_state??null}composer=new l.DefaultThreadComposerRuntimeCore(this);getModelContext(){return this._contextProvider.getModelContext()}_editComposers=new Map;getEditComposer(e){return this._editComposers.get(e)}beginEdit(e){if(this._editComposers.has(e))throw Error("Edit already in progress");this._editComposers.set(e,new c(this,()=>this._editComposers.delete(e),this.repository.getMessage(e))),this._notifySubscribers()}getMessageById(e){return this.repository.getMessage(e)}getBranches(e){return this.repository.getBranches(e)}switchToBranch(e){this.repository.switchToBranch(e),this._notifySubscribers()}_notifySubscribers(){for(let e of this._subscriptions)e()}_notifyEventSubscribers(e){let t=this._eventSubscribers.get(e);if(t)for(let e of t)e()}subscribe(e){return this._subscriptions.add(e),()=>this._subscriptions.delete(e)}_submittedFeedback={};getSubmittedFeedback(e){return this._submittedFeedback[e]}submitFeedback({messageId:e,type:t}){let n=this.adapters?.feedback;if(!n)throw Error("Feedback adapter not configured");let{message:r}=this.repository.getMessage(e);n.submit({message:r,type:t}),this._submittedFeedback[e]={type:t},this._notifySubscribers()}_stopSpeaking;speech;speak(e){let t=this.adapters?.speech;if(!t)throw Error("Speech adapter not configured");let{message:n}=this.repository.getMessage(e);this._stopSpeaking?.();let r=t.speak((0,u.getThreadMessageText)(n)),i=r.subscribe(()=>{"ended"===r.status.type?(this._stopSpeaking=void 0,this.speech=void 0):this.speech={messageId:e,status:r.status},this._notifySubscribers()});this.speech={messageId:e,status:r.status},this._notifySubscribers(),this._stopSpeaking=()=>{r.cancel(),i(),this.speech=void 0,this._stopSpeaking=void 0}}stopSpeaking(){if(!this._stopSpeaking)throw Error("No message is being spoken");this._stopSpeaking(),this._notifySubscribers()}ensureInitialized(){this._isInitialized||(this._isInitialized=!0,this._notifyEventSubscribers("initialize"))}export(){return this.repository.export()}import(e){this.ensureInitialized(),this.repository.clear(),this.repository.import(e),this._notifySubscribers()}_eventSubscribers=new Map;unstable_on(e,t){if("model-context-update"===e)return this._contextProvider.subscribe?.(t)??(()=>{});let n=this._eventSubscribers.get(e);return n?n.add(t):this._eventSubscribers.set(e,new Set([t])),()=>{this._eventSubscribers.get(e).delete(t)}}},m=class extends p{capabilities={switchToBranch:!0,edit:!0,reload:!0,cancel:!0,unstable_copy:!0,speech:!1,attachments:!1,feedback:!1};abortController=null;isDisabled=!1;_suggestions=[];_suggestionsController=null;get suggestions(){return this._suggestions}get adapters(){return this._options.adapters}constructor(e,t){super(e),this.__internal_setOptions(t)}_options;_lastRunConfig={};get extras(){}__internal_setOptions(e){if(this._options===e)return;this._options=e;let t=!1,n=e.adapters?.speech!==void 0;this.capabilities.speech!==n&&(this.capabilities.speech=n,t=!0);let r=e.adapters?.attachments!==void 0;this.capabilities.attachments!==r&&(this.capabilities.attachments=r,t=!0);let i=e.adapters?.feedback!==void 0;this.capabilities.feedback!==i&&(this.capabilities.feedback=i,t=!0),t&&this._notifySubscribers()}_loadPromise;__internal_load(){if(this._loadPromise)return this._loadPromise;let e=this.adapters.history?.load()??Promise.resolve(null);return this._loadPromise=e.then(e=>{if(!e)return;this.repository.import(e),this._notifySubscribers();let t=this.adapters.history?.resume?.bind(this.adapters.history);e.unstable_resume&&t&&this.startRun({parentId:this.repository.headId,sourceId:this.repository.headId,runConfig:this._lastRunConfig},t)}),this._loadPromise}async append(e){this.ensureInitialized();let t=(0,i.fromThreadMessageLike)(e,(0,a.generateId)(),{type:"complete",reason:"unknown"});this.repository.addOrUpdateMessage(e.parentId,t),this._options.adapters.history?.append({parentId:e.parentId,message:t}),e.startRun??"user"===e.role?await this.startRun({parentId:t.id,sourceId:e.sourceId,runConfig:e.runConfig??{}}):(this.repository.resetHead(t.id),this._notifySubscribers())}resumeRun({stream:e,...t}){return this.startRun(t,e)}async startRun({parentId:e,runConfig:t},n){this.ensureInitialized(),this.repository.resetHead(e);let r={id:(0,a.generateId)(),role:"assistant",status:{type:"running"},content:[],metadata:{unstable_state:this.state,unstable_annotations:[],unstable_data:[],steps:[],custom:{}},createdAt:new Date};this._notifyEventSubscribers("run-start");try{this._suggestions=[],this._suggestionsController?.abort(),this._suggestionsController=null;do r=await this.performRoundtrip(e,r,t,n),n=void 0;while(o(r,this._options.unstable_humanToolNames))}finally{this._notifyEventSubscribers("run-end")}this._suggestionsController=new AbortController;let i=this._suggestionsController.signal;if(this.adapters.suggestion&&r.status?.type!=="requires-action"){let e=this.adapters.suggestion?.generate({messages:this.messages});if(Symbol.asyncIterator in e)for await(let t of e){if(i.aborted)break;this._suggestions=t}else{let t=await e;if(i.aborted)return;this._suggestions=t}}}async performRoundtrip(e,t,n,r){let i=this.repository.getMessages();this.abortController?.abort(),this.abortController=new AbortController;let a=t.content,o=t.metadata?.unstable_annotations,s=t.metadata?.unstable_data,l=t.metadata?.steps,u=t.metadata?.custom,d=n=>{let r=n.metadata?.steps,i=r?[...l??[],...r]:void 0,d=n.metadata?.unstable_annotations,c=n.metadata?.unstable_data,p=d?[...o??[],...d]:void 0,m=c?[...s??[],...c]:void 0;t={...t,...n.content?{content:[...a,...n.content??[]]}:void 0,status:n.status??t.status,...n.metadata?{metadata:{...t.metadata,...n.metadata.unstable_state?{unstable_state:n.metadata.unstable_state}:void 0,...p?{unstable_annotations:p}:void 0,...m?{unstable_data:m}:void 0,...i?{steps:i}:void 0,...n.metadata?.custom?{custom:{...u??{},...n.metadata.custom}}:void 0}}:void 0},this.repository.addOrUpdateMessage(e,t),this._notifySubscribers()},c=this._options.maxSteps??2;if((t.metadata?.steps?.length??0)>=c)return d({status:{type:"incomplete",reason:"tool-calls"}}),t;d({status:{type:"running"}});try{this._lastRunConfig=n??{};let e=this.getModelContext();r=r??this.adapters.chatModel.run.bind(this.adapters.chatModel);let a=this.abortController.signal,o=r({messages:i,runConfig:this._lastRunConfig,abortSignal:a,context:e,config:e,unstable_assistantMessageId:t.id,unstable_getMessage:()=>t});if(Symbol.asyncIterator in o)for await(let e of o){if(a.aborted){d({status:{type:"incomplete",reason:"cancelled"}});break}d(e)}else d(await o);"running"===t.status.type&&d({status:{type:"complete",reason:"unknown"}})}catch(e){if(e instanceof Error&&"AbortError"===e.name)d({status:{type:"incomplete",reason:"cancelled"}});else throw d({status:{type:"incomplete",reason:"error",error:e instanceof Error?e.message:`[${typeof e}] ${new String(e).toString()}`}}),e}finally{this.abortController=null,("complete"===t.status.type||"incomplete"===t.status.type)&&await this._options.adapters.history?.append({parentId:e,message:t})}return t}detach(){this.abortController?.abort({detach:!0}),this.abortController=null}cancelRun(){this.abortController?.abort({detach:!1}),this.abortController=null}addToolResult({messageId:e,toolCallId:t,result:n,isError:r,artifact:i}){let a=this.repository.getMessage(e),{parentId:s}=a,{message:l}=a;if("assistant"!==l.role)throw Error("Tried to add tool result to non-assistant message");let u=!1,d=!1,c=l.content.map(e=>"tool-call"!==e.type||e.toolCallId!==t?e:(d=!0,e.result||(u=!0),{...e,result:n,artifact:i,isError:r}));if(!d)throw Error("Tried to add tool result to non-existing tool call");l={...l,content:c},this.repository.addOrUpdateMessage(s,l),u&&o(l,this._options.unstable_humanToolNames)&&this.performRoundtrip(s,l,this._lastRunConfig)}},h=e.i(163298),f=Object.freeze([]),g=class extends h.BaseSubscribable{_mainThread;constructor(e){super(),this._mainThread=e()}getMainThreadRuntimeCore(){return this._mainThread}get newThreadId(){throw Error("Method not implemented.")}get threadIds(){throw f}get archivedThreadIds(){throw f}get mainThreadId(){return"__DEFAULT_ID__"}getThreadRuntimeCore(){throw Error("Method not implemented.")}getLoadThreadsPromise(){throw Error("Method not implemented.")}getItemById(e){if(e===this.mainThreadId)return{status:"regular",threadId:this.mainThreadId,remoteId:this.mainThreadId,externalId:void 0,title:void 0,isMain:!0};throw Error("Method not implemented")}async switchToThread(){throw Error("Method not implemented.")}switchToNewThread(){throw Error("Method not implemented.")}rename(){throw Error("Method not implemented.")}archive(){throw Error("Method not implemented.")}detach(){throw Error("Method not implemented.")}unarchive(){throw Error("Method not implemented.")}delete(){throw Error("Method not implemented.")}initialize(){throw Error("Method not implemented.")}generateTitle(){throw Error("Method not implemented.")}},y=class extends r.BaseAssistantRuntimeCore{threads;Provider=void 0;_options;constructor(e,t){super(),this._options=e,this.threads=new g(()=>new m(this._contextProvider,this._options)),t&&this.threads.getMainThreadRuntimeCore().import(s.ExportedMessageRepository.fromArray(t))}},v=e.i(592426),b=(0,n.createContext)(null),x=({adapters:e,children:t})=>{let r=(0,n.useContext)(b);return(0,v.jsx)(b.Provider,{value:{...r,...e},children:t})},_=r,k=e.i(520629),w=e.i(915629),S=e.i(314921),I=e.i(629962),T=h,C=class extends T.BaseSubscribable{useRuntimeHook;instances=new Map;useAliveThreadsKeysChanged=(0,k.create)(()=>({}));constructor(e){super(),this.useRuntimeHook=(0,k.create)(()=>({useRuntime:e}))}startThreadRuntime(e){return this.instances.has(e)||(this.instances.set(e,{}),this.useAliveThreadsKeysChanged.setState({},!0)),new Promise((t,n)=>{let r=()=>{let r=this.instances.get(e);if(r){if(!r.runtime)return;i(),t(r.runtime)}else i(),n(Error("Thread was deleted before runtime was started"))},i=this.subscribe(r);r()})}getThreadRuntimeCore(e){let t=this.instances.get(e);if(!t)throw Error("getThreadRuntimeCore not found. This is a bug in assistant-ui.");return t.runtime}stopThreadRuntime(e){this.instances.delete(e),this.useAliveThreadsKeysChanged.setState({},!0)}setRuntimeHook(e){this.useRuntimeHook.getState().useRuntime!==e&&this.useRuntimeHook.setState({useRuntime:e},!0)}_InnerActiveThreadProvider=()=>{let{id:e}=(0,I.useThreadListItem)(),{useRuntime:t}=this.useRuntimeHook(),r=t(),i=r.thread.__internal_threadBinding,a=(0,n.useCallback)(()=>{let t=this.instances.get(e);if(!t)throw Error("Thread not found. This is a bug in assistant-ui.");t.runtime=i.getState(),o&&this._notifySubscribers()},[e,i]),o=(0,n.useRef)(!1);o.current||a(),(0,n.useEffect)(()=>(o.current=!0,a(),i.outerSubscribe(a)),[i,a]);let s=(0,I.useThreadListItemRuntime)();return(0,n.useEffect)(()=>r.threads.main.unstable_on("initialize",()=>{if("new"===s.getState().status){s.initialize();let e=r.thread.unstable_on("run-end",()=>{e(),s.generateTitle()})}}),[r,s]),null};_OuterActiveThreadProvider=(0,n.memo)(({threadId:e,provider:t})=>{let r=(0,w.useAssistantRuntime)(),i=(0,n.useMemo)(()=>r.threads.getItemById(e),[r,e]);return(0,v.jsx)(S.ThreadListItemRuntimeProvider,{runtime:i,children:(0,v.jsx)(t,{children:(0,v.jsx)(this._InnerActiveThreadProvider,{})})})});__internal_RenderThreadRuntimes=({provider:e})=>(this.useAliveThreadsKeysChanged(),Array.from(this.instances.keys()).map(t=>(0,v.jsx)(this._OuterActiveThreadProvider,{threadId:t,provider:e},t)))},A=h,P=Error("This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead."),E={getMessageById(){},getBranches:()=>[],switchToBranch(){throw P},append(){throw P},startRun(){throw P},resumeRun(){throw P},cancelRun(){throw P},addToolResult(){throw P},speak(){throw P},stopSpeaking(){throw P},getSubmittedFeedback(){},submitFeedback(){throw P},getModelContext:()=>({}),composer:{attachments:[],getAttachmentAccept:()=>"*",async addAttachment(){throw P},async removeAttachment(){throw P},isEditing:!1,canCancel:!1,isEmpty:!0,text:"",setText(){throw P},role:"user",setRole(){throw P},runConfig:{},setRunConfig(){throw P},async reset(){},async clearAttachments(){},send(){throw P},cancel(){},subscribe:()=>()=>{},unstable_on:()=>()=>{}},getEditComposer(){},beginEdit(){throw P},speech:void 0,capabilities:{switchToBranch:!1,edit:!1,reload:!1,cancel:!1,unstable_copy:!1,speech:!1,attachments:!1,feedback:!1},isDisabled:!0,messages:[],state:null,suggestions:[],extras:void 0,subscribe:()=>()=>{},import(){throw P},export:()=>({messages:[]}),unstable_on:()=>()=>{}},$=h,O=(e,t,n)=>n.reduce((e,n)=>n?.(e,t)??e,e),R=class extends $.BaseSubscribable{_pendingTransforms=[];_baseValue;_cachedValue;constructor(e){super(),this._baseValue=e,this._cachedValue=e}_updateState(){this._cachedValue=this._pendingTransforms.reduce((e,t)=>O(e,t.task,[t.loading,t.optimistic]),this._baseValue),this._notifySubscribers()}get baseValue(){return this._baseValue}get value(){return this._cachedValue}update(e){this._baseValue=e,this._updateState()}async optimisticUpdate(e){let t=e.execute(),n={...e,task:t};try{this._pendingTransforms.push(n),this._updateState();let r=await t;return this._baseValue=O(this._baseValue,r,[e.optimistic,e.then]),r}finally{let e=this._pendingTransforms.indexOf(n);e>-1&&this._pendingTransforms.splice(e,1),this._updateState()}}},D=(0,e.i(850769).customAlphabet)("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7),j=e.i(938178),U=class e{_state;constructor(e=null){this._state=e}get state(){return this._state}append(t){this._state=t.reduce((t,n)=>e.apply(t,n),this._state)}static apply(t,n){let r=n.type;switch(r){case"set":return e.updatePath(t,n.path,()=>n.value);case"append-text":return e.updatePath(t,n.path,e=>{if("string"!=typeof e)throw Error(`Expected string at path [${n.path.join(", ")}]`);return e+n.value});default:throw Error(`Invalid operation type: ${r}`)}}static updatePath(e,t,n){if(0===t.length)return n(e);if("object"!=typeof(e??={}))throw Error(`Invalid path: [${t.join(", ")}]`);let[r,...i]=t;if(Array.isArray(e)){let a=Number(r);if(isNaN(a))throw Error(`Expected array index at [${t.join(", ")}]`);if(a>e.length||a<0)throw Error("Insert array index out of bounds");let o=[...e];return o[a]=this.updatePath(o[a],i,n),o}let a={...e};return a[r]=this.updatePath(a[r],i,n),a}},N=(e,t,n)=>{if(0===e.parts.length)throw Error("No parts available to update.");if(1!==t.path.length)throw Error("Nested paths are not supported yet.");let r=t.path[0],i=n(e.parts[r]);return{...e,parts:[...e.parts.slice(0,r),i,...e.parts.slice(r+1)],get content(){return this.parts}}},M=(e,t)=>{let n=z(t);return{...e,status:n}},z=e=>"tool-calls"===e.finishReason?{type:"requires-action",reason:"tool-calls"}:"stop"===e.finishReason||"unknown"===e.finishReason?{type:"complete",reason:e.finishReason}:{type:"incomplete",reason:e.finishReason},L=class extends TransformStream{constructor({initialMessage:e}={}){let t=e??{role:"assistant",status:{type:"running"},parts:[],get content(){return this.parts},metadata:{unstable_state:null,unstable_data:[],unstable_annotations:[],steps:[],custom:{}}};super({transform(e,n){var r,i;let a=e.type;switch(a){case"part-start":t=((e,t)=>{let n=t.part;if("text"===n.type||"reasoning"===n.type){let t={type:n.type,text:"",status:{type:"running"}};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}if("tool-call"===n.type){let t={type:"tool-call",state:"partial-call",status:{type:"running",isArgsComplete:!1},toolCallId:n.toolCallId,toolName:n.toolName,argsText:"",args:{}};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}if("source"===n.type){let t={type:"source",sourceType:n.sourceType,id:n.id,url:n.url,...n.title?{title:n.title}:void 0};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}if("file"===n.type){let t={type:"file",mimeType:n.mimeType,data:n.data};return{...e,parts:[...e.parts,t],get content(){return this.parts}}}throw Error(`Unsupported part type: ${n.type}`)})(t,e);break;case"tool-call-args-text-finish":t=N(t,e,e=>{if("tool-call"!==e.type)throw Error("Last is not a tool call");return"partial-call"!==e.state?e:{...e,state:"call"}});break;case"part-finish":t=N(t,e,e=>({...e,status:{type:"complete",reason:"unknown"}}));break;case"text-delta":t=N(t,e,t=>{if("text"===t.type||"reasoning"===t.type)return{...t,text:t.text+e.textDelta};if("tool-call"===t.type){let n=t.argsText+e.textDelta,r=(0,j.parsePartialJsonObject)(n)??t.args;return{...t,argsText:n,args:r}}throw Error("text-delta received but part is neither text nor tool-call")});break;case"result":t=N(t,e,t=>{if("tool-call"===t.type)return{...t,state:"result",...void 0!==e.artifact?{artifact:e.artifact}:{},result:e.result,isError:e.isError??!1,status:{type:"complete",reason:"stop"}};throw Error("Result chunk received but part is not a tool-call")});break;case"message-finish":t=M(t,e);break;case"annotations":let o;t={...o=t,metadata:{...o.metadata,unstable_annotations:[...o.metadata.unstable_annotations,...e.annotations]}};break;case"data":let s;t={...s=t,metadata:{...s.metadata,unstable_data:[...s.metadata.unstable_data,...e.data]}};break;case"step-start":let l;t={...l=t,metadata:{...l.metadata,steps:[...l.metadata.steps,{state:"started",messageId:e.messageId}]}};break;case"step-finish":let u,d;d=(u=(r=t).metadata.steps.slice()).length-1,u.length>0&&u[d]?.state==="started"?u[d]={...u[d],state:"finished",finishReason:e.finishReason,usage:e.usage,isContinued:e.isContinued}:u.push({state:"finished",messageId:D(),finishReason:e.finishReason,usage:e.usage,isContinued:e.isContinued}),t={...r,metadata:{...r.metadata,steps:u}};break;case"error":t={...t,status:{type:"incomplete",reason:"error",error:e.error}};break;case"update-state":let c;(c=new U((i=t).metadata.unstable_state)).append(e.operations),t={...i,metadata:{...i.metadata,unstable_state:c.state}};break;default:throw Error(`Unsupported chunk type: ${a}`)}n.enqueue(t)},flush(e){if(t.status?.type==="running"){let n=t.parts?.at(-1)?.type==="tool-call";t=M(t,{type:"message-finish",path:[],finishReason:n?"tool-calls":"unknown",usage:{promptTokens:0,completionTokens:0}}),e.enqueue(t)}}})}},F=class e{constructor(e){this.readable=e,this.readable=e}static fromAssistantStream(t){return new e(t.pipeThrough(new L))}async unstable_result(){let e;for await(let t of this)e=t;return e||{role:"assistant",status:{type:"complete",reason:"unknown"},parts:[],content:[],metadata:{unstable_state:null,unstable_data:[],unstable_annotations:[],steps:[],custom:{}}}}[Symbol.asyncIterator](){let e=this.readable.getReader();return{async next(){let{done:t,value:n}=await e.read();return t?{done:!0,value:void 0}:{done:!1,value:n}}}}tee(){let[t,n]=this.readable.tee();return[new e(t),new e(n)]}},Z=(e,t)=>{let n=e.threadIdMap[t];if(void 0!==n)return e.threadData[n]},B=(e,t,n)=>{let r=Z(e,t);if(!r)return e;let{threadId:i,remoteId:a,status:o}=r;if(o===n)return e;let s={...e};switch(o){case"new":s.newThreadId=void 0;break;case"regular":s.threadIds=s.threadIds.filter(e=>e!==i);break;case"archived":s.archivedThreadIds=s.archivedThreadIds.filter(e=>e!==i);break;default:throw Error(`Unsupported state: ${o}`)}switch(n){case"regular":s.threadIds=[i,...s.threadIds];break;case"archived":s.archivedThreadIds=[i,...s.archivedThreadIds];break;case"deleted":s.threadData=Object.fromEntries(Object.entries(s.threadData).filter(([e])=>e!==i)),s.threadIdMap=Object.fromEntries(Object.entries(s.threadIdMap).filter(([e])=>e!==i&&e!==a));break;default:throw Error(`Unsupported state: ${n}`)}return"deleted"!==n&&(s.threadData={...s.threadData,[i]:{...r,status:n}}),s},H=class extends A.BaseSubscribable{constructor(e,t){super(),this.contextProvider=t,this._state.subscribe(()=>this._notifySubscribers()),this._hookManager=new C(e.runtimeHook),this.useProvider=(0,k.create)(()=>({Provider:e.adapter.unstable_Provider??n.Fragment})),this.__internal_setOptions(e),this.switchToNewThread()}_options;_hookManager;_loadThreadsPromise;_mainThreadId;_state=new R({isLoading:!1,newThreadId:void 0,threadIds:[],archivedThreadIds:[],threadIdMap:{},threadData:{}});getLoadThreadsPromise(){return this._loadThreadsPromise||(this._loadThreadsPromise=this._state.optimisticUpdate({execute:()=>this._options.adapter.list(),loading:e=>({...e,isLoading:!0}),then:(e,t)=>{let n=[],r=[],i={},a={};for(let e of t.threads){switch(e.status){case"regular":n.push(e.remoteId);break;case"archived":r.push(e.remoteId);break;default:{let t=e.status;throw Error(`Unsupported state: ${t}`)}}let t=e.remoteId;i[e.remoteId]=t,a[t]={threadId:e.remoteId,remoteId:e.remoteId,externalId:e.externalId,status:e.status,title:e.title,initializeTask:Promise.resolve({remoteId:e.remoteId,externalId:e.externalId})}}return{...e,threadIds:n,archivedThreadIds:r,threadIdMap:{...e.threadIdMap,...i},threadData:{...e.threadData,...a}}}}).then(()=>{})),this._loadThreadsPromise}useProvider;__internal_setOptions(e){if(this._options===e)return;this._options=e;let t=e.adapter.unstable_Provider??n.Fragment;t!==this.useProvider.getState().Provider&&this.useProvider.setState({Provider:t},!0),this._hookManager.setRuntimeHook(e.runtimeHook)}__internal_load(){this.getLoadThreadsPromise()}get threadIds(){return this._state.value.threadIds}get archivedThreadIds(){return this._state.value.archivedThreadIds}get newThreadId(){return this._state.value.newThreadId}get mainThreadId(){return this._mainThreadId}getMainThreadRuntimeCore(){let e=this._hookManager.getThreadRuntimeCore(this._mainThreadId);return e||E}getThreadRuntimeCore(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");let n=this._hookManager.getThreadRuntimeCore(t.threadId);if(!n)throw Error("Thread not found");return n}getItemById(e){return Z(this._state.value,e)}async switchToThread(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if(this._mainThreadId===t.threadId)return;let n=this._hookManager.startThreadRuntime(t.threadId);void 0!==this.mainThreadId?await n:n.then(()=>this._notifySubscribers()),"archived"===t.status&&await this.unarchive(t.threadId),this._mainThreadId=t.threadId,this._notifySubscribers()}async switchToNewThread(){for(;void 0!==this._state.baseValue.newThreadId&&void 0===this._state.value.newThreadId;)await this._state.waitForUpdate();let e=this._state.value,t=this._state.value.newThreadId;if(void 0===t){do t=`__LOCALID_${(0,a.generateId)()}`;while(e.threadIdMap[t])let n=t;this._state.update({...e,newThreadId:t,threadIdMap:{...e.threadIdMap,[t]:n},threadData:{...e.threadData,[t]:{status:"new",threadId:t}}})}return this.switchToThread(t)}initialize=async e=>{if(this._state.value.newThreadId!==e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("new"===t.status)throw Error("Unexpected new state");return t.initializeTask}return this._state.optimisticUpdate({execute:()=>this._options.adapter.initialize(e),optimistic:t=>B(t,e,"regular"),loading:(t,n)=>({...t,threadData:{...t.threadData,[e]:{...t.threadData[e],initializeTask:n}}}),then:(t,{remoteId:n,externalId:r})=>{let i=Z(t,e);return i?{...t,threadIdMap:{...t.threadIdMap,[n]:e},threadData:{...t.threadData,[e]:{...i,initializeTask:Promise.resolve({remoteId:n,externalId:r}),remoteId:n,externalId:r}}}:t}})};generateTitle=async e=>{let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("new"===t.status)throw Error("Thread is not yet initialized");let{remoteId:n}=await t.initializeTask,r=this.getThreadRuntimeCore(e).messages,i=await this._options.adapter.generateTitle(n,r);for await(let e of F.fromAssistantStream(i)){let n=e.parts.filter(e=>"text"===e.type)[0]?.text,r=this._state.baseValue;this._state.update({...r,threadData:{...r.threadData,[t.threadId]:{...t,title:n}}})}};rename(e,t){let n=this.getItemById(e);if(!n)throw Error("Thread not found");if("new"===n.status)throw Error("Thread is not yet initialized");return this._state.optimisticUpdate({execute:async()=>{let{remoteId:e}=await n.initializeTask;return this._options.adapter.rename(e,t)},optimistic:n=>{let r=Z(n,e);return r?{...n,threadData:{...n.threadData,[r.threadId]:{...r,title:t}}}:n}})}async _ensureThreadIsNotMain(e){if(e===this.newThreadId)throw Error("Cannot ensure new thread is not main");e===this._mainThreadId&&await this.switchToNewThread()}async archive(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("regular"!==t.status)throw Error("Thread is not yet initialized or already archived");return this._state.optimisticUpdate({execute:async()=>{await this._ensureThreadIsNotMain(t.threadId);let{remoteId:e}=await t.initializeTask;return this._options.adapter.archive(e)},optimistic:e=>B(e,t.threadId,"archived")})}unarchive(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("archived"!==t.status)throw Error("Thread is not archived");return this._state.optimisticUpdate({execute:async()=>{try{let{remoteId:e}=await t.initializeTask;return await this._options.adapter.unarchive(e)}catch(e){throw await this._ensureThreadIsNotMain(t.threadId),e}},optimistic:e=>B(e,t.threadId,"regular")})}async delete(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("regular"!==t.status&&"archived"!==t.status)throw Error("Thread is not yet initialized");return this._state.optimisticUpdate({execute:async()=>{await this._ensureThreadIsNotMain(t.threadId);let{remoteId:e}=await t.initializeTask;return await this._options.adapter.delete(e)},optimistic:e=>B(e,t.threadId,"deleted")})}async detach(e){let t=this.getItemById(e);if(!t)throw Error("Thread not found");if("regular"!==t.status&&"archived"!==t.status)throw Error("Thread is not yet initialized");await this._ensureThreadIsNotMain(t.threadId),this._hookManager.stopThreadRuntime(t.threadId)}useBoundIds=(0,k.create)(()=>[]);__internal_RenderComponent=()=>{let e=(0,n.useId)();(0,n.useEffect)(()=>(this.useBoundIds.setState(t=>[...t,e],!0),()=>{this.useBoundIds.setState(t=>t.filter(t=>t!==e),!0)}),[e]);let t=this.useBoundIds(),{Provider:r}=this.useProvider(),i={modelContext:this.contextProvider};return(0===t.length||t[0]===e)&&(0,v.jsx)(x,{adapters:i,children:(0,v.jsx)(this._hookManager.__internal_RenderThreadRuntimes,{provider:r})})}},K=e.i(873908),V=class extends _.BaseAssistantRuntimeCore{threads;constructor(e){super(),this.threads=new H(e,this._contextProvider)}get RenderComponent(){return this.threads.__internal_RenderComponent}},G=e.i(552302),q=e=>{try{let t=e.split(".")[1];if(!t)throw Error("Invalid JWT format");let n=t.replace(/-/g,"+").replace(/_/g,"/");for(;n.length%4!=0;)n+="=";let r=atob(n),i=JSON.parse(r).exp;if(!i||"number"!=typeof i)throw Error('JWT does not contain a valid "exp" field');return 1e3*i}catch(e){throw Error("Unable to determine the token expiry: "+e)}},J=class{strategy="jwt";cachedToken=null;tokenExpiry=null;#e;constructor(e){this.#e=e}async getAuthHeaders(){let e=Date.now();if(this.cachedToken&&this.tokenExpiry&&this.tokenExpiry-e>3e4)return{Authorization:`Bearer ${this.cachedToken}`};let t=await this.#e();return!!t&&(this.cachedToken=t,this.tokenExpiry=q(t),{Authorization:`Bearer ${t}`})}readAuthHeaders(e){let t=e.get("Authorization");if(!t)return;let[n,r]=t.split(" ");if("Bearer"!==n||!r)throw Error("Invalid auth header received");this.cachedToken=r,this.tokenExpiry=q(r)}},W=class{strategy="api-key";#t;#n;#r;constructor(e,t,n){this.#t=e,this.#n=t,this.#r=n}async getAuthHeaders(){return{Authorization:`Bearer ${this.#t}`,"Aui-User-Id":this.#n,"Aui-Workspace-Id":this.#r}}readAuthHeaders(){}},Y="aui:refresh_token",X=class{strategy="anon";baseUrl;jwtStrategy;constructor(e){this.baseUrl=e,this.jwtStrategy=new J(async()=>{let e=Date.now(),t=localStorage.getItem(Y),n=t?JSON.parse(t):void 0;if(n)if(new Date(n.expires_at).getTime()-e>3e4){let e=await fetch(`${this.baseUrl}/v1/auth/tokens/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:n.token})});if(e.ok){let{access_token:t,refresh_token:n}=await e.json();return n&&localStorage.setItem(Y,JSON.stringify(n)),t}}else localStorage.removeItem(Y);let r=await fetch(`${this.baseUrl}/v1/auth/tokens/anonymous`,{method:"POST"});if(!r.ok)return null;let{access_token:i,refresh_token:a}=await r.json();return i&&a?(localStorage.setItem(Y,JSON.stringify(a)),i):null})}async getAuthHeaders(){return this.jwtStrategy.getAuthHeaders()}readAuthHeaders(e){this.jwtStrategy.readAuthHeaders(e)}},Q=class extends Error{constructor(e){super(e),this.name="APIError"}},ee=class{_auth;_baseUrl;constructor(e){if("authToken"in e)this._baseUrl=e.baseUrl,this._auth=new J(e.authToken);else if("apiKey"in e)this._baseUrl="https://backend.assistant-api.com",this._auth=new W(e.apiKey,e.userId,e.workspaceId);else if("anonymous"in e)this._baseUrl=e.baseUrl,this._auth=new X(e.baseUrl);else throw Error("Invalid configuration: Must provide authToken, apiKey, or anonymous configuration")}async initializeAuth(){return!!this._auth.getAuthHeaders()}async makeRawRequest(e,t={}){let n=await this._auth.getAuthHeaders();if(!n)throw Error("Authorization failed");let r={...n,...t.headers,"Content-Type":"application/json"},i=new URLSearchParams;if(t.query)for(let[e,n]of Object.entries(t.query))!1!==n&&(!0===n?i.set(e,"true"):i.set(e,n.toString()));let a=new URL(`${this._baseUrl}/v1${e}`);a.search=i.toString();let o=await fetch(a,{method:t.method??"GET",headers:r,body:t.body?JSON.stringify(t.body):null});if(this._auth.readAuthHeaders(o.headers),!o.ok){let e=await o.text();try{let t=JSON.parse(e);throw new Q(t.message)}catch{throw Error(`Request failed with status ${o.status}, ${e}`)}}return o}async makeRequest(e,t={}){return(await this.makeRawRequest(e,t)).json()}},et=class{constructor(e){this.cloud=e}async create(){return this.cloud.makeRequest("/auth/tokens",{method:"POST"})}},en={toResponse:(e,t)=>new Response(en.toByteStream(e,t),{headers:t.headers??{}}),fromResponse:(e,t)=>en.fromByteStream(e.body,t),toByteStream:(e,t)=>e.pipeThrough(t),fromByteStream:(e,t)=>e.pipeThrough(t)},er=function(){let e,t,n=new Promise((n,r)=>{e=n,t=r});if(!e||!t)throw Error("Failed to create promise");return{promise:n,resolve:e,reject:t}},ei=class{_controller;_isClosed=!1;constructor(e){this._controller=e}append(e){return this._controller.enqueue({type:"text-delta",path:[],textDelta:e}),this}close(){this._isClosed||(this._isClosed=!0,this._controller.enqueue({type:"part-finish",path:[]}),this._controller.close())}},ea=e=>new ReadableStream({start:t=>e.start?.(new ei(t)),pull:t=>e.pull?.(new ei(t)),cancel:t=>e.cancel?.(t)}),eo=()=>{let e;return[ea({start(t){e=t}}),e]},es=class{constructor(e){this._controller=e;const t=ea({start:e=>{this._argsTextController=e}});this._mergeTask=t.pipeTo(new WritableStream({write:e=>{switch(e.type){case"text-delta":this._controller.enqueue(e);break;case"part-finish":this._controller.enqueue({type:"tool-call-args-text-finish",path:[]});break;default:throw Error(`Unexpected chunk type: ${e.type}`)}}}))}_isClosed=!1;_mergeTask;get argsText(){return this._argsTextController}_argsTextController;async setResponse(e){this._argsTextController.close(),await Promise.resolve(),this._controller.enqueue({type:"result",path:[],...void 0!==e.artifact?{artifact:e.artifact}:{},result:e.result,isError:e.isError??!1})}async close(){this._isClosed||(this._isClosed=!0,this._argsTextController.close(),await this._mergeTask,this._controller.enqueue({type:"part-finish",path:[]}),this._controller.close())}},el=class{value=-1;up(){return++this.value}},eu=class extends TransformStream{constructor(e){super({transform(t,n){n.enqueue({...t,path:[e,...t.path]})}})}};TransformStream;var ed=class extends TransformStream{constructor(e){const t=new el,n=new Map;super({transform(r,i){"part-start"===r.type&&0===r.path.length&&n.set(t.up(),e.up());let[a,...o]=r.path;if(void 0===a)return void i.enqueue(r);let s=n.get(a);if(void 0===s)throw Error("Path not found");i.enqueue({...r,path:[s,...o]})}})}},ec=class extends TransformStream{constructor(e){super(),Object.defineProperty(this,"readable",{value:e(super.readable),writable:!1})}},ep=((t=ep||{}).TextDelta="0",t.Data="2",t.Error="3",t.Annotation="8",t.ToolCall="9",t.ToolCallResult="a",t.StartToolCall="b",t.ToolCallArgsTextDelta="c",t.FinishMessage="d",t.FinishStep="e",t.StartStep="f",t.ReasoningDelta="g",t.Source="h",t.RedactedReasoning="i",t.ReasoningSignature="j",t.File="k",t.AuiUpdateStateOperations="aui-state",t);TransformStream,TransformStream,TransformStream,TransformStream,ep.StartToolCall,ep.ToolCall,ep.TextDelta,ep.ReasoningDelta,ep.Source,ep.Error,ep.FinishStep,ep.FinishMessage;var em=class{_merger=(()=>{let e,t,n=[],r=!1,i=i=>{i.promise||(i.promise=i.reader.read().then(({done:a,value:o})=>{i.promise=void 0,a?(n.splice(n.indexOf(i),1),r&&0===n.length&&e.close()):e.enqueue(o),t?.resolve(),t=void 0}).catch(r=>{console.error(r),n.forEach(e=>{e.reader.cancel()}),n.length=0,e.error(r),t?.reject(r),t=void 0}))};return{readable:new ReadableStream({start(t){e=t},pull:()=>(t=er(),n.forEach(e=>{i(e)}),t.promise),cancel(){n.forEach(e=>{e.reader.cancel()}),n.length=0}}),isSealed:()=>r,seal(){r=!0,0===n.length&&e.close()},addStream(e){if(r)throw Error("Cannot add streams after the run callback has settled.");let t={reader:e.getReader()};n.push(t),i(t)},enqueue(e){this.addStream(new ReadableStream({start(t){t.enqueue(e),t.close()}}))}}})();_append;_contentCounter=new el;get __internal_isClosed(){return this._merger.isSealed()}__internal_getReadable(){return this._merger.readable}_closeSubscriber;__internal_subscribeToClose(e){this._closeSubscriber=e}_addPart(e,t){this._append&&(this._append.controller.close(),this._append=void 0),this.enqueue({type:"part-start",part:e,path:[]}),this._merger.addStream(t.pipeThrough(new eu(this._contentCounter.value)))}merge(e){this._merger.addStream(e.pipeThrough(new ed(this._contentCounter)))}appendText(e){this._append?.kind!=="text"&&(this._append={kind:"text",controller:this.addTextPart()}),this._append.controller.append(e)}appendReasoning(e){this._append?.kind!=="reasoning"&&(this._append={kind:"reasoning",controller:this.addReasoningPart()}),this._append.controller.append(e)}addTextPart(){let[e,t]=eo();return this._addPart({type:"text"},e),t}addReasoningPart(){let[e,t]=eo();return this._addPart({type:"reasoning"},e),t}addToolCallPart(e){let t,n,r="string"==typeof e?{toolName:e}:e,i=r.toolName,a=r.toolCallId??D(),[o,s]=[(n={start(e){t=e}},new ReadableStream({start:e=>n.start?.(new es(e)),pull:e=>n.pull?.(new es(e)),cancel:e=>n.cancel?.(e)})),t];return this._addPart({type:"tool-call",toolName:i,toolCallId:a},o),void 0!==r.argsText&&(s.argsText.append(r.argsText),s.argsText.close()),void 0!==r.args&&(s.argsText.append(JSON.stringify(r.args)),s.argsText.close()),void 0!==r.response&&s.setResponse(r.response),s}appendSource(e){this._addPart(e,new ReadableStream({start(e){e.enqueue({type:"part-finish",path:[]}),e.close()}}))}appendFile(e){this._addPart(e,new ReadableStream({start(e){e.enqueue({type:"part-finish",path:[]}),e.close()}}))}enqueue(e){this._merger.enqueue(e),"part-start"===e.type&&0===e.path.length&&this._contentCounter.up()}close(){this._merger.seal(),this._append?.controller?.close(),this._closeSubscriber?.()}},eh=class extends TransformStream{constructor(e,t,n){let r;const[i,a]=function(){let e,{resolve:t,promise:n}=er();return[function(e){let t,n=new em;try{t=e(n)}catch(e){throw n.__internal_isClosed||(n.enqueue({type:"error",path:[],error:String(e)}),n.close()),e}return t instanceof Promise?(async()=>{try{await t}catch(e){throw n.__internal_isClosed||n.enqueue({type:"error",path:[],error:String(e)}),e}finally{n.__internal_isClosed||n.close()}})():n.__internal_isClosed||n.close(),n.__internal_getReadable()}(r=>((e=r).__internal_subscribeToClose(t),n)),e]}();super({start:t=>(r=i.pipeTo(new WritableStream({write(e){t.enqueue(e)},abort(e){t.error(e)},close(){t.terminate()}})).catch(e=>{t.error(e)}),e.start?.(a)),transform:t=>e.transform?.(t,a),async flush(){await e.flush?.(a),a.close(),await r}},t,n)}},ef=class extends ec{constructor(){super(e=>{let t=new eh({transform(e,t){t.appendText(e)}});return e.pipeThrough(new TextDecoderStream).pipeThrough(t)})}},eg=class{constructor(e){this.cloud=e}__internal_getAssistantOptions(e){return{api:this.cloud._baseUrl+"/v1/runs/stream",headers:async()=>{let e=await this.cloud._auth.getAuthHeaders();if(!e)throw Error("Authorization failed");return{...e,Accept:"text/plain"}},body:{assistant_id:e,response_format:"vercel-ai-data-stream/v1",thread_id:"unstable_todo"}}}async stream(e){let t=await this.cloud.makeRawRequest("/runs/stream",{method:"POST",headers:{Accept:"text/plain"},body:e});return en.fromResponse(t,new ef)}},ey=class{constructor(e){this.cloud=e}async list(e){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}/messages`)}async create(e,t){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}/messages`,{method:"POST",body:t})}},ev=class{constructor(e){this.cloud=e,this.messages=new ey(e)}messages;async list(e){return this.cloud.makeRequest("/threads",{query:e})}async create(e){return this.cloud.makeRequest("/threads",{method:"POST",body:e})}async update(e,t){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}`,{method:"PUT",body:t})}async delete(e){return this.cloud.makeRequest(`/threads/${encodeURIComponent(e)}`,{method:"DELETE"})}},eb=class{constructor(e){this.cloud=e}async pdfToImages(e){return this.cloud.makeRequest("/files/pdf-to-images",{method:"POST",body:e})}async generatePresignedUploadUrl(e){return this.cloud.makeRequest("/files/attachments/generate-presigned-upload-url",{method:"POST",body:e})}},ex=class{threads;auth;runs;files;constructor(e){const t=new ee(e);this.threads=new ev(t),this.auth={tokens:new et(t)},this.runs=new eg(t),this.files=new eb(t)}},e_=e=>{let t=e.content,n=(0,i.fromThreadMessageLike)({id:e.id,createdAt:e.created_at,...t},e.id,{type:"complete",reason:"unknown"});return{parentId:e.parent_id,message:n}},ek=class{constructor(e,t){this.cloudRef=e,this.threadListItemRuntime=t}_getIdForLocalId={};async append({parentId:e,message:t}){let{remoteId:n}=await this.threadListItemRuntime.initialize(),r=this.cloudRef.current.threads.messages.create(n,{parent_id:e?await this._getIdForLocalId[e]??e:null,format:"aui/v0",content:{role:t.role,content:t.content.map(e=>{let t=e.type;switch(t){case"text":return{type:"text",text:e.text};case"reasoning":return{type:"reasoning",text:e.text};case"source":return{type:"source",sourceType:e.sourceType,id:e.id,url:e.url,...e.title?{title:e.title}:void 0};case"tool-call":return!function e(t,n=0){return!(n>100)&&(null===t||"string"==typeof t||"boolean"==typeof t||("number"==typeof t?!Number.isNaN(t)&&Number.isFinite(t):Array.isArray(t)?t.every(t=>e(t,n+1)):"object"==typeof t&&Object.entries(t).every(([t,r])=>"string"==typeof t&&e(r,n+1))))}(e.result)&&console.warn("tool-call result is not JSON! "+JSON.stringify(e)),{type:"tool-call",toolCallId:e.toolCallId,toolName:e.toolName,...JSON.stringify(e.args)===e.argsText?{args:e.args}:{argsText:e.argsText},...e.result?{result:e.result}:{},...e.isError?{isError:!0}:{}};default:throw Error(`Content part type not supported by aui/v0: ${t}`)}}),metadata:t.metadata,...t.status?{status:t.status?.type==="running"?{type:"incomplete",reason:"cancelled"}:t.status}:void 0}}).then(({message_id:e})=>(this._getIdForLocalId[t.id]=e,e));return this._getIdForLocalId[t.id]=r,r.then(()=>{})}async load(){let e=this.threadListItemRuntime.getState().remoteId;if(!e)return{messages:[]};let{messages:t}=await this.cloudRef.current.threads.messages.list(e);return{messages:t.filter(e=>"aui/v0"===e.format).map(e_).reverse()}}},ew=class{list(){return Promise.resolve({threads:[]})}rename(){return Promise.resolve()}archive(){return Promise.resolve()}unarchive(){return Promise.resolve()}delete(){return Promise.resolve()}initialize(e){return Promise.resolve({remoteId:e,externalId:void 0})}generateTitle(){return Promise.resolve(new ReadableStream)}},eS=void 0!==G.default&&G.default?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL,eI=eS?new ex({baseUrl:eS,anonymous:!0}):void 0,eT=(e,{initialMessages:t,...r})=>{let{modelContext:i,...a}=(0,n.useContext)(b)??{},o=(0,n.useMemo)(()=>({...r,adapters:{...a,...r.adapters,chatModel:e}}),[e,r,a]),[s]=(0,n.useState)(()=>new y(o,t));return(0,n.useEffect)(()=>()=>{s.threads.getMainThreadRuntimeCore().detach()},[s]),(0,n.useEffect)(()=>{s.threads.getMainThreadRuntimeCore().__internal_setOptions(o),s.threads.getMainThreadRuntimeCore().__internal_load()},[s,o]),(0,n.useEffect)(()=>{if(i)return s.registerModelContextProvider(i)},[i,s]),(0,n.useMemo)(()=>new K.AssistantRuntimeImpl(s),[s])},eC=(e,{cloud:t,...r}={})=>{var i;let a,o,s;return(e=>{let[t]=(0,n.useState)(()=>new V(e));return(0,n.useEffect)(()=>{t.threads.__internal_setOptions(e),t.threads.__internal_load()},[t,e]),(0,n.useMemo)(()=>new K.AssistantRuntimeImpl(t),[t])})({runtimeHook:function(){return eT(e,r)},adapter:(i={cloud:t},a=(0,n.useRef)(i),(0,n.useEffect)(()=>{a.current=i},[i]),o=(0,n.useCallback)(function({children:e}){let t=(e=>{let t=(0,I.useThreadListItemRuntime)(),[r]=(0,n.useState)(()=>new ek(e,t));return r})({get current(){return a.current.cloud??eI}}),r=(0,n.useMemo)(()=>({history:t}),[t]);return(0,v.jsx)(x,{adapters:r,children:e})},[]),(s=i.cloud??eI)?{list:async()=>{let{threads:e}=await s.threads.list();return{threads:e.map(e=>({status:e.is_archived?"archived":"regular",remoteId:e.id,title:e.title,externalId:e.external_id??void 0}))}},initialize:async()=>{let e=i.create?.()??Promise.resolve(),t=await e,n=t?t.externalId:void 0,{thread_id:r}=await s.threads.create({last_message_at:new Date,external_id:n});return{externalId:n,remoteId:r}},rename:async(e,t)=>s.threads.update(e,{title:t}),archive:async e=>s.threads.update(e,{is_archived:!0}),unarchive:async e=>s.threads.update(e,{is_archived:!1}),delete:async e=>(await i.delete?.(e),s.threads.delete(e)),generateTitle:async(e,t)=>s.runs.stream({thread_id:e,assistant_id:"system/thread_title",messages:t}),unstable_Provider:o}:new ew)})};e.s(["useLocalRuntime",()=>eC,"useLocalThreadRuntime",()=>eT],681140)},810450,e=>{"use strict";let t=[{path:"api-keys/index.ts",content:'import { TeamApiKeysCrud, UserApiKeysCrud, teamApiKeysCreateInputSchema, userApiKeysCreateInputSchema } from "@stackframe/stack-shared/dist/interface/crud/project-api-keys";\nimport { filterUndefined } from "@stackframe/stack-shared/dist/utils/objects";\nimport { IfAndOnlyIf, PrettifyType } from "@stackframe/stack-shared/dist/utils/types";\nimport type * as yup from "yup";\n\nexport type ApiKeyType = "user" | "team";\n\nexport type ApiKey<Type extends ApiKeyType = ApiKeyType, IsFirstView extends boolean = false> =\n & {\n id: string,\n description: string,\n expiresAt?: Date,\n manuallyRevokedAt?: Date | null,\n createdAt: Date,\n value: IfAndOnlyIf<IsFirstView, true, string, { lastFour: string }>,\n update(options: ApiKeyUpdateOptions<Type>): Promise<void>,\n revoke: () => Promise<void>,\n isValid: () => boolean,\n whyInvalid: () => "manually-revoked" | "expired" | null,\n }\n & (\n | ("user" extends Type ? { type: "user", userId: string } : never)\n | ("team" extends Type ? { type: "team", teamId: string } : never)\n );\n\nexport type UserApiKeyFirstView = PrettifyType<ApiKey<"user", true>>;\nexport type UserApiKey = PrettifyType<ApiKey<"user", false>>;\n\nexport type TeamApiKeyFirstView = PrettifyType<ApiKey<"team", true>>;\nexport type TeamApiKey = PrettifyType<ApiKey<"team", false>>;\n\nexport type ApiKeyCreationOptions<Type extends ApiKeyType = ApiKeyType> =\n & {\n description: string,\n expiresAt: Date | null,\n /**\n * Whether the API key should be considered public. A public API key will not be detected by the secret scanner, which\n * automatically revokes API keys when it detects that they may have been exposed to the public.\n */\n isPublic?: boolean,\n };\nexport function apiKeyCreationOptionsToCrud(type: "user", userId: string, options: ApiKeyCreationOptions<"user">): Promise<yup.InferType<typeof userApiKeysCreateInputSchema>>;\nexport function apiKeyCreationOptionsToCrud(type: "team", teamId: string, options: ApiKeyCreationOptions<"team">): Promise<yup.InferType<typeof teamApiKeysCreateInputSchema>>;\nexport function apiKeyCreationOptionsToCrud(type: ApiKeyType, userIdOrTeamId: string, options: ApiKeyCreationOptions): Promise<yup.InferType<typeof userApiKeysCreateInputSchema> | yup.InferType<typeof teamApiKeysCreateInputSchema>>;\nexport async function apiKeyCreationOptionsToCrud(type: ApiKeyType, userIdOrTeamId: string, options: ApiKeyCreationOptions): Promise<yup.InferType<typeof userApiKeysCreateInputSchema> | yup.InferType<typeof teamApiKeysCreateInputSchema>> {\n return {\n description: options.description,\n expires_at_millis: options.expiresAt == null ? options.expiresAt : options.expiresAt.getTime(),\n is_public: options.isPublic,\n ...(type === "user" ? { user_id: userIdOrTeamId } : { team_id: userIdOrTeamId }),\n };\n}\n\n\nexport type ApiKeyUpdateOptions<Type extends ApiKeyType = ApiKeyType> = {\n description?: string,\n expiresAt?: Date | null,\n revoked?: boolean,\n};\nexport function apiKeyUpdateOptionsToCrud(type: "user", options: ApiKeyUpdateOptions<"user">): Promise<UserApiKeysCrud["Client"]["Update"]>;\nexport function apiKeyUpdateOptionsToCrud(type: "team", options: ApiKeyUpdateOptions<"team">): Promise<TeamApiKeysCrud["Client"]["Update"]>;\nexport function apiKeyUpdateOptionsToCrud(type: ApiKeyType, options: ApiKeyUpdateOptions): Promise<UserApiKeysCrud["Client"]["Update"] | TeamApiKeysCrud["Client"]["Update"]>;\nexport async function apiKeyUpdateOptionsToCrud(type: ApiKeyType, options: ApiKeyUpdateOptions): Promise<UserApiKeysCrud["Client"]["Update"] | TeamApiKeysCrud["Client"]["Update"]> {\n return filterUndefined({\n description: options.description,\n expires_at_millis: options.expiresAt == null ? options.expiresAt : options.expiresAt.getTime(),\n revoked: options.revoked,\n });\n}\n'},{path:"apps/index.ts",content:'export {\n StackClientApp\n} from "./interfaces/client-app";\nexport type {\n StackClientAppConstructor,\n StackClientAppConstructorOptions,\n StackClientAppJson\n} from "./interfaces/client-app";\n\nexport {\n StackServerApp\n} from "./interfaces/server-app";\nexport type {\n StackServerAppConstructor,\n StackServerAppConstructorOptions\n} from "./interfaces/server-app";\n\nexport {\n StackAdminApp\n} from "./interfaces/admin-app";\nexport type {\n StackAdminAppConstructor,\n StackAdminAppConstructorOptions,\n} from "./interfaces/admin-app";\n\n'},{path:"apps/interfaces/admin-app.ts",content:'import { AnalyticsQueryOptions, AnalyticsQueryResponse } from "@stackframe/stack-shared/dist/interface/crud/analytics";\nimport type { AdminGetSessionReplayChunkEventsResponse, AdminGetSessionReplayAllEventsResponse } from "@stackframe/stack-shared/dist/interface/crud/session-replays";\nimport type { Transaction, TransactionType } from "@stackframe/stack-shared/dist/interface/crud/transactions";\nimport { InternalSession } from "@stackframe/stack-shared/dist/sessions";\nimport type { MoneyAmount } from "@stackframe/stack-shared/dist/utils/currency-constants";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport { AsyncStoreProperty, EmailConfig } from "../../common";\nimport { AdminEmailOutbox, AdminSentEmail } from "../../email";\nimport { InternalApiKey, InternalApiKeyCreateOptions, InternalApiKeyFirstView } from "../../internal-api-keys";\nimport { AdminProjectPermission, AdminProjectPermissionDefinition, AdminProjectPermissionDefinitionCreateOptions, AdminProjectPermissionDefinitionUpdateOptions, AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions } from "../../permissions";\nimport { AdminProject } from "../../projects";\nimport { _StackAdminAppImpl } from "../implementations";\nimport { StackServerApp, StackServerAppConstructorOptions } from "./server-app";\n\nexport type EmailOutboxListOptions = {\n status?: string,\n simpleStatus?: string,\n limit?: number,\n cursor?: string,\n};\n\nexport type EmailOutboxListResult = {\n items: AdminEmailOutbox[],\n nextCursor: string | null,\n};\n\nexport type EmailOutboxUpdateOptions = {\n isPaused?: boolean,\n scheduledAtMillis?: number,\n cancel?: boolean,\n tsxSource?: string,\n themeId?: string | null,\n};\n\nexport type ManagedEmailProviderSetupResult = {\n domainId: string,\n subdomain: string,\n senderLocalPart: string,\n nameServerRecords: string[],\n status: ManagedEmailProviderStatus["status"],\n};\n\nexport type ManagedEmailProviderStatus = {\n status: "pending_dns" | "pending_verification" | "verified" | "applied" | "failed",\n};\n\nexport type ManagedEmailProviderListItem = {\n domainId: string,\n subdomain: string,\n senderLocalPart: string,\n status: ManagedEmailProviderStatus["status"],\n nameServerRecords: string[],\n};\n\nimport type { AdminSessionReplay, ListSessionReplayChunksOptions, ListSessionReplayChunksResult, ListSessionReplaysOptions, ListSessionReplaysResult, SessionReplayAllEventsResult } from "../../session-replays";\nexport type { AdminSessionReplay, AdminSessionReplayChunk, ListSessionReplaysOptions, ListSessionReplaysResult, ListSessionReplayChunksOptions, ListSessionReplayChunksResult, SessionReplayAllEventsResult } from "../../session-replays";\n\n\nexport type StackAdminAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = (\n & StackServerAppConstructorOptions<HasTokenStore, ProjectId>\n & {\n superSecretAdminKey?: string,\n projectOwnerSession?: InternalSession | (() => Promise<string | null>),\n }\n);\n\n\nexport type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & AsyncStoreProperty<"project", [], AdminProject, false>\n & AsyncStoreProperty<"internalApiKeys", [], InternalApiKey[], true>\n & AsyncStoreProperty<"teamPermissionDefinitions", [], AdminTeamPermissionDefinition[], true>\n & AsyncStoreProperty<"projectPermissionDefinitions", [], AdminProjectPermissionDefinition[], true>\n & AsyncStoreProperty<"emailThemes", [], { id: string, displayName: string }[], true>\n & AsyncStoreProperty<"emailPreview", [{ themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string }], string, false>\n & AsyncStoreProperty<"emailPreviewWithEditableMarkers", [{ themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string, editableSource?: \'template\' | \'theme\' | \'both\' }], { html: string, editableRegions?: Record<string, unknown> }, false> // THIS_LINE_PLATFORM react-like\n & AsyncStoreProperty<"emailTemplates", [], { id: string, displayName: string, themeId?: string, tsxSource: string }[], true>\n & AsyncStoreProperty<"emailDrafts", [], { id: string, displayName: string, themeId: string | undefined | false, tsxSource: string, sentAt: Date | null }[], true>\n & AsyncStoreProperty<"stripeAccountInfo", [], { account_id: string, charges_enabled: boolean, details_submitted: boolean, payouts_enabled: boolean } | null, false>\n & AsyncStoreProperty<\n "transactions",\n [{\n cursor?: string,\n limit?: number,\n type?: TransactionType,\n customerType?: \'user\' | \'team\' | \'custom\',\n customerId?: string,\n }],\n { transactions: Transaction[], nextCursor: string | null },\n true\n >\n & {\n createInternalApiKey(options: InternalApiKeyCreateOptions): Promise<InternalApiKeyFirstView>,\n\n createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise<AdminTeamPermission>,\n updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions): Promise<void>,\n deleteTeamPermissionDefinition(permissionId: string): Promise<void>,\n /**\n * @param options.query Free-text search; matches against permission ID and description.\n */\n listTeamPermissionDefinitionsPaginated(options: { limit: number, cursor?: string, query?: string }): Promise<{ items: AdminTeamPermissionDefinition[], nextCursor: string | null }>,\n\n createProjectPermissionDefinition(data: AdminProjectPermissionDefinitionCreateOptions): Promise<AdminProjectPermission>,\n updateProjectPermissionDefinition(permissionId: string, data: AdminProjectPermissionDefinitionUpdateOptions): Promise<void>,\n deleteProjectPermissionDefinition(permissionId: string): Promise<void>,\n\n useSvixToken(): { token: string, url: string | undefined }, // THIS_LINE_PLATFORM react-like\n\n sendTestEmail(options: {\n recipientEmail: string,\n emailConfig: EmailConfig,\n }): Promise<Result<undefined, { errorMessage: string }>>,\n\n sendTestWebhook(options: { endpointId: string }): Promise<Result<undefined, { errorMessage: string }>>,\n\n sendSignInInvitationEmail(email: string, callbackUrl: string): Promise<void>,\n\n listSentEmails(): Promise<AdminSentEmail[]>,\n setupManagedEmailProvider(options: { subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderSetupResult>,\n checkManagedEmailStatus(options: { domainId: string, subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderStatus>,\n listManagedEmailDomains(): Promise<ManagedEmailProviderListItem[]>,\n applyManagedEmailProvider(options: { domainId: string }): Promise<{ status: "applied" }>,\n\n useEmailTheme(id: string): { displayName: string, tsxSource: string }, // THIS_LINE_PLATFORM react-like\n createEmailTheme(displayName: string): Promise<{ id: string }>,\n updateEmailTheme(id: string, tsxSource: string): Promise<void>,\n deleteEmailTheme(id: string): Promise<void>,\n saveChatMessage(threadId: string, message: any): Promise<void>,\n listChatMessages(threadId: string): Promise<{ messages: Array<any> }>,\n rewriteTemplateSourceWithAI(templateTsxSource: string): Promise<{ tsxSource: string }>,\n updateEmailTemplate(id: string, tsxSource: string, themeId: string | null | false): Promise<{ renderedHtml: string }>,\n createEmailTemplate(displayName: string): Promise<{ id: string }>,\n deleteEmailTemplate(id: string): Promise<void>,\n\n setupPayments(): Promise<{ url: string }>,\n createStripeWidgetAccountSession(): Promise<{ client_secret: string }>,\n getPaymentMethodConfigs(): Promise<{ configId: string, methods: Array<{ id: string, name: string, enabled: boolean, available: boolean, overridable: boolean }> } | null>,\n updatePaymentMethodConfigs(configId: string, updates: Record<string, \'on\' | \'off\'>): Promise<void>,\n createEmailDraft(options: { displayName: string, themeId?: string | undefined | false, tsxSource?: string }): Promise<{ id: string }>,\n updateEmailDraft(id: string, data: { displayName?: string, themeId?: string | undefined | false, tsxSource?: string }): Promise<void>,\n deleteEmailDraft(id: string): Promise<void>,\n refreshEmailDrafts(): Promise<void>,\n createItemQuantityChange(options: (\n { userId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { teamId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { customCustomerId: string, itemId: string, quantity: number, expiresAt?: string, description?: string }\n )): Promise<void>,\n refundTransaction(options: {\n type: "subscription" | "one-time-purchase",\n id: string,\n invoiceId?: string,\n amountUsd: MoneyAmount,\n endAction?: "now" | "at-period-end",\n }): Promise<{ refundTransactionId: string }>,\n queryAnalytics(options: AnalyticsQueryOptions): Promise<AnalyticsQueryResponse>,\n\n listSessionReplays(options?: ListSessionReplaysOptions): Promise<ListSessionReplaysResult>,\n getSessionReplay(sessionReplayId: string): Promise<AdminSessionReplay>,\n listSessionReplayChunks(sessionReplayId: string, options?: ListSessionReplayChunksOptions): Promise<ListSessionReplayChunksResult>,\n getSessionReplayChunkEvents(sessionReplayId: string, chunkId: string): Promise<AdminGetSessionReplayChunkEventsResponse>,\n getSessionReplayEvents(sessionReplayId: string, options?: { offset?: number, limit?: number }): Promise<SessionReplayAllEventsResult>,\n\n // Email Outbox methods\n listOutboxEmails(options?: EmailOutboxListOptions): Promise<EmailOutboxListResult>,\n getOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n updateOutboxEmail(id: string, options: EmailOutboxUpdateOptions): Promise<AdminEmailOutbox>,\n pauseOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n unpauseOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n cancelOutboxEmail(id: string): Promise<AdminEmailOutbox>,\n }\n & StackServerApp<HasTokenStore, ProjectId>\n);\nexport type StackAdminAppConstructor = {\n new <\n HasTokenStore extends boolean,\n ProjectId extends string\n >(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>,\n new(options: StackAdminAppConstructorOptions<boolean, string>): StackAdminApp<boolean, string>,\n};\nexport const StackAdminApp: StackAdminAppConstructor = _StackAdminAppImpl;\n'},{path:"apps/interfaces/client-app.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { CurrentUserCrud } from "@stackframe/stack-shared/dist/interface/crud/current-user";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport { AsyncStoreProperty, AuthLike, GetCurrentPartialUserOptions, GetCurrentUserOptions, HandlerUrlOptions, HandlerUrls, OAuthScopesOnSignIn, RedirectMethod, RedirectToOptions, ResolvedHandlerUrls, stackAppInternalsSymbol, TokenStoreInit } from "../../common";\nimport type { RequestListener } from "@stackframe/stack-shared/dist/interface/client-interface";\nimport { CustomerInvoicesList, CustomerInvoicesRequestOptions, CustomerProductsList, CustomerProductsRequestOptions, Item } from "../../customers";\nimport { Project } from "../../projects";\nimport { ProjectCurrentUser, SyncedPartialUser, TokenPartialUser } from "../../users";\nimport { _StackClientAppImpl } from "../implementations";\nimport { AnalyticsOptions } from "../implementations/session-replay";\n\nexport type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = {\n baseUrl?: string | { browser: string, server: string },\n extraRequestHeaders?: Record<string, string>,\n projectId?: ProjectId,\n publishableClientKey?: string,\n urls?: HandlerUrlOptions,\n oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn>,\n tokenStore?: TokenStoreInit<HasTokenStore>,\n redirectMethod?: RedirectMethod,\n inheritsFrom?: StackClientApp<any, any>,\n\n /**\n * Whether to show the Stack Auth dev tool indicator in browser-like development environments.\n *\n * Defaults to true.\n */\n devTool?: boolean,\n\n /**\n * By default, the Stack app will automatically prefetch some data from Stack\'s server when this app is first\n * constructed. This improves the performance of your app, but will create network requests that are unnecessary if\n * the app is never used or disposed of immediately. To disable this behavior, set this option to true.\n */\n noAutomaticPrefetch?: boolean,\n\n /**\n * Options for analytics and session recording. Replays are disabled by default;\n * set `{ replays: { enabled: true } }` to opt in.\n */\n analytics?: AnalyticsOptions,\n} & (\n { tokenStore: TokenStoreInit<HasTokenStore> } | { tokenStore?: undefined, inheritsFrom: StackClientApp<HasTokenStore, any> }\n) & (\n string extends ProjectId ? unknown : ({ projectId: ProjectId } | { inheritsFrom: StackClientApp<any, ProjectId> })\n);\n\n\nexport type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & { inheritsFrom?: undefined } & {\n uniqueIdentifier: string,\n // note: if you add more fields here, make sure to ensure the checkString in the constructor has/doesn\'t have them\n};\n\nexport type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n readonly projectId: ProjectId,\n\n /**\n * The version of the Stack Auth SDK.\n */\n readonly version: string,\n\n /**\n * @deprecated `app.urls` is static and does not include runtime redirect-back parameters.\n * For navigation, prefer `redirectToXyz()` methods (for example `redirectToSignIn()`).\n */\n readonly urls: Readonly<ResolvedHandlerUrls>,\n\n signInWithOAuth(provider: string, options?: { returnTo?: string }): Promise<void>,\n signInWithCredential(options: { email: string, password: string, noRedirect?: boolean }): Promise<Result<undefined, KnownErrors["EmailPasswordMismatch"] | KnownErrors["InvalidTotpCode"]>>,\n signUpWithCredential(options: {\n email: string,\n password: string,\n noRedirect?: boolean,\n } & ({ noVerificationCallback: true } | { noVerificationCallback?: false, verificationCallbackUrl?: string })): Promise<Result<undefined, KnownErrors["UserWithEmailAlreadyExists"] | KnownErrors["PasswordRequirementsNotMet"] | KnownErrors["BotChallengeFailed"]>>,\n signInWithPasskey(): Promise<Result<undefined, KnownErrors["PasskeyAuthenticationFailed"] | KnownErrors["InvalidTotpCode"] | KnownErrors["PasskeyWebAuthnError"]>>,\n callOAuthCallback(): Promise<boolean>,\n promptCliLogin(options: { appUrl: string, expiresInMillis?: number, anonRefreshToken?: string, promptLink?: (url: string, loginCode: string) => void }): Promise<Result<string, KnownErrors["CliAuthError"] | KnownErrors["CliAuthExpiredError"] | KnownErrors["CliAuthUsedError"]>>,\n sendForgotPasswordEmail(email: string, options?: { callbackUrl?: string }): Promise<Result<undefined, KnownErrors["UserNotFound"]>>,\n sendMagicLinkEmail(email: string, options?: { callbackUrl?: string }): Promise<Result<{ nonce: string }, KnownErrors["RedirectUrlNotWhitelisted"] | KnownErrors["BotChallengeFailed"]>>,\n resetPassword(options: { code: string, password: string }): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>,\n verifyPasswordResetCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>,\n verifyTeamInvitationCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["TeamInvitationEmailMismatch"]>>,\n acceptTeamInvitation(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["TeamInvitationEmailMismatch"]>>,\n getTeamInvitationDetails(code: string): Promise<Result<{ teamDisplayName: string }, KnownErrors["VerificationCodeError"] | KnownErrors["TeamInvitationEmailMismatch"]>>,\n verifyEmail(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>,\n signInWithMagicLink(code: string, options?: { noRedirect?: boolean }): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"]>>,\n signInWithMfa(otp: string, code: string, options?: { noRedirect?: boolean }): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"]>>,\n\n redirectToOAuthCallback(): Promise<void>,\n\n getConvexClientAuth(options: HasTokenStore extends false ? { tokenStore: TokenStoreInit } : { tokenStore?: TokenStoreInit }): (args: { forceRefreshToken: boolean }) => Promise<string | null>,\n getConvexHttpClientAuth(options: { tokenStore: TokenStoreInit }): Promise<string>,\n\n // IF_PLATFORM react-like\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): ProjectCurrentUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): ProjectCurrentUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): ProjectCurrentUser<ProjectId>,\n useUser(options?: GetCurrentUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null,\n // END_PLATFORM\n\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options?: GetCurrentUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>,\n\n cancelSubscription(options: { productId: string, subscriptionId?: string } | { productId: string, subscriptionId?: string, teamId: string }): Promise<void>,\n\n // note: we don\'t special-case \'anonymous\' here to return non-null, see GetPartialUserOptions for more details\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): Promise<SyncedPartialUser | TokenPartialUser | null>,\n // IF_PLATFORM react-like\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): SyncedPartialUser | TokenPartialUser | null,\n // END_PLATFORM\n useNavigate(): (to: string) => void, // THIS_LINE_PLATFORM react-like\n\n [stackAppInternalsSymbol]: {\n toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>,\n setCurrentUser(userJsonPromise: Promise<CurrentUserCrud[\'Client\'][\'Read\'] | null>): void,\n getConstructorOptions(): StackClientAppConstructorOptions<HasTokenStore, ProjectId> & { inheritsFrom?: undefined },\n sendSessionReplayBatch(body: string, options: { keepalive: boolean }): Promise<Result<Response, Error>>,\n sendAnalyticsEventBatch(body: string, options: { keepalive: boolean }): Promise<Result<Response, Error>>,\n addRequestListener(listener: RequestListener): () => void,\n sendRequest(path: string, requestOptions: RequestInit, requestType?: "client" | "server" | "admin"): Promise<Response>,\n getRedirectMethod(): RedirectMethod,\n redirectToUrl(url: string | URL, options?: { replace?: boolean }): Promise<void>,\n redirectToHandler(handlerName: keyof HandlerUrls, options?: RedirectToOptions): Promise<void>,\n signInWithTokens(tokens: { accessToken: string, refreshToken: string }): Promise<void>,\n },\n }\n & AsyncStoreProperty<"project", [], Project, false>\n & AsyncStoreProperty<\n "item",\n [{ itemId: string, userId: string } | { itemId: string, teamId: string } | { itemId: string, customCustomerId: string }],\n Item,\n false\n >\n & AsyncStoreProperty<\n "products",\n [options: CustomerProductsRequestOptions],\n CustomerProductsList,\n true\n >\n & AsyncStoreProperty<\n "invoices",\n [options: CustomerInvoicesRequestOptions],\n CustomerInvoicesList,\n true\n >\n & { [K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, \'handler\' | \'oauthCallback\'>>}`]: (options?: RedirectToOptions) => Promise<void> }\n & AuthLike<HasTokenStore extends false ? { tokenStore: TokenStoreInit } : { tokenStore?: TokenStoreInit }>\n);\nexport type StackClientAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackClientAppConstructorOptions<HasTokenStore, ProjectId>): StackClientApp<HasTokenStore, ProjectId>,\n new(options: StackClientAppConstructorOptions<boolean, string>): StackClientApp<boolean, string>,\n\n [stackAppInternalsSymbol]: {\n fromClientJson<HasTokenStore extends boolean, ProjectId extends string>(\n json: StackClientAppJson<HasTokenStore, ProjectId>\n ): StackClientApp<HasTokenStore, ProjectId>,\n },\n};\nexport const StackClientApp: StackClientAppConstructor = _StackClientAppImpl;\n'},{path:"apps/interfaces/server-app.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport type { GenericQueryCtx } from "convex/server";\nimport { AsyncStoreProperty, GetCurrentPartialUserOptions, GetCurrentUserOptions } from "../../common";\nimport { CustomerProductsList, CustomerProductsRequestOptions, InlineProduct, ServerItem } from "../../customers";\nimport { DataVaultStore } from "../../data-vault";\nimport { EmailDeliveryInfo, SendEmailOptions } from "../../email";\nimport { ServerListTeamsOptions, ServerListUsersOptions, ServerTeam, ServerTeamCreateOptions } from "../../teams";\nimport { ProjectCurrentServerUser, ServerOAuthProvider, ServerUser, ServerUserCreateOptions, SyncedPartialServerUser, TokenPartialUser } from "../../users";\nimport { _StackServerAppImpl } from "../implementations";\nimport { StackClientApp, StackClientAppConstructorOptions } from "./client-app";\n\n\nexport type StackServerAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {\n secretServerKey?: string,\n};\n\nexport type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n createTeam(data: ServerTeamCreateOptions): Promise<ServerTeam>,\n /**\n * @deprecated use `getUser()` instead\n */\n getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n\n createUser(options: ServerUserCreateOptions): Promise<ServerUser>,\n grantProduct(options: (\n ({ userId: string } | { teamId: string } | { customCustomerId: string }) &\n ({ productId: string } | { product: InlineProduct }) &\n { quantity?: number }\n )): Promise<void>,\n\n // IF_PLATFORM react-like\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options?: GetCurrentUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null,\n useUser(id: string): ServerUser | null,\n useUser(options: { apiKey: string, or?: "return-null" | "anonymous" }): ServerUser | null,\n useUser(options: { from: "convex", ctx: GenericQueryCtx<any>, or?: "return-null" | "anonymous" }): ServerUser | null,\n // END_PLATFORM\n\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'redirect\' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'throw\' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options: GetCurrentUserOptions<HasTokenStore> & { or: \'anonymous\' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options?: GetCurrentUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n getUser(id: string): Promise<ServerUser | null>,\n getUser(options: { apiKey: string, or?: "return-null" | "anonymous" }): Promise<ServerUser | null>,\n getUser(options: { from: "convex", ctx: GenericQueryCtx<any>, or?: "return-null" | "anonymous" }): Promise<ServerUser | null>,\n\n // note: we don\'t special-case \'anonymous\' here to return non-null, see GetPartialUserOptions for more details\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): Promise<TokenPartialUser | null>,\n getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): Promise<SyncedPartialServerUser | TokenPartialUser | null>,\n // IF_PLATFORM react-like\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'token\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & { from: \'convex\' }): TokenPartialUser | null,\n usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): SyncedPartialServerUser | TokenPartialUser | null,\n // END_PLATFORM\n // IF_PLATFORM react-like\n useTeam(id: string): ServerTeam | null,\n useTeam(options: { apiKey: string }): ServerTeam | null,\n // END_PLATFORM\n getTeam(id: string): Promise<ServerTeam | null>,\n getTeam(options: { apiKey: string }): Promise<ServerTeam | null>,\n\n\n useUsers(options?: ServerListUsersOptions): ServerUser[] & { nextCursor: string | null }, // THIS_LINE_PLATFORM react-like\n listUsers(options?: ServerListUsersOptions): Promise<ServerUser[] & { nextCursor: string | null }>,\n\n /**\n * Returns every direct (or recursive) team permission grant for every\n * member of the given team in one request. Use this instead of calling\n * `user.listPermissions(team)` per row when rendering a roster — that\n * pattern produces an N+1 over the team-member endpoint.\n */\n listTeamMemberPermissions(teamId: string, options?: { recursive?: boolean }): Promise<{ userId: string, permissionId: string }[]>,\n // IF_PLATFORM react-like\n useTeamMemberPermissions(teamId: string, options?: { recursive?: boolean }): { userId: string, permissionId: string }[],\n // END_PLATFORM\n\n // TODO this should actually be on ServerUser\n createOAuthProvider(options: {\n userId: string,\n accountId: string,\n providerConfigId: string,\n email: string,\n allowSignIn: boolean,\n allowConnectedAccounts: boolean,\n }): Promise<Result<ServerOAuthProvider, InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>>>,\n\n sendEmail(options: SendEmailOptions): Promise<void>,\n\n getEmailDeliveryStats(): Promise<EmailDeliveryInfo>,\n // IF_PLATFORM react-like\n useEmailDeliveryStats(): EmailDeliveryInfo,\n // END_PLATFORM\n\n activateEmailCapacityBoost(): Promise<void>,\n }\n & AsyncStoreProperty<"user", [id: string], ServerUser | null, false>\n & Omit<AsyncStoreProperty<"users", [], ServerUser[], true>, "listUsers" | "useUsers">\n & AsyncStoreProperty<"teams", [options?: ServerListTeamsOptions], ServerTeam[] & { nextCursor: string | null }, true>\n & AsyncStoreProperty<"dataVaultStore", [id: string], DataVaultStore, false>\n & AsyncStoreProperty<\n "item",\n [{ itemId: string, userId: string } | { itemId: string, teamId: string } | { itemId: string, customCustomerId: string }],\n ServerItem,\n false\n >\n & AsyncStoreProperty<\n "products",\n [options: CustomerProductsRequestOptions],\n CustomerProductsList,\n true\n >\n & StackClientApp<HasTokenStore, ProjectId>\n);\nexport type StackServerAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackServerAppConstructorOptions<HasTokenStore, ProjectId>): StackServerApp<HasTokenStore, ProjectId>,\n new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>,\n};\nexport const StackServerApp: StackServerAppConstructor = _StackServerAppImpl;\n'},{path:"common.ts",content:'import { ProviderType } from "@stackframe/stack-shared/dist/utils/oauth";\nimport type { GenericQueryCtx, UserIdentity } from "convex/server";\nexport type {\n DefaultHandlerUrlTarget,\n HandlerPageUrls,\n HandlerRedirectUrls,\n HandlerUrlOptions,\n HandlerUrlTarget,\n HandlerUrls,\n ResolvedHandlerUrls,\n} from "@stackframe/stack-shared/dist/interface/handler-urls";\n\nexport type RedirectToOptions = {\n replace?: boolean,\n noRedirectBack?: boolean,\n};\n\nexport type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> =\n & { [key in `${IsMultiple extends true ? "list" : "get"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value> }\n & { [key in `use${Capitalize<Name>}`]: (...args: Args) => Value } // THIS_LINE_PLATFORM react-like\n\nexport type EmailConfig = {\n host: string,\n port: number,\n username: string,\n password: string,\n senderEmail: string,\n senderName: string,\n}\n\nexport type RedirectMethod = "window"\n | "nextjs" // THIS_LINE_PLATFORM next\n | "tanstack-start" // THIS_LINE_PLATFORM tanstack-start\n | "none"\n | {\n useNavigate: () => (to: string) => void,\n navigate?: (to: string) => void,\n }\n\n\nexport type GetCurrentUserOptions<HasTokenStore> =\n & {\n or?: \'redirect\' | \'throw\' | \'return-null\' | \'anonymous\' | /** @deprecated */ \'anonymous-if-exists[deprecated]\',\n /**\n * Whether to include restricted users (users who haven\'t completed onboarding requirements like email verification).\n * By default, restricted users are filtered out (treated similar to anonymous users).\n *\n * Note: This option cannot be set to false when `or: \'anonymous\'` is used, as all anonymous users are also restricted.\n *\n * @default false\n */\n includeRestricted?: boolean,\n tokenStore?: TokenStoreInit,\n }\n & (HasTokenStore extends false ? {\n tokenStore: TokenStoreInit,\n } : {});\n\nexport type ConvexCtx =\n| GenericQueryCtx<any>\n| { auth: { getUserIdentity: () => Promise<UserIdentity | null> } };\n\nexport type GetCurrentPartialUserOptions<HasTokenStore> =\n & {\n or?: \'return-null\' | \'anonymous-if-exists\', // note: unlike normal getUser, \'anonymous\' still returns null sometimes (eg. if no token is present)\n tokenStore?: TokenStoreInit,\n }\n & (\n | {\n from: \'token\',\n }\n | {\n from: \'convex\',\n ctx: ConvexCtx,\n }\n )\n & (HasTokenStore extends false ? {\n tokenStore: TokenStoreInit,\n } : {});\n\nexport type RequestLike = {\n headers:\n | {\n get: (name: string) => string | null,\n }\n | Record<string, string | null>,\n};\n\nexport type TokenStoreInit<HasTokenStore extends boolean = boolean> =\n HasTokenStore extends true ? (\n | "cookie"\n | "nextjs-cookie"\n | "memory"\n | RequestLike\n | { accessToken: string, refreshToken: string }\n )\n : HasTokenStore extends false ? null\n : TokenStoreInit<true> | TokenStoreInit<false>;\n\nexport type OAuthScopesOnSignIn = {\n [key in ProviderType]: string[];\n};\n\n/**\n * Contains the authentication methods without session-related fields.\n * Used for apps that have token storage capabilities.\n */\nexport type AuthLike<ExtraOptions = {}> = {\n signOut(options?: { redirectUrl?: URL | string } & ExtraOptions): Promise<void>,\n signOut(options?: { redirectUrl?: URL | string }): Promise<void>,\n\n /**\n * Returns the current access token, or null if the user is not signed in.\n *\n * The access token is a short-lived JWT that can be used to authenticate requests to external servers.\n * It will be automatically refreshed when it expires.\n */\n getAccessToken(options?: {} & ExtraOptions): Promise<string | null>,\n useAccessToken(options?: {} & ExtraOptions): string | null, // THIS_LINE_PLATFORM react-like\n\n /**\n * Returns the current refresh token, or null if the user is not signed in.\n *\n * The refresh token is a long-lived token that can be used to obtain new access tokens.\n * It should be kept secret and never exposed to the client.\n */\n getRefreshToken(options?: {} & ExtraOptions): Promise<string | null>,\n useRefreshToken(options?: {} & ExtraOptions): string | null, // THIS_LINE_PLATFORM react-like\n\n /**\n * Returns the value for the HTTP `Authorization` header for authenticated requests to external servers.\n * Most commonly used in cross-origin requests. Similar to `getAuthJson`, but specifically for HTTP requests.\n *\n * If you are using `tokenStore: "cookie"`, you don\'t need this for same-origin requests. However, most\n * browsers now disable third-party cookies by default, so we must pass authentication tokens by header instead\n * if the client and server are on different origins.\n *\n * This function returns the header value in this format:\n * `Bearer stackauth_<base64(getAuthJson())>`, or `null` if the user is not signed in.\n * You can use this with `fetch` or other HTTP request libraries to send authenticated requests.\n *\n * On the server, you can then pass in the `Request` object to the `tokenStore` option\n * of your Stack app. Please note that CORS does not allow most headers by default, so you\n * must include `authorization` in the [`Access-Control-Allow-Headers` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)\n * of the CORS preflight response.\n *\n * If you are not using HTTP (and hence cannot set headers), use `getAuthJson()` instead.\n *\n * Example:\n *\n * ```ts\n * // client\n * const authorizationHeader = await stackApp.getAuthorizationHeader();\n * const res = await fetch("https://api.example.com", {\n * headers: {\n * ...(authorizationHeader ? { Authorization: authorizationHeader } : {})\n * // you can also add your own headers here\n * },\n * });\n *\n * // server\n * function handleRequest(req: Request) {\n * const user = await stackServerApp.getUser({ tokenStore: req });\n * return new Response("Welcome, " + user.displayName);\n * }\n * ```\n */\n getAuthorizationHeader(options?: {} & ExtraOptions): Promise<string | null>,\n useAuthorizationHeader(options?: {} & ExtraOptions): string | null, // THIS_LINE_PLATFORM react-like\n\n /**\n * @deprecated Use `getAuthorizationHeader()` instead.\n *\n * Returns the legacy `x-stack-auth` headers for authenticated HTTP requests. This remains for backwards\n * compatibility with existing integrations.\n */\n getAuthHeaders(options?: {} & ExtraOptions): Promise<{ "x-stack-auth": string }>,\n /** @deprecated Use `useAuthorizationHeader()` instead. */\n useAuthHeaders(options?: {} & ExtraOptions): { "x-stack-auth": string }, // THIS_LINE_PLATFORM react-like\n\n /**\n * Creates a JSON-serializable object containing the information to authenticate a user on an external server.\n * Similar to `getAuthorizationHeader`, but returns an object that can be sent over any protocol instead of just\n * HTTP headers.\n *\n * While `getAuthorizationHeader` is the recommended way to send authentication tokens over HTTP, your app may use\n * a different protocol, for example WebSockets or gRPC. This function returns a token object that can be JSON-serialized and sent to the server in any way you like.\n *\n * On the server, you can pass in this token object into the `tokenStore` option to fetch user details.\n *\n * Example:\n *\n * ```ts\n * // client\n * const res = await rpcCall(rpcEndpoint, {\n * data: {\n * auth: await stackApp.getAuthJson(),\n * },\n * });\n *\n * // server\n * function handleRequest(data) {\n * const user = await stackServerApp.getUser({ tokenStore: data.auth });\n * return new Response("Welcome, " + user.displayName);\n * }\n * ```\n */\n getAuthJson(options?: {} & ExtraOptions): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n useAuthJson(options?: {} & ExtraOptions): { accessToken: string | null, refreshToken: string | null }, // THIS_LINE_PLATFORM react-like\n};\n\n/** @internal */\nexport const stackAppInternalsSymbol = Symbol.for("StackAuth--DO-NOT-USE-OR-YOU-WILL-BE-FIRED--StackAppInternals");\n'},{path:"connected-accounts/index.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\n\nexport type Connection = {\n /**\n * @deprecated Use `provider` instead. This field returns the provider for backward compatibility.\n */\n id: string,\n /** Provider config ID (e.g., "google", "github") */\n provider: string,\n /** Account ID from the OAuth provider (e.g., Google user ID) */\n providerAccountId: string,\n};\n\nexport type OAuthConnection = {\n /**\n * Get an OAuth access token for this connected account.\n *\n * Returns `{ status: "ok", data: { accessToken } }` on success, or\n * `{ status: "error", error: KnownErrors["OAuthAccessTokenNotAvailable"] }` if the\n * refresh token has been revoked/expired or the requested scopes are not available.\n *\n * @param options.scopes - If provided, only returns a token that has all of these scopes.\n */\n getAccessToken(options?: { scopes?: string[] }): Promise<Result<{ accessToken: string }, KnownErrors["OAuthAccessTokenNotAvailable"]>>,\n /**\n * React hook to get an OAuth access token for this connected account.\n *\n * Returns `{ status: "ok", data: { accessToken } }` on success, or\n * `{ status: "error", error: KnownErrors["OAuthAccessTokenNotAvailable"] }` if the\n * refresh token has been revoked/expired or the requested scopes are not available.\n *\n * @param options.scopes - If provided, only returns a token that has all of these scopes.\n */\n useAccessToken(options?: { scopes?: string[] }): Result<{ accessToken: string }, KnownErrors["OAuthAccessTokenNotAvailable"]>, // THIS_LINE_PLATFORM react-like\n} & Connection;\n\n/**\n * @deprecated Used by legacy `getConnectedAccount(providerId)`. Use `OAuthConnection` instead,\n * which returns a `Result` from `getAccessToken`/`useAccessToken` instead of throwing.\n */\nexport type DeprecatedOAuthConnection = {\n getAccessToken(): Promise<{ accessToken: string }>,\n useAccessToken(): { accessToken: string }, // THIS_LINE_PLATFORM react-like\n} & Connection;\n'},{path:"contact-channels/index.ts",content:'import { ContactChannelsCrud } from "@stackframe/stack-shared/dist/interface/crud/contact-channels";\n\n\nexport type ContactChannel = {\n id: string,\n value: string,\n type: \'email\',\n isPrimary: boolean,\n isVerified: boolean,\n usedForAuth: boolean,\n\n sendVerificationEmail(options?: { callbackUrl?: string }): Promise<void>,\n update(data: ContactChannelUpdateOptions): Promise<void>,\n delete(): Promise<void>,\n}\n\nexport type ContactChannelCreateOptions = {\n value: string,\n type: \'email\',\n usedForAuth: boolean,\n isPrimary?: boolean,\n}\n\nexport function contactChannelCreateOptionsToCrud(userId: string, options: ContactChannelCreateOptions): ContactChannelsCrud["Client"]["Create"] {\n return {\n value: options.value,\n type: options.type,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n user_id: userId,\n };\n}\n\nexport type ContactChannelUpdateOptions = {\n usedForAuth?: boolean,\n value?: string,\n isPrimary?: boolean,\n}\n\nexport function contactChannelUpdateOptionsToCrud(options: ContactChannelUpdateOptions): ContactChannelsCrud["Client"]["Update"] {\n return {\n value: options.value,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n };\n}\n\nexport type ServerContactChannel = ContactChannel & {\n update(data: ServerContactChannelUpdateOptions): Promise<void>,\n}\nexport type ServerContactChannelUpdateOptions = ContactChannelUpdateOptions & {\n isVerified?: boolean,\n}\n\nexport function serverContactChannelUpdateOptionsToCrud(options: ServerContactChannelUpdateOptions): ContactChannelsCrud["Server"]["Update"] {\n return {\n value: options.value,\n is_verified: options.isVerified,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n };\n}\n\nexport type ServerContactChannelCreateOptions = ContactChannelCreateOptions & {\n isVerified?: boolean,\n}\nexport function serverContactChannelCreateOptionsToCrud(userId: string, options: ServerContactChannelCreateOptions): ContactChannelsCrud["Server"]["Create"] {\n return {\n type: options.type,\n value: options.value,\n is_verified: options.isVerified,\n user_id: userId,\n used_for_auth: options.usedForAuth,\n is_primary: options.isPrimary,\n };\n}\n'},{path:"customers/index.ts",content:'import { inlineProductSchema } from "@stackframe/stack-shared/dist/schema-fields";\nimport * as yup from "yup";\nimport { AsyncStoreProperty } from "../common";\n\nexport type InlineProduct = yup.InferType<typeof inlineProductSchema>;\n\nexport type Item = {\n displayName: string,\n /**\n * May be negative.\n */\n quantity: number,\n /**\n * Equal to Math.max(0, quantity).\n */\n nonNegativeQuantity: number,\n};\n\nexport type ServerItem = Item & {\n increaseQuantity(amount: number): Promise<void>,\n /**\n * Decreases the quantity by the given amount.\n *\n * Note that you may want to use tryDecreaseQuantity instead, as it will prevent the quantity from going below 0 in a race-condition-free way.\n */\n decreaseQuantity(amount: number): Promise<void>,\n /**\n * Decreases the quantity by the given amount and returns true if the result is non-negative; returns false and does nothing if the result would be negative.\n *\n * Most useful for pre-paid credits.\n */\n tryDecreaseQuantity(amount: number): Promise<boolean>,\n};\n\nexport type CustomerProduct = {\n id: string | null,\n quantity: number,\n displayName: string,\n customerType: "user" | "team" | "custom",\n isServerOnly: boolean,\n stackable: boolean,\n /** @deprecated Product ownership is independent of purchase type. Will be removed in a future version. */\n type?: "one_time" | "subscription",\n subscription: null | {\n subscriptionId: string | null,\n currentPeriodEnd: Date | null,\n cancelAtPeriodEnd: boolean,\n isCancelable: boolean,\n },\n switchOptions?: Array<{\n productId: string,\n displayName: string,\n prices: InlineProduct["prices"],\n }>,\n};\n\nexport type CustomerProductsList = CustomerProduct[] & {\n nextCursor: string | null,\n};\n\nexport type CustomerProductsListOptions = {\n cursor?: string,\n limit?: number,\n};\n\nexport type CustomerProductsRequestOptions =\n | ({ userId: string } & CustomerProductsListOptions)\n | ({ teamId: string } & CustomerProductsListOptions)\n | ({ customCustomerId: string } & CustomerProductsListOptions);\n\nexport type CustomerInvoiceStatus = "draft" | "open" | "paid" | "uncollectible" | "void" | null;\n\nexport type CustomerInvoice = {\n createdAt: Date,\n status: CustomerInvoiceStatus,\n amountTotal: number,\n hostedInvoiceUrl: string | null,\n};\n\nexport type CustomerInvoicesList = CustomerInvoice[] & {\n nextCursor: string | null,\n};\n\nexport type CustomerInvoicesListOptions = {\n cursor?: string,\n limit?: number,\n};\n\nexport type CustomerInvoicesRequestOptions =\n | ({ userId: string } & CustomerInvoicesListOptions)\n | ({ teamId: string } & CustomerInvoicesListOptions);\n\nexport type CustomerDefaultPaymentMethod = {\n id: string,\n brand: string | null,\n last4: string | null,\n exp_month: number | null,\n exp_year: number | null,\n} | null;\n\nexport type CustomerBilling = {\n hasCustomer: boolean,\n defaultPaymentMethod: CustomerDefaultPaymentMethod,\n};\n\nexport type CustomerPaymentMethodSetupIntent = {\n clientSecret: string,\n stripeAccountId: string,\n};\n\nexport type Customer<IsServer extends boolean = false> =\n & {\n readonly id: string,\n\n createCheckoutUrl(options: (\n | { productId: string, returnUrl?: string }\n | (IsServer extends true ? { product: InlineProduct, returnUrl?: string } : never)\n )): Promise<string>,\n\n createPaymentMethodSetupIntent(): Promise<CustomerPaymentMethodSetupIntent>,\n\n setDefaultPaymentMethodFromSetupIntent(setupIntentId: string): Promise<CustomerDefaultPaymentMethod>,\n\n switchSubscription(options: { fromProductId: string, toProductId: string, priceId?: string, quantity?: number }): Promise<void>,\n }\n & AsyncStoreProperty<\n "billing",\n [],\n CustomerBilling,\n false\n >\n & AsyncStoreProperty<\n "item",\n [itemId: string],\n IsServer extends true ? ServerItem : Item,\n false\n >\n & AsyncStoreProperty<\n "products",\n [options?: CustomerProductsListOptions],\n CustomerProductsList,\n true\n >\n & AsyncStoreProperty<\n "invoices",\n [options?: CustomerInvoicesListOptions],\n CustomerInvoicesList,\n true\n >\n & (IsServer extends true ? {\n grantProduct(\n product: { productId: string, quantity?: number } | { product: InlineProduct, quantity?: number },\n ): Promise<void>,\n } : {});\n'},{path:"data-vault/index.ts",content:'import { AsyncStoreProperty } from "../common";\n\nexport type DataVaultStore =\n & {\n id: string,\n setValue: (key: string, value: string, options: { secret: string }) => Promise<void>,\n }\n & AsyncStoreProperty<"value", [key: string, options: { secret: string }], string | null, false>;\n'},{path:"email-templates/index.ts",content:"import { EmailTemplateCrud, EmailTemplateType } from \"@stackframe/stack-shared/dist/interface/crud/email-templates\";\n\n\nexport type AdminEmailTemplate = {\n type: EmailTemplateType,\n subject: string,\n content: any,\n isDefault: boolean,\n}\n\nexport type AdminEmailTemplateUpdateOptions = {\n subject?: string,\n content?: any,\n};\nexport function adminEmailTemplateUpdateOptionsToCrud(options: AdminEmailTemplateUpdateOptions): EmailTemplateCrud['Admin']['Update'] {\n return {\n subject: options.subject,\n content: options.content,\n };\n}\n"},{path:"email/index.ts",content:'import type { Json } from "@stackframe/stack-shared/dist/utils/json";\nimport { XOR } from "@stackframe/stack-shared/dist/utils/types";\n\nexport type AdminSentEmail = {\n id: string,\n to: string[],\n subject: string,\n recipient: string, // We\'ll derive this from to[0] for display\n sentAt: Date, // We\'ll derive this from sent_at_millis for display\n error?: unknown,\n}\n\nexport type AdminEmailOutboxRecipient =\n | { type: "user-primary-email", userId: string }\n | { type: "user-custom-emails", userId: string, emails: string[] }\n | { type: "custom-emails", emails: string[] };\n\nexport type AdminEmailOutboxStatus =\n | "paused"\n | "preparing"\n | "rendering"\n | "render-error"\n | "scheduled"\n | "queued"\n | "sending"\n | "server-error"\n | "skipped"\n | "bounced"\n | "delivery-delayed"\n | "sent"\n | "opened"\n | "clicked"\n | "marked-as-spam";\n\nexport type AdminEmailOutboxSimpleStatus =\n | "in-progress"\n | "ok"\n | "error";\n\nexport type AdminEmailOutboxCreatedWith = "draft" | "programmatic-call";\n\n// Error entry from a failed send attempt\nexport type AdminSendAttemptError = {\n attemptNumber: number,\n timestamp: string,\n externalMessage: string,\n externalDetails: Record<string, unknown>,\n internalMessage: string,\n internalDetails: Record<string, unknown>,\n};\n\n// =============================== BASE TYPES ===============================\n\n// Base fields present on all emails\ntype AdminEmailOutboxBase = {\n id: string,\n createdAt: Date,\n updatedAt: Date,\n tsxSource: string,\n themeId: string | null,\n to: AdminEmailOutboxRecipient,\n scheduledAt: Date,\n // Source tracking for grouping emails by template/draft\n createdWith: AdminEmailOutboxCreatedWith,\n emailDraftId: string | null,\n emailProgrammaticCallTemplateId: string | null,\n variables: Record<string, Json>,\n isPaused: false,\n hasRendered: false,\n hasDelivered: false,\n // Retry tracking fields\n sendRetries: number,\n nextSendRetryAt: Date | null,\n sendAttemptErrors: AdminSendAttemptError[] | null,\n};\n\n// Fields available after rendering completes successfully\n// Use Omit to properly override hasRendered from base\ntype AdminEmailOutboxRenderedFields = Omit<AdminEmailOutboxBase, "hasRendered"> & {\n hasRendered: true,\n startedRenderingAt: Date,\n renderedAt: Date,\n subject: string,\n html: string | null,\n text: string | null,\n isTransactional: boolean,\n isHighPriority: boolean,\n notificationCategoryId: string | null,\n};\n\n// Fields available after sending starts\ntype AdminEmailOutboxStartedSendingFields = AdminEmailOutboxRenderedFields & {\n startedSendingAt: Date,\n};\n\n// Fields available after delivery completes\n// Use Omit to properly override hasDelivered from base (inherited through chain)\ntype AdminEmailOutboxFinishedDeliveringFields = Omit<AdminEmailOutboxStartedSendingFields, "hasDelivered"> & {\n hasDelivered: true,\n deliveredAt: Date,\n};\n\n// =============================== STATUS-SPECIFIC TYPES ===============================\n\n// Use Omit to properly override isPaused from base\nexport type AdminEmailOutboxPaused = Omit<AdminEmailOutboxBase, "isPaused"> & {\n status: "paused",\n simpleStatus: "in-progress",\n isPaused: true,\n};\n\nexport type AdminEmailOutboxPreparing = AdminEmailOutboxBase & {\n status: "preparing",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxRendering = AdminEmailOutboxBase & {\n status: "rendering",\n simpleStatus: "in-progress",\n startedRenderingAt: Date,\n};\n\nexport type AdminEmailOutboxRenderError = AdminEmailOutboxBase & {\n status: "render-error",\n simpleStatus: "error",\n startedRenderingAt: Date,\n renderedAt: Date,\n renderError: string,\n};\n\nexport type AdminEmailOutboxScheduled = AdminEmailOutboxRenderedFields & {\n status: "scheduled",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxQueued = AdminEmailOutboxRenderedFields & {\n status: "queued",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxSending = AdminEmailOutboxStartedSendingFields & {\n status: "sending",\n simpleStatus: "in-progress",\n};\n\nexport type AdminEmailOutboxServerError = AdminEmailOutboxStartedSendingFields & {\n status: "server-error",\n simpleStatus: "error",\n errorAt: Date,\n serverError: string,\n};\n\n// SKIPPED can happen at any time, so rendering/sending fields are optional\n// Use Omit to properly override hasRendered from base (can be true or false when skipped)\nexport type AdminEmailOutboxSkipped = Omit<AdminEmailOutboxBase, "hasRendered"> & {\n status: "skipped",\n simpleStatus: "ok",\n hasRendered: boolean,\n skippedAt: Date,\n skippedReason: string,\n skippedDetails: Record<string, unknown>,\n // Optional fields depending on when skipped\n startedRenderingAt?: Date,\n renderedAt?: Date,\n subject?: string,\n html?: string | null,\n text?: string | null,\n isTransactional?: boolean,\n isHighPriority?: boolean,\n notificationCategoryId?: string | null,\n startedSendingAt?: Date,\n};\n\nexport type AdminEmailOutboxBounced = AdminEmailOutboxStartedSendingFields & {\n status: "bounced",\n simpleStatus: "error",\n bouncedAt: Date,\n};\n\nexport type AdminEmailOutboxDeliveryDelayed = AdminEmailOutboxStartedSendingFields & {\n status: "delivery-delayed",\n simpleStatus: "ok",\n deliveryDelayedAt: Date,\n};\n\nexport type AdminEmailOutboxSent = AdminEmailOutboxFinishedDeliveringFields & {\n status: "sent",\n simpleStatus: "ok",\n canHaveDeliveryInfo: boolean,\n};\n\nexport type AdminEmailOutboxOpened = AdminEmailOutboxFinishedDeliveringFields & {\n status: "opened",\n simpleStatus: "ok",\n openedAt: Date,\n canHaveDeliveryInfo: true,\n};\n\nexport type AdminEmailOutboxClicked = AdminEmailOutboxFinishedDeliveringFields & {\n status: "clicked",\n simpleStatus: "ok",\n clickedAt: Date,\n canHaveDeliveryInfo: true,\n};\n\nexport type AdminEmailOutboxMarkedAsSpam = AdminEmailOutboxFinishedDeliveringFields & {\n status: "marked-as-spam",\n simpleStatus: "ok",\n markedAsSpamAt: Date,\n canHaveDeliveryInfo: true,\n};\n\n// =============================== DISCRIMINATED UNION ===============================\n\nexport type AdminEmailOutbox =\n | AdminEmailOutboxPaused\n | AdminEmailOutboxPreparing\n | AdminEmailOutboxRendering\n | AdminEmailOutboxRenderError\n | AdminEmailOutboxScheduled\n | AdminEmailOutboxQueued\n | AdminEmailOutboxSending\n | AdminEmailOutboxServerError\n | AdminEmailOutboxSkipped\n | AdminEmailOutboxBounced\n | AdminEmailOutboxDeliveryDelayed\n | AdminEmailOutboxSent\n | AdminEmailOutboxOpened\n | AdminEmailOutboxClicked\n | AdminEmailOutboxMarkedAsSpam;\n\ntype SendEmailOptionsBase = {\n themeId?: string | null | false,\n subject?: string,\n notificationCategoryName?: string,\n scheduledAt?: Date,\n variables?: Record<string, unknown>,\n}\n\n\nexport type SendEmailOptions = SendEmailOptionsBase\n & XOR<[\n { userIds: string[] },\n { allUsers: true }\n ]>\n & XOR<[\n { html: string },\n { templateId: string },\n { draftId: string }\n ]>\n\nexport type EmailDeliveryWindowStats = {\n sent: number,\n bounced: number,\n marked_as_spam: number,\n};\n\nexport type EmailDeliveryStats = {\n hour: EmailDeliveryWindowStats,\n day: EmailDeliveryWindowStats,\n week: EmailDeliveryWindowStats,\n month: EmailDeliveryWindowStats,\n};\n\nexport type EmailDeliveryCapacity = {\n rate_per_second: number,\n boost_multiplier: number,\n penalty_factor: number,\n is_boost_active: boolean,\n boost_expires_at: string | null,\n};\n\nexport type EmailDeliveryInfo = {\n stats: EmailDeliveryStats,\n capacity: EmailDeliveryCapacity,\n};\n'},{path:"index.ts",content:'export {\n StackAdminApp, StackClientApp,\n StackServerApp\n} from "./apps";\nexport type {\n StackAdminAppConstructor,\n StackAdminAppConstructorOptions,\n StackClientAppConstructor,\n StackClientAppConstructorOptions,\n StackClientAppJson,\n StackServerAppConstructor,\n StackServerAppConstructorOptions\n} from "./apps";\n\nexport type {\n EmailOutboxListOptions,\n EmailOutboxListResult,\n EmailOutboxUpdateOptions\n} from "./apps/interfaces/admin-app";\n\nexport type {\n ProjectConfig\n} from "./project-configs";\n\nexport type {\n InternalApiKey,\n InternalApiKeyBase,\n InternalApiKeyBaseCrudRead,\n InternalApiKeyCreateOptions,\n InternalApiKeyFirstView\n} from "./internal-api-keys";\n\nexport {\n stackAppInternalsSymbol\n} from "./common";\nexport {\n getPagePrompt,\n} from "./url-targets";\nexport type {\n GetCurrentUserOptions,\n /** @deprecated Use GetCurrentUserOptions instead */\n GetCurrentUserOptions as GetUserOptions,\n HandlerUrlOptions,\n HandlerUrls, OAuthScopesOnSignIn, ResolvedHandlerUrls\n} from "./common";\n\nexport type {\n Connection,\n OAuthConnection\n} from "./connected-accounts";\n\nexport type {\n ContactChannel,\n ServerContactChannel\n} from "./contact-channels";\n\nexport type {\n AdminEmailOutbox,\n AdminEmailOutboxRecipient,\n AdminEmailOutboxSimpleStatus,\n AdminEmailOutboxStatus,\n AdminSendAttemptError,\n AdminSentEmail\n} from "./email";\n\nexport type {\n AdminProjectPermission,\n AdminProjectPermissionDefinition,\n AdminProjectPermissionDefinitionCreateOptions,\n AdminProjectPermissionDefinitionUpdateOptions, AdminTeamPermission,\n AdminTeamPermissionDefinition,\n AdminTeamPermissionDefinitionCreateOptions,\n AdminTeamPermissionDefinitionUpdateOptions\n} from "./permissions";\n\nexport type {\n AdminDomainConfig,\n AdminEmailConfig,\n AdminOAuthProviderConfig,\n AdminProjectConfig,\n AdminProjectConfigUpdateOptions,\n OAuthProviderConfig\n} from "./project-configs";\n\nexport type {\n AdminOwnedProject,\n AdminProject,\n AdminProjectCreateOptions,\n AdminProjectUpdateOptions,\n Project,\n PushedConfigSource\n} from "./projects";\n\nexport type {\n EditableTeamMemberProfile, ReceivedTeamInvitation,\n SentTeamInvitation, ServerListUsersOptions,\n ServerTeam,\n ServerTeamCreateOptions, ServerTeamMemberProfile,\n ServerTeamUpdateOptions,\n ServerTeamUser,\n Team,\n TeamCreateOptions,\n TeamInvitation,\n TeamMemberProfile,\n TeamUpdateOptions,\n TeamUser\n} from "./teams";\n\nexport type {\n Auth,\n CurrentInternalServerUser,\n CurrentInternalUser,\n CurrentServerUser,\n CurrentUser,\n OAuthProvider,\n ServerOAuthProvider,\n ServerUser,\n User\n} from "./users";\n\n'},{path:"internal-api-keys/index.ts",content:'\nimport { InternalApiKeyCreateCrudRequest } from "@stackframe/stack-shared/dist/interface/admin-interface";\nimport { InternalApiKeysCrud } from "@stackframe/stack-shared/dist/interface/crud/internal-api-keys";\n\nexport type InternalApiKeyBase = {\n id: string,\n description: string,\n expiresAt: Date,\n manuallyRevokedAt: Date | null,\n createdAt: Date,\n isValid(): boolean,\n whyInvalid(): "expired" | "manually-revoked" | null,\n revoke(): Promise<void>,\n};\n\nexport type InternalApiKeyBaseCrudRead = Pick<InternalApiKeysCrud["Admin"]["Read"], "id" | "created_at_millis" | "description" | "expires_at_millis" | "manually_revoked_at_millis">;\n\nexport type InternalApiKeyFirstView = {\n publishableClientKey?: string,\n secretServerKey?: string,\n superSecretAdminKey?: string,\n} & InternalApiKeyBase;\n\nexport type InternalApiKey = {\n publishableClientKey: null | {\n lastFour: string,\n },\n secretServerKey: null | {\n lastFour: string,\n },\n superSecretAdminKey: null | {\n lastFour: string,\n },\n} & InternalApiKeyBase;\n\nexport type InternalApiKeyCreateOptions = {\n description: string,\n expiresAt: Date,\n hasPublishableClientKey: boolean,\n hasSecretServerKey: boolean,\n hasSuperSecretAdminKey: boolean,\n};\nexport function internalApiKeyCreateOptionsToCrud(options: InternalApiKeyCreateOptions): InternalApiKeyCreateCrudRequest {\n return {\n description: options.description,\n expires_at_millis: options.expiresAt.getTime(),\n has_publishable_client_key: options.hasPublishableClientKey,\n has_secret_server_key: options.hasSecretServerKey,\n has_super_secret_admin_key: options.hasSuperSecretAdminKey,\n };\n}\n'},{path:"notification-categories/index.ts",content:"export type NotificationCategory = {\n id: string,\n name: string,\n enabled: boolean,\n canDisable: boolean,\n\n setEnabled(enabled: boolean): Promise<void>,\n}\n"},{path:"permissions/index.ts",content:'import { ProjectPermissionDefinitionsCrud } from "@stackframe/stack-shared/dist/interface/crud/project-permissions";\nimport { TeamPermissionDefinitionsCrud } from "@stackframe/stack-shared/dist/interface/crud/team-permissions";\n\n\nexport type TeamPermission = {\n id: string,\n};\n\nexport type AdminTeamPermission = TeamPermission;\n\nexport type AdminTeamPermissionDefinition = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n isDefaultUserPermission?: boolean,\n};\n\nexport type AdminTeamPermissionDefinitionCreateOptions = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n isDefaultUserPermission?: boolean,\n};\nexport function adminTeamPermissionDefinitionCreateOptionsToCrud(options: AdminTeamPermissionDefinitionCreateOptions): TeamPermissionDefinitionsCrud["Admin"]["Create"] {\n return {\n id: options.id,\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n\nexport type AdminTeamPermissionDefinitionUpdateOptions = Pick<Partial<AdminTeamPermissionDefinitionCreateOptions>, "description" | "containedPermissionIds">;\nexport function adminTeamPermissionDefinitionUpdateOptionsToCrud(options: AdminTeamPermissionDefinitionUpdateOptions): TeamPermissionDefinitionsCrud["Admin"]["Update"] {\n return {\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n\nexport type ProjectPermission = {\n id: string,\n};\n\nexport type AdminProjectPermission = ProjectPermission;\n\nexport type AdminProjectPermissionDefinition = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n};\n\nexport type AdminProjectPermissionDefinitionCreateOptions = {\n id: string,\n description?: string,\n containedPermissionIds: string[],\n};\nexport function adminProjectPermissionDefinitionCreateOptionsToCrud(options: AdminProjectPermissionDefinitionCreateOptions): ProjectPermissionDefinitionsCrud["Admin"]["Create"] {\n return {\n id: options.id,\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n\nexport type AdminProjectPermissionDefinitionUpdateOptions = Pick<Partial<AdminProjectPermissionDefinitionCreateOptions>, "description" | "containedPermissionIds">;\nexport function adminProjectPermissionDefinitionUpdateOptionsToCrud(options: AdminProjectPermissionDefinitionUpdateOptions): ProjectPermissionDefinitionsCrud["Admin"]["Update"] {\n return {\n description: options.description,\n contained_permission_ids: options.containedPermissionIds,\n };\n}\n'},{path:"project-configs/index.ts",content:"import { AdminTeamPermission } from \"../permissions\";\n\nexport type ProjectConfig = {\n readonly signUpEnabled: boolean,\n readonly credentialEnabled: boolean,\n readonly magicLinkEnabled: boolean,\n readonly passkeyEnabled: boolean,\n readonly clientTeamCreationEnabled: boolean,\n readonly clientUserDeletionEnabled: boolean,\n readonly oauthProviders: OAuthProviderConfig[],\n readonly allowUserApiKeys: boolean,\n readonly allowTeamApiKeys: boolean,\n};\n\nexport type OAuthProviderConfig = {\n readonly id: string,\n};\n\n/**\n * @deprecated This type is deprecated. Use the new config override setup instead.\n */\nexport type AdminProjectConfig = {\n readonly signUpEnabled: boolean,\n readonly credentialEnabled: boolean,\n readonly magicLinkEnabled: boolean,\n readonly passkeyEnabled: boolean,\n readonly clientTeamCreationEnabled: boolean,\n readonly clientUserDeletionEnabled: boolean,\n readonly allowLocalhost: boolean,\n readonly oauthProviders: AdminOAuthProviderConfig[],\n readonly emailConfig?: AdminEmailConfig,\n readonly emailTheme: string,\n readonly domains: AdminDomainConfig[],\n readonly createTeamOnSignUp: boolean,\n readonly teamCreatorDefaultPermissions: AdminTeamPermission[],\n readonly teamMemberDefaultPermissions: AdminTeamPermission[],\n readonly userDefaultPermissions: AdminTeamPermission[],\n readonly oauthAccountMergeStrategy: 'link_method' | 'raise_error' | 'allow_duplicates',\n readonly allowUserApiKeys: boolean,\n readonly allowTeamApiKeys: boolean,\n};\n\nexport type AdminEmailConfig = (\n {\n type: \"standard\" | \"resend\",\n senderName: string,\n senderEmail: string,\n host: string,\n port: number,\n username: string,\n password: string,\n }\n | {\n type: \"shared\",\n }\n);\n\nexport type AdminDomainConfig = {\n domain: string,\n handlerPath: string,\n};\n\nexport type AdminOAuthProviderConfig = {\n id: string,\n} & (\n | { type: 'shared' }\n | {\n type: 'standard',\n clientId: string,\n clientSecret: string,\n facebookConfigId?: string,\n microsoftTenantId?: string,\n appleBundleIds?: string[],\n }\n ) & OAuthProviderConfig;\n\nexport type AdminProjectConfigUpdateOptions = {\n domains?: {\n domain: string,\n handlerPath: string,\n }[],\n oauthProviders?: AdminOAuthProviderConfig[],\n signUpEnabled?: boolean,\n credentialEnabled?: boolean,\n magicLinkEnabled?: boolean,\n passkeyEnabled?: boolean,\n clientTeamCreationEnabled?: boolean,\n clientUserDeletionEnabled?: boolean,\n allowLocalhost?: boolean,\n createTeamOnSignUp?: boolean,\n emailConfig?: AdminEmailConfig,\n emailTheme?: string,\n teamCreatorDefaultPermissions?: { id: string }[],\n teamMemberDefaultPermissions?: { id: string }[],\n userDefaultPermissions?: { id: string }[],\n oauthAccountMergeStrategy?: 'link_method' | 'raise_error' | 'allow_duplicates',\n allowUserApiKeys?: boolean,\n allowTeamApiKeys?: boolean,\n};\n"},{path:"projects/index.ts",content:'import { ProductionModeError } from "@stackframe/stack-shared/dist/helpers/production-mode";\nimport { AdminUserProjectsCrud, ProjectsCrud } from "@stackframe/stack-shared/dist/interface/crud/projects";\nimport { ProjectOnboardingStatus } from "@stackframe/stack-shared/dist/schema-fields";\n\nimport { CompleteConfig, EnvironmentConfigNormalizedOverride, EnvironmentConfigOverrideOverride } from "@stackframe/stack-shared/dist/config/schema";\nimport { StackAdminApp } from "../apps/interfaces/admin-app";\nimport { AdminProjectConfig, AdminProjectConfigUpdateOptions, ProjectConfig } from "../project-configs";\n\n/**\n * SDK type for pushed config source (camelCase for SDK).\n * Represents where the branch config was pushed from.\n */\nexport type PushedConfigSource =\n | { type: "pushed-from-github", owner: string, repo: string, branch: string, commitHash: string, configFilePath: string, workflowPath?: string }\n | { type: "pushed-from-unknown" }\n | { type: "unlinked" };\n\nexport type PushConfigOptions = {\n /**\n * The source of this config push.\n */\n source: PushedConfigSource,\n};\n\n\nexport type Project = {\n readonly id: string,\n readonly displayName: string,\n readonly config: ProjectConfig,\n};\n\nexport type AdminProject = {\n readonly id: string,\n readonly displayName: string,\n readonly description: string | null,\n readonly createdAt: Date,\n readonly isProductionMode: boolean,\n readonly isDevelopmentEnvironment: boolean,\n readonly ownerTeamId: string | null,\n readonly onboardingStatus: ProjectOnboardingStatus,\n readonly logoUrl: string | null | undefined,\n readonly logoFullUrl: string | null | undefined,\n readonly logoDarkModeUrl: string | null | undefined,\n readonly logoFullDarkModeUrl: string | null | undefined,\n\n readonly config: AdminProjectConfig,\n\n update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>,\n delete(this: AdminProject): Promise<void>,\n\n getConfig(this: AdminProject): Promise<CompleteConfig>,\n // NEXT_LINE_PLATFORM react-like\n useConfig(this: AdminProject): CompleteConfig,\n\n /**\n * Updates the environment\'s config by merging the provided config into the existing config.\n *\n * Changes made with `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`. This is best for environment-specific\n * configuration like secrets, API keys, and other values that you wouldn\'t push into a source repository.\n */\n // We have some strict types here in order to prevent accidental overwriting of a top-level property of a config object\n updateConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n ): Promise<void>,\n\n /**\n * Pushes a config, replacing any previous config pushed with `pushConfig`.\n *\n * **Note:** This function does **not** replace any changes made with `updateConfig`. Changes made with\n * `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`.\n *\n * This is useful for programmatically deploying configuration. More often than not, you\'ll want to use\n * `updateConfig` instead.\n */\n pushConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n options: PushConfigOptions,\n ): Promise<void>,\n\n /**\n * Updates the pushed config by merging the provided config into the existing pushed config.\n *\n * **Warning:** This is almost always **not** the function you want to call. Changes made with\n * `updatePushedConfig` will be replaced entirely the next time `pushConfig` is called. Consider using\n * `pushConfig` to set the full pushed config, or `updateConfig` for environment-specific values that\n * should persist across pushes.\n *\n * This function is useful for making temporary modifications to the pushed config before the next push.\n */\n updatePushedConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride\n ): Promise<void>,\n\n /**\n * Gets the source metadata for the pushed config, indicating where it was pushed from.\n *\n * The source can be:\n * - `pushed-from-github`: Config was pushed from a GitHub repository\n * - `pushed-from-unknown`: Config was pushed via CLI but source details unknown\n * - `unlinked`: Config can be edited directly on the dashboard\n */\n getPushedConfigSource(this: AdminProject): Promise<PushedConfigSource>,\n\n /**\n * Unlinks the pushed config source, setting it to "unlinked".\n * This allows the config to be edited directly on the dashboard without external push restrictions.\n */\n unlinkPushedConfigSource(this: AdminProject): Promise<void>,\n\n /**\n * Resets (removes) specific keys from the config override at the specified level.\n * Uses the same nested key logic as the override algorithm: resetting key "a.b" also resets "a.b.c".\n *\n * This is useful when updating the pushed config (branch level) and wanting to remove the same keys\n * from the environment config override so that the branch config values take precedence.\n */\n resetConfigOverrideKeys(this: AdminProject, level: "branch" | "environment", keys: string[]): Promise<void>,\n\n /**\n * Gets the raw config override at the specified level (before merging/defaults).\n * Useful for inspecting exactly what\'s been set at each level.\n */\n getConfigOverride(this: AdminProject, level: "branch" | "environment"): Promise<Record<string, unknown>>,\n\n /**\n * Replaces the entire config override at the specified level.\n * For branch level, preserves the existing source metadata.\n */\n replaceConfigOverride(this: AdminProject, level: "branch" | "environment", config: Record<string, unknown>): Promise<void>,\n\n getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>,\n // NEXT_LINE_PLATFORM react-like\n useProductionModeErrors(this: AdminProject): ProductionModeError[],\n} & Project;\n\nexport type AdminOwnedProject = {\n readonly app: StackAdminApp<false>,\n} & AdminProject;\n\nexport type AdminProjectUpdateOptions = {\n displayName?: string,\n description?: string,\n isProductionMode?: boolean,\n onboardingStatus?: ProjectOnboardingStatus,\n /**\n * Updates `project.requirePublishableClientKey` in the project-level config override.\n */\n requirePublishableClientKey?: boolean,\n logoUrl?: string | null,\n logoFullUrl?: string | null,\n logoDarkModeUrl?: string | null,\n logoFullDarkModeUrl?: string | null,\n config?: AdminProjectConfigUpdateOptions,\n};\nexport function adminProjectUpdateOptionsToCrud(options: AdminProjectUpdateOptions): ProjectsCrud["Admin"]["Update"] {\n return {\n display_name: options.displayName,\n description: options.description,\n is_production_mode: options.isProductionMode,\n onboarding_status: options.onboardingStatus,\n logo_url: options.logoUrl,\n logo_full_url: options.logoFullUrl,\n logo_dark_mode_url: options.logoDarkModeUrl,\n logo_full_dark_mode_url: options.logoFullDarkModeUrl,\n /**\n * NOTE: Do not update this config anymore. It\'s been superseded by the new config in schema.ts.\n * @deprecated\n */\n config: {\n domains: options.config?.domains?.map((d) => ({\n domain: d.domain,\n handler_path: d.handlerPath\n })),\n oauth_providers: options.config?.oauthProviders?.map((p) => ({\n id: p.id as any,\n type: p.type,\n ...(p.type === \'standard\' && {\n client_id: p.clientId,\n client_secret: p.clientSecret,\n facebook_config_id: p.facebookConfigId,\n microsoft_tenant_id: p.microsoftTenantId,\n apple_bundle_ids: p.appleBundleIds,\n }),\n })),\n email_config: options.config?.emailConfig && (\n options.config.emailConfig.type === \'shared\' ? {\n type: \'shared\',\n } : {\n type: \'standard\',\n host: options.config.emailConfig.host,\n port: options.config.emailConfig.port,\n username: options.config.emailConfig.username,\n password: options.config.emailConfig.password,\n sender_name: options.config.emailConfig.senderName,\n sender_email: options.config.emailConfig.senderEmail,\n }\n ),\n email_theme: options.config?.emailTheme,\n sign_up_enabled: options.config?.signUpEnabled,\n credential_enabled: options.config?.credentialEnabled,\n magic_link_enabled: options.config?.magicLinkEnabled,\n passkey_enabled: options.config?.passkeyEnabled,\n allow_localhost: options.config?.allowLocalhost,\n create_team_on_sign_up: options.config?.createTeamOnSignUp,\n client_team_creation_enabled: options.config?.clientTeamCreationEnabled,\n client_user_deletion_enabled: options.config?.clientUserDeletionEnabled,\n team_creator_default_permissions: options.config?.teamCreatorDefaultPermissions,\n team_member_default_permissions: options.config?.teamMemberDefaultPermissions,\n user_default_permissions: options.config?.userDefaultPermissions,\n oauth_account_merge_strategy: options.config?.oauthAccountMergeStrategy,\n allow_user_api_keys: options.config?.allowUserApiKeys,\n allow_team_api_keys: options.config?.allowTeamApiKeys,\n },\n };\n}\n\nexport type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, \'displayName\'> & {\n displayName: string,\n teamId: string,\n isDevelopmentEnvironment?: boolean,\n};\nexport function adminProjectCreateOptionsToCrud(options: AdminProjectCreateOptions): AdminUserProjectsCrud["Server"]["Create"] {\n return {\n ...adminProjectUpdateOptionsToCrud(options),\n display_name: options.displayName,\n is_development_environment: options.isDevelopmentEnvironment,\n owner_team_id: options.teamId,\n };\n}\n'},{path:"session-replays/index.ts",content:"export type AdminSessionReplay = {\n id: string,\n projectUser: {\n id: string,\n displayName: string | null,\n primaryEmail: string | null,\n },\n startedAt: Date,\n lastEventAt: Date,\n chunkCount: number,\n eventCount: number,\n};\n\nexport type AdminSessionReplayChunk = {\n id: string,\n batchId: string,\n sessionReplaySegmentId: string | null,\n browserSessionId: string | null,\n eventCount: number,\n byteLength: number,\n firstEventAt: Date,\n lastEventAt: Date,\n createdAt: Date,\n};\n\nexport type ListSessionReplaysOptions = {\n limit?: number,\n cursor?: string,\n userIds?: string[],\n teamIds?: string[],\n durationMsMin?: number,\n durationMsMax?: number,\n lastEventAtFromMillis?: number,\n lastEventAtToMillis?: number,\n clickCountMin?: number,\n};\n\nexport type ListSessionReplaysResult = {\n items: AdminSessionReplay[],\n nextCursor: string | null,\n};\n\nexport type ListSessionReplayChunksOptions = {\n limit?: number,\n cursor?: string,\n};\n\nexport type ListSessionReplayChunksResult = {\n items: AdminSessionReplayChunk[],\n nextCursor: string | null,\n};\n\nexport type SessionReplayAllEventsResult = {\n chunks: Array<{\n id: string,\n batchId: string,\n sessionReplaySegmentId: string | null,\n eventCount: number,\n byteLength: number,\n firstEventAt: Date,\n lastEventAt: Date,\n createdAt: Date,\n }>,\n chunkEvents: Array<{\n chunkId: string,\n events: unknown[],\n }>,\n};\n"},{path:"teams/index.ts",content:'import { TeamsCrud } from "@stackframe/stack-shared/dist/interface/crud/teams";\nimport { ReadonlyJson } from "@stackframe/stack-shared/dist/utils/json";\n\nimport { ApiKeyCreationOptions, TeamApiKey, TeamApiKeyFirstView } from "../api-keys";\nimport { AsyncStoreProperty } from "../common";\nimport { Customer } from "../customers";\nimport { ServerUser } from "../users";\n\n\nexport type TeamMemberProfile = {\n displayName: string | null,\n profileImageUrl: string | null,\n}\n\nexport type TeamMemberProfileUpdateOptions = {\n displayName?: string,\n profileImageUrl?: string | null,\n};\n\nexport type EditableTeamMemberProfile = TeamMemberProfile & {\n update(update: TeamMemberProfileUpdateOptions): Promise<void>,\n}\n\nexport type TeamUser = {\n id: string,\n teamProfile: TeamMemberProfile,\n}\n\n/**\n * A team invitation as seen from the team\'s perspective (ie. the sender).\n *\n * Returned by `team.listInvitations()`. Contains the recipient email and allows\n * revoking the invitation.\n */\nexport type SentTeamInvitation = {\n id: string,\n recipientEmail: string | null,\n expiresAt: Date,\n revoke(): Promise<void>,\n}\n\n/**\n * @deprecated Use `SentTeamInvitation` instead.\n */\nexport type TeamInvitation = SentTeamInvitation;\n\n/**\n * A team invitation as seen from the invited user\'s perspective (ie. the receiver).\n *\n * Returned by `user.listTeamInvitations()`. Contains information about teams that have\n * sent invitations to any of the user\'s verified email addresses, and allows accepting\n * the invitation to join the team.\n */\nexport type ReceivedTeamInvitation = {\n id: string,\n teamId: string,\n teamDisplayName: string,\n recipientEmail: string,\n expiresAt: Date,\n\n /**\n * Accepts the invitation, adding the current user to the team.\n *\n * The user must have a verified email address matching the invitation\'s recipient email.\n */\n accept(): Promise<void>,\n}\n\nexport type Team = {\n id: string,\n displayName: string,\n profileImageUrl: string | null,\n clientMetadata: any,\n clientReadOnlyMetadata: any,\n inviteUser(options: { email: string, callbackUrl?: string }): Promise<void>,\n listUsers(): Promise<TeamUser[]>,\n useUsers(): TeamUser[], // THIS_LINE_PLATFORM react-like\n listInvitations(): Promise<SentTeamInvitation[]>,\n useInvitations(): SentTeamInvitation[], // THIS_LINE_PLATFORM react-like\n update(update: TeamUpdateOptions): Promise<void>,\n delete(): Promise<void>,\n createApiKey(options: ApiKeyCreationOptions<"team">): Promise<TeamApiKeyFirstView>,\n} & AsyncStoreProperty<"apiKeys", [], TeamApiKey[], true> & Customer;\n\nexport type TeamUpdateOptions = {\n displayName?: string,\n profileImageUrl?: string | null,\n clientMetadata?: ReadonlyJson,\n};\nexport function teamUpdateOptionsToCrud(options: TeamUpdateOptions): TeamsCrud["Client"]["Update"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n client_metadata: options.clientMetadata,\n };\n}\n\nexport type TeamCreateOptions = {\n displayName: string,\n profileImageUrl?: string,\n}\nexport function teamCreateOptionsToCrud(options: TeamCreateOptions, creatorUserId: string): TeamsCrud["Client"]["Create"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n creator_user_id: creatorUserId,\n };\n}\n\n\nexport type ServerTeamMemberProfile = TeamMemberProfile;\n\nexport type ServerTeamUser = ServerUser & {\n teamProfile: ServerTeamMemberProfile,\n}\n\nexport type ServerTeam = {\n createdAt: Date,\n serverMetadata: any,\n listUsers(): Promise<ServerTeamUser[]>,\n useUsers(): ServerUser[], // THIS_LINE_PLATFORM react-like\n update(update: ServerTeamUpdateOptions): Promise<void>,\n delete(): Promise<void>,\n addUser(userId: string): Promise<void>,\n inviteUser(options: { email: string, callbackUrl?: string }): Promise<void>,\n removeUser(userId: string): Promise<void>,\n} & Team;\n\ntype ServerListUsersOptionsBase = {\n cursor?: string,\n limit?: number,\n orderBy?: \'signedUpAt\' | \'lastActiveAt\',\n desc?: boolean,\n /**\n * Free-text search. Matches user ID (exact UUID), display name, and contact channels (e.g. primary email).\n */\n query?: string,\n /**\n * Only return users who are members of the given team.\n */\n teamId?: string,\n /**\n * Whether to include restricted users (users who haven\'t completed onboarding requirements).\n * Defaults to false.\n */\n includeRestricted?: boolean,\n /**\n * Whether to include anonymous users (and restricted users).\n * Defaults to false.\n */\n includeAnonymous?: boolean,\n};\n\nexport type ServerListUsersOptions = ServerListUsersOptionsBase & (\n {\n onlyAnonymous?: false,\n } | {\n /**\n * Whether to return only anonymous users.\n * Requires includeAnonymous=true.\n * Defaults to false.\n */\n onlyAnonymous: true,\n includeAnonymous: true,\n }\n);\n\nexport type ServerListTeamsOptions = {\n orderBy?: \'createdAt\',\n desc?: boolean,\n cursor?: string,\n limit?: number,\n /**\n * Free-text search. Matches team ID (exact UUID) and display name.\n */\n query?: string,\n};\n\nexport type ServerTeamCreateOptions = TeamCreateOptions & {\n creatorUserId?: string,\n};\nexport function serverTeamCreateOptionsToCrud(options: ServerTeamCreateOptions): TeamsCrud["Server"]["Create"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n creator_user_id: options.creatorUserId,\n };\n}\n\nexport type ServerTeamUpdateOptions = TeamUpdateOptions & {\n clientReadOnlyMetadata?: ReadonlyJson,\n serverMetadata?: ReadonlyJson,\n};\nexport function serverTeamUpdateOptionsToCrud(options: ServerTeamUpdateOptions): TeamsCrud["Server"]["Update"] {\n return {\n display_name: options.displayName,\n profile_image_url: options.profileImageUrl,\n client_metadata: options.clientMetadata,\n client_read_only_metadata: options.clientReadOnlyMetadata,\n server_metadata: options.serverMetadata,\n };\n}\n'},{path:"url-targets.test.ts",content:'import { afterEach, describe, expect, it, vi } from "vitest";\nimport { buildCliAuthConfirmUrl, getPagePrompt, isLocalHandlerUrlTarget, resolveHandlerUrls, resolveUnknownHandlerPathFallbackUrl } from "./url-targets";\n\ndescribe("handler URL targets", () => {\n afterEach(() => {\n vi.unstubAllEnvs();\n });\n\n it("treats handler-component targets the same as omitted values", () => {\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: "/custom-handler",\n signIn: { type: "handler-component" },\n },\n });\n\n expect(urls.signIn).toBe("/custom-handler/sign-in");\n });\n\n it("treats custom v0 page targets like legacy string targets", () => {\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: "/custom-handler",\n signIn: { type: "handler-component" },\n signUp: { type: "custom", url: "/sign-up-explicit", version: 0 },\n },\n });\n\n expect(urls.signIn).toBe("/custom-handler/sign-in");\n expect(urls.signUp).toBe("/sign-up-explicit");\n });\n\n it("throws on v0 custom target for handler page", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: { type: "custom", url: "/custom-handler", version: 0 },\n },\n })).toThrowError(/cannot be a custom page/);\n });\n\n it("supports the latest documented custom target version", () => {\n const signInPrompt = getPagePrompt("signIn");\n if (signInPrompt == null) {\n throw new Error("Expected signIn prompt metadata to exist");\n }\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n signIn: { type: "custom", url: "/custom-sign-in", version: signInPrompt.latestVersion },\n },\n });\n\n expect(urls.signIn).toBe("/custom-sign-in");\n });\n\n it("throws on custom target versions newer than the latest supported version", () => {\n const signInPrompt = getPagePrompt("signIn");\n if (signInPrompt == null) {\n throw new Error("Expected signIn prompt metadata to exist");\n }\n\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n signIn: { type: "custom", url: "/custom-sign-in", version: signInPrompt.latestVersion + 1 },\n },\n })).toThrowError(/Unsupported custom page version/);\n });\n\n it("throws on non-zero custom version for handler page", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n handler: { type: "custom", url: "/custom-handler", version: 1 },\n },\n })).toThrowError(/cannot be a custom page/);\n });\n\n it("uses hosted defaults for unspecified URLs", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n signUp: "/sign-up",\n default: { type: "hosted" },\n },\n });\n\n expect(urls.signUp).toBe("/sign-up");\n expect(urls.signIn).toBe("https://project-id.example-stack-hosted.test/handler/sign-in");\n expect(urls.cliAuthConfirm).toBe("https://project-id.example-stack-hosted.test/handler/cli-auth-confirm");\n });\n\n it("rejects absolute OAuth callback string targets", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n oauthCallback: "https://app.example.test/oauth-callback",\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [StackAssertionError: OAuth callback URLs must be relative.\n\n This is likely an error in Stack. Please make sure you are running the newest version and report it.]\n `);\n });\n\n it("rejects absolute OAuth callback custom targets", () => {\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n oauthCallback: { type: "custom", url: "https://app.example.test/oauth-callback", version: 0 },\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [StackAssertionError: OAuth callback URLs must be relative.\n\n This is likely an error in Stack. Please make sure you are running the newest version and report it.]\n `);\n });\n\n it("inherits a hosted default target for the OAuth callback", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n });\n\n expect(urls.signIn).toBe("https://project-id.example-stack-hosted.test/handler/sign-in");\n expect(urls.oauthCallback).toBe("https://project-id.example-stack-hosted.test/handler/oauth-callback");\n });\n\n it("supports custom CLI auth confirmation targets", () => {\n const cliAuthConfirmPrompt = getPagePrompt("cliAuthConfirm");\n if (cliAuthConfirmPrompt == null) {\n throw new Error("Expected cliAuthConfirm prompt metadata to exist");\n }\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n cliAuthConfirm: { type: "custom", url: "/cli/authorize", version: cliAuthConfirmPrompt.latestVersion },\n },\n });\n\n expect(urls.cliAuthConfirm).toBe("/cli/authorize");\n });\n\n it("builds CLI auth login URLs from the resolved confirmation target", () => {\n expect(buildCliAuthConfirmUrl({\n cliAuthConfirmUrl: "/cli/authorize",\n appUrl: "https://app.example.test/base",\n loginCode: "login-code",\n })).toBe("https://app.example.test/cli/authorize?login_code=login-code");\n });\n\n it("uses default target for unknown /handler/* pages", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX", ".example-stack-hosted.test");\n\n const url = resolveUnknownHandlerPathFallbackUrl({\n defaultTarget: { type: "hosted" },\n projectId: "project-id",\n unknownPath: "custom-page",\n });\n\n expect(url).toBe("https://project-id.example-stack-hosted.test/handler/custom-page");\n });\n\n it("uses the full hosted handler URL template when configured", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://{projectId}.localhost:${NEXT_PUBLIC_STACK_PORT_PREFIX:-81}09/{hostedPath}");\n vi.stubEnv("NEXT_PUBLIC_STACK_PORT_PREFIX", "93");\n\n const urls = resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n });\n\n expect(urls.signIn).toBe("http://project-id.localhost:9309/handler/sign-in");\n expect(urls.accountSettings).toBe("http://project-id.localhost:9309/handler/account-settings");\n });\n\n it("validates the hosted handler URL template placeholders", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://localhost:9309/{projectId}/handler");\n\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n })).toThrowError(/\\{projectId\\} and \\{hostedPath\\}/);\n });\n\n it("rejects hosted handler URL templates that put the project ID in the path", () => {\n vi.stubEnv("NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE", "http://localhost:9309/{projectId}/{hostedPath}");\n\n expect(() => resolveHandlerUrls({\n projectId: "project-id",\n urls: {\n default: { type: "hosted" },\n },\n })).toThrowErrorMatchingInlineSnapshot(`\n [StackAssertionError: The hosted handler URL template must put {projectId} in the hostname.\n\n This is likely an error in Stack. Please make sure you are running the newest version and report it.]\n `);\n });\n});\n\ndescribe("isLocalHandlerUrlTarget", () => {\n it("treats relative handler URLs as local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "/handler/sign-in",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(true);\n });\n\n it("treats same-origin absolute handler URLs as local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "http://p91.localhost:9101/handler/sign-in",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(true);\n });\n\n it("treats cross-origin absolute handler URLs as non-local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "https://project-id.built-with-stack-auth.com/handler/sign-in",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(false);\n });\n\n it("treats non-handler paths as non-local targets", () => {\n expect(isLocalHandlerUrlTarget({\n targetUrl: "/projects",\n handlerPath: "/handler",\n currentOrigin: "http://p91.localhost:9101",\n })).toBe(false);\n });\n});\n'},{path:"url-targets.ts",content:'import { getCustomPagePrompts, type CustomPagePrompt } from "@stackframe/stack-shared/dist/interface/handler-urls";\nimport { StackAssertionError } from "@stackframe/stack-shared/dist/utils/errors";\nimport { getHostedHandlerUrlFromConfig } from "@stackframe/stack-shared/dist/utils/redirect-urls";\nimport { envVars } from "../env";\nimport { DefaultHandlerUrlTarget, HandlerPageUrls, HandlerUrlOptions, HandlerUrlTarget, HandlerUrls, ResolvedHandlerUrls } from "./common";\n\nconst localUrlPlaceholderOrigin = "http://example.com";\nconst schemePrefixRegex = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\n\nconst customPagePrompts: Record<keyof Omit<HandlerPageUrls, "handler">, CustomPagePrompt> = getCustomPagePrompts();\n\nconst joinHandlerComponentPath = (basePath: string, pagePath: string): string => {\n const normalizedBasePath = basePath.endsWith("/") && basePath.length > 1\n ? basePath.slice(0, -1)\n : basePath;\n if (pagePath.length === 0) {\n return normalizedBasePath;\n }\n if (normalizedBasePath === "/") {\n return `/${pagePath}`;\n }\n return `${normalizedBasePath}/${pagePath}`;\n};\n\nconst getHostedPagePathForHandlerName = (handlerName: keyof HandlerUrls): string => {\n switch (handlerName) {\n case "handler": {\n return "";\n }\n case "home": {\n return "";\n }\n case "afterSignIn": {\n return "";\n }\n case "afterSignUp": {\n return "";\n }\n case "afterSignOut": {\n return "";\n }\n case "signIn": {\n return "sign-in";\n }\n case "signUp": {\n return "sign-up";\n }\n case "signOut": {\n return "sign-out";\n }\n case "emailVerification": {\n return "email-verification";\n }\n case "passwordReset": {\n return "password-reset";\n }\n case "forgotPassword": {\n return "forgot-password";\n }\n case "oauthCallback": {\n return "oauth-callback";\n }\n case "magicLinkCallback": {\n return "magic-link-callback";\n }\n case "accountSettings": {\n return "account-settings";\n }\n case "teamInvitation": {\n return "team-invitation";\n }\n case "cliAuthConfirm": {\n return "cli-auth-confirm";\n }\n case "mfa": {\n return "mfa";\n }\n case "error": {\n return "error";\n }\n case "onboarding": {\n return "onboarding";\n }\n }\n};\n\nconst resolveCustomTargetUrl = (options: {\n target: { type: "custom", url: string, version: number },\n handlerName: keyof HandlerUrls,\n}): string => {\n const handlerName = options.handlerName;\n if (handlerName in customPagePrompts) {\n const customPagePrompt = customPagePrompts[handlerName as keyof typeof customPagePrompts];\n if (options.target.version === 0 || options.target.version in customPagePrompt.versions) {\n return options.target.url;\n }\n\n throw new Error(`Unsupported custom page version ${options.target.version} for ${options.handlerName} page at ${options.target.url}. The latest supported version of this page is ${Math.max(0, ...Object.keys(customPagePrompt.versions).map(Number))}. Please upgrade your Stack Auth SDK to a version that supports this version.`);\n } else {\n throw new Error(`URL target ${options.handlerName} cannot be a custom page. Please specify the URL as a string instead.`);\n }\n};\n\nexport const getHostedHandlerUrl = (options: { projectId: string, pagePath: string }): string => {\n const normalizedPagePath = options.pagePath.replace(/^\\/+/, "");\n const hostedPath = normalizedPagePath.length > 0 ? `handler/${normalizedPagePath}` : "handler";\n return getHostedHandlerUrlFromConfig({\n projectId: options.projectId,\n hostedPath,\n hostedHandlerDomainSuffix: envVars.NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX,\n hostedHandlerUrlTemplate: envVars.NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE,\n stackPortPrefix: envVars.NEXT_PUBLIC_STACK_PORT_PREFIX,\n });\n};\n\nconst isRelativeUrlString = (url: string): boolean => {\n if (url.startsWith("//")) {\n return false;\n }\n return !schemePrefixRegex.test(url);\n};\n\nexport const isLocalHandlerUrlTarget = (options: {\n targetUrl: string,\n handlerPath: string,\n currentOrigin?: string,\n}): boolean => {\n const urlObject = new URL(options.targetUrl, localUrlPlaceholderOrigin);\n const isHandlerPathTarget = urlObject.pathname === options.handlerPath\n || urlObject.pathname.startsWith(`${options.handlerPath}/`);\n if (!isHandlerPathTarget) {\n return false;\n }\n\n // On server we only have path information, so treat matching handler paths as local.\n if (options.currentOrigin == null) {\n return true;\n }\n\n return isRelativeUrlString(options.targetUrl) || urlObject.origin === options.currentOrigin;\n};\n\nconst resolveUrlTarget = (options: {\n target: HandlerUrlTarget,\n fallbackPath: string,\n handlerName: keyof HandlerUrls,\n projectId: string,\n}): string => {\n if (typeof options.target === "string") {\n return options.target;\n }\n\n switch (options.target.type) {\n case "handler-component": {\n return options.fallbackPath;\n }\n case "hosted": {\n return getHostedHandlerUrl({\n projectId: options.projectId,\n pagePath: getHostedPagePathForHandlerName(options.handlerName),\n });\n }\n case "custom": {\n return resolveCustomTargetUrl({\n target: options.target,\n handlerName: options.handlerName,\n });\n }\n }\n};\n\nconst assertOAuthCallbackTargetIsRelative = (target: HandlerUrlTarget): void => {\n const url = typeof target === "string"\n ? target\n : target.type === "custom"\n ? target.url\n : null;\n if (url != null && !isRelativeUrlString(url)) {\n throw new StackAssertionError("OAuth callback URLs must be relative.", {\n oauthCallbackUrl: url,\n hint: "Use a relative URL like \'/handler/oauth-callback\', or use { type: \'hosted\' } to let Stack use the current page for hosted callbacks.",\n });\n }\n};\n\nexport const resolveHandlerUrls = (options: { urls: HandlerUrlOptions | undefined, projectId: string }): ResolvedHandlerUrls => {\n const configuredUrls = options.urls;\n const defaultTarget = configuredUrls?.default ?? { type: "handler-component" } as const;\n const oauthCallbackTarget: HandlerUrlTarget = configuredUrls?.oauthCallback ?? (\n defaultTarget.type === "hosted"\n ? defaultTarget\n : { type: "handler-component" }\n );\n assertOAuthCallbackTargetIsRelative(oauthCallbackTarget);\n let handlerComponentBasePath = "/handler";\n if (typeof configuredUrls?.handler === "string") {\n handlerComponentBasePath = configuredUrls.handler;\n } else if (configuredUrls?.handler != null && configuredUrls.handler.type === "custom") {\n handlerComponentBasePath = resolveCustomTargetUrl({\n target: configuredUrls.handler,\n handlerName: "handler",\n });\n }\n\n const home = resolveUrlTarget({\n target: configuredUrls?.home ?? defaultTarget,\n fallbackPath: "/",\n handlerName: "home",\n projectId: options.projectId,\n });\n const afterSignIn = resolveUrlTarget({\n target: configuredUrls?.afterSignIn ?? defaultTarget,\n fallbackPath: home,\n handlerName: "afterSignIn",\n projectId: options.projectId,\n });\n\n return {\n handler: resolveUrlTarget({\n target: configuredUrls?.handler ?? defaultTarget,\n fallbackPath: handlerComponentBasePath,\n handlerName: "handler",\n projectId: options.projectId,\n }),\n signIn: resolveUrlTarget({\n target: configuredUrls?.signIn ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "sign-in"),\n handlerName: "signIn",\n projectId: options.projectId,\n }),\n signUp: resolveUrlTarget({\n target: configuredUrls?.signUp ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "sign-up"),\n handlerName: "signUp",\n projectId: options.projectId,\n }),\n afterSignIn,\n afterSignUp: resolveUrlTarget({\n target: configuredUrls?.afterSignUp ?? defaultTarget,\n fallbackPath: afterSignIn,\n handlerName: "afterSignUp",\n projectId: options.projectId,\n }),\n signOut: resolveUrlTarget({\n target: configuredUrls?.signOut ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "sign-out"),\n handlerName: "signOut",\n projectId: options.projectId,\n }),\n afterSignOut: resolveUrlTarget({\n target: configuredUrls?.afterSignOut ?? defaultTarget,\n fallbackPath: home,\n handlerName: "afterSignOut",\n projectId: options.projectId,\n }),\n emailVerification: resolveUrlTarget({\n target: configuredUrls?.emailVerification ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "email-verification"),\n handlerName: "emailVerification",\n projectId: options.projectId,\n }),\n passwordReset: resolveUrlTarget({\n target: configuredUrls?.passwordReset ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "password-reset"),\n handlerName: "passwordReset",\n projectId: options.projectId,\n }),\n forgotPassword: resolveUrlTarget({\n target: configuredUrls?.forgotPassword ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "forgot-password"),\n handlerName: "forgotPassword",\n projectId: options.projectId,\n }),\n home,\n oauthCallback: resolveUrlTarget({\n target: oauthCallbackTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "oauth-callback"),\n handlerName: "oauthCallback",\n projectId: options.projectId,\n }),\n magicLinkCallback: resolveUrlTarget({\n target: configuredUrls?.magicLinkCallback ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "magic-link-callback"),\n handlerName: "magicLinkCallback",\n projectId: options.projectId,\n }),\n accountSettings: resolveUrlTarget({\n target: configuredUrls?.accountSettings ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "account-settings"),\n handlerName: "accountSettings",\n projectId: options.projectId,\n }),\n teamInvitation: resolveUrlTarget({\n target: configuredUrls?.teamInvitation ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "team-invitation"),\n handlerName: "teamInvitation",\n projectId: options.projectId,\n }),\n cliAuthConfirm: resolveUrlTarget({\n target: configuredUrls?.cliAuthConfirm ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "cli-auth-confirm"),\n handlerName: "cliAuthConfirm",\n projectId: options.projectId,\n }),\n mfa: resolveUrlTarget({\n target: configuredUrls?.mfa ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "mfa"),\n handlerName: "mfa",\n projectId: options.projectId,\n }),\n error: resolveUrlTarget({\n target: configuredUrls?.error ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "error"),\n handlerName: "error",\n projectId: options.projectId,\n }),\n onboarding: resolveUrlTarget({\n target: configuredUrls?.onboarding ?? defaultTarget,\n fallbackPath: joinHandlerComponentPath(handlerComponentBasePath, "onboarding"),\n handlerName: "onboarding",\n projectId: options.projectId,\n }),\n };\n};\n\nexport const buildCliAuthConfirmUrl = (options: {\n cliAuthConfirmUrl: string,\n /** Used as the base URL only when cliAuthConfirmUrl is relative. */\n appUrl: string,\n loginCode: string,\n}): string => {\n const url = new URL(options.cliAuthConfirmUrl, options.appUrl);\n url.searchParams.set("login_code", options.loginCode);\n return url.toString();\n};\n\nexport const resolveUnknownHandlerPathFallbackUrl = (options: {\n defaultTarget: DefaultHandlerUrlTarget | undefined,\n projectId: string,\n unknownPath: string,\n}): string | null => {\n const defaultTarget = options.defaultTarget ?? { type: "handler-component" } satisfies DefaultHandlerUrlTarget;\n\n switch (defaultTarget.type) {\n case "handler-component": {\n return null;\n }\n case "hosted": {\n return getHostedHandlerUrl({\n projectId: options.projectId,\n pagePath: options.unknownPath,\n });\n }\n }\n};\n\nexport function getPagePrompt(pageName: string, currentVersion?: number): { title: string; fullPrompt: string; upgradePrompt: string | null; latestVersion: number } | null {\n if (!(pageName in customPagePrompts)) return null;\n const prompt = customPagePrompts[pageName as keyof typeof customPagePrompts];\n const versionKeys = Object.keys(prompt.versions).map(Number);\n const latestVersion = versionKeys.length > 0 ? Math.max(...versionKeys) : 0;\n\n let upgradePrompt: string | null = null;\n if (currentVersion != null) {\n const relevantVersions = versionKeys\n .filter(v => v > currentVersion)\n .sort((a, b) => a - b);\n const prompts = relevantVersions\n .map(v => prompt.versions[v].upgradePrompt)\n .filter(p => p.length > 0);\n upgradePrompt = prompts.length > 0 ? prompts.join("\\n\\n") : null;\n } else {\n const upgradeEntry = latestVersion > 0 ? prompt.versions[latestVersion] : undefined;\n upgradePrompt = upgradeEntry?.upgradePrompt ?? null;\n }\n\n return { title: prompt.title, fullPrompt: prompt.fullPrompt, upgradePrompt, latestVersion };\n}\n\nexport const isHostedHandlerUrlForProject = (options: { url: string, projectId: string }): boolean => {\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(options.url);\n } catch {\n return false;\n }\n\n const hostedBaseUrl = new URL(getHostedHandlerUrl({ projectId: options.projectId, pagePath: "" }));\n return parsedUrl.origin === hostedBaseUrl.origin\n && (parsedUrl.pathname === hostedBaseUrl.pathname || parsedUrl.pathname.startsWith(`${hostedBaseUrl.pathname}/`));\n};\n'},{path:"users/index.ts",content:'import { KnownErrors } from "@stackframe/stack-shared";\nimport { CurrentUserCrud } from "@stackframe/stack-shared/dist/interface/crud/current-user";\nimport { UsersCrud } from "@stackframe/stack-shared/dist/interface/crud/users";\nimport type { RestrictedReason } from "@stackframe/stack-shared/dist/schema-fields";\nimport { InternalSession } from "@stackframe/stack-shared/dist/sessions";\nimport { encodeBase64 } from "@stackframe/stack-shared/dist/utils/bytes";\nimport { GeoInfo } from "@stackframe/stack-shared/dist/utils/geo";\nimport { ReadonlyJson } from "@stackframe/stack-shared/dist/utils/json";\nimport { ProviderType } from "@stackframe/stack-shared/dist/utils/oauth";\nimport { Result } from "@stackframe/stack-shared/dist/utils/results";\nimport { ApiKeyCreationOptions, UserApiKey, UserApiKeyFirstView } from "../api-keys";\nimport { AsyncStoreProperty, AuthLike } from "../common";\nimport { DeprecatedOAuthConnection, OAuthConnection } from "../connected-accounts";\nimport { ContactChannel, ContactChannelCreateOptions, ServerContactChannel, ServerContactChannelCreateOptions } from "../contact-channels";\nimport { Customer } from "../customers";\nimport { NotificationCategory } from "../notification-categories";\nimport { AdminTeamPermission, TeamPermission } from "../permissions";\nimport { AdminOwnedProject, AdminProjectCreateOptions } from "../projects";\nimport { EditableTeamMemberProfile, ReceivedTeamInvitation, ServerListTeamsOptions, ServerTeam, ServerTeamCreateOptions, Team, TeamCreateOptions } from "../teams";\n\nconst userGetterErrorMessage = "Stack Auth: useUser() already returns the user object. Use `const user = useUser()` (or `const user = await app.getUser()`) instead of destructuring it like `const { user } = ...`.";\n\nexport function withUserDestructureGuard<T extends object>(target: T): T {\n Object.freeze(target);\n return new Proxy(target, {\n get(target, prop, receiver) {\n if (prop === "user") {\n return guardGetter();\n }\n return target[prop as keyof T];\n },\n });\n}\n\nfunction guardGetter(): never {\n throw new Error(userGetterErrorMessage);\n}\n\nexport type OAuthProvider = {\n readonly id: string,\n readonly type: string,\n readonly userId: string,\n readonly accountId?: string,\n readonly email?: string,\n readonly allowSignIn: boolean,\n readonly allowConnectedAccounts: boolean,\n update(data: { allowSignIn?: boolean, allowConnectedAccounts?: boolean }): Promise<Result<void,\n InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>\n >>,\n delete(): Promise<void>,\n};\n\nexport type ServerOAuthProvider = {\n readonly id: string,\n readonly type: string,\n readonly userId: string,\n readonly accountId: string,\n readonly email?: string,\n readonly allowSignIn: boolean,\n readonly allowConnectedAccounts: boolean,\n update(data: { accountId?: string, email?: string, allowSignIn?: boolean, allowConnectedAccounts?: boolean }): Promise<Result<void,\n InstanceType<typeof KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn>\n >>,\n delete(): Promise<void>,\n};\n\n\n/**\n * Contains everything related to the current user session.\n */\nexport type Auth = AuthLike<{}> & {\n readonly _internalSession: InternalSession,\n readonly currentSession: {\n getTokens(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n useTokens(): { accessToken: string | null, refreshToken: string | null }, // THIS_LINE_PLATFORM react-like\n },\n};\n\n/**\n * ```\n * +----------+-------------+-------------------+\n * | \\ | !Server | Server |\n * +----------+-------------+-------------------+\n * | !Session | User | ServerUser |\n * | Session | CurrentUser | CurrentServerUser |\n * +----------+-------------+-------------------+\n * ```\n *\n * The fields on each of these types are available iff:\n * BaseUser: true\n * Auth: Session\n * ServerBaseUser: Server\n * UserExtra: Session OR Server\n *\n * The types are defined as follows (in the typescript manner):\n * User = BaseUser\n * CurrentUser = BaseUser & Auth & UserExtra\n * ServerUser = BaseUser & ServerBaseUser & UserExtra\n * CurrentServerUser = BaseUser & ServerBaseUser & Auth & UserExtra\n **/\n\nexport type BaseUser = {\n readonly id: string,\n\n readonly displayName: string | null,\n\n /**\n * The user\'s email address.\n *\n * Note: This might NOT be unique across multiple users, so always use `id` for unique identification.\n */\n readonly primaryEmail: string | null,\n readonly primaryEmailVerified: boolean,\n readonly profileImageUrl: string | null,\n\n readonly signedUpAt: Date,\n\n readonly clientMetadata: any,\n readonly clientReadOnlyMetadata: any,\n\n /**\n * Whether the user has a password set.\n */\n readonly hasPassword: boolean,\n readonly otpAuthEnabled: boolean,\n readonly passkeyAuthEnabled: boolean,\n\n readonly isMultiFactorRequired: boolean,\n readonly isAnonymous: boolean,\n /**\n * Whether the user is in restricted state (signed up but hasn\'t completed onboarding requirements).\n * For example, if email verification is required but the user hasn\'t verified their email yet.\n */\n readonly isRestricted: boolean,\n /**\n * The reason why the user is restricted, e.g., { type: "email_not_verified" }, { type: "anonymous" }, or { type: "restricted_by_administrator" }.\n * Null if the user is not restricted.\n */\n readonly restrictedReason: RestrictedReason | null,\n toClientJson(): CurrentUserCrud["Client"]["Read"],\n\n /**\n * @deprecated, use contact channel\'s usedForAuth instead\n */\n readonly emailAuthEnabled: boolean,\n /**\n * @deprecated\n */\n readonly oauthProviders: readonly { id: string }[],\n}\n\nexport type UserExtra = {\n setDisplayName(displayName: string | null): Promise<void>,\n /** @deprecated Use contact channel\'s sendVerificationEmail instead */\n sendVerificationEmail(): Promise<KnownErrors["EmailAlreadyVerified"] | void>,\n setClientMetadata(metadata: any): Promise<void>,\n updatePassword(options: { oldPassword: string, newPassword: string}): Promise<KnownErrors["PasswordConfirmationMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>,\n setPassword(options: { password: string }): Promise<KnownErrors["PasswordRequirementsNotMet"] | void>,\n\n /**\n * A shorthand method to update multiple fields of the user at once.\n */\n update(update: UserUpdateOptions): Promise<void>,\n\n useContactChannels(): ContactChannel[], // THIS_LINE_PLATFORM react-like\n listContactChannels(): Promise<ContactChannel[]>,\n createContactChannel(data: ContactChannelCreateOptions): Promise<ContactChannel>,\n\n useNotificationCategories(): NotificationCategory[], // THIS_LINE_PLATFORM react-like\n listNotificationCategories(): Promise<NotificationCategory[]>,\n\n delete(): Promise<void>,\n\n /** @deprecated Use `getOrLinkConnectedAccount` for redirect behavior, or `getConnectedAccount({ provider, providerAccountId })` for existence check. */\n getConnectedAccount(id: ProviderType, options: { or: \'redirect\', scopes?: string[] }): Promise<DeprecatedOAuthConnection>,\n /** @deprecated Use `getConnectedAccount({ provider, providerAccountId })` for existence check, or `getOrLinkConnectedAccount` for redirect behavior. */\n getConnectedAccount(id: ProviderType, options?: { or?: \'redirect\' | \'throw\' | \'return-null\', scopes?: string[] }): Promise<DeprecatedOAuthConnection | null>,\n /** Get a specific connected account by provider and providerAccountId. Returns null if not found. */\n getConnectedAccount(account: { provider: string, providerAccountId: string }): Promise<OAuthConnection | null>,\n\n // IF_PLATFORM react-like\n /** @deprecated Use `useOrLinkConnectedAccount` for redirect behavior, or `useConnectedAccount({ provider, providerAccountId })` for existence check. */\n useConnectedAccount(id: ProviderType, options: { or: \'redirect\', scopes?: string[] }): DeprecatedOAuthConnection,\n /** @deprecated Use `useConnectedAccount({ provider, providerAccountId })` for existence check, or `useOrLinkConnectedAccount` for redirect behavior. */\n useConnectedAccount(id: ProviderType, options?: { or?: \'redirect\' | \'throw\' | \'return-null\', scopes?: string[] }): DeprecatedOAuthConnection | null,\n /** Get a specific connected account by provider and providerAccountId. Returns null if not found. */\n useConnectedAccount(account: { provider: string, providerAccountId: string }): OAuthConnection | null,\n // END_PLATFORM\n\n /** List all connected accounts for this user (only those with allowConnectedAccounts enabled). */\n listConnectedAccounts(): Promise<OAuthConnection[]>,\n /** React hook to list all connected accounts. */\n useConnectedAccounts(): OAuthConnection[], // THIS_LINE_PLATFORM react-like\n /** Redirect the user to the OAuth flow to link a new connected account. Always redirects, never returns. */\n linkConnectedAccount(provider: string, options?: { scopes?: string[] }): Promise<void>,\n /** Get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */\n getOrLinkConnectedAccount(provider: string, options?: { scopes?: string[] }): Promise<OAuthConnection>,\n /** React hook: get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */\n useOrLinkConnectedAccount(provider: string, options?: { scopes?: string[] }): OAuthConnection, // THIS_LINE_PLATFORM react-like\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n hasPermission(permissionId: string): Promise<boolean>,\n\n getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>,\n getPermission(permissionId: string): Promise<TeamPermission | null>,\n\n listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n listPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n\n // IF_PLATFORM react-like\n usePermissions(scope: Team, options?: { recursive?: boolean }): TeamPermission[],\n usePermissions(options?: { recursive?: boolean }): TeamPermission[],\n\n usePermission(scope: Team, permissionId: string): TeamPermission | null,\n usePermission(permissionId: string): TeamPermission | null,\n // END_PLATFORM\n\n readonly selectedTeam: Team | null,\n setSelectedTeam(teamOrId: string | Team | null): Promise<void>,\n createTeam(data: TeamCreateOptions): Promise<Team>,\n leaveTeam(team: Team): Promise<void>,\n\n /**\n * Lists all pending team invitations sent to any of the current user\'s verified email addresses.\n *\n * This allows the user to discover which teams have invited them, even if they haven\'t\n * joined those teams yet. Only invitations sent to verified email addresses are included.\n *\n * @returns An array of `ReceivedTeamInvitation` objects, each containing the team ID, team\n * display name, recipient email, and expiration date.\n *\n * @example\n * ```ts\n * const invitations = await user.listTeamInvitations();\n * for (const invitation of invitations) {\n * console.log(`Invited to ${invitation.teamDisplayName} via ${invitation.recipientEmail}`);\n * }\n * ```\n */\n listTeamInvitations(): Promise<ReceivedTeamInvitation[]>,\n /**\n * Lists all pending team invitations sent to any of the current user\'s verified email addresses.\n *\n * React hook version of `listTeamInvitations()`. Automatically re-renders when invitations change.\n */\n useTeamInvitations(): ReceivedTeamInvitation[], // THIS_LINE_PLATFORM react-like\n\n getActiveSessions(): Promise<ActiveSession[]>,\n revokeSession(sessionId: string): Promise<void>,\n getTeamProfile(team: Team): Promise<EditableTeamMemberProfile>,\n useTeamProfile(team: Team): EditableTeamMemberProfile, // THIS_LINE_PLATFORM react-like\n\n createApiKey(options: ApiKeyCreationOptions<"user">): Promise<UserApiKeyFirstView>,\n\n useOAuthProviders(): OAuthProvider[], // THIS_LINE_PLATFORM react-like\n listOAuthProviders(): Promise<OAuthProvider[]>,\n\n useOAuthProvider(id: string): OAuthProvider | null, // THIS_LINE_PLATFORM react-like\n getOAuthProvider(id: string): Promise<OAuthProvider | null>,\n\n registerPasskey(options?: { hostname?: string }): Promise<Result<undefined, KnownErrors["PasskeyRegistrationFailed"] | KnownErrors["PasskeyWebAuthnError"]>>,\n}\n& AsyncStoreProperty<"apiKeys", [], UserApiKey[], true>\n& AsyncStoreProperty<"team", [id: string], Team | null, false>\n& AsyncStoreProperty<"teams", [], Team[], true>\n& AsyncStoreProperty<"teamInvitations", [], ReceivedTeamInvitation[], true>\n& AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: { recursive?: boolean }], TeamPermission | null, false>\n& AsyncStoreProperty<"permissions", [scope: Team, options?: { recursive?: boolean }], TeamPermission[], true>;\n\nexport type InternalUserExtra =\n & {\n createProject(newProject: AdminProjectCreateOptions): Promise<AdminOwnedProject>,\n transferProject(projectIdToTransfer: string, newTeamId: string): Promise<void>,\n }\n & AsyncStoreProperty<"ownedProjects", [], AdminOwnedProject[], true>\n\nexport type User = BaseUser;\n\nexport type CurrentUser = BaseUser & Auth & UserExtra & Customer;\n\nexport type CurrentInternalUser = CurrentUser & InternalUserExtra;\n\nexport type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;\n\nexport type TokenPartialUser = Pick<\n User,\n | "id"\n | "displayName"\n | "primaryEmail"\n | "primaryEmailVerified"\n | "isAnonymous"\n | "isMultiFactorRequired"\n | "isRestricted"\n | "restrictedReason"\n>\n\nexport type SyncedPartialUser = TokenPartialUser & Pick<\n User,\n | "id"\n | "displayName"\n | "primaryEmail"\n | "primaryEmailVerified"\n | "profileImageUrl"\n | "signedUpAt"\n | "clientMetadata"\n | "clientReadOnlyMetadata"\n | "isAnonymous"\n | "hasPassword"\n | "isRestricted"\n | "restrictedReason"\n>;\n\n\nexport type ActiveSession = {\n id: string,\n userId: string,\n createdAt: Date,\n isImpersonation: boolean,\n lastUsedAt: Date | undefined,\n isCurrentSession: boolean,\n geoInfo?: GeoInfo,\n};\n\nexport type UserUpdateOptions = {\n displayName?: string | null,\n clientMetadata?: ReadonlyJson,\n selectedTeamId?: string | null,\n totpMultiFactorSecret?: Uint8Array | null,\n profileImageUrl?: string | null,\n otpAuthEnabled?: boolean,\n passkeyAuthEnabled?: boolean,\n primaryEmail?: string | null,\n}\nexport function userUpdateOptionsToCrud(options: UserUpdateOptions): CurrentUserCrud["Client"]["Update"] {\n return {\n display_name: options.displayName,\n client_metadata: options.clientMetadata,\n selected_team_id: options.selectedTeamId,\n totp_secret_base64: options.totpMultiFactorSecret != null ? encodeBase64(options.totpMultiFactorSecret) : options.totpMultiFactorSecret,\n profile_image_url: options.profileImageUrl,\n otp_auth_enabled: options.otpAuthEnabled,\n passkey_auth_enabled: options.passkeyAuthEnabled,\n primary_email: options.primaryEmail,\n };\n}\n\n\nexport type ServerBaseUser = {\n setPrimaryEmail(email: string | null, options?: { verified?: boolean | undefined }): Promise<void>,\n\n readonly lastActiveAt: Date,\n\n readonly serverMetadata: any,\n setServerMetadata(metadata: any): Promise<void>,\n setClientReadOnlyMetadata(metadata: any): Promise<void>,\n\n /** Whether the user is restricted by an administrator. Can be set manually or by sign-up rules. */\n readonly restrictedByAdmin: boolean,\n /** Public reason shown to the user explaining why they are restricted. Optional. */\n readonly restrictedByAdminReason: string | null,\n /** Private details about the restriction (e.g., which sign-up rule triggered). Only visible to server access and above. */\n readonly restrictedByAdminPrivateDetails: string | null,\n /** Best-effort ISO country code captured at sign-up time from request geo headers. */\n readonly countryCode: string | null,\n /** Server-only risk scores used during sign-up risk evaluation. */\n readonly riskScores: {\n readonly signUp: {\n readonly bot: number,\n readonly freeTrialAbuse: number,\n },\n },\n\n createTeam(data: Omit<ServerTeamCreateOptions, "creatorUserId">): Promise<ServerTeam>,\n\n useContactChannels(): ServerContactChannel[], // THIS_LINE_PLATFORM react-like\n listContactChannels(): Promise<ServerContactChannel[]>,\n createContactChannel(data: ServerContactChannelCreateOptions): Promise<ServerContactChannel>,\n\n update(user: ServerUserUpdateOptions): Promise<void>,\n\n grantPermission(scope: Team, permissionId: string): Promise<void>,\n grantPermission(permissionId: string): Promise<void>,\n\n revokePermission(scope: Team, permissionId: string): Promise<void>,\n revokePermission(permissionId: string): Promise<void>,\n\n getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>,\n getPermission(permissionId: string): Promise<TeamPermission | null>,\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n hasPermission(permissionId: string): Promise<boolean>,\n\n listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n listPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,\n\n // IF_PLATFORM react-like\n usePermissions(scope: Team, options?: { recursive?: boolean }): TeamPermission[],\n usePermissions(options?: { recursive?: boolean }): TeamPermission[],\n\n usePermission(scope: Team, permissionId: string): TeamPermission | null,\n usePermission(permissionId: string): TeamPermission | null,\n // END_PLATFORM\n\n useOAuthProviders(): ServerOAuthProvider[], // THIS_LINE_PLATFORM react-like\n listOAuthProviders(): Promise<ServerOAuthProvider[]>,\n\n useOAuthProvider(id: string): ServerOAuthProvider | null, // THIS_LINE_PLATFORM react-like\n getOAuthProvider(id: string): Promise<ServerOAuthProvider | null>,\n\n /**\n * Creates a new session object with a refresh token for this user. Can be used to impersonate them.\n */\n createSession(options?: { expiresInMillis?: number, isImpersonation?: boolean }): Promise<{\n getTokens(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n }>,\n}\n& AsyncStoreProperty<"team", [id: string], ServerTeam | null, false>\n& AsyncStoreProperty<"teams", [options?: ServerListTeamsOptions], ServerTeam[] & { nextCursor: string | null }, true>\n& AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: { direct?: boolean }], AdminTeamPermission | null, false>\n& AsyncStoreProperty<"permissions", [scope: Team, options?: { direct?: boolean }], AdminTeamPermission[], true>;\n\n/**\n * A user including sensitive fields that should only be used on the server, never sent to the client\n * (such as sensitive information and serverMetadata).\n */\nexport type ServerUser = ServerBaseUser & BaseUser & UserExtra & Customer<true>;\n\nexport type CurrentServerUser = Auth & ServerUser;\n\nexport type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;\n\nexport type ProjectCurrentServerUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser;\n\nexport type SyncedPartialServerUser = SyncedPartialUser & Pick<\n ServerUser,\n | "serverMetadata"\n>;\n\nexport type ServerUserUpdateOptions = {\n primaryEmail?: string | null,\n primaryEmailVerified?: boolean,\n primaryEmailAuthEnabled?: boolean,\n clientReadOnlyMetadata?: ReadonlyJson,\n serverMetadata?: ReadonlyJson,\n password?: string,\n restrictedByAdmin?: boolean,\n restrictedByAdminReason?: string | null,\n restrictedByAdminPrivateDetails?: string | null,\n countryCode?: string | null,\n riskScores?: {\n signUp: {\n bot: number,\n freeTrialAbuse: number,\n },\n },\n} & UserUpdateOptions;\nexport function serverUserUpdateOptionsToCrud(options: ServerUserUpdateOptions): CurrentUserCrud["Server"]["Update"] {\n // Base update options\n const baseUpdate: CurrentUserCrud["Server"]["Update"] = {\n display_name: options.displayName,\n primary_email: options.primaryEmail,\n client_metadata: options.clientMetadata,\n client_read_only_metadata: options.clientReadOnlyMetadata,\n server_metadata: options.serverMetadata,\n selected_team_id: options.selectedTeamId,\n primary_email_auth_enabled: options.primaryEmailAuthEnabled,\n primary_email_verified: options.primaryEmailVerified,\n password: options.password,\n profile_image_url: options.profileImageUrl,\n totp_secret_base64: options.totpMultiFactorSecret != null ? encodeBase64(options.totpMultiFactorSecret) : options.totpMultiFactorSecret,\n };\n return {\n ...baseUpdate,\n restricted_by_admin: options.restrictedByAdmin,\n restricted_by_admin_reason: options.restrictedByAdminReason,\n restricted_by_admin_private_details: options.restrictedByAdminPrivateDetails,\n country_code: options.countryCode,\n risk_scores: options.riskScores ? {\n sign_up: {\n bot: options.riskScores.signUp.bot,\n free_trial_abuse: options.riskScores.signUp.freeTrialAbuse,\n },\n } : undefined,\n };\n}\n\n\nexport type ServerUserCreateOptions = {\n primaryEmail?: string | null,\n primaryEmailAuthEnabled?: boolean,\n password?: string,\n otpAuthEnabled?: boolean,\n displayName?: string,\n primaryEmailVerified?: boolean,\n clientMetadata?: any,\n clientReadOnlyMetadata?: any,\n serverMetadata?: any,\n countryCode?: string | null,\n riskScores?: {\n signUp: {\n bot: number,\n freeTrialAbuse: number,\n },\n },\n}\nexport function serverUserCreateOptionsToCrud(options: ServerUserCreateOptions): UsersCrud["Server"]["Create"] {\n return {\n primary_email: options.primaryEmail,\n password: options.password,\n otp_auth_enabled: options.otpAuthEnabled,\n primary_email_auth_enabled: options.primaryEmailAuthEnabled,\n display_name: options.displayName,\n primary_email_verified: options.primaryEmailVerified,\n client_metadata: options.clientMetadata,\n client_read_only_metadata: options.clientReadOnlyMetadata,\n server_metadata: options.serverMetadata,\n country_code: options.countryCode,\n risk_scores: options.riskScores ? {\n sign_up: {\n bot: options.riskScores.signUp.bot,\n free_trial_abuse: options.riskScores.signUp.freeTrialAbuse,\n },\n } : undefined,\n };\n}\n'}],n='//#region src/components/alert.d.ts\ntype DesignAlertVariant = "default" | "success" | "error" | "warning" | "info";\ntype DesignAlertProps = React.HTMLAttributes<HTMLDivElement> & {\n variant?: DesignAlertVariant;\n title?: React.ReactNode;\n description?: React.ReactNode;\n glassmorphic?: boolean;\n};\ndeclare function DesignAlert({\n variant,\n title,\n description,\n glassmorphic,\n className,\n children,\n ...props\n}: DesignAlertProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/analytics-chart-pie.d.ts\ntype SegmentColors = {\n primary: {\n light: string[];\n dark: string[];\n };\n compare: {\n light: string[];\n dark: string[];\n };\n};\ntype AnalyticsChartPieBodyProps = {\n wrapperRef: Ref<HTMLDivElement>;\n primarySegmentSeries: readonly AnalyticsChartSeries[];\n compareSegmentSeries: readonly AnalyticsChartSeries[];\n aggregatedPrimarySegments: number[];\n aggregatedCompareSegments: number[];\n aggregatedPrimaryTotal: number;\n aggregatedCompareTotal: number;\n segmentColors: SegmentColors;\n showPrimary: boolean;\n showCompare: boolean;\n xFormatKind: FormatKind;\n yFormatKind: FormatKind;\n hoverKey: string | null;\n setHoverKey: (k: string | null) => void;\n zoomRange: [number, number] | null;\n onResetZoom: () => void;\n visibleStart: number;\n visibleEnd: number;\n fullData: Point[];\n strings: AnalyticsChartStrings;\n fmtValue: (value: number, kind: FormatKind) => string;\n pie: AnalyticsChartPieProps | undefined;\n};\ndeclare function AnalyticsChartPie({\n wrapperRef,\n primarySegmentSeries,\n compareSegmentSeries,\n aggregatedPrimarySegments,\n aggregatedCompareSegments,\n aggregatedPrimaryTotal,\n aggregatedCompareTotal,\n segmentColors,\n showPrimary,\n showCompare,\n xFormatKind,\n yFormatKind,\n hoverKey,\n setHoverKey,\n zoomRange,\n onResetZoom,\n visibleStart,\n visibleEnd,\n fullData,\n strings,\n fmtValue,\n pie\n}: AnalyticsChartPieBodyProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/analytics-chart.d.ts\n/** Mirrors Recharts\' internal `Margin` shape (not exported from their typings). */\ntype Margin = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n};\n/**\n * Props for {@link AnalyticsChart}.\n *\n * ## HOW TO REFERENCE THIS COMPONENT\n *\n * **In the custom dashboard sandbox** (AI-generated dashboard code): every\n * export lives on the global `DashboardUI` object. Use\n * `DashboardUI.AnalyticsChart`, `DashboardUI.ANALYTICS_CHART_DEFAULT_STATE`,\n * `DashboardUI.pointValue`, etc. **Never** use bare identifiers like\n * `<AnalyticsChart />` inside the sandbox — there is no module system and\n * nothing is destructured into scope. Types (`AnalyticsChartState`,\n * `Point`, …) don\'t exist at runtime anyway, so just drop the type\n * annotations in sandbox code.\n *\n * **In a regular TypeScript app** (anywhere importing `@stackframe/dashboard-ui-components`\n * directly): `import { AnalyticsChart, ANALYTICS_CHART_DEFAULT_STATE } from\n * "@stackframe/dashboard-ui-components"` and use the bare name. Drop the\n * `DashboardUI.` prefix from the examples below when doing so.\n *\n * ## Data shape in 30 seconds\n *\n * - `data` is `Point[]`. Each `Point` is `{ ts: number, values: Record<string, number> }`.\n * `ts` is a Unix millisecond timestamp; `values` is keyed by **layer id**.\n * - `state` is fully controlled. Start from\n * `DashboardUI.ANALYTICS_CHART_DEFAULT_STATE` (which ships with a\n * `"primary"` + `"compare"` + `"annotations"` layer set) and override\n * what you need. Do **not** hand-build the layer array from scratch.\n * - For a breakdown (e.g. signups by region), add `segments` (a `number[][]`\n * with one row per `data` point) and `segmentSeries` (the category labels)\n * to the primary layer. Rows of `segments` should sum to the point\'s layer\n * value. Same for the compare layer if you want a compared breakdown.\n *\n * ## **SCALE YOUR DATA BEFORE PUTTING IT ON A POINT** (critical)\n *\n * The chart renders every visible layer on a **single shared y-axis**. If\n * two layers are on different orders of magnitude (e.g. revenue in cents\n * `1_200_000` and sign-ups `450`), the smaller series collapses to a flat\n * line at the bottom and the chart looks broken. You **must** normalize\n * both metrics into the same range before building `data`. Rules of thumb:\n *\n * - **Cents → dollars / units**: divide money amounts by 100 (or 1000 for\n * large currencies). Use a `valueFormatter` to render the original unit\n * in tooltips so the UX still reads as "$12,543".\n * - **Counts vs rates**: if one layer is a count (e.g. requests) and the\n * other is a ratio (e.g. error rate 0.02), multiply the ratio by the\n * count\'s scale (or by `max(counts)`) so both sit in the same band.\n * - **Very different counts** (e.g. page views `120_000` vs sign-ups `430`):\n * either divide the large metric (`views / 100`) or promote the small\n * one to a rate (`signups / views * 1000`). Note the transformation in\n * the layer `label` ("Sign-ups per 1k views") so it\'s honest.\n * - **Pick the target range from the layer with the most natural scale**\n * — usually the metric the user actually cares about — and normalize\n * everything else into it. Don\'t normalize by fighting Recharts with\n * `yDomain` hacks; do it in the data.\n *\n * If the two metrics truly can\'t share an axis (e.g. latency ms vs error\n * count), render them as **two separate `AnalyticsChart` instances** stacked\n * in the layout instead of jamming them into one chart.\n *\n * ## Example 1 — simplest possible: one area layer, no compare\n *\n * ```jsx\n * // Sandbox dashboard code — everything prefixed with DashboardUI.*\n * function Dashboard() {\n * const data = [\n * { ts: Date.UTC(2026, 2, 1), values: { primary: 420 } },\n * { ts: Date.UTC(2026, 2, 2), values: { primary: 512 } },\n * { ts: Date.UTC(2026, 2, 3), values: { primary: 604 } },\n * // ...one row per time bucket\n * ];\n *\n * // Start from defaults, hide the compare layer so it\'s a single series.\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) =>\n * l.kind === "compare" ? { ...l, visible: false } : l,\n * ),\n * });\n *\n * return (\n * <DashboardUI.DesignChartCard title="Sign-ups" description="Last 30 days">\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * </DashboardUI.DesignChartCard>\n * );\n * }\n * ```\n *\n * ## Example 2 — current vs previous period (compare)\n *\n * Each point carries both layer values under their layer ids. The default\n * state\'s `"primary"` and `"compare"` layers are already visible, so no\n * state customization is needed.\n *\n * ```jsx\n * function Dashboard() {\n * const data = rows.map((r) => ({\n * ts: r.bucketTs,\n * values: {\n * primary: r.signupsThisPeriod, // keyed by layer id "primary"\n * compare: r.signupsLastPeriod, // keyed by layer id "compare"\n * },\n * }));\n *\n * const [state, setState] = React.useState(\n * DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * );\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * );\n * }\n * ```\n *\n * ## Example 3 — stacked bar with region breakdown (segmented)\n *\n * ```jsx\n * function Dashboard() {\n * const regions = [\n * { key: "us", label: "United States" },\n * { key: "eu", label: "European Union" },\n * { key: "asia", label: "Asia-Pacific" },\n * ];\n *\n * // Row index matches `data` index; column index matches `regions`.\n * // Each row MUST sum to data[i].values.primary.\n * const segments = [\n * [210, 140, 70], // day 0 → total 420\n * [250, 170, 92], // day 1 → total 512\n * [300, 200, 104], // day 2 → total 604\n * ];\n *\n * const data = [\n * { ts: Date.UTC(2026, 2, 1), values: { primary: 420 } },\n * { ts: Date.UTC(2026, 2, 2), values: { primary: 512 } },\n * { ts: Date.UTC(2026, 2, 3), values: { primary: 604 } },\n * ];\n *\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) => {\n * if (l.kind === "primary") {\n * return {\n * ...l,\n * type: "bar", // switch from area → stacked bars\n * segmented: true,\n * segments,\n * segmentSeries: regions,\n * };\n * }\n * if (l.kind === "compare") {\n * return { ...l, visible: false };\n * }\n * return l;\n * }),\n * });\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * );\n * }\n * ```\n *\n * ## Example 4 — mixing display types (e.g. revenue bars + signups area)\n *\n * Use two layers. The "primary" layer holds one metric; reuse the "compare"\n * layer slot for the second metric by overriding its `id`, `label`, and\n * `type`. Then key both values in each `Point`.\n *\n * **IMPORTANT**: the two metrics share a single y-axis, so scale them into\n * the same range before putting them on the point. A common trick is to\n * pass a `valueFormatter` that reports each layer\'s number with its own\n * unit so tooltips still read correctly.\n *\n * ```jsx\n * function Dashboard() {\n * // Sign-ups are already in range; revenue cents would dwarf them, so\n * // we normalize revenue (cents → dollars) onto the same scale.\n * const data = rows.map((r) => ({\n * ts: r.bucketTs,\n * values: {\n * revenue: r.revenueCents / 100,\n * signups: r.signups,\n * },\n * }));\n *\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) => {\n * if (l.kind === "primary") {\n * return { ...l, id: "revenue", label: "Revenue", type: "bar" };\n * }\n * if (l.kind === "compare") {\n * return {\n * ...l,\n * id: "signups",\n * label: "Sign-ups",\n * type: "area",\n * visible: true,\n * };\n * }\n * return l;\n * }),\n * });\n *\n * // Per-layer formatter: `kind` lets you branch per-axis vs per-layer\n * // using the layer id passed in via the tooltip context. For most\n * // cases formatting by raw value is enough.\n * const valueFormatter = (value, kind) => {\n * if (kind.type === "currency") return `$${value.toFixed(0)}`;\n * return value.toLocaleString();\n * };\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * valueFormatter={valueFormatter}\n * />\n * );\n * }\n * ```\n *\n * ## Example 5 — segmented sign-ups stacked with a revenue line (mix + segment)\n *\n * Combines Example 3 and Example 4: primary layer is revenue as a line\n * (un-segmented), compare layer is sign-ups as a stacked bar (segmented\n * by region). Remember: row sums of the compare segments must equal\n * `point.values.signups`, and both metrics share one y-axis.\n *\n * ```jsx\n * function Dashboard() {\n * const regions = [\n * { key: "us", label: "United States" },\n * { key: "eu", label: "European Union" },\n * { key: "asia", label: "Asia-Pacific" },\n * ];\n *\n * // Normalize revenue to the same order of magnitude as sign-ups.\n * const data = rows.map((r) => ({\n * ts: r.bucketTs,\n * values: {\n * revenue: r.revenueCents / 100,\n * signups: r.signupsTotal,\n * },\n * }));\n *\n * // Row index matches `data` index. Each row sums to signupsTotal.\n * const signupSegments = rows.map((r) => [\n * r.signupsUs,\n * r.signupsEu,\n * r.signupsAsia,\n * ]);\n *\n * const [state, setState] = React.useState({\n * ...DashboardUI.ANALYTICS_CHART_DEFAULT_STATE,\n * layers: DashboardUI.ANALYTICS_CHART_DEFAULT_STATE.layers.map((l) => {\n * if (l.kind === "primary") {\n * return { ...l, id: "revenue", label: "Revenue", type: "line" };\n * }\n * if (l.kind === "compare") {\n * return {\n * ...l,\n * id: "signups",\n * label: "Sign-ups",\n * type: "bar",\n * visible: true,\n * segmented: true,\n * segments: signupSegments,\n * segmentSeries: regions,\n * };\n * }\n * return l;\n * }),\n * });\n *\n * return (\n * <DashboardUI.AnalyticsChart\n * data={data}\n * state={state}\n * onChange={setState}\n * />\n * );\n * }\n * ```\n */\ntype AnalyticsChartProps = {\n /** Time-series points — each point carries `values` keyed by layer id.\n * See {@link AnalyticsChartProps} for full data-shape examples. */\n data: Point[]; /** Annotations. Fully prop-driven; the consumer owns the array. */\n annotations?: Annotation[];\n /** Fully-controlled state + dispatch. The chart reads every config and\n * persistent-interaction slice from `state` and mutates it through\n * `onChange`. Ephemeral interaction state (hover, brush, pin, draft) is\n * managed internally and surfaces only through the state callbacks. */\n state: AnalyticsChartState;\n onChange: React.Dispatch<React.SetStateAction<AnalyticsChartState>>;\n /** Fired when the user submits the in-chart annotation form. The consumer\n * is expected to append to its own annotations array. */\n onAnnotationCreate?: (annotation: Annotation) => void; /** Override any user-visible copy. Shallow-merges over the defaults. */\n strings?: Partial<AnalyticsChartStrings>;\n /** Override segment color ramps. Each ramp is either procedural\n * (hue + sat + lightness range) or explicit (concrete color lists). */\n palette?: Partial<AnalyticsChartPalette>;\n /** Render slot for the tooltip body. Receives a prepared context with\n * the active point, primary/compare layer views, pre-bound formatters,\n * and resolved strings. Defaults to `DefaultAnalyticsChartTooltip`. */\n renderTooltip?: (ctx: AnalyticsChartTooltipContext) => ReactNode;\n /** Recharts plot margins. Also drives overlay positioning math so the\n * crosshair, tooltip anchor, brush popup, and flag markers line up with\n * the actual plot area. Defaults to `{ top: 16, right: 24, bottom: 8, left: 12 }`. */\n plotMargin?: Margin; /** Y-axis reserved width in pixels. Defaults to 48. */\n yAxisWidth?: number; /** Fractional headroom added to the y-axis top. Defaults to 0.1. */\n yDomainPadding?: number; /** Grouped pie configuration. Each field has a sensible default. */\n pie?: AnalyticsChartPieProps;\n /** Custom number formatter. Receives the raw value and the kind to format\n * with — the same function is invoked for both x-axis and y-axis values. */\n valueFormatter?: (value: number, kind: FormatKind) => string;\n};\n/**\n * Preferred chart for all time-series: area, line, bar, compare layers,\n * segmented stacks, tooltips, zoom, and annotations. Wrap in\n * `DesignChartCard` for the title/description chrome. Only fall back to\n * raw Recharts for non-time-series visuals (static rankings etc.).\n *\n * ## Data shape\n *\n * `data` is `Point[]`, where `Point = { ts: number, values: Record<string, number> }`.\n * `ts` is a Unix milliseconds timestamp. `values` maps layer id → numeric value\n * at that bucket. Example:\n *\n * ```ts\n * { ts: 1743465600000, values: { primary: 420 } }\n * { ts: 1743465600000, values: { primary: 420, compare: 380 } } // with compare layer\n * ```\n *\n * ## State is fully controlled — start from ANALYTICS_CHART_DEFAULT_STATE\n *\n * The default state ships with three pre-configured layers: `"primary"`,\n * `"compare"`, and `"annotations"`. ALWAYS spread from\n * `ANALYTICS_CHART_DEFAULT_STATE` and map over `layers` to override. Do NOT\n * hand-build the layer array from scratch — you will miss fields and crash.\n *\n * ```ts\n * // Default state shape (for reference — spread from the constant, don\'t copy):\n * {\n * view: "timeseries",\n * layers: [\n * { id: "primary", kind: "primary", label: "Current", visible: true, color: "#2563eb",\n * segmented: false, type: "area", strokeStyle: "solid", fillOpacity: 0.22, inProgressFromIndex: null },\n * { id: "compare", kind: "compare", label: "Previous period", visible: true, color: "#f59e0b",\n * segmented: false, type: "line", strokeStyle: "dashed", inProgressFromIndex: null },\n * { id: "annotations", kind: "annotations", label: "Annotations", visible: true, color: "#f59e0b" },\n * ],\n * xFormatKind: { type: "datetime", style: "short" },\n * yFormatKind: { type: "short" },\n * showGrid: true, showXAxis: true, showYAxis: true,\n * zoomRange: null, pinnedIndex: null,\n * }\n * ```\n *\n * ## onChange — CRITICAL, get this right\n *\n * `onChange` fires with an `AnalyticsChartState` object — NOT your custom\n * wrapper. If you store chart data and state together, `onChange` MUST only\n * update the state part. Keep data and state in SEPARATE hooks:\n *\n * ```tsx\n * // WRONG — overwrites your data with a bare state object, crashes on next render:\n * const [combined, setCombined] = React.useState({ data: [], state: ANALYTICS_CHART_DEFAULT_STATE });\n * <AnalyticsChart data={combined.data} state={combined.state} onChange={setCombined} />\n *\n * // RIGHT — two hooks:\n * const [data, setData] = React.useState([]);\n * const [chartState, setChartState] = React.useState({ ...ANALYTICS_CHART_DEFAULT_STATE });\n * <AnalyticsChart data={data} state={chartState} onChange={setChartState} />\n * ```\n *\n * NEVER pass a setter that manages a combined `{ data, state }` object directly to `onChange`.\n *\n * ## Common patterns\n *\n * ### 1. Simplest — one area layer, no compare\n *\n * ```tsx\n * const data = rows.map(r => ({ ts: r.bucketTs, values: { primary: r.count } }));\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l =>\n * l.kind === "compare" ? { ...l, visible: false } : l\n * ),\n * });\n * <DesignChartCard title="Signups" description="Last 30 days">\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * </DesignChartCard>\n * ```\n *\n * ### 2. Current vs previous period (compare)\n *\n * ```tsx\n * const data = rows.map(r => ({\n * ts: r.bucketTs,\n * values: { primary: r.thisPeriod, compare: r.lastPeriod },\n * }));\n * const [state, setState] = React.useState(ANALYTICS_CHART_DEFAULT_STATE);\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ### 3. Stacked bar with breakdown (segmented)\n *\n * ```tsx\n * const regions = [{ key: "us", label: "US" }, { key: "eu", label: "EU" }];\n * const segments = rows.map(r => [r.signupsUs, r.signupsEu]); // MUST sum to primary value per row\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l => {\n * if (l.kind === "primary") return { ...l, type: "bar", segmented: true, segments, segmentSeries: regions };\n * if (l.kind === "compare") return { ...l, visible: false };\n * return l;\n * }),\n * });\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ### 4. Two metrics on one chart (revenue bars + signups area)\n *\n * ```tsx\n * // IMPORTANT: metrics share one y-axis, so normalize into the same range.\n * const data = rows.map(r => ({\n * ts: r.bucketTs,\n * values: { revenue: r.revenueCents / 100, signups: r.signups },\n * }));\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l => {\n * if (l.kind === "primary") return { ...l, id: "revenue", label: "Revenue", type: "bar" };\n * if (l.kind === "compare") return { ...l, id: "signups", label: "Sign-ups", type: "area", visible: true };\n * return l;\n * }),\n * });\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ### 5. Pie view (distribution / breakdown, non-time-series)\n *\n * Pie needs one data point, `segments` with one row, and `segmentSeries` with labels:\n *\n * ```tsx\n * const categories = [{ key: "verified", label: "Verified" }, { key: "unverified", label: "Unverified" }, { key: "anonymous", label: "Anonymous" }];\n * const total = verified + unverified + anonymous;\n * const data = [{ ts: 0, values: { primary: total } }];\n * const segments = [[verified, unverified, anonymous]]; // one row; values sum to total\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * view: "pie",\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l => {\n * if (l.kind === "primary") return { ...l, segmented: true, segments, segmentSeries: categories };\n * if (l.kind === "compare") return { ...l, visible: false };\n * return l;\n * }),\n * });\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * ```\n *\n * ## Segment data contract (MUST follow when segmented: true)\n *\n * `segments` is a 2D array: `segments[dayIndex][categoryIndex] = number`.\n *\n * - Outer length MUST equal `data.length` (one row per Point).\n * - Inner length MUST equal `segmentSeries.length` (one value per category).\n * - Each row MUST sum to `data[dayIndex].values[layerId]` (the layer\'s total for that day).\n * - `segmentSeries` defines the category labels, in the SAME order as segment columns.\n *\n * Example: if `segmentSeries = [{ key: "us", label: "US" }, { key: "eu", label: "EU" }]`\n * and `data[0].values.primary = 420`, then `segments[0]` must be `[usValue, euValue]`\n * where `usValue + euValue === 420`. If rows don\'t sum to the layer total, stacked bars\n * will render incorrectly (gaps or overflow).\n *\n * ## Palette\n *\n * AnalyticsChart auto-generates segment colors (blue shades for primary, amber for\n * compare). You do NOT need to pass a palette prop — it just works. Segment keys\n * can be any string; the component sanitizes them for CSS purposes internally.\n *\n * ## Layer quick reference\n *\n * - Layer `type` options: `"area" | "line" | "bar"`\n * - Layer `kind` values: `"primary" | "compare" | "annotations"`\n * - To hide a layer: `{ ...l, visible: false }`\n * - To switch chart type: `{ ...l, type: "bar" }` (or `"line"`, `"area"`)\n * - To rename a layer: `{ ...l, id: "myMetric", label: "My Metric" }`\n *\n * ## Formatting (xFormatKind / yFormatKind on state)\n *\n * - `{ type: "numeric" }` — plain number\n * - `{ type: "short" }` — abbreviated (1.2K, 3.4M) — good default for y-axis\n * - `{ type: "currency", currency: "USD", divisor: 100 }` — for cents → dollars\n * - `{ type: "percent", source: "fraction" }` — for 0..1 → "45.2%"\n * - `{ type: "datetime", style: "short" }` — good default for x-axis timestamps\n *\n * Set these on state:\n * `{ ...ANALYTICS_CHART_DEFAULT_STATE, yFormatKind: { type: "currency", currency: "USD" } }`\n *\n * ## Scale warning\n *\n * All visible layers share ONE y-axis. If magnitudes differ wildly (e.g. revenue\n * cents vs signup count), normalize the data BEFORE building Points. If\n * normalization is impossible, use two separate `AnalyticsChart` instances stacked\n * vertically.\n */\ndeclare function AnalyticsChart({\n data: fullData,\n annotations: fullAnnotations,\n state,\n onChange,\n onAnnotationCreate,\n strings: stringsOverride,\n palette: paletteOverride,\n renderTooltip,\n plotMargin,\n yAxisWidth,\n yDomainPadding,\n pie,\n valueFormatter\n}: AnalyticsChartProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/default-analytics-chart-tooltip.d.ts\n/** Trend pill — small rounded badge with an up/down/flat arrow, a signed\n * percentage, and an optional trailing label. Shared between the default\n * tooltip, the pie view, and the demo panels (which re-export it). */\ndeclare function TrendPill({\n delta,\n label,\n size\n}: {\n delta: AnalyticsChartDelta;\n label?: string;\n size?: "sm" | "md";\n}): react_jsx_runtime0.JSX.Element;\ntype AnalyticsChartTooltipSegmentRow = {\n key: string;\n label: string;\n value: number; /** Light-theme color for the dot / swatch. */\n color: string; /** Dark-theme color for the dot / swatch. */\n colorDark: string;\n};\ntype AnalyticsChartTooltipLayerView = {\n /** Stable layer id (e.g. `"signups"`, `"previous"`). */id: string; /** Consumer-provided layer label. */\n label: string; /** Resolved layer color (light theme). */\n color: string; /** Resolved layer color (dark theme). */\n colorDark: string;\n /** Flat total for this layer at the hovered index. Populated regardless\n * of segmentation so consumers can render the same number in either mode. */\n total: number; /** True iff this layer is rendered as a stacked breakdown. */\n segmented: boolean;\n /** Per-segment rows — empty when `segmented === false`. Order matches\n * `segmentSeries`. */\n segments: AnalyticsChartTooltipSegmentRow[];\n};\ntype AnalyticsChartTooltipContext = {\n /** Index into the visible window. */activeIndex: number; /** Raw point at `activeIndex` — convenient for `.ts` access. */\n point: Point; /** True when the tooltip is pinned (via click) and stable under hover. */\n isPinned: boolean; /** Primary layer view or null when the primary layer is hidden. */\n primary: AnalyticsChartTooltipLayerView | null; /** Compare layer view or null when the compare layer is hidden. */\n compare: AnalyticsChartTooltipLayerView | null;\n /** Flat-mode delta between primary and compare totals. Null when either\n * side is hidden. Consumers should feed this into their trend pill. */\n delta: AnalyticsChartDelta | null; /** Pre-bound value formatter for y-axis values. */\n formatValue: (v: number) => string; /** Pre-bound formatter for x-axis values. */\n formatDate: (ts: number) => string; /** Resolved strings — already merged with defaults. */\n strings: AnalyticsChartStrings;\n};\ntype DefaultAnalyticsChartTooltipProps = {\n ctx: AnalyticsChartTooltipContext;\n};\n/** The default tooltip body. The tooltip is rendered as an\n * absolutely-positioned sibling of `<ChartContainer>`, which means it sits\n * OUTSIDE the `[data-chart=…]` subtree that scopes shadcn\'s `--color-${key}`\n * CSS variables. We therefore cannot reference those variables for segment\n * swatches — instead, every swatch uses a single span with `--c-l`/`--c-d`\n * custom properties + Tailwind arbitrary variants so one DOM element covers\n * both themes. */\ndeclare function DefaultAnalyticsChartTooltip({\n ctx\n}: DefaultAnalyticsChartTooltipProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/analytics-chart/format.d.ts\ndeclare const FORMAT_KIND_TYPES: FormatKindType[];\ndeclare const DEFAULT_FORMAT_KIND: { [K in FormatKindType]: Extract<FormatKind, {\n type: K;\n}> };\n/** `short` uses compact notation (e.g. `1.2K`), not a custom `k` suffix. */\ndeclare function formatValue(value: number, kind: FormatKind): string;\ndeclare function formatDelta(current: number, previous: number): AnalyticsChartDelta;\n//#endregion\n\n//#region src/components/analytics-chart/palette.d.ts\ndeclare const ANALYTICS_CHART_DEFAULT_PALETTE: AnalyticsChartPalette;\ndeclare function resolveAnalyticsChartPalette(override: Partial<AnalyticsChartPalette> | undefined): AnalyticsChartPalette;\n/** Expand a ramp into N colors for a given theme. */\ndeclare function buildRampColors(ramp: AnalyticsChartSegmentRamp, count: number, theme: "light" | "dark"): string[];\n/** Per-segment light/dark colors for `ChartConfig.theme` (SVG only; siblings use inline vars). */\ndeclare function buildSegmentThemeMap(series: readonly AnalyticsChartSeries[], ramp: AnalyticsChartSegmentRamp): Record<string, {\n light: string;\n dark: string;\n}>;\n//#endregion\n\n//#region src/components/analytics-chart/render-data-series.d.ts\n/** Area layers use fill-only `<Area>` plus `<Line>` for the top edge (not Recharts\' closed-path stroke). */\ntype RenderDataSeriesArgs = {\n layer: AnalyticsChartDataLayer;\n segmented: boolean;\n segmentSeries: readonly AnalyticsChartSeries[];\n segKey: (segKey: string) => string;\n stackId: string;\n strokeDasharray: string | undefined;\n segmentedStrokeDasharray: string | undefined;\n fillOpacity: number;\n segmentedFillOpacity: number;\n baseOpacity?: number;\n strokeWidth: number;\n segmentedStrokeWidth: number;\n inProgressKeys: {\n solid: string;\n dashed: string;\n } | null;\n};\n/** Return value must be spread into `<ComposedChart>` as siblings — do not wrap in `<Fragment>`. */\ndeclare function renderDataSeries(args: RenderDataSeriesArgs): ReactNode[];\n//#endregion\n\n//#region src/components/analytics-chart/state.d.ts\ndeclare const STROKE_DASHARRAY: Record<AnalyticsChartStrokeStyle, string | undefined>;\ndeclare const EMPTY_SERIES: readonly AnalyticsChartSeries[];\ndeclare const EMPTY_MATRIX: readonly (readonly number[])[];\n/** Generic non-segmented defaults; demos swap in segment data. */\ndeclare const ANALYTICS_CHART_DEFAULT_LAYERS: AnalyticsChartLayers;\n/**\n * Default state for `AnalyticsChart`. ALWAYS spread from this when\n * initializing state; never build the state object by hand. Ships with\n * three pre-configured layers (primary, compare, annotations) — map over\n * `layers` to override individual ones.\n *\n * ```tsx\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l =>\n * l.kind === "compare" ? { ...l, visible: false } : l\n * ),\n * });\n * ```\n *\n * See the JSDoc on `AnalyticsChart` for the full contract, examples, and\n * the segment data format.\n */\ndeclare const ANALYTICS_CHART_DEFAULT_STATE: AnalyticsChartState;\ndeclare function findPrimaryLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined;\ndeclare function findCompareLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined;\ndeclare function findAnnotationsLayer(layers: AnalyticsChartLayers): AnalyticsChartAnnotationsLayer | undefined;\ndeclare function findLayerById(layers: AnalyticsChartLayers, id: string): AnalyticsChartLayer | undefined;\ndeclare function isAnalyticsChartDataLayer(l: AnalyticsChartLayer): l is AnalyticsChartDataLayer;\ndeclare function isTimeseriesState(state: AnalyticsChartState): state is AnalyticsChartTimeseriesState;\n/** Replace a single layer (looked up by id) with a new layer object. */\ndeclare function setLayerById(layers: AnalyticsChartLayers, id: string, next: AnalyticsChartLayer): AnalyticsChartLayers;\n/** Shallow-patch fields on a layer by id. The patch type is deliberately\n * loose — callers are trusted to supply only fields the layer\'s\n * `kind`/`type` actually owns. */\ndeclare function patchLayerById(layers: AnalyticsChartLayers, id: string, patch: Record<string, unknown>): AnalyticsChartLayers;\ntype ResolvedDataLayerStyle = {\n color: string;\n type: AnalyticsChartLayerType;\n strokeStyle: AnalyticsChartStrokeStyle;\n fillOpacity: number;\n};\ndeclare function resolveDataLayerStyle(layer: AnalyticsChartDataLayer): ResolvedDataLayerStyle;\n/** Translate a layer\'s absolute `inProgressFromIndex` into a local index\n * inside the visible window. Returns `null` when the marker sits beyond\n * the visible window, `0` when it sits before the window (whole window\n * is dashed), or the clamped local index otherwise. */\ndeclare function computeLocalInProgressIdx(absIdx: number | null | undefined, visibleStart: number, visibleEnd: number): number | null;\n//#endregion\n\n//#region src/components/analytics-chart/strings.d.ts\ntype AnalyticsChartStrings = {\n /** Reset-zoom badge in the top-right corner when `state.zoomRange` is set. */resetZoom: string; /** Header label above the timestamps in the live range-brush popup. */\n rangeLabel: string; /** Formatted day-count suffix used by the brush + action-bar. */\n daysShort: (days: number) => string; /** "Zoom in" button inside the committed-range action bar. */\n zoomIn: string; /** "Annotate" button inside the committed-range action bar. */\n annotate: string; /** Placeholder for the annotation label input. */\n annotationPlaceholder: string; /** `aria-label` for the annotation label input. */\n annotationLabelAria: string; /** Save button in the annotation form. */\n save: string; /** Cancel button in the annotation form. */\n cancel: string; /** `aria-label` for the X button that clears the committed range. */\n clearSelection: string; /** Pinned badge shown in the tooltip header when the tooltip is pinned. */\n pinnedBadge: string; /** "Δ vs prev" row label in the tooltip (both segmented and flat modes). */\n deltaVsPrev: string;\n /** Suffix appended to a layer\'s label in the per-layer totals section\n * (e.g. "Sign-ups" → "Sign-ups total"). */\n layerTotalSuffix: string; /** Hint row shown in the tooltip while it is floating (not pinned). */\n hintClickToPin: string; /** Hint row shown in the tooltip while it is pinned. */\n hintClickAnywhereUnpin: string; /** Center-stat heading shown in the pie when no segment is hovered. */\n pieTotalCenter: string; /** Label on the TrendPill in the pie center. */\n pieVsPrev: string; /** `aria-label` for the PieChart SVG. */\n pieAriaLabel: (ctx: {\n segmentCount: number;\n windowDays: number;\n }) => string; /** Percentage-of-total caption shown under an active pie slice. */\n piePercentOfTotal: (pct: number) => string;\n};\ndeclare const ANALYTICS_CHART_DEFAULT_STRINGS: AnalyticsChartStrings;\n/** Shallow merge — every field is a primitive or a flat function. */\ndeclare function resolveAnalyticsChartStrings(override: Partial<AnalyticsChartStrings> | undefined): AnalyticsChartStrings;\n//#endregion\n\n//#region src/components/analytics-chart/types.d.ts\n/** Time-series point. `values` is keyed by layer id. */\ntype Point = {\n ts: number;\n values: Record<string, number>;\n};\n/** Missing or non-finite values become 0. */\ndeclare function pointValue(p: Point, id: string): number;\n/** Sanitize a string into a valid CSS `<ident>` token.\n * Replaces characters not allowed in CSS identifiers (like `$`, spaces,\n * slashes, dots) with underscores. Used to build safe `var(--color-xxx)`\n * custom property names from arbitrary segment keys. */\ndeclare function cssIdent(raw: string): string;\ntype Annotation = {\n index: number;\n label: string;\n description: string;\n};\n/** Breakdown category definition — `{ key, label }` tuple. */\ntype AnalyticsChartSeries = {\n key: string;\n label: string;\n};\ntype FormatKindType = "numeric" | "short" | "currency" | "duration" | "datetime" | "percent";\ntype FormatKindNumeric = {\n type: "numeric"; /** Locale used for grouping and digit separators. Defaults to "en-US". */\n locale?: string; /** Fixed decimal places (0-4). Defaults to 0. */\n decimals?: number;\n};\ntype FormatKindShort = {\n type: "short"; /** Decimal places after the unit suffix (1.2K vs 1.20K). Defaults to 1. */\n precision?: number;\n locale?: string;\n};\ntype FormatKindCurrency = {\n type: "currency"; /** ISO 4217 code. Defaults to "USD". */\n currency?: string; /** Divisor applied before formatting — e.g. 100 for cents → dollars. Defaults to 1. */\n divisor?: number;\n locale?: string;\n};\ntype FormatKindDuration = {\n type: "duration"; /** Source unit of the input value. Defaults to "s". */\n unit?: "ms" | "s" | "m" | "h"; /** Show the smallest unit even when zero. Defaults to false. */\n showZero?: boolean;\n};\ntype FormatKindDatetime = {\n type: "datetime"; /** Render style. Defaults to "short". */\n style?: "short" | "long" | "iso" | "relative";\n locale?: string;\n};\ntype FormatKindPercent = {\n type: "percent";\n /** How to interpret the input value:\n * - "fraction" → 0..1 → multiply by 100 (default)\n * - "basis" → 0..10000 → divide by 100\n * - "whole" → 0..100 → no scaling\n */\n source?: "fraction" | "basis" | "whole"; /** Decimal places. Defaults to 1. */\n decimals?: number;\n};\ntype FormatKind = FormatKindNumeric | FormatKindShort | FormatKindCurrency | FormatKindDuration | FormatKindDatetime | FormatKindPercent;\ntype AnalyticsChartView = "timeseries" | "pie";\ntype AnalyticsChartLayerType = "line" | "area" | "bar";\ntype AnalyticsChartStrokeStyle = "solid" | "dashed" | "dotted";\ntype AnalyticsChartDataLayerCommon = {\n id: string;\n kind: "primary" | "compare";\n label: string;\n visible: boolean;\n color: string;\n segmented: boolean;\n /** Per-day per-category values. Outer index is the day (matches the\n * chart data array index); inner index is the category (matches\n * `segmentSeries`). Rows should sum to `point.values[layer.id]`. */\n segments?: readonly (readonly number[])[];\n /** Breakdown category definitions ordered to match the inner index of\n * `segments`. */\n segmentSeries?: readonly AnalyticsChartSeries[];\n /** Absolute index into the full data array at which this layer\'s values\n * become "in progress" (incomplete and still changing). Points from this\n * index onward render with a dashed overlay so users don\'t panic at a\n * half-filled bucket. Applies to line and area rendering only. */\n inProgressFromIndex?: number | null;\n};\ntype AnalyticsChartLineLayer = AnalyticsChartDataLayerCommon & {\n type: "line";\n strokeStyle: AnalyticsChartStrokeStyle;\n};\ntype AnalyticsChartAreaLayer = AnalyticsChartDataLayerCommon & {\n type: "area";\n strokeStyle: AnalyticsChartStrokeStyle;\n fillOpacity: number;\n};\ntype AnalyticsChartBarLayer = AnalyticsChartDataLayerCommon & {\n type: "bar";\n fillOpacity: number;\n};\ntype AnalyticsChartDataLayer = AnalyticsChartLineLayer | AnalyticsChartAreaLayer | AnalyticsChartBarLayer;\ntype AnalyticsChartAnnotationsLayer = {\n id: string;\n kind: "annotations";\n label: string;\n visible: boolean;\n color: string;\n};\ntype AnalyticsChartLayer = AnalyticsChartDataLayer | AnalyticsChartAnnotationsLayer;\ntype AnalyticsChartLayers = readonly AnalyticsChartLayer[];\ntype AnalyticsChartTimeseriesState = {\n view: "timeseries";\n layers: AnalyticsChartLayers; /** Format applied to every x-axis value. Defaults to `datetime / short`. */\n xFormatKind: FormatKind; /** Format applied to every y-axis value. Defaults to `short`. */\n yFormatKind: FormatKind;\n showGrid: boolean;\n showXAxis: boolean;\n showYAxis: boolean;\n zoomRange: [number, number] | null;\n pinnedIndex: number | null;\n};\ntype AnalyticsChartPieState = {\n view: "pie";\n layers: AnalyticsChartLayers;\n xFormatKind: FormatKind;\n yFormatKind: FormatKind;\n};\ntype AnalyticsChartState = AnalyticsChartTimeseriesState | AnalyticsChartPieState;\ntype AnalyticsChartDelta = {\n pct: number | null;\n sign: "up" | "down" | "flat" | "na";\n};\n/** Grouped pie config — collapses the formerly-separate\n * `pieInnerRadius` / `pieOuterRadius` / `pieCompareInnerRadius` /\n * `pieCompareOuterRadius` / `pieContainerClassName` props into one object. */\ntype AnalyticsChartPieProps = {\n innerRadius?: number;\n outerRadius?: number;\n compareInnerRadius?: number;\n compareOuterRadius?: number;\n className?: string;\n};\ntype AnalyticsChartSegmentRamp = {\n kind: "procedural"; /** HSL hue (0-360). */\n hue: number; /** HSL saturation percent (0-100). */\n sat: number; /** Lightness range `[start, end]` for the light theme (0-100). */\n shadeRangeLight: [number, number]; /** Lightness range `[start, end]` for the dark theme (0-100). */\n shadeRangeDark: [number, number];\n} | {\n kind: "explicit"; /** Concrete light-theme color list. Indexed by segment. */\n light: readonly string[]; /** Concrete dark-theme color list. Indexed by segment. */\n dark: readonly string[];\n};\ntype AnalyticsChartPalette = {\n /** Color ramp for the primary data layer (current period). */primary: AnalyticsChartSegmentRamp; /** Color ramp for the compare data layer (previous period). */\n compare: AnalyticsChartSegmentRamp;\n};\n//#endregion\n\n//#region src/components/badge.d.ts\ntype DesignBadgeColor = "blue" | "cyan" | "purple" | "green" | "orange" | "red";\ntype DesignBadgeSize = "sm" | "md";\n/** At least one of showLabel or showIcon must be true. */\ntype DesignBadgeContentMode = "both" | "text" | "icon";\ntype DesignBadgeProps = {\n label: string;\n color: DesignBadgeColor;\n icon?: React.ElementType;\n size?: DesignBadgeSize; /** What to display: "both" (default), "text" (label only), or "icon" (icon only; requires icon prop). */\n contentMode?: DesignBadgeContentMode;\n};\n/**\n * Small pill used for status tags, roles, categories, and other short\n * labels. Not a variant-based component — pick a semantic `color` and\n * optionally pass an `icon` (as a component type, not a rendered node).\n *\n * ```tsx\n * <DesignBadge label="Verified" color="green" icon={CheckIcon} />\n * <DesignBadge label="Beta" color="purple" />\n * <DesignBadge label="Error" color="red" size="sm" />\n * ```\n *\n * Notes:\n * - Props are `label` + `color`, NOT `variant` + children.\n * - `color` is one of: `"blue" | "cyan" | "purple" | "green" | "orange" | "red"`.\n * - `icon` is optional but, if set via `contentMode: "icon"`, is required.\n */\ndeclare function DesignBadge({\n label,\n color,\n icon,\n size,\n contentMode\n}: DesignBadgeProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/button.d.ts\ndeclare const designButtonVariants: (props?: ({\n variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "plain" | null | undefined;\n size?: "default" | "sm" | "lg" | "icon" | null | undefined;\n} & class_variance_authority_types0.ClassProp) | undefined) => string;\ntype DesignOriginalButtonProps = {\n asChild?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof designButtonVariants>;\ntype DesignButtonProps = {\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n loading?: boolean;\n loadingStyle?: "spinner" | "disabled";\n} & DesignOriginalButtonProps;\n/**\n * Standard button. Variants: `default | destructive | outline | secondary | ghost | link | plain`.\n * Sizes: `default | sm | lg | icon`.\n *\n * ```tsx\n * <DesignButton variant="default" onClick={handleSave}>Save</DesignButton>\n * <DesignButton variant="outline" size="sm" onClick={handleCancel}>Cancel</DesignButton>\n * <DesignButton variant="ghost" size="icon"><PlusIcon className="h-4 w-4" /></DesignButton>\n * ```\n *\n * Pass an async `onClick` and the button will automatically show a spinner\n * while the promise is pending (set `loadingStyle="disabled"` if you prefer\n * a simple disabled state instead).\n */\ndeclare const DesignButton: React.FC<{\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n loading?: boolean;\n loadingStyle?: "spinner" | "disabled";\n} & {\n asChild?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({\n variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "plain" | null | undefined;\n size?: "default" | "sm" | "lg" | "icon" | null | undefined;\n} & class_variance_authority_types0.ClassProp) | undefined) => string> & {\n ref?: React.Ref<HTMLButtonElement> | undefined;\n}>;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/card.d.ts\n/**\n * Returns `true` when the calling component is rendered inside a DesignCard.\n * Useful for deriving a glassmorphic default.\n */\ndeclare function useInsideDesignCard(): boolean;\n/**\n * Resolve the effective glassmorphic value.\n * - If the caller passed an explicit boolean → honour it.\n * - Otherwise → fall back to whether we\'re inside a DesignCard.\n */\ndeclare function useGlassmorphicDefault(explicit: boolean | undefined): boolean;\ntype DesignCardGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignCardBaseProps = {\n glassmorphic?: boolean;\n gradient?: DesignCardGradient;\n contentClassName?: string;\n} & Omit<React.ComponentProps<typeof Card>, "title">;\ntype WithTitleProps = {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n icon: React.ElementType;\n actions?: React.ReactNode;\n};\ntype WithoutTitleProps = {\n title?: never;\n subtitle?: never;\n icon?: never;\n actions?: never;\n};\ntype DesignCardProps = DesignCardBaseProps & (WithTitleProps | WithoutTitleProps);\n/**\n * General-purpose card for grouping related content: section headers,\n * description blocks, chart-less panels, etc. If the content is a\n * big-number metric, use `DesignMetricCard` instead. If it contains a\n * chart, wrap it in `DesignChartCard`.\n *\n * Two shapes, picked automatically by the props you pass:\n *\n * ```tsx\n * // With a header (title requires icon):\n * <DesignCard title="Recent activity" icon={ActivityIcon}>\n * ...body...\n * </DesignCard>\n *\n * // Body-only (no header):\n * <DesignCard>\n * <h2 className="text-2xl font-semibold">Dashboard</h2>\n * <p className="text-muted-foreground">Overview of your user base</p>\n * </DesignCard>\n * ```\n *\n * Rules:\n * - DO NOT add padding classes (`p-6`, `p-5`, etc.) to `className` — the\n * component already has built-in padding and extra padding will look wrong.\n * - If you set `title`, you MUST also set `icon`. The TS types enforce this,\n * but writing `title` without `icon` will fail.\n * - Body-only cards (no `title`) automatically go transparent in dark mode.\n */\ndeclare function DesignCard({\n title,\n subtitle,\n icon: Icon,\n actions,\n glassmorphic: glassmorphicProp,\n gradient,\n children,\n className,\n contentClassName,\n ...props\n}: DesignCardProps): react_jsx_runtime0.JSX.Element;\ntype DesignCardTintProps = {\n gradient: DesignCardGradient;\n} & React.ComponentProps<"div">;\ndeclare function DesignCardTint({\n gradient,\n className,\n children,\n ...props\n}: DesignCardTintProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/chart-card.d.ts\ntype DesignChartCardGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignChartCardProps = {\n gradient?: DesignChartCardGradient;\n title?: React.ReactNode;\n description?: React.ReactNode;\n} & Omit<React.ComponentProps<"div">, "title">;\n/**\n * Card chrome (title + description + border) for a chart. Wrap every\n * `AnalyticsChart` in this so the chart has context. Also used around raw\n * Recharts components paired with `DesignChartContainer` for non-time-series\n * fallbacks.\n *\n * ```tsx\n * // Time-series chart (preferred):\n * <DesignChartCard title="Signups" description="Last 30 days">\n * <AnalyticsChart data={data} state={state} onChange={setState} />\n * </DesignChartCard>\n *\n * // Non-time-series fallback (static ranking, distribution, etc.):\n * <DesignChartCard title="Top referrers" description="This month">\n * <DesignChartContainer config={chartConfig} maxHeight={300}>\n * <Recharts.BarChart data={data}>\n * <Recharts.CartesianGrid strokeDasharray="3 3" stroke="hsl(var(--border))" />\n * <Recharts.XAxis dataKey="name" tick={{ fill: \'hsl(var(--muted-foreground))\', fontSize: 12 }} />\n * <Recharts.YAxis tick={{ fill: \'hsl(var(--muted-foreground))\', fontSize: 12 }} />\n * <Recharts.Tooltip content={<DesignChartTooltipContent />} />\n * <Recharts.Bar dataKey="count" fill={getDesignChartColor(0)} radius={[4, 4, 0, 0]} />\n * </Recharts.BarChart>\n * </DesignChartContainer>\n * </DesignChartCard>\n * ```\n *\n * `chartConfig` for `DesignChartContainer` maps each `dataKey` to its label and color:\n * `{ count: { label: "Count", color: getDesignChartColor(0) } }`.\n */\ndeclare function DesignChartCard({\n gradient,\n title,\n description,\n className,\n children,\n ...props\n}: DesignChartCardProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/chart-container.d.ts\ndeclare const THEMES: {\n readonly light: "";\n readonly dark: ".dark";\n};\ntype DesignChartConfig = { [k in string]: {\n label?: React$1.ReactNode;\n icon?: React$1.ComponentType;\n} & ({\n color?: string;\n theme?: never;\n} | {\n color?: never;\n theme: Record<keyof typeof THEMES, string>;\n}) };\ntype ChartContextProps = {\n config: DesignChartConfig;\n};\ndeclare function useDesignChart(): ChartContextProps;\ndeclare function DesignChartStyle({\n id,\n config\n}: {\n id: string;\n config: DesignChartConfig;\n}): react_jsx_runtime0.JSX.Element | null;\ndeclare const DesignChartContainer: React$1.ForwardRefExoticComponent<Omit<React$1.ClassAttributes<HTMLDivElement> & React$1.HTMLAttributes<HTMLDivElement> & {\n maxHeight?: number;\n config: DesignChartConfig;\n children: React$1.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];\n}, "ref"> & React$1.RefAttributes<HTMLDivElement>>;\n/**\n * Helper to extract item config from a Recharts payload object.\n */\ndeclare function getPayloadConfigFromPayload(config: DesignChartConfig, payload: unknown, key: string): ({\n label?: React$1.ReactNode;\n icon?: React$1.ComponentType;\n} & ({\n color?: string;\n theme?: never;\n} | {\n color?: never;\n theme: Record<keyof typeof THEMES, string>;\n})) | undefined;\n//#endregion\n\n//#region src/components/chart-legend.d.ts\ndeclare const DesignChartLegendContent: React$1.ForwardRefExoticComponent<Omit<React$1.ClassAttributes<HTMLDivElement> & React$1.HTMLAttributes<HTMLDivElement> & Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {\n hideIcon?: boolean;\n nameKey?: string;\n}, "ref"> & React$1.RefAttributes<HTMLDivElement>>;\n//#endregion\n\n//#region src/components/chart-theme.d.ts\ntype DesignChartColorEntry = {\n light: string;\n dark: string;\n};\n/**\n * Design-system-consistent chart colors that work in light and dark mode.\n * Maps to the gradient system used across the dashboard design components.\n */\ndeclare const DESIGN_CHART_COLORS: readonly DesignChartColorEntry[];\ntype DesignChartColorName = "blue" | "cyan" | "purple" | "green" | "orange" | "red";\n/**\n * Get a chart color by index (wraps around) or by name.\n */\ndeclare function getDesignChartColor(indexOrName: number | DesignChartColorName, mode?: "light" | "dark"): string;\n/**\n * Recharts-compatible grid/axis styling constants that match the design system.\n */\ndeclare const DESIGN_CHART_GRID_COLOR = "hsl(0 0% 50% / 0.12)";\ndeclare const DESIGN_CHART_AXIS_TICK_STYLE: {\n readonly fill: "hsl(0 0% 50% / 0.5)";\n readonly fontSize: 11;\n};\n//#endregion\n\n//#region src/components/chart-tooltip.d.ts\ndeclare const DesignChartTooltip: typeof RechartsPrimitive.Tooltip;\ndeclare const DesignChartTooltipContent: React$1.ForwardRefExoticComponent<Omit<RechartsPrimitive.DefaultTooltipContentProps<recharts_types_component_DefaultTooltipContent0.ValueType, recharts_types_component_DefaultTooltipContent0.NameType> & {\n accessibilityLayer?: boolean;\n active?: boolean | undefined;\n includeHidden?: boolean | undefined;\n allowEscapeViewBox?: recharts_types_util_types0.AllowInDimension;\n animationDuration?: recharts_types_util_types0.AnimationDuration;\n animationEasing?: recharts_types_util_types0.AnimationTiming;\n content?: recharts_types_component_Tooltip0.ContentType<recharts_types_component_DefaultTooltipContent0.ValueType, recharts_types_component_DefaultTooltipContent0.NameType> | undefined;\n coordinate?: Partial<recharts_types_util_types0.Coordinate>;\n cursor?: boolean | React$1.ReactElement | React$1.SVGProps<SVGElement>;\n filterNull?: boolean;\n defaultIndex?: number;\n isAnimationActive?: boolean;\n offset?: number;\n payloadUniqBy?: recharts_types_util_payload_getUniqPayload0.UniqueOption<recharts_types_component_DefaultTooltipContent0.Payload<recharts_types_component_DefaultTooltipContent0.ValueType, recharts_types_component_DefaultTooltipContent0.NameType>> | undefined;\n position?: Partial<recharts_types_util_types0.Coordinate>;\n reverseDirection?: recharts_types_util_types0.AllowInDimension;\n shared?: boolean;\n trigger?: "hover" | "click";\n useTranslate3d?: boolean;\n viewBox?: recharts_types_util_types0.CartesianViewBox;\n wrapperStyle?: React$1.CSSProperties;\n} & React$1.ClassAttributes<HTMLDivElement> & React$1.HTMLAttributes<HTMLDivElement> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: "line" | "dot" | "dashed";\n nameKey?: string;\n labelKey?: string;\n}, "ref"> & React$1.RefAttributes<HTMLDivElement>>;\n//#endregion\n\n//#region src/components/cursor-blast-effect.d.ts\ntype CursorBlastEffectProps = {\n /** Lifetime of each blast animation in ms. Default: 720 */blastLifetimeMs?: number; /** Maximum number of concurrent active blasts. Default: 18 */\n maxActiveBlasts?: number; /** Minimum rapid clicks in the time window to trigger a blast. Default: 3 */\n rageClickThreshold?: number; /** Time window (ms) for counting rage clicks. Default: 600 */\n rageClickWindowMs?: number; /** Max distance (px) between clicks to count as same-spot rage clicking. Default: 60 */\n rageClickRadiusPx?: number;\n /**\n * When provided, the blast effect is scoped to this container element.\n * Clicks are only detected within the container and blasts are positioned\n * relative to the container rather than the viewport.\n */\n containerRef?: React.RefObject<HTMLElement | null>;\n};\ndeclare function CursorBlastEffect({\n blastLifetimeMs,\n maxActiveBlasts,\n rageClickThreshold,\n rageClickWindowMs,\n rageClickRadiusPx,\n containerRef\n}?: CursorBlastEffectProps): react_jsx_runtime0.JSX.Element | null;\n//#endregion\n\n//#region src/components/data-grid/data-grid-sizing.d.ts\ndeclare const DEFAULT_MAX_COL_WIDTH = 800;\ndeclare const DEFAULT_COL_WIDTH = 150;\n/** Effective minimum column width. When `col.minWidth` is unset, derive\n * one from the header label so it never gets clipped during resize. */\ndeclare function getEffectiveMinWidth<TRow>(col: DataGridColumnDef<TRow>): number;\ndeclare function getEffectiveMaxWidth<TRow>(col: DataGridColumnDef<TRow>): number;\ndeclare function clampColumnWidth<TRow>(col: DataGridColumnDef<TRow>, width: number): number;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/data-grid/data-grid-toolbar.d.ts\ndeclare function DataGridToolbar<TRow>({\n ctx,\n extra,\n extraLeading,\n hideQuickSearch\n}: {\n ctx: DataGridToolbarContext<TRow>;\n /** Extra content rendered inside the toolbar row, to the left of the\n * built-in columns / export actions. Use this to add table-specific\n * affordances (refresh, custom toggles, row counts) without giving up\n * the default actions. */\n extra?: React.ReactNode;\n /** Extra content rendered at the START of the toolbar row — occupies\n * the same position as the built-in quick search (after it, if the\n * quick search is visible). Use this together with `hideQuickSearch`\n * to fully replace the quick search with a custom input, e.g. an\n * AI-powered search bar. */\n extraLeading?: React.ReactNode;\n /** Whether to hide the built-in quick-search input. When `true`,\n * callers are expected to provide their own search UI via\n * `extraLeading`. */\n hideQuickSearch?: boolean;\n}): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/data-grid/data-grid.d.ts\ndeclare function isDataGridInteractiveRowClickTarget(target: EventTarget | null): boolean;\n/**\n * Interactive table built on TanStack Table v8. Sorting, column sizing,\n * visibility, ordering, and pinning are owned by the table instance; we\n * layer virtualization, sticky toolbar/header/footer, infinite scroll,\n * quick search, CSV export, and date-format toggling on top.\n *\n * The grid is display-only — it does not fetch or page data itself. Pair\n * with `useDataSource` for client- or server-side data and pass the\n * already-processed slice through `rows`.\n *\n * ```tsx\n * const columns = useMemo(() => [...], []);\n * const [gridState, setGridState] = useState(() => createDefaultDataGridState(columns));\n * const gridData = useDataSource({\n * data: users, columns, getRowId: (r) => r.id,\n * sorting: gridState.sorting,\n * quickSearch: gridState.quickSearch,\n * pagination: gridState.pagination,\n * paginationMode: "client",\n * });\n *\n * <DataGrid\n * columns={columns}\n * rows={gridData.rows}\n * getRowId={(r) => r.id}\n * totalRowCount={gridData.totalRowCount}\n * isLoading={gridData.isLoading}\n * state={gridState}\n * onChange={setGridState}\n * />\n * ```\n *\n * Iron rules:\n * - `rows` is always `gridData.rows`, never your raw array.\n * - Columns must be stable (define outside the component or wrap in `useMemo`).\n * - Initialize state with `createDefaultDataGridState(columns)`.\n * - `renderCell` must be a pure function — no React hooks inside.\n */\ndeclare function DataGrid<TRow>(props: DataGridProps<TRow>): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/data-grid/state.d.ts\n/**\n * Build the initial `DataGridState` for a set of columns. Pass this as the\n * lazy initializer to `useState` — never hand-assemble the state object.\n *\n * ```tsx\n * const [gridState, setGridState] = React.useState(() =>\n * createDefaultDataGridState(columns)\n * );\n * ```\n */\ndeclare function createDefaultDataGridState(columns: readonly DataGridColumnDef<any>[]): DataGridState;\ndeclare function resolveColumnValue<TRow>(col: DataGridColumnDef<TRow>, row: TRow): unknown;\ndeclare function buildRowComparator<TRow>(sortModel: DataGridSortModel, columns: readonly DataGridColumnDef<TRow>[]): ((a: TRow, b: TRow) => number) | null;\ndeclare function paginateRows<TRow>(rows: readonly TRow[], pagination: DataGridPaginationModel): TRow[];\n/** Default row matcher: case-insensitive substring across every column. */\ndeclare function defaultMatchRow<TRow>(row: TRow, query: string, columns: readonly DataGridColumnDef<TRow>[]): boolean;\ndeclare function applyQuickSearch<TRow>(rows: readonly TRow[], query: string, columns: readonly DataGridColumnDef<TRow>[], matchRow?: (row: TRow, query: string, columns: readonly DataGridColumnDef<TRow>[]) => boolean): readonly TRow[];\ndeclare function defaultParseDate(value: unknown): Date | null;\ndeclare function defaultFormatRelative(date: Date): string;\ndeclare function defaultFormatAbsolute(date: Date): string;\ndeclare function formatGridDate(value: unknown, mode: DataGridDateDisplay, opts?: {\n parseValue?: (value: unknown) => Date | null;\n dateFormat?: DataGridDateFormat;\n}): {\n display: string | null;\n tooltip: string | null;\n};\ndeclare function exportToCsv<TRow>(rows: readonly TRow[], columns: readonly DataGridColumnDef<TRow>[], filename: string): void;\n//#endregion\n\n//#region src/components/data-grid/strings.d.ts\ndeclare const DATA_GRID_DEFAULT_STRINGS: DataGridStrings;\ndeclare function resolveDataGridStrings(override: Partial<DataGridStrings> | undefined): DataGridStrings;\n//#endregion\n\n//#region src/components/data-grid/types.d.ts\n/** Every row must be uniquely identifiable. The grid resolves identity\n * through the top-level `getRowId` prop. */\ntype RowId = string;\ntype DataGridColumnType = "string" | "number" | "date" | "dateTime" | "boolean" | "singleSelect" | "custom";\ntype DataGridColumnAlign = "left" | "center" | "right";\ntype DataGridColumnPin = "left" | "right" | false;\n/** How `date` / `dateTime` cells render their value. `"relative"` shows\n * "1 day ago"–style text with the full datetime in a tooltip; `"absolute"`\n * shows the full datetime inline. */\ntype DataGridDateDisplay = "relative" | "absolute";\n/** Per-column overrides for how a `date` / `dateTime` cell is formatted.\n * If either function is omitted the grid falls back to its default\n * (Intl.RelativeTimeFormat + `toLocaleString()`). */\ntype DataGridDateFormat = {\n relative?: (date: Date) => string;\n absolute?: (date: Date) => string;\n};\n/** Context passed to `renderCell`. */\ntype DataGridCellContext<TRow> = {\n row: TRow;\n rowId: RowId;\n rowIndex: number;\n value: unknown;\n columnId: string;\n isSelected: boolean;\n /** Current date display mode — consumers writing custom `renderCell`\n * for `date` / `dateTime` columns should branch on this to match the\n * grid\'s built-in behaviour. */\n dateDisplay: DataGridDateDisplay;\n};\n/** Context passed to `renderHeader`. */\ntype DataGridHeaderContext<TRow> = {\n columnId: string;\n columnDef: DataGridColumnDef<TRow>;\n isSorted: false | "asc" | "desc";\n sortIndex: number | null;\n};\n/** A single column\'s full configuration. Generic over the row type. */\ntype DataGridColumnDef<TRow> = {\n /** Unique identifier for this column. */id: string; /** Display label. If a function is given it receives the header context. */\n header: string | ((ctx: DataGridHeaderContext<TRow>) => ReactNode);\n /** Accessor — either a key of TRow or a function. If omitted, `id` is\n * used as the key. */\n accessor?: keyof TRow | ((row: TRow) => unknown); /** Custom cell renderer. Falls back to plain text of the resolved value. */\n renderCell?: (ctx: DataGridCellContext<TRow>) => ReactNode; /** Initial width in pixels. Defaults to 150. */\n width?: number; /** Minimum width during resize. Defaults to 50. */\n minWidth?: number; /** Maximum width during resize. Defaults to 800. */\n maxWidth?: number;\n /** Flex grow factor. When set, remaining space is distributed among flex\n * columns proportionally. */\n flex?: number;\n sortable?: boolean;\n resizable?: boolean;\n hideable?: boolean; /** Pin position. Defaults to `false` (unpinned). */\n pin?: DataGridColumnPin;\n align?: DataGridColumnAlign; /** Column type affects default sorting. */\n type?: DataGridColumnType; /** For `singleSelect` type — available value options. */\n valueOptions?: readonly DataGridSelectOption[];\n /** How cell content handles overflow.\n * - `"truncate"` (default): single-line with text-overflow ellipsis.\n * - `"wrap"`: content wraps naturally. When combined with\n * `rowHeight="auto"` on the grid, the row grows to fit. With a\n * fixed `rowHeight`, wrapped content is clipped at the row boundary. */\n cellOverflow?: "truncate" | "wrap";\n /** Custom sort comparator. Receives two resolved cell values.\n * Return negative if a < b, positive if a > b, 0 if equal. */\n sortComparator?: (a: unknown, b: unknown) => number;\n /** Format a cell value to a plain string — used for export and\n * clipboard copy. Defaults to `String(value)`. */\n formatValue?: (value: unknown, row: TRow) => string;\n /** Parse a raw cell value into a `Date`. Only consulted when `type` is\n * `"date"` or `"dateTime"`. Defaults to `new Date(value)` with graceful\n * handling of `null` / `undefined` / invalid dates. Override for\n * non-standard formats (e.g. ClickHouse\'s space-separated UTC strings). */\n parseValue?: (value: unknown) => Date | null; /** Per-column override for the relative / absolute date formatters. */\n dateFormat?: DataGridDateFormat; /** Fired when a cell in this column is clicked. */\n onCellClick?: (ctx: DataGridCellContext<TRow>, event: React.MouseEvent) => void; /** Fired when a cell in this column is double-clicked. */\n onCellDoubleClick?: (ctx: DataGridCellContext<TRow>, event: React.MouseEvent) => void;\n};\ntype DataGridSelectOption = {\n value: string;\n label: string;\n};\ntype DataGridSortItem = {\n columnId: string;\n direction: "asc" | "desc";\n};\ntype DataGridSortModel = readonly DataGridSortItem[];\ntype DataGridSelectionMode = "none" | "single" | "multiple";\ntype DataGridSelectionModel = {\n selectedIds: ReadonlySet<RowId>; /** Tracks the last-clicked row for shift-range selection. */\n anchorId: RowId | null;\n};\ntype DataGridColumnVisibility = Record<string, boolean>;\ntype DataGridColumnPinning = {\n left: readonly string[];\n right: readonly string[];\n};\n/** UI display mode — "paginated" shows page controls, "infinite" shows scroll sentinel. */\ntype DataGridPaginationMode = "paginated" | "infinite";\n/** Data-fetching strategy used by `useDataSource`. */\ntype DataGridDataPaginationMode = "client" | "server" | "infinite";\ntype DataGridPaginationModel = {\n pageIndex: number;\n pageSize: number;\n};\ntype DataGridState = {\n sorting: DataGridSortModel;\n columnVisibility: DataGridColumnVisibility;\n columnWidths: Record<string, number>;\n columnPinning: DataGridColumnPinning;\n columnOrder: readonly string[];\n pagination: DataGridPaginationModel;\n selection: DataGridSelectionModel;\n /** How `date` / `dateTime` columns render. Defaults to `"relative"`\n * via `createDefaultDataGridState`. Toggled from the Columns popover\n * whenever the grid has at least one date column. */\n dateDisplay: DataGridDateDisplay;\n /** Current quick-search text. Written by the built-in search input in\n * the toolbar. `useDataSource` in client mode auto-filters by this\n * value (via `applyQuickSearch`); in async mode it\'s passed through\n * to the generator as `params.quickSearch`, where the consumer owns\n * the "how do I match?" decision (typically by modifying the backend\n * query). Defaults to `""`. */\n quickSearch: string;\n};\n/** Params sent to the async data source on each fetch. */\ntype DataGridFetchParams = {\n sorting: DataGridSortModel;\n pagination: DataGridPaginationModel;\n /** Current quick-search text. Passed through from `state.quickSearch`\n * so the async generator can fold it into its query (e.g. a SQL WHERE\n * clause). Empty string when the search box is empty. A change in\n * this value triggers a refetch, same mechanism as sorting. */\n quickSearch: string; /** For cursor-based: the last row of the previous page. */\n cursor: unknown;\n};\n/** Return type from a data source fetch. */\ntype DataGridFetchResult<TRow> = {\n rows: TRow[]; /** Total row count if known. `-1` or `undefined` for unknown (infinite). */\n totalRowCount?: number; /** Cursor for the next page (for cursor-based pagination). */\n nextCursor?: unknown; /** If `false`, there are no more pages. */\n hasMore?: boolean;\n};\n/** An async-generator data source yields pages of rows. The generator\n * receives fetch params as its argument and yields pages. Yielding\n * allows the grid to display partial results during loading. */\ntype DataGridDataSource<TRow> = (params: DataGridFetchParams) => AsyncGenerator<DataGridFetchResult<TRow>, void, undefined>;\ntype DataGridCallbacks<TRow> = {\n onRowClick?: (row: TRow, rowId: RowId, event: React.MouseEvent) => void;\n onRowDoubleClick?: (row: TRow, rowId: RowId, event: React.MouseEvent) => void;\n onCellClick?: (row: TRow, columnId: string, value: unknown, event: React.MouseEvent) => void;\n /**\n * Fires when the selection set changes. **Page-scoped:** the header "select\n * all" checkbox and `selectedRows` only cover the rows currently rendered\n * (the visible page in paginated mode, or the loaded prefix in infinite\n * mode). The grid does not load other pages to satisfy the selection — if\n * you need cross-page selection, drive `selectedIds` from your own state\n * and load all rows you care about up-front.\n */\n onSelectionChange?: (selectedIds: ReadonlySet<RowId>, selectedRows: TRow[]) => void;\n onSortChange?: (model: DataGridSortModel) => void;\n onColumnResize?: (columnId: string, width: number) => void;\n onColumnVisibilityChange?: (model: DataGridColumnVisibility) => void;\n};\ntype DataGridProps<TRow> = {\n /** Column definitions. */columns: readonly DataGridColumnDef<TRow>[];\n /** The rows to display. The consumer is responsible for sorting\n * and paginating before passing them in. */\n rows: readonly TRow[]; /** Extract a unique identifier from each row. */\n getRowId: (row: TRow) => RowId; /** Total row count across all pages (used for pagination UI). */\n totalRowCount?: number; /** True while the initial data load is in progress (shows skeleton). */\n isLoading?: boolean; /** True during a background refetch (shows subtle indicator, keeps rows). */\n isRefetching?: boolean; /** Whether more rows can be loaded (shows infinite scroll sentinel). */\n hasMore?: boolean; /** True while loading the next page of infinite scroll. */\n isLoadingMore?: boolean; /** Called when the infinite scroll sentinel becomes visible. */\n onLoadMore?: () => void;\n state: DataGridState;\n onChange: React.Dispatch<React.SetStateAction<DataGridState>>;\n /** UI mode for pagination. "paginated" shows page controls in the\n * footer. "infinite" shows a scroll sentinel instead. Defaults to\n * "paginated". */\n paginationMode?: "paginated" | "infinite"; /** Selection behaviour. Defaults to "none". */\n selectionMode?: DataGridSelectionMode; /** Whether columns can be resized by dragging. Defaults to true. */\n resizable?: boolean;\n /** Row height in pixels, or `"auto"` for dynamic measurement.\n *\n * - **number** (default `44`): every row is exactly this tall.\n * Fast and predictable; content that overflows is clipped.\n * - **`"auto"`**: each row is measured by the browser after render\n * and the virtualizer adjusts positions accordingly. Columns\n * with `cellOverflow: "wrap"` will push the row taller; columns\n * with `cellOverflow: "truncate"` (or the default) stay\n * single-line. Use `estimatedRowHeight` to reduce scroll-jank\n * when rows haven\'t been measured yet. */\n rowHeight?: number | "auto";\n /** Estimated row height used by the virtualizer when\n * `rowHeight="auto"`. Better estimates = less scroll-position\n * jank before rows are measured. Defaults to 44. Ignored when\n * `rowHeight` is a number. */\n estimatedRowHeight?: number; /** Header row height in pixels. Defaults to 44. */\n headerHeight?: number; /** Number of rows to render outside the visible area. Defaults to 5. */\n overscan?: number; /** Grid max height. If omitted, grid takes available space (when `fillHeight`). */\n maxHeight?: number | string;\n /**\n * When `true` (default), the grid uses `h-full` and the row area scrolls inside the grid.\n * When `false`, the grid is only as tall as toolbar + header + rows (`h-auto`), so sibling\n * content (e.g. metadata) sits directly under the table without a large empty gap.\n */\n fillHeight?: boolean; /** Top offset for the sticky toolbar + header (px or CSS string). */\n stickyTop?: number | string;\n} & DataGridCallbacks<TRow> & {\n /** Custom toolbar renderer. When `false`, toolbar is hidden entirely. */toolbar?: false | ((ctx: DataGridToolbarContext<TRow>) => ReactNode);\n /** Extra content rendered inside the default toolbar row, to the left of\n * the built-in columns / export actions. Use this to slot in\n * refresh buttons, custom toggles, row counts, etc. without giving up\n * the built-in actions. Ignored if a custom `toolbar` render function\n * is provided — that function owns the entire row. */\n toolbarExtra?: ReactNode | ((ctx: DataGridToolbarContext<TRow>) => ReactNode); /** Custom empty state. Defaults to a centered "No data" message. */\n emptyState?: ReactNode; /** Custom loading state. Defaults to skeleton rows. */\n loadingState?: ReactNode; /** Custom footer. When `false`, footer is hidden. */\n footer?: false | ((ctx: DataGridFooterContext<TRow>) => ReactNode); /** Extra content rendered to the right of the default footer info. */\n footerExtra?: ReactNode | ((ctx: DataGridFooterContext<TRow>) => ReactNode); /** Filename stem for CSV export (without extension). */\n exportFilename?: string; /** i18n overrides. */\n strings?: Partial<DataGridStrings>;\n className?: string;\n};\ntype DataGridToolbarContext<TRow> = {\n state: DataGridState;\n onChange: React.Dispatch<React.SetStateAction<DataGridState>>;\n columns: readonly DataGridColumnDef<TRow>[];\n visibleColumns: readonly DataGridColumnDef<TRow>[];\n totalRowCount: number | undefined;\n selectedRowCount: number;\n strings: DataGridStrings; /** Trigger a CSV export. */\n exportCsv: () => void;\n};\ntype DataGridFooterContext<TRow> = {\n state: DataGridState;\n totalRowCount: number | undefined;\n visibleRowCount: number;\n selectedRowCount: number;\n paginationMode: DataGridPaginationMode;\n strings: DataGridStrings;\n};\ntype DataGridStrings = {\n searchPlaceholder: string;\n columns: string;\n export: string;\n density: string;\n showAll: string;\n hideAll: string;\n resetColumns: string;\n dateFormat: string;\n dateFormatRelative: string;\n dateFormatAbsolute: string;\n rowsSelected: (count: number) => string;\n rowsPerPage: string;\n pageOf: (page: number, total: number) => string;\n noData: string;\n loading: string;\n loadingMore: string;\n exportCsv: string;\n exportCopied: string;\n sortAsc: string;\n sortDesc: string;\n unsort: string;\n pinLeft: string;\n pinRight: string;\n unpin: string;\n hideColumn: string;\n};\n//#endregion\n\n//#region src/components/data-grid/use-data-source.d.ts\ntype UseDataSourceResult<TRow> = {\n /** All rows currently loaded (for infinite mode, the accumulated set). */rows: readonly TRow[]; /** Total row count if known. */\n totalRowCount: number | undefined; /** Whether the initial load is in progress (no data at all yet). */\n isLoading: boolean; /** Whether a background refetch is happening (data already shown). */\n isRefetching: boolean; /** Whether more rows are being fetched (infinite scroll). */\n isLoadingMore: boolean; /** Request the next page (infinite scroll). */\n loadMore: () => void; /** Whether there are more pages to load. */\n hasMore: boolean; /** Reload from scratch. */\n reload: () => void;\n /**\n * Error from the most recent async fetch, if any. Consumers should render\n * an error UI and offer a `reload()` button when this is non-null. Client\n * mode never sets this (no fetching). Cleared on next successful fetch.\n */\n error: Error | null;\n};\n/**\n * Hook that processes raw data through the grid\'s sort/pagination state\n * and returns the `rows` slice ready to pass to `DataGrid`. This is the\n * only correct way to feed client-side data into a grid.\n *\n * Two modes, picked by which prop you pass:\n * - `data: TRow[]` → client-side mode. In-memory sort + paginate.\n * - `dataSource: (params) => AsyncGenerator` → server / infinite mode.\n * The generator yields pages as you scroll or change pages.\n *\n * ```tsx\n * // Client-side (most common):\n * const gridData = useDataSource({\n * data: users,\n * columns,\n * getRowId: (row) => row.id,\n * sorting: gridState.sorting,\n * quickSearch: gridState.quickSearch,\n * pagination: gridState.pagination,\n * paginationMode: "client",\n * });\n *\n * <DataGrid\n * columns={columns}\n * rows={gridData.rows}\n * totalRowCount={gridData.totalRowCount}\n * isLoading={gridData.isLoading}\n * state={gridState}\n * onChange={setGridState}\n * getRowId={(row) => row.id}\n * />\n * ```\n *\n * Rules:\n * - Call this hook unconditionally at the top level, before any early return.\n * - `rows` on `DataGrid` must ALWAYS be `gridData.rows`, never your raw array.\n * - For server or infinite pagination, use `dataSource` — see the\n * `DataGridDataSource` type for the generator signature.\n *\n * Quick search:\n * - Client mode (`data` prop): the hook auto-filters rows via\n * `applyQuickSearch` using a default case-insensitive substring match\n * across every column. Override with `matchRow` for custom matching\n * (fuzzy, weighted, field-specific, etc.).\n * - Async mode (`dataSource` prop): the hook passes `quickSearch` into\n * `params.quickSearch` and re-runs the generator whenever the search\n * string changes. The consumer owns the matching logic (typically by\n * folding it into a backend query). The grid performs NO client-side\n * filtering in async mode.\n */\ndeclare function useDataSource<TRow>(opts: {\n data?: readonly TRow[];\n dataSource?: DataGridDataSource<TRow>;\n columns: readonly DataGridColumnDef<TRow>[];\n getRowId: (row: TRow) => RowId;\n sorting: DataGridSortModel; /** Current quick-search text, typically `gridState.quickSearch`. */\n quickSearch: string;\n /** Override the default client-mode matcher. Ignored in async mode\n * (there the generator is the matcher). */\n matchRow?: (row: TRow, query: string, columns: readonly DataGridColumnDef<TRow>[]) => boolean;\n pagination: DataGridPaginationModel;\n paginationMode: DataGridDataPaginationMode;\n}): UseDataSourceResult<TRow>;\n//#endregion\n\n//#region src/components/data-grid/use-url-state.d.ts\ntype UrlStateOptions = {\n /** Disambiguates URL params when multiple grids share a page. Defaults\n * to `"grid"`. Use unique prefixes per-grid (e.g. `"users"`, `"teams"`). */\n paramPrefix?: string;\n /** Overrides for default state used when the URL has no value for a\n * given key. Useful for things like a sensible initial sort (e.g.\n * "newest signups first") that should appear on first load but be\n * overridden when the user navigates to a bookmarked URL. */\n initial?: Partial<Pick<DataGridState, "sorting" | "quickSearch" | "columnVisibility">>;\n};\n/**\n * Drop-in replacement for `useState(() => createDefaultDataGridState(columns))`\n * that persists user view preferences to URL search params, so a view\n * can be bookmarked / shared / restored on reload.\n *\n * **Persisted:** column widths, hidden columns, sort model, quick-search.\n * **Not persisted** (deliberately): pagination scroll position, selection,\n * column pinning/order, date display mode — these are session-scoped.\n *\n * ```tsx\n * const [gridState, setGridState] = useDataGridUrlState(columns, {\n * paramPrefix: "users",\n * initial: { sorting: [{ columnId: "signedUpAt", direction: "desc" }] },\n * });\n * ```\n *\n * URL encoding: `?{prefix}_w=...&{prefix}_h=...&{prefix}_s=...&{prefix}_q=...`.\n * Default values are omitted so URLs stay clean. Updates use\n * `history.replaceState` (not pushState) so back/forward isn\'t polluted,\n * and `popstate` is observed so external URL changes flow back into state.\n */\ndeclare function useDataGridUrlState<TRow>(columns: readonly DataGridColumnDef<TRow>[], opts?: UrlStateOptions): [DataGridState, React.Dispatch<React.SetStateAction<DataGridState>>];\n//#endregion\n\nimport React from "react";\n\n//#region src/components/dialog.d.ts\ntype DesignDialogSize = "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl" | "full";\ntype DesignDialogVariant = "glassmorphic" | "plain";\ntype DesignDialogIcon = React.ElementType<{\n className?: string;\n}>;\ntype DesignDialogRootProps = Omit<React.ComponentProps<typeof Dialog>, "children">;\ntype DesignDialogProps = {\n trigger?: React.ReactElement;\n size?: DesignDialogSize;\n variant?: DesignDialogVariant;\n icon?: DesignDialogIcon | null;\n title?: React.ReactNode;\n description?: React.ReactNode;\n headerContent?: React.ReactNode;\n customHeader?: React.ReactNode;\n footer?: React.ReactNode;\n noBodyPadding?: boolean;\n hideTopCloseButton?: boolean;\n className?: string;\n overlayClassName?: string;\n headerClassName?: string;\n bodyClassName?: string;\n footerClassName?: string;\n children?: React.ReactNode;\n} & DesignDialogRootProps;\n/**\n * Canonical dashboard modal surface. This wraps the base dialog primitives with\n * a reusable glassmorphic shell and consistent header/body/footer regions.\n */\ndeclare function DesignDialog({\n trigger,\n size,\n variant,\n icon: Icon,\n title,\n description,\n headerContent,\n customHeader,\n footer,\n noBodyPadding,\n hideTopCloseButton,\n className,\n overlayClassName,\n headerClassName,\n bodyClassName,\n footerClassName,\n children,\n ...dialogRootProps\n}: DesignDialogProps): react_jsx_runtime0.JSX.Element;\ndeclare const DesignDialogRoot: React.FC<_radix_ui_react_dialog0.DialogProps>;\ndeclare const DesignDialogTrigger: React.ForwardRefExoticComponent<_radix_ui_react_dialog0.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;\ndeclare const DesignDialogClose: React.ForwardRefExoticComponent<_radix_ui_react_dialog0.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;\ndeclare const DesignDialogTitle: React.FC<Omit<_radix_ui_react_dialog0.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & {\n ref?: React.Ref<HTMLHeadingElement> | undefined;\n}>;\ndeclare const DesignDialogDescription: React.FC<Omit<_radix_ui_react_dialog0.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & {\n ref?: React.Ref<HTMLParagraphElement> | undefined;\n}>;\n//#endregion\n\n//#region src/components/edit-mode.d.ts\ndeclare function DesignEditMode({\n children\n}: {\n children: React.ReactNode;\n}): react_jsx_runtime0.JSX.Element;\ndeclare function useDesignEditMode(): boolean;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/empty-state.d.ts\ntype DesignEmptyStateProps = {\n icon?: React.ElementType;\n title?: string;\n description?: string;\n children?: React.ReactNode;\n className?: string;\n};\n/**\n * Centered "no data" placeholder. Show this inside a `DataGrid` via the\n * `emptyState` prop, inside a chart when a query returns zero rows, or\n * inside a card when a section has nothing to display.\n *\n * ```tsx\n * <DesignEmptyState\n * icon={SearchIcon}\n * title="No results"\n * description="Try adjusting your filters."\n * />\n * ```\n *\n * Prefer this over a raw "No data" div — it handles spacing, typography,\n * and the optional icon for you. `icon` is a component type, not a rendered node.\n */\ndeclare function DesignEmptyState({\n icon: Icon,\n title,\n description,\n children,\n className\n}: DesignEmptyStateProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/input.d.ts\ntype DesignInputProps = {\n prefixItem?: React.ReactNode;\n leadingIcon?: React.ReactNode;\n size?: "sm" | "md" | "lg";\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, "size">;\ndeclare const DesignInput: React.FC<{\n prefixItem?: React.ReactNode;\n leadingIcon?: React.ReactNode;\n size?: "sm" | "md" | "lg";\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> & {\n ref?: React.Ref<HTMLInputElement> | undefined;\n}>;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/metric-card.d.ts\ntype DesignMetricCardGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignMetricCardTrend = {\n value: number;\n direction: "up" | "down";\n label?: string;\n};\ntype DesignMetricCardProps = {\n label: string;\n value: string | number;\n description?: string;\n trend?: DesignMetricCardTrend;\n icon?: React.ElementType;\n gradient?: DesignMetricCardGradient;\n} & Omit<React.ComponentProps<"div">, "children">;\n/**\n * KPI card for big-number metrics (users, revenue, signups, etc.).\n * Use this instead of a plain `DesignCard` when the value is the focal point.\n *\n * ```tsx\n * <DesignMetricCard\n * label="Total Users"\n * value="1,234"\n * description="+12% from last month"\n * trend={{ direction: "up", value: 12, label: "vs. last period" }}\n * icon={UsersIcon}\n * gradient="blue"\n * />\n * ```\n *\n * Notes:\n * - `label` is the short caption (NOT `title`).\n * - `value` can be a pre-formatted string ("1,234") or a number — prefer\n * strings so you control the format.\n * - `description` is the subline (NOT `subtitle`).\n * - `trend.value` is a NUMBER, not a pre-formatted "12%" string. The card\n * renders the arrow and formatting.\n * - `icon` is a component type (e.g. `UsersIcon`), not a rendered node.\n */\ndeclare function DesignMetricCard({\n label,\n value,\n description,\n trend,\n icon: Icon,\n gradient,\n className,\n ...props\n}: DesignMetricCardProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/pill-toggle.d.ts\ntype DesignPillToggleSize = "sm" | "md" | "lg";\ntype DesignPillToggleGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignPillToggleOption = {\n id: string;\n label: string;\n icon?: React.ElementType;\n};\ntype DesignPillToggleProps = {\n options: DesignPillToggleOption[];\n selected: string;\n onSelect: (id: string) => void | Promise<void>;\n size?: DesignPillToggleSize;\n glassmorphic?: boolean;\n gradient?: DesignPillToggleGradient; /** When false, hides labels and shows a tooltip on hover instead. Defaults to true. */\n showLabels?: boolean;\n className?: string;\n};\ndeclare function DesignPillToggle({\n options,\n selected,\n onSelect,\n size,\n glassmorphic: glassmorphicProp,\n gradient,\n showLabels,\n className\n}: DesignPillToggleProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/progress-bar.d.ts\ntype DesignProgressBarGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignProgressBarProps = {\n value: number;\n max?: number;\n gradient?: DesignProgressBarGradient;\n label?: string;\n showPercentage?: boolean;\n size?: "sm" | "md" | "lg";\n className?: string;\n};\n/**\n * Horizontal progress bar for quota / fill-level indicators. Takes a\n * `value` and optional `max` (defaults to 100 — pass raw values, the\n * component computes the percentage). Optional label + percentage display.\n *\n * ```tsx\n * <DesignProgressBar value={usedSeats} max={totalSeats} label="Seats used" showPercentage />\n * <DesignProgressBar value={75} gradient="green" />\n * ```\n */\ndeclare function DesignProgressBar({\n value,\n max,\n gradient,\n label,\n showPercentage,\n size,\n className\n}: DesignProgressBarProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\n//#region src/components/separator.d.ts\ntype DesignSeparatorProps = {\n orientation?: "horizontal" | "vertical";\n} & React.HTMLAttributes<HTMLDivElement>;\n/**\n * Thin divider line. Use `orientation="vertical"` inside a flex row to\n * separate inline groups, or omit for a horizontal rule between sections.\n *\n * ```tsx\n * <DesignSeparator />\n * <DesignSeparator orientation="vertical" className="h-6" />\n * ```\n */\ndeclare function DesignSeparator({\n orientation,\n className,\n ...props\n}: DesignSeparatorProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/skeleton.d.ts\ntype DesignSkeletonProps = React.HTMLAttributes<HTMLDivElement>;\n/**\n * Animated placeholder block. Use while data is loading — size it via\n * `className` to match the content it\'s standing in for.\n *\n * ```tsx\n * <DesignSkeleton className="h-4 w-[200px]" />\n * <DesignSkeleton className="h-24 w-full rounded-lg" />\n * ```\n *\n * Rule: always show a skeleton during initial load, not a spinner or\n * "Loading..." text. Skeletons preserve layout and feel faster.\n */\ndeclare function DesignSkeleton({\n className,\n ...props\n}: DesignSkeletonProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\n//#region src/components/table.d.ts\n/**\n * Simple static table — header + rows + cells. Use this for small,\n * read-only lists (< 20 rows, no interaction). For anything that needs\n * sorting, filtering, pagination, or virtualization, use `DataGrid` +\n * `useDataSource` instead.\n *\n * ```tsx\n * <DesignTable>\n * <DesignTableHeader>\n * <DesignTableRow>\n * <DesignTableHead>Name</DesignTableHead>\n * <DesignTableHead>Email</DesignTableHead>\n * </DesignTableRow>\n * </DesignTableHeader>\n * <DesignTableBody>\n * {rows.map(row => (\n * <DesignTableRow key={row.id}>\n * <DesignTableCell>{row.name}</DesignTableCell>\n * <DesignTableCell>{row.email}</DesignTableCell>\n * </DesignTableRow>\n * ))}\n * </DesignTableBody>\n * </DesignTable>\n * ```\n */\ndeclare const DesignTable: React.FC<React.HTMLAttributes<HTMLTableElement> & {\n ref?: React.Ref<HTMLTableElement> | undefined;\n}>;\ndeclare const DesignTableHeader: React.FC<React.HTMLAttributes<HTMLTableSectionElement> & {\n ref?: React.Ref<HTMLTableSectionElement> | undefined;\n}>;\ndeclare const DesignTableBody: React.FC<React.HTMLAttributes<HTMLTableSectionElement> & {\n ref?: React.Ref<HTMLTableSectionElement> | undefined;\n}>;\ndeclare const DesignTableRow: React.FC<React.HTMLAttributes<HTMLTableRowElement> & {\n ref?: React.Ref<HTMLTableRowElement> | undefined;\n}>;\ndeclare const DesignTableHead: React.FC<React.ThHTMLAttributes<HTMLTableCellElement> & {\n ref?: React.Ref<HTMLTableCellElement> | undefined;\n}>;\ndeclare const DesignTableCell: React.FC<React.TdHTMLAttributes<HTMLTableCellElement> & {\n ref?: React.Ref<HTMLTableCellElement> | undefined;\n}>;\n//#endregion\n\n//#region src/components/tabs.d.ts\ntype DesignTabsSize = "sm" | "md";\ntype DesignTabsGradient = "blue" | "cyan" | "purple" | "green" | "orange" | "default";\ntype DesignCategoryTabItem = {\n id: string;\n label: string;\n count?: number;\n badgeCount?: number;\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n};\ntype DesignCategoryTabsProps = Omit<React.ComponentProps<"div">, "onSelect"> & {\n categories: DesignCategoryTabItem[];\n selectedCategory: string;\n onSelect: (id: string) => void | Promise<void>;\n showBadge?: boolean;\n size?: DesignTabsSize;\n glassmorphic?: boolean;\n gradient?: DesignTabsGradient; /** Renders inside the tab bar after the tab buttons (not a tab). */\n trailing?: ReactNode;\n};\ndeclare function DesignCategoryTabs({\n categories,\n selectedCategory,\n onSelect,\n showBadge,\n size,\n glassmorphic: glassmorphicProp,\n gradient,\n trailing,\n className,\n ...props\n}: DesignCategoryTabsProps): react_jsx_runtime0.JSX.Element;\n//#endregion\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nimport React from "react";\n\nexport * from "./components/analytics-chart";\nexport * from "./components/data-grid";';var r=e.i(160173),i=e.i(216874);async function a(e,n,r){let a=t.map(e=>e.path),o=`You are a code assistant helping to generate dashboard code for Stack Auth.
|
|
50
50
|
|
|
51
51
|
Your task is to select which Stack SDK type definition files you'll need to generate the requested dashboard.
|
|
52
52
|
|
|
@@ -91,4 +91,4 @@ ${c}
|
|
|
91
91
|
${h}
|
|
92
92
|
${n}${p}`}),m.push({role:"assistant",content:"I have the type definitions and available routes. I've also read the JSDoc on every DashboardUI component I plan to use and will follow each component's canonical pattern. What dashboard would you like me to create?"})),m}e.s(["buildDashboardMessages",()=>o],810450)}]);
|
|
93
93
|
|
|
94
|
-
//# sourceMappingURL=
|
|
94
|
+
//# sourceMappingURL=f54d295e8f8a1774.js.map
|