@skyhook-io/k8s-ui 1.0.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 (193) hide show
  1. package/package.json +63 -0
  2. package/src/components/dock/BottomDock.tsx +204 -0
  3. package/src/components/dock/DockContext.tsx +212 -0
  4. package/src/components/dock/TerminalTab.tsx +333 -0
  5. package/src/components/dock/index.ts +3 -0
  6. package/src/components/gitops/GitOpsActions.tsx +227 -0
  7. package/src/components/gitops/GitOpsStatusBadge.tsx +221 -0
  8. package/src/components/gitops/ManagedResourcesList.tsx +210 -0
  9. package/src/components/gitops/SyncCountdown.tsx +146 -0
  10. package/src/components/gitops/index.ts +4 -0
  11. package/src/components/logs/JsonLogLine.tsx +90 -0
  12. package/src/components/logs/LogCore.tsx +553 -0
  13. package/src/components/logs/LogToolbarSelects.tsx +74 -0
  14. package/src/components/logs/LogsViewer.tsx +146 -0
  15. package/src/components/logs/WorkloadLogsViewer.tsx +263 -0
  16. package/src/components/logs/index.ts +13 -0
  17. package/src/components/logs/useLogBuffer.ts +138 -0
  18. package/src/components/logs/useLogSearch.ts +151 -0
  19. package/src/components/logs/useLogStream.ts +61 -0
  20. package/src/components/resources/ResourcesView.tsx +5494 -0
  21. package/src/components/resources/index.ts +17 -0
  22. package/src/components/resources/renderers/AlertRenderer.tsx +166 -0
  23. package/src/components/resources/renderers/ArgoApplicationRenderer.tsx +233 -0
  24. package/src/components/resources/renderers/CNPGBackupRenderer.tsx +89 -0
  25. package/src/components/resources/renderers/CNPGClusterRenderer.tsx +194 -0
  26. package/src/components/resources/renderers/CNPGPoolerRenderer.tsx +79 -0
  27. package/src/components/resources/renderers/CNPGScheduledBackupRenderer.tsx +68 -0
  28. package/src/components/resources/renderers/CertificateRenderer.tsx +209 -0
  29. package/src/components/resources/renderers/CertificateRequestRenderer.tsx +123 -0
  30. package/src/components/resources/renderers/ChallengeRenderer.tsx +111 -0
  31. package/src/components/resources/renderers/ClusterComplianceReportRenderer.tsx +164 -0
  32. package/src/components/resources/renderers/ClusterExternalSecretRenderer.tsx +140 -0
  33. package/src/components/resources/renderers/ClusterIssuerRenderer.tsx +153 -0
  34. package/src/components/resources/renderers/ConfigAuditReportRenderer.tsx +221 -0
  35. package/src/components/resources/renderers/ConfigMapRenderer.tsx +124 -0
  36. package/src/components/resources/renderers/CronJobRenderer.tsx +86 -0
  37. package/src/components/resources/renderers/EventRenderer.tsx +175 -0
  38. package/src/components/resources/renderers/ExposedSecretReportRenderer.tsx +119 -0
  39. package/src/components/resources/renderers/ExternalSecretRenderer.tsx +172 -0
  40. package/src/components/resources/renderers/FluxHelmReleaseRenderer.tsx +242 -0
  41. package/src/components/resources/renderers/GRPCRouteRenderer.tsx +263 -0
  42. package/src/components/resources/renderers/GatewayClassRenderer.tsx +68 -0
  43. package/src/components/resources/renderers/GatewayRenderer.tsx +218 -0
  44. package/src/components/resources/renderers/GenericRenderer.tsx +476 -0
  45. package/src/components/resources/renderers/GitRepositoryRenderer.tsx +154 -0
  46. package/src/components/resources/renderers/HPARenderer.tsx +164 -0
  47. package/src/components/resources/renderers/HTTPRouteRenderer.tsx +303 -0
  48. package/src/components/resources/renderers/HelmRepositoryRenderer.tsx +167 -0
  49. package/src/components/resources/renderers/IngressClassRenderer.tsx +49 -0
  50. package/src/components/resources/renderers/IngressRenderer.tsx +104 -0
  51. package/src/components/resources/renderers/IstioAuthorizationPolicyRenderer.tsx +175 -0
  52. package/src/components/resources/renderers/IstioDestinationRuleRenderer.tsx +176 -0
  53. package/src/components/resources/renderers/IstioGatewayRenderer.tsx +125 -0
  54. package/src/components/resources/renderers/IstioPeerAuthenticationRenderer.tsx +84 -0
  55. package/src/components/resources/renderers/IstioServiceEntryRenderer.tsx +112 -0
  56. package/src/components/resources/renderers/IstioVirtualServiceRenderer.tsx +288 -0
  57. package/src/components/resources/renderers/JobRenderer.tsx +103 -0
  58. package/src/components/resources/renderers/KarpenterEC2NodeClassRenderer.tsx +157 -0
  59. package/src/components/resources/renderers/KarpenterNodeClaimRenderer.tsx +188 -0
  60. package/src/components/resources/renderers/KarpenterNodePoolRenderer.tsx +148 -0
  61. package/src/components/resources/renderers/KedaScaledJobRenderer.tsx +90 -0
  62. package/src/components/resources/renderers/KedaScaledObjectRenderer.tsx +136 -0
  63. package/src/components/resources/renderers/KedaTriggerAuthRenderer.tsx +151 -0
  64. package/src/components/resources/renderers/KnativeConfigurationRenderer.tsx +70 -0
  65. package/src/components/resources/renderers/KnativeEventingRenderer.tsx +309 -0
  66. package/src/components/resources/renderers/KnativeFlowRenderer.tsx +142 -0
  67. package/src/components/resources/renderers/KnativeNetworkingRenderer.tsx +232 -0
  68. package/src/components/resources/renderers/KnativeRevisionRenderer.tsx +97 -0
  69. package/src/components/resources/renderers/KnativeRouteRenderer.tsx +74 -0
  70. package/src/components/resources/renderers/KnativeServiceRenderer.tsx +138 -0
  71. package/src/components/resources/renderers/KnativeSourceRenderer.tsx +220 -0
  72. package/src/components/resources/renderers/KustomizationRenderer.tsx +151 -0
  73. package/src/components/resources/renderers/KyvernoPolicyReportRenderer.tsx +352 -0
  74. package/src/components/resources/renderers/LeaseRenderer.tsx +93 -0
  75. package/src/components/resources/renderers/NetworkPolicyRenderer.tsx +208 -0
  76. package/src/components/resources/renderers/NodeRenderer.tsx +282 -0
  77. package/src/components/resources/renderers/OCIRepositoryRenderer.tsx +153 -0
  78. package/src/components/resources/renderers/OrderRenderer.tsx +108 -0
  79. package/src/components/resources/renderers/PVCRenderer.tsx +98 -0
  80. package/src/components/resources/renderers/PersistentVolumeRenderer.tsx +138 -0
  81. package/src/components/resources/renderers/PodDisruptionBudgetRenderer.tsx +126 -0
  82. package/src/components/resources/renderers/PodMonitorRenderer.tsx +63 -0
  83. package/src/components/resources/renderers/PodRenderer.tsx +677 -0
  84. package/src/components/resources/renderers/PriorityClassRenderer.tsx +50 -0
  85. package/src/components/resources/renderers/PrometheusRuleRenderer.tsx +62 -0
  86. package/src/components/resources/renderers/ReplicaSetRenderer.tsx +71 -0
  87. package/src/components/resources/renderers/RoleBindingRenderer.tsx +97 -0
  88. package/src/components/resources/renderers/RoleRenderer.tsx +192 -0
  89. package/src/components/resources/renderers/RolloutRenderer.tsx +227 -0
  90. package/src/components/resources/renderers/RuntimeClassRenderer.tsx +75 -0
  91. package/src/components/resources/renderers/SbomReportRenderer.tsx +98 -0
  92. package/src/components/resources/renderers/SealedSecretRenderer.tsx +121 -0
  93. package/src/components/resources/renderers/SecretRenderer.tsx +321 -0
  94. package/src/components/resources/renderers/SecretStoreRenderer.tsx +111 -0
  95. package/src/components/resources/renderers/ServiceAccountRenderer.tsx +81 -0
  96. package/src/components/resources/renderers/ServiceMonitorRenderer.tsx +65 -0
  97. package/src/components/resources/renderers/ServiceRenderer.tsx +98 -0
  98. package/src/components/resources/renderers/SimpleRouteRenderer.tsx +195 -0
  99. package/src/components/resources/renderers/StorageClassRenderer.tsx +82 -0
  100. package/src/components/resources/renderers/TraefikIngressRouteRenderer.tsx +257 -0
  101. package/src/components/resources/renderers/VPARenderer.tsx +193 -0
  102. package/src/components/resources/renderers/VeleroBSLRenderer.tsx +73 -0
  103. package/src/components/resources/renderers/VeleroBackupRenderer.tsx +193 -0
  104. package/src/components/resources/renderers/VeleroRestoreRenderer.tsx +161 -0
  105. package/src/components/resources/renderers/VeleroScheduleRenderer.tsx +134 -0
  106. package/src/components/resources/renderers/VeleroVSLRenderer.tsx +36 -0
  107. package/src/components/resources/renderers/VulnerabilityReportRenderer.tsx +347 -0
  108. package/src/components/resources/renderers/WebhookConfigRenderer.tsx +156 -0
  109. package/src/components/resources/renderers/WorkflowRenderer.tsx +202 -0
  110. package/src/components/resources/renderers/WorkflowTemplateRenderer.tsx +91 -0
  111. package/src/components/resources/renderers/WorkloadRenderer.tsx +311 -0
  112. package/src/components/resources/renderers/argo-cells.tsx +118 -0
  113. package/src/components/resources/renderers/certmanager-cells.tsx +164 -0
  114. package/src/components/resources/renderers/cnpg-cells.tsx +161 -0
  115. package/src/components/resources/renderers/eso-cells.tsx +115 -0
  116. package/src/components/resources/renderers/flux-cells.tsx +253 -0
  117. package/src/components/resources/renderers/index.ts +105 -0
  118. package/src/components/resources/renderers/istio-cells.tsx +210 -0
  119. package/src/components/resources/renderers/karpenter-cells.tsx +107 -0
  120. package/src/components/resources/renderers/keda-cells.tsx +94 -0
  121. package/src/components/resources/renderers/knative-cells.tsx +396 -0
  122. package/src/components/resources/renderers/kyverno-cells.tsx +85 -0
  123. package/src/components/resources/renderers/prometheus-cells.tsx +74 -0
  124. package/src/components/resources/renderers/traefik-cells.tsx +120 -0
  125. package/src/components/resources/renderers/trivy-cells.tsx +153 -0
  126. package/src/components/resources/renderers/trivy-shared.tsx +67 -0
  127. package/src/components/resources/renderers/velero-cells.tsx +164 -0
  128. package/src/components/resources/resource-utils-argo.ts +155 -0
  129. package/src/components/resources/resource-utils-certmanager.ts +198 -0
  130. package/src/components/resources/resource-utils-cnpg.ts +344 -0
  131. package/src/components/resources/resource-utils-eso.ts +385 -0
  132. package/src/components/resources/resource-utils-flux.ts +186 -0
  133. package/src/components/resources/resource-utils-istio.ts +372 -0
  134. package/src/components/resources/resource-utils-karpenter.ts +150 -0
  135. package/src/components/resources/resource-utils-keda.ts +203 -0
  136. package/src/components/resources/resource-utils-knative.ts +218 -0
  137. package/src/components/resources/resource-utils-kyverno.ts +224 -0
  138. package/src/components/resources/resource-utils-prometheus.ts +159 -0
  139. package/src/components/resources/resource-utils-traefik.ts +180 -0
  140. package/src/components/resources/resource-utils-trivy.ts +146 -0
  141. package/src/components/resources/resource-utils-velero.ts +293 -0
  142. package/src/components/resources/resource-utils.ts +1558 -0
  143. package/src/components/shared/EditableYamlView.tsx +302 -0
  144. package/src/components/shared/ResourceActionsBar.tsx +924 -0
  145. package/src/components/shared/ResourceRendererDispatch.tsx +557 -0
  146. package/src/components/shared/index.ts +3 -0
  147. package/src/components/timeline/index.ts +1 -0
  148. package/src/components/timeline/shared.tsx +614 -0
  149. package/src/components/topology/GroupNode.tsx +198 -0
  150. package/src/components/topology/K8sResourceNode.tsx +440 -0
  151. package/src/components/topology/TopologyControls.tsx +62 -0
  152. package/src/components/topology/TopologyFilterSidebar.tsx +377 -0
  153. package/src/components/topology/TopologyGraph.tsx +748 -0
  154. package/src/components/topology/TopologySearch.tsx +304 -0
  155. package/src/components/topology/index.ts +7 -0
  156. package/src/components/topology/layout.ts +734 -0
  157. package/src/components/topology/layout.worker.ts +272 -0
  158. package/src/components/topology/topology.css +129 -0
  159. package/src/components/ui/CodeViewer.tsx +451 -0
  160. package/src/components/ui/ConfirmDialog.tsx +188 -0
  161. package/src/components/ui/ForceDeleteConfirmDialog.tsx +57 -0
  162. package/src/components/ui/HealthRing.tsx +72 -0
  163. package/src/components/ui/MetricsChart.tsx +259 -0
  164. package/src/components/ui/ResourceBar.tsx +68 -0
  165. package/src/components/ui/Toast.tsx +225 -0
  166. package/src/components/ui/Tooltip.tsx +165 -0
  167. package/src/components/ui/YamlEditor.tsx +280 -0
  168. package/src/components/ui/drawer-components.tsx +792 -0
  169. package/src/components/ui/index.ts +10 -0
  170. package/src/components/workload/ResourceDetailDrawer.tsx +158 -0
  171. package/src/components/workload/WorkloadView.tsx +1109 -0
  172. package/src/components/workload/index.ts +2 -0
  173. package/src/hooks/index.ts +9 -0
  174. package/src/hooks/useAnimatedUnmount.ts +30 -0
  175. package/src/hooks/useKeyboardShortcuts.tsx +336 -0
  176. package/src/hooks/useRefreshAnimation.ts +58 -0
  177. package/src/index.ts +35 -0
  178. package/src/types/core.ts +894 -0
  179. package/src/types/gitops.ts +458 -0
  180. package/src/types/index.ts +2 -0
  181. package/src/utils/animation.ts +40 -0
  182. package/src/utils/api-resources.ts +185 -0
  183. package/src/utils/badge-colors.ts +399 -0
  184. package/src/utils/context-name.ts +72 -0
  185. package/src/utils/download.ts +19 -0
  186. package/src/utils/format.ts +233 -0
  187. package/src/utils/index.ts +10 -0
  188. package/src/utils/log-format.ts +300 -0
  189. package/src/utils/navigation.ts +119 -0
  190. package/src/utils/resource-hierarchy.ts +630 -0
  191. package/src/utils/resource-icons.ts +206 -0
  192. package/src/vite-env.d.ts +1 -0
  193. package/tsconfig.json +24 -0
