openship 0.1.1 → 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/dist/index.d.ts +1 -0
- package/dist/index.js +5786 -0
- package/dist/server/index.js +324319 -0
- package/dist/server/migrations/0000_init.sql +666 -0
- package/dist/server/migrations/0001_brief_tomorrow_man.sql +47 -0
- package/dist/server/migrations/0002_funny_dazzler.sql +2 -0
- package/dist/server/migrations/0003_third_killer_shrike.sql +1 -0
- package/dist/server/migrations/0004_session_active_org_not_null.sql +10 -0
- package/dist/server/migrations/0005_warm_amazoness.sql +3 -0
- package/dist/server/migrations/0006_lumpy_joystick.sql +1 -0
- package/dist/server/migrations/0007_outgoing_maginty.sql +2 -0
- package/dist/server/migrations/0008_frozen_cutover.sql +3 -0
- package/dist/server/migrations/0009_credits_billing.sql +142 -0
- package/dist/server/migrations/0010_credit_grant_dedupe.sql +14 -0
- package/dist/server/migrations/0011_remove_credit_ledger.sql +23 -0
- package/dist/server/migrations/0012_smart_deploys_and_git_rollback.sql +81 -0
- package/dist/server/migrations/0013_fix_check_run_rollup_unique.sql +38 -0
- package/dist/server/migrations/0014_default_rollback_git.sql +9 -0
- package/dist/server/migrations/0015_billing_idempotency_grants.sql +41 -0
- package/dist/server/migrations/0016_github_auth_high_findings.sql +30 -0
- package/dist/server/migrations/0017_spooky_rumiko_fujikawa.sql +6 -0
- package/dist/server/migrations/0018_calm_shatterstar.sql +1 -0
- package/dist/server/migrations/0019_rename_workspace_install_to_prepare.sql +1 -0
- package/dist/server/migrations/0020_uneven_the_renegades.sql +13 -0
- package/dist/server/migrations/0021_shiny_firestar.sql +2 -0
- package/dist/server/migrations/0022_version_on_success_backfill.sql +6 -0
- package/dist/server/migrations/0023_productive_gorilla_man.sql +17 -0
- package/dist/server/migrations/0024_sleepy_peter_quill.sql +2 -0
- package/dist/server/migrations/0025_smooth_blue_shield.sql +1 -0
- package/dist/server/migrations/0026_mail_backup_source.sql +11 -0
- package/dist/server/migrations/0027_opposite_anthem.sql +6 -0
- package/dist/server/migrations/0028_stale_rogue.sql +18 -0
- package/dist/server/migrations/0029_bouncy_loners.sql +16 -0
- package/dist/server/migrations/0030_bright_darkstar.sql +6 -0
- package/dist/server/migrations/0031_conscious_catseye.sql +13 -0
- package/dist/server/migrations/0032_wet_mimic.sql +51 -0
- package/dist/server/migrations/0033_eminent_molly_hayes.sql +2 -0
- package/dist/server/migrations/meta/0000_snapshot.json +5110 -0
- package/dist/server/migrations/meta/0001_snapshot.json +5257 -0
- package/dist/server/migrations/meta/0002_snapshot.json +5279 -0
- package/dist/server/migrations/meta/0003_snapshot.json +5286 -0
- package/dist/server/migrations/meta/0004_snapshot.json +5286 -0
- package/dist/server/migrations/meta/0005_snapshot.json +5305 -0
- package/dist/server/migrations/meta/0006_snapshot.json +5311 -0
- package/dist/server/migrations/meta/0007_snapshot.json +5323 -0
- package/dist/server/migrations/meta/0016_snapshot.json +6345 -0
- package/dist/server/migrations/meta/0017_snapshot.json +6383 -0
- package/dist/server/migrations/meta/0018_snapshot.json +6390 -0
- package/dist/server/migrations/meta/0019_snapshot.json +6390 -0
- package/dist/server/migrations/meta/0020_snapshot.json +6497 -0
- package/dist/server/migrations/meta/0021_snapshot.json +6509 -0
- package/dist/server/migrations/meta/0022_snapshot.json +6509 -0
- package/dist/server/migrations/meta/0023_snapshot.json +6629 -0
- package/dist/server/migrations/meta/0024_snapshot.json +6641 -0
- package/dist/server/migrations/meta/0025_snapshot.json +6648 -0
- package/dist/server/migrations/meta/0026_snapshot.json +6750 -0
- package/dist/server/migrations/meta/0027_snapshot.json +6757 -0
- package/dist/server/migrations/meta/0028_snapshot.json +6895 -0
- package/dist/server/migrations/meta/0029_snapshot.json +7028 -0
- package/dist/server/migrations/meta/0030_snapshot.json +7066 -0
- package/dist/server/migrations/meta/0031_snapshot.json +7181 -0
- package/dist/server/migrations/meta/0032_snapshot.json +7570 -0
- package/dist/server/migrations/meta/0033_snapshot.json +7597 -0
- package/dist/server/migrations/meta/_journal.json +244 -0
- package/dist/server/pglite/pglite.data +0 -0
- package/dist/server/pglite/pglite.wasm +0 -0
- package/package.json +31 -33
- package/.env.example +0 -38
- package/.nvmrc +0 -1
- package/.prettierrc +0 -7
- package/CONTRIBUTING.md +0 -90
- package/LICENSE +0 -661
- package/README.md +0 -360
- package/apps/api/.env.example +0 -30
- package/apps/api/Dockerfile +0 -22
- package/apps/api/package.json +0 -41
- package/apps/api/src/app.ts +0 -69
- package/apps/api/src/config/env.ts +0 -113
- package/apps/api/src/config/index.ts +0 -1
- package/apps/api/src/index.ts +0 -8
- package/apps/api/src/lib/auth-mode.ts +0 -42
- package/apps/api/src/lib/auth.ts +0 -105
- package/apps/api/src/lib/cache.ts +0 -128
- package/apps/api/src/lib/cloud-auth-proxy.ts +0 -310
- package/apps/api/src/lib/cloud-client.ts +0 -103
- package/apps/api/src/lib/compose-parser.ts +0 -138
- package/apps/api/src/lib/controller-helpers.ts +0 -90
- package/apps/api/src/lib/email-templates.ts +0 -94
- package/apps/api/src/lib/encryption.ts +0 -102
- package/apps/api/src/lib/local-user.ts +0 -65
- package/apps/api/src/lib/mail.ts +0 -48
- package/apps/api/src/lib/notifications.ts +0 -195
- package/apps/api/src/lib/openship-cloud.ts +0 -101
- package/apps/api/src/lib/resources.ts +0 -96
- package/apps/api/src/lib/screenshots.ts +0 -189
- package/apps/api/src/lib/ssh-manager.ts +0 -369
- package/apps/api/src/lib/ssl-scheduler.ts +0 -109
- package/apps/api/src/lib/stack-detector.ts +0 -708
- package/apps/api/src/lib/system-debug.ts +0 -10
- package/apps/api/src/middleware/auth.ts +0 -60
- package/apps/api/src/middleware/error-handler.ts +0 -41
- package/apps/api/src/middleware/index.ts +0 -5
- package/apps/api/src/middleware/internal-auth.ts +0 -40
- package/apps/api/src/middleware/local-only.ts +0 -20
- package/apps/api/src/middleware/rate-limiter.ts +0 -35
- package/apps/api/src/modules/analytics/analytics.controller.ts +0 -111
- package/apps/api/src/modules/analytics/analytics.routes.ts +0 -29
- package/apps/api/src/modules/analytics/analytics.schema.ts +0 -37
- package/apps/api/src/modules/analytics/analytics.service.ts +0 -264
- package/apps/api/src/modules/auth/auth.routes.ts +0 -237
- package/apps/api/src/modules/billing/billing.controller.ts +0 -60
- package/apps/api/src/modules/billing/billing.routes.ts +0 -34
- package/apps/api/src/modules/billing/billing.schema.ts +0 -9
- package/apps/api/src/modules/billing/billing.service.ts +0 -33
- package/apps/api/src/modules/cloud/cloud.controller.ts +0 -225
- package/apps/api/src/modules/cloud/cloud.routes.ts +0 -40
- package/apps/api/src/modules/deployments/build.service.ts +0 -791
- package/apps/api/src/modules/deployments/deployment-lifecycle.ts +0 -138
- package/apps/api/src/modules/deployments/deployment.controller.ts +0 -343
- package/apps/api/src/modules/deployments/deployment.routes.ts +0 -37
- package/apps/api/src/modules/deployments/deployment.schema.ts +0 -39
- package/apps/api/src/modules/deployments/deployment.service.ts +0 -190
- package/apps/api/src/modules/deployments/preflight.ts +0 -280
- package/apps/api/src/modules/deployments/prepare.service.ts +0 -252
- package/apps/api/src/modules/deployments/session-manager.ts +0 -283
- package/apps/api/src/modules/deployments/ssl.service.ts +0 -73
- package/apps/api/src/modules/domains/domain.controller.ts +0 -73
- package/apps/api/src/modules/domains/domain.routes.ts +0 -24
- package/apps/api/src/modules/domains/domain.schema.ts +0 -35
- package/apps/api/src/modules/domains/domain.service.ts +0 -385
- package/apps/api/src/modules/github/github.auth.ts +0 -397
- package/apps/api/src/modules/github/github.controller.ts +0 -387
- package/apps/api/src/modules/github/github.local-auth.ts +0 -251
- package/apps/api/src/modules/github/github.routes.ts +0 -50
- package/apps/api/src/modules/github/github.schema.ts +0 -52
- package/apps/api/src/modules/github/github.service.ts +0 -592
- package/apps/api/src/modules/github/github.types.ts +0 -158
- package/apps/api/src/modules/github/github.webhook.ts +0 -186
- package/apps/api/src/modules/github/index.ts +0 -16
- package/apps/api/src/modules/health/health.routes.ts +0 -45
- package/apps/api/src/modules/projects/project.controller.ts +0 -498
- package/apps/api/src/modules/projects/project.routes.ts +0 -67
- package/apps/api/src/modules/projects/project.schema.ts +0 -107
- package/apps/api/src/modules/projects/project.service.ts +0 -514
- package/apps/api/src/modules/settings/settings.controller.ts +0 -55
- package/apps/api/src/modules/settings/settings.routes.ts +0 -25
- package/apps/api/src/modules/settings/settings.service.ts +0 -49
- package/apps/api/src/modules/system/filesystem.controller.ts +0 -66
- package/apps/api/src/modules/system/index.ts +0 -1
- package/apps/api/src/modules/system/server-check.controller.ts +0 -475
- package/apps/api/src/modules/system/setup-session.ts +0 -255
- package/apps/api/src/modules/system/setup.controller.ts +0 -128
- package/apps/api/src/modules/system/system.routes.ts +0 -42
- package/apps/api/src/modules/webhooks/webhook.controller.ts +0 -64
- package/apps/api/src/modules/webhooks/webhook.routes.ts +0 -15
- package/apps/api/src/modules/webhooks/webhook.service.ts +0 -52
- package/apps/api/src/modules/webhooks/webhook.types.ts +0 -35
- package/apps/api/tsconfig.json +0 -14
- package/apps/cli/package.json +0 -26
- package/apps/cli/src/commands/deploy.ts +0 -11
- package/apps/cli/src/commands/init.ts +0 -8
- package/apps/cli/src/commands/login.ts +0 -8
- package/apps/cli/src/commands/logs.ts +0 -9
- package/apps/cli/src/index.ts +0 -21
- package/apps/cli/src/lib/api-client.ts +0 -35
- package/apps/cli/tsconfig.json +0 -13
- package/apps/dashboard/Dockerfile +0 -22
- package/apps/dashboard/components.json +0 -20
- package/apps/dashboard/next-env.d.ts +0 -6
- package/apps/dashboard/next.config.mjs +0 -16
- package/apps/dashboard/package.json +0 -40
- package/apps/dashboard/postcss.config.mjs +0 -5
- package/apps/dashboard/public/android-chrome-192x192.png +0 -0
- package/apps/dashboard/public/android-chrome-512x512.png +0 -0
- package/apps/dashboard/public/apple-touch-icon.png +0 -0
- package/apps/dashboard/public/favicon-16x16.png +0 -0
- package/apps/dashboard/public/favicon-32x32.png +0 -0
- package/apps/dashboard/public/favicon.ico +0 -0
- package/apps/dashboard/public/site.webmanifest +0 -19
- package/apps/dashboard/src/app/(auth)/forgot-password/page.tsx +0 -114
- package/apps/dashboard/src/app/(auth)/layout.tsx +0 -21
- package/apps/dashboard/src/app/(auth)/login/page.tsx +0 -220
- package/apps/dashboard/src/app/(auth)/providers.tsx +0 -34
- package/apps/dashboard/src/app/(auth)/register/page.tsx +0 -176
- package/apps/dashboard/src/app/(auth)/reset-password/page.tsx +0 -172
- package/apps/dashboard/src/app/(auth)/verify-email/page.tsx +0 -190
- package/apps/dashboard/src/app/(dashboard)/(deployment)/build/[id]/page.tsx +0 -162
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/BuildSummary.tsx +0 -166
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DnsConfiguration.tsx +0 -119
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DomainSettings.tsx +0 -291
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Header.tsx +0 -71
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Sidebar.tsx +0 -270
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/SkeletonLoader.tsx +0 -87
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/page.tsx +0 -169
- package/apps/dashboard/src/app/(dashboard)/(deployment)/layout.tsx +0 -7
- package/apps/dashboard/src/app/(dashboard)/billing/page.tsx +0 -3
- package/apps/dashboard/src/app/(dashboard)/deployments/components/CommitDetailsModal.tsx +0 -240
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentCard.tsx +0 -121
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentHeader.tsx +0 -89
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentMenu.tsx +0 -182
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsContent.tsx +0 -324
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsFilters.tsx +0 -99
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsList.tsx +0 -31
- package/apps/dashboard/src/app/(dashboard)/deployments/components/EmptyState.tsx +0 -101
- package/apps/dashboard/src/app/(dashboard)/deployments/components/LoadingSkeleton.tsx +0 -57
- package/apps/dashboard/src/app/(dashboard)/deployments/components/ProjectFilter.tsx +0 -109
- package/apps/dashboard/src/app/(dashboard)/deployments/components/index.ts +0 -9
- package/apps/dashboard/src/app/(dashboard)/deployments/page.tsx +0 -14
- package/apps/dashboard/src/app/(dashboard)/deployments/types.ts +0 -44
- package/apps/dashboard/src/app/(dashboard)/deployments/utils.ts +0 -176
- package/apps/dashboard/src/app/(dashboard)/domains/page.tsx +0 -3
- package/apps/dashboard/src/app/(dashboard)/integrations/page.tsx +0 -321
- package/apps/dashboard/src/app/(dashboard)/layout.tsx +0 -27
- package/apps/dashboard/src/app/(dashboard)/library/components/ConnectPrompt.tsx +0 -187
- package/apps/dashboard/src/app/(dashboard)/library/components/LibrarySidebar.tsx +0 -147
- package/apps/dashboard/src/app/(dashboard)/library/components/LoadingSkeleton.tsx +0 -39
- package/apps/dashboard/src/app/(dashboard)/library/components/LocalProjects.tsx +0 -548
- package/apps/dashboard/src/app/(dashboard)/library/components/RepositoryList.tsx +0 -292
- package/apps/dashboard/src/app/(dashboard)/library/components/TemplateGrid.tsx +0 -36
- package/apps/dashboard/src/app/(dashboard)/library/components/UrlImport.tsx +0 -74
- package/apps/dashboard/src/app/(dashboard)/library/page.tsx +0 -121
- package/apps/dashboard/src/app/(dashboard)/library/types.ts +0 -26
- package/apps/dashboard/src/app/(dashboard)/monitoring/page.tsx +0 -3
- package/apps/dashboard/src/app/(dashboard)/page.tsx +0 -485
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/layout.tsx +0 -22
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/page.tsx +0 -286
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/AdvancedSettings.tsx +0 -235
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/BuildSettings.tsx +0 -174
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeleteConfirmationDialog.tsx +0 -45
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeletionModal.tsx +0 -95
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/Deployments.tsx +0 -11
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx +0 -523
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/EnvironmentSettings.tsx +0 -246
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GeneralSettings.tsx +0 -93
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitInfo.tsx +0 -261
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitSettings.tsx +0 -391
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/LogsSettings.tsx +0 -133
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectNotFound.tsx +0 -95
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectsBottomNavigation.tsx +0 -62
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ResourceSettings.tsx +0 -333
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingSection.tsx +0 -66
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingsNavigation.tsx +0 -27
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SleepModeSettings.tsx +0 -134
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProductionUrl.tsx +0 -25
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectIdentity.tsx +0 -159
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectInfo.tsx +0 -58
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/SkeletonLoader.tsx +0 -170
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/StatsCards.tsx +0 -33
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TopPaths.tsx +0 -56
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TrafficChart.tsx +0 -157
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/index.ts +0 -14
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/LogsActions.tsx +0 -52
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/ServerLogs.tsx +0 -249
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/TerminalLogs.tsx +0 -682
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/logs.css +0 -127
- package/apps/dashboard/src/app/(dashboard)/projects/components/DeploymentCard.tsx +0 -73
- package/apps/dashboard/src/app/(dashboard)/projects/components/ProjectCard.tsx +0 -330
- package/apps/dashboard/src/app/(dashboard)/projects/page.tsx +0 -330
- package/apps/dashboard/src/app/(dashboard)/providers.tsx +0 -23
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/components-tab.tsx +0 -329
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/overview-tab.tsx +0 -229
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/terminal-tab.tsx +0 -38
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/page.tsx +0 -437
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/checking-state.tsx +0 -15
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/choose-mode.tsx +0 -54
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/component-row.tsx +0 -65
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/error-banner.tsx +0 -13
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/installing-panel.tsx +0 -227
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/results-panel.tsx +0 -90
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/setup-header.tsx +0 -56
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/types.ts +0 -13
- package/apps/dashboard/src/app/(dashboard)/servers/new/page.tsx +0 -666
- package/apps/dashboard/src/app/(dashboard)/servers/page.tsx +0 -283
- package/apps/dashboard/src/app/(dashboard)/settings/_components/BuildPreferences.tsx +0 -110
- package/apps/dashboard/src/app/(dashboard)/settings/_components/CloudConnection.tsx +0 -147
- package/apps/dashboard/src/app/(dashboard)/settings/_components/InstanceInfo.tsx +0 -54
- package/apps/dashboard/src/app/(dashboard)/settings/_components/ServerConnection.tsx +0 -407
- package/apps/dashboard/src/app/(dashboard)/settings/_components/SettingsSection.tsx +0 -32
- package/apps/dashboard/src/app/(dashboard)/settings/page.tsx +0 -67
- package/apps/dashboard/src/app/auth/callback/close/page.tsx +0 -23
- package/apps/dashboard/src/app/auth/callback/install/page.tsx +0 -40
- package/apps/dashboard/src/app/authorize/page.tsx +0 -137
- package/apps/dashboard/src/app/globals.css +0 -57
- package/apps/dashboard/src/app/layout.tsx +0 -55
- package/apps/dashboard/src/components/auth-shell.tsx +0 -66
- package/apps/dashboard/src/components/deployments/types.ts +0 -44
- package/apps/dashboard/src/components/global-deployments/index.ts +0 -17
- package/apps/dashboard/src/components/i18n-provider.tsx +0 -100
- package/apps/dashboard/src/components/import-project/BuildSettings.tsx +0 -376
- package/apps/dashboard/src/components/import-project/BuildSkeleton.tsx +0 -161
- package/apps/dashboard/src/components/import-project/BuildTerminal.tsx +0 -358
- package/apps/dashboard/src/components/import-project/ComposeServices.tsx +0 -455
- package/apps/dashboard/src/components/import-project/DeploymentProcessing.tsx +0 -510
- package/apps/dashboard/src/components/import-project/DockerSettings.tsx +0 -64
- package/apps/dashboard/src/components/import-project/EnvironmentVariables.tsx +0 -481
- package/apps/dashboard/src/components/import-project/Frameworks.tsx +0 -90
- package/apps/dashboard/src/components/import-project/ProjectSettings.tsx +0 -160
- package/apps/dashboard/src/components/import-project/types.ts +0 -82
- package/apps/dashboard/src/components/integrations/GithubPermissionModal.tsx +0 -173
- package/apps/dashboard/src/components/language-switcher.tsx +0 -36
- package/apps/dashboard/src/components/logo.tsx +0 -13
- package/apps/dashboard/src/components/network-error-handler.tsx +0 -27
- package/apps/dashboard/src/components/oauth-buttons.tsx +0 -81
- package/apps/dashboard/src/components/overview/ActivityChart.tsx +0 -247
- package/apps/dashboard/src/components/overview/ApiRequestsCard.tsx +0 -111
- package/apps/dashboard/src/components/overview/CreditsCard.tsx +0 -137
- package/apps/dashboard/src/components/overview/DeploymentsChart.tsx +0 -195
- package/apps/dashboard/src/components/overview/EmptyState.tsx +0 -126
- package/apps/dashboard/src/components/overview/LoadingSkeleton.tsx +0 -92
- package/apps/dashboard/src/components/overview/OverviewHeader.tsx +0 -74
- package/apps/dashboard/src/components/overview/OverviewHeroChart.tsx +0 -344
- package/apps/dashboard/src/components/overview/ProjectsCard.tsx +0 -134
- package/apps/dashboard/src/components/overview/QuickLinks.tsx +0 -119
- package/apps/dashboard/src/components/overview/SandboxesCard.tsx +0 -150
- package/apps/dashboard/src/components/overview/StatsGrid.tsx +0 -166
- package/apps/dashboard/src/components/overview/TokenUsageChart.tsx +0 -206
- package/apps/dashboard/src/components/overview/UsageStats.tsx +0 -79
- package/apps/dashboard/src/components/overview/index.ts +0 -30
- package/apps/dashboard/src/components/overview/types.ts +0 -116
- package/apps/dashboard/src/components/page-header.tsx +0 -25
- package/apps/dashboard/src/components/project-settings/ServerSideSwitch.jsx +0 -60
- package/apps/dashboard/src/components/shared/AlertBox.tsx +0 -39
- package/apps/dashboard/src/components/shared/CTASection.tsx +0 -45
- package/apps/dashboard/src/components/shared/ErrorState.tsx +0 -176
- package/apps/dashboard/src/components/shared/FeatureCard.tsx +0 -20
- package/apps/dashboard/src/components/shared/MDXComponents.tsx +0 -24
- package/apps/dashboard/src/components/shared/MachineSettingsModal.tsx +0 -286
- package/apps/dashboard/src/components/shared/Modal.tsx +0 -39
- package/apps/dashboard/src/components/shared/OTPInput.tsx +0 -122
- package/apps/dashboard/src/components/shared/PageHero.tsx +0 -21
- package/apps/dashboard/src/components/shared/PlatformFeatureCard.tsx +0 -27
- package/apps/dashboard/src/components/shared/StatCard.tsx +0 -14
- package/apps/dashboard/src/components/shared/ValueCard.tsx +0 -20
- package/apps/dashboard/src/components/shared/index.ts +0 -8
- package/apps/dashboard/src/components/sidebar.tsx +0 -282
- package/apps/dashboard/src/components/theme-provider.tsx +0 -96
- package/apps/dashboard/src/components/toast.tsx +0 -106
- package/apps/dashboard/src/components/ui/CustomCursor.tsx +0 -107
- package/apps/dashboard/src/components/ui/CustomSelect.tsx +0 -126
- package/apps/dashboard/src/components/ui/DropdownMenu.tsx +0 -174
- package/apps/dashboard/src/components/ui/FileIcon.jsx +0 -59
- package/apps/dashboard/src/components/ui/IconPickerModal.tsx +0 -273
- package/apps/dashboard/src/components/ui/InfoBanner.jsx +0 -39
- package/apps/dashboard/src/components/ui/Logo.tsx +0 -14
- package/apps/dashboard/src/components/ui/Modal.tsx +0 -117
- package/apps/dashboard/src/components/ui/PageContainer.tsx +0 -12
- package/apps/dashboard/src/components/ui/SectionContainer.jsx +0 -7
- package/apps/dashboard/src/components/ui/SlidingToggle.tsx +0 -128
- package/apps/dashboard/src/components/ui/Toast.tsx +0 -29
- package/apps/dashboard/src/components/ui/button.tsx +0 -58
- package/apps/dashboard/src/components/ui/card.tsx +0 -60
- package/apps/dashboard/src/components/ui/input.tsx +0 -20
- package/apps/dashboard/src/components/ui/label.tsx +0 -19
- package/apps/dashboard/src/components/ui/select.tsx +0 -10
- package/apps/dashboard/src/components/ui/textarea.tsx +0 -9
- package/apps/dashboard/src/constants/lang-colors.ts +0 -25
- package/apps/dashboard/src/constants/mock.ts +0 -38
- package/apps/dashboard/src/context/AuthContext.tsx +0 -91
- package/apps/dashboard/src/context/CloudContext.tsx +0 -275
- package/apps/dashboard/src/context/DeploymentContext.tsx +0 -71
- package/apps/dashboard/src/context/GitHubContext.tsx +0 -288
- package/apps/dashboard/src/context/ModalContext.tsx +0 -300
- package/apps/dashboard/src/context/NetworkContext.tsx +0 -32
- package/apps/dashboard/src/context/ProjectSettingsContext.tsx +0 -727
- package/apps/dashboard/src/context/ToastContext.tsx +0 -129
- package/apps/dashboard/src/context/deployment/index.ts +0 -3
- package/apps/dashboard/src/context/deployment/types.ts +0 -183
- package/apps/dashboard/src/context/deployment/useDeploymentBuild.ts +0 -547
- package/apps/dashboard/src/context/deployment/useDeploymentConfig.ts +0 -176
- package/apps/dashboard/src/hooks/useBuildConnection.ts +0 -334
- package/apps/dashboard/src/hooks/useMonitorStream.ts +0 -146
- package/apps/dashboard/src/hooks/useProjectData.ts +0 -110
- package/apps/dashboard/src/hooks/useSSEConnection.ts +0 -465
- package/apps/dashboard/src/hooks/useSSEStream.ts +0 -309
- package/apps/dashboard/src/hooks/useSessions.ts +0 -104
- package/apps/dashboard/src/hooks/useSetupStream.ts +0 -223
- package/apps/dashboard/src/i18n/dictionaries/ar.json +0 -218
- package/apps/dashboard/src/i18n/dictionaries/en.json +0 -218
- package/apps/dashboard/src/i18n/index.ts +0 -16
- package/apps/dashboard/src/lib/api/ai.ts +0 -22
- package/apps/dashboard/src/lib/api/auth.ts +0 -13
- package/apps/dashboard/src/lib/api/client.ts +0 -199
- package/apps/dashboard/src/lib/api/cloud.ts +0 -15
- package/apps/dashboard/src/lib/api/deploy.ts +0 -58
- package/apps/dashboard/src/lib/api/domains.ts +0 -13
- package/apps/dashboard/src/lib/api/endpoints.ts +0 -129
- package/apps/dashboard/src/lib/api/github.ts +0 -31
- package/apps/dashboard/src/lib/api/icons.ts +0 -12
- package/apps/dashboard/src/lib/api/index.ts +0 -41
- package/apps/dashboard/src/lib/api/projects.ts +0 -153
- package/apps/dashboard/src/lib/api/sandbox.ts +0 -14
- package/apps/dashboard/src/lib/api/settings.ts +0 -21
- package/apps/dashboard/src/lib/api/system.ts +0 -159
- package/apps/dashboard/src/lib/auth-client.ts +0 -54
- package/apps/dashboard/src/lib/country.ts +0 -25
- package/apps/dashboard/src/lib/server/api.ts +0 -140
- package/apps/dashboard/src/lib/server/session.ts +0 -103
- package/apps/dashboard/src/lib/sseClient.ts +0 -241
- package/apps/dashboard/src/lib/sseMessageProcessors.ts +0 -323
- package/apps/dashboard/src/lib/utils.ts +0 -6
- package/apps/dashboard/src/proxy.ts +0 -46
- package/apps/dashboard/src/styles/Toast.module.css +0 -92
- package/apps/dashboard/src/styles/fonts.css +0 -93
- package/apps/dashboard/src/styles/theme.css +0 -336
- package/apps/dashboard/src/types/research.ts +0 -42
- package/apps/dashboard/src/utils/SSEParser.js +0 -150
- package/apps/dashboard/src/utils/authWindow.ts +0 -143
- package/apps/dashboard/src/utils/codeTheme.ts +0 -127
- package/apps/dashboard/src/utils/colors.json +0 -2810
- package/apps/dashboard/src/utils/date.ts +0 -121
- package/apps/dashboard/src/utils/deployment.ts +0 -128
- package/apps/dashboard/src/utils/deploymentPhaseDetector.ts +0 -232
- package/apps/dashboard/src/utils/extToLang.js +0 -103
- package/apps/dashboard/src/utils/github.ts +0 -62
- package/apps/dashboard/src/utils/icons.js +0 -46
- package/apps/dashboard/src/utils/repoSlug.ts +0 -110
- package/apps/dashboard/src/utils/research-api.ts +0 -163
- package/apps/dashboard/src/utils/suggestions.ts +0 -84
- package/apps/dashboard/src/utils/theme.js +0 -1
- package/apps/dashboard/src/utils/ui-helpers.tsx +0 -30
- package/apps/dashboard/src/utils/upload.js +0 -12
- package/apps/dashboard/tsconfig.json +0 -33
- package/apps/desktop/forge.config.json +0 -36
- package/apps/desktop/package.json +0 -26
- package/apps/desktop/scripts/dev.mjs +0 -58
- package/apps/desktop/src/main/index.ts +0 -675
- package/apps/desktop/src/main/types/desktop.d.ts +0 -33
- package/apps/desktop/src/preload/index.ts +0 -88
- package/apps/desktop/src/renderer/index.html +0 -462
- package/apps/desktop/src/renderer/onboarding.js +0 -511
- package/apps/desktop/src/renderer/styles.css +0 -1139
- package/apps/desktop/tsconfig.json +0 -17
- package/apps/web/.source/browser.ts +0 -13
- package/apps/web/.source/dynamic.ts +0 -8
- package/apps/web/.source/server.ts +0 -22
- package/apps/web/.source/source.config.mjs +0 -20
- package/apps/web/Dockerfile +0 -22
- package/apps/web/content/blog/how-ai-builds-work.mdx +0 -55
- package/apps/web/content/blog/introducing-openship.mdx +0 -46
- package/apps/web/content/blog/self-hosting-cost-breakdown.mdx +0 -59
- package/apps/web/content/docs/_meta.json +0 -14
- package/apps/web/content/docs/api.mdx +0 -98
- package/apps/web/content/docs/cli.mdx +0 -80
- package/apps/web/content/docs/first-deployment.mdx +0 -56
- package/apps/web/content/docs/index.mdx +0 -27
- package/apps/web/content/docs/installation.mdx +0 -65
- package/apps/web/content/docs/quickstart.mdx +0 -45
- package/apps/web/next-env.d.ts +0 -6
- package/apps/web/next.config.mjs +0 -20
- package/apps/web/package.json +0 -33
- package/apps/web/postcss.config.mjs +0 -5
- package/apps/web/public/android-chrome-192x192.png +0 -0
- package/apps/web/public/android-chrome-512x512.png +0 -0
- package/apps/web/public/apple-touch-icon.png +0 -0
- package/apps/web/public/favicon-16x16.png +0 -0
- package/apps/web/public/favicon-32x32.png +0 -0
- package/apps/web/public/favicon.ico +0 -0
- package/apps/web/public/site.webmanifest +0 -1
- package/apps/web/source.config.ts +0 -17
- package/apps/web/src/app/(marketing)/layout.tsx +0 -9
- package/apps/web/src/app/(marketing)/page.tsx +0 -2
- package/apps/web/src/app/(marketing)/pricing/page.tsx +0 -10
- package/apps/web/src/app/blog/[...slug]/page.tsx +0 -247
- package/apps/web/src/app/blog/blog.css +0 -575
- package/apps/web/src/app/blog/layout.tsx +0 -50
- package/apps/web/src/app/blog/page.tsx +0 -235
- package/apps/web/src/app/docs/[[...slug]]/page.tsx +0 -67
- package/apps/web/src/app/docs/layout.tsx +0 -62
- package/apps/web/src/app/docs/toc-theme.css +0 -71
- package/apps/web/src/app/download/page.tsx +0 -396
- package/apps/web/src/app/globals.css +0 -20
- package/apps/web/src/app/layout.tsx +0 -70
- package/apps/web/src/app/page.tsx +0 -51
- package/apps/web/src/app/robots.ts +0 -15
- package/apps/web/src/app/sitemap.ts +0 -35
- package/apps/web/src/components/blog/share-sidebar.tsx +0 -81
- package/apps/web/src/components/blog/writer-sidebar.tsx +0 -81
- package/apps/web/src/components/landing/ai-native.tsx +0 -169
- package/apps/web/src/components/landing/backups.tsx +0 -139
- package/apps/web/src/components/landing/cdn.tsx +0 -109
- package/apps/web/src/components/landing/coming-soon.tsx +0 -180
- package/apps/web/src/components/landing/dark-section.tsx +0 -166
- package/apps/web/src/components/landing/dashboard.tsx +0 -407
- package/apps/web/src/components/landing/developer-experience.tsx +0 -224
- package/apps/web/src/components/landing/dns-domains.tsx +0 -146
- package/apps/web/src/components/landing/download-button.tsx +0 -151
- package/apps/web/src/components/landing/features/ai-visual.tsx +0 -48
- package/apps/web/src/components/landing/features/cloud-visual.tsx +0 -44
- package/apps/web/src/components/landing/features/git-visual.tsx +0 -61
- package/apps/web/src/components/landing/features/index.tsx +0 -642
- package/apps/web/src/components/landing/features/infra-visual.tsx +0 -69
- package/apps/web/src/components/landing/features/rollback-visual.tsx +0 -42
- package/apps/web/src/components/landing/features/ssl-visual.tsx +0 -41
- package/apps/web/src/components/landing/features/stacks-visual.tsx +0 -54
- package/apps/web/src/components/landing/final-cta.tsx +0 -116
- package/apps/web/src/components/landing/footer.tsx +0 -145
- package/apps/web/src/components/landing/hero.tsx +0 -110
- package/apps/web/src/components/landing/how-it-works.tsx +0 -210
- package/apps/web/src/components/landing/index.ts +0 -21
- package/apps/web/src/components/landing/mail-server.tsx +0 -122
- package/apps/web/src/components/landing/navbar.tsx +0 -199
- package/apps/web/src/components/landing/no-lockin.tsx +0 -185
- package/apps/web/src/components/landing/open-source-cta.tsx +0 -151
- package/apps/web/src/components/landing/portability.tsx +0 -190
- package/apps/web/src/components/landing/pricing.tsx +0 -263
- package/apps/web/src/components/landing/scaling.tsx +0 -209
- package/apps/web/src/components/landing/why-openship.tsx +0 -291
- package/apps/web/src/hooks/use-gsap-scroll.ts +0 -158
- package/apps/web/src/hooks/use-platform.ts +0 -86
- package/apps/web/src/lib/source.ts +0 -12
- package/apps/web/src/styles/fonts.css +0 -84
- package/apps/web/src/styles/landing.css +0 -951
- package/apps/web/src/styles/theme.css +0 -227
- package/apps/web/tsconfig.json +0 -16
- package/bun.lock +0 -3260
- package/docker-compose.yml +0 -90
- package/docs/screenshots/.gitkeep +0 -0
- package/docs/screenshots/screen.png +0 -0
- package/openship.code-workspace +0 -7
- package/packages/adapters/docs/ARCHITECTURE.md +0 -160
- package/packages/adapters/docs/BUILD-PIPELINE.md +0 -171
- package/packages/adapters/docs/CLOUD.md +0 -239
- package/packages/adapters/docs/EXECUTOR.md +0 -174
- package/packages/adapters/docs/LOG-STREAMING.md +0 -175
- package/packages/adapters/docs/SYSTEM.md +0 -191
- package/packages/adapters/package.json +0 -32
- package/packages/adapters/src/index.ts +0 -144
- package/packages/adapters/src/infra/cloud.ts +0 -42
- package/packages/adapters/src/infra/index.ts +0 -9
- package/packages/adapters/src/infra/noop.ts +0 -27
- package/packages/adapters/src/infra/traefik.ts +0 -297
- package/packages/adapters/src/infra/types.ts +0 -36
- package/packages/adapters/src/platform.ts +0 -255
- package/packages/adapters/src/runtime/bare.ts +0 -567
- package/packages/adapters/src/runtime/build-pipeline.ts +0 -237
- package/packages/adapters/src/runtime/cloud.ts +0 -791
- package/packages/adapters/src/runtime/deploy-pipeline.ts +0 -146
- package/packages/adapters/src/runtime/docker.ts +0 -443
- package/packages/adapters/src/runtime/index.ts +0 -69
- package/packages/adapters/src/runtime/local-build.ts +0 -112
- package/packages/adapters/src/runtime/transfer.ts +0 -82
- package/packages/adapters/src/runtime/types.ts +0 -138
- package/packages/adapters/src/system/catalog.ts +0 -188
- package/packages/adapters/src/system/checks.ts +0 -228
- package/packages/adapters/src/system/components.ts +0 -45
- package/packages/adapters/src/system/debug.ts +0 -18
- package/packages/adapters/src/system/environment.ts +0 -168
- package/packages/adapters/src/system/errors.ts +0 -34
- package/packages/adapters/src/system/executor.ts +0 -600
- package/packages/adapters/src/system/index.ts +0 -58
- package/packages/adapters/src/system/installer.ts +0 -310
- package/packages/adapters/src/system/setup.ts +0 -442
- package/packages/adapters/src/system/state.ts +0 -96
- package/packages/adapters/src/system/types.ts +0 -116
- package/packages/adapters/src/toolchain/catalog.ts +0 -439
- package/packages/adapters/src/toolchain/checks.ts +0 -181
- package/packages/adapters/src/toolchain/index.ts +0 -38
- package/packages/adapters/src/toolchain/installer.ts +0 -189
- package/packages/adapters/src/toolchain/types.ts +0 -84
- package/packages/adapters/src/types.ts +0 -277
- package/packages/adapters/tsconfig.json +0 -11
- package/packages/core/package.json +0 -27
- package/packages/core/src/constants.ts +0 -71
- package/packages/core/src/errors.ts +0 -49
- package/packages/core/src/index.ts +0 -6
- package/packages/core/src/stacks.ts +0 -778
- package/packages/core/src/system.ts +0 -111
- package/packages/core/src/types.ts +0 -68
- package/packages/core/src/utils.ts +0 -43
- package/packages/core/tsconfig.json +0 -11
- package/packages/db/drizzle/0000_init.sql +0 -231
- package/packages/db/drizzle/0001_add_server_name.sql +0 -1
- package/packages/db/drizzle/meta/_journal.json +0 -20
- package/packages/db/drizzle.config.ts +0 -10
- package/packages/db/package.json +0 -44
- package/packages/db/src/client.ts +0 -119
- package/packages/db/src/index.ts +0 -60
- package/packages/db/src/repos/account.repo.ts +0 -92
- package/packages/db/src/repos/deployment.repo.ts +0 -168
- package/packages/db/src/repos/domain.repo.ts +0 -102
- package/packages/db/src/repos/git-installation.repo.ts +0 -95
- package/packages/db/src/repos/index.ts +0 -43
- package/packages/db/src/repos/instance-settings.repo.ts +0 -43
- package/packages/db/src/repos/project.repo.ts +0 -159
- package/packages/db/src/repos/session.repo.ts +0 -82
- package/packages/db/src/repos/settings.repo.ts +0 -51
- package/packages/db/src/repos/user.repo.ts +0 -94
- package/packages/db/src/schema/auth.ts +0 -56
- package/packages/db/src/schema/deployment.ts +0 -87
- package/packages/db/src/schema/domain.ts +0 -46
- package/packages/db/src/schema/github.ts +0 -24
- package/packages/db/src/schema/index.ts +0 -6
- package/packages/db/src/schema/project.ts +0 -117
- package/packages/db/src/schema/settings.ts +0 -103
- package/packages/db/tsconfig.json +0 -11
- package/packages/ui/package.json +0 -38
- package/packages/ui/src/components/badge.tsx +0 -29
- package/packages/ui/src/components/button.tsx +0 -44
- package/packages/ui/src/components/card.tsx +0 -26
- package/packages/ui/src/components/status-dot.tsx +0 -25
- package/packages/ui/src/globals.css +0 -18
- package/packages/ui/src/index.tsx +0 -8
- package/packages/ui/src/lib/cn.ts +0 -7
- package/packages/ui/tsconfig.json +0 -14
- package/pnpm-workspace.yaml +0 -3
- package/tsconfig.base.json +0 -18
- package/turbo.json +0 -36
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import Link from 'next/link';
|
|
5
|
-
import { Plus, GitBranch, Zap, Globe, Eye, RotateCcw } from 'lucide-react';
|
|
6
|
-
import { useI18n } from '@/components/i18n-provider';
|
|
7
|
-
|
|
8
|
-
const EmptyState: React.FC = () => {
|
|
9
|
-
const { t } = useI18n();
|
|
10
|
-
const emptyState = t.dashboard.pages.projects.emptyState;
|
|
11
|
-
|
|
12
|
-
return (
|
|
13
|
-
<div className="py-16 text-center">
|
|
14
|
-
{/* SVG Illustration - using theme variables */}
|
|
15
|
-
<div className="relative mx-auto w-64 h-44 mb-8">
|
|
16
|
-
<svg className="absolute inset-0 w-full h-full" viewBox="0 0 260 180" fill="none">
|
|
17
|
-
{/* Background card stack effect */}
|
|
18
|
-
<rect x="75" y="45" width="130" height="95" rx="14" fill="var(--th-sf-04)" />
|
|
19
|
-
<rect x="65" y="35" width="130" height="95" rx="14" fill="var(--th-sf-03)" stroke="var(--th-bd-subtle)" strokeWidth="1" />
|
|
20
|
-
<rect x="55" y="25" width="130" height="95" rx="14" fill="var(--th-card-bg)" stroke="var(--th-bd-default)" strokeWidth="1" />
|
|
21
|
-
|
|
22
|
-
{/* Card content - header bar */}
|
|
23
|
-
<rect x="55" y="25" width="130" height="28" rx="14" fill="var(--th-sf-05)" />
|
|
24
|
-
<circle cx="72" cy="39" r="4" fill="#ef4444" fillOpacity="0.6" />
|
|
25
|
-
<circle cx="84" cy="39" r="4" fill="#eab308" fillOpacity="0.6" />
|
|
26
|
-
<circle cx="96" cy="39" r="4" fill="#22c55e" fillOpacity="0.6" />
|
|
27
|
-
|
|
28
|
-
{/* Content placeholder lines */}
|
|
29
|
-
<rect x="70" y="65" width="50" height="5" rx="2.5" fill="var(--th-on-12)" />
|
|
30
|
-
<rect x="70" y="76" width="85" height="4" rx="2" fill="var(--th-on-08)" />
|
|
31
|
-
<rect x="70" y="85" width="65" height="4" rx="2" fill="var(--th-on-08)" />
|
|
32
|
-
|
|
33
|
-
{/* Folder/Project icon */}
|
|
34
|
-
<rect x="70" y="100" width="28" height="22" rx="5" fill="var(--th-on-05)" stroke="var(--th-on-10)" strokeWidth="1" />
|
|
35
|
-
<path d="M74 105h8l2.5 2.5h9.5v11H74V105z" fill="var(--th-on-10)" />
|
|
36
|
-
|
|
37
|
-
{/* Plus button */}
|
|
38
|
-
<circle cx="210" cy="90" r="22" fill="var(--th-on-05)" />
|
|
39
|
-
<circle cx="210" cy="90" r="16" fill="var(--th-card-bg)" stroke="var(--th-on-20)" strokeWidth="2" strokeDasharray="4 3" />
|
|
40
|
-
<path d="M210 82v16M202 90h16" stroke="var(--th-on-40)" strokeWidth="2" strokeLinecap="round" />
|
|
41
|
-
|
|
42
|
-
{/* Decorative elements */}
|
|
43
|
-
<circle cx="30" cy="60" r="4" fill="var(--th-on-10)" />
|
|
44
|
-
<circle cx="40" cy="140" r="6" fill="var(--th-on-08)" />
|
|
45
|
-
<circle cx="230" cy="40" r="3" fill="var(--th-on-12)" />
|
|
46
|
-
<circle cx="245" cy="130" r="5" fill="var(--th-on-06)" />
|
|
47
|
-
|
|
48
|
-
{/* Sparkle accents */}
|
|
49
|
-
<path d="M25 100l2-4 2 4-4-2 4 0-4 2z" fill="var(--th-on-16)" />
|
|
50
|
-
<path d="M220 150l1.5-3 1.5 3-3-1.5 3 0-3 1.5z" fill="var(--th-on-12)" />
|
|
51
|
-
|
|
52
|
-
{/* Connecting line */}
|
|
53
|
-
<path d="M185 95 Q 192 92 195 90" stroke="var(--th-on-12)" strokeWidth="1.5" strokeDasharray="3 3" fill="none" />
|
|
54
|
-
</svg>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<h3 className="text-2xl font-medium text-foreground/80 mb-2" style={{ letterSpacing: "-0.2px" }}>
|
|
58
|
-
{emptyState.title}
|
|
59
|
-
</h3>
|
|
60
|
-
<p className="text-sm text-muted-foreground/70 max-w-sm mx-auto mb-8 leading-relaxed">
|
|
61
|
-
{emptyState.description}
|
|
62
|
-
</p>
|
|
63
|
-
|
|
64
|
-
<div className="flex flex-col sm:flex-row items-center justify-center gap-3 mb-10">
|
|
65
|
-
<Link
|
|
66
|
-
href="/library"
|
|
67
|
-
className="inline-flex items-center gap-2 px-6 py-3 bg-primary text-primary-foreground text-sm font-medium rounded-xl hover:bg-primary/90 transition-all hover:shadow-lg hover:shadow-primary/25 hover:-translate-y-0.5"
|
|
68
|
-
>
|
|
69
|
-
<Plus className="size-4" />
|
|
70
|
-
{emptyState.createProject}
|
|
71
|
-
</Link>
|
|
72
|
-
<Link
|
|
73
|
-
href="/library"
|
|
74
|
-
className="inline-flex items-center gap-2 px-6 py-3 bg-muted/50 text-foreground text-sm font-medium rounded-xl hover:bg-muted transition-colors"
|
|
75
|
-
>
|
|
76
|
-
<GitBranch className="size-4" />
|
|
77
|
-
{emptyState.browseTemplates}
|
|
78
|
-
</Link>
|
|
79
|
-
</div>
|
|
80
|
-
|
|
81
|
-
{/* Feature highlights - Clean minimal cards */}
|
|
82
|
-
<div className="max-w-2xl mx-auto">
|
|
83
|
-
<p className="text-xs text-muted-foreground/60 uppercase tracking-wider mb-4">
|
|
84
|
-
{emptyState.zeroConfig}
|
|
85
|
-
</p>
|
|
86
|
-
<div className="grid grid-cols-2 sm:grid-cols-4 gap-3">
|
|
87
|
-
<div className="bg-card border border-border/50 rounded-xl p-4 text-left">
|
|
88
|
-
<div className="w-8 h-8 rounded-lg bg-muted flex items-center justify-center mb-3">
|
|
89
|
-
<Zap className="size-4 text-muted-foreground" />
|
|
90
|
-
</div>
|
|
91
|
-
<p className="text-sm font-medium text-foreground">{emptyState.instant}</p>
|
|
92
|
-
<p className="text-xs text-muted-foreground mt-0.5">{emptyState.instantDesc}</p>
|
|
93
|
-
</div>
|
|
94
|
-
<div className="bg-card border border-border/50 rounded-xl p-4 text-left">
|
|
95
|
-
<div className="w-8 h-8 rounded-lg bg-muted flex items-center justify-center mb-3">
|
|
96
|
-
<Globe className="size-4 text-muted-foreground" />
|
|
97
|
-
</div>
|
|
98
|
-
<p className="text-sm font-medium text-foreground">{emptyState.global}</p>
|
|
99
|
-
<p className="text-xs text-muted-foreground mt-0.5">{emptyState.globalDesc}</p>
|
|
100
|
-
</div>
|
|
101
|
-
<div className="bg-card border border-border/50 rounded-xl p-4 text-left">
|
|
102
|
-
<div className="w-8 h-8 rounded-lg bg-muted flex items-center justify-center mb-3">
|
|
103
|
-
<Eye className="size-4 text-muted-foreground" />
|
|
104
|
-
</div>
|
|
105
|
-
<p className="text-sm font-medium text-foreground">{emptyState.previews}</p>
|
|
106
|
-
<p className="text-xs text-muted-foreground mt-0.5">{emptyState.previewsDesc}</p>
|
|
107
|
-
</div>
|
|
108
|
-
<div className="bg-card border border-border/50 rounded-xl p-4 text-left">
|
|
109
|
-
<div className="w-8 h-8 rounded-lg bg-muted flex items-center justify-center mb-3">
|
|
110
|
-
<RotateCcw className="size-4 text-muted-foreground" />
|
|
111
|
-
</div>
|
|
112
|
-
<p className="text-sm font-medium text-foreground">{emptyState.rollbacks}</p>
|
|
113
|
-
<p className="text-xs text-muted-foreground mt-0.5">{emptyState.rollbacksDesc}</p>
|
|
114
|
-
</div>
|
|
115
|
-
</div>
|
|
116
|
-
</div>
|
|
117
|
-
|
|
118
|
-
<p className="text-xs text-muted-foreground/60 mt-8">
|
|
119
|
-
{emptyState.commandPalette.replace('{key}', '')}
|
|
120
|
-
<kbd className="px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono">⌘ K</kbd>
|
|
121
|
-
</p>
|
|
122
|
-
</div>
|
|
123
|
-
);
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
export default EmptyState;
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
export const OverviewSkeleton: React.FC = () => {
|
|
6
|
-
return (
|
|
7
|
-
<div className="space-y-6 animate-pulse">
|
|
8
|
-
{/* Header skeleton */}
|
|
9
|
-
<div className="flex justify-between items-start">
|
|
10
|
-
<div className="space-y-2">
|
|
11
|
-
<div className="h-8 w-48 bg-black/5 rounded-lg" />
|
|
12
|
-
<div className="h-4 w-72 bg-black/5 rounded" />
|
|
13
|
-
</div>
|
|
14
|
-
<div className="h-5 w-32 bg-black/5 rounded" />
|
|
15
|
-
</div>
|
|
16
|
-
|
|
17
|
-
{/* Stats grid skeleton */}
|
|
18
|
-
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4">
|
|
19
|
-
{Array(6).fill(0).map((_, i) => (
|
|
20
|
-
<div key={i} className="bg-white rounded-[20px] border border-black/5 p-5">
|
|
21
|
-
<div className="flex items-start justify-between mb-4">
|
|
22
|
-
<div className="w-11 h-11 rounded-xl bg-black/5" />
|
|
23
|
-
</div>
|
|
24
|
-
<div className="space-y-2">
|
|
25
|
-
<div className="h-7 w-20 bg-black/5 rounded" />
|
|
26
|
-
<div className="h-4 w-28 bg-black/5 rounded" />
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
))}
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
{/* Quick links skeleton */}
|
|
33
|
-
<div className="bg-white rounded-[20px] border border-black/5 p-6">
|
|
34
|
-
<div className="flex items-center gap-3 mb-5">
|
|
35
|
-
<div className="w-10 h-10 bg-black/5 rounded-xl" />
|
|
36
|
-
<div className="space-y-2">
|
|
37
|
-
<div className="h-5 w-32 bg-black/5 rounded" />
|
|
38
|
-
<div className="h-3 w-24 bg-black/5 rounded" />
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-3">
|
|
42
|
-
{Array(6).fill(0).map((_, i) => (
|
|
43
|
-
<div key={i} className="flex flex-col items-center p-4 rounded-xl border border-black/5">
|
|
44
|
-
<div className="w-11 h-11 rounded-xl bg-black/5 mb-3" />
|
|
45
|
-
<div className="h-4 w-20 bg-black/5 rounded mb-1" />
|
|
46
|
-
<div className="h-3 w-16 bg-black/5 rounded" />
|
|
47
|
-
</div>
|
|
48
|
-
))}
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
{/* Charts skeleton */}
|
|
53
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
54
|
-
{Array(2).fill(0).map((_, i) => (
|
|
55
|
-
<div key={i} className="bg-white rounded-[20px] border border-black/5 overflow-hidden">
|
|
56
|
-
<div className="px-6 py-4 border-b border-black/5">
|
|
57
|
-
<div className="flex items-center gap-3">
|
|
58
|
-
<div className="w-10 h-10 bg-black/5 rounded-xl" />
|
|
59
|
-
<div className="space-y-2">
|
|
60
|
-
<div className="h-5 w-28 bg-black/5 rounded" />
|
|
61
|
-
<div className="h-4 w-20 bg-black/5 rounded" />
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
<div className="p-6">
|
|
66
|
-
<div className="h-36 bg-black/5 rounded-xl" />
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
))}
|
|
70
|
-
</div>
|
|
71
|
-
|
|
72
|
-
{/* Cards skeleton */}
|
|
73
|
-
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
74
|
-
{Array(4).fill(0).map((_, i) => (
|
|
75
|
-
<div key={i} className="bg-white rounded-[20px] border border-black/5 p-6">
|
|
76
|
-
<div className="flex items-center gap-3 mb-4">
|
|
77
|
-
<div className="w-10 h-10 bg-black/5 rounded-xl" />
|
|
78
|
-
<div className="space-y-2">
|
|
79
|
-
<div className="h-5 w-24 bg-black/5 rounded" />
|
|
80
|
-
<div className="h-3 w-16 bg-black/5 rounded" />
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
<div className="h-24 bg-black/5 rounded-xl" />
|
|
84
|
-
</div>
|
|
85
|
-
))}
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
);
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
export default OverviewSkeleton;
|
|
92
|
-
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import Link from 'next/link';
|
|
5
|
-
import { Wallet, Plus, TrendingUp } from 'lucide-react';
|
|
6
|
-
|
|
7
|
-
interface OverviewHeaderProps {
|
|
8
|
-
userName?: string;
|
|
9
|
-
creditsBalance?: string | number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const OverviewHeader: React.FC<OverviewHeaderProps> = ({
|
|
13
|
-
userName,
|
|
14
|
-
creditsBalance = 0,
|
|
15
|
-
}) => {
|
|
16
|
-
const getGreeting = () => {
|
|
17
|
-
const hour = new Date().getHours();
|
|
18
|
-
if (hour < 12) return 'Good morning';
|
|
19
|
-
if (hour < 18) return 'Good afternoon';
|
|
20
|
-
return 'Good evening';
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const formatCredits = (value: string | number): string => {
|
|
24
|
-
// If already formatted string (with K/M), just add $
|
|
25
|
-
if (typeof value === 'string') {
|
|
26
|
-
return `$${value}`;
|
|
27
|
-
}
|
|
28
|
-
// If number, format with 2 decimals
|
|
29
|
-
return `$${value.toFixed(2)}`;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
return (
|
|
33
|
-
<div className="mb-8">
|
|
34
|
-
<div className="flex flex-col lg:flex-row items-start lg:items-center justify-between gap-6">
|
|
35
|
-
{/* Left: Greeting */}
|
|
36
|
-
<div>
|
|
37
|
-
<h1 className="text-3xl font-bold text-black mb-1.5" style={{ letterSpacing: '-0.5px' }}>
|
|
38
|
-
{userName ? `${getGreeting()}, ${userName}` : 'Overview'}
|
|
39
|
-
</h1>
|
|
40
|
-
<p className="text-sm text-black/50">
|
|
41
|
-
Monitor your platform usage and manage resources
|
|
42
|
-
</p>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
{/* Right: Credits Card */}
|
|
46
|
-
<div className="bg-white rounded-[20px] border border-black/5 p-5 min-w-[320px]">
|
|
47
|
-
<div className="flex items-center justify-between">
|
|
48
|
-
<div className="flex items-center gap-3">
|
|
49
|
-
<div className="w-11 h-11 bg-black/[0.04] rounded-xl flex items-center justify-center">
|
|
50
|
-
<Wallet className="w-5 h-5 text-black/60" />
|
|
51
|
-
</div>
|
|
52
|
-
<div>
|
|
53
|
-
<p className="text-xs text-black/40 mb-0.5">Credits Balance</p>
|
|
54
|
-
<span className="text-2xl font-bold text-black">
|
|
55
|
-
{formatCredits(creditsBalance)}
|
|
56
|
-
</span>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<Link
|
|
61
|
-
href="/billing"
|
|
62
|
-
className="flex items-center gap-1.5 px-4 py-2.5 bg-black text-white text-sm font-medium rounded-xl hover:bg-black/80 transition-colors ml-4"
|
|
63
|
-
>
|
|
64
|
-
<Plus className="w-4 h-4" />
|
|
65
|
-
Top Up
|
|
66
|
-
</Link>
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
</div>
|
|
70
|
-
</div>
|
|
71
|
-
);
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
export default OverviewHeader;
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { TrendingUp, TrendingDown, Bot, Activity } from 'lucide-react';
|
|
5
|
-
import { Doughnut } from 'react-chartjs-2';
|
|
6
|
-
import {
|
|
7
|
-
Chart as ChartJS,
|
|
8
|
-
ArcElement,
|
|
9
|
-
Tooltip,
|
|
10
|
-
Legend,
|
|
11
|
-
} from 'chart.js';
|
|
12
|
-
import { DailyMetric, TimePeriod } from './types';
|
|
13
|
-
|
|
14
|
-
ChartJS.register(ArcElement, Tooltip, Legend);
|
|
15
|
-
|
|
16
|
-
interface OverviewHeroChartProps {
|
|
17
|
-
tokenData: DailyMetric[];
|
|
18
|
-
requestData: DailyMetric[];
|
|
19
|
-
agentData: DailyMetric[];
|
|
20
|
-
totalTokens: number;
|
|
21
|
-
totalRequests: number;
|
|
22
|
-
totalAgents: number;
|
|
23
|
-
productionAgents: number;
|
|
24
|
-
testingAgents: number;
|
|
25
|
-
tokenTrend: number;
|
|
26
|
-
requestTrend: number;
|
|
27
|
-
agentTrend: number;
|
|
28
|
-
isLoading?: boolean;
|
|
29
|
-
period?: TimePeriod;
|
|
30
|
-
onPeriodChange?: (period: TimePeriod) => void;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const OverviewHeroChart: React.FC<OverviewHeroChartProps> = ({
|
|
34
|
-
tokenData,
|
|
35
|
-
requestData,
|
|
36
|
-
totalTokens,
|
|
37
|
-
totalRequests,
|
|
38
|
-
totalAgents,
|
|
39
|
-
productionAgents,
|
|
40
|
-
testingAgents,
|
|
41
|
-
tokenTrend,
|
|
42
|
-
requestTrend,
|
|
43
|
-
agentTrend,
|
|
44
|
-
isLoading = false,
|
|
45
|
-
period = 7,
|
|
46
|
-
onPeriodChange,
|
|
47
|
-
}) => {
|
|
48
|
-
const formatNumber = (num: number): string => {
|
|
49
|
-
if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;
|
|
50
|
-
if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;
|
|
51
|
-
return num.toLocaleString();
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
if (isLoading) {
|
|
55
|
-
return (
|
|
56
|
-
<div className="grid grid-cols-1 lg:grid-cols-4 gap-6">
|
|
57
|
-
{/* Main Chart Skeleton */}
|
|
58
|
-
<div className="lg:col-span-3 bg-white rounded-[24px] border border-black/5 overflow-hidden">
|
|
59
|
-
{/* Header */}
|
|
60
|
-
<div className="px-6 py-4 border-b border-black/5 flex items-center justify-between">
|
|
61
|
-
<div className="flex items-center gap-3">
|
|
62
|
-
<div className="w-10 h-10 bg-black/5 rounded-xl animate-pulse" />
|
|
63
|
-
<div className="space-y-2">
|
|
64
|
-
<div className="h-4 w-32 bg-black/5 rounded animate-pulse" />
|
|
65
|
-
<div className="h-3 w-24 bg-black/5 rounded animate-pulse" />
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
68
|
-
<div className="h-8 w-32 bg-black/5 rounded-full animate-pulse" />
|
|
69
|
-
</div>
|
|
70
|
-
{/* Chart Area */}
|
|
71
|
-
<div className="px-6 pt-4 pb-3">
|
|
72
|
-
<div className="h-28 bg-black/5 rounded-xl animate-pulse mb-4" />
|
|
73
|
-
</div>
|
|
74
|
-
{/* Footer */}
|
|
75
|
-
<div className="px-6 py-3.5 bg-white border-t border-black/5">
|
|
76
|
-
<div className="flex items-center justify-between">
|
|
77
|
-
<div className="flex items-center gap-6">
|
|
78
|
-
<div className="h-4 w-32 bg-black/5 rounded animate-pulse" />
|
|
79
|
-
<div className="h-4 w-32 bg-black/5 rounded animate-pulse" />
|
|
80
|
-
</div>
|
|
81
|
-
<div className="h-3 w-20 bg-black/5 rounded animate-pulse" />
|
|
82
|
-
</div>
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
|
|
86
|
-
{/* Agents Card Skeleton */}
|
|
87
|
-
<div className="bg-white rounded-[24px] border border-black/5 p-5 flex flex-col">
|
|
88
|
-
<div className="flex items-center justify-between mb-3">
|
|
89
|
-
<div className="flex items-center gap-2.5">
|
|
90
|
-
<div className="w-9 h-9 bg-black/5 rounded-lg animate-pulse" />
|
|
91
|
-
<div className="space-y-1.5">
|
|
92
|
-
<div className="h-3.5 w-16 bg-black/5 rounded animate-pulse" />
|
|
93
|
-
<div className="h-2.5 w-20 bg-black/5 rounded animate-pulse" />
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
<div className="flex-1 flex items-center justify-center py-2">
|
|
98
|
-
<div className="w-[110px] h-[110px] rounded-full bg-black/5 animate-pulse" />
|
|
99
|
-
</div>
|
|
100
|
-
<div className="pt-3 border-t border-black/5">
|
|
101
|
-
<div className="flex items-center justify-center gap-5">
|
|
102
|
-
<div className="h-3 w-20 bg-black/5 rounded animate-pulse" />
|
|
103
|
-
<div className="h-3 w-20 bg-black/5 rounded animate-pulse" />
|
|
104
|
-
</div>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const hasTokenData = tokenData.length > 0 && tokenData.some(d => d.value > 0);
|
|
112
|
-
const hasRequestData = requestData.length > 0 && requestData.some(d => d.value > 0);
|
|
113
|
-
|
|
114
|
-
// Main combined area chart
|
|
115
|
-
const renderMainChart = () => {
|
|
116
|
-
const maxTokens = Math.max(...tokenData.map(d => d.value), 1);
|
|
117
|
-
const maxRequests = Math.max(...requestData.map(d => d.value), 1);
|
|
118
|
-
|
|
119
|
-
const tokenPoints = tokenData.map((day, index) => {
|
|
120
|
-
const height = hasTokenData && maxTokens > 0 ? (day.value / maxTokens) * 75 : 0;
|
|
121
|
-
const x = tokenData.length > 1 ? (index / (tokenData.length - 1)) * 100 : 50;
|
|
122
|
-
const y = hasTokenData ? (92 - height) : 90;
|
|
123
|
-
return `${x},${y}`;
|
|
124
|
-
}).join(' ');
|
|
125
|
-
|
|
126
|
-
const requestPoints = requestData.map((day, index) => {
|
|
127
|
-
const height = hasRequestData && maxRequests > 0 ? (day.value / maxRequests) * 60 : 0;
|
|
128
|
-
const x = requestData.length > 1 ? (index / (requestData.length - 1)) * 100 : 50;
|
|
129
|
-
const y = hasRequestData ? (92 - height) : 88;
|
|
130
|
-
return `${x},${y}`;
|
|
131
|
-
}).join(' ');
|
|
132
|
-
|
|
133
|
-
return (
|
|
134
|
-
<svg className="w-full h-full" viewBox="0 0 100 100" preserveAspectRatio="none">
|
|
135
|
-
<defs>
|
|
136
|
-
<linearGradient id="tokenAreaGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
137
|
-
<stop offset="0%" stopColor="#8b5cf6" stopOpacity={hasTokenData ? "0.2" : "0.03"} />
|
|
138
|
-
<stop offset="100%" stopColor="#8b5cf6" stopOpacity="0" />
|
|
139
|
-
</linearGradient>
|
|
140
|
-
<linearGradient id="requestAreaGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
141
|
-
<stop offset="0%" stopColor="#06b6d4" stopOpacity={hasRequestData ? "0.15" : "0.02"} />
|
|
142
|
-
<stop offset="100%" stopColor="#06b6d4" stopOpacity="0" />
|
|
143
|
-
</linearGradient>
|
|
144
|
-
</defs>
|
|
145
|
-
|
|
146
|
-
{/* Token area - purple */}
|
|
147
|
-
<polygon points={`0,100 ${tokenPoints} 100,100`} fill="url(#tokenAreaGradient)" />
|
|
148
|
-
<polyline
|
|
149
|
-
points={tokenPoints}
|
|
150
|
-
fill="none"
|
|
151
|
-
stroke="#8b5cf6"
|
|
152
|
-
strokeOpacity={hasTokenData ? "1" : "0.2"}
|
|
153
|
-
strokeWidth="2.5"
|
|
154
|
-
vectorEffect="non-scaling-stroke"
|
|
155
|
-
strokeLinecap="round"
|
|
156
|
-
strokeLinejoin="round"
|
|
157
|
-
/>
|
|
158
|
-
|
|
159
|
-
{/* Request area - cyan */}
|
|
160
|
-
<polygon points={`0,100 ${requestPoints} 100,100`} fill="url(#requestAreaGradient)" />
|
|
161
|
-
<polyline
|
|
162
|
-
points={requestPoints}
|
|
163
|
-
fill="none"
|
|
164
|
-
stroke="#06b6d4"
|
|
165
|
-
strokeOpacity={hasRequestData ? "1" : "0.2"}
|
|
166
|
-
strokeWidth="2"
|
|
167
|
-
vectorEffect="non-scaling-stroke"
|
|
168
|
-
strokeLinecap="round"
|
|
169
|
-
strokeLinejoin="round"
|
|
170
|
-
strokeDasharray="6 4"
|
|
171
|
-
/>
|
|
172
|
-
</svg>
|
|
173
|
-
);
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
// Chart.js doughnut for agents
|
|
177
|
-
const doughnutData = {
|
|
178
|
-
labels: ['Production', 'Testing'],
|
|
179
|
-
datasets: [
|
|
180
|
-
{
|
|
181
|
-
data: [productionAgents, testingAgents],
|
|
182
|
-
backgroundColor: ['#06b6d4', '#8b5cf6'],
|
|
183
|
-
hoverBackgroundColor: ['#0891b2', '#7c3aed'],
|
|
184
|
-
borderWidth: 0,
|
|
185
|
-
cutout: '70%',
|
|
186
|
-
},
|
|
187
|
-
],
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
const doughnutOptions = {
|
|
191
|
-
responsive: true,
|
|
192
|
-
maintainAspectRatio: false,
|
|
193
|
-
plugins: {
|
|
194
|
-
legend: {
|
|
195
|
-
display: false,
|
|
196
|
-
},
|
|
197
|
-
tooltip: {
|
|
198
|
-
backgroundColor: '#1e293b',
|
|
199
|
-
titleFont: { size: 12, weight: 500 as const },
|
|
200
|
-
bodyFont: { size: 11 },
|
|
201
|
-
padding: 10,
|
|
202
|
-
cornerRadius: 8,
|
|
203
|
-
displayColors: true,
|
|
204
|
-
boxWidth: 8,
|
|
205
|
-
boxHeight: 8,
|
|
206
|
-
boxPadding: 4,
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
const periodOptions: { value: TimePeriod; label: string }[] = [
|
|
212
|
-
{ value: 7, label: '7d' },
|
|
213
|
-
{ value: 14, label: '14d' },
|
|
214
|
-
{ value: 30, label: '30d' },
|
|
215
|
-
];
|
|
216
|
-
|
|
217
|
-
return (
|
|
218
|
-
<div className="grid grid-cols-1 lg:grid-cols-4 gap-6">
|
|
219
|
-
{/* Main Chart */}
|
|
220
|
-
<div className="lg:col-span-3 bg-white rounded-[24px] border border-black/5 overflow-hidden flex flex-col">
|
|
221
|
-
{/* Header */}
|
|
222
|
-
<div className="px-6 py-4 border-b border-black/5">
|
|
223
|
-
<div className="flex items-center justify-between">
|
|
224
|
-
<div className="flex items-center gap-3">
|
|
225
|
-
<div className="w-10 h-10 bg-purple-100 rounded-xl flex items-center justify-center">
|
|
226
|
-
<Activity className="w-5 h-5 text-purple-600" />
|
|
227
|
-
</div>
|
|
228
|
-
<div>
|
|
229
|
-
<h3 className="font-semibold text-black">Platform Activity</h3>
|
|
230
|
-
<p className="text-xs text-black/40">Token usage & API requests</p>
|
|
231
|
-
</div>
|
|
232
|
-
</div>
|
|
233
|
-
|
|
234
|
-
{onPeriodChange && (
|
|
235
|
-
<div className="flex items-center gap-1 bg-black/[0.03] rounded-full p-1">
|
|
236
|
-
{periodOptions.map((option) => (
|
|
237
|
-
<button
|
|
238
|
-
key={option.value}
|
|
239
|
-
onClick={() => onPeriodChange(option.value)}
|
|
240
|
-
className={`px-3 py-1.5 text-xs font-medium rounded-full transition-all ${
|
|
241
|
-
period === option.value
|
|
242
|
-
? 'bg-white text-black shadow-sm'
|
|
243
|
-
: 'text-black/50 hover:text-black'
|
|
244
|
-
}`}
|
|
245
|
-
>
|
|
246
|
-
{option.label}
|
|
247
|
-
</button>
|
|
248
|
-
))}
|
|
249
|
-
</div>
|
|
250
|
-
)}
|
|
251
|
-
</div>
|
|
252
|
-
</div>
|
|
253
|
-
|
|
254
|
-
{/* Chart */}
|
|
255
|
-
<div className="px-6 pt-4 pb-3 flex-1">
|
|
256
|
-
<div className="h-28">
|
|
257
|
-
{renderMainChart()}
|
|
258
|
-
</div>
|
|
259
|
-
</div>
|
|
260
|
-
|
|
261
|
-
{/* Stats Row */}
|
|
262
|
-
<div className="px-6 py-3.5 bg-white border-t border-black/5">
|
|
263
|
-
<div className="flex items-center justify-between">
|
|
264
|
-
<div className="flex items-center gap-6">
|
|
265
|
-
<div className="flex items-center gap-2">
|
|
266
|
-
<div className="w-2 h-2 rounded-full bg-purple-500" />
|
|
267
|
-
<span className="text-xs text-black/50">Tokens</span>
|
|
268
|
-
<span className="text-sm font-semibold text-black">{formatNumber(totalTokens)}</span>
|
|
269
|
-
{tokenTrend !== 0 && (
|
|
270
|
-
<span className={`flex items-center text-xs font-medium ${tokenTrend > 0 ? 'text-emerald-600' : 'text-rose-500'}`}>
|
|
271
|
-
{tokenTrend > 0 ? <TrendingUp className="w-3 h-3" /> : <TrendingDown className="w-3 h-3" />}
|
|
272
|
-
{Math.abs(tokenTrend)}%
|
|
273
|
-
</span>
|
|
274
|
-
)}
|
|
275
|
-
</div>
|
|
276
|
-
|
|
277
|
-
<div className="flex items-center gap-2">
|
|
278
|
-
<div className="w-2 h-2 rounded-full bg-cyan-500" />
|
|
279
|
-
<span className="text-xs text-black/50">Requests</span>
|
|
280
|
-
<span className="text-sm font-semibold text-black">{formatNumber(totalRequests)}</span>
|
|
281
|
-
{requestTrend !== 0 && (
|
|
282
|
-
<span className={`flex items-center text-xs font-medium ${requestTrend > 0 ? 'text-emerald-600' : 'text-rose-500'}`}>
|
|
283
|
-
{requestTrend > 0 ? <TrendingUp className="w-3 h-3" /> : <TrendingDown className="w-3 h-3" />}
|
|
284
|
-
{Math.abs(requestTrend)}%
|
|
285
|
-
</span>
|
|
286
|
-
)}
|
|
287
|
-
</div>
|
|
288
|
-
</div>
|
|
289
|
-
|
|
290
|
-
<span className="text-xs text-black/30">Last {period} days</span>
|
|
291
|
-
</div>
|
|
292
|
-
</div>
|
|
293
|
-
</div>
|
|
294
|
-
|
|
295
|
-
{/* Agents Card */}
|
|
296
|
-
<div className="bg-white rounded-[24px] border border-black/5 p-5 flex flex-col">
|
|
297
|
-
{/* Header */}
|
|
298
|
-
<div className="flex items-center justify-between mb-3">
|
|
299
|
-
<div className="flex items-center gap-2.5">
|
|
300
|
-
<div className="w-9 h-9 bg-cyan-100 rounded-lg flex items-center justify-center">
|
|
301
|
-
<Bot className="w-4 h-4 text-cyan-600" />
|
|
302
|
-
</div>
|
|
303
|
-
<div>
|
|
304
|
-
<h4 className="text-sm font-semibold text-black">Agents</h4>
|
|
305
|
-
<p className="text-[11px] text-black/40">Environments</p>
|
|
306
|
-
</div>
|
|
307
|
-
</div>
|
|
308
|
-
{agentTrend !== 0 && (
|
|
309
|
-
<span className={`flex items-center text-xs font-medium px-2 py-1 rounded-full ${agentTrend > 0 ? 'bg-emerald-50 text-emerald-600' : 'bg-rose-50 text-rose-500'}`}>
|
|
310
|
-
{agentTrend > 0 ? <TrendingUp className="w-3 h-3 mr-0.5" /> : <TrendingDown className="w-3 h-3 mr-0.5" />}
|
|
311
|
-
{Math.abs(agentTrend)}%
|
|
312
|
-
</span>
|
|
313
|
-
)}
|
|
314
|
-
</div>
|
|
315
|
-
|
|
316
|
-
{/* Chart */}
|
|
317
|
-
<div className="flex-1 flex items-center justify-center relative py-2">
|
|
318
|
-
<div className="w-[110px] h-[110px]">
|
|
319
|
-
<Doughnut data={doughnutData} options={doughnutOptions} />
|
|
320
|
-
</div>
|
|
321
|
-
{/* Center label */}
|
|
322
|
-
<div className="absolute inset-0 flex flex-col items-center justify-center pointer-events-none">
|
|
323
|
-
<span className="text-2xl font-bold text-black">{totalAgents}</span>
|
|
324
|
-
<span className="text-[10px] text-black/40 uppercase tracking-wide">Total</span>
|
|
325
|
-
</div>
|
|
326
|
-
</div>
|
|
327
|
-
|
|
328
|
-
{/* Legend */}
|
|
329
|
-
<div className="flex items-center justify-center gap-4 pt-3 border-t border-black/5">
|
|
330
|
-
<div className="flex items-center gap-1.5">
|
|
331
|
-
<div className="w-2 h-2 rounded-full bg-cyan-500" />
|
|
332
|
-
<span className="text-xs text-black/60">{productionAgents} prod</span>
|
|
333
|
-
</div>
|
|
334
|
-
<div className="flex items-center gap-1.5">
|
|
335
|
-
<div className="w-2 h-2 rounded-full bg-purple-500" />
|
|
336
|
-
<span className="text-xs text-black/60">{testingAgents} test</span>
|
|
337
|
-
</div>
|
|
338
|
-
</div>
|
|
339
|
-
</div>
|
|
340
|
-
</div>
|
|
341
|
-
);
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
export default OverviewHeroChart;
|