@aitne/dashboard 0.1.4 → 0.1.7
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +450 -356
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +96 -0
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +15 -15
- package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity/page.js.nft.json +1 -1
- package/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +19 -19
- package/.next/server/app/activity.segments/_full.segment.rsc +19 -19
- package/.next/server/app/activity.segments/_head.segment.rsc +4 -4
- package/.next/server/app/activity.segments/_index.segment.rsc +10 -10
- package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.segments/activity/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/activity.segments/activity.segment.rsc +4 -4
- package/.next/server/app/analytics/page.js.nft.json +1 -1
- package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/analytics.html +1 -1
- package/.next/server/app/analytics.rsc +19 -19
- package/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +10 -10
- package/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/analytics.segment.rsc +4 -4
- package/.next/server/app/api/[...path]/route.js +1 -1
- package/.next/server/app/api/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +17 -17
- package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +10 -10
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/server/app/connections/calendar/page.js.nft.json +1 -1
- package/.next/server/app/connections/calendar/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/calendar.html +1 -1
- package/.next/server/app/connections/calendar.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/calendar.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/calendar.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/calendar.segments/connections/calendar/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/calendar.segments/connections/calendar.segment.rsc +3 -3
- package/.next/server/app/connections/calendar.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/journal/page.js.nft.json +1 -1
- package/.next/server/app/connections/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/journal.html +1 -1
- package/.next/server/app/connections/journal.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/journal.segments/connections/journal.segment.rsc +3 -3
- package/.next/server/app/connections/journal.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/connections/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/knowledge.html +1 -1
- package/.next/server/app/connections/knowledge.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/knowledge.segments/connections/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/knowledge.segments/connections/knowledge.segment.rsc +3 -3
- package/.next/server/app/connections/knowledge.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mail/page.js.nft.json +1 -1
- package/.next/server/app/connections/mail/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mail.html +1 -1
- package/.next/server/app/connections/mail.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mail.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mail.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mail.segments/connections/mail/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mail.segments/connections/mail.segment.rsc +3 -3
- package/.next/server/app/connections/mail.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/mcp/page.js.nft.json +1 -1
- package/.next/server/app/connections/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/mcp.html +1 -1
- package/.next/server/app/connections/mcp.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/mcp.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/mcp.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/mcp.segments/connections/mcp/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/mcp.segments/connections/mcp.segment.rsc +3 -3
- package/.next/server/app/connections/mcp.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/messaging/page.js.nft.json +1 -1
- package/.next/server/app/connections/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/messaging.html +1 -1
- package/.next/server/app/connections/messaging.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/messaging.segments/connections/messaging/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/messaging.segments/connections/messaging.segment.rsc +3 -3
- package/.next/server/app/connections/messaging.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/page.js.nft.json +1 -1
- package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories/page.js.nft.json +1 -1
- package/.next/server/app/connections/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/repositories.html +1 -1
- package/.next/server/app/connections/repositories.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_full.segment.rsc +18 -18
- package/.next/server/app/connections/repositories.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/repositories.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/repositories.segments/connections/repositories/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/connections/repositories.segments/connections/repositories.segment.rsc +3 -3
- package/.next/server/app/connections/repositories.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections/routines/page.js.nft.json +1 -1
- package/.next/server/app/connections/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connections/routines.html +1 -1
- package/.next/server/app/connections/routines.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections/routines.segments/connections/routines.segment.rsc +3 -3
- package/.next/server/app/connections/routines.segments/connections.segment.rsc +4 -4
- package/.next/server/app/connections.html +1 -1
- package/.next/server/app/connections.rsc +16 -16
- package/.next/server/app/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/connections.segments/connections.segment.rsc +4 -4
- package/.next/server/app/conversations/[id]/page.js.nft.json +1 -1
- package/.next/server/app/conversations/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations/page.js.nft.json +1 -1
- package/.next/server/app/conversations/page_client-reference-manifest.js +1 -1
- package/.next/server/app/conversations.html +1 -1
- package/.next/server/app/conversations.rsc +15 -15
- package/.next/server/app/conversations.segments/_full.segment.rsc +15 -15
- package/.next/server/app/conversations.segments/_head.segment.rsc +4 -4
- package/.next/server/app/conversations.segments/_index.segment.rsc +10 -10
- package/.next/server/app/conversations.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/conversations.segments/conversations.segment.rsc +3 -3
- package/.next/server/app/docs/[[...slug]]/page.js.nft.json +1 -1
- package/.next/server/app/docs/[[...slug]]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance/page.js.nft.json +1 -1
- package/.next/server/app/finance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/finance.html +1 -1
- package/.next/server/app/finance.rsc +17 -17
- package/.next/server/app/finance.segments/_full.segment.rsc +17 -17
- package/.next/server/app/finance.segments/_head.segment.rsc +4 -4
- package/.next/server/app/finance.segments/_index.segment.rsc +10 -10
- package/.next/server/app/finance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/finance.segments/finance/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/finance.segments/finance.segment.rsc +3 -3
- package/.next/server/app/git/page.js.nft.json +1 -1
- package/.next/server/app/git/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git.html +1 -1
- package/.next/server/app/git.rsc +17 -17
- package/.next/server/app/git.segments/_full.segment.rsc +17 -17
- package/.next/server/app/git.segments/_head.segment.rsc +4 -4
- package/.next/server/app/git.segments/_index.segment.rsc +10 -10
- package/.next/server/app/git.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/git.segments/git.segment.rsc +3 -3
- package/.next/server/app/health/page.js.nft.json +1 -1
- package/.next/server/app/health/page_client-reference-manifest.js +1 -1
- package/.next/server/app/health.html +1 -1
- package/.next/server/app/health.rsc +17 -17
- package/.next/server/app/health.segments/_full.segment.rsc +17 -17
- package/.next/server/app/health.segments/_head.segment.rsc +4 -4
- package/.next/server/app/health.segments/_index.segment.rsc +10 -10
- package/.next/server/app/health.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/health.segments/health/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/health.segments/health.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +17 -17
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +17 -17
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/knowledge.html +1 -1
- package/.next/server/app/knowledge.rsc +18 -18
- package/.next/server/app/knowledge.segments/_full.segment.rsc +18 -18
- package/.next/server/app/knowledge.segments/_head.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/_index.segment.rsc +10 -10
- package/.next/server/app/knowledge.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/knowledge.segments/knowledge/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/knowledge.segments/knowledge.segment.rsc +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading/page.js.nft.json +1 -1
- package/.next/server/app/reading/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reading.html +1 -1
- package/.next/server/app/reading.rsc +17 -17
- package/.next/server/app/reading.segments/_full.segment.rsc +17 -17
- package/.next/server/app/reading.segments/_head.segment.rsc +4 -4
- package/.next/server/app/reading.segments/_index.segment.rsc +10 -10
- package/.next/server/app/reading.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/reading.segments/reading/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/reading.segments/reading.segment.rsc +3 -3
- package/.next/server/app/schedule/page.js.nft.json +1 -1
- package/.next/server/app/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/schedule.html +1 -1
- package/.next/server/app/schedule.rsc +17 -17
- package/.next/server/app/schedule.segments/_full.segment.rsc +17 -17
- package/.next/server/app/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/schedule.segments/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/schedule.segments/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/advanced/page.js.nft.json +1 -1
- package/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/advanced.html +1 -1
- package/.next/server/app/settings/advanced.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/advanced.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/advanced.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/advanced.segments/settings/advanced/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/advanced.segments/settings/advanced.segment.rsc +3 -3
- package/.next/server/app/settings/advanced.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/backends/page.js.nft.json +1 -1
- package/.next/server/app/settings/backends/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/backends.html +1 -1
- package/.next/server/app/settings/backends.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/backends.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/backends.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/backends.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/backends.segments/settings/backends.segment.rsc +3 -3
- package/.next/server/app/settings/backends.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/commands/page.js.nft.json +1 -1
- package/.next/server/app/settings/commands/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/commands.html +1 -1
- package/.next/server/app/settings/commands.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/commands.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/commands.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/commands.segments/settings/commands/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/commands.segments/settings/commands.segment.rsc +3 -3
- package/.next/server/app/settings/commands.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/connections/page.js.nft.json +1 -1
- package/.next/server/app/settings/connections/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/connections.html +1 -1
- package/.next/server/app/settings/connections.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/connections.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/connections.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/connections.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/connections.segments/settings/connections.segment.rsc +3 -3
- package/.next/server/app/settings/connections.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/journal/page.js.nft.json +1 -1
- package/.next/server/app/settings/journal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/journal.html +1 -1
- package/.next/server/app/settings/journal.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/journal.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/journal.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/journal.segments/settings/journal/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/journal.segments/settings/journal.segment.rsc +3 -3
- package/.next/server/app/settings/journal.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/management/page.js.nft.json +1 -1
- package/.next/server/app/settings/management/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/management.html +1 -1
- package/.next/server/app/settings/management.rsc +18 -18
- package/.next/server/app/settings/management.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/management.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/management.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/management.segments/settings/management/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/management.segments/settings/management.segment.rsc +3 -3
- package/.next/server/app/settings/management.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/messaging/page.js.nft.json +1 -1
- package/.next/server/app/settings/messaging/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/messaging.html +1 -1
- package/.next/server/app/settings/messaging.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/messaging.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/messaging.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/messaging.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/messaging.segments/settings/messaging.segment.rsc +3 -3
- package/.next/server/app/settings/messaging.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/models/page.js.nft.json +1 -1
- package/.next/server/app/settings/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/models.html +1 -1
- package/.next/server/app/settings/models.rsc +18 -18
- package/.next/server/app/settings/models.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/models.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/models.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/models.segments/settings/models/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/models.segments/settings/models.segment.rsc +3 -3
- package/.next/server/app/settings/models.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes/page.js.nft.json +1 -1
- package/.next/server/app/settings/processes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/processes.html +1 -1
- package/.next/server/app/settings/processes.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings/processes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/processes.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/processes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/processes.segments/settings/processes.segment.rsc +3 -3
- package/.next/server/app/settings/processes.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/routines/page.js.nft.json +1 -1
- package/.next/server/app/settings/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/routines.html +1 -1
- package/.next/server/app/settings/routines.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/routines.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/routines.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/routines.segments/settings/routines/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/routines.segments/settings/routines.segment.rsc +3 -3
- package/.next/server/app/settings/routines.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/schedule/page.js.nft.json +1 -1
- package/.next/server/app/settings/schedule/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/schedule.html +1 -1
- package/.next/server/app/settings/schedule.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/schedule.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/schedule.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/schedule.segments/settings/schedule/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/schedule.segments/settings/schedule.segment.rsc +3 -3
- package/.next/server/app/settings/schedule.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning/page.js.nft.json +1 -1
- package/.next/server/app/settings/self-learning/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/self-learning.html +1 -1
- package/.next/server/app/settings/self-learning.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings/self-learning.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings/self-learning.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/self-learning.segments/settings/self-learning/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/self-learning.segments/settings/self-learning.segment.rsc +3 -3
- package/.next/server/app/settings/self-learning.segments/settings.segment.rsc +4 -4
- package/.next/server/app/settings/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/page.js +16 -0
- package/.next/server/app/settings/wiki/page.js.map +5 -0
- package/.next/server/app/settings/wiki/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/settings/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/settings/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/settings/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/wiki/timeline/page.js +17 -0
- package/.next/server/app/settings/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/settings/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/settings/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/wiki/timeline.html +1 -0
- package/.next/server/app/settings/wiki/timeline.meta +17 -0
- package/.next/server/app/settings/wiki/timeline.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_full.segment.rsc +24 -0
- package/.next/server/app/settings/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline/__PAGE__.segment.rsc +6 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki/timeline.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.html +1 -0
- package/.next/server/app/settings/wiki.meta +16 -0
- package/.next/server/app/settings/wiki.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_full.segment.rsc +27 -0
- package/.next/server/app/settings/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/settings/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/wiki.segments/settings/wiki.segment.rsc +5 -0
- package/.next/server/app/settings/wiki.segments/settings.segment.rsc +5 -0
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +18 -18
- package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +10 -10
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +4 -4
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +1 -1
- package/.next/server/app/setup.rsc +17 -17
- package/.next/server/app/setup.segments/_full.segment.rsc +17 -17
- package/.next/server/app/setup.segments/_head.segment.rsc +4 -4
- package/.next/server/app/setup.segments/_index.segment.rsc +10 -10
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/setup.segments/setup.segment.rsc +3 -3
- package/.next/server/app/trip/page.js.nft.json +1 -1
- package/.next/server/app/trip/page_client-reference-manifest.js +1 -1
- package/.next/server/app/trip.html +1 -1
- package/.next/server/app/trip.rsc +17 -17
- package/.next/server/app/trip.segments/_full.segment.rsc +17 -17
- package/.next/server/app/trip.segments/_head.segment.rsc +4 -4
- package/.next/server/app/trip.segments/_index.segment.rsc +10 -10
- package/.next/server/app/trip.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/trip.segments/trip/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/trip.segments/trip.segment.rsc +3 -3
- package/.next/server/app/wiki/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/page.js +15 -0
- package/.next/server/app/wiki/page.js.map +5 -0
- package/.next/server/app/wiki/page.js.nft.json +1 -0
- package/.next/server/app/wiki/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline/page/app-paths-manifest.json +3 -0
- package/.next/server/app/wiki/timeline/page/build-manifest.json +18 -0
- package/.next/server/app/wiki/timeline/page/next-font-manifest.json +6 -0
- package/.next/server/app/wiki/timeline/page/react-loadable-manifest.json +8 -0
- package/.next/server/app/wiki/timeline/page/server-reference-manifest.json +4 -0
- package/.next/server/app/wiki/timeline/page.js +15 -0
- package/.next/server/app/wiki/timeline/page.js.map +5 -0
- package/.next/server/app/wiki/timeline/page.js.nft.json +1 -0
- package/.next/server/app/wiki/timeline/page_client-reference-manifest.js +3 -0
- package/.next/server/app/wiki/timeline.html +1 -0
- package/.next/server/app/wiki/timeline.meta +16 -0
- package/.next/server/app/wiki/timeline.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki/timeline.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki/timeline.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki/timeline.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki/timeline.segments/wiki/timeline.segment.rsc +5 -0
- package/.next/server/app/wiki/timeline.segments/wiki.segment.rsc +5 -0
- package/.next/server/app/wiki.html +1 -0
- package/.next/server/app/wiki.meta +15 -0
- package/.next/server/app/wiki.rsc +26 -0
- package/.next/server/app/wiki.segments/_full.segment.rsc +26 -0
- package/.next/server/app/wiki.segments/_head.segment.rsc +6 -0
- package/.next/server/app/wiki.segments/_index.segment.rsc +11 -0
- package/.next/server/app/wiki.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/wiki.segments/wiki/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/wiki.segments/wiki.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +5 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js +1 -1
- package/.next/server/chunks/0z~i_next_dist_esm_build_templates_app-route_0o_o_hp.js.map +1 -1
- package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js → [root-of-the-server]__01knfi.._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js → [root-of-the-server]__08_s4yo._.js} +2 -2
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js +3 -0
- package/.next/server/chunks/ssr/0juq_dashboard__next-internal_server_app_settings_wiki_timeline_page_actions_0czqn6z.js.map +1 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js +3 -0
- package/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_zap_115-27i.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0k3x-na.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0km22.v.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_0vui1gx.js.map +1 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js +4 -0
- package/.next/server/chunks/ssr/0z~i_next_dist_esm_build_templates_app-page_11h319t.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__007ymqm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vjce2._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07pkvm3._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfuz7_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__117dw_l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js +3 -0
- package/.next/server/chunks/ssr/_0-3uzu1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js +3 -0
- package/.next/server/chunks/ssr/_0-6jgyg._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-fv_sr._.js +1 -1
- package/.next/server/chunks/ssr/_0-fv_sr._.js.map +1 -1
- package/.next/server/chunks/ssr/_0.7pki~._.js +3 -0
- package/.next/server/chunks/ssr/_0.7pki~._.js.map +1 -0
- package/.next/server/chunks/ssr/_02s86rg._.js +3 -0
- package/.next/server/chunks/ssr/_02s86rg._.js.map +1 -0
- package/.next/server/chunks/ssr/_03bq.de._.js +3 -0
- package/.next/server/chunks/ssr/_03bq.de._.js.map +1 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js +3 -0
- package/.next/server/chunks/ssr/_03u6ja0._.js.map +1 -0
- package/.next/server/chunks/ssr/_04-.z69._.js +3 -0
- package/.next/server/chunks/ssr/_04-.z69._.js.map +1 -0
- package/.next/server/chunks/ssr/_05rlac0._.js +3 -0
- package/.next/server/chunks/ssr/_05rlac0._.js.map +1 -0
- package/.next/server/chunks/ssr/_05xysbw._.js +3 -0
- package/.next/server/chunks/ssr/_05xysbw._.js.map +1 -0
- package/.next/server/chunks/ssr/_09e_66m._.js +3 -0
- package/.next/server/chunks/ssr/_09e_66m._.js.map +1 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js +3 -0
- package/.next/server/chunks/ssr/_0_bnan9._.js.map +1 -0
- package/.next/server/chunks/ssr/_0b00io4._.js +3 -0
- package/.next/server/chunks/ssr/_0b00io4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js +3 -0
- package/.next/server/chunks/ssr/_0es_2i2._.js.map +1 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js +3 -0
- package/.next/server/chunks/ssr/_0g7_r5i._.js.map +1 -0
- package/.next/server/chunks/ssr/_0hojxqy._.js +1 -1
- package/.next/server/chunks/ssr/_0hojxqy._.js.map +1 -1
- package/.next/server/chunks/ssr/_0ifb9jm._.js +3 -0
- package/.next/server/chunks/ssr/_0ifb9jm._.js.map +1 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js +3 -0
- package/.next/server/chunks/ssr/_0jl_-u5._.js.map +1 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js +3 -0
- package/.next/server/chunks/ssr/_0lfuvjg._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0jm~wn-._.js → _0mp7n5i._.js} +2 -2
- package/.next/server/chunks/ssr/{_0jm~wn-._.js.map → _0mp7n5i._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0powsoh._.js +3 -0
- package/.next/server/chunks/ssr/_0powsoh._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js +3 -0
- package/.next/server/chunks/ssr/_0q34y9l._.js.map +1 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js +5 -0
- package/.next/server/chunks/ssr/_0q4rpi-._.js.map +1 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js +3 -0
- package/.next/server/chunks/ssr/_0rc-7d4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js +3 -0
- package/.next/server/chunks/ssr/_0tjsh16._.js.map +1 -0
- package/.next/server/chunks/ssr/_0tl98en._.js +1 -1
- package/.next/server/chunks/ssr/_0tl98en._.js.map +1 -1
- package/.next/server/chunks/ssr/{_0._ysx3._.js → _0v_6ros._.js} +2 -2
- package/.next/server/chunks/ssr/_0v_6ros._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vncjim._.js +3 -0
- package/.next/server/chunks/ssr/_0vncjim._.js.map +1 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js +3 -0
- package/.next/server/chunks/ssr/_0vx-jgf._.js.map +1 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js +3 -0
- package/.next/server/chunks/ssr/_0w1ez1p._.js.map +1 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js +3 -0
- package/.next/server/chunks/ssr/_0yl49yk._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z1ah9x._.js +1 -1
- package/.next/server/chunks/ssr/_0z1ah9x._.js.map +1 -1
- package/.next/server/chunks/ssr/_0z9ikwn._.js +3 -0
- package/.next/server/chunks/ssr/_0z9ikwn._.js.map +1 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js +3 -0
- package/.next/server/chunks/ssr/_0z_cp12._.js.map +1 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js +3 -0
- package/.next/server/chunks/ssr/_10hvwg5._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_settings_wiki_page_actions_12d~w9l.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_page_actions_026bi.d.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard__next-internal_server_app_wiki_timeline_page_actions_06jb4gg.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0bx940s._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0fo7nqq._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_activity_page_tsx_08yep46._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_connections_repositories_page_tsx_08y6paq._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_git_page_tsx_0ah19-6._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_schedule_page_tsx_0znc404._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_models_page_tsx_0djsx88._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_schedule_page_tsx_0b8zr2l._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_wiki_page_tsx_0..1tkb._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_app_setup_page_tsx_06k3via._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_connections_slack-card_tsx_0mahejj._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js +3 -0
- package/.next/server/chunks/ssr/packages_dashboard_src_components_settings_backend-settings_tsx_0i-tp_u._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +1 -1
- package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js.map +1 -1
- package/.next/server/middleware/middleware-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/01yix41q.0970.js +1 -0
- package/.next/static/chunks/02qjylw4yp63l.js +1 -0
- package/.next/static/chunks/06y2ddf5x9x_4.js +1 -0
- package/.next/static/chunks/{0ztl~44vjnpe1.js → 08ie9t4zn6n4-.js} +1 -1
- package/.next/static/chunks/091khs5zza4_4.js +1 -0
- package/.next/static/chunks/{0~_56pt8wsmeo.js → 0abhg-m1-acdb.js} +1 -1
- package/.next/static/chunks/0ae.1upy09t--.js +1 -0
- package/.next/static/chunks/0bvcd~k.vfro8.js +1 -0
- package/.next/static/chunks/{0g6.0r0i-wyeg.js → 0eqm47_oikj36.js} +1 -1
- package/.next/static/chunks/0fqugh~hv4my1.js +1 -0
- package/.next/static/chunks/0has04tc4mrik.js +1 -0
- package/.next/static/chunks/0huynm-qbj26k.js +1 -0
- package/.next/static/chunks/0ibq4zul6305p.js +1 -0
- package/.next/static/chunks/0jm_e6e6n~rdn.js +1 -0
- package/.next/static/chunks/0k0.4cksmybb2.js +1 -0
- package/.next/static/chunks/0l07yrtw3fxp5.js +1 -0
- package/.next/static/chunks/0nhqu-sq045x7.js +1 -0
- package/.next/static/chunks/0op3oc-if6n5-.js +3 -0
- package/.next/static/chunks/0p34n6.st3s~1.js +1 -0
- package/.next/static/chunks/0r8nosw42e2m9.js +1 -0
- package/.next/static/chunks/0shx3_mxukfhr.js +1 -0
- package/.next/static/chunks/0thm~t5g5adz1.js +1 -0
- package/.next/static/chunks/0thyr1cngc-j..css +1 -0
- package/.next/static/chunks/0ttdb_354lh4t.js +1 -0
- package/.next/static/chunks/0v..ut2v38yep.js +1 -0
- package/.next/static/chunks/{17npklzvg8-~3.js → 0vhj0k-zy6jhh.js} +1 -1
- package/.next/static/chunks/0wdx410~0~gmn.js +1 -0
- package/.next/static/chunks/0y3ptqa0bbi-h.js +1 -0
- package/.next/static/chunks/{0zbxi2grjtx.c.js → 0zx_~u_zxg_7e.js} +1 -1
- package/.next/static/chunks/{0f3kjzb~5zhc~.js → 10pq~97vgkzro.js} +1 -1
- package/.next/static/chunks/11hlk6.h1of0y.js +1 -0
- package/.next/static/chunks/13w_6v~nprp8j.js +11 -0
- package/.next/static/chunks/14-kkni6ecqaw.js +1 -0
- package/.next/static/chunks/{148a9fv~bo0gq.js → 1555iv~_t.1lp.js} +1 -1
- package/.next/static/chunks/{04bbme2th8s1_.js → 15ec5~pa1pv_z.js} +1 -1
- package/.next/static/chunks/15vc-857cdedi.js +1 -0
- package/.next/static/chunks/16zgco6hwlr-n.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/package.json +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02idks~._.js.map +0 -1
- package/.next/server/chunks/ssr/_0-8__9s._.js +0 -3
- package/.next/server/chunks/ssr/_0-8__9s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0._ysx3._.js.map +0 -1
- package/.next/server/chunks/ssr/_0.h-tj4._.js +0 -3
- package/.next/server/chunks/ssr/_0.h-tj4._.js.map +0 -1
- package/.next/server/chunks/ssr/_02g4o18._.js +0 -3
- package/.next/server/chunks/ssr/_02g4o18._.js.map +0 -1
- package/.next/server/chunks/ssr/_0463dg_._.js +0 -3
- package/.next/server/chunks/ssr/_0463dg_._.js.map +0 -1
- package/.next/server/chunks/ssr/_04a42pa._.js +0 -3
- package/.next/server/chunks/ssr/_04a42pa._.js.map +0 -1
- package/.next/server/chunks/ssr/_04kt9.8._.js +0 -3
- package/.next/server/chunks/ssr/_04kt9.8._.js.map +0 -1
- package/.next/server/chunks/ssr/_052zlig._.js +0 -3
- package/.next/server/chunks/ssr/_052zlig._.js.map +0 -1
- package/.next/server/chunks/ssr/_060itkv._.js +0 -3
- package/.next/server/chunks/ssr/_060itkv._.js.map +0 -1
- package/.next/server/chunks/ssr/_07p0n9g._.js +0 -3
- package/.next/server/chunks/ssr/_07p0n9g._.js.map +0 -1
- package/.next/server/chunks/ssr/_08mbdt1._.js +0 -3
- package/.next/server/chunks/ssr/_08mbdt1._.js.map +0 -1
- package/.next/server/chunks/ssr/_08r_qwd._.js +0 -3
- package/.next/server/chunks/ssr/_08r_qwd._.js.map +0 -1
- package/.next/server/chunks/ssr/_08xk3kp._.js +0 -3
- package/.next/server/chunks/ssr/_08xk3kp._.js.map +0 -1
- package/.next/server/chunks/ssr/_0938p.1._.js +0 -3
- package/.next/server/chunks/ssr/_0938p.1._.js.map +0 -1
- package/.next/server/chunks/ssr/_0afdsbz._.js +0 -3
- package/.next/server/chunks/ssr/_0afdsbz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ff5qav._.js +0 -3
- package/.next/server/chunks/ssr/_0ff5qav._.js.map +0 -1
- package/.next/server/chunks/ssr/_0gp8d.p._.js +0 -3
- package/.next/server/chunks/ssr/_0gp8d.p._.js.map +0 -1
- package/.next/server/chunks/ssr/_0k2j6-t._.js +0 -3
- package/.next/server/chunks/ssr/_0k2j6-t._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mix09j._.js +0 -3
- package/.next/server/chunks/ssr/_0mix09j._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mk7dqt._.js +0 -3
- package/.next/server/chunks/ssr/_0mk7dqt._.js.map +0 -1
- package/.next/server/chunks/ssr/_0n168uk._.js +0 -3
- package/.next/server/chunks/ssr/_0n168uk._.js.map +0 -1
- package/.next/server/chunks/ssr/_0nwg6lo._.js +0 -3
- package/.next/server/chunks/ssr/_0nwg6lo._.js.map +0 -1
- package/.next/server/chunks/ssr/_0pwd-nz._.js +0 -3
- package/.next/server/chunks/ssr/_0pwd-nz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0rspzax._.js +0 -3
- package/.next/server/chunks/ssr/_0rspzax._.js.map +0 -1
- package/.next/server/chunks/ssr/_0t-2u_i._.js +0 -3
- package/.next/server/chunks/ssr/_0t-2u_i._.js.map +0 -1
- package/.next/server/chunks/ssr/_0vn5_62._.js +0 -5
- package/.next/server/chunks/ssr/_0vn5_62._.js.map +0 -1
- package/.next/server/chunks/ssr/_0yiz~s5._.js +0 -3
- package/.next/server/chunks/ssr/_0yiz~s5._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~4ta0s._.js +0 -3
- package/.next/server/chunks/ssr/_0~4ta0s._.js.map +0 -1
- package/.next/server/chunks/ssr/_0~5r_8s._.js +0 -3
- package/.next/server/chunks/ssr/_0~5r_8s._.js.map +0 -1
- package/.next/server/chunks/ssr/_115_o9h._.js +0 -3
- package/.next/server/chunks/ssr/_115_o9h._.js.map +0 -1
- package/.next/server/chunks/ssr/_13mk_9n._.js +0 -3
- package/.next/server/chunks/ssr/_13mk_9n._.js.map +0 -1
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js +0 -3
- package/.next/server/chunks/ssr/packages_dashboard_src_07.4ogy._.js.map +0 -1
- package/.next/static/chunks/00p2fat~wl7uz.js +0 -1
- package/.next/static/chunks/07aksg8x5r0d9.js +0 -1
- package/.next/static/chunks/082cjr-p4ubw7.js +0 -1
- package/.next/static/chunks/09hewwcw-ts34.js +0 -1
- package/.next/static/chunks/09j~fmfefj03i.js +0 -1
- package/.next/static/chunks/0adfy5uyh_8c8.js +0 -1
- package/.next/static/chunks/0agoryx~xvt31.js +0 -1
- package/.next/static/chunks/0aoci_z-c0ele.css +0 -1
- package/.next/static/chunks/0atsym5j2dgzw.js +0 -1
- package/.next/static/chunks/0b3tta7tnnbur.js +0 -1
- package/.next/static/chunks/0d02.lqlwe9a_.js +0 -1
- package/.next/static/chunks/0eqyosc.qae5n.js +0 -1
- package/.next/static/chunks/0kkrrex6qm68-.js +0 -1
- package/.next/static/chunks/0lfxqap3b6sar.js +0 -11
- package/.next/static/chunks/0ord2b6oqi.3g.js +0 -1
- package/.next/static/chunks/0rh-ee9ky1ybq.js +0 -1
- package/.next/static/chunks/0t5v~o90gn66f.js +0 -1
- package/.next/static/chunks/0vaymprggmdwi.js +0 -3
- package/.next/static/chunks/0x2vder5-rzy3.js +0 -1
- package/.next/static/chunks/0yk64vsbmwqd8.js +0 -1
- package/.next/static/chunks/0yvzj34_7s6kb.js +0 -1
- package/.next/static/chunks/104za._t2qmr8.js +0 -1
- package/.next/static/chunks/13pe2-ed6nel..js +0 -1
- package/.next/static/chunks/13zn61okwjlyn.js +0 -1
- package/.next/static/chunks/153hm0-366-at.js +0 -1
- package/.next/static/chunks/16k3_-6f7kx97.js +0 -1
- package/.next/static/chunks/18904zqns5ncn.js +0 -1
- /package/.next/server/chunks/{[root-of-the-server]__00gp8gz._.js.map → [root-of-the-server]__01knfi.._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0-0wgko._.js.map → [root-of-the-server]__08_s4yo._.js.map} +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_buildManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{CDXVH-99b-ZdHz0Rd9pr_ → lsV2FU1YUtwJPmeiim7tk}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/dashboard/src/components/shared/step-card.tsx","../../../../../../packages/dashboard/src/components/connections/slack-card.tsx","../../../../../../packages/dashboard/src/components/connections/telegram-card.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-pairing-poll.ts","../../../../../../packages/dashboard/src/components/connections/discord-card.tsx","../../../../../../packages/dashboard/src/components/ui/phone-input.tsx","../../../../../../packages/dashboard/src/components/connections/whatsapp-card.tsx","../../../../../../packages/dashboard/src/components/connections/destination-selector.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/phone.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/message-circle.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/gamepad-2.ts","../../../../../../packages/dashboard/src/lib/countries.ts"],"sourcesContent":["import { cn } from \"@/lib/utils\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\n/**\n * Dashed-border container for the per-platform pairing/setup steps used in\n * Connections (Slack/Telegram/Discord) and the legacy messaging panel.\n *\n * The visual shell — `rounded-lg border border-dashed border-input bg-background/50 p-3`\n * — was duplicated ~19 times across four files; collapsing it here keeps the\n * step bodies (which are intentionally bespoke per platform) close to their\n * handlers while the framing stays consistent.\n *\n * `heading` (not `title`) intentionally — keeping `title` free lets the native\n * HTML `title` attribute (tooltip text) pass through via `...rest`.\n */\nexport interface StepCardProps extends HTMLAttributes<HTMLDivElement> {\n heading?: ReactNode;\n /** Vertical rhythm between children. Mirrors the `space-y-2` / `space-y-3`\n * variants the call sites used; pass `\"none\"` (default) for the original\n * no-`space-y-*` form, where bespoke per-child margins (`mt-1`/`mt-2`/…)\n * carry the spacing. */\n spacing?: \"none\" | \"sm\" | \"md\";\n}\n\nconst SPACING_CLASS = {\n none: \"\",\n sm: \"space-y-2\",\n md: \"space-y-3\",\n} as const;\n\nexport function StepCard({\n className,\n heading,\n spacing = \"none\",\n children,\n ...rest\n}: StepCardProps) {\n return (\n <div\n className={cn(\n \"rounded-lg border border-dashed border-input bg-background/50 p-3\",\n SPACING_CLASS[spacing],\n className,\n )}\n {...rest}\n >\n {heading != null && <p className=\"text-xs font-medium\">{heading}</p>}\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { StepCard } from \"@/components/shared/step-card\";\nimport { Hash } from \"lucide-react\";\nimport type {\n SlackBotInfoResponse,\n SlackPairingStatusResponse,\n SlackManifestResponse,\n PhrasePairingStartResponse,\n MessagingHealthStatus,\n} from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function SlackCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.slack;\n\n const [draftBot, setDraftBot] = useState(\"\");\n const [draftApp, setDraftApp] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [manifest, setManifest] = useState<SlackManifestResponse | null>(null);\n const [botInfo, setBotInfo] = useState<SlackBotInfoResponse | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [phrase, setPhrase] = useState<PhrasePairingStartResponse | null>(null);\n\n const pairing = usePairingPoll<SlackPairingStatusResponse>(\n \"/messaging/slack/pairing-status\",\n (d) => d.paired || !d.pairingActive,\n );\n\n // When pairing completes, clear the phrase display.\n if (pairing.status?.paired && phrase) setPhrase(null);\n if (pairing.status && !pairing.status.pairingActive && phrase) setPhrase(null);\n\n if (!config || !health) return null;\n\n const handleSave = async () => {\n setSaving(true); setError(null); setNotice(null);\n try {\n await api.put(\"/secrets/slack\", {\n ...(draftBot ? { botToken: draftBot } : {}),\n ...(draftApp ? { appToken: draftApp } : {}),\n });\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n setNotice(\"Updated.\"); setDraftBot(\"\"); setDraftApp(\"\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(false); }\n };\n\n const handleTest = async () => {\n setBusy(\"test\"); setError(null);\n try {\n const candidate = draftBot || undefined;\n const info = await api.post<SlackBotInfoResponse>(\n \"/messaging/slack/test-token\",\n candidate ? { token: candidate } : undefined,\n );\n setBotInfo(info);\n setNotice(`Token OK — bot: ${info.botName ?? \"(unknown)\"}${info.team ? ` @ ${info.team}` : \"\"}`);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Token test failed\");\n } finally { setBusy(null); }\n };\n\n const handleStartPairing = async () => {\n setBusy(\"pair\"); setError(null);\n try {\n const res = await api.post<PhrasePairingStartResponse>(\"/messaging/slack/start-pairing\");\n setPhrase(res);\n pairing.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n } finally { setBusy(null); }\n };\n\n const handleCancelPairing = async () => {\n pairing.reset(); setPhrase(null);\n try { await api.post(\"/messaging/slack/cancel-pairing\"); } catch { /* best-effort */ }\n };\n\n return (\n <ConnectionCard\n name=\"Slack\"\n icon={<Hash className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"success\">{notice}</Alert>}\n\n {/* Step 1 — Create the app */}\n <StepCard heading=\"Step 1 — Create the Slack app\">\n <p className=\"mt-1 text-xs text-muted-foreground\">\n We'll pre-fill the manifest with the right scopes and Socket Mode enabled.\n </p>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"manifest\"}\n onClick={async () => {\n setBusy(\"manifest\"); setError(null);\n try {\n const res = await api.get<SlackManifestResponse>(\"/messaging/slack/manifest\");\n setManifest(res);\n window.open(res.createAppUrl, \"_blank\", \"noopener\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to load manifest\");\n } finally { setBusy(null); }\n }}>\n {busy === \"manifest\" ? \"Loading...\" : \"Open Slack app builder\"}\n </Button>\n {manifest && (\n <Button size=\"sm\" variant=\"ghost\"\n onClick={() => { void navigator.clipboard?.writeText(manifest.manifestJson); setNotice(\"Manifest copied.\"); }}>\n Copy manifest JSON\n </Button>\n )}\n </div>\n {manifest && (\n <ol className=\"mt-3 list-inside list-decimal space-y-1 text-xs text-muted-foreground\">\n {manifest.instructions.map((line) => (\n <li key={line}>{line.replace(/^\\d+\\.\\s*/, \"\")}</li>\n ))}\n </ol>\n )}\n </StepCard>\n\n {/* Step 2 — Tokens */}\n <StepCard heading=\"Step 2 — Paste tokens\" spacing=\"md\">\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Bot token</label>\n <Input type=\"password\" value={draftBot}\n placeholder={config.slackConfigured ? \"Configured. Enter a new token to replace it.\" : \"xoxb-...\"}\n onChange={(e) => setDraftBot(e.target.value)} />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">App token</label>\n <Input type=\"password\" value={draftApp}\n placeholder={config.slackConfigured ? \"Configured. Enter a new token to replace it.\" : \"xapp-...\"}\n onChange={(e) => setDraftApp(e.target.value)} />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving} onClick={handleSave}>\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"test\"} onClick={handleTest}>\n {busy === \"test\" ? \"Testing...\" : \"Test token\"}\n </Button>\n </div>\n {botInfo && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300\">\n ✓ Bot: <code className=\"font-mono\">{botInfo.botName}</code>\n {botInfo.team && <> · workspace: <code className=\"font-mono\">{botInfo.team}</code></>}\n {botInfo.botUserId && <> · id: <code className=\"font-mono\">{botInfo.botUserId}</code></>}\n </p>\n )}\n </StepCard>\n\n {/* Step 3 — Pair */}\n <StepCard heading=\"Step 3 — Pair with magic phrase\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Click below to generate a one-time phrase. Send your bot a DM in Slack\n containing that exact phrase — only that DM will capture your user ID.\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.slackConfigured || busy === \"pair\"}\n title={config.slackConfigured ? undefined : \"Save your tokens first\"}\n onClick={handleStartPairing}>\n {busy === \"pair\" ? \"Generating...\" : \"Generate pairing phrase\"}\n </Button>\n {pairing.active && (\n <Button size=\"sm\" variant=\"ghost\" onClick={handleCancelPairing}>Cancel</Button>\n )}\n </div>\n {phrase && (\n <div className=\"rounded-md bg-muted p-3 text-center\">\n <p className=\"text-xs text-muted-foreground mb-1\">Send this phrase to your bot in Slack:</p>\n <code className=\"font-mono text-base font-semibold tracking-wide\">{phrase.phrase}</code>\n <p className=\"mt-2 text-[11px] text-muted-foreground\">\n Expires {new Date(phrase.expiresAt).toLocaleTimeString()} · punctuation and case are ignored.\n </p>\n </div>\n )}\n {pairing.status && (\n <p className=\"text-xs text-muted-foreground\">\n {pairing.status.paired\n ? <>✓ Owner paired: <code className=\"font-mono\">{pairing.status.ownerUserId}</code></>\n : pairing.active ? \"Waiting for the phrase...\" : null}\n </p>\n )}\n </StepCard>\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { StepCard } from \"@/components/shared/step-card\";\nimport { MessageCircle } from \"lucide-react\";\nimport type {\n TelegramBotInfoResponse,\n TelegramPairingStartResponse,\n TelegramPairingStatusResponse,\n MessagingHealthStatus,\n} from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function TelegramCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.telegram;\n\n const [draft, setDraft] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [botInfo, setBotInfo] = useState<TelegramBotInfoResponse | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [pairData, setPairData] = useState<TelegramPairingStartResponse | null>(null);\n\n const pairing = usePairingPoll<TelegramPairingStatusResponse>(\n \"/messaging/telegram/pairing-status\",\n (d) => d.paired,\n );\n\n if (!config || !health) return null;\n\n const handleSave = async () => {\n setSaving(true); setError(null); setNotice(null);\n try {\n await api.put(\"/secrets/telegram\", { ...(draft ? { botToken: draft } : {}) });\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n setNotice(\"Updated.\"); setDraft(\"\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(false); }\n };\n\n const handleTest = async () => {\n setBusy(\"test\"); setError(null);\n try {\n const candidate = draft || undefined;\n const info = await api.post<TelegramBotInfoResponse>(\n \"/messaging/telegram/test-token\",\n candidate ? { token: candidate } : undefined,\n );\n setBotInfo(info);\n setNotice(`Token OK — bot: ${info.firstName ?? info.username ?? info.id}`);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Token test failed\");\n } finally { setBusy(null); }\n };\n\n const handleStartPairing = async () => {\n setBusy(\"pair\"); setError(null);\n try {\n const res = await api.post<TelegramPairingStartResponse>(\"/messaging/telegram/start-pairing\");\n setPairData(res);\n pairing.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n } finally { setBusy(null); }\n };\n\n const handleCancelPairing = async () => {\n pairing.reset(); setPairData(null);\n try { await api.post(\"/messaging/telegram/cancel-pairing\"); } catch { /* best-effort */ }\n };\n\n return (\n <ConnectionCard\n name=\"Telegram\"\n icon={<MessageCircle className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"success\">{notice}</Alert>}\n\n {/* Step 1 */}\n <StepCard heading=\"Step 1 — Create the bot\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Open <a className=\"underline\" href=\"https://t.me/botfather\" target=\"_blank\" rel=\"noopener noreferrer\">@BotFather</a>,\n send <code className=\"font-mono\">/newbot</code>, give it a name and username,\n then copy the token.\n </p>\n </StepCard>\n\n {/* Step 2 — Token */}\n <StepCard heading=\"Step 2 — Paste token\" spacing=\"md\">\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Bot token</label>\n <Input type=\"password\" value={draft}\n placeholder={config.telegramConfigured ? \"Configured. Enter a new token to replace it.\" : \"123456:ABC-DEF…\"}\n onChange={(e) => setDraft(e.target.value)} />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving} onClick={handleSave}>\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"test\"} onClick={handleTest}>\n {busy === \"test\" ? \"Testing...\" : \"Test token\"}\n </Button>\n </div>\n {botInfo && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300\">\n ✓ Bot: <code className=\"font-mono\">@{botInfo.username ?? botInfo.id}</code>\n </p>\n )}\n </StepCard>\n\n {/* Step 3 — QR */}\n <StepCard heading=\"Step 3 — Pair with QR\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Generate a QR code that opens your bot in Telegram and sends a one-shot pairing token.\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.telegramConfigured || busy === \"pair\"}\n title={config.telegramConfigured ? undefined : \"Save your token first\"}\n onClick={handleStartPairing}>\n {busy === \"pair\" ? \"Generating...\" : \"Pair with QR\"}\n </Button>\n {pairData && (\n <Button size=\"sm\" variant=\"ghost\" onClick={handleCancelPairing}>Cancel</Button>\n )}\n </div>\n {pairData && (\n <div className=\"flex flex-col items-center gap-2 rounded-lg bg-muted p-4\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img src={pairData.qrDataUrl} alt=\"Telegram pairing QR\" width={320} height={320} className=\"rounded bg-white p-2\" />\n <p className=\"text-xs text-muted-foreground text-center\">\n Scan with your phone — Telegram will open <code className=\"font-mono\">@{pairData.botUsername}</code> and send the pairing token automatically.\n </p>\n <a className=\"text-xs underline\" href={pairData.deepLink} target=\"_blank\" rel=\"noopener noreferrer\">\n Or open the link directly\n </a>\n </div>\n )}\n {pairing.status?.paired && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300\">\n ✓ Paired with chat ID <code className=\"font-mono\">{pairing.status.ownerChatId}</code>\n </p>\n )}\n </StepCard>\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\n\n/**\n * Generic polling hook for pairing flows.\n *\n * Polls `url` at `intervalMs` until `shouldStop(data)` returns true,\n * then stops polling and invalidates config + health queries.\n */\nexport function usePairingPoll<T>(\n url: string,\n shouldStop: (data: T) => boolean,\n intervalMs = 2000,\n) {\n const queryClient = useQueryClient();\n const pollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const shouldStopRef = useRef(shouldStop);\n\n const [status, setStatus] = useState<T | null>(null);\n const [active, setActive] = useState(false);\n\n useEffect(() => {\n shouldStopRef.current = shouldStop;\n });\n\n const stop = useCallback(() => {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n setActive(false);\n }, []);\n\n const start = useCallback(() => {\n if (pollRef.current) return;\n setActive(true);\n pollRef.current = setInterval(async () => {\n try {\n const data = await api.get<T>(url);\n setStatus(data);\n if (shouldStopRef.current(data)) {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n setActive(false);\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n }\n } catch {\n // Transient — keep polling.\n }\n }, intervalMs);\n }, [url, intervalMs, queryClient]);\n\n const reset = useCallback(() => {\n stop();\n setStatus(null);\n }, [stop]);\n\n useEffect(() => {\n return () => {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n };\n }, []);\n\n return { status, active, start, stop, reset };\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { StepCard } from \"@/components/shared/step-card\";\nimport { Gamepad2 } from \"lucide-react\";\nimport type {\n DiscordBotInfoResponse,\n DiscordPairingStatusResponse,\n PhrasePairingStartResponse,\n MessagingHealthStatus,\n} from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function DiscordCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.discord;\n\n const [draft, setDraft] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [botInfo, setBotInfo] = useState<DiscordBotInfoResponse | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [phrase, setPhrase] = useState<PhrasePairingStartResponse | null>(null);\n\n const pairing = usePairingPoll<DiscordPairingStatusResponse>(\n \"/messaging/discord/pairing-status\",\n (d) => d.paired || !d.pairingActive,\n );\n\n if (pairing.status?.paired && phrase) setPhrase(null);\n if (pairing.status && !pairing.status.pairingActive && phrase) setPhrase(null);\n\n if (!config || !health) return null;\n\n const handleSave = async () => {\n setSaving(true); setError(null); setNotice(null);\n try {\n await api.put(\"/secrets/discord\", { ...(draft ? { botToken: draft } : {}) });\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n setNotice(\"Updated.\"); setDraft(\"\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(false); }\n };\n\n const handleTest = async () => {\n setBusy(\"test\"); setError(null);\n try {\n const candidate = draft || undefined;\n const info = await api.post<DiscordBotInfoResponse>(\n \"/messaging/discord/test-token\",\n candidate ? { token: candidate } : undefined,\n );\n setBotInfo(info);\n setNotice(`Token OK — bot: ${info.username}`);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Token test failed\");\n } finally { setBusy(null); }\n };\n\n const handleStartPairing = async () => {\n setBusy(\"pair\"); setError(null);\n try {\n const res = await api.post<PhrasePairingStartResponse>(\"/messaging/discord/start-pairing\");\n setPhrase(res);\n pairing.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n } finally { setBusy(null); }\n };\n\n const handleCancelPairing = async () => {\n pairing.reset(); setPhrase(null);\n try { await api.post(\"/messaging/discord/cancel-pairing\"); } catch { /* best-effort */ }\n };\n\n return (\n <ConnectionCard\n name=\"Discord\"\n icon={<Gamepad2 className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"success\">{notice}</Alert>}\n\n {/* Step 1 */}\n <StepCard heading=\"Step 1 — Create the bot\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Open the <a className=\"underline\" href=\"https://discord.com/developers/applications\" target=\"_blank\" rel=\"noopener noreferrer\">Discord Developer Portal</a>,\n create an application, add a Bot, enable "Message Content Intent", and copy the token.\n </p>\n </StepCard>\n\n {/* Step 2 — Token */}\n <StepCard heading=\"Step 2 — Paste token\" spacing=\"md\">\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Bot token</label>\n <Input type=\"password\" value={draft}\n placeholder={config.discordConfigured ? \"Configured. Enter a new token to replace it.\" : \"Discord bot token\"}\n onChange={(e) => setDraft(e.target.value)} />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving} onClick={handleSave}>\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"test\"} onClick={handleTest}>\n {busy === \"test\" ? \"Testing...\" : \"Test token\"}\n </Button>\n </div>\n {botInfo && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300 flex items-center gap-2\">\n ✓ Bot: <code className=\"font-mono\">{botInfo.username}</code>\n {botInfo.avatarUrl && (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img src={botInfo.avatarUrl} alt=\"\" width={16} height={16} className=\"rounded-full\" />\n )}\n </p>\n )}\n </StepCard>\n\n {/* Step 3 — Pair */}\n <StepCard heading=\"Step 3 — Pair with magic phrase\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Add the bot to a server, then click below to generate a one-time phrase.\n DM the bot with that phrase — only that DM captures your user ID.\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.discordConfigured || busy === \"pair\"}\n title={config.discordConfigured ? undefined : \"Save your token first\"}\n onClick={handleStartPairing}>\n {busy === \"pair\" ? \"Generating...\" : \"Generate pairing phrase\"}\n </Button>\n {pairing.active && (\n <Button size=\"sm\" variant=\"ghost\" onClick={handleCancelPairing}>Cancel</Button>\n )}\n </div>\n {phrase && (\n <div className=\"rounded-md bg-muted p-3 text-center\">\n <p className=\"text-xs text-muted-foreground mb-1\">Send this phrase to your bot in Discord:</p>\n <code className=\"font-mono text-base font-semibold tracking-wide\">{phrase.phrase}</code>\n <p className=\"mt-2 text-[11px] text-muted-foreground\">\n Expires {new Date(phrase.expiresAt).toLocaleTimeString()} · punctuation and case are ignored.\n </p>\n </div>\n )}\n {pairing.status && (\n <p className=\"text-xs text-muted-foreground\">\n {pairing.status.paired\n ? <>✓ Owner paired: <code className=\"font-mono\">{pairing.status.ownerUserId}</code></>\n : pairing.active ? \"Waiting for the phrase...\" : null}\n </p>\n )}\n </StepCard>\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { Input } from \"@/components/ui/input\";\nimport {\n COUNTRIES,\n composeE164,\n detectCountryFromPhone,\n getCountryByIso2,\n stripDialCode,\n type Country,\n} from \"@/lib/countries\";\n\ninterface PhoneInputProps {\n /** The current E.164 value (e.g. `+18589107283`). May be `\"\"` for unset. */\n value: string;\n /** Called whenever the user types or picks a new country. Receives the\n * fully-composed E.164 value. */\n onChange: (next: string) => void;\n placeholder?: string;\n defaultCountryIso2?: string;\n disabled?: boolean;\n id?: string;\n}\n\n/**\n * Phone-number input with a country flag picker. Selecting a country\n * auto-fills the dial code; the local-number text field only shows the\n * subscriber number portion. Pasting a full `+...` value into the local\n * field re-detects the country automatically.\n *\n * Why a single composed E.164 value (not separate state for country/local):\n * the rest of the dashboard treats `whatsappOwnerPhone` as one string, and\n * the daemon's validator (`STRING_VALIDATORS.whatsappOwnerPhone`) only\n * accepts E.164. Keeping the truth in one composed string avoids drift.\n */\nexport function PhoneInput({\n value,\n onChange,\n placeholder = \"Subscriber number\",\n defaultCountryIso2 = \"US\",\n disabled,\n id,\n}: PhoneInputProps) {\n // Derive the country from the incoming `value`. If we can't detect one\n // (empty value, malformed prefix), fall back to the default. We persist\n // the chosen country in local state so users who clear the local field\n // don't suddenly lose their flag selection.\n const detected = useMemo(\n () => detectCountryFromPhone(value) ?? getCountryByIso2(defaultCountryIso2) ?? COUNTRIES[0],\n [value, defaultCountryIso2],\n );\n const [country, setCountry] = useState<Country>(detected);\n\n // Sync local country state when the parent value gives us a new prefix.\n useEffect(() => {\n const fromValue = detectCountryFromPhone(value);\n if (fromValue && fromValue.iso2 !== country.iso2) {\n setCountry(fromValue);\n }\n // Intentionally exclude `country` from deps — we only want to react to\n // EXTERNAL value changes here, not our own setCountry.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const localNumber = stripDialCode(value, country);\n\n const handleCountryChange = (iso2: string) => {\n const next = getCountryByIso2(iso2);\n if (!next) return;\n setCountry(next);\n // Re-emit with the new dial code so the parent's E.164 stays consistent.\n onChange(composeE164(next, localNumber));\n };\n\n const handleLocalChange = (raw: string) => {\n // If the user pastes a full international number into the local field,\n // re-detect the country instead of treating the `+` as a stray digit.\n if (raw.startsWith(\"+\")) {\n const detectedFromPaste = detectCountryFromPhone(raw);\n if (detectedFromPaste) {\n setCountry(detectedFromPaste);\n onChange(composeE164(detectedFromPaste, stripDialCode(raw, detectedFromPaste)));\n return;\n }\n }\n onChange(composeE164(country, raw));\n };\n\n return (\n <div className=\"flex items-stretch gap-2\">\n <Select\n value={country.iso2}\n onValueChange={handleCountryChange}\n disabled={disabled}\n >\n <SelectTrigger\n className=\"w-[140px] flex-shrink-0\"\n aria-label=\"Country code\"\n >\n <SelectValue>\n <span className=\"flex items-center gap-2\">\n <span className=\"text-base leading-none\">{country.flag}</span>\n <span className=\"text-xs text-muted-foreground\">+{country.dial}</span>\n </span>\n </SelectValue>\n </SelectTrigger>\n <SelectContent className=\"max-h-[320px]\">\n {COUNTRIES.map((c) => (\n <SelectItem key={c.iso2} value={c.iso2}>\n <span className=\"flex items-center gap-2\">\n <span className=\"text-base leading-none\">{c.flag}</span>\n <span className=\"text-sm\">{c.name}</span>\n <span className=\"text-xs text-muted-foreground\">+{c.dial}</span>\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n id={id}\n type=\"tel\"\n inputMode=\"tel\"\n placeholder={placeholder}\n value={localNumber}\n onChange={(e) => handleLocalChange(e.target.value)}\n disabled={disabled}\n className=\"flex-1\"\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { DirectoryPickerField } from \"@/components/directory-picker-field\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { PhoneInput } from \"@/components/ui/phone-input\";\nimport { Phone } from \"lucide-react\";\nimport type { WhatsAppQrResponse, ConfigUpdateResponse, MessagingHealthStatus } from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function WhatsAppCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.whatsapp;\n\n const [draftPhone, setDraftPhone] = useState(\"\");\n const [draftAuthDir, setDraftAuthDir] = useState(\"\");\n const [saving, setSaving] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n\n const qrPoll = usePairingPoll<WhatsAppQrResponse>(\n \"/messaging/whatsapp/qr\",\n (d) => d.state === \"ok\" || d.state === \"logged_out\",\n 3000,\n );\n\n if (!config || !health) return null;\n\n const saveUpdates = async (updates: Record<string, unknown>) => {\n setError(null); setNotice(null);\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n if (res.requiresRestart.length > 0) {\n setNotice(`Updated. Restart daemon for: ${res.requiresRestart.join(\", \")}`);\n } else {\n setNotice(\"Updated.\");\n }\n };\n\n const handleToggle = async () => {\n setSaving(\"toggle\");\n setError(null); setNotice(null);\n try {\n const wasEnabled = config.whatsappEnabled;\n // Save config first, but defer query invalidation until the adapter is\n // registered on the daemon side — otherwise the next /health refetch\n // can race ahead of POST /pair and briefly see whatsappEnabled=true\n // without a registered adapter, which MessageHub maps to \"error\".\n const patchRes = await api.patch<ConfigUpdateResponse>(\"/config\", {\n whatsappEnabled: !wasEnabled,\n ...(draftPhone ? { whatsappOwnerPhone: draftPhone } : {}),\n ...(draftAuthDir ? { whatsappAuthDir: draftAuthDir } : {}),\n });\n if (!wasEnabled) {\n try {\n const pairRes = await api.post<WhatsAppQrResponse>(\"/messaging/whatsapp/pair\");\n if (pairRes.state !== \"ok\") qrPoll.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n }\n } else {\n qrPoll.reset();\n }\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n if (patchRes.requiresRestart.length > 0) {\n setNotice(`Updated. Restart daemon for: ${patchRes.requiresRestart.join(\", \")}`);\n } else {\n setNotice(\"Updated.\");\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to toggle WhatsApp\");\n } finally { setSaving(null); }\n };\n\n const handleSaveConfig = async () => {\n setSaving(\"config\");\n try {\n await saveUpdates({\n ...(draftPhone ? { whatsappOwnerPhone: draftPhone } : {}),\n ...(draftAuthDir ? { whatsappAuthDir: draftAuthDir } : {}),\n });\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(null); }\n };\n\n const handlePair = async () => {\n setError(null);\n try {\n const res = await api.post<WhatsAppQrResponse>(\"/messaging/whatsapp/pair\");\n if (res.state !== \"ok\") qrPoll.start();\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to request pairing\");\n }\n };\n\n const handleRefreshQr = async () => {\n try {\n await api.get<WhatsAppQrResponse>(\"/messaging/whatsapp/qr\");\n // Poll will pick up changes; just force a read\n qrPoll.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to fetch QR\");\n }\n };\n\n const qr = qrPoll.status;\n\n return (\n <ConnectionCard\n name=\"WhatsApp\"\n icon={<Phone className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"warning\">{notice}</Alert>}\n\n {/* Enable/Disable */}\n <div className=\"flex items-center gap-2\">\n <Button size=\"sm\"\n variant={config.whatsappEnabled ? \"default\" : \"outline\"}\n disabled={saving === \"toggle\" || (!config.whatsappEnabled && !config.whatsappOwnerPhoneConfigured && !draftPhone)}\n onClick={handleToggle}>\n {config.whatsappEnabled ? \"Disable WhatsApp\" : \"Enable WhatsApp\"}\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {config.whatsappEnabled\n ? \"Adapter hot-reloads on save — no daemon restart needed.\"\n : \"Set the owner phone first, then click Enable to start pairing.\"}\n </span>\n </div>\n\n {/* Owner phone */}\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\" htmlFor=\"whatsapp-owner-phone\">Owner phone</label>\n <PhoneInput id=\"whatsapp-owner-phone\" value={draftPhone} onChange={setDraftPhone}\n placeholder={config.whatsappOwnerPhoneConfigured ? \"Configured — type to replace\" : \"Subscriber number\"}\n defaultCountryIso2=\"US\" />\n </div>\n\n {/* Auth dir */}\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Auth dir</label>\n <DirectoryPickerField\n value={draftAuthDir}\n onChange={setDraftAuthDir}\n title=\"Choose WhatsApp auth directory\"\n placeholder={config.whatsappAuthDir || \"~/.personal-agent/whatsapp/auth\"}\n defaultPath={config.whatsappAuthDir || undefined}\n />\n </div>\n\n {/* Action buttons */}\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving === \"config\"} onClick={handleSaveConfig}>\n {saving === \"config\" ? \"Saving...\" : \"Save Config\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.whatsappEnabled || qrPoll.active}\n title={config.whatsappEnabled ? undefined : \"Enable WhatsApp first\"}\n onClick={handlePair}>\n {qrPoll.active ? \"Pairing...\" : \"Pair device\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={!config.whatsappEnabled} onClick={handleRefreshQr}>\n Refresh QR\n </Button>\n {qrPoll.active && (\n <Button size=\"sm\" variant=\"ghost\" onClick={() => qrPoll.reset()}>Stop polling</Button>\n )}\n </div>\n\n {/* QR code */}\n {qr && (\n <>\n <Separator />\n <div className=\"space-y-3\">\n {qr.dataUrl ? (\n <div className=\"flex flex-col items-center gap-2 rounded-lg bg-muted p-4\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img src={qr.dataUrl} alt=\"WhatsApp pairing QR\" width={320} height={320} className=\"rounded bg-white p-2\" />\n <p className=\"text-xs text-muted-foreground\">\n Open WhatsApp → Settings → Linked Devices → Link a device, and scan this code.\n </p>\n </div>\n ) : (\n <p className=\"text-xs text-muted-foreground\">\n {qr.state === \"ok\" ? \"WhatsApp is paired and connected.\"\n : qr.state === \"connecting\" ? \"Connecting to WhatsApp...\"\n : qr.state === \"awaiting_qr\" ? \"Generating QR code...\"\n : qr.state === \"logged_out\" ? \"Session logged out — click Pair device to start over.\"\n : \"Waiting for QR code...\"}\n </p>\n )}\n {qr.error && <Alert variant=\"error\">{qr.error}</Alert>}\n </div>\n </>\n )}\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport type { ConfigUpdateResponse } from \"@/lib/api-types\";\n\nexport function DestinationSelector() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n\n const available = Object.entries(health?.messaging ?? {})\n .filter(\n ([platform, status]) =>\n platform !== \"dashboard\"\n && status.configured\n && status.ownerConfigured,\n )\n .map(([platform]) => platform);\n\n const selected = config?.defaultNotificationPlatforms ?? [];\n\n const [draft, setDraft] = useState<string[]>(selected);\n const [saving, setSaving] = useState(false);\n const [notice, setNotice] = useState<string | null>(null);\n\n const selectedKey = selected.join(\",\");\n useEffect(() => {\n setDraft(selected);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- stable serialized key\n }, [selectedKey]);\n\n if (!config || !health) return null;\n\n const toggle = (platform: string) => {\n setDraft((prev) =>\n prev.includes(platform)\n ? prev.filter((item) => item !== platform)\n : [...prev, platform],\n );\n };\n\n const hasChanges =\n draft.length !== selected.length\n || draft.some((item) => !selected.includes(item));\n\n const handleSave = async () => {\n setSaving(true);\n setNotice(null);\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", {\n defaultNotificationPlatforms: draft,\n });\n await Promise.all([\n queryClient.invalidateQueries({ queryKey: [\"config\"] }),\n queryClient.invalidateQueries({ queryKey: [\"health\"] }),\n ]);\n if (res.requiresRestart.length > 0) {\n setNotice(`Updated. Restart daemon for: ${res.requiresRestart.join(\", \")}`);\n }\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Default Reminder Destinations</CardTitle>\n </CardHeader>\n <div className=\"space-y-3\">\n <div className=\"flex flex-wrap gap-2\">\n {available.map((platform) => (\n <Button\n key={platform}\n size=\"sm\"\n variant={draft.includes(platform) ? \"default\" : \"outline\"}\n onClick={() => toggle(platform)}\n className=\"capitalize\"\n disabled={saving}\n >\n {platform}\n </Button>\n ))}\n {available.length === 0 && (\n <span className=\"text-xs text-muted-foreground\">\n No eligible messaging app is configured yet.\n </span>\n )}\n </div>\n <p className=\"max-w-prose text-xs text-muted-foreground\">\n Every selected destination receives the same reminder. Replies still go\n back to the app where the conversation happened, and one request can\n override the destination without changing this default.\n </p>\n {notice && <p className=\"text-xs text-amber-700 dark:text-amber-300\">{notice}</p>}\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={!hasChanges || saving}\n onClick={handleSave}\n >\n {saving ? \"Saving...\" : \"Save Reminder Destinations\"}\n </Button>\n </div>\n </Card>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Phone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/phone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Phone = createLucideIcon('Phone', [\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n key: 'foiqr5',\n },\n ],\n]);\n\nexport default Phone;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name MessageCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircle = createLucideIcon('MessageCircle', [\n ['path', { d: 'M7.9 20A9 9 0 1 0 4 16.1L2 22Z', key: 'vv11sd' }],\n]);\n\nexport default MessageCircle;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Gamepad2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/gamepad-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Gamepad2 = createLucideIcon('Gamepad2', [\n ['line', { x1: '6', x2: '10', y1: '11', y2: '11', key: '1gktln' }],\n ['line', { x1: '8', x2: '8', y1: '9', y2: '13', key: 'qnk9ow' }],\n ['line', { x1: '15', x2: '15.01', y1: '12', y2: '12', key: 'krot7o' }],\n ['line', { x1: '18', x2: '18.01', y1: '10', y2: '10', key: '1lcuu1' }],\n [\n 'path',\n {\n d: 'M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z',\n key: 'mfqc10',\n },\n ],\n]);\n\nexport default Gamepad2;\n","/**\n * Country dialing codes for the phone-input picker.\n *\n * `iso2` is the canonical ISO 3166-1 alpha-2 code (used as the React key and\n * the basis for the regional-indicator flag emoji). `dial` is the international\n * trunk code WITHOUT the leading `+`. `flag` is precomputed at module load\n * because rebuilding ~250 emojis on every render would be wasteful.\n */\nexport interface Country {\n iso2: string;\n name: string;\n dial: string;\n flag: string;\n}\n\n// Convert an ISO2 code (e.g. \"JP\") to its regional-indicator-symbol flag.\nfunction iso2ToFlag(iso2: string): string {\n if (iso2.length !== 2) return \"🏳\";\n const A = 0x1f1e6;\n const a = \"A\".charCodeAt(0);\n const codePoints = iso2\n .toUpperCase()\n .split(\"\")\n .map((c) => A + (c.charCodeAt(0) - a));\n return String.fromCodePoint(...codePoints);\n}\n\nconst RAW: Array<Omit<Country, \"flag\">> = [\n { iso2: \"AF\", name: \"Afghanistan\", dial: \"93\" },\n { iso2: \"AL\", name: \"Albania\", dial: \"355\" },\n { iso2: \"DZ\", name: \"Algeria\", dial: \"213\" },\n { iso2: \"AD\", name: \"Andorra\", dial: \"376\" },\n { iso2: \"AO\", name: \"Angola\", dial: \"244\" },\n { iso2: \"AR\", name: \"Argentina\", dial: \"54\" },\n { iso2: \"AM\", name: \"Armenia\", dial: \"374\" },\n { iso2: \"AU\", name: \"Australia\", dial: \"61\" },\n { iso2: \"AT\", name: \"Austria\", dial: \"43\" },\n { iso2: \"AZ\", name: \"Azerbaijan\", dial: \"994\" },\n { iso2: \"BS\", name: \"Bahamas\", dial: \"1242\" },\n { iso2: \"BH\", name: \"Bahrain\", dial: \"973\" },\n { iso2: \"BD\", name: \"Bangladesh\", dial: \"880\" },\n { iso2: \"BB\", name: \"Barbados\", dial: \"1246\" },\n { iso2: \"BY\", name: \"Belarus\", dial: \"375\" },\n { iso2: \"BE\", name: \"Belgium\", dial: \"32\" },\n { iso2: \"BZ\", name: \"Belize\", dial: \"501\" },\n { iso2: \"BJ\", name: \"Benin\", dial: \"229\" },\n { iso2: \"BT\", name: \"Bhutan\", dial: \"975\" },\n { iso2: \"BO\", name: \"Bolivia\", dial: \"591\" },\n { iso2: \"BA\", name: \"Bosnia and Herzegovina\", dial: \"387\" },\n { iso2: \"BW\", name: \"Botswana\", dial: \"267\" },\n { iso2: \"BR\", name: \"Brazil\", dial: \"55\" },\n { iso2: \"BN\", name: \"Brunei\", dial: \"673\" },\n { iso2: \"BG\", name: \"Bulgaria\", dial: \"359\" },\n { iso2: \"BF\", name: \"Burkina Faso\", dial: \"226\" },\n { iso2: \"BI\", name: \"Burundi\", dial: \"257\" },\n { iso2: \"KH\", name: \"Cambodia\", dial: \"855\" },\n { iso2: \"CM\", name: \"Cameroon\", dial: \"237\" },\n { iso2: \"CA\", name: \"Canada\", dial: \"1\" },\n { iso2: \"CV\", name: \"Cape Verde\", dial: \"238\" },\n { iso2: \"CF\", name: \"Central African Republic\", dial: \"236\" },\n { iso2: \"TD\", name: \"Chad\", dial: \"235\" },\n { iso2: \"CL\", name: \"Chile\", dial: \"56\" },\n { iso2: \"CN\", name: \"China\", dial: \"86\" },\n { iso2: \"CO\", name: \"Colombia\", dial: \"57\" },\n { iso2: \"KM\", name: \"Comoros\", dial: \"269\" },\n { iso2: \"CG\", name: \"Congo\", dial: \"242\" },\n { iso2: \"CD\", name: \"Congo (DRC)\", dial: \"243\" },\n { iso2: \"CR\", name: \"Costa Rica\", dial: \"506\" },\n { iso2: \"CI\", name: \"Côte d'Ivoire\", dial: \"225\" },\n { iso2: \"HR\", name: \"Croatia\", dial: \"385\" },\n { iso2: \"CU\", name: \"Cuba\", dial: \"53\" },\n { iso2: \"CY\", name: \"Cyprus\", dial: \"357\" },\n { iso2: \"CZ\", name: \"Czech Republic\", dial: \"420\" },\n { iso2: \"DK\", name: \"Denmark\", dial: \"45\" },\n { iso2: \"DJ\", name: \"Djibouti\", dial: \"253\" },\n { iso2: \"DM\", name: \"Dominica\", dial: \"1767\" },\n { iso2: \"DO\", name: \"Dominican Republic\", dial: \"1809\" },\n { iso2: \"EC\", name: \"Ecuador\", dial: \"593\" },\n { iso2: \"EG\", name: \"Egypt\", dial: \"20\" },\n { iso2: \"SV\", name: \"El Salvador\", dial: \"503\" },\n { iso2: \"GQ\", name: \"Equatorial Guinea\", dial: \"240\" },\n { iso2: \"ER\", name: \"Eritrea\", dial: \"291\" },\n { iso2: \"EE\", name: \"Estonia\", dial: \"372\" },\n { iso2: \"SZ\", name: \"Eswatini\", dial: \"268\" },\n { iso2: \"ET\", name: \"Ethiopia\", dial: \"251\" },\n { iso2: \"FJ\", name: \"Fiji\", dial: \"679\" },\n { iso2: \"FI\", name: \"Finland\", dial: \"358\" },\n { iso2: \"FR\", name: \"France\", dial: \"33\" },\n { iso2: \"GA\", name: \"Gabon\", dial: \"241\" },\n { iso2: \"GM\", name: \"Gambia\", dial: \"220\" },\n { iso2: \"GE\", name: \"Georgia\", dial: \"995\" },\n { iso2: \"DE\", name: \"Germany\", dial: \"49\" },\n { iso2: \"GH\", name: \"Ghana\", dial: \"233\" },\n { iso2: \"GR\", name: \"Greece\", dial: \"30\" },\n { iso2: \"GL\", name: \"Greenland\", dial: \"299\" },\n { iso2: \"GD\", name: \"Grenada\", dial: \"1473\" },\n { iso2: \"GT\", name: \"Guatemala\", dial: \"502\" },\n { iso2: \"GN\", name: \"Guinea\", dial: \"224\" },\n { iso2: \"GW\", name: \"Guinea-Bissau\", dial: \"245\" },\n { iso2: \"GY\", name: \"Guyana\", dial: \"592\" },\n { iso2: \"HT\", name: \"Haiti\", dial: \"509\" },\n { iso2: \"HN\", name: \"Honduras\", dial: \"504\" },\n { iso2: \"HK\", name: \"Hong Kong\", dial: \"852\" },\n { iso2: \"HU\", name: \"Hungary\", dial: \"36\" },\n { iso2: \"IS\", name: \"Iceland\", dial: \"354\" },\n { iso2: \"IN\", name: \"India\", dial: \"91\" },\n { iso2: \"ID\", name: \"Indonesia\", dial: \"62\" },\n { iso2: \"IR\", name: \"Iran\", dial: \"98\" },\n { iso2: \"IQ\", name: \"Iraq\", dial: \"964\" },\n { iso2: \"IE\", name: \"Ireland\", dial: \"353\" },\n { iso2: \"IL\", name: \"Israel\", dial: \"972\" },\n { iso2: \"IT\", name: \"Italy\", dial: \"39\" },\n { iso2: \"JM\", name: \"Jamaica\", dial: \"1876\" },\n { iso2: \"JP\", name: \"Japan\", dial: \"81\" },\n { iso2: \"JO\", name: \"Jordan\", dial: \"962\" },\n { iso2: \"KZ\", name: \"Kazakhstan\", dial: \"7\" },\n { iso2: \"KE\", name: \"Kenya\", dial: \"254\" },\n { iso2: \"KI\", name: \"Kiribati\", dial: \"686\" },\n { iso2: \"KW\", name: \"Kuwait\", dial: \"965\" },\n { iso2: \"KG\", name: \"Kyrgyzstan\", dial: \"996\" },\n { iso2: \"LA\", name: \"Laos\", dial: \"856\" },\n { iso2: \"LV\", name: \"Latvia\", dial: \"371\" },\n { iso2: \"LB\", name: \"Lebanon\", dial: \"961\" },\n { iso2: \"LS\", name: \"Lesotho\", dial: \"266\" },\n { iso2: \"LR\", name: \"Liberia\", dial: \"231\" },\n { iso2: \"LY\", name: \"Libya\", dial: \"218\" },\n { iso2: \"LI\", name: \"Liechtenstein\", dial: \"423\" },\n { iso2: \"LT\", name: \"Lithuania\", dial: \"370\" },\n { iso2: \"LU\", name: \"Luxembourg\", dial: \"352\" },\n { iso2: \"MO\", name: \"Macau\", dial: \"853\" },\n { iso2: \"MG\", name: \"Madagascar\", dial: \"261\" },\n { iso2: \"MW\", name: \"Malawi\", dial: \"265\" },\n { iso2: \"MY\", name: \"Malaysia\", dial: \"60\" },\n { iso2: \"MV\", name: \"Maldives\", dial: \"960\" },\n { iso2: \"ML\", name: \"Mali\", dial: \"223\" },\n { iso2: \"MT\", name: \"Malta\", dial: \"356\" },\n { iso2: \"MR\", name: \"Mauritania\", dial: \"222\" },\n { iso2: \"MU\", name: \"Mauritius\", dial: \"230\" },\n { iso2: \"MX\", name: \"Mexico\", dial: \"52\" },\n { iso2: \"FM\", name: \"Micronesia\", dial: \"691\" },\n { iso2: \"MD\", name: \"Moldova\", dial: \"373\" },\n { iso2: \"MC\", name: \"Monaco\", dial: \"377\" },\n { iso2: \"MN\", name: \"Mongolia\", dial: \"976\" },\n { iso2: \"ME\", name: \"Montenegro\", dial: \"382\" },\n { iso2: \"MA\", name: \"Morocco\", dial: \"212\" },\n { iso2: \"MZ\", name: \"Mozambique\", dial: \"258\" },\n { iso2: \"MM\", name: \"Myanmar\", dial: \"95\" },\n { iso2: \"NA\", name: \"Namibia\", dial: \"264\" },\n { iso2: \"NR\", name: \"Nauru\", dial: \"674\" },\n { iso2: \"NP\", name: \"Nepal\", dial: \"977\" },\n { iso2: \"NL\", name: \"Netherlands\", dial: \"31\" },\n { iso2: \"NZ\", name: \"New Zealand\", dial: \"64\" },\n { iso2: \"NI\", name: \"Nicaragua\", dial: \"505\" },\n { iso2: \"NE\", name: \"Niger\", dial: \"227\" },\n { iso2: \"NG\", name: \"Nigeria\", dial: \"234\" },\n { iso2: \"KP\", name: \"North Korea\", dial: \"850\" },\n { iso2: \"MK\", name: \"North Macedonia\", dial: \"389\" },\n { iso2: \"NO\", name: \"Norway\", dial: \"47\" },\n { iso2: \"OM\", name: \"Oman\", dial: \"968\" },\n { iso2: \"PK\", name: \"Pakistan\", dial: \"92\" },\n { iso2: \"PW\", name: \"Palau\", dial: \"680\" },\n { iso2: \"PS\", name: \"Palestine\", dial: \"970\" },\n { iso2: \"PA\", name: \"Panama\", dial: \"507\" },\n { iso2: \"PG\", name: \"Papua New Guinea\", dial: \"675\" },\n { iso2: \"PY\", name: \"Paraguay\", dial: \"595\" },\n { iso2: \"PE\", name: \"Peru\", dial: \"51\" },\n { iso2: \"PH\", name: \"Philippines\", dial: \"63\" },\n { iso2: \"PL\", name: \"Poland\", dial: \"48\" },\n { iso2: \"PT\", name: \"Portugal\", dial: \"351\" },\n { iso2: \"PR\", name: \"Puerto Rico\", dial: \"1787\" },\n { iso2: \"QA\", name: \"Qatar\", dial: \"974\" },\n { iso2: \"RO\", name: \"Romania\", dial: \"40\" },\n { iso2: \"RU\", name: \"Russia\", dial: \"7\" },\n { iso2: \"RW\", name: \"Rwanda\", dial: \"250\" },\n { iso2: \"WS\", name: \"Samoa\", dial: \"685\" },\n { iso2: \"SM\", name: \"San Marino\", dial: \"378\" },\n { iso2: \"ST\", name: \"São Tomé and Príncipe\", dial: \"239\" },\n { iso2: \"SA\", name: \"Saudi Arabia\", dial: \"966\" },\n { iso2: \"SN\", name: \"Senegal\", dial: \"221\" },\n { iso2: \"RS\", name: \"Serbia\", dial: \"381\" },\n { iso2: \"SC\", name: \"Seychelles\", dial: \"248\" },\n { iso2: \"SL\", name: \"Sierra Leone\", dial: \"232\" },\n { iso2: \"SG\", name: \"Singapore\", dial: \"65\" },\n { iso2: \"SK\", name: \"Slovakia\", dial: \"421\" },\n { iso2: \"SI\", name: \"Slovenia\", dial: \"386\" },\n { iso2: \"SB\", name: \"Solomon Islands\", dial: \"677\" },\n { iso2: \"SO\", name: \"Somalia\", dial: \"252\" },\n { iso2: \"ZA\", name: \"South Africa\", dial: \"27\" },\n { iso2: \"KR\", name: \"South Korea\", dial: \"82\" },\n { iso2: \"SS\", name: \"South Sudan\", dial: \"211\" },\n { iso2: \"ES\", name: \"Spain\", dial: \"34\" },\n { iso2: \"LK\", name: \"Sri Lanka\", dial: \"94\" },\n { iso2: \"SD\", name: \"Sudan\", dial: \"249\" },\n { iso2: \"SR\", name: \"Suriname\", dial: \"597\" },\n { iso2: \"SE\", name: \"Sweden\", dial: \"46\" },\n { iso2: \"CH\", name: \"Switzerland\", dial: \"41\" },\n { iso2: \"SY\", name: \"Syria\", dial: \"963\" },\n { iso2: \"TW\", name: \"Taiwan\", dial: \"886\" },\n { iso2: \"TJ\", name: \"Tajikistan\", dial: \"992\" },\n { iso2: \"TZ\", name: \"Tanzania\", dial: \"255\" },\n { iso2: \"TH\", name: \"Thailand\", dial: \"66\" },\n { iso2: \"TL\", name: \"Timor-Leste\", dial: \"670\" },\n { iso2: \"TG\", name: \"Togo\", dial: \"228\" },\n { iso2: \"TO\", name: \"Tonga\", dial: \"676\" },\n { iso2: \"TT\", name: \"Trinidad and Tobago\", dial: \"1868\" },\n { iso2: \"TN\", name: \"Tunisia\", dial: \"216\" },\n { iso2: \"TR\", name: \"Turkey\", dial: \"90\" },\n { iso2: \"TM\", name: \"Turkmenistan\", dial: \"993\" },\n { iso2: \"TV\", name: \"Tuvalu\", dial: \"688\" },\n { iso2: \"UG\", name: \"Uganda\", dial: \"256\" },\n { iso2: \"UA\", name: \"Ukraine\", dial: \"380\" },\n { iso2: \"AE\", name: \"United Arab Emirates\", dial: \"971\" },\n { iso2: \"GB\", name: \"United Kingdom\", dial: \"44\" },\n { iso2: \"US\", name: \"United States\", dial: \"1\" },\n { iso2: \"UY\", name: \"Uruguay\", dial: \"598\" },\n { iso2: \"UZ\", name: \"Uzbekistan\", dial: \"998\" },\n { iso2: \"VU\", name: \"Vanuatu\", dial: \"678\" },\n { iso2: \"VA\", name: \"Vatican City\", dial: \"379\" },\n { iso2: \"VE\", name: \"Venezuela\", dial: \"58\" },\n { iso2: \"VN\", name: \"Vietnam\", dial: \"84\" },\n { iso2: \"YE\", name: \"Yemen\", dial: \"967\" },\n { iso2: \"ZM\", name: \"Zambia\", dial: \"260\" },\n { iso2: \"ZW\", name: \"Zimbabwe\", dial: \"263\" },\n];\n\nexport const COUNTRIES: Country[] = RAW.map((c) => ({\n ...c,\n flag: iso2ToFlag(c.iso2),\n})).sort((a, b) => a.name.localeCompare(b.name));\n\nconst BY_ISO2 = new Map(COUNTRIES.map((c) => [c.iso2, c]));\n\nexport function getCountryByIso2(iso2: string): Country | undefined {\n return BY_ISO2.get(iso2.toUpperCase());\n}\n\n/**\n * Tiebreaker for dial codes that are shared between several countries (most\n * notably the NANP `+1` block and the `+7` block shared by Russia and\n * Kazakhstan). When two countries have the same `dial` string the longest-\n * prefix sort below would otherwise fall back to the (alphabetical) order of\n * `COUNTRIES`, which puts Canada ahead of the United States — that's why a\n * San Diego number like `+18589107283` used to detect as Canada.\n *\n * The right fix is data, not heuristics: declare which ISO2 code wins when a\n * dial is fully ambiguous, and let the sort below honor it. Adding a new\n * shared code is a one-line change.\n */\nconst DIAL_CODE_PRIORITY: Record<string, string> = {\n \"1\": \"US\", // NANP — US/Canada/Caribbean share +1; default to US\n \"7\": \"RU\", // RU/KZ share +7; default to Russia\n};\n\n/**\n * Greedy longest-prefix match: given an E.164 phone (with or without `+`),\n * find the country whose dial code matches the longest prefix. We sort the\n * dial table by length descending so e.g. `+1242` (Bahamas) wins over `+1`\n * (US/Canada) when both could match.\n *\n * For dial codes of equal length we apply DIAL_CODE_PRIORITY first, then fall\n * back to a stable alphabetical order so the result is deterministic across\n * runs (V8's `Array.prototype.sort` has been stable since Node 12).\n */\nconst SORTED_DIALS = [...COUNTRIES].sort((a, b) => {\n if (b.dial.length !== a.dial.length) {\n return b.dial.length - a.dial.length;\n }\n const preferred = DIAL_CODE_PRIORITY[a.dial];\n if (preferred) {\n if (a.iso2 === preferred && b.iso2 !== preferred) return -1;\n if (b.iso2 === preferred && a.iso2 !== preferred) return 1;\n }\n return a.name.localeCompare(b.name);\n});\n\nexport function detectCountryFromPhone(phone: string): Country | null {\n if (!phone) return null;\n const digits = phone.replace(/^\\+/, \"\").replace(/\\D/g, \"\");\n for (const c of SORTED_DIALS) {\n if (digits.startsWith(c.dial)) return c;\n }\n return null;\n}\n\n/**\n * Strip the dial-code prefix off a phone string. Returns the local part only,\n * with non-digits removed. Used so the number-input field shows just the\n * local subscriber number, not the redundant `+81` already shown by the flag.\n */\nexport function stripDialCode(phone: string, country: Country): string {\n const digits = phone.replace(/^\\+/, \"\").replace(/\\D/g, \"\");\n if (digits.startsWith(country.dial)) {\n return digits.slice(country.dial.length);\n }\n return digits;\n}\n\n/**\n * Compose an E.164-formatted phone string from a country and the local\n * subscriber number. The local part is sanitized to digits only; an empty\n * local part returns just `+<dial>` so partial input round-trips cleanly.\n */\nexport function composeE164(country: Country, localNumber: string): string {\n const local = localNumber.replace(/\\D/g, \"\");\n return `+${country.dial}${local}`;\n}\n"],"names":["queryClient","usePairingPoll","url","shouldStop","shouldStopRef","intervalMs","pollRef","status","setStatus","active","setActive","stop","current","setInterval","data","clearInterval","get","start","invalidateQueries","queryKey","reset"],"mappings":"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","ignoreList":[8,9,10]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/dashboard/src/components/shared/step-card.tsx","../../../../../../packages/dashboard/src/components/connections/slack-card.tsx","../../../../../../packages/dashboard/src/components/connections/telegram-card.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-pairing-poll.ts","../../../../../../packages/dashboard/src/components/connections/discord-card.tsx","../../../../../../packages/dashboard/src/components/ui/phone-input.tsx","../../../../../../packages/dashboard/src/components/connections/whatsapp-card.tsx","../../../../../../packages/dashboard/src/components/connections/destination-selector.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/phone.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/message-circle.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/gamepad-2.ts","../../../../../../packages/dashboard/src/lib/countries.ts"],"sourcesContent":["import { cn } from \"@/lib/utils\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\n/**\n * Dashed-border container for the per-platform pairing/setup steps used in\n * Connections (Slack/Telegram/Discord) and the legacy messaging panel.\n *\n * The visual shell — `rounded-lg border border-dashed border-input bg-background/50 p-3`\n * — was duplicated ~19 times across four files; collapsing it here keeps the\n * step bodies (which are intentionally bespoke per platform) close to their\n * handlers while the framing stays consistent.\n *\n * `heading` (not `title`) intentionally — keeping `title` free lets the native\n * HTML `title` attribute (tooltip text) pass through via `...rest`.\n */\nexport interface StepCardProps extends HTMLAttributes<HTMLDivElement> {\n heading?: ReactNode;\n /** Vertical rhythm between children. Mirrors the `space-y-2` / `space-y-3`\n * variants the call sites used; pass `\"none\"` (default) for the original\n * no-`space-y-*` form, where bespoke per-child margins (`mt-1`/`mt-2`/…)\n * carry the spacing. */\n spacing?: \"none\" | \"sm\" | \"md\";\n}\n\nconst SPACING_CLASS = {\n none: \"\",\n sm: \"space-y-2\",\n md: \"space-y-3\",\n} as const;\n\nexport function StepCard({\n className,\n heading,\n spacing = \"none\",\n children,\n ...rest\n}: StepCardProps) {\n return (\n <div\n className={cn(\n \"rounded-lg border border-dashed border-input bg-background/50 p-3\",\n SPACING_CLASS[spacing],\n className,\n )}\n {...rest}\n >\n {heading != null && <p className=\"text-xs font-medium\">{heading}</p>}\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { StepCard } from \"@/components/shared/step-card\";\nimport { Hash } from \"lucide-react\";\nimport type {\n SlackBotInfoResponse,\n SlackPairingStatusResponse,\n SlackManifestResponse,\n PhrasePairingStartResponse,\n MessagingHealthStatus,\n} from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function SlackCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.slack;\n\n const [draftBot, setDraftBot] = useState(\"\");\n const [draftApp, setDraftApp] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [manifest, setManifest] = useState<SlackManifestResponse | null>(null);\n const [botInfo, setBotInfo] = useState<SlackBotInfoResponse | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [phrase, setPhrase] = useState<PhrasePairingStartResponse | null>(null);\n\n const pairing = usePairingPoll<SlackPairingStatusResponse>(\n \"/messaging/slack/pairing-status\",\n (d) => d.paired || !d.pairingActive,\n );\n\n // When pairing completes, clear the phrase display.\n if (pairing.status?.paired && phrase) setPhrase(null);\n if (pairing.status && !pairing.status.pairingActive && phrase) setPhrase(null);\n\n if (!config || !health) return null;\n\n const handleSave = async () => {\n setSaving(true); setError(null); setNotice(null);\n try {\n await api.put(\"/secrets/slack\", {\n ...(draftBot ? { botToken: draftBot } : {}),\n ...(draftApp ? { appToken: draftApp } : {}),\n });\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n setNotice(\"Updated.\"); setDraftBot(\"\"); setDraftApp(\"\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(false); }\n };\n\n const handleTest = async () => {\n setBusy(\"test\"); setError(null);\n try {\n const candidate = draftBot || undefined;\n const info = await api.post<SlackBotInfoResponse>(\n \"/messaging/slack/test-token\",\n candidate ? { token: candidate } : undefined,\n );\n setBotInfo(info);\n setNotice(`Token OK — bot: ${info.botName ?? \"(unknown)\"}${info.team ? ` @ ${info.team}` : \"\"}`);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Token test failed\");\n } finally { setBusy(null); }\n };\n\n const handleStartPairing = async () => {\n setBusy(\"pair\"); setError(null);\n try {\n const res = await api.post<PhrasePairingStartResponse>(\"/messaging/slack/start-pairing\");\n setPhrase(res);\n pairing.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n } finally { setBusy(null); }\n };\n\n const handleCancelPairing = async () => {\n pairing.reset(); setPhrase(null);\n try { await api.post(\"/messaging/slack/cancel-pairing\"); } catch { /* best-effort */ }\n };\n\n return (\n <ConnectionCard\n name=\"Slack\"\n icon={<Hash className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"success\">{notice}</Alert>}\n\n {/* Step 1 — Create the app */}\n <StepCard heading=\"Step 1 — Create the Slack app\">\n <p className=\"mt-1 text-xs text-muted-foreground\">\n We'll pre-fill the manifest with the right scopes and Socket Mode enabled.\n </p>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"manifest\"}\n onClick={async () => {\n setBusy(\"manifest\"); setError(null);\n try {\n const res = await api.get<SlackManifestResponse>(\"/messaging/slack/manifest\");\n setManifest(res);\n window.open(res.createAppUrl, \"_blank\", \"noopener\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to load manifest\");\n } finally { setBusy(null); }\n }}>\n {busy === \"manifest\" ? \"Loading...\" : \"Open Slack app builder\"}\n </Button>\n {manifest && (\n <Button size=\"sm\" variant=\"ghost\"\n onClick={() => { void navigator.clipboard?.writeText(manifest.manifestJson); setNotice(\"Manifest copied.\"); }}>\n Copy manifest JSON\n </Button>\n )}\n </div>\n {manifest && (\n <ol className=\"mt-3 list-inside list-decimal space-y-1 text-xs text-muted-foreground\">\n {manifest.instructions.map((line) => (\n <li key={line}>{line.replace(/^\\d+\\.\\s*/, \"\")}</li>\n ))}\n </ol>\n )}\n </StepCard>\n\n {/* Step 2 — Tokens */}\n <StepCard heading=\"Step 2 — Paste tokens\" spacing=\"md\">\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Bot token</label>\n <Input type=\"password\" value={draftBot}\n placeholder={config.slackConfigured ? \"Configured. Enter a new token to replace it.\" : \"xoxb-...\"}\n onChange={(e) => setDraftBot(e.target.value)} />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">App token</label>\n <Input type=\"password\" value={draftApp}\n placeholder={config.slackConfigured ? \"Configured. Enter a new token to replace it.\" : \"xapp-...\"}\n onChange={(e) => setDraftApp(e.target.value)} />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving} onClick={handleSave}>\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"test\"} onClick={handleTest}>\n {busy === \"test\" ? \"Testing...\" : \"Test token\"}\n </Button>\n </div>\n {botInfo && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300\">\n ✓ Bot: <code className=\"font-mono\">{botInfo.botName}</code>\n {botInfo.team && <> · workspace: <code className=\"font-mono\">{botInfo.team}</code></>}\n {botInfo.botUserId && <> · id: <code className=\"font-mono\">{botInfo.botUserId}</code></>}\n </p>\n )}\n </StepCard>\n\n {/* Step 3 — Pair */}\n <StepCard heading=\"Step 3 — Pair with magic phrase\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Click below to generate a one-time phrase. Send your bot a DM in Slack\n containing that exact phrase — only that DM will capture your user ID.\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.slackConfigured || busy === \"pair\"}\n title={config.slackConfigured ? undefined : \"Save your tokens first\"}\n onClick={handleStartPairing}>\n {busy === \"pair\" ? \"Generating...\" : \"Generate pairing phrase\"}\n </Button>\n {pairing.active && (\n <Button size=\"sm\" variant=\"ghost\" onClick={handleCancelPairing}>Cancel</Button>\n )}\n </div>\n {phrase && (\n <div className=\"rounded-md bg-muted p-3 text-center\">\n <p className=\"text-xs text-muted-foreground mb-1\">Send this phrase to your bot in Slack:</p>\n <code className=\"font-mono text-base font-semibold tracking-wide\">{phrase.phrase}</code>\n <p className=\"mt-2 text-[11px] text-muted-foreground\">\n Expires {new Date(phrase.expiresAt).toLocaleTimeString()} · punctuation and case are ignored.\n </p>\n </div>\n )}\n {pairing.status && (\n <p className=\"text-xs text-muted-foreground\">\n {pairing.status.paired\n ? <>✓ Owner paired: <code className=\"font-mono\">{pairing.status.ownerUserId}</code></>\n : pairing.active ? \"Waiting for the phrase...\" : null}\n </p>\n )}\n </StepCard>\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { StepCard } from \"@/components/shared/step-card\";\nimport { MessageCircle } from \"lucide-react\";\nimport type {\n TelegramBotInfoResponse,\n TelegramPairingStartResponse,\n TelegramPairingStatusResponse,\n MessagingHealthStatus,\n} from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function TelegramCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.telegram;\n\n const [draft, setDraft] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [botInfo, setBotInfo] = useState<TelegramBotInfoResponse | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [pairData, setPairData] = useState<TelegramPairingStartResponse | null>(null);\n\n const pairing = usePairingPoll<TelegramPairingStatusResponse>(\n \"/messaging/telegram/pairing-status\",\n (d) => d.paired,\n );\n\n if (!config || !health) return null;\n\n const handleSave = async () => {\n setSaving(true); setError(null); setNotice(null);\n try {\n await api.put(\"/secrets/telegram\", { ...(draft ? { botToken: draft } : {}) });\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n setNotice(\"Updated.\"); setDraft(\"\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(false); }\n };\n\n const handleTest = async () => {\n setBusy(\"test\"); setError(null);\n try {\n const candidate = draft || undefined;\n const info = await api.post<TelegramBotInfoResponse>(\n \"/messaging/telegram/test-token\",\n candidate ? { token: candidate } : undefined,\n );\n setBotInfo(info);\n setNotice(`Token OK — bot: ${info.firstName ?? info.username ?? info.id}`);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Token test failed\");\n } finally { setBusy(null); }\n };\n\n const handleStartPairing = async () => {\n setBusy(\"pair\"); setError(null);\n try {\n const res = await api.post<TelegramPairingStartResponse>(\"/messaging/telegram/start-pairing\");\n setPairData(res);\n pairing.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n } finally { setBusy(null); }\n };\n\n const handleCancelPairing = async () => {\n pairing.reset(); setPairData(null);\n try { await api.post(\"/messaging/telegram/cancel-pairing\"); } catch { /* best-effort */ }\n };\n\n return (\n <ConnectionCard\n name=\"Telegram\"\n icon={<MessageCircle className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"success\">{notice}</Alert>}\n\n {/* Step 1 */}\n <StepCard heading=\"Step 1 — Create the bot\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Open <a className=\"underline\" href=\"https://t.me/botfather\" target=\"_blank\" rel=\"noopener noreferrer\">@BotFather</a>,\n send <code className=\"font-mono\">/newbot</code>, give it a name and username,\n then copy the token.\n </p>\n </StepCard>\n\n {/* Step 2 — Token */}\n <StepCard heading=\"Step 2 — Paste token\" spacing=\"md\">\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Bot token</label>\n <Input type=\"password\" value={draft}\n placeholder={config.telegramConfigured ? \"Configured. Enter a new token to replace it.\" : \"123456:ABC-DEF…\"}\n onChange={(e) => setDraft(e.target.value)} />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving} onClick={handleSave}>\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"test\"} onClick={handleTest}>\n {busy === \"test\" ? \"Testing...\" : \"Test token\"}\n </Button>\n </div>\n {botInfo && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300\">\n ✓ Bot: <code className=\"font-mono\">@{botInfo.username ?? botInfo.id}</code>\n </p>\n )}\n </StepCard>\n\n {/* Step 3 — QR */}\n <StepCard heading=\"Step 3 — Pair with QR\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Generate a QR code that opens your bot in Telegram and sends a one-shot pairing token.\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.telegramConfigured || busy === \"pair\"}\n title={config.telegramConfigured ? undefined : \"Save your token first\"}\n onClick={handleStartPairing}>\n {busy === \"pair\" ? \"Generating...\" : \"Pair with QR\"}\n </Button>\n {pairData && (\n <Button size=\"sm\" variant=\"ghost\" onClick={handleCancelPairing}>Cancel</Button>\n )}\n </div>\n {pairData && (\n <div className=\"flex flex-col items-center gap-2 rounded-lg bg-muted p-4\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img src={pairData.qrDataUrl} alt=\"Telegram pairing QR\" width={320} height={320} className=\"rounded bg-white p-2\" />\n <p className=\"text-xs text-muted-foreground text-center\">\n Scan with your phone — Telegram will open <code className=\"font-mono\">@{pairData.botUsername}</code> and send the pairing token automatically.\n </p>\n <a className=\"text-xs underline\" href={pairData.deepLink} target=\"_blank\" rel=\"noopener noreferrer\">\n Or open the link directly\n </a>\n </div>\n )}\n {pairing.status?.paired && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300\">\n ✓ Paired with chat ID <code className=\"font-mono\">{pairing.status.ownerChatId}</code>\n </p>\n )}\n </StepCard>\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\n\n/**\n * Generic polling hook for pairing flows.\n *\n * Polls `url` at `intervalMs` until `shouldStop(data)` returns true,\n * then stops polling and invalidates config + health queries.\n */\nexport function usePairingPoll<T>(\n url: string,\n shouldStop: (data: T) => boolean,\n intervalMs = 2000,\n) {\n const queryClient = useQueryClient();\n const pollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const shouldStopRef = useRef(shouldStop);\n\n const [status, setStatus] = useState<T | null>(null);\n const [active, setActive] = useState(false);\n\n useEffect(() => {\n shouldStopRef.current = shouldStop;\n });\n\n const stop = useCallback(() => {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n setActive(false);\n }, []);\n\n const start = useCallback(() => {\n if (pollRef.current) return;\n setActive(true);\n pollRef.current = setInterval(async () => {\n try {\n const data = await api.get<T>(url);\n setStatus(data);\n if (shouldStopRef.current(data)) {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n setActive(false);\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n }\n } catch {\n // Transient — keep polling.\n }\n }, intervalMs);\n }, [url, intervalMs, queryClient]);\n\n const reset = useCallback(() => {\n stop();\n setStatus(null);\n }, [stop]);\n\n useEffect(() => {\n return () => {\n if (pollRef.current) {\n clearInterval(pollRef.current);\n pollRef.current = null;\n }\n };\n }, []);\n\n return { status, active, start, stop, reset };\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { StepCard } from \"@/components/shared/step-card\";\nimport { Gamepad2 } from \"lucide-react\";\nimport type {\n DiscordBotInfoResponse,\n DiscordPairingStatusResponse,\n PhrasePairingStartResponse,\n MessagingHealthStatus,\n} from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function DiscordCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.discord;\n\n const [draft, setDraft] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [botInfo, setBotInfo] = useState<DiscordBotInfoResponse | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [phrase, setPhrase] = useState<PhrasePairingStartResponse | null>(null);\n\n const pairing = usePairingPoll<DiscordPairingStatusResponse>(\n \"/messaging/discord/pairing-status\",\n (d) => d.paired || !d.pairingActive,\n );\n\n if (pairing.status?.paired && phrase) setPhrase(null);\n if (pairing.status && !pairing.status.pairingActive && phrase) setPhrase(null);\n\n if (!config || !health) return null;\n\n const handleSave = async () => {\n setSaving(true); setError(null); setNotice(null);\n try {\n await api.put(\"/secrets/discord\", { ...(draft ? { botToken: draft } : {}) });\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n setNotice(\"Updated.\"); setDraft(\"\");\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(false); }\n };\n\n const handleTest = async () => {\n setBusy(\"test\"); setError(null);\n try {\n const candidate = draft || undefined;\n const info = await api.post<DiscordBotInfoResponse>(\n \"/messaging/discord/test-token\",\n candidate ? { token: candidate } : undefined,\n );\n setBotInfo(info);\n setNotice(`Token OK — bot: ${info.username}`);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Token test failed\");\n } finally { setBusy(null); }\n };\n\n const handleStartPairing = async () => {\n setBusy(\"pair\"); setError(null);\n try {\n const res = await api.post<PhrasePairingStartResponse>(\"/messaging/discord/start-pairing\");\n setPhrase(res);\n pairing.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n } finally { setBusy(null); }\n };\n\n const handleCancelPairing = async () => {\n pairing.reset(); setPhrase(null);\n try { await api.post(\"/messaging/discord/cancel-pairing\"); } catch { /* best-effort */ }\n };\n\n return (\n <ConnectionCard\n name=\"Discord\"\n icon={<Gamepad2 className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"success\">{notice}</Alert>}\n\n {/* Step 1 */}\n <StepCard heading=\"Step 1 — Create the bot\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Open the <a className=\"underline\" href=\"https://discord.com/developers/applications\" target=\"_blank\" rel=\"noopener noreferrer\">Discord Developer Portal</a>,\n create an application, add a Bot, enable "Message Content Intent", and copy the token.\n </p>\n </StepCard>\n\n {/* Step 2 — Token */}\n <StepCard heading=\"Step 2 — Paste token\" spacing=\"md\">\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Bot token</label>\n <Input type=\"password\" value={draft}\n placeholder={config.discordConfigured ? \"Configured. Enter a new token to replace it.\" : \"Discord bot token\"}\n onChange={(e) => setDraft(e.target.value)} />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving} onClick={handleSave}>\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={busy === \"test\"} onClick={handleTest}>\n {busy === \"test\" ? \"Testing...\" : \"Test token\"}\n </Button>\n </div>\n {botInfo && (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-300 flex items-center gap-2\">\n ✓ Bot: <code className=\"font-mono\">{botInfo.username}</code>\n {botInfo.avatarUrl && (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img src={botInfo.avatarUrl} alt=\"\" width={16} height={16} className=\"rounded-full\" />\n )}\n </p>\n )}\n </StepCard>\n\n {/* Step 3 — Pair */}\n <StepCard heading=\"Step 3 — Pair with magic phrase\" spacing=\"sm\">\n <p className=\"text-xs text-muted-foreground\">\n Add the bot to a server, then click below to generate a one-time phrase.\n DM the bot with that phrase — only that DM captures your user ID.\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.discordConfigured || busy === \"pair\"}\n title={config.discordConfigured ? undefined : \"Save your token first\"}\n onClick={handleStartPairing}>\n {busy === \"pair\" ? \"Generating...\" : \"Generate pairing phrase\"}\n </Button>\n {pairing.active && (\n <Button size=\"sm\" variant=\"ghost\" onClick={handleCancelPairing}>Cancel</Button>\n )}\n </div>\n {phrase && (\n <div className=\"rounded-md bg-muted p-3 text-center\">\n <p className=\"text-xs text-muted-foreground mb-1\">Send this phrase to your bot in Discord:</p>\n <code className=\"font-mono text-base font-semibold tracking-wide\">{phrase.phrase}</code>\n <p className=\"mt-2 text-[11px] text-muted-foreground\">\n Expires {new Date(phrase.expiresAt).toLocaleTimeString()} · punctuation and case are ignored.\n </p>\n </div>\n )}\n {pairing.status && (\n <p className=\"text-xs text-muted-foreground\">\n {pairing.status.paired\n ? <>✓ Owner paired: <code className=\"font-mono\">{pairing.status.ownerUserId}</code></>\n : pairing.active ? \"Waiting for the phrase...\" : null}\n </p>\n )}\n </StepCard>\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { Input } from \"@/components/ui/input\";\nimport {\n COUNTRIES,\n composeE164,\n detectCountryFromPhone,\n getCountryByIso2,\n stripDialCode,\n type Country,\n} from \"@/lib/countries\";\n\ninterface PhoneInputProps {\n /** The current E.164 value (e.g. `+18589107283`). May be `\"\"` for unset. */\n value: string;\n /** Called whenever the user types or picks a new country. Receives the\n * fully-composed E.164 value. */\n onChange: (next: string) => void;\n placeholder?: string;\n defaultCountryIso2?: string;\n disabled?: boolean;\n id?: string;\n}\n\n/**\n * Phone-number input with a country flag picker. Selecting a country\n * auto-fills the dial code; the local-number text field only shows the\n * subscriber number portion. Pasting a full `+...` value into the local\n * field re-detects the country automatically.\n *\n * Why a single composed E.164 value (not separate state for country/local):\n * the rest of the dashboard treats `whatsappOwnerPhone` as one string, and\n * the daemon's validator (`STRING_VALIDATORS.whatsappOwnerPhone`) only\n * accepts E.164. Keeping the truth in one composed string avoids drift.\n */\nexport function PhoneInput({\n value,\n onChange,\n placeholder = \"Subscriber number\",\n defaultCountryIso2 = \"US\",\n disabled,\n id,\n}: PhoneInputProps) {\n // Derive the country from the incoming `value`. If we can't detect one\n // (empty value, malformed prefix), fall back to the default. We persist\n // the chosen country in local state so users who clear the local field\n // don't suddenly lose their flag selection.\n const detected = useMemo(\n () => detectCountryFromPhone(value) ?? getCountryByIso2(defaultCountryIso2) ?? COUNTRIES[0],\n [value, defaultCountryIso2],\n );\n const [country, setCountry] = useState<Country>(detected);\n\n // Sync local country state when the parent value gives us a new prefix.\n useEffect(() => {\n const fromValue = detectCountryFromPhone(value);\n if (fromValue && fromValue.iso2 !== country.iso2) {\n setCountry(fromValue);\n }\n // Intentionally exclude `country` from deps — we only want to react to\n // EXTERNAL value changes here, not our own setCountry.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const localNumber = stripDialCode(value, country);\n\n const handleCountryChange = (iso2: string) => {\n const next = getCountryByIso2(iso2);\n if (!next) return;\n setCountry(next);\n // Re-emit with the new dial code so the parent's E.164 stays consistent.\n onChange(composeE164(next, localNumber));\n };\n\n const handleLocalChange = (raw: string) => {\n // If the user pastes a full international number into the local field,\n // re-detect the country instead of treating the `+` as a stray digit.\n if (raw.startsWith(\"+\")) {\n const detectedFromPaste = detectCountryFromPhone(raw);\n if (detectedFromPaste) {\n setCountry(detectedFromPaste);\n onChange(composeE164(detectedFromPaste, stripDialCode(raw, detectedFromPaste)));\n return;\n }\n }\n onChange(composeE164(country, raw));\n };\n\n return (\n <div className=\"flex items-stretch gap-2\">\n <Select\n value={country.iso2}\n onValueChange={handleCountryChange}\n disabled={disabled}\n >\n <SelectTrigger\n className=\"w-[140px] flex-shrink-0\"\n aria-label=\"Country code\"\n >\n <SelectValue>\n <span className=\"flex items-center gap-2\">\n <span className=\"text-base leading-none\">{country.flag}</span>\n <span className=\"text-xs text-muted-foreground\">+{country.dial}</span>\n </span>\n </SelectValue>\n </SelectTrigger>\n <SelectContent className=\"max-h-[320px]\">\n {COUNTRIES.map((c) => (\n <SelectItem key={c.iso2} value={c.iso2}>\n <span className=\"flex items-center gap-2\">\n <span className=\"text-base leading-none\">{c.flag}</span>\n <span className=\"text-sm\">{c.name}</span>\n <span className=\"text-xs text-muted-foreground\">+{c.dial}</span>\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n id={id}\n type=\"tel\"\n inputMode=\"tel\"\n placeholder={placeholder}\n value={localNumber}\n onChange={(e) => handleLocalChange(e.target.value)}\n disabled={disabled}\n className=\"flex-1\"\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { usePairingPoll } from \"@/lib/hooks/use-pairing-poll\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { DirectoryPickerField } from \"@/components/directory-picker-field\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { PhoneInput } from \"@/components/ui/phone-input\";\nimport { Phone } from \"lucide-react\";\nimport type { WhatsAppQrResponse, ConfigUpdateResponse, MessagingHealthStatus } from \"@/lib/api-types\";\nimport {\n ConnectionCard,\n deriveMessagingStatus,\n messagingMetadata,\n} from \"./connection-card\";\n\nexport function WhatsAppCard() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n const status: MessagingHealthStatus | undefined = health?.messaging?.whatsapp;\n\n const [draftPhone, setDraftPhone] = useState(\"\");\n const [draftAuthDir, setDraftAuthDir] = useState(\"\");\n const [saving, setSaving] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n\n const qrPoll = usePairingPoll<WhatsAppQrResponse>(\n \"/messaging/whatsapp/qr\",\n (d) => d.state === \"ok\" || d.state === \"logged_out\",\n 3000,\n );\n\n if (!config || !health) return null;\n\n const saveUpdates = async (updates: Record<string, unknown>) => {\n setError(null); setNotice(null);\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n if (res.requiresRestart.length > 0) {\n setNotice(`Updated. Restart daemon for: ${res.requiresRestart.join(\", \")}`);\n } else {\n setNotice(\"Updated.\");\n }\n };\n\n const handleToggle = async () => {\n setSaving(\"toggle\");\n setError(null); setNotice(null);\n try {\n const wasEnabled = config.whatsappEnabled;\n // Save config first, but defer query invalidation until the adapter is\n // registered on the daemon side — otherwise the next /health refetch\n // can race ahead of POST /pair and briefly see whatsappEnabled=true\n // without a registered adapter, which MessageHub maps to \"error\".\n const patchRes = await api.patch<ConfigUpdateResponse>(\"/config\", {\n whatsappEnabled: !wasEnabled,\n ...(draftPhone ? { whatsappOwnerPhone: draftPhone } : {}),\n ...(draftAuthDir ? { whatsappAuthDir: draftAuthDir } : {}),\n });\n if (!wasEnabled) {\n try {\n const pairRes = await api.post<WhatsAppQrResponse>(\"/messaging/whatsapp/pair\");\n if (pairRes.state !== \"ok\") qrPoll.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to start pairing\");\n }\n } else {\n qrPoll.reset();\n }\n await queryClient.invalidateQueries({ queryKey: [\"config\"] });\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n if (patchRes.requiresRestart.length > 0) {\n setNotice(`Updated. Restart daemon for: ${patchRes.requiresRestart.join(\", \")}`);\n } else {\n setNotice(\"Updated.\");\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to toggle WhatsApp\");\n } finally { setSaving(null); }\n };\n\n const handleSaveConfig = async () => {\n setSaving(\"config\");\n try {\n await saveUpdates({\n ...(draftPhone ? { whatsappOwnerPhone: draftPhone } : {}),\n ...(draftAuthDir ? { whatsappAuthDir: draftAuthDir } : {}),\n });\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to save\");\n } finally { setSaving(null); }\n };\n\n const handlePair = async () => {\n setError(null);\n try {\n const res = await api.post<WhatsAppQrResponse>(\"/messaging/whatsapp/pair\");\n if (res.state !== \"ok\") qrPoll.start();\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to request pairing\");\n }\n };\n\n const handleRefreshQr = async () => {\n try {\n await api.get<WhatsAppQrResponse>(\"/messaging/whatsapp/qr\");\n // Poll will pick up changes; just force a read\n qrPoll.start();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to fetch QR\");\n }\n };\n\n // Recovery path: when the user has unlinked the device from WhatsApp's\n // side, or the Baileys session is otherwise broken, the cached auth dir\n // prevents a fresh pair from succeeding. This wipes that state and kicks\n // off a brand-new pair flow.\n const handleReset = async () => {\n const confirmed = window.confirm(\n \"Reset WhatsApp connection?\\n\\n\" +\n \"This wipes the cached pairing data so you can scan a fresh QR \" +\n \"from scratch. Use this if WhatsApp says the device is unlinked \" +\n \"or pairing keeps failing.\",\n );\n if (!confirmed) return;\n setSaving(\"reset\");\n setError(null); setNotice(null);\n try {\n const res = await api.post<WhatsAppQrResponse>(\"/messaging/whatsapp/reset\");\n await queryClient.invalidateQueries({ queryKey: [\"health\"] });\n if (res.state === \"ok\") {\n setNotice(\"Reset complete. WhatsApp reconnected.\");\n qrPoll.reset();\n } else if (res.state === \"not_initialized\") {\n setNotice(\n \"Reset complete. Enable WhatsApp to start a fresh pairing flow.\",\n );\n qrPoll.reset();\n } else {\n setNotice(\"Reset complete. Scan the new QR to pair the device.\");\n qrPoll.start();\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to reset WhatsApp\");\n } finally {\n setSaving(null);\n }\n };\n\n const qr = qrPoll.status;\n\n return (\n <ConnectionCard\n name=\"WhatsApp\"\n icon={<Phone className=\"h-4 w-4\" />}\n status={deriveMessagingStatus(status)}\n error={status?.error}\n metadata={messagingMetadata(status)}\n >\n <div className=\"space-y-4 mt-2\">\n {error && <Alert variant=\"error\">{error}</Alert>}\n {notice && <Alert variant=\"warning\">{notice}</Alert>}\n\n {/* Enable/Disable */}\n <div className=\"flex items-center gap-2\">\n <Button size=\"sm\"\n variant={config.whatsappEnabled ? \"default\" : \"outline\"}\n disabled={saving === \"toggle\" || (!config.whatsappEnabled && !config.whatsappOwnerPhoneConfigured && !draftPhone)}\n onClick={handleToggle}>\n {config.whatsappEnabled ? \"Disable WhatsApp\" : \"Enable WhatsApp\"}\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {config.whatsappEnabled\n ? \"Adapter hot-reloads on save — no daemon restart needed.\"\n : \"Set the owner phone first, then click Enable to start pairing.\"}\n </span>\n </div>\n\n {/* Owner phone */}\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\" htmlFor=\"whatsapp-owner-phone\">Owner phone</label>\n <PhoneInput id=\"whatsapp-owner-phone\" value={draftPhone} onChange={setDraftPhone}\n placeholder={config.whatsappOwnerPhoneConfigured ? \"Configured — type to replace\" : \"Subscriber number\"}\n defaultCountryIso2=\"US\" />\n </div>\n\n {/* Auth dir */}\n <div className=\"space-y-1\">\n <label className=\"text-xs text-muted-foreground\">Auth dir</label>\n <DirectoryPickerField\n value={draftAuthDir}\n onChange={setDraftAuthDir}\n title=\"Choose WhatsApp auth directory\"\n placeholder={config.whatsappAuthDir || \"~/.personal-agent/whatsapp/auth\"}\n defaultPath={config.whatsappAuthDir || undefined}\n />\n </div>\n\n {/* Action buttons */}\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" variant=\"outline\" disabled={saving === \"config\"} onClick={handleSaveConfig}>\n {saving === \"config\" ? \"Saving...\" : \"Save Config\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\"\n disabled={!config.whatsappEnabled || qrPoll.active}\n title={config.whatsappEnabled ? undefined : \"Enable WhatsApp first\"}\n onClick={handlePair}>\n {qrPoll.active ? \"Pairing...\" : \"Pair device\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" disabled={!config.whatsappEnabled} onClick={handleRefreshQr}>\n Refresh QR\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={saving === \"reset\"}\n title=\"Wipe cached pairing data and start over (use after unlinking from the phone)\"\n onClick={handleReset}>\n {saving === \"reset\" ? \"Resetting...\" : \"Reset connection\"}\n </Button>\n {qrPoll.active && (\n <Button size=\"sm\" variant=\"ghost\" onClick={() => qrPoll.reset()}>Stop polling</Button>\n )}\n </div>\n\n {/* QR code */}\n {qr && (\n <>\n <Separator />\n <div className=\"space-y-3\">\n {qr.dataUrl ? (\n <div className=\"flex flex-col items-center gap-2 rounded-lg bg-muted p-4\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img src={qr.dataUrl} alt=\"WhatsApp pairing QR\" width={320} height={320} className=\"rounded bg-white p-2\" />\n <p className=\"text-xs text-muted-foreground\">\n Open WhatsApp → Settings → Linked Devices → Link a device, and scan this code.\n </p>\n </div>\n ) : (\n <p className=\"text-xs text-muted-foreground\">\n {qr.state === \"ok\" ? \"WhatsApp is paired and connected.\"\n : qr.state === \"connecting\" ? \"Connecting to WhatsApp...\"\n : qr.state === \"awaiting_qr\" ? \"Generating QR code...\"\n : qr.state === \"logged_out\" ? \"Session logged out — click Pair device to start over.\"\n : \"Waiting for QR code...\"}\n </p>\n )}\n {qr.error && <Alert variant=\"error\">{qr.error}</Alert>}\n </div>\n </>\n )}\n </div>\n </ConnectionCard>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useConfig } from \"@/lib/hooks/use-config\";\nimport { useHealth } from \"@/lib/hooks/use-health\";\nimport { api } from \"@/lib/api-client\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport type { ConfigUpdateResponse } from \"@/lib/api-types\";\n\nexport function DestinationSelector() {\n const { data: config } = useConfig();\n const { data: health } = useHealth();\n const queryClient = useQueryClient();\n\n const available = Object.entries(health?.messaging ?? {})\n .filter(\n ([platform, status]) =>\n platform !== \"dashboard\"\n && status.configured\n && status.ownerConfigured,\n )\n .map(([platform]) => platform);\n\n const selected = config?.defaultNotificationPlatforms ?? [];\n\n const [draft, setDraft] = useState<string[]>(selected);\n const [saving, setSaving] = useState(false);\n const [notice, setNotice] = useState<string | null>(null);\n\n const selectedKey = selected.join(\",\");\n useEffect(() => {\n setDraft(selected);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- stable serialized key\n }, [selectedKey]);\n\n if (!config || !health) return null;\n\n const toggle = (platform: string) => {\n setDraft((prev) =>\n prev.includes(platform)\n ? prev.filter((item) => item !== platform)\n : [...prev, platform],\n );\n };\n\n const hasChanges =\n draft.length !== selected.length\n || draft.some((item) => !selected.includes(item));\n\n const handleSave = async () => {\n setSaving(true);\n setNotice(null);\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", {\n defaultNotificationPlatforms: draft,\n });\n await Promise.all([\n queryClient.invalidateQueries({ queryKey: [\"config\"] }),\n queryClient.invalidateQueries({ queryKey: [\"health\"] }),\n ]);\n if (res.requiresRestart.length > 0) {\n setNotice(`Updated. Restart daemon for: ${res.requiresRestart.join(\", \")}`);\n }\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Default Reminder Destinations</CardTitle>\n </CardHeader>\n <div className=\"space-y-3\">\n <div className=\"flex flex-wrap gap-2\">\n {available.map((platform) => (\n <Button\n key={platform}\n size=\"sm\"\n variant={draft.includes(platform) ? \"default\" : \"outline\"}\n onClick={() => toggle(platform)}\n className=\"capitalize\"\n disabled={saving}\n >\n {platform}\n </Button>\n ))}\n {available.length === 0 && (\n <span className=\"text-xs text-muted-foreground\">\n No eligible messaging app is configured yet.\n </span>\n )}\n </div>\n <p className=\"max-w-prose text-xs text-muted-foreground\">\n Every selected destination receives the same reminder. Replies still go\n back to the app where the conversation happened, and one request can\n override the destination without changing this default.\n </p>\n {notice && <p className=\"text-xs text-amber-700 dark:text-amber-300\">{notice}</p>}\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={!hasChanges || saving}\n onClick={handleSave}\n >\n {saving ? \"Saving...\" : \"Save Reminder Destinations\"}\n </Button>\n </div>\n </Card>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Phone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/phone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Phone = createLucideIcon('Phone', [\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n key: 'foiqr5',\n },\n ],\n]);\n\nexport default Phone;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name MessageCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircle = createLucideIcon('MessageCircle', [\n ['path', { d: 'M7.9 20A9 9 0 1 0 4 16.1L2 22Z', key: 'vv11sd' }],\n]);\n\nexport default MessageCircle;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Gamepad2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/gamepad-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Gamepad2 = createLucideIcon('Gamepad2', [\n ['line', { x1: '6', x2: '10', y1: '11', y2: '11', key: '1gktln' }],\n ['line', { x1: '8', x2: '8', y1: '9', y2: '13', key: 'qnk9ow' }],\n ['line', { x1: '15', x2: '15.01', y1: '12', y2: '12', key: 'krot7o' }],\n ['line', { x1: '18', x2: '18.01', y1: '10', y2: '10', key: '1lcuu1' }],\n [\n 'path',\n {\n d: 'M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z',\n key: 'mfqc10',\n },\n ],\n]);\n\nexport default Gamepad2;\n","/**\n * Country dialing codes for the phone-input picker.\n *\n * `iso2` is the canonical ISO 3166-1 alpha-2 code (used as the React key and\n * the basis for the regional-indicator flag emoji). `dial` is the international\n * trunk code WITHOUT the leading `+`. `flag` is precomputed at module load\n * because rebuilding ~250 emojis on every render would be wasteful.\n */\nexport interface Country {\n iso2: string;\n name: string;\n dial: string;\n flag: string;\n}\n\n// Convert an ISO2 code (e.g. \"JP\") to its regional-indicator-symbol flag.\nfunction iso2ToFlag(iso2: string): string {\n if (iso2.length !== 2) return \"🏳\";\n const A = 0x1f1e6;\n const a = \"A\".charCodeAt(0);\n const codePoints = iso2\n .toUpperCase()\n .split(\"\")\n .map((c) => A + (c.charCodeAt(0) - a));\n return String.fromCodePoint(...codePoints);\n}\n\nconst RAW: Array<Omit<Country, \"flag\">> = [\n { iso2: \"AF\", name: \"Afghanistan\", dial: \"93\" },\n { iso2: \"AL\", name: \"Albania\", dial: \"355\" },\n { iso2: \"DZ\", name: \"Algeria\", dial: \"213\" },\n { iso2: \"AD\", name: \"Andorra\", dial: \"376\" },\n { iso2: \"AO\", name: \"Angola\", dial: \"244\" },\n { iso2: \"AR\", name: \"Argentina\", dial: \"54\" },\n { iso2: \"AM\", name: \"Armenia\", dial: \"374\" },\n { iso2: \"AU\", name: \"Australia\", dial: \"61\" },\n { iso2: \"AT\", name: \"Austria\", dial: \"43\" },\n { iso2: \"AZ\", name: \"Azerbaijan\", dial: \"994\" },\n { iso2: \"BS\", name: \"Bahamas\", dial: \"1242\" },\n { iso2: \"BH\", name: \"Bahrain\", dial: \"973\" },\n { iso2: \"BD\", name: \"Bangladesh\", dial: \"880\" },\n { iso2: \"BB\", name: \"Barbados\", dial: \"1246\" },\n { iso2: \"BY\", name: \"Belarus\", dial: \"375\" },\n { iso2: \"BE\", name: \"Belgium\", dial: \"32\" },\n { iso2: \"BZ\", name: \"Belize\", dial: \"501\" },\n { iso2: \"BJ\", name: \"Benin\", dial: \"229\" },\n { iso2: \"BT\", name: \"Bhutan\", dial: \"975\" },\n { iso2: \"BO\", name: \"Bolivia\", dial: \"591\" },\n { iso2: \"BA\", name: \"Bosnia and Herzegovina\", dial: \"387\" },\n { iso2: \"BW\", name: \"Botswana\", dial: \"267\" },\n { iso2: \"BR\", name: \"Brazil\", dial: \"55\" },\n { iso2: \"BN\", name: \"Brunei\", dial: \"673\" },\n { iso2: \"BG\", name: \"Bulgaria\", dial: \"359\" },\n { iso2: \"BF\", name: \"Burkina Faso\", dial: \"226\" },\n { iso2: \"BI\", name: \"Burundi\", dial: \"257\" },\n { iso2: \"KH\", name: \"Cambodia\", dial: \"855\" },\n { iso2: \"CM\", name: \"Cameroon\", dial: \"237\" },\n { iso2: \"CA\", name: \"Canada\", dial: \"1\" },\n { iso2: \"CV\", name: \"Cape Verde\", dial: \"238\" },\n { iso2: \"CF\", name: \"Central African Republic\", dial: \"236\" },\n { iso2: \"TD\", name: \"Chad\", dial: \"235\" },\n { iso2: \"CL\", name: \"Chile\", dial: \"56\" },\n { iso2: \"CN\", name: \"China\", dial: \"86\" },\n { iso2: \"CO\", name: \"Colombia\", dial: \"57\" },\n { iso2: \"KM\", name: \"Comoros\", dial: \"269\" },\n { iso2: \"CG\", name: \"Congo\", dial: \"242\" },\n { iso2: \"CD\", name: \"Congo (DRC)\", dial: \"243\" },\n { iso2: \"CR\", name: \"Costa Rica\", dial: \"506\" },\n { iso2: \"CI\", name: \"Côte d'Ivoire\", dial: \"225\" },\n { iso2: \"HR\", name: \"Croatia\", dial: \"385\" },\n { iso2: \"CU\", name: \"Cuba\", dial: \"53\" },\n { iso2: \"CY\", name: \"Cyprus\", dial: \"357\" },\n { iso2: \"CZ\", name: \"Czech Republic\", dial: \"420\" },\n { iso2: \"DK\", name: \"Denmark\", dial: \"45\" },\n { iso2: \"DJ\", name: \"Djibouti\", dial: \"253\" },\n { iso2: \"DM\", name: \"Dominica\", dial: \"1767\" },\n { iso2: \"DO\", name: \"Dominican Republic\", dial: \"1809\" },\n { iso2: \"EC\", name: \"Ecuador\", dial: \"593\" },\n { iso2: \"EG\", name: \"Egypt\", dial: \"20\" },\n { iso2: \"SV\", name: \"El Salvador\", dial: \"503\" },\n { iso2: \"GQ\", name: \"Equatorial Guinea\", dial: \"240\" },\n { iso2: \"ER\", name: \"Eritrea\", dial: \"291\" },\n { iso2: \"EE\", name: \"Estonia\", dial: \"372\" },\n { iso2: \"SZ\", name: \"Eswatini\", dial: \"268\" },\n { iso2: \"ET\", name: \"Ethiopia\", dial: \"251\" },\n { iso2: \"FJ\", name: \"Fiji\", dial: \"679\" },\n { iso2: \"FI\", name: \"Finland\", dial: \"358\" },\n { iso2: \"FR\", name: \"France\", dial: \"33\" },\n { iso2: \"GA\", name: \"Gabon\", dial: \"241\" },\n { iso2: \"GM\", name: \"Gambia\", dial: \"220\" },\n { iso2: \"GE\", name: \"Georgia\", dial: \"995\" },\n { iso2: \"DE\", name: \"Germany\", dial: \"49\" },\n { iso2: \"GH\", name: \"Ghana\", dial: \"233\" },\n { iso2: \"GR\", name: \"Greece\", dial: \"30\" },\n { iso2: \"GL\", name: \"Greenland\", dial: \"299\" },\n { iso2: \"GD\", name: \"Grenada\", dial: \"1473\" },\n { iso2: \"GT\", name: \"Guatemala\", dial: \"502\" },\n { iso2: \"GN\", name: \"Guinea\", dial: \"224\" },\n { iso2: \"GW\", name: \"Guinea-Bissau\", dial: \"245\" },\n { iso2: \"GY\", name: \"Guyana\", dial: \"592\" },\n { iso2: \"HT\", name: \"Haiti\", dial: \"509\" },\n { iso2: \"HN\", name: \"Honduras\", dial: \"504\" },\n { iso2: \"HK\", name: \"Hong Kong\", dial: \"852\" },\n { iso2: \"HU\", name: \"Hungary\", dial: \"36\" },\n { iso2: \"IS\", name: \"Iceland\", dial: \"354\" },\n { iso2: \"IN\", name: \"India\", dial: \"91\" },\n { iso2: \"ID\", name: \"Indonesia\", dial: \"62\" },\n { iso2: \"IR\", name: \"Iran\", dial: \"98\" },\n { iso2: \"IQ\", name: \"Iraq\", dial: \"964\" },\n { iso2: \"IE\", name: \"Ireland\", dial: \"353\" },\n { iso2: \"IL\", name: \"Israel\", dial: \"972\" },\n { iso2: \"IT\", name: \"Italy\", dial: \"39\" },\n { iso2: \"JM\", name: \"Jamaica\", dial: \"1876\" },\n { iso2: \"JP\", name: \"Japan\", dial: \"81\" },\n { iso2: \"JO\", name: \"Jordan\", dial: \"962\" },\n { iso2: \"KZ\", name: \"Kazakhstan\", dial: \"7\" },\n { iso2: \"KE\", name: \"Kenya\", dial: \"254\" },\n { iso2: \"KI\", name: \"Kiribati\", dial: \"686\" },\n { iso2: \"KW\", name: \"Kuwait\", dial: \"965\" },\n { iso2: \"KG\", name: \"Kyrgyzstan\", dial: \"996\" },\n { iso2: \"LA\", name: \"Laos\", dial: \"856\" },\n { iso2: \"LV\", name: \"Latvia\", dial: \"371\" },\n { iso2: \"LB\", name: \"Lebanon\", dial: \"961\" },\n { iso2: \"LS\", name: \"Lesotho\", dial: \"266\" },\n { iso2: \"LR\", name: \"Liberia\", dial: \"231\" },\n { iso2: \"LY\", name: \"Libya\", dial: \"218\" },\n { iso2: \"LI\", name: \"Liechtenstein\", dial: \"423\" },\n { iso2: \"LT\", name: \"Lithuania\", dial: \"370\" },\n { iso2: \"LU\", name: \"Luxembourg\", dial: \"352\" },\n { iso2: \"MO\", name: \"Macau\", dial: \"853\" },\n { iso2: \"MG\", name: \"Madagascar\", dial: \"261\" },\n { iso2: \"MW\", name: \"Malawi\", dial: \"265\" },\n { iso2: \"MY\", name: \"Malaysia\", dial: \"60\" },\n { iso2: \"MV\", name: \"Maldives\", dial: \"960\" },\n { iso2: \"ML\", name: \"Mali\", dial: \"223\" },\n { iso2: \"MT\", name: \"Malta\", dial: \"356\" },\n { iso2: \"MR\", name: \"Mauritania\", dial: \"222\" },\n { iso2: \"MU\", name: \"Mauritius\", dial: \"230\" },\n { iso2: \"MX\", name: \"Mexico\", dial: \"52\" },\n { iso2: \"FM\", name: \"Micronesia\", dial: \"691\" },\n { iso2: \"MD\", name: \"Moldova\", dial: \"373\" },\n { iso2: \"MC\", name: \"Monaco\", dial: \"377\" },\n { iso2: \"MN\", name: \"Mongolia\", dial: \"976\" },\n { iso2: \"ME\", name: \"Montenegro\", dial: \"382\" },\n { iso2: \"MA\", name: \"Morocco\", dial: \"212\" },\n { iso2: \"MZ\", name: \"Mozambique\", dial: \"258\" },\n { iso2: \"MM\", name: \"Myanmar\", dial: \"95\" },\n { iso2: \"NA\", name: \"Namibia\", dial: \"264\" },\n { iso2: \"NR\", name: \"Nauru\", dial: \"674\" },\n { iso2: \"NP\", name: \"Nepal\", dial: \"977\" },\n { iso2: \"NL\", name: \"Netherlands\", dial: \"31\" },\n { iso2: \"NZ\", name: \"New Zealand\", dial: \"64\" },\n { iso2: \"NI\", name: \"Nicaragua\", dial: \"505\" },\n { iso2: \"NE\", name: \"Niger\", dial: \"227\" },\n { iso2: \"NG\", name: \"Nigeria\", dial: \"234\" },\n { iso2: \"KP\", name: \"North Korea\", dial: \"850\" },\n { iso2: \"MK\", name: \"North Macedonia\", dial: \"389\" },\n { iso2: \"NO\", name: \"Norway\", dial: \"47\" },\n { iso2: \"OM\", name: \"Oman\", dial: \"968\" },\n { iso2: \"PK\", name: \"Pakistan\", dial: \"92\" },\n { iso2: \"PW\", name: \"Palau\", dial: \"680\" },\n { iso2: \"PS\", name: \"Palestine\", dial: \"970\" },\n { iso2: \"PA\", name: \"Panama\", dial: \"507\" },\n { iso2: \"PG\", name: \"Papua New Guinea\", dial: \"675\" },\n { iso2: \"PY\", name: \"Paraguay\", dial: \"595\" },\n { iso2: \"PE\", name: \"Peru\", dial: \"51\" },\n { iso2: \"PH\", name: \"Philippines\", dial: \"63\" },\n { iso2: \"PL\", name: \"Poland\", dial: \"48\" },\n { iso2: \"PT\", name: \"Portugal\", dial: \"351\" },\n { iso2: \"PR\", name: \"Puerto Rico\", dial: \"1787\" },\n { iso2: \"QA\", name: \"Qatar\", dial: \"974\" },\n { iso2: \"RO\", name: \"Romania\", dial: \"40\" },\n { iso2: \"RU\", name: \"Russia\", dial: \"7\" },\n { iso2: \"RW\", name: \"Rwanda\", dial: \"250\" },\n { iso2: \"WS\", name: \"Samoa\", dial: \"685\" },\n { iso2: \"SM\", name: \"San Marino\", dial: \"378\" },\n { iso2: \"ST\", name: \"São Tomé and Príncipe\", dial: \"239\" },\n { iso2: \"SA\", name: \"Saudi Arabia\", dial: \"966\" },\n { iso2: \"SN\", name: \"Senegal\", dial: \"221\" },\n { iso2: \"RS\", name: \"Serbia\", dial: \"381\" },\n { iso2: \"SC\", name: \"Seychelles\", dial: \"248\" },\n { iso2: \"SL\", name: \"Sierra Leone\", dial: \"232\" },\n { iso2: \"SG\", name: \"Singapore\", dial: \"65\" },\n { iso2: \"SK\", name: \"Slovakia\", dial: \"421\" },\n { iso2: \"SI\", name: \"Slovenia\", dial: \"386\" },\n { iso2: \"SB\", name: \"Solomon Islands\", dial: \"677\" },\n { iso2: \"SO\", name: \"Somalia\", dial: \"252\" },\n { iso2: \"ZA\", name: \"South Africa\", dial: \"27\" },\n { iso2: \"KR\", name: \"South Korea\", dial: \"82\" },\n { iso2: \"SS\", name: \"South Sudan\", dial: \"211\" },\n { iso2: \"ES\", name: \"Spain\", dial: \"34\" },\n { iso2: \"LK\", name: \"Sri Lanka\", dial: \"94\" },\n { iso2: \"SD\", name: \"Sudan\", dial: \"249\" },\n { iso2: \"SR\", name: \"Suriname\", dial: \"597\" },\n { iso2: \"SE\", name: \"Sweden\", dial: \"46\" },\n { iso2: \"CH\", name: \"Switzerland\", dial: \"41\" },\n { iso2: \"SY\", name: \"Syria\", dial: \"963\" },\n { iso2: \"TW\", name: \"Taiwan\", dial: \"886\" },\n { iso2: \"TJ\", name: \"Tajikistan\", dial: \"992\" },\n { iso2: \"TZ\", name: \"Tanzania\", dial: \"255\" },\n { iso2: \"TH\", name: \"Thailand\", dial: \"66\" },\n { iso2: \"TL\", name: \"Timor-Leste\", dial: \"670\" },\n { iso2: \"TG\", name: \"Togo\", dial: \"228\" },\n { iso2: \"TO\", name: \"Tonga\", dial: \"676\" },\n { iso2: \"TT\", name: \"Trinidad and Tobago\", dial: \"1868\" },\n { iso2: \"TN\", name: \"Tunisia\", dial: \"216\" },\n { iso2: \"TR\", name: \"Turkey\", dial: \"90\" },\n { iso2: \"TM\", name: \"Turkmenistan\", dial: \"993\" },\n { iso2: \"TV\", name: \"Tuvalu\", dial: \"688\" },\n { iso2: \"UG\", name: \"Uganda\", dial: \"256\" },\n { iso2: \"UA\", name: \"Ukraine\", dial: \"380\" },\n { iso2: \"AE\", name: \"United Arab Emirates\", dial: \"971\" },\n { iso2: \"GB\", name: \"United Kingdom\", dial: \"44\" },\n { iso2: \"US\", name: \"United States\", dial: \"1\" },\n { iso2: \"UY\", name: \"Uruguay\", dial: \"598\" },\n { iso2: \"UZ\", name: \"Uzbekistan\", dial: \"998\" },\n { iso2: \"VU\", name: \"Vanuatu\", dial: \"678\" },\n { iso2: \"VA\", name: \"Vatican City\", dial: \"379\" },\n { iso2: \"VE\", name: \"Venezuela\", dial: \"58\" },\n { iso2: \"VN\", name: \"Vietnam\", dial: \"84\" },\n { iso2: \"YE\", name: \"Yemen\", dial: \"967\" },\n { iso2: \"ZM\", name: \"Zambia\", dial: \"260\" },\n { iso2: \"ZW\", name: \"Zimbabwe\", dial: \"263\" },\n];\n\nexport const COUNTRIES: Country[] = RAW.map((c) => ({\n ...c,\n flag: iso2ToFlag(c.iso2),\n})).sort((a, b) => a.name.localeCompare(b.name));\n\nconst BY_ISO2 = new Map(COUNTRIES.map((c) => [c.iso2, c]));\n\nexport function getCountryByIso2(iso2: string): Country | undefined {\n return BY_ISO2.get(iso2.toUpperCase());\n}\n\n/**\n * Tiebreaker for dial codes that are shared between several countries (most\n * notably the NANP `+1` block and the `+7` block shared by Russia and\n * Kazakhstan). When two countries have the same `dial` string the longest-\n * prefix sort below would otherwise fall back to the (alphabetical) order of\n * `COUNTRIES`, which puts Canada ahead of the United States — that's why a\n * San Diego number like `+18589107283` used to detect as Canada.\n *\n * The right fix is data, not heuristics: declare which ISO2 code wins when a\n * dial is fully ambiguous, and let the sort below honor it. Adding a new\n * shared code is a one-line change.\n */\nconst DIAL_CODE_PRIORITY: Record<string, string> = {\n \"1\": \"US\", // NANP — US/Canada/Caribbean share +1; default to US\n \"7\": \"RU\", // RU/KZ share +7; default to Russia\n};\n\n/**\n * Greedy longest-prefix match: given an E.164 phone (with or without `+`),\n * find the country whose dial code matches the longest prefix. We sort the\n * dial table by length descending so e.g. `+1242` (Bahamas) wins over `+1`\n * (US/Canada) when both could match.\n *\n * For dial codes of equal length we apply DIAL_CODE_PRIORITY first, then fall\n * back to a stable alphabetical order so the result is deterministic across\n * runs (V8's `Array.prototype.sort` has been stable since Node 12).\n */\nconst SORTED_DIALS = [...COUNTRIES].sort((a, b) => {\n if (b.dial.length !== a.dial.length) {\n return b.dial.length - a.dial.length;\n }\n const preferred = DIAL_CODE_PRIORITY[a.dial];\n if (preferred) {\n if (a.iso2 === preferred && b.iso2 !== preferred) return -1;\n if (b.iso2 === preferred && a.iso2 !== preferred) return 1;\n }\n return a.name.localeCompare(b.name);\n});\n\nexport function detectCountryFromPhone(phone: string): Country | null {\n if (!phone) return null;\n const digits = phone.replace(/^\\+/, \"\").replace(/\\D/g, \"\");\n for (const c of SORTED_DIALS) {\n if (digits.startsWith(c.dial)) return c;\n }\n return null;\n}\n\n/**\n * Strip the dial-code prefix off a phone string. Returns the local part only,\n * with non-digits removed. Used so the number-input field shows just the\n * local subscriber number, not the redundant `+81` already shown by the flag.\n */\nexport function stripDialCode(phone: string, country: Country): string {\n const digits = phone.replace(/^\\+/, \"\").replace(/\\D/g, \"\");\n if (digits.startsWith(country.dial)) {\n return digits.slice(country.dial.length);\n }\n return digits;\n}\n\n/**\n * Compose an E.164-formatted phone string from a country and the local\n * subscriber number. The local part is sanitized to digits only; an empty\n * local part returns just `+<dial>` so partial input round-trips cleanly.\n */\nexport function composeE164(country: Country, localNumber: string): string {\n const local = localNumber.replace(/\\D/g, \"\");\n return `+${country.dial}${local}`;\n}\n"],"names":["queryClient","usePairingPoll","url","shouldStop","shouldStopRef","intervalMs","pollRef","status","setStatus","active","setActive","stop","current","setInterval","data","clearInterval","get","start","invalidateQueries","queryKey","reset"],"mappings":"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A,CAAA,CAAA,CAAA,EEA8D,CAAA,AFA9D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CEGL,AFHK,CAAA,AEGL,CFHK,CEIA,AFJA,CAAA,AEIA,CFJA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4EEKE,QACP,CAAA,CACF,CACD,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","ignoreList":[8,9,10]}
|