@@ -0,0 +1,253 @@
1
+ // FluxCD cell components for ResourcesView table — extracted from ResourcesView.tsx
2
+
3
+ import { clsx } from 'clsx'
4
+ import { Tooltip } from '../../ui/Tooltip'
5
+ import {
6
+ getGitRepositoryUrl,
7
+ getGitRepositoryRef,
8
+ getGitRepositoryStatus,
9
+ getGitRepositoryRevision,
10
+ getOCIRepositoryUrl,
11
+ getOCIRepositoryRef,
12
+ getOCIRepositoryStatus,
13
+ getOCIRepositoryRevision,
14
+ getHelmRepositoryUrl,
15
+ getHelmRepositoryType,
16
+ getHelmRepositoryStatus,
17
+ getKustomizationSource,
18
+ getKustomizationPath,
19
+ getKustomizationStatus,
20
+ getKustomizationInventory,
21
+ getFluxHelmReleaseChart,
22
+ getFluxHelmReleaseVersion,
23
+ getFluxHelmReleaseStatus,
24
+ getFluxHelmReleaseRevision,
25
+ getFluxAlertProvider,
26
+ getFluxAlertEventCount,
27
+ getFluxAlertStatus,
28
+ formatAge,
29
+ } from '../resource-utils'
30
+
31
+ export function GitRepositoryCell({ resource, column }: { resource: any; column: string }) {
32
+ switch (column) {
33
+ case 'url': {
34
+ const url = getGitRepositoryUrl(resource)
35
+ return (
36
+ <Tooltip content={url}>
37
+ <span className="text-sm text-theme-text-secondary truncate block">{url}</span>
38
+ </Tooltip>
39
+ )
40
+ }
41
+ case 'ref': {
42
+ const ref = getGitRepositoryRef(resource)
43
+ return <span className="text-sm text-theme-text-secondary">{ref}</span>
44
+ }
45
+ case 'status': {
46
+ const status = getGitRepositoryStatus(resource)
47
+ return (
48
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
49
+ {status.text}
50
+ </span>
51
+ )
52
+ }
53
+ case 'revision': {
54
+ const revision = getGitRepositoryRevision(resource)
55
+ return (
56
+ <span className="text-sm text-theme-text-tertiary font-mono">{revision}</span>
57
+ )
58
+ }
59
+ default:
60
+ return <span className="text-sm text-theme-text-tertiary">-</span>
61
+ }
62
+ }
63
+
64
+ export function OCIRepositoryCell({ resource, column }: { resource: any; column: string }) {
65
+ switch (column) {
66
+ case 'url': {
67
+ const url = getOCIRepositoryUrl(resource)
68
+ return (
69
+ <Tooltip content={url}>
70
+ <span className="text-sm text-theme-text-secondary truncate block">{url}</span>
71
+ </Tooltip>
72
+ )
73
+ }
74
+ case 'ref': {
75
+ const ref = getOCIRepositoryRef(resource)
76
+ return <span className="text-sm text-theme-text-secondary">{ref}</span>
77
+ }
78
+ case 'status': {
79
+ const status = getOCIRepositoryStatus(resource)
80
+ return (
81
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
82
+ {status.text}
83
+ </span>
84
+ )
85
+ }
86
+ case 'revision': {
87
+ const revision = getOCIRepositoryRevision(resource)
88
+ return (
89
+ <span className="text-sm text-theme-text-tertiary font-mono">{revision}</span>
90
+ )
91
+ }
92
+ default:
93
+ return <span className="text-sm text-theme-text-tertiary">-</span>
94
+ }
95
+ }
96
+
97
+ export function HelmRepositoryCell({ resource, column }: { resource: any; column: string }) {
98
+ switch (column) {
99
+ case 'url': {
100
+ const url = getHelmRepositoryUrl(resource)
101
+ return (
102
+ <Tooltip content={url}>
103
+ <span className="text-sm text-theme-text-secondary truncate block">{url}</span>
104
+ </Tooltip>
105
+ )
106
+ }
107
+ case 'type': {
108
+ const type = getHelmRepositoryType(resource)
109
+ return <span className="text-sm text-theme-text-secondary">{type}</span>
110
+ }
111
+ case 'status': {
112
+ const status = getHelmRepositoryStatus(resource)
113
+ return (
114
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
115
+ {status.text}
116
+ </span>
117
+ )
118
+ }
119
+ default:
120
+ return <span className="text-sm text-theme-text-tertiary">-</span>
121
+ }
122
+ }
123
+
124
+ export function KustomizationCell({ resource, column }: { resource: any; column: string }) {
125
+ switch (column) {
126
+ case 'source': {
127
+ const source = getKustomizationSource(resource)
128
+ return (
129
+ <Tooltip content={source}>
130
+ <span className="text-sm text-theme-text-secondary truncate block">{source}</span>
131
+ </Tooltip>
132
+ )
133
+ }
134
+ case 'path': {
135
+ const path = getKustomizationPath(resource)
136
+ return <span className="text-sm text-theme-text-tertiary font-mono">{path}</span>
137
+ }
138
+ case 'status': {
139
+ const status = getKustomizationStatus(resource)
140
+ return (
141
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
142
+ {status.text}
143
+ </span>
144
+ )
145
+ }
146
+ case 'revision': {
147
+ const revision = resource.status?.lastAppliedRevision || resource.status?.lastAttemptedRevision || ''
148
+ if (!revision) return <span className="text-sm text-theme-text-tertiary">-</span>
149
+ // Format: "refs/heads/main@sha1:abc123..." -> "main@abc123"
150
+ const formatted = revision
151
+ .replace(/^refs\/heads\//, '')
152
+ .replace(/^refs\/tags\//, '')
153
+ .replace(/@sha1:([a-f0-9]{8})[a-f0-9]*$/, '@$1')
154
+ return (
155
+ <Tooltip content={revision}>
156
+ <span className="text-sm text-theme-text-secondary font-mono truncate block">{formatted}</span>
157
+ </Tooltip>
158
+ )
159
+ }
160
+ case 'inventory': {
161
+ const count = getKustomizationInventory(resource)
162
+ return (
163
+ <span className="text-sm text-theme-text-secondary">
164
+ {count > 0 ? count : '-'}
165
+ </span>
166
+ )
167
+ }
168
+ case 'lastUpdated': {
169
+ // Kustomization uses history[0].lastReconciled or conditions[Ready].lastTransitionTime
170
+ const lastReconcile = resource.status?.history?.[0]?.lastReconciled ||
171
+ resource.status?.conditions?.find((c: any) => c.type === 'Ready')?.lastTransitionTime
172
+ return (
173
+ <span className="text-sm text-theme-text-secondary">
174
+ {lastReconcile ? formatAge(lastReconcile) : '-'}
175
+ </span>
176
+ )
177
+ }
178
+ default:
179
+ return <span className="text-sm text-theme-text-tertiary">-</span>
180
+ }
181
+ }
182
+
183
+ export function FluxHelmReleaseCell({ resource, column }: { resource: any; column: string }) {
184
+ switch (column) {
185
+ case 'chart': {
186
+ const chart = getFluxHelmReleaseChart(resource)
187
+ return (
188
+ <Tooltip content={chart}>
189
+ <span className="text-sm text-theme-text-secondary truncate block">{chart}</span>
190
+ </Tooltip>
191
+ )
192
+ }
193
+ case 'version': {
194
+ const version = getFluxHelmReleaseVersion(resource)
195
+ return <span className="text-sm text-theme-text-secondary">{version}</span>
196
+ }
197
+ case 'status': {
198
+ const status = getFluxHelmReleaseStatus(resource)
199
+ return (
200
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
201
+ {status.text}
202
+ </span>
203
+ )
204
+ }
205
+ case 'revision': {
206
+ const revision = getFluxHelmReleaseRevision(resource)
207
+ return (
208
+ <span className="text-sm text-theme-text-tertiary">
209
+ {revision > 0 ? `#${revision}` : '-'}
210
+ </span>
211
+ )
212
+ }
213
+ case 'lastUpdated': {
214
+ // HelmRelease uses history[0].lastDeployed or conditions[Ready].lastTransitionTime
215
+ const lastReconcile = resource.status?.history?.[0]?.lastDeployed ||
216
+ resource.status?.conditions?.find((c: any) => c.type === 'Ready')?.lastTransitionTime
217
+ return (
218
+ <span className="text-sm text-theme-text-secondary">
219
+ {lastReconcile ? formatAge(lastReconcile) : '-'}
220
+ </span>
221
+ )
222
+ }
223
+ default:
224
+ return <span className="text-sm text-theme-text-tertiary">-</span>
225
+ }
226
+ }
227
+
228
+ export function FluxAlertCell({ resource, column }: { resource: any; column: string }) {
229
+ switch (column) {
230
+ case 'provider': {
231
+ const provider = getFluxAlertProvider(resource)
232
+ return <span className="text-sm text-theme-text-secondary">{provider}</span>
233
+ }
234
+ case 'events': {
235
+ const count = getFluxAlertEventCount(resource)
236
+ return (
237
+ <span className="text-sm text-theme-text-secondary">
238
+ {count > 0 ? count : '-'}
239
+ </span>
240
+ )
241
+ }
242
+ case 'status': {
243
+ const status = getFluxAlertStatus(resource)
244
+ return (
245
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
246
+ {status.text}
247
+ </span>
248
+ )
249
+ }
250
+ default:
251
+ return <span className="text-sm text-theme-text-tertiary">-</span>
252
+ }
253
+ }
@@ -0,0 +1,105 @@
1
+ export * from './AlertRenderer'
2
+ export * from './ArgoApplicationRenderer'
3
+ export * from './argo-cells'
4
+ export * from './CertificateRenderer'
5
+ export * from './CertificateRequestRenderer'
6
+ export * from './certmanager-cells'
7
+ export * from './ChallengeRenderer'
8
+ export * from './ClusterComplianceReportRenderer'
9
+ export * from './ClusterExternalSecretRenderer'
10
+ export * from './ClusterIssuerRenderer'
11
+ export * from './cnpg-cells'
12
+ export * from './CNPGBackupRenderer'
13
+ export * from './CNPGClusterRenderer'
14
+ export * from './CNPGPoolerRenderer'
15
+ export * from './CNPGScheduledBackupRenderer'
16
+ export * from './ConfigAuditReportRenderer'
17
+ export * from './ConfigMapRenderer'
18
+ export * from './CronJobRenderer'
19
+ export * from './eso-cells'
20
+ export * from './EventRenderer'
21
+ export * from './ExposedSecretReportRenderer'
22
+ export * from './ExternalSecretRenderer'
23
+ export * from './flux-cells'
24
+ export * from './FluxHelmReleaseRenderer'
25
+ export * from './GatewayClassRenderer'
26
+ export * from './GatewayRenderer'
27
+ export * from './GenericRenderer'
28
+ export * from './GitRepositoryRenderer'
29
+ export * from './GRPCRouteRenderer'
30
+ export * from './HelmRepositoryRenderer'
31
+ export * from './HPARenderer'
32
+ export * from './HTTPRouteRenderer'
33
+ export * from './IngressClassRenderer'
34
+ export * from './IngressRenderer'
35
+ export * from './istio-cells'
36
+ export * from './IstioAuthorizationPolicyRenderer'
37
+ export * from './IstioDestinationRuleRenderer'
38
+ export * from './IstioGatewayRenderer'
39
+ export * from './IstioPeerAuthenticationRenderer'
40
+ export * from './IstioServiceEntryRenderer'
41
+ export * from './IstioVirtualServiceRenderer'
42
+ export * from './JobRenderer'
43
+ export * from './karpenter-cells'
44
+ export * from './KarpenterEC2NodeClassRenderer'
45
+ export * from './KarpenterNodeClaimRenderer'
46
+ export * from './KarpenterNodePoolRenderer'
47
+ export * from './keda-cells'
48
+ export * from './KedaScaledJobRenderer'
49
+ export * from './KedaScaledObjectRenderer'
50
+ export * from './KedaTriggerAuthRenderer'
51
+ export * from './knative-cells'
52
+ export * from './KnativeConfigurationRenderer'
53
+ export * from './KnativeEventingRenderer'
54
+ export * from './KnativeFlowRenderer'
55
+ export * from './KnativeNetworkingRenderer'
56
+ export * from './KnativeRevisionRenderer'
57
+ export * from './KnativeRouteRenderer'
58
+ export * from './KnativeServiceRenderer'
59
+ export * from './KnativeSourceRenderer'
60
+ export * from './KustomizationRenderer'
61
+ export * from './kyverno-cells'
62
+ export * from './KyvernoPolicyReportRenderer'
63
+ export * from './LeaseRenderer'
64
+ export * from './NetworkPolicyRenderer'
65
+ export * from './NodeRenderer'
66
+ export * from './OCIRepositoryRenderer'
67
+ export * from './OrderRenderer'
68
+ export * from './PersistentVolumeRenderer'
69
+ export * from './PodDisruptionBudgetRenderer'
70
+ export * from './PodRenderer'
71
+ export * from './PodMonitorRenderer'
72
+ export * from './PriorityClassRenderer'
73
+ export * from './prometheus-cells'
74
+ export * from './PrometheusRuleRenderer'
75
+ export * from './PVCRenderer'
76
+ export * from './ReplicaSetRenderer'
77
+ export * from './RoleBindingRenderer'
78
+ export * from './RoleRenderer'
79
+ export * from './RolloutRenderer'
80
+ export * from './RuntimeClassRenderer'
81
+ export * from './SbomReportRenderer'
82
+ export * from './SealedSecretRenderer'
83
+ export * from './SecretRenderer'
84
+ export * from './SecretStoreRenderer'
85
+ export * from './ServiceAccountRenderer'
86
+ export * from './ServiceRenderer'
87
+ export * from './ServiceMonitorRenderer'
88
+ export * from './SimpleRouteRenderer'
89
+ export * from './StorageClassRenderer'
90
+ export * from './trivy-cells'
91
+ export * from './trivy-shared'
92
+ export * from './velero-cells'
93
+ export * from './VeleroBackupRenderer'
94
+ export * from './VeleroBSLRenderer'
95
+ export * from './VeleroRestoreRenderer'
96
+ export * from './VeleroScheduleRenderer'
97
+ export * from './VeleroVSLRenderer'
98
+ export * from './VPARenderer'
99
+ export * from './VulnerabilityReportRenderer'
100
+ export * from './WebhookConfigRenderer'
101
+ export * from './WorkflowRenderer'
102
+ export * from './WorkflowTemplateRenderer'
103
+ export * from './WorkloadRenderer'
104
+ export * from './TraefikIngressRouteRenderer'
105
+ export * from './traefik-cells'
@@ -0,0 +1,210 @@
1
+ // Istio cell components for ResourcesView table
2
+
3
+ import { clsx } from 'clsx'
4
+ import {
5
+ getVirtualServiceStatus,
6
+ getVirtualServiceHosts,
7
+ getVirtualServiceGateways,
8
+ getVirtualServiceRouteCount,
9
+ getDestinationRuleStatus,
10
+ getDestinationRuleHost,
11
+ getDestinationRuleSubsetCount,
12
+ getDestinationRuleLoadBalancer,
13
+ getIstioGatewayStatus,
14
+ getIstioGatewayServerCount,
15
+ getIstioGatewaySelectorString,
16
+ getServiceEntryStatus,
17
+ getServiceEntryHosts,
18
+ getServiceEntryLocation,
19
+ getServiceEntryPortsString,
20
+ getPeerAuthenticationStatus,
21
+ getPeerAuthenticationMode,
22
+ getPeerAuthenticationSelectorString,
23
+ getAuthorizationPolicyStatus,
24
+ getAuthorizationPolicyAction,
25
+ getAuthorizationPolicyRuleCount,
26
+ } from '../resource-utils-istio'
27
+
28
+ const modeColors: Record<string, string> = {
29
+ STRICT: 'bg-green-500/20 text-green-400',
30
+ PERMISSIVE: 'bg-yellow-500/20 text-yellow-400',
31
+ DISABLE: 'bg-red-500/20 text-red-400',
32
+ }
33
+
34
+ const actionColors: Record<string, string> = {
35
+ ALLOW: 'bg-green-500/20 text-green-400',
36
+ DENY: 'bg-red-500/20 text-red-400',
37
+ CUSTOM: 'bg-blue-500/20 text-blue-400',
38
+ AUDIT: 'bg-yellow-500/20 text-yellow-400',
39
+ }
40
+
41
+ export function VirtualServiceCell({ resource, column }: { resource: any; column: string }) {
42
+ switch (column) {
43
+ case 'status': {
44
+ const status = getVirtualServiceStatus(resource)
45
+ return (
46
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
47
+ {status.text}
48
+ </span>
49
+ )
50
+ }
51
+ case 'hosts': {
52
+ const hosts = getVirtualServiceHosts(resource)
53
+ return <span className="text-sm text-theme-text-secondary truncate block">{hosts}</span>
54
+ }
55
+ case 'gateways': {
56
+ const gateways = getVirtualServiceGateways(resource)
57
+ return <span className="text-sm text-theme-text-secondary truncate block">{gateways}</span>
58
+ }
59
+ case 'routes': {
60
+ const count = getVirtualServiceRouteCount(resource)
61
+ return <span className="text-sm text-theme-text-secondary">{count}</span>
62
+ }
63
+ default:
64
+ return <span className="text-sm text-theme-text-tertiary">-</span>
65
+ }
66
+ }
67
+
68
+ export function DestinationRuleCell({ resource, column }: { resource: any; column: string }) {
69
+ switch (column) {
70
+ case 'status': {
71
+ const status = getDestinationRuleStatus(resource)
72
+ return (
73
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
74
+ {status.text}
75
+ </span>
76
+ )
77
+ }
78
+ case 'host': {
79
+ const host = getDestinationRuleHost(resource)
80
+ return <span className="text-sm text-theme-text-secondary truncate block">{host}</span>
81
+ }
82
+ case 'subsets': {
83
+ const count = getDestinationRuleSubsetCount(resource)
84
+ return <span className="text-sm text-theme-text-secondary">{count > 0 ? count : '-'}</span>
85
+ }
86
+ case 'loadBalancer': {
87
+ const lb = getDestinationRuleLoadBalancer(resource)
88
+ return <span className="text-sm text-theme-text-secondary">{lb}</span>
89
+ }
90
+ default:
91
+ return <span className="text-sm text-theme-text-tertiary">-</span>
92
+ }
93
+ }
94
+
95
+ export function IstioGatewayCell({ resource, column }: { resource: any; column: string }) {
96
+ switch (column) {
97
+ case 'status': {
98
+ const status = getIstioGatewayStatus(resource)
99
+ return (
100
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
101
+ {status.text}
102
+ </span>
103
+ )
104
+ }
105
+ case 'servers': {
106
+ const count = getIstioGatewayServerCount(resource)
107
+ return <span className="text-sm text-theme-text-secondary">{count}</span>
108
+ }
109
+ case 'selector': {
110
+ const selector = getIstioGatewaySelectorString(resource)
111
+ return <span className="text-sm text-theme-text-secondary truncate block">{selector}</span>
112
+ }
113
+ default:
114
+ return <span className="text-sm text-theme-text-tertiary">-</span>
115
+ }
116
+ }
117
+
118
+ export function ServiceEntryCell({ resource, column }: { resource: any; column: string }) {
119
+ switch (column) {
120
+ case 'status': {
121
+ const status = getServiceEntryStatus(resource)
122
+ return (
123
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
124
+ {status.text}
125
+ </span>
126
+ )
127
+ }
128
+ case 'hosts': {
129
+ const hosts = getServiceEntryHosts(resource)
130
+ return <span className="text-sm text-theme-text-secondary truncate block">{hosts}</span>
131
+ }
132
+ case 'location': {
133
+ const location = getServiceEntryLocation(resource)
134
+ return (
135
+ <span className={clsx(
136
+ 'inline-flex items-center px-2 py-0.5 rounded text-xs font-medium',
137
+ location === 'MESH_EXTERNAL' ? 'bg-orange-500/20 text-orange-400' : 'bg-blue-500/20 text-blue-400'
138
+ )}>
139
+ {location === 'MESH_EXTERNAL' ? 'External' : 'Internal'}
140
+ </span>
141
+ )
142
+ }
143
+ case 'ports': {
144
+ const ports = getServiceEntryPortsString(resource)
145
+ return <span className="text-sm text-theme-text-secondary truncate block">{ports}</span>
146
+ }
147
+ default:
148
+ return <span className="text-sm text-theme-text-tertiary">-</span>
149
+ }
150
+ }
151
+
152
+ export function PeerAuthenticationCell({ resource, column }: { resource: any; column: string }) {
153
+ switch (column) {
154
+ case 'status': {
155
+ const status = getPeerAuthenticationStatus(resource)
156
+ return (
157
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
158
+ {status.text}
159
+ </span>
160
+ )
161
+ }
162
+ case 'mode': {
163
+ const mode = getPeerAuthenticationMode(resource)
164
+ return (
165
+ <span className={clsx(
166
+ 'inline-flex items-center px-2 py-0.5 rounded text-xs font-medium',
167
+ modeColors[mode] || 'bg-gray-500/20 text-gray-400'
168
+ )}>
169
+ {mode}
170
+ </span>
171
+ )
172
+ }
173
+ case 'selector': {
174
+ const selector = getPeerAuthenticationSelectorString(resource)
175
+ return <span className="text-sm text-theme-text-secondary truncate block">{selector}</span>
176
+ }
177
+ default:
178
+ return <span className="text-sm text-theme-text-tertiary">-</span>
179
+ }
180
+ }
181
+
182
+ export function AuthorizationPolicyCell({ resource, column }: { resource: any; column: string }) {
183
+ switch (column) {
184
+ case 'status': {
185
+ const status = getAuthorizationPolicyStatus(resource)
186
+ return (
187
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
188
+ {status.text}
189
+ </span>
190
+ )
191
+ }
192
+ case 'action': {
193
+ const action = getAuthorizationPolicyAction(resource)
194
+ return (
195
+ <span className={clsx(
196
+ 'inline-flex items-center px-2 py-0.5 rounded text-xs font-medium',
197
+ actionColors[action] || 'bg-gray-500/20 text-gray-400'
198
+ )}>
199
+ {action}
200
+ </span>
201
+ )
202
+ }
203
+ case 'rules': {
204
+ const count = getAuthorizationPolicyRuleCount(resource)
205
+ return <span className="text-sm text-theme-text-secondary">{count}</span>
206
+ }
207
+ default:
208
+ return <span className="text-sm text-theme-text-tertiary">-</span>
209
+ }
210
+ }
@@ -0,0 +1,107 @@
1
+ // Karpenter cell components for ResourcesView table
2
+
3
+ import { clsx } from 'clsx'
4
+ import { Tooltip } from '../../ui/Tooltip'
5
+ import {
6
+ getNodePoolStatus,
7
+ getNodePoolNodeClassRef,
8
+ getNodePoolLimits,
9
+ getNodePoolDisruptionPolicy,
10
+ getNodeClaimStatus,
11
+ getNodeClaimInstanceType,
12
+ getNodeClaimNodeName,
13
+ getNodeClaimNodePoolRef,
14
+ getEC2NodeClassStatus,
15
+ getEC2NodeClassAMI,
16
+ getEC2NodeClassRole,
17
+ getEC2NodeClassVolumeSize,
18
+ } from '../resource-utils-karpenter'
19
+
20
+ export function NodePoolCell({ resource, column }: { resource: any; column: string }) {
21
+ switch (column) {
22
+ case 'status': {
23
+ const status = getNodePoolStatus(resource)
24
+ return (
25
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
26
+ {status.text}
27
+ </span>
28
+ )
29
+ }
30
+ case 'nodeClass': {
31
+ const ref = getNodePoolNodeClassRef(resource)
32
+ return <span className="text-sm text-theme-text-secondary">{ref}</span>
33
+ }
34
+ case 'limits': {
35
+ const limits = getNodePoolLimits(resource)
36
+ return (
37
+ <Tooltip content={limits}>
38
+ <span className="text-sm text-theme-text-secondary truncate block">{limits}</span>
39
+ </Tooltip>
40
+ )
41
+ }
42
+ case 'disruption': {
43
+ const policy = getNodePoolDisruptionPolicy(resource)
44
+ return <span className="text-sm text-theme-text-secondary">{policy}</span>
45
+ }
46
+ default:
47
+ return <span className="text-sm text-theme-text-tertiary">-</span>
48
+ }
49
+ }
50
+
51
+ export function NodeClaimCell({ resource, column }: { resource: any; column: string }) {
52
+ switch (column) {
53
+ case 'status': {
54
+ const status = getNodeClaimStatus(resource)
55
+ return (
56
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
57
+ {status.text}
58
+ </span>
59
+ )
60
+ }
61
+ case 'instanceType': {
62
+ const instanceType = getNodeClaimInstanceType(resource)
63
+ return <span className="text-sm text-theme-text-secondary">{instanceType}</span>
64
+ }
65
+ case 'nodeName': {
66
+ const name = getNodeClaimNodeName(resource)
67
+ return <span className="text-sm text-theme-text-secondary">{name}</span>
68
+ }
69
+ case 'nodePool': {
70
+ const pool = getNodeClaimNodePoolRef(resource)
71
+ return <span className="text-sm text-theme-text-secondary">{pool}</span>
72
+ }
73
+ default:
74
+ return <span className="text-sm text-theme-text-tertiary">-</span>
75
+ }
76
+ }
77
+
78
+ export function EC2NodeClassCell({ resource, column }: { resource: any; column: string }) {
79
+ switch (column) {
80
+ case 'status': {
81
+ const status = getEC2NodeClassStatus(resource)
82
+ return (
83
+ <span className={clsx('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', status.color)}>
84
+ {status.text}
85
+ </span>
86
+ )
87
+ }
88
+ case 'ami': {
89
+ const ami = getEC2NodeClassAMI(resource)
90
+ return <span className="text-sm text-theme-text-secondary">{ami}</span>
91
+ }
92
+ case 'role': {
93
+ const role = getEC2NodeClassRole(resource)
94
+ return (
95
+ <Tooltip content={role}>
96
+ <span className="text-sm text-theme-text-secondary truncate block">{role}</span>
97
+ </Tooltip>
98
+ )
99
+ }
100
+ case 'volumeSize': {
101
+ const size = getEC2NodeClassVolumeSize(resource)
102
+ return <span className="text-sm text-theme-text-secondary">{size}</span>
103
+ }
104
+ default:
105
+ return <span className="text-sm text-theme-text-tertiary">-</span>
106
+ }
107
+ }