@calltelemetry/cli 0.6.13 → 0.7.2
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/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +0 -42
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/db.d.ts.map +1 -1
- package/dist/commands/db.js +53 -0
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/loadtest.d.ts.map +1 -1
- package/dist/commands/loadtest.js +214 -1
- package/dist/commands/loadtest.js.map +1 -1
- package/dist/commands/otel.d.ts +3 -0
- package/dist/commands/otel.d.ts.map +1 -0
- package/dist/commands/otel.js +89 -0
- package/dist/commands/otel.js.map +1 -0
- package/dist/commands/seed.d.ts +3 -0
- package/dist/commands/seed.d.ts.map +1 -0
- package/dist/commands/seed.js +106 -0
- package/dist/commands/seed.js.map +1 -0
- package/dist/commands/storage.d.ts +3 -0
- package/dist/commands/storage.d.ts.map +1 -0
- package/dist/commands/storage.js +66 -0
- package/dist/commands/storage.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/migration-004-systemd-docker.js +3 -3
- package/dist/lib/migration-004-systemd-docker.js.map +1 -1
- package/dist/lib/migration-005-ssh-keys.js +3 -3
- package/dist/lib/migration-005-ssh-keys.js.map +1 -1
- package/dist/lib/migration-013-grafana-password.d.ts +15 -0
- package/dist/lib/migration-013-grafana-password.d.ts.map +1 -0
- package/dist/lib/migration-013-grafana-password.js +80 -0
- package/dist/lib/migration-013-grafana-password.js.map +1 -0
- package/dist/lib/migration-014-docker-firewall-backend.d.ts +16 -0
- package/dist/lib/migration-014-docker-firewall-backend.d.ts.map +1 -0
- package/dist/lib/migration-014-docker-firewall-backend.js +72 -0
- package/dist/lib/migration-014-docker-firewall-backend.js.map +1 -0
- package/dist/lib/migrations.d.ts +8 -0
- package/dist/lib/migrations.d.ts.map +1 -1
- package/dist/lib/migrations.js +52 -0
- package/dist/lib/migrations.js.map +1 -1
- package/dist/lib/otel.d.ts +7 -7
- package/dist/lib/otel.d.ts.map +1 -1
- package/dist/lib/otel.js +18 -25
- package/dist/lib/otel.js.map +1 -1
- package/dist/lib/prefs.d.ts +1 -0
- package/dist/lib/prefs.d.ts.map +1 -1
- package/dist/lib/prefs.js +1 -0
- package/dist/lib/prefs.js.map +1 -1
- package/dist/lib/prompts.d.ts +3 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +39 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/rpc-scripts.d.ts +4 -0
- package/dist/lib/rpc-scripts.d.ts.map +1 -1
- package/dist/lib/rpc-scripts.js +235 -0
- package/dist/lib/rpc-scripts.js.map +1 -1
- package/dist/lib/secrets.d.ts +2 -2
- package/dist/lib/secrets.d.ts.map +1 -1
- package/dist/lib/secrets.js +2 -1
- package/dist/lib/secrets.js.map +1 -1
- package/dist/lib/seed/connection.d.ts +5 -0
- package/dist/lib/seed/connection.d.ts.map +1 -0
- package/dist/lib/seed/connection.js +168 -0
- package/dist/lib/seed/connection.js.map +1 -0
- package/dist/lib/seed/copy.d.ts +4 -0
- package/dist/lib/seed/copy.d.ts.map +1 -0
- package/dist/lib/seed/copy.js +74 -0
- package/dist/lib/seed/copy.js.map +1 -0
- package/dist/lib/seed/dashboard-templates.d.ts +22 -0
- package/dist/lib/seed/dashboard-templates.d.ts.map +1 -0
- package/dist/lib/seed/dashboard-templates.js +268 -0
- package/dist/lib/seed/dashboard-templates.js.map +1 -0
- package/dist/lib/seed/families.d.ts +5 -0
- package/dist/lib/seed/families.d.ts.map +1 -0
- package/dist/lib/seed/families.js +1541 -0
- package/dist/lib/seed/families.js.map +1 -0
- package/dist/lib/seed/index.d.ts +12 -0
- package/dist/lib/seed/index.d.ts.map +1 -0
- package/dist/lib/seed/index.js +327 -0
- package/dist/lib/seed/index.js.map +1 -0
- package/dist/lib/seed/presets.d.ts +5 -0
- package/dist/lib/seed/presets.d.ts.map +1 -0
- package/dist/lib/seed/presets.js +114 -0
- package/dist/lib/seed/presets.js.map +1 -0
- package/dist/lib/seed/schema/columns.d.ts +35 -0
- package/dist/lib/seed/schema/columns.d.ts.map +1 -0
- package/dist/lib/seed/schema/columns.js +497 -0
- package/dist/lib/seed/schema/columns.js.map +1 -0
- package/dist/lib/seed/schema/fingerprint.d.ts +2 -0
- package/dist/lib/seed/schema/fingerprint.d.ts.map +1 -0
- package/dist/lib/seed/schema/fingerprint.js +4 -0
- package/dist/lib/seed/schema/fingerprint.js.map +1 -0
- package/dist/lib/seed/schema/index.d.ts +4 -0
- package/dist/lib/seed/schema/index.d.ts.map +1 -0
- package/dist/lib/seed/schema/index.js +6 -0
- package/dist/lib/seed/schema/index.js.map +1 -0
- package/dist/lib/seed/schema/spec.d.ts +8 -0
- package/dist/lib/seed/schema/spec.d.ts.map +1 -0
- package/dist/lib/seed/schema/spec.js +655 -0
- package/dist/lib/seed/schema/spec.js.map +1 -0
- package/dist/lib/seed/schema/tables.d.ts +132 -0
- package/dist/lib/seed/schema/tables.d.ts.map +1 -0
- package/dist/lib/seed/schema/tables.js +37 -0
- package/dist/lib/seed/schema/tables.js.map +1 -0
- package/dist/lib/seed/store.d.ts +26 -0
- package/dist/lib/seed/store.d.ts.map +1 -0
- package/dist/lib/seed/store.js +111 -0
- package/dist/lib/seed/store.js.map +1 -0
- package/dist/lib/seed/types.d.ts +71 -0
- package/dist/lib/seed/types.d.ts.map +1 -0
- package/dist/lib/seed/types.js +2 -0
- package/dist/lib/seed/types.js.map +1 -0
- package/dist/lib/storage.d.ts +4 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +36 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/update-steps.d.ts.map +1 -1
- package/dist/lib/update-steps.js +15 -0
- package/dist/lib/update-steps.js.map +1 -1
- package/dist/lib/update.d.ts.map +1 -1
- package/dist/lib/update.js +28 -2
- package/dist/lib/update.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/xcc-loadtest-types.d.ts +232 -0
- package/dist/lib/xcc-loadtest-types.d.ts.map +1 -0
- package/dist/lib/xcc-loadtest-types.js +2 -0
- package/dist/lib/xcc-loadtest-types.js.map +1 -0
- package/dist/lib/xcc-loadtest.d.ts +4 -0
- package/dist/lib/xcc-loadtest.d.ts.map +1 -0
- package/dist/lib/xcc-loadtest.js +616 -0
- package/dist/lib/xcc-loadtest.js.map +1 -0
- package/dist/lib/xcc-overlay.d.ts +3 -0
- package/dist/lib/xcc-overlay.d.ts.map +1 -0
- package/dist/lib/xcc-overlay.js +74 -0
- package/dist/lib/xcc-overlay.js.map +1 -0
- package/dist/lib/xcc-scenarios.d.ts +8 -0
- package/dist/lib/xcc-scenarios.d.ts.map +1 -0
- package/dist/lib/xcc-scenarios.js +129 -0
- package/dist/lib/xcc-scenarios.js.map +1 -0
- package/dist/lib/xcc-xml.d.ts +18 -0
- package/dist/lib/xcc-xml.d.ts.map +1 -0
- package/dist/lib/xcc-xml.js +210 -0
- package/dist/lib/xcc-xml.js.map +1 -0
- package/dist/shell/commands/appliance-migrations.d.ts +7 -0
- package/dist/shell/commands/appliance-migrations.d.ts.map +1 -0
- package/dist/shell/commands/appliance-migrations.js +128 -0
- package/dist/shell/commands/appliance-migrations.js.map +1 -0
- package/dist/shell/commands/appliance-performance.js +6 -6
- package/dist/shell/commands/appliance-performance.js.map +1 -1
- package/dist/shell/commands/config.d.ts.map +1 -1
- package/dist/shell/commands/config.js +6 -5
- package/dist/shell/commands/config.js.map +1 -1
- package/dist/shell/commands/connect.d.ts.map +1 -1
- package/dist/shell/commands/connect.js +3 -2
- package/dist/shell/commands/connect.js.map +1 -1
- package/dist/shell/commands/db.d.ts.map +1 -1
- package/dist/shell/commands/db.js +5 -4
- package/dist/shell/commands/db.js.map +1 -1
- package/dist/shell/commands/debug.d.ts.map +1 -1
- package/dist/shell/commands/debug.js +5 -4
- package/dist/shell/commands/debug.js.map +1 -1
- package/dist/shell/commands/diag.js +10 -10
- package/dist/shell/commands/diag.js.map +1 -1
- package/dist/shell/commands/registry.d.ts.map +1 -1
- package/dist/shell/commands/registry.js +56 -1
- package/dist/shell/commands/registry.js.map +1 -1
- package/dist/shell/commands/secrets.d.ts.map +1 -1
- package/dist/shell/commands/secrets.js +2 -1
- package/dist/shell/commands/secrets.js.map +1 -1
- package/dist/shell/commands/seed.d.ts +9 -0
- package/dist/shell/commands/seed.d.ts.map +1 -0
- package/dist/shell/commands/seed.js +197 -0
- package/dist/shell/commands/seed.js.map +1 -0
- package/dist/shell/commands/services.d.ts.map +1 -1
- package/dist/shell/commands/services.js +5 -4
- package/dist/shell/commands/services.js.map +1 -1
- package/dist/shell/commands/test.d.ts.map +1 -1
- package/dist/shell/commands/test.js +3 -2
- package/dist/shell/commands/test.js.map +1 -1
- package/dist/shell/commands/users.d.ts.map +1 -1
- package/dist/shell/commands/users.js +5 -39
- package/dist/shell/commands/users.js.map +1 -1
- package/dist/shell/network-onboarding.d.ts.map +1 -1
- package/dist/shell/network-onboarding.js +11 -45
- package/dist/shell/network-onboarding.js.map +1 -1
- package/dist/ui/components/ActionBar.d.ts +13 -0
- package/dist/ui/components/ActionBar.d.ts.map +1 -0
- package/dist/ui/components/ActionBar.js +7 -0
- package/dist/ui/components/ActionBar.js.map +1 -0
- package/dist/ui/components/AppShell.d.ts +6 -1
- package/dist/ui/components/AppShell.d.ts.map +1 -1
- package/dist/ui/components/AppShell.js +32 -10
- package/dist/ui/components/AppShell.js.map +1 -1
- package/dist/ui/components/DashboardBlock.d.ts +11 -0
- package/dist/ui/components/DashboardBlock.d.ts.map +1 -0
- package/dist/ui/components/DashboardBlock.js +6 -0
- package/dist/ui/components/DashboardBlock.js.map +1 -0
- package/dist/ui/components/DataTable.d.ts +6 -1
- package/dist/ui/components/DataTable.d.ts.map +1 -1
- package/dist/ui/components/DataTable.js +71 -7
- package/dist/ui/components/DataTable.js.map +1 -1
- package/dist/ui/components/ErrorBoundary.d.ts +1 -1
- package/dist/ui/components/FieldList.d.ts +24 -0
- package/dist/ui/components/FieldList.d.ts.map +1 -0
- package/dist/ui/components/FieldList.js +67 -0
- package/dist/ui/components/FieldList.js.map +1 -0
- package/dist/ui/components/KeyValue.d.ts +4 -2
- package/dist/ui/components/KeyValue.d.ts.map +1 -1
- package/dist/ui/components/KeyValue.js +4 -2
- package/dist/ui/components/KeyValue.js.map +1 -1
- package/dist/ui/components/KeyboardHint.d.ts +10 -0
- package/dist/ui/components/KeyboardHint.d.ts.map +1 -0
- package/dist/ui/components/KeyboardHint.js +6 -0
- package/dist/ui/components/KeyboardHint.js.map +1 -0
- package/dist/ui/components/MenuList.d.ts +10 -0
- package/dist/ui/components/MenuList.d.ts.map +1 -0
- package/dist/ui/components/MenuList.js +7 -0
- package/dist/ui/components/MenuList.js.map +1 -0
- package/dist/ui/components/MetricsFooter.d.ts +10 -7
- package/dist/ui/components/MetricsFooter.d.ts.map +1 -1
- package/dist/ui/components/MetricsFooter.js +16 -3
- package/dist/ui/components/MetricsFooter.js.map +1 -1
- package/dist/ui/components/PaneSection.d.ts +9 -0
- package/dist/ui/components/PaneSection.d.ts.map +1 -0
- package/dist/ui/components/PaneSection.js +6 -0
- package/dist/ui/components/PaneSection.js.map +1 -0
- package/dist/ui/components/PanelState.d.ts +8 -0
- package/dist/ui/components/PanelState.d.ts.map +1 -0
- package/dist/ui/components/PanelState.js +7 -0
- package/dist/ui/components/PanelState.js.map +1 -0
- package/dist/ui/components/ScrollViewport.d.ts +16 -0
- package/dist/ui/components/ScrollViewport.d.ts.map +1 -0
- package/dist/ui/components/ScrollViewport.js +54 -0
- package/dist/ui/components/ScrollViewport.js.map +1 -0
- package/dist/ui/components/Section.js +1 -1
- package/dist/ui/components/Section.js.map +1 -1
- package/dist/ui/components/SelectMenu.d.ts.map +1 -1
- package/dist/ui/components/SelectMenu.js +3 -3
- package/dist/ui/components/SelectMenu.js.map +1 -1
- package/dist/ui/components/ShellOutput.d.ts +2 -1
- package/dist/ui/components/ShellOutput.d.ts.map +1 -1
- package/dist/ui/components/ShellOutput.js +6 -2
- package/dist/ui/components/ShellOutput.js.map +1 -1
- package/dist/ui/components/SplitPane.d.ts +18 -0
- package/dist/ui/components/SplitPane.d.ts.map +1 -0
- package/dist/ui/components/SplitPane.js +9 -0
- package/dist/ui/components/SplitPane.js.map +1 -0
- package/dist/ui/components/StatusList.d.ts +18 -0
- package/dist/ui/components/StatusList.d.ts.map +1 -0
- package/dist/ui/components/StatusList.js +13 -0
- package/dist/ui/components/StatusList.js.map +1 -0
- package/dist/ui/components/SummaryStrip.d.ts +9 -0
- package/dist/ui/components/SummaryStrip.d.ts.map +1 -0
- package/dist/ui/components/SummaryStrip.js +6 -0
- package/dist/ui/components/SummaryStrip.js.map +1 -0
- package/dist/ui/components/app-shell-viewport.d.ts +7 -0
- package/dist/ui/components/app-shell-viewport.d.ts.map +1 -0
- package/dist/ui/components/app-shell-viewport.js +6 -0
- package/dist/ui/components/app-shell-viewport.js.map +1 -0
- package/dist/ui/components/index.d.ts +14 -0
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +12 -0
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/context/MetricsContext.d.ts.map +1 -1
- package/dist/ui/context/MetricsContext.js +15 -12
- package/dist/ui/context/MetricsContext.js.map +1 -1
- package/dist/ui/hooks/index.d.ts +9 -1
- package/dist/ui/hooks/index.d.ts.map +1 -1
- package/dist/ui/hooks/index.js +7 -0
- package/dist/ui/hooks/index.js.map +1 -1
- package/dist/ui/hooks/useAsyncTask.d.ts +7 -1
- package/dist/ui/hooks/useAsyncTask.d.ts.map +1 -1
- package/dist/ui/hooks/useAsyncTask.js +30 -6
- package/dist/ui/hooks/useAsyncTask.js.map +1 -1
- package/dist/ui/hooks/useBoundedCursor.d.ts +7 -0
- package/dist/ui/hooks/useBoundedCursor.d.ts.map +1 -0
- package/dist/ui/hooks/useBoundedCursor.js +19 -0
- package/dist/ui/hooks/useBoundedCursor.js.map +1 -0
- package/dist/ui/hooks/useConfirmBackNav.d.ts +7 -0
- package/dist/ui/hooks/useConfirmBackNav.d.ts.map +1 -0
- package/dist/ui/hooks/useConfirmBackNav.js +10 -0
- package/dist/ui/hooks/useConfirmBackNav.js.map +1 -0
- package/dist/ui/hooks/useDismissKeys.d.ts +10 -0
- package/dist/ui/hooks/useDismissKeys.d.ts.map +1 -0
- package/dist/ui/hooks/useDismissKeys.js +17 -0
- package/dist/ui/hooks/useDismissKeys.js.map +1 -0
- package/dist/ui/hooks/useListCursor.d.ts +7 -0
- package/dist/ui/hooks/useListCursor.d.ts.map +1 -0
- package/dist/ui/hooks/useListCursor.js +29 -0
- package/dist/ui/hooks/useListCursor.js.map +1 -0
- package/dist/ui/hooks/useTwoPaneCursor.d.ts +12 -0
- package/dist/ui/hooks/useTwoPaneCursor.d.ts.map +1 -0
- package/dist/ui/hooks/useTwoPaneCursor.js +36 -0
- package/dist/ui/hooks/useTwoPaneCursor.js.map +1 -0
- package/dist/ui/hooks/useXccBackendOverlay.d.ts +9 -0
- package/dist/ui/hooks/useXccBackendOverlay.d.ts.map +1 -0
- package/dist/ui/hooks/useXccBackendOverlay.js +14 -0
- package/dist/ui/hooks/useXccBackendOverlay.js.map +1 -0
- package/dist/ui/hooks/useXccLoadTest.d.ts +11 -0
- package/dist/ui/hooks/useXccLoadTest.d.ts.map +1 -0
- package/dist/ui/hooks/useXccLoadTest.js +37 -0
- package/dist/ui/hooks/useXccLoadTest.js.map +1 -0
- package/dist/ui/palette.d.ts +23 -0
- package/dist/ui/palette.d.ts.map +1 -0
- package/dist/ui/palette.js +22 -0
- package/dist/ui/palette.js.map +1 -0
- package/dist/ui/views/DbHealthView.js +4 -4
- package/dist/ui/views/DbHealthView.js.map +1 -1
- package/dist/ui/views/DbSizeView.d.ts.map +1 -1
- package/dist/ui/views/DbSizeView.js +2 -2
- package/dist/ui/views/DbSizeView.js.map +1 -1
- package/dist/ui/views/DbTablesView.d.ts.map +1 -1
- package/dist/ui/views/DbTablesView.js +2 -2
- package/dist/ui/views/DbTablesView.js.map +1 -1
- package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
- package/dist/ui/views/DiagDatabaseView.js +4 -3
- package/dist/ui/views/DiagDatabaseView.js.map +1 -1
- package/dist/ui/views/DiagNetworkView.js +2 -2
- package/dist/ui/views/DiagNetworkView.js.map +1 -1
- package/dist/ui/views/DiagServiceView.js +1 -1
- package/dist/ui/views/DiagServiceView.js.map +1 -1
- package/dist/ui/views/DockerPruneView.d.ts.map +1 -1
- package/dist/ui/views/DockerPruneView.js +4 -8
- package/dist/ui/views/DockerPruneView.js.map +1 -1
- package/dist/ui/views/K8sDeployView.d.ts.map +1 -1
- package/dist/ui/views/K8sDeployView.js +5 -5
- package/dist/ui/views/K8sDeployView.js.map +1 -1
- package/dist/ui/views/K8sServicesView.d.ts.map +1 -1
- package/dist/ui/views/K8sServicesView.js +6 -11
- package/dist/ui/views/K8sServicesView.js.map +1 -1
- package/dist/ui/views/K8sStatusView.d.ts.map +1 -1
- package/dist/ui/views/K8sStatusView.js +14 -19
- package/dist/ui/views/K8sStatusView.js.map +1 -1
- package/dist/ui/views/LoadTestConfigView.d.ts.map +1 -1
- package/dist/ui/views/LoadTestConfigView.js +45 -43
- package/dist/ui/views/LoadTestConfigView.js.map +1 -1
- package/dist/ui/views/LoadTestSummaryView.d.ts.map +1 -1
- package/dist/ui/views/LoadTestSummaryView.js +7 -2
- package/dist/ui/views/LoadTestSummaryView.js.map +1 -1
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +254 -55
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/dist/ui/views/MigrateHistoryView.d.ts.map +1 -1
- package/dist/ui/views/MigrateHistoryView.js +11 -2
- package/dist/ui/views/MigrateHistoryView.js.map +1 -1
- package/dist/ui/views/MigrateRollbackView.d.ts.map +1 -1
- package/dist/ui/views/MigrateRollbackView.js +4 -8
- package/dist/ui/views/MigrateRollbackView.js.map +1 -1
- package/dist/ui/views/MigrateRunView.d.ts.map +1 -1
- package/dist/ui/views/MigrateRunView.js +4 -8
- package/dist/ui/views/MigrateRunView.js.map +1 -1
- package/dist/ui/views/MigrateStatusView.js +1 -1
- package/dist/ui/views/MigrateStatusView.js.map +1 -1
- package/dist/ui/views/MigrateWatchView.js +1 -1
- package/dist/ui/views/MigrateWatchView.js.map +1 -1
- package/dist/ui/views/OfflineApplyView.d.ts.map +1 -1
- package/dist/ui/views/OfflineApplyView.js +17 -7
- package/dist/ui/views/OfflineApplyView.js.map +1 -1
- package/dist/ui/views/OfflineDownloadView.d.ts.map +1 -1
- package/dist/ui/views/OfflineDownloadView.js +17 -7
- package/dist/ui/views/OfflineDownloadView.js.map +1 -1
- package/dist/ui/views/OfflineFetchView.d.ts.map +1 -1
- package/dist/ui/views/OfflineFetchView.js +17 -7
- package/dist/ui/views/OfflineFetchView.js.map +1 -1
- package/dist/ui/views/OfflineInspectView.d.ts.map +1 -1
- package/dist/ui/views/OfflineInspectView.js +17 -7
- package/dist/ui/views/OfflineInspectView.js.map +1 -1
- package/dist/ui/views/OsUpdatesEnableView.js +4 -4
- package/dist/ui/views/OsUpdatesEnableView.js.map +1 -1
- package/dist/ui/views/OsUpdatesLogView.js +1 -1
- package/dist/ui/views/OsUpdatesLogView.js.map +1 -1
- package/dist/ui/views/OsUpdatesStatusView.d.ts.map +1 -1
- package/dist/ui/views/OsUpdatesStatusView.js +12 -12
- package/dist/ui/views/OsUpdatesStatusView.js.map +1 -1
- package/dist/ui/views/PowerActionView.d.ts.map +1 -1
- package/dist/ui/views/PowerActionView.js +3 -8
- package/dist/ui/views/PowerActionView.js.map +1 -1
- package/dist/ui/views/SecretsResetPasswordView.d.ts.map +1 -1
- package/dist/ui/views/SecretsResetPasswordView.js +23 -7
- package/dist/ui/views/SecretsResetPasswordView.js.map +1 -1
- package/dist/ui/views/SecretsSetupView.d.ts.map +1 -1
- package/dist/ui/views/SecretsSetupView.js +39 -22
- package/dist/ui/views/SecretsSetupView.js.map +1 -1
- package/dist/ui/views/ServiceLogsView.d.ts.map +1 -1
- package/dist/ui/views/ServiceLogsView.js +9 -9
- package/dist/ui/views/ServiceLogsView.js.map +1 -1
- package/dist/ui/views/ServicesView.d.ts.map +1 -1
- package/dist/ui/views/ServicesView.js +51 -28
- package/dist/ui/views/ServicesView.js.map +1 -1
- package/dist/ui/views/SettingsView.d.ts.map +1 -1
- package/dist/ui/views/SettingsView.js +5 -4
- package/dist/ui/views/SettingsView.js.map +1 -1
- package/dist/ui/views/SetupWizardView.d.ts.map +1 -1
- package/dist/ui/views/SetupWizardView.js +37 -32
- package/dist/ui/views/SetupWizardView.js.map +1 -1
- package/dist/ui/views/StatusView.d.ts.map +1 -1
- package/dist/ui/views/StatusView.js +44 -31
- package/dist/ui/views/StatusView.js.map +1 -1
- package/dist/ui/views/UpdateView.d.ts.map +1 -1
- package/dist/ui/views/UpdateView.js +28 -14
- package/dist/ui/views/UpdateView.js.map +1 -1
- package/dist/ui/views/UserResetPasswordView.d.ts.map +1 -1
- package/dist/ui/views/UserResetPasswordView.js +26 -8
- package/dist/ui/views/UserResetPasswordView.js.map +1 -1
- package/dist/ui/views/XccLoadTestConfigView.d.ts +29 -0
- package/dist/ui/views/XccLoadTestConfigView.d.ts.map +1 -0
- package/dist/ui/views/XccLoadTestConfigView.js +210 -0
- package/dist/ui/views/XccLoadTestConfigView.js.map +1 -0
- package/dist/ui/views/XccLoadTestRunView.d.ts +9 -0
- package/dist/ui/views/XccLoadTestRunView.d.ts.map +1 -0
- package/dist/ui/views/XccLoadTestRunView.js +154 -0
- package/dist/ui/views/XccLoadTestRunView.js.map +1 -0
- package/dist/ui/views/XccLoadTestSummaryView.d.ts +9 -0
- package/dist/ui/views/XccLoadTestSummaryView.d.ts.map +1 -0
- package/dist/ui/views/XccLoadTestSummaryView.js +63 -0
- package/dist/ui/views/XccLoadTestSummaryView.js.map +1 -0
- package/dist/ui/views/XccLoadTestView.d.ts +8 -0
- package/dist/ui/views/XccLoadTestView.d.ts.map +1 -0
- package/dist/ui/views/XccLoadTestView.js +40 -0
- package/dist/ui/views/XccLoadTestView.js.map +1 -0
- package/package.json +6 -1
- package/dist/ui/views/JtapiDisableView.d.ts +0 -6
- package/dist/ui/views/JtapiDisableView.d.ts.map +0 -1
- package/dist/ui/views/JtapiDisableView.js +0 -52
- package/dist/ui/views/JtapiDisableView.js.map +0 -1
- package/dist/ui/views/JtapiEnableView.d.ts +0 -6
- package/dist/ui/views/JtapiEnableView.d.ts.map +0 -1
- package/dist/ui/views/JtapiEnableView.js +0 -40
- package/dist/ui/views/JtapiEnableView.js.map +0 -1
- package/dist/ui/views/JtapiStatusView.d.ts +0 -6
- package/dist/ui/views/JtapiStatusView.d.ts.map +0 -1
- package/dist/ui/views/JtapiStatusView.js +0 -11
- package/dist/ui/views/JtapiStatusView.js.map +0 -1
- package/dist/ui/views/JtapiTroubleshootView.d.ts +0 -6
- package/dist/ui/views/JtapiTroubleshootView.d.ts.map +0 -1
- package/dist/ui/views/JtapiTroubleshootView.js +0 -114
- package/dist/ui/views/JtapiTroubleshootView.js.map +0 -1
|
@@ -1,25 +1,47 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
|
-
import { Box, Text, useApp, useInput } from 'ink';
|
|
3
|
+
import { Box, Text, useApp, useInput, useStdin, useStdout } from 'ink';
|
|
4
|
+
import { AppShellViewportContext } from './app-shell-viewport.js';
|
|
4
5
|
import { LogLevelBadge } from './LogLevelBadge.js';
|
|
5
6
|
import { MetricsFooter } from './MetricsFooter.js';
|
|
6
|
-
|
|
7
|
-
export function AppShell({ title = 'CallTelemetry CLI', command, children, onBack, isComplete, breadcrumb, logLevel, hideMetrics, }) {
|
|
7
|
+
export function AppShell({ title = 'CallTelemetry CLI', command, children, onBack, isComplete, breadcrumb, logLevel, hideMetrics, backKeys = ['q', 'escape'], footerHint, }) {
|
|
8
8
|
const { exit } = useApp();
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const { stdout } = useStdout();
|
|
10
|
+
const { isRawModeSupported } = useStdin();
|
|
11
|
+
const termHeight = stdout?.rows ?? 24;
|
|
12
|
+
const activeBackKeys = backKeys === false ? [] : backKeys;
|
|
13
|
+
const derivedFooterHint = footerHint ?? (activeBackKeys.includes('q')
|
|
14
|
+
? (onBack ? (isComplete ? 'q Back' : 'q Cancel') : 'q Quit')
|
|
15
|
+
: '');
|
|
16
|
+
const hasFooterHint = derivedFooterHint.length > 0;
|
|
11
17
|
// Auto-exit when complete with no back handler (standalone mode)
|
|
12
18
|
useEffect(() => {
|
|
13
19
|
if (isComplete && !onBack) {
|
|
14
20
|
exit();
|
|
15
21
|
}
|
|
16
22
|
}, [isComplete, onBack, exit]);
|
|
17
|
-
//
|
|
23
|
+
// q/Escape/leftArrow — navigate back when embedded, exit when standalone.
|
|
24
|
+
// Disable when stdin is not a TTY (piped input, VS Code terminal without PTY,
|
|
25
|
+
// tmux without raw mode support) — prevents "Raw mode is not supported" crash.
|
|
18
26
|
useInput((input, key) => {
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
const wantsBack = (input === 'q' && activeBackKeys.includes('q')) ||
|
|
28
|
+
(key.escape && activeBackKeys.includes('escape')) ||
|
|
29
|
+
(key.leftArrow && activeBackKeys.includes('leftArrow'));
|
|
30
|
+
if (wantsBack) {
|
|
31
|
+
if (onBack) {
|
|
32
|
+
onBack();
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
exit();
|
|
36
|
+
}
|
|
21
37
|
}
|
|
22
|
-
}, { isActive:
|
|
23
|
-
|
|
38
|
+
}, { isActive: activeBackKeys.length > 0 && isRawModeSupported });
|
|
39
|
+
// Header = 3 rows (border top + content + border bottom)
|
|
40
|
+
// Footer hint = 2 rows (padding + text)
|
|
41
|
+
// Metrics footer = 3 rows (border top + content + border bottom) when visible
|
|
42
|
+
const hasMetrics = !hideMetrics;
|
|
43
|
+
const chromeRows = 3 + (hasFooterHint ? 2 : 0) + (hasMetrics ? 4 : 0);
|
|
44
|
+
const contentHeight = Math.max(4, termHeight - chromeRows);
|
|
45
|
+
return (_jsxs(Box, { flexDirection: "column", height: termHeight, children: [_jsxs(Box, { borderStyle: "single", paddingX: 1, justifyContent: "space-between", flexShrink: 0, children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", bold: true, children: title }), breadcrumb && _jsxs(Text, { dimColor: true, children: [" ", breadcrumb] }), logLevel && logLevel !== 'normal' && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(LogLevelBadge, { level: logLevel })] }))] }), command && _jsx(Text, { dimColor: true, children: command })] }), _jsx(AppShellViewportContext.Provider, { value: { contentHeight }, children: _jsx(Box, { flexDirection: "column", paddingTop: 1, height: contentHeight, overflowY: "hidden", children: children }) }), hasFooterHint && (_jsx(Box, { paddingTop: 1, flexShrink: 0, children: _jsx(Text, { dimColor: true, children: derivedFooterHint }) })), hasMetrics && (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, marginTop: 1, flexShrink: 0, children: _jsx(MetricsFooter, {}) }))] }));
|
|
24
46
|
}
|
|
25
47
|
//# sourceMappingURL=AppShell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
interface DashboardBlockProps {
|
|
3
|
+
title: string;
|
|
4
|
+
meta?: ReactNode;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
paddingLeft?: number;
|
|
7
|
+
marginBottom?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function DashboardBlock({ title, meta, children, paddingLeft, marginBottom, }: DashboardBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=DashboardBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardBlock.d.ts","sourceRoot":"","sources":["../../../src/ui/components/DashboardBlock.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,WAAe,EACf,YAAgB,GACjB,EAAE,mBAAmB,2CAUrB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export function DashboardBlock({ title, meta, children, paddingLeft = 2, marginBottom = 1, }) {
|
|
4
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: paddingLeft, marginBottom: marginBottom, children: [_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { bold: true, children: title }), meta] }), children] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=DashboardBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardBlock.js","sourceRoot":"","sources":["../../../src/ui/components/DashboardBlock.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,CAAC,GACI;IACpB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,aAC9E,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,IAAI,kBAAE,KAAK,GAAQ,EACxB,IAAI,IACD,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -2,11 +2,16 @@ interface Column {
|
|
|
2
2
|
key: string;
|
|
3
3
|
label: string;
|
|
4
4
|
width?: number;
|
|
5
|
+
minWidth?: number;
|
|
6
|
+
maxWidth?: number;
|
|
7
|
+
priority?: number;
|
|
5
8
|
}
|
|
6
9
|
interface DataTableProps {
|
|
7
10
|
columns: Column[];
|
|
8
11
|
rows: Array<Record<string, string>>;
|
|
12
|
+
paddingLeft?: number;
|
|
13
|
+
maxWidth?: number;
|
|
9
14
|
}
|
|
10
|
-
export declare function DataTable({ columns, rows }: DataTableProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function DataTable({ columns, rows, paddingLeft, maxWidth }: DataTableProps): import("react/jsx-runtime").JSX.Element;
|
|
11
16
|
export {};
|
|
12
17
|
//# sourceMappingURL=DataTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":"AAEA,UAAU,MAAM;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":"AAEA,UAAU,MAAM;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiFD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAe,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA4BrF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
2
|
+
import { Box, Text, useStdout } from 'ink';
|
|
3
3
|
function computeWidths(columns, rows) {
|
|
4
4
|
return columns.map((col) => {
|
|
5
5
|
if (col.width)
|
|
@@ -10,19 +10,83 @@ function computeWidths(columns, rows) {
|
|
|
10
10
|
if (val.length > max)
|
|
11
11
|
max = val.length;
|
|
12
12
|
}
|
|
13
|
+
if (col.maxWidth)
|
|
14
|
+
return Math.min(max, col.maxWidth);
|
|
13
15
|
return max;
|
|
14
16
|
});
|
|
15
17
|
}
|
|
18
|
+
function truncate(str, width) {
|
|
19
|
+
if (width <= 0)
|
|
20
|
+
return '';
|
|
21
|
+
if (str.length <= width)
|
|
22
|
+
return str;
|
|
23
|
+
if (width === 1)
|
|
24
|
+
return '…';
|
|
25
|
+
return `${str.slice(0, width - 1)}…`;
|
|
26
|
+
}
|
|
27
|
+
function totalWidth(widths) {
|
|
28
|
+
return widths.reduce((sum, width) => sum + width, 0) + widths.length * 3 + 1;
|
|
29
|
+
}
|
|
16
30
|
function pad(str, width) {
|
|
17
|
-
|
|
31
|
+
const value = truncate(str, width);
|
|
32
|
+
return value + ' '.repeat(Math.max(0, width - value.length));
|
|
33
|
+
}
|
|
34
|
+
function fitColumns(columns, widths, availableWidth) {
|
|
35
|
+
let nextColumns = [...columns];
|
|
36
|
+
let nextWidths = [...widths];
|
|
37
|
+
const getMinWidth = (column) => column.minWidth ?? Math.min(Math.max(column.label.length, 4), 16);
|
|
38
|
+
while (totalWidth(nextWidths) > availableWidth) {
|
|
39
|
+
let shrunk = false;
|
|
40
|
+
const shrinkOrder = nextColumns
|
|
41
|
+
.map((column, index) => ({ column, index }))
|
|
42
|
+
.sort((a, b) => {
|
|
43
|
+
const priorityDiff = (a.column.priority ?? 0) - (b.column.priority ?? 0);
|
|
44
|
+
if (priorityDiff !== 0)
|
|
45
|
+
return priorityDiff;
|
|
46
|
+
return b.index - a.index;
|
|
47
|
+
});
|
|
48
|
+
for (const { column, index } of shrinkOrder) {
|
|
49
|
+
const minWidth = getMinWidth(column);
|
|
50
|
+
if (nextWidths[index] > minWidth) {
|
|
51
|
+
nextWidths[index] = nextWidths[index] - 1;
|
|
52
|
+
shrunk = true;
|
|
53
|
+
if (totalWidth(nextWidths) <= availableWidth)
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (totalWidth(nextWidths) <= availableWidth)
|
|
58
|
+
break;
|
|
59
|
+
if (!shrunk) {
|
|
60
|
+
if (nextColumns.length <= 1)
|
|
61
|
+
break;
|
|
62
|
+
const dropCandidates = nextColumns
|
|
63
|
+
.map((column, index) => ({ column, index }))
|
|
64
|
+
.sort((a, b) => {
|
|
65
|
+
const priorityDiff = (a.column.priority ?? 0) - (b.column.priority ?? 0);
|
|
66
|
+
if (priorityDiff !== 0)
|
|
67
|
+
return priorityDiff;
|
|
68
|
+
return b.index - a.index;
|
|
69
|
+
});
|
|
70
|
+
const dropIndex = dropCandidates[0]?.index;
|
|
71
|
+
if (dropIndex === undefined)
|
|
72
|
+
break;
|
|
73
|
+
nextColumns.splice(dropIndex, 1);
|
|
74
|
+
nextWidths.splice(dropIndex, 1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return { columns: nextColumns, widths: nextWidths };
|
|
18
78
|
}
|
|
19
|
-
export function DataTable({ columns, rows }) {
|
|
20
|
-
const
|
|
79
|
+
export function DataTable({ columns, rows, paddingLeft = 2, maxWidth }) {
|
|
80
|
+
const { stdout } = useStdout();
|
|
81
|
+
const termWidth = stdout?.columns ?? 80;
|
|
82
|
+
const availableWidth = Math.max(24, (maxWidth ?? termWidth) - paddingLeft - 1);
|
|
83
|
+
const computedWidths = computeWidths(columns, rows);
|
|
84
|
+
const { columns: visibleColumns, widths } = fitColumns(columns, computedWidths, availableWidth);
|
|
21
85
|
const topBorder = '┌' + widths.map(w => '─'.repeat(w + 2)).join('┬') + '┐';
|
|
22
86
|
const headerSep = '├' + widths.map(w => '─'.repeat(w + 2)).join('┼') + '┤';
|
|
23
87
|
const bottomBorder = '└' + widths.map(w => '─'.repeat(w + 2)).join('┴') + '┘';
|
|
24
|
-
const headerRow = '│' +
|
|
25
|
-
const dataRows = rows.map(row => '│' +
|
|
26
|
-
return (_jsxs(Box, { flexDirection: "column", paddingLeft:
|
|
88
|
+
const headerRow = '│' + visibleColumns.map((col, i) => ` ${pad(col.label, widths[i])} `).join('│') + '│';
|
|
89
|
+
const dataRows = rows.map(row => '│' + visibleColumns.map((col, i) => ` ${pad(row[col.key] ?? '', widths[i])} `).join('│') + '│');
|
|
90
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: paddingLeft, children: [_jsx(Text, { children: topBorder }), _jsx(Text, { bold: true, children: headerRow }), _jsx(Text, { children: headerSep }), dataRows.map((row, i) => (_jsx(Text, { children: row }, i))), _jsx(Text, { children: bottomBorder })] }));
|
|
27
91
|
}
|
|
28
92
|
//# sourceMappingURL=DataTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ interface ErrorBoundaryState {
|
|
|
8
8
|
export declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
9
9
|
constructor(props: ErrorBoundaryProps);
|
|
10
10
|
static getDerivedStateFromError(error: Error): ErrorBoundaryState;
|
|
11
|
-
render(): string | number | bigint | boolean |
|
|
11
|
+
render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
12
12
|
}
|
|
13
13
|
export {};
|
|
14
14
|
//# sourceMappingURL=ErrorBoundary.d.ts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type FieldListValidator = (value: string, fields: FieldListField[]) => string | null;
|
|
2
|
+
export interface FieldListField {
|
|
3
|
+
label: string;
|
|
4
|
+
key: string;
|
|
5
|
+
value: string;
|
|
6
|
+
placeholder: string;
|
|
7
|
+
helpText?: string;
|
|
8
|
+
validate?: FieldListValidator;
|
|
9
|
+
mask?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface FieldListProps {
|
|
12
|
+
fields: FieldListField[];
|
|
13
|
+
focusIndex: number;
|
|
14
|
+
onFocusIndexChange: (index: number) => void;
|
|
15
|
+
onFieldChange: (index: number, value: string) => void;
|
|
16
|
+
onComplete: (values: Record<string, string>) => void;
|
|
17
|
+
onBack?: () => void;
|
|
18
|
+
labelWidth?: number;
|
|
19
|
+
emptyUsesPlaceholder?: boolean;
|
|
20
|
+
footerHint?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function FieldList({ fields, focusIndex, onFocusIndexChange, onFieldChange, onComplete, onBack, labelWidth, emptyUsesPlaceholder, footerHint, }: FieldListProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=FieldList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/FieldList.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,cAAc,EAAE,KACrB,MAAM,GAAG,IAAI,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,MAAM,EACN,UAAe,EACf,oBAA4B,EAC5B,UAAmD,GACpD,EAAE,cAAc,2CAoHhB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import InkTextInput from 'ink-text-input';
|
|
5
|
+
export function FieldList({ fields, focusIndex, onFocusIndexChange, onFieldChange, onComplete, onBack, labelWidth = 14, emptyUsesPlaceholder = false, footerHint = '↑↓ Navigate Enter Start Esc Back', }) {
|
|
6
|
+
const [touchedKeys, setTouchedKeys] = React.useState({});
|
|
7
|
+
const [submitAttempted, setSubmitAttempted] = React.useState(false);
|
|
8
|
+
const errors = React.useMemo(() => Object.fromEntries(fields.map((field) => [field.key, field.validate?.(field.value, fields) ?? null])), [fields]);
|
|
9
|
+
const markTouched = React.useCallback((index) => {
|
|
10
|
+
const field = fields[index];
|
|
11
|
+
if (!field)
|
|
12
|
+
return;
|
|
13
|
+
setTouchedKeys((prev) => ({ ...prev, [field.key]: true }));
|
|
14
|
+
}, [fields]);
|
|
15
|
+
const moveFocus = React.useCallback((nextIndex) => {
|
|
16
|
+
markTouched(focusIndex);
|
|
17
|
+
onFocusIndexChange(nextIndex);
|
|
18
|
+
}, [focusIndex, markTouched, onFocusIndexChange]);
|
|
19
|
+
const handleSubmit = React.useCallback((index, submittedValue) => {
|
|
20
|
+
const nextFields = fields.map((field, fieldIndex) => (fieldIndex === index
|
|
21
|
+
? { ...field, value: submittedValue ?? field.value }
|
|
22
|
+
: field));
|
|
23
|
+
const currentField = nextFields[index];
|
|
24
|
+
if (!currentField)
|
|
25
|
+
return;
|
|
26
|
+
markTouched(index);
|
|
27
|
+
const currentError = currentField.validate?.(currentField.value, nextFields) ?? null;
|
|
28
|
+
if (currentError) {
|
|
29
|
+
setSubmitAttempted(true);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (index < fields.length - 1) {
|
|
33
|
+
onFocusIndexChange(index + 1);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const firstInvalidIndex = nextFields.findIndex((field) => (field.validate?.(field.value, nextFields) ?? null));
|
|
37
|
+
if (firstInvalidIndex !== -1) {
|
|
38
|
+
setSubmitAttempted(true);
|
|
39
|
+
onFocusIndexChange(firstInvalidIndex);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
onComplete(Object.fromEntries(nextFields.map((field) => [field.key, field.value])));
|
|
43
|
+
}, [fields, markTouched, onComplete, onFocusIndexChange]);
|
|
44
|
+
useInput((input, key) => {
|
|
45
|
+
if (key.upArrow || (key.shift && key.tab)) {
|
|
46
|
+
moveFocus(focusIndex > 0 ? focusIndex - 1 : fields.length - 1);
|
|
47
|
+
}
|
|
48
|
+
else if (key.downArrow || key.tab) {
|
|
49
|
+
moveFocus(focusIndex < fields.length - 1 ? focusIndex + 1 : 0);
|
|
50
|
+
}
|
|
51
|
+
else if (key.escape) {
|
|
52
|
+
onBack?.();
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return (_jsxs(Box, { flexDirection: "column", children: [fields.map((field, index) => {
|
|
56
|
+
const showPlaceholder = emptyUsesPlaceholder ? field.value === '' : field.value === field.placeholder;
|
|
57
|
+
const error = errors[field.key];
|
|
58
|
+
const showError = Boolean(error) && (submitAttempted ||
|
|
59
|
+
touchedKeys[field.key] ||
|
|
60
|
+
(index === focusIndex && field.value.trim().length > 0));
|
|
61
|
+
const displayValue = field.mask && field.value
|
|
62
|
+
? '*'.repeat(Math.min(field.value.length, 24))
|
|
63
|
+
: field.value;
|
|
64
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, children: field.label.padEnd(labelWidth) }), index === focusIndex ? (_jsx(InkTextInput, { value: field.value, onChange: (value) => onFieldChange(index, value), onSubmit: (value) => handleSubmit(index, value), mask: field.mask ? '*' : undefined, placeholder: field.placeholder })) : (_jsx(Text, { dimColor: showPlaceholder, children: displayValue || field.placeholder }))] }), showError && (_jsx(Box, { paddingLeft: labelWidth, children: _jsx(Text, { color: "red", children: error }) })), field.helpText && index === focusIndex && (_jsx(Box, { paddingLeft: labelWidth, children: _jsx(Text, { dimColor: true, children: field.helpText }) }))] }, field.key));
|
|
65
|
+
}), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: footerHint }) })] }));
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=FieldList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldList.js","sourceRoot":"","sources":["../../../src/ui/components/FieldList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
1
2
|
interface KeyValueItem {
|
|
2
3
|
key: string;
|
|
3
|
-
value:
|
|
4
|
+
value: ReactNode;
|
|
4
5
|
}
|
|
5
6
|
interface KeyValueProps {
|
|
6
7
|
items: KeyValueItem[];
|
|
7
8
|
keyWidth?: number;
|
|
9
|
+
paddingLeft?: number;
|
|
8
10
|
}
|
|
9
|
-
export declare function KeyValue({ items, keyWidth }: KeyValueProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function KeyValue({ items, keyWidth, paddingLeft }: KeyValueProps): import("react/jsx-runtime").JSX.Element;
|
|
10
12
|
export {};
|
|
11
13
|
//# sourceMappingURL=KeyValue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyValue.d.ts","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KeyValue.d.ts","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAe,EAAE,EAAE,aAAa,2CAe3E"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from 'ink';
|
|
3
|
-
export function KeyValue({ items, keyWidth }) {
|
|
3
|
+
export function KeyValue({ items, keyWidth, paddingLeft = 2 }) {
|
|
4
4
|
const width = keyWidth ?? Math.max(...items.map(item => item.key.length)) + 2;
|
|
5
|
-
return (_jsx(Box, { flexDirection: "column", paddingLeft:
|
|
5
|
+
return (_jsx(Box, { flexDirection: "column", paddingLeft: paddingLeft, children: items.map((item, i) => (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: item.key.padEnd(width) }), typeof item.value === 'string' || typeof item.value === 'number'
|
|
6
|
+
? _jsx(Text, { children: String(item.value) })
|
|
7
|
+
: item.value] }, i))) }));
|
|
6
8
|
}
|
|
7
9
|
//# sourceMappingURL=KeyValue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyValue.js","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"KeyValue.js","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAchC,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,CAAC,EAAiB;IAC1E,MAAM,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IAE9E,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,WAAW,YACjD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EAC7C,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;oBAC/D,CAAC,CAAC,KAAC,IAAI,cAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAQ;oBACnC,CAAC,CAAC,IAAI,CAAC,KAAK,KAJN,CAAC,CAKL,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface KeyboardAction {
|
|
2
|
+
key: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
interface KeyboardHintProps {
|
|
6
|
+
actions: KeyboardAction[];
|
|
7
|
+
}
|
|
8
|
+
export declare function KeyboardHint({ actions }: KeyboardHintProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=KeyboardHint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyboardHint.d.ts","sourceRoot":"","sources":["../../../src/ui/components/KeyboardHint.tsx"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CAQ1D"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export function KeyboardHint({ actions }) {
|
|
4
|
+
return (_jsx(Box, { paddingTop: 1, children: _jsx(Text, { dimColor: true, children: actions.map(a => `${a.key} ${a.label}`).join(' ') }) }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=KeyboardHint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyboardHint.js","sourceRoot":"","sources":["../../../src/ui/components/KeyboardHint.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAqB;IACzD,OAAO,CACL,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,QAAQ,kBACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAC/C,GACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
interface MenuListRowProps {
|
|
3
|
+
label: string;
|
|
4
|
+
description?: ReactNode;
|
|
5
|
+
labelWidth?: number;
|
|
6
|
+
active?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function MenuListRow({ label, description, labelWidth, active, }: MenuListRowProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=MenuList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MenuList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,UAAU,EACV,MAAc,GACf,EAAE,gBAAgB,2CAWlB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export function MenuListRow({ label, description, labelWidth, active = false, }) {
|
|
4
|
+
const paddedLabel = labelWidth ? label.padEnd(labelWidth) : label;
|
|
5
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: active ? 'cyan' : undefined, bold: active, children: `${active ? '❯' : ' '} ${paddedLabel}` }), description] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=MenuList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuList.js","sourceRoot":"","sources":["../../../src/ui/components/MenuList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAUhC,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,UAAU,EACV,MAAM,GAAG,KAAK,GACG;IACjB,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAElE,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,YACnD,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,EAAE,GAClC,EACN,WAAW,IACR,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Self-contained metrics footer — subscribes to MetricsContext directly so that
|
|
4
|
+
* AppShell does not need to subscribe. This prevents metrics polling from
|
|
5
|
+
* triggering re-renders of the entire view tree every 30 seconds.
|
|
6
|
+
*
|
|
7
|
+
* Memoized: only re-renders when metrics context changes, not when the parent
|
|
8
|
+
* view re-renders due to its own polling (services, health checks, etc.).
|
|
9
|
+
*/
|
|
10
|
+
export declare const MetricsFooter: React.NamedExoticComponent<object>;
|
|
8
11
|
//# sourceMappingURL=MetricsFooter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsFooter.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetricsFooter.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,oCAqDxB,CAAC"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
2
3
|
import { Box, useStdout } from 'ink';
|
|
3
4
|
import { Sparkline } from './Sparkline.js';
|
|
4
|
-
|
|
5
|
+
import { useMetrics, useMetricsHistory } from '../context/MetricsContext.js';
|
|
6
|
+
/**
|
|
7
|
+
* Self-contained metrics footer — subscribes to MetricsContext directly so that
|
|
8
|
+
* AppShell does not need to subscribe. This prevents metrics polling from
|
|
9
|
+
* triggering re-renders of the entire view tree every 30 seconds.
|
|
10
|
+
*
|
|
11
|
+
* Memoized: only re-renders when metrics context changes, not when the parent
|
|
12
|
+
* view re-renders due to its own polling (services, health checks, etc.).
|
|
13
|
+
*/
|
|
14
|
+
export const MetricsFooter = React.memo(function MetricsFooter() {
|
|
15
|
+
const metrics = useMetrics();
|
|
16
|
+
const history = useMetricsHistory();
|
|
5
17
|
const { stdout } = useStdout();
|
|
18
|
+
if (!metrics)
|
|
19
|
+
return null;
|
|
6
20
|
const width = stdout?.columns ?? 80;
|
|
7
21
|
// Sparkline width adapts to terminal — leave room for label (11) + trend (2) + detail (~14)
|
|
8
22
|
const sparkWidth = Math.max(10, Math.min(40, width - 34));
|
|
@@ -11,9 +25,8 @@ export function MetricsFooter({ metrics, history }) {
|
|
|
11
25
|
const diskData = history.map(m => m.disk.usedPercent);
|
|
12
26
|
const swapData = history.map(m => m.swap?.percent ?? 0);
|
|
13
27
|
const loadData = history.map(m => m.cpu.load1m);
|
|
14
|
-
// Load max is based on CPU core count (100% per core)
|
|
15
28
|
const cpuCount = metrics.cpu.label?.match(/(\d+)\s*core/i)?.[1];
|
|
16
29
|
const loadMax = cpuCount ? parseInt(cpuCount, 10) : 8;
|
|
17
30
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Sparkline, { data: ramData, width: sparkWidth, label: "RAM", detail: `${metrics.ram.percent}% ${metrics.ram.label}`, min: 0, max: 100, thresholdColor: true, showTrend: true }), _jsx(Sparkline, { data: cpuData, width: sparkWidth, label: "CPU", detail: `${metrics.cpu.percent}% ${metrics.cpu.label}`, min: 0, max: 100, thresholdColor: true, showTrend: true }), _jsx(Sparkline, { data: diskData, width: sparkWidth, label: "Disk", detail: `${metrics.disk.usedPercent}% ${metrics.disk.label}`, min: 0, max: 100, thresholdColor: true, thresholds: [80, 95] }), metrics.swap && (_jsx(Sparkline, { data: swapData, width: sparkWidth, label: "Swap", detail: `${metrics.swap.percent}% ${metrics.swap.label}`, min: 0, max: 100, thresholdColor: true, thresholds: [70, 90], showTrend: true })), _jsx(Sparkline, { data: loadData, width: sparkWidth, label: "Load", detail: `${metrics.cpu.load1m.toFixed(1)}`, min: 0, max: loadMax, thresholdColor: true, thresholds: [loadMax * 0.7, loadMax * 0.9], showTrend: true })] }));
|
|
18
|
-
}
|
|
31
|
+
});
|
|
19
32
|
//# sourceMappingURL=MetricsFooter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsFooter.js","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"MetricsFooter.js","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
interface PaneSectionProps {
|
|
3
|
+
title: string;
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
marginTop?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function PaneSection({ title, children, marginTop }: PaneSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=PaneSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaneSection.d.ts","sourceRoot":"","sources":["../../../src/ui/components/PaneSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAa,EAAE,EAAE,gBAAgB,2CAO/E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export function PaneSection({ title, children, marginTop = 1 }) {
|
|
4
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: marginTop, children: [_jsx(Text, { bold: true, children: title }), children] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=PaneSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaneSection.js","sourceRoot":"","sources":["../../../src/ui/components/PaneSection.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,GAAG,CAAC,EAAoB;IAC9E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,SAAS,aAC9C,KAAC,IAAI,IAAC,IAAI,kBAAE,KAAK,GAAQ,EACxB,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface PanelStateProps {
|
|
2
|
+
state: 'loading' | 'error' | 'empty';
|
|
3
|
+
message: string;
|
|
4
|
+
paddingLeft?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function PanelState({ state, message, paddingLeft }: PanelStateProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=PanelState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelState.d.ts","sourceRoot":"","sources":["../../../src/ui/components/PanelState.tsx"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAe,EAAE,EAAE,eAAe,2CAQ9E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { Spinner } from './Spinner.js';
|
|
4
|
+
export function PanelState({ state, message, paddingLeft = 2 }) {
|
|
5
|
+
return (_jsxs(Box, { paddingLeft: paddingLeft, children: [state === 'loading' && _jsx(Spinner, { label: message }), state === 'error' && _jsx(Text, { color: "red", children: message }), state === 'empty' && _jsx(Text, { dimColor: true, children: message })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=PanelState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelState.js","sourceRoot":"","sources":["../../../src/ui/components/PanelState.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,EAAmB;IAC7E,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAE,WAAW,aAC1B,KAAK,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAE,OAAO,GAAI,EAClD,KAAK,KAAK,OAAO,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,OAAO,GAAQ,EACvD,KAAK,KAAK,OAAO,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,IACjD,CACP,CAAC;AACJ,CAAC"}
|