@clef-sh/ui 0.1.20 → 0.1.21
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/client/assets/index-DPWHjBbB.js +34 -0
- package/dist/client/assets/index-qsLTYpc9.css +2 -0
- package/dist/client/clef.svg +2 -0
- package/dist/client/index.html +3 -31
- package/dist/client-lib/components/Button.d.ts +1 -1
- package/dist/client-lib/components/Button.d.ts.map +1 -1
- package/dist/client-lib/components/CopyButton.d.ts.map +1 -1
- package/dist/client-lib/components/EnvBadge.d.ts.map +1 -1
- package/dist/client-lib/components/MatrixGrid.d.ts.map +1 -1
- package/dist/client-lib/components/Sidebar.d.ts +1 -1
- package/dist/client-lib/components/Sidebar.d.ts.map +1 -1
- package/dist/client-lib/components/StatusDot.d.ts.map +1 -1
- package/dist/client-lib/components/SyncPanel.d.ts.map +1 -1
- package/dist/client-lib/components/TopBar.d.ts +6 -0
- package/dist/client-lib/components/TopBar.d.ts.map +1 -1
- package/dist/client-lib/primitives/Badge.d.ts +11 -0
- package/dist/client-lib/primitives/Badge.d.ts.map +1 -0
- package/dist/client-lib/primitives/Card.d.ts +28 -0
- package/dist/client-lib/primitives/Card.d.ts.map +1 -0
- package/dist/client-lib/primitives/Dialog.d.ts +30 -0
- package/dist/client-lib/primitives/Dialog.d.ts.map +1 -0
- package/dist/client-lib/primitives/EmptyState.d.ts +10 -0
- package/dist/client-lib/primitives/EmptyState.d.ts.map +1 -0
- package/dist/client-lib/primitives/Field.d.ts +36 -0
- package/dist/client-lib/primitives/Field.d.ts.map +1 -0
- package/dist/client-lib/primitives/Input.d.ts +6 -0
- package/dist/client-lib/primitives/Input.d.ts.map +1 -0
- package/dist/client-lib/primitives/Stat.d.ts +11 -0
- package/dist/client-lib/primitives/Stat.d.ts.map +1 -0
- package/dist/client-lib/primitives/Table.d.ts +37 -0
- package/dist/client-lib/primitives/Table.d.ts.map +1 -0
- package/dist/client-lib/primitives/Tabs.d.ts +29 -0
- package/dist/client-lib/primitives/Tabs.d.ts.map +1 -0
- package/dist/client-lib/primitives/Toast.d.ts +16 -0
- package/dist/client-lib/primitives/Toast.d.ts.map +1 -0
- package/dist/client-lib/primitives/Toolbar.d.ts +29 -0
- package/dist/client-lib/primitives/Toolbar.d.ts.map +1 -0
- package/dist/client-lib/primitives/index.d.ts +23 -0
- package/dist/client-lib/primitives/index.d.ts.map +1 -0
- package/dist/client-lib/theme.d.ts +18 -41
- package/dist/client-lib/theme.d.ts.map +1 -1
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +215 -0
- package/dist/server/api.js.map +1 -1
- package/dist/server/envelope.d.ts +15 -0
- package/dist/server/envelope.d.ts.map +1 -0
- package/dist/server/envelope.js +310 -0
- package/dist/server/envelope.js.map +1 -0
- package/package.json +7 -2
- package/src/client/App.tsx +16 -41
- package/src/client/components/Button.tsx +13 -22
- package/src/client/components/CopyButton.tsx +5 -12
- package/src/client/components/EnvBadge.tsx +30 -15
- package/src/client/components/MatrixGrid.tsx +108 -252
- package/src/client/components/Sidebar.tsx +123 -199
- package/src/client/components/StatusDot.tsx +10 -15
- package/src/client/components/SyncPanel.tsx +14 -62
- package/src/client/components/TopBar.tsx +11 -36
- package/src/client/index.html +1 -30
- package/src/client/main.tsx +1 -0
- package/src/client/primitives/Badge.test.tsx +47 -0
- package/src/client/primitives/Badge.tsx +64 -0
- package/src/client/primitives/Card.test.tsx +50 -0
- package/src/client/primitives/Card.tsx +85 -0
- package/src/client/primitives/Dialog.test.tsx +55 -0
- package/src/client/primitives/Dialog.tsx +96 -0
- package/src/client/primitives/EmptyState.test.tsx +25 -0
- package/src/client/primitives/EmptyState.tsx +38 -0
- package/src/client/primitives/Field.test.tsx +46 -0
- package/src/client/primitives/Field.tsx +95 -0
- package/src/client/primitives/Input.tsx +26 -0
- package/src/client/primitives/Stat.test.tsx +32 -0
- package/src/client/primitives/Stat.tsx +52 -0
- package/src/client/primitives/Table.test.tsx +58 -0
- package/src/client/primitives/Table.tsx +113 -0
- package/src/client/primitives/Tabs.test.tsx +44 -0
- package/src/client/primitives/Tabs.tsx +100 -0
- package/src/client/primitives/Toast.test.tsx +77 -0
- package/src/client/primitives/Toast.tsx +89 -0
- package/src/client/primitives/Toolbar.test.tsx +50 -0
- package/src/client/primitives/Toolbar.tsx +86 -0
- package/src/client/primitives/index.ts +43 -0
- package/src/client/public/clef.svg +2 -0
- package/src/client/screens/BackendScreen.tsx +104 -363
- package/src/client/screens/DiffView.tsx +187 -378
- package/src/client/screens/EnvelopeScreen.test.tsx +542 -0
- package/src/client/screens/EnvelopeScreen.tsx +948 -0
- package/src/client/screens/GitLogView.tsx +48 -106
- package/src/client/screens/ImportScreen.tsx +105 -308
- package/src/client/screens/LintView.tsx +184 -379
- package/src/client/screens/ManifestScreen.tsx +283 -445
- package/src/client/screens/MatrixView.tsx +75 -91
- package/src/client/screens/NamespaceEditor.tsx +234 -609
- package/src/client/screens/PolicyView.tsx +183 -453
- package/src/client/screens/RecipientsScreen.tsx +71 -350
- package/src/client/screens/ResetScreen.tsx +67 -237
- package/src/client/screens/ScanScreen.tsx +85 -249
- package/src/client/screens/SchemaEditor.test.tsx +237 -0
- package/src/client/screens/SchemaEditor.tsx +435 -0
- package/src/client/screens/ServiceIdentitiesScreen.tsx +251 -788
- package/src/client/styles.css +77 -0
- package/src/client/theme.ts +27 -48
- package/dist/client/assets/index-Db6WgHgY.js +0 -38
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
|
-
import { theme } from "../theme";
|
|
3
|
-
import { TopBar } from "../components/TopBar";
|
|
4
2
|
import { Button } from "../components/Button";
|
|
5
3
|
import { MatrixGrid } from "../components/MatrixGrid";
|
|
6
4
|
import { SyncPanel } from "../components/SyncPanel";
|
|
5
|
+
import { Toolbar } from "../primitives";
|
|
7
6
|
import type { ViewName } from "../components/Sidebar";
|
|
8
7
|
import type { ClefManifest, MatrixStatus } from "@clef-sh/core";
|
|
9
8
|
|
|
@@ -27,12 +26,15 @@ export function MatrixView({
|
|
|
27
26
|
const [syncingNs, setSyncingNs] = useState<string | null>(null);
|
|
28
27
|
if (!manifest) {
|
|
29
28
|
return (
|
|
30
|
-
<div
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Loading
|
|
35
|
-
</
|
|
29
|
+
<div className="flex flex-1 flex-col">
|
|
30
|
+
<Toolbar>
|
|
31
|
+
<div>
|
|
32
|
+
<Toolbar.Title>Secret Matrix</Toolbar.Title>
|
|
33
|
+
<Toolbar.Subtitle>Loading...</Toolbar.Subtitle>
|
|
34
|
+
</div>
|
|
35
|
+
</Toolbar>
|
|
36
|
+
<div className="flex-1 p-7">
|
|
37
|
+
<p className="font-sans text-[13px] text-ash">Loading manifest...</p>
|
|
36
38
|
</div>
|
|
37
39
|
</div>
|
|
38
40
|
);
|
|
@@ -54,92 +56,45 @@ export function MatrixView({
|
|
|
54
56
|
const fileCount = namespaces.length * environments.length;
|
|
55
57
|
|
|
56
58
|
return (
|
|
57
|
-
<div
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
59
|
+
<div className="flex flex-1 flex-col overflow-hidden">
|
|
60
|
+
<Toolbar>
|
|
61
|
+
<div>
|
|
62
|
+
<Toolbar.Title>Secret Matrix</Toolbar.Title>
|
|
63
|
+
<Toolbar.Subtitle>
|
|
64
|
+
{`${namespaces.length} namespaces · ${environments.length} environments · ${fileCount} files`}
|
|
65
|
+
</Toolbar.Subtitle>
|
|
66
|
+
</div>
|
|
67
|
+
<Toolbar.Actions>
|
|
68
|
+
<Button onClick={() => setView("lint")}>Lint All</Button>
|
|
69
|
+
<Button onClick={() => setView("manifest")} data-testid="matrix-add-environment-btn">
|
|
70
|
+
+ Environment
|
|
71
|
+
</Button>
|
|
72
|
+
<Button
|
|
73
|
+
variant="primary"
|
|
74
|
+
onClick={() => setView("manifest")}
|
|
75
|
+
data-testid="matrix-add-namespace-btn"
|
|
76
|
+
>
|
|
77
|
+
+ Namespace
|
|
78
|
+
</Button>
|
|
79
|
+
</Toolbar.Actions>
|
|
80
|
+
</Toolbar>
|
|
77
81
|
|
|
78
|
-
<div
|
|
82
|
+
<div className="relative flex-1 overflow-auto p-7">
|
|
79
83
|
{matrixLoading && (
|
|
80
|
-
<div
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
display: "flex",
|
|
85
|
-
alignItems: "center",
|
|
86
|
-
justifyContent: "center",
|
|
87
|
-
background: `${theme.bg}dd`,
|
|
88
|
-
zIndex: 10,
|
|
89
|
-
borderRadius: 8,
|
|
90
|
-
}}
|
|
91
|
-
>
|
|
92
|
-
<div
|
|
93
|
-
style={{
|
|
94
|
-
background: theme.surface,
|
|
95
|
-
border: `1px solid ${theme.border}`,
|
|
96
|
-
borderRadius: 10,
|
|
97
|
-
padding: "24px 36px",
|
|
98
|
-
textAlign: "center",
|
|
99
|
-
}}
|
|
100
|
-
>
|
|
101
|
-
<div style={{ fontSize: 20, color: theme.accent, marginBottom: 8 }}>{"\u266A"}</div>
|
|
102
|
-
<div style={{ fontFamily: theme.sans, fontSize: 13, color: theme.textMuted }}>
|
|
103
|
-
Loading...
|
|
104
|
-
</div>
|
|
84
|
+
<div className="absolute inset-0 z-10 flex items-center justify-center bg-ink-950/85 rounded-lg">
|
|
85
|
+
<div className="rounded-card border border-edge bg-ink-850 px-9 py-6 text-center">
|
|
86
|
+
<div className="mb-2 text-[20px] text-gold-500">{"♪"}</div>
|
|
87
|
+
<div className="font-sans text-[13px] text-ash">Loading...</div>
|
|
105
88
|
</div>
|
|
106
89
|
</div>
|
|
107
90
|
)}
|
|
108
|
-
|
|
109
|
-
<
|
|
110
|
-
{
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
color: theme.yellow,
|
|
116
|
-
},
|
|
117
|
-
...(totalPending > 0
|
|
118
|
-
? [
|
|
119
|
-
{
|
|
120
|
-
label: `${totalPending} pending value${totalPending !== 1 ? "s" : ""}`,
|
|
121
|
-
color: theme.accent,
|
|
122
|
-
},
|
|
123
|
-
]
|
|
124
|
-
: []),
|
|
125
|
-
].map((p) => (
|
|
126
|
-
<div
|
|
127
|
-
key={p.label}
|
|
128
|
-
style={{
|
|
129
|
-
fontFamily: theme.sans,
|
|
130
|
-
fontSize: 12,
|
|
131
|
-
fontWeight: 500,
|
|
132
|
-
color: p.color,
|
|
133
|
-
background: `${p.color}14`,
|
|
134
|
-
border: `1px solid ${p.color}33`,
|
|
135
|
-
borderRadius: 20,
|
|
136
|
-
padding: "4px 14px",
|
|
137
|
-
}}
|
|
138
|
-
>
|
|
139
|
-
{p.label}
|
|
140
|
-
</div>
|
|
141
|
-
))}
|
|
142
|
-
</div>
|
|
91
|
+
|
|
92
|
+
<SummaryPills
|
|
93
|
+
healthy={healthyCount}
|
|
94
|
+
missing={missingCount}
|
|
95
|
+
warn={warnCount}
|
|
96
|
+
pending={totalPending}
|
|
97
|
+
/>
|
|
143
98
|
|
|
144
99
|
<MatrixGrid
|
|
145
100
|
namespaces={namespaces}
|
|
@@ -165,8 +120,7 @@ export function MatrixView({
|
|
|
165
120
|
/>
|
|
166
121
|
)}
|
|
167
122
|
|
|
168
|
-
|
|
169
|
-
<div style={{ marginTop: 20, display: "flex", gap: 10 }}>
|
|
123
|
+
<div className="mt-5 flex gap-2.5">
|
|
170
124
|
<Button data-testid="diff-environments-btn" onClick={() => setView("diff")}>
|
|
171
125
|
Diff environments
|
|
172
126
|
</Button>
|
|
@@ -175,3 +129,33 @@ export function MatrixView({
|
|
|
175
129
|
</div>
|
|
176
130
|
);
|
|
177
131
|
}
|
|
132
|
+
|
|
133
|
+
interface SummaryPillsProps {
|
|
134
|
+
healthy: number;
|
|
135
|
+
missing: number;
|
|
136
|
+
warn: number;
|
|
137
|
+
pending: number;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const PILL_BASE = "rounded-pill border px-3.5 py-1 font-sans text-[12px] font-medium";
|
|
141
|
+
|
|
142
|
+
function SummaryPills({ healthy, missing, warn, pending }: SummaryPillsProps) {
|
|
143
|
+
return (
|
|
144
|
+
<div className="mb-7 flex gap-2.5">
|
|
145
|
+
<span className={`${PILL_BASE} text-go-500 bg-go-500/10 border-go-500/20`}>
|
|
146
|
+
{healthy} healthy
|
|
147
|
+
</span>
|
|
148
|
+
<span className={`${PILL_BASE} text-stop-500 bg-stop-500/10 border-stop-500/20`}>
|
|
149
|
+
{missing} missing keys
|
|
150
|
+
</span>
|
|
151
|
+
<span className={`${PILL_BASE} text-warn-500 bg-warn-500/10 border-warn-500/20`}>
|
|
152
|
+
{warn} schema warning{warn !== 1 ? "s" : ""}
|
|
153
|
+
</span>
|
|
154
|
+
{pending > 0 && (
|
|
155
|
+
<span className={`${PILL_BASE} text-gold-500 bg-gold-500/10 border-gold-500/20`}>
|
|
156
|
+
{pending} pending value{pending !== 1 ? "s" : ""}
|
|
157
|
+
</span>
|
|
158
|
+
)}
|
|
159
|
+
</div>
|
|
160
|
+
);
|
|
161
|
+
}
|