@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,14 +1,18 @@
|
|
|
1
1
|
// packages/ui/src/client/screens/GitLogView.tsx
|
|
2
2
|
import React, { useState, useEffect, useCallback } from "react";
|
|
3
|
-
import { theme } from "../theme";
|
|
4
3
|
import { apiFetch } from "../api";
|
|
5
|
-
import {
|
|
4
|
+
import { Toolbar, Table, EmptyState } from "../primitives";
|
|
6
5
|
import type { ClefManifest, GitCommit } from "@clef-sh/core";
|
|
7
6
|
|
|
8
7
|
interface GitLogViewProps {
|
|
9
8
|
manifest: ClefManifest | null;
|
|
10
9
|
}
|
|
11
10
|
|
|
11
|
+
const SELECT_CLASSES =
|
|
12
|
+
"font-mono text-[12px] bg-ink-850 text-bone border border-edge rounded-sm px-2 py-0.5 outline-none focus-visible:border-gold-500";
|
|
13
|
+
|
|
14
|
+
const SELECT_LABEL_CLASSES = "flex items-center gap-2 font-mono text-[12px] text-ash";
|
|
15
|
+
|
|
12
16
|
export function GitLogView({ manifest }: GitLogViewProps) {
|
|
13
17
|
const namespaces = manifest?.namespaces ?? [];
|
|
14
18
|
const environments = manifest?.environments ?? [];
|
|
@@ -53,42 +57,19 @@ export function GitLogView({ manifest }: GitLogViewProps) {
|
|
|
53
57
|
}, [loadLog]);
|
|
54
58
|
|
|
55
59
|
return (
|
|
56
|
-
<div
|
|
57
|
-
<
|
|
60
|
+
<div className="flex flex-1 flex-col overflow-hidden">
|
|
61
|
+
<Toolbar>
|
|
62
|
+
<div>
|
|
63
|
+
<Toolbar.Title>History</Toolbar.Title>
|
|
64
|
+
<Toolbar.Subtitle>Commit log per encrypted file</Toolbar.Subtitle>
|
|
65
|
+
</div>
|
|
66
|
+
</Toolbar>
|
|
58
67
|
|
|
59
68
|
{/* Selectors */}
|
|
60
|
-
<div
|
|
61
|
-
|
|
62
|
-
display: "flex",
|
|
63
|
-
gap: 12,
|
|
64
|
-
padding: "16px 24px",
|
|
65
|
-
borderBottom: `1px solid ${theme.border}`,
|
|
66
|
-
}}
|
|
67
|
-
>
|
|
68
|
-
<label
|
|
69
|
-
style={{
|
|
70
|
-
display: "flex",
|
|
71
|
-
gap: 8,
|
|
72
|
-
alignItems: "center",
|
|
73
|
-
fontFamily: theme.mono,
|
|
74
|
-
fontSize: 12,
|
|
75
|
-
color: theme.textMuted,
|
|
76
|
-
}}
|
|
77
|
-
>
|
|
69
|
+
<div className="flex gap-3 px-6 py-4 border-b border-edge">
|
|
70
|
+
<label className={SELECT_LABEL_CLASSES}>
|
|
78
71
|
Namespace
|
|
79
|
-
<select
|
|
80
|
-
value={ns}
|
|
81
|
-
onChange={(e) => setNs(e.target.value)}
|
|
82
|
-
style={{
|
|
83
|
-
fontFamily: theme.mono,
|
|
84
|
-
fontSize: 12,
|
|
85
|
-
background: theme.surface,
|
|
86
|
-
color: theme.text,
|
|
87
|
-
border: `1px solid ${theme.border}`,
|
|
88
|
-
borderRadius: 4,
|
|
89
|
-
padding: "3px 8px",
|
|
90
|
-
}}
|
|
91
|
-
>
|
|
72
|
+
<select value={ns} onChange={(e) => setNs(e.target.value)} className={SELECT_CLASSES}>
|
|
92
73
|
{namespaces.map((n) => (
|
|
93
74
|
<option key={n.name} value={n.name}>
|
|
94
75
|
{n.name}
|
|
@@ -96,30 +77,9 @@ export function GitLogView({ manifest }: GitLogViewProps) {
|
|
|
96
77
|
))}
|
|
97
78
|
</select>
|
|
98
79
|
</label>
|
|
99
|
-
<label
|
|
100
|
-
style={{
|
|
101
|
-
display: "flex",
|
|
102
|
-
gap: 8,
|
|
103
|
-
alignItems: "center",
|
|
104
|
-
fontFamily: theme.mono,
|
|
105
|
-
fontSize: 12,
|
|
106
|
-
color: theme.textMuted,
|
|
107
|
-
}}
|
|
108
|
-
>
|
|
80
|
+
<label className={SELECT_LABEL_CLASSES}>
|
|
109
81
|
Environment
|
|
110
|
-
<select
|
|
111
|
-
value={env}
|
|
112
|
-
onChange={(e) => setEnv(e.target.value)}
|
|
113
|
-
style={{
|
|
114
|
-
fontFamily: theme.mono,
|
|
115
|
-
fontSize: 12,
|
|
116
|
-
background: theme.surface,
|
|
117
|
-
color: theme.text,
|
|
118
|
-
border: `1px solid ${theme.border}`,
|
|
119
|
-
borderRadius: 4,
|
|
120
|
-
padding: "3px 8px",
|
|
121
|
-
}}
|
|
122
|
-
>
|
|
82
|
+
<select value={env} onChange={(e) => setEnv(e.target.value)} className={SELECT_CLASSES}>
|
|
123
83
|
{environments.map((e) => (
|
|
124
84
|
<option key={e.name} value={e.name}>
|
|
125
85
|
{e.name}
|
|
@@ -130,61 +90,43 @@ export function GitLogView({ manifest }: GitLogViewProps) {
|
|
|
130
90
|
</div>
|
|
131
91
|
|
|
132
92
|
{/* Content */}
|
|
133
|
-
<div
|
|
134
|
-
{loading &&
|
|
135
|
-
<div
|
|
136
|
-
style={{ padding: 24, color: theme.textMuted, fontFamily: theme.mono, fontSize: 12 }}
|
|
137
|
-
>
|
|
138
|
-
Loading…
|
|
139
|
-
</div>
|
|
140
|
-
)}
|
|
93
|
+
<div className="flex-1 overflow-auto px-6 pb-6">
|
|
94
|
+
{loading && <div className="p-6 font-mono text-[12px] text-ash">Loading…</div>}
|
|
141
95
|
{!loading && error && (
|
|
142
|
-
<div
|
|
143
|
-
{error}
|
|
144
|
-
</div>
|
|
96
|
+
<div className="p-6 font-mono text-[12px] text-stop-500">{error}</div>
|
|
145
97
|
)}
|
|
146
98
|
{!loading && !error && commits.length === 0 && (
|
|
147
|
-
<div
|
|
148
|
-
|
|
149
|
-
>
|
|
150
|
-
No commits found for {ns}/{env}.
|
|
99
|
+
<div className="pt-6">
|
|
100
|
+
<EmptyState title="No commits found" body={`No history for ${ns}/${env}.`} />
|
|
151
101
|
</div>
|
|
152
102
|
)}
|
|
153
103
|
{!loading && !error && commits.length > 0 && (
|
|
154
|
-
<
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
>
|
|
163
|
-
<thead>
|
|
164
|
-
<tr style={{ borderBottom: `1px solid ${theme.border}`, color: theme.textDim }}>
|
|
165
|
-
<th style={{ textAlign: "left", padding: "6px 12px 6px 0", fontWeight: 600 }}>
|
|
166
|
-
Hash
|
|
167
|
-
</th>
|
|
168
|
-
<th style={{ textAlign: "left", padding: "6px 12px", fontWeight: 600 }}>Date</th>
|
|
169
|
-
<th style={{ textAlign: "left", padding: "6px 12px", fontWeight: 600 }}>Author</th>
|
|
170
|
-
<th style={{ textAlign: "left", padding: "6px 0", fontWeight: 600 }}>Message</th>
|
|
171
|
-
</tr>
|
|
172
|
-
</thead>
|
|
173
|
-
<tbody>
|
|
174
|
-
{commits.map((c) => (
|
|
175
|
-
<tr key={c.hash} style={{ borderBottom: `1px solid ${theme.border}22` }}>
|
|
176
|
-
<td style={{ padding: "8px 12px 8px 0", color: theme.accent }}>
|
|
177
|
-
{c.hash.slice(0, 7)}
|
|
178
|
-
</td>
|
|
179
|
-
<td style={{ padding: "8px 12px", color: theme.textMuted, whiteSpace: "nowrap" }}>
|
|
180
|
-
{new Date(c.date).toLocaleDateString()}
|
|
181
|
-
</td>
|
|
182
|
-
<td style={{ padding: "8px 12px", color: theme.textMuted }}>{c.author}</td>
|
|
183
|
-
<td style={{ padding: "8px 0", color: theme.text }}>{c.message}</td>
|
|
104
|
+
<div className="mt-4">
|
|
105
|
+
<Table>
|
|
106
|
+
<Table.Header>
|
|
107
|
+
<tr>
|
|
108
|
+
<Table.HeaderCell>Hash</Table.HeaderCell>
|
|
109
|
+
<Table.HeaderCell>Date</Table.HeaderCell>
|
|
110
|
+
<Table.HeaderCell>Author</Table.HeaderCell>
|
|
111
|
+
<Table.HeaderCell>Message</Table.HeaderCell>
|
|
184
112
|
</tr>
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
113
|
+
</Table.Header>
|
|
114
|
+
<tbody>
|
|
115
|
+
{commits.map((c) => (
|
|
116
|
+
<Table.Row key={c.hash}>
|
|
117
|
+
<Table.Cell className="font-mono text-gold-500">
|
|
118
|
+
{c.hash.slice(0, 7)}
|
|
119
|
+
</Table.Cell>
|
|
120
|
+
<Table.Cell className="text-ash whitespace-nowrap">
|
|
121
|
+
{new Date(c.date).toLocaleDateString()}
|
|
122
|
+
</Table.Cell>
|
|
123
|
+
<Table.Cell className="text-ash">{c.author}</Table.Cell>
|
|
124
|
+
<Table.Cell>{c.message}</Table.Cell>
|
|
125
|
+
</Table.Row>
|
|
126
|
+
))}
|
|
127
|
+
</tbody>
|
|
128
|
+
</Table>
|
|
129
|
+
</div>
|
|
188
130
|
)}
|
|
189
131
|
</div>
|
|
190
132
|
</div>
|