@skyhook-io/radar-app 1.13.5 → 1.14.0

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.
Files changed (201) hide show
  1. package/package.json +8 -8
  2. package/src/App.tsx +60 -24
  3. package/src/api/client.authRedirect.test.ts +12 -1
  4. package/src/api/client.prometheusStatus.test.ts +24 -0
  5. package/src/api/client.ts +321 -16
  6. package/src/api/diagnose.ts +1 -0
  7. package/src/api/drain-plan.test.ts +86 -0
  8. package/src/api/quotas.test.ts +26 -0
  9. package/src/api/quotas.ts +20 -0
  10. package/src/api/workloadMetrics.test.ts +40 -0
  11. package/src/api/workloadMetrics.ts +68 -0
  12. package/src/components/CloudConnectFlow.tsx +179 -42
  13. package/src/components/CloudFunnelButton.tsx +107 -36
  14. package/src/components/SyncProgressPanel.tsx +73 -0
  15. package/src/components/audit/AuditView.tsx +2 -0
  16. package/src/components/cloudConnectHandoff.test.ts +140 -0
  17. package/src/components/cloudConnectHandoff.ts +124 -0
  18. package/src/components/diagnose/DiagnoseContext.tsx +2 -1
  19. package/src/components/diagnose/investigationEvidence/adapters/changes.ts +60 -0
  20. package/src/components/diagnose/investigationEvidence/adapters/diagnose.test.ts +573 -0
  21. package/src/components/diagnose/investigationEvidence/adapters/diagnose.ts +935 -0
  22. package/src/components/diagnose/investigationEvidence/adapters/events.ts +96 -0
  23. package/src/components/diagnose/investigationEvidence/adapters/helm.test.ts +242 -0
  24. package/src/components/diagnose/investigationEvidence/adapters/helm.ts +208 -0
  25. package/src/components/diagnose/investigationEvidence/adapters/issues.ts +172 -0
  26. package/src/components/diagnose/investigationEvidence/adapters/logs.test.ts +283 -0
  27. package/src/components/diagnose/investigationEvidence/adapters/logs.ts +183 -0
  28. package/src/components/diagnose/investigationEvidence/adapters/permissions.test.ts +528 -0
  29. package/src/components/diagnose/investigationEvidence/adapters/permissions.ts +292 -0
  30. package/src/components/diagnose/investigationEvidence/adapters/prometheus.test.ts +1641 -0
  31. package/src/components/diagnose/investigationEvidence/adapters/prometheus.ts +769 -0
  32. package/src/components/diagnose/investigationEvidence/adapters/resource.test.ts +54 -0
  33. package/src/components/diagnose/investigationEvidence/adapters/resource.ts +257 -0
  34. package/src/components/diagnose/investigationEvidence/adapters/topology.ts +207 -0
  35. package/src/components/diagnose/investigationEvidence/builder.ts +418 -0
  36. package/src/components/diagnose/investigationEvidence/evidenceFixtures.ts +179 -0
  37. package/src/components/diagnose/investigationEvidence/identity.test.ts +614 -0
  38. package/src/components/diagnose/investigationEvidence/identity.ts +261 -0
  39. package/src/components/diagnose/investigationEvidence/index.ts +55 -0
  40. package/src/components/diagnose/investigationEvidence/observations.ts +954 -0
  41. package/src/components/diagnose/investigationEvidence/parse.ts +467 -0
  42. package/src/components/diagnose/investigationEvidence/projection.test.ts +2703 -0
  43. package/src/components/diagnose/investigationEvidence/types.ts +512 -0
  44. package/src/components/diagnose/target.test.ts +19 -0
  45. package/src/components/diagnose/target.ts +3 -2
  46. package/src/components/gitops/GitOpsView.tsx +7 -0
  47. package/src/components/gitops/RemoteDestinationCloudHint.tsx +26 -0
  48. package/src/components/resource/PrometheusCharts.overlays.test.ts +22 -0
  49. package/src/components/resource/PrometheusCharts.tsx +4 -3
  50. package/src/components/resource/PrometheusChartsGrid.render.test.tsx +99 -0
  51. package/src/components/resource/PrometheusChartsGrid.tsx +75 -35
  52. package/src/components/resource/RightsizingStrip.test.ts +38 -0
  53. package/src/components/resource/RightsizingStrip.tsx +15 -3
  54. package/src/components/resource/WorkloadMetricsHelpDialog.test.tsx +79 -0
  55. package/src/components/resource/WorkloadMetricsHelpDialog.tsx +145 -0
  56. package/src/components/resource/WorkloadMetricsSection.render.test.tsx +351 -0
  57. package/src/components/resource/WorkloadMetricsSection.tsx +486 -0
  58. package/src/components/resource/workloadMetricValues.test.ts +65 -0
  59. package/src/components/resource/workloadMetricValues.ts +30 -0
  60. package/src/components/resources/ResourcesView.tsx +44 -6
  61. package/src/components/resources/renderers/NamespaceRenderer.tsx +7 -1
  62. package/src/components/resources/renderers/PodRenderer.tsx +4 -0
  63. package/src/components/resources/renderers/RolloutRenderer.tsx +15 -1
  64. package/src/components/resources/renderers/WorkloadRenderer.tsx +3 -0
  65. package/src/components/rightsizing/RightsizingScanView.tsx +21 -0
  66. package/src/components/settings/SettingsDialog.tsx +94 -14
  67. package/src/components/traffic/TrafficFlowList.tsx +229 -70
  68. package/src/components/traffic/TrafficGraph.tsx +6 -6
  69. package/src/components/traffic/TrafficView.tsx +10 -9
  70. package/src/components/traffic/trafficFilters.test.ts +28 -1
  71. package/src/components/traffic/trafficFilters.ts +31 -0
  72. package/src/components/workload/WorkloadView.tsx +19 -8
  73. package/src/context/ConnectionContext.tsx +48 -3
  74. package/src/context/DiagnoseCustomization.tsx +1 -0
  75. package/src/index.css +17 -0
  76. package/src/utils/navigation.ts +1 -1
  77. package/src/utils/topology-namespace.test.ts +64 -0
  78. package/src/utils/topology-namespace.ts +18 -0
  79. package/src/components/diagnose/investigationEvidence.test.ts +0 -6617
  80. package/src/components/diagnose/investigationEvidence.ts +0 -5572
  81. package/src/components/gitops/GitOpsActions.tsx +0 -1
  82. package/src/components/gitops/GitOpsStatusBadge.tsx +0 -1
  83. package/src/components/gitops/ManagedResourcesList.tsx +0 -1
  84. package/src/components/gitops/SyncCountdown.tsx +0 -1
  85. package/src/components/gitops/index.ts +0 -4
  86. package/src/components/helm/ManifestDiffViewer.tsx +0 -69
  87. package/src/components/logs/JsonLogLine.tsx +0 -1
  88. package/src/components/logs/LogCore.tsx +0 -2
  89. package/src/components/logs/useLogBuffer.ts +0 -2
  90. package/src/components/logs/useLogSearch.ts +0 -1
  91. package/src/components/resource-drawer/ResourceDrawer.tsx +0 -216
  92. package/src/components/resources/drawer-components.tsx +0 -1
  93. package/src/components/resources/renderers/AlertRenderer.tsx +0 -1
  94. package/src/components/resources/renderers/CNPGBackupRenderer.tsx +0 -1
  95. package/src/components/resources/renderers/CNPGPoolerRenderer.tsx +0 -1
  96. package/src/components/resources/renderers/CNPGScheduledBackupRenderer.tsx +0 -1
  97. package/src/components/resources/renderers/CertificateRenderer.tsx +0 -1
  98. package/src/components/resources/renderers/CertificateRequestRenderer.tsx +0 -1
  99. package/src/components/resources/renderers/ChallengeRenderer.tsx +0 -1
  100. package/src/components/resources/renderers/ClusterComplianceReportRenderer.tsx +0 -1
  101. package/src/components/resources/renderers/ClusterExternalSecretRenderer.tsx +0 -1
  102. package/src/components/resources/renderers/ClusterIssuerRenderer.tsx +0 -1
  103. package/src/components/resources/renderers/ConfigAuditReportRenderer.tsx +0 -1
  104. package/src/components/resources/renderers/ConfigMapRenderer.tsx +0 -1
  105. package/src/components/resources/renderers/CronJobRenderer.tsx +0 -1
  106. package/src/components/resources/renderers/CronWorkflowRenderer.tsx +0 -1
  107. package/src/components/resources/renderers/EventRenderer.tsx +0 -1
  108. package/src/components/resources/renderers/ExposedSecretReportRenderer.tsx +0 -1
  109. package/src/components/resources/renderers/ExternalSecretRenderer.tsx +0 -1
  110. package/src/components/resources/renderers/FluxHelmReleaseRenderer.tsx +0 -1
  111. package/src/components/resources/renderers/GRPCRouteRenderer.tsx +0 -1
  112. package/src/components/resources/renderers/GatewayClassRenderer.tsx +0 -1
  113. package/src/components/resources/renderers/GatewayRenderer.tsx +0 -1
  114. package/src/components/resources/renderers/GenericRenderer.tsx +0 -1
  115. package/src/components/resources/renderers/GitRepositoryRenderer.tsx +0 -1
  116. package/src/components/resources/renderers/HTTPRouteRenderer.tsx +0 -1
  117. package/src/components/resources/renderers/HelmRepositoryRenderer.tsx +0 -1
  118. package/src/components/resources/renderers/IngressClassRenderer.tsx +0 -1
  119. package/src/components/resources/renderers/IngressRenderer.tsx +0 -1
  120. package/src/components/resources/renderers/IstioAuthorizationPolicyRenderer.tsx +0 -1
  121. package/src/components/resources/renderers/IstioDestinationRuleRenderer.tsx +0 -1
  122. package/src/components/resources/renderers/IstioGatewayRenderer.tsx +0 -1
  123. package/src/components/resources/renderers/IstioPeerAuthenticationRenderer.tsx +0 -1
  124. package/src/components/resources/renderers/IstioServiceEntryRenderer.tsx +0 -1
  125. package/src/components/resources/renderers/IstioVirtualServiceRenderer.tsx +0 -1
  126. package/src/components/resources/renderers/JobRenderer.tsx +0 -1
  127. package/src/components/resources/renderers/KarpenterEC2NodeClassRenderer.tsx +0 -1
  128. package/src/components/resources/renderers/KarpenterNodeClaimRenderer.tsx +0 -1
  129. package/src/components/resources/renderers/KedaScaledJobRenderer.tsx +0 -1
  130. package/src/components/resources/renderers/KedaScaledObjectRenderer.tsx +0 -1
  131. package/src/components/resources/renderers/KedaTriggerAuthRenderer.tsx +0 -1
  132. package/src/components/resources/renderers/KnativeConfigurationRenderer.tsx +0 -1
  133. package/src/components/resources/renderers/KnativeEventingRenderer.tsx +0 -1
  134. package/src/components/resources/renderers/KnativeFlowRenderer.tsx +0 -1
  135. package/src/components/resources/renderers/KnativeNetworkingRenderer.tsx +0 -1
  136. package/src/components/resources/renderers/KnativeRevisionRenderer.tsx +0 -1
  137. package/src/components/resources/renderers/KnativeRouteRenderer.tsx +0 -1
  138. package/src/components/resources/renderers/KnativeServiceRenderer.tsx +0 -1
  139. package/src/components/resources/renderers/KnativeSourceRenderer.tsx +0 -1
  140. package/src/components/resources/renderers/KustomizationRenderer.tsx +0 -1
  141. package/src/components/resources/renderers/KyvernoPolicyReportRenderer.tsx +0 -1
  142. package/src/components/resources/renderers/LeaseRenderer.tsx +0 -1
  143. package/src/components/resources/renderers/NetworkPolicyRenderer.tsx +0 -1
  144. package/src/components/resources/renderers/OCIRepositoryRenderer.tsx +0 -1
  145. package/src/components/resources/renderers/OrderRenderer.tsx +0 -1
  146. package/src/components/resources/renderers/PersistentVolumeRenderer.tsx +0 -1
  147. package/src/components/resources/renderers/PodDisruptionBudgetRenderer.tsx +0 -1
  148. package/src/components/resources/renderers/PodMonitorRenderer.tsx +0 -1
  149. package/src/components/resources/renderers/PriorityClassRenderer.tsx +0 -1
  150. package/src/components/resources/renderers/PrometheusRuleRenderer.tsx +0 -1
  151. package/src/components/resources/renderers/ReplicaSetRenderer.tsx +0 -1
  152. package/src/components/resources/renderers/RuntimeClassRenderer.tsx +0 -1
  153. package/src/components/resources/renderers/SbomReportRenderer.tsx +0 -1
  154. package/src/components/resources/renderers/SealedSecretRenderer.tsx +0 -1
  155. package/src/components/resources/renderers/SecretRenderer.tsx +0 -1
  156. package/src/components/resources/renderers/SecretStoreRenderer.tsx +0 -1
  157. package/src/components/resources/renderers/ServiceMonitorRenderer.tsx +0 -1
  158. package/src/components/resources/renderers/SimpleRouteRenderer.tsx +0 -1
  159. package/src/components/resources/renderers/StorageClassRenderer.tsx +0 -1
  160. package/src/components/resources/renderers/TraefikIngressRouteRenderer.tsx +0 -1
  161. package/src/components/resources/renderers/VPARenderer.tsx +0 -1
  162. package/src/components/resources/renderers/VeleroScheduleRenderer.tsx +0 -1
  163. package/src/components/resources/renderers/VeleroVSLRenderer.tsx +0 -1
  164. package/src/components/resources/renderers/VulnerabilityReportRenderer.tsx +0 -1
  165. package/src/components/resources/renderers/WebhookConfigRenderer.tsx +0 -1
  166. package/src/components/resources/renderers/WorkflowRenderer.tsx +0 -1
  167. package/src/components/resources/renderers/WorkflowTemplateRenderer.tsx +0 -1
  168. package/src/components/resources/renderers/argo-cells.tsx +0 -1
  169. package/src/components/resources/renderers/certmanager-cells.tsx +0 -1
  170. package/src/components/resources/renderers/cnpg-cells.tsx +0 -1
  171. package/src/components/resources/renderers/eso-cells.tsx +0 -1
  172. package/src/components/resources/renderers/flux-cells.tsx +0 -1
  173. package/src/components/resources/renderers/index.ts +0 -94
  174. package/src/components/resources/renderers/istio-cells.tsx +0 -1
  175. package/src/components/resources/renderers/karpenter-cells.tsx +0 -1
  176. package/src/components/resources/renderers/keda-cells.tsx +0 -1
  177. package/src/components/resources/renderers/knative-cells.tsx +0 -1
  178. package/src/components/resources/renderers/kyverno-cells.tsx +0 -1
  179. package/src/components/resources/renderers/prometheus-cells.tsx +0 -1
  180. package/src/components/resources/renderers/traefik-cells.tsx +0 -1
  181. package/src/components/resources/renderers/trivy-cells.tsx +0 -1
  182. package/src/components/resources/renderers/trivy-shared.tsx +0 -1
  183. package/src/components/resources/renderers/velero-cells.tsx +0 -1
  184. package/src/components/resources/resource-utils-argo.ts +0 -2
  185. package/src/components/resources/resource-utils-certmanager.ts +0 -2
  186. package/src/components/resources/resource-utils-eso.ts +0 -2
  187. package/src/components/resources/resource-utils-flux.ts +0 -2
  188. package/src/components/resources/resource-utils-istio.ts +0 -2
  189. package/src/components/resources/resource-utils-karpenter.ts +0 -2
  190. package/src/components/resources/resource-utils-knative.ts +0 -2
  191. package/src/components/resources/resource-utils-kyverno.ts +0 -2
  192. package/src/components/resources/resource-utils-prometheus.ts +0 -2
  193. package/src/components/resources/resource-utils-traefik.ts +0 -1
  194. package/src/components/resources/resource-utils-trivy.ts +0 -2
  195. package/src/components/resources/resource-utils-velero.ts +0 -2
  196. package/src/components/shared/EditableYamlView.tsx +0 -24
  197. package/src/components/timeline/DiffViewer.tsx +0 -1
  198. package/src/components/traffic/index.ts +0 -3
  199. package/src/components/ui/ForceDeleteConfirmDialog.tsx +0 -1
  200. package/src/components/ui/MetricsChart.tsx +0 -1
  201. package/src/components/ui/ResourceBar.tsx +0 -1
@@ -1 +0,0 @@
1
- export { GitOpsActions, SyncButton, SuspendToggle } from '@skyhook-io/k8s-ui/components/gitops/GitOpsActions'
@@ -1 +0,0 @@
1
- export { GitOpsStatusBadge, SyncStatusBadge, HealthStatusBadge } from '@skyhook-io/k8s-ui/components/gitops/GitOpsStatusBadge'
@@ -1 +0,0 @@
1
- export { ManagedResourcesList, InventoryCount } from '@skyhook-io/k8s-ui/components/gitops/ManagedResourcesList'
@@ -1 +0,0 @@
1
- export { SyncCountdown, IntervalDisplay } from '@skyhook-io/k8s-ui/components/gitops/SyncCountdown'
@@ -1,4 +0,0 @@
1
- export { GitOpsStatusBadge, SyncStatusBadge, HealthStatusBadge } from './GitOpsStatusBadge'
2
- export { SyncCountdown, IntervalDisplay } from './SyncCountdown'
3
- export { ManagedResourcesList, InventoryCount } from './ManagedResourcesList'
4
- export { GitOpsActions, SyncButton, SuspendToggle } from './GitOpsActions'
@@ -1,69 +0,0 @@
1
- import { X, GitCompare } from 'lucide-react'
2
- import { PaneLoader, DiffLine, hasDiffBodyChange } from '@skyhook-io/k8s-ui'
3
-
4
- interface ManifestDiffViewerProps {
5
- diff: string
6
- isLoading: boolean
7
- revision1: number
8
- revision2: number
9
- onClose: () => void
10
- title?: string
11
- emptyLabel?: string
12
- }
13
-
14
- export function ManifestDiffViewer({ diff, isLoading, revision1, revision2, onClose, title, emptyLabel }: ManifestDiffViewerProps) {
15
- if (isLoading) {
16
- return <PaneLoader label="Computing diff…" className="h-32" />
17
- }
18
-
19
- if (!hasDiffBodyChange(diff)) {
20
- return (
21
- <div className="p-4">
22
- <div className="flex flex-col items-center justify-center h-32 text-theme-text-tertiary gap-2">
23
- <GitCompare className="w-8 h-8 text-theme-text-disabled" />
24
- <span>{emptyLabel || 'No differences found'}</span>
25
- </div>
26
- </div>
27
- )
28
- }
29
-
30
- return (
31
- <div className="p-4">
32
- <div className="flex items-center justify-between mb-3">
33
- <div className="flex items-center gap-2">
34
- <GitCompare className="w-4 h-4 text-theme-text-secondary" />
35
- <span className="text-sm font-medium text-theme-text-secondary">
36
- {title || `Comparing Revision ${revision1} → ${revision2}`}
37
- </span>
38
- </div>
39
- <button
40
- onClick={onClose}
41
- className="flex items-center gap-1 px-2 py-1 text-xs text-theme-text-secondary hover:text-theme-text-primary hover:bg-theme-elevated rounded"
42
- >
43
- <X className="w-3.5 h-3.5" />
44
- Close
45
- </button>
46
- </div>
47
-
48
- <div className="rounded-lg max-h-[calc(100vh-300px)] overflow-auto bg-theme-base/50 font-mono text-xs">
49
- <div className="p-3">
50
- {diff.split('\n').map((line, index) => (
51
- <DiffLine key={index} line={line} />
52
- ))}
53
- </div>
54
- </div>
55
-
56
- {/* Legend */}
57
- <div className="flex items-center gap-4 mt-3 text-xs text-theme-text-tertiary">
58
- <div className="flex items-center gap-1">
59
- <span className="w-3 h-3 bg-red-500/20 border border-red-500/50 rounded" />
60
- <span>Removed</span>
61
- </div>
62
- <div className="flex items-center gap-1">
63
- <span className="w-3 h-3 bg-green-500/20 border border-green-500/50 rounded" />
64
- <span>Added</span>
65
- </div>
66
- </div>
67
- </div>
68
- )
69
- }
@@ -1 +0,0 @@
1
- export { StructuredLogLine as JsonLogLine } from '@skyhook-io/k8s-ui'
@@ -1,2 +0,0 @@
1
- export { LogCore } from '@skyhook-io/k8s-ui'
2
- export type { DownloadFormat } from '@skyhook-io/k8s-ui'
@@ -1,2 +0,0 @@
1
- export { useLogBuffer, detectLogLevel } from '@skyhook-io/k8s-ui'
2
- export type { LogLevel, LogEntry } from '@skyhook-io/k8s-ui'
@@ -1 +0,0 @@
1
- export { useLogSearch } from '@skyhook-io/k8s-ui'
@@ -1,216 +0,0 @@
1
- import { memo } from 'react'
2
- import { X, ExternalLink, Copy, Check } from 'lucide-react'
3
- import { clsx } from 'clsx'
4
- import { useState, useCallback } from 'react'
5
- import type { TopologyNode, NodeKind, HealthStatus } from '../../types'
6
- import { getKindBadgeBordered, healthToSeverity, SEVERITY_BADGE_BORDERED } from '../../utils/badge-colors'
7
- import { Tooltip } from '../ui/Tooltip'
8
-
9
- interface ResourceDrawerProps {
10
- node: TopologyNode
11
- onClose: () => void
12
- }
13
-
14
- // Status badge colors using centralized severity
15
- function getStatusBadge(status: HealthStatus) {
16
- const severity = healthToSeverity(status)
17
- return SEVERITY_BADGE_BORDERED[severity]
18
- }
19
-
20
- // Format data value for display
21
- function formatValue(value: unknown): string {
22
- if (value === null || value === undefined) return '-'
23
- if (typeof value === 'boolean') return value ? 'Yes' : 'No'
24
- if (typeof value === 'object') return JSON.stringify(value, null, 2)
25
- return String(value)
26
- }
27
-
28
- // Get display fields for each kind
29
- function getDisplayFields(kind: NodeKind, data: Record<string, unknown>): Array<[string, unknown]> {
30
- const common: Array<[string, unknown]> = data.namespace
31
- ? [['Namespace', data.namespace]]
32
- : []
33
-
34
- switch (kind) {
35
- case 'Pod':
36
- return [
37
- ...common,
38
- ['Phase', data.phase],
39
- ['Restarts', data.restarts],
40
- ['Containers', data.containers],
41
- ['Node', data.nodeName],
42
- ]
43
- case 'Deployment':
44
- case 'DaemonSet':
45
- case 'StatefulSet':
46
- return [
47
- ...common,
48
- ['Ready', `${data.readyReplicas ?? 0}/${data.totalReplicas ?? 0}`],
49
- ['Strategy', data.strategy],
50
- ]
51
- case 'ReplicaSet':
52
- return [
53
- ...common,
54
- ['Ready', `${data.readyReplicas ?? 0}/${data.totalReplicas ?? 0}`],
55
- ]
56
- case 'Service':
57
- return [
58
- ...common,
59
- ['Type', data.type],
60
- ['Cluster IP', data.clusterIP],
61
- ['Port', data.port],
62
- ]
63
- case 'Ingress':
64
- return [
65
- ...common,
66
- ['Hostname', data.hostname],
67
- ['TLS', data.tls],
68
- ]
69
- case 'Gateway':
70
- return [
71
- ...common,
72
- ['Listeners', data.listenerCount],
73
- ['Addresses', Array.isArray(data.addresses) ? (data.addresses as string[]).join(', ') : '-'],
74
- ]
75
- case 'HTTPRoute':
76
- case 'GRPCRoute':
77
- case 'TCPRoute':
78
- case 'TLSRoute':
79
- return [
80
- ...common,
81
- ['Hostnames', Array.isArray(data.hostnames) ? (data.hostnames as string[]).join(', ') : '-'],
82
- ['Rules', data.rulesCount],
83
- ]
84
- case 'ConfigMap':
85
- return [
86
- ...common,
87
- ['Keys', data.keys],
88
- ]
89
- case 'HorizontalPodAutoscaler':
90
- return [
91
- ...common,
92
- ['Min Replicas', data.minReplicas],
93
- ['Max Replicas', data.maxReplicas],
94
- ['Current', data.current],
95
- ]
96
- default:
97
- return common
98
- }
99
- }
100
-
101
- export const ResourceDrawer = memo(function ResourceDrawer({
102
- node,
103
- onClose,
104
- }: ResourceDrawerProps) {
105
- const [copied, setCopied] = useState(false)
106
-
107
- const copyName = useCallback(() => {
108
- navigator.clipboard.writeText(node.name)
109
- setCopied(true)
110
- setTimeout(() => setCopied(false), 2000)
111
- }, [node.name])
112
-
113
- const fields = getDisplayFields(node.kind, node.data)
114
-
115
- return (
116
- <>
117
- {/* Backdrop */}
118
- <div
119
- className="fixed inset-0 bg-black/50 z-40"
120
- onClick={onClose}
121
- />
122
-
123
- {/* Drawer */}
124
- <div className="fixed right-0 top-0 bottom-0 w-96 bg-theme-surface border-l border-theme-border z-50 flex flex-col shadow-drawer">
125
- {/* Header */}
126
- <div className="flex items-start justify-between p-4 border-b border-theme-border">
127
- <div className="flex-1 min-w-0">
128
- <div className="flex items-center gap-2 mb-2">
129
- <span
130
- className={clsx(
131
- 'badge',
132
- getKindBadgeBordered(node.kind)
133
- )}
134
- >
135
- {node.kind}
136
- </span>
137
- <span
138
- className={clsx(
139
- 'badge',
140
- getStatusBadge(node.status)
141
- )}
142
- >
143
- {node.status}
144
- </span>
145
- </div>
146
- <div className="flex items-center gap-2">
147
- <h2 className="text-lg font-semibold text-theme-text-primary truncate">
148
- {node.name}
149
- </h2>
150
- <Tooltip content="Copy name">
151
- <button
152
- onClick={copyName}
153
- className="p-1 text-theme-text-secondary hover:text-theme-text-primary hover:bg-theme-elevated rounded"
154
- >
155
- {copied ? (
156
- <Check className="w-4 h-4 text-green-400" />
157
- ) : (
158
- <Copy className="w-4 h-4" />
159
- )}
160
- </button>
161
- </Tooltip>
162
- </div>
163
- </div>
164
- <button
165
- onClick={onClose}
166
- className="p-2 text-theme-text-secondary hover:text-theme-text-primary hover:bg-theme-elevated rounded"
167
- >
168
- <X className="w-5 h-5" />
169
- </button>
170
- </div>
171
-
172
- {/* Content */}
173
- <div className="flex-1 overflow-y-auto p-4">
174
- {/* Details */}
175
- <section className="mb-6">
176
- <h3 className="text-sm font-medium text-theme-text-secondary uppercase tracking-wide mb-3">
177
- Details
178
- </h3>
179
- <div className="space-y-3">
180
- {fields.map(([label, value]) => (
181
- <div key={label as string}>
182
- <dt className="text-xs text-theme-text-tertiary mb-0.5">{label as string}</dt>
183
- <dd className="text-sm text-theme-text-primary">{formatValue(value)}</dd>
184
- </div>
185
- ))}
186
- </div>
187
- </section>
188
-
189
- {/* Raw data */}
190
- <section>
191
- <h3 className="text-sm font-medium text-theme-text-secondary uppercase tracking-wide mb-3">
192
- Raw Data
193
- </h3>
194
- <pre className="bg-theme-base rounded-lg p-3 text-xs text-theme-text-secondary overflow-x-auto">
195
- {JSON.stringify(node.data, null, 2)}
196
- </pre>
197
- </section>
198
- </div>
199
-
200
- {/* Footer */}
201
- <div className="p-4 border-t border-theme-border">
202
- <button
203
- onClick={() => {
204
- // TODO: Open kubectl command or link to dashboard
205
- console.log('View in dashboard:', node)
206
- }}
207
- className="w-full flex items-center justify-center gap-2 px-4 py-2 btn-brand rounded-lg"
208
- >
209
- <ExternalLink className="w-4 h-4" />
210
- View Full Resource
211
- </button>
212
- </div>
213
- </div>
214
- </>
215
- )
216
- })
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/ui/drawer-components'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/AlertRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/CNPGBackupRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/CNPGPoolerRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/CNPGScheduledBackupRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/CertificateRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/CertificateRequestRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ChallengeRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ClusterComplianceReportRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ClusterExternalSecretRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ClusterIssuerRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ConfigAuditReportRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ConfigMapRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/CronJobRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/CronWorkflowRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/EventRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ExposedSecretReportRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ExternalSecretRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/FluxHelmReleaseRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/GRPCRouteRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/GatewayClassRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/GatewayRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/GenericRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/GitRepositoryRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/HTTPRouteRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/HelmRepositoryRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IngressClassRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IngressRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IstioAuthorizationPolicyRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IstioDestinationRuleRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IstioGatewayRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IstioPeerAuthenticationRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IstioServiceEntryRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/IstioVirtualServiceRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/JobRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KarpenterEC2NodeClassRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KarpenterNodeClaimRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KedaScaledJobRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KedaScaledObjectRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KedaTriggerAuthRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeConfigurationRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeEventingRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeFlowRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeNetworkingRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeRevisionRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeRouteRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeServiceRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KnativeSourceRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KustomizationRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/KyvernoPolicyReportRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/LeaseRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/NetworkPolicyRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/OCIRepositoryRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/OrderRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/PersistentVolumeRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/PodDisruptionBudgetRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/PodMonitorRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/PriorityClassRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/PrometheusRuleRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ReplicaSetRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/RuntimeClassRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/SbomReportRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/SealedSecretRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/SecretRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/SecretStoreRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/ServiceMonitorRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/SimpleRouteRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/StorageClassRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/TraefikIngressRouteRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/VPARenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/VeleroScheduleRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/VeleroVSLRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/VulnerabilityReportRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/WebhookConfigRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/WorkflowRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/WorkflowTemplateRenderer'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/argo-cells'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/certmanager-cells'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/cnpg-cells'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/eso-cells'
@@ -1 +0,0 @@
1
- export * from '@skyhook-io/k8s-ui/components/resources/renderers/flux-cells'