@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.
Files changed (103) hide show
  1. package/dist/client/assets/index-DPWHjBbB.js +34 -0
  2. package/dist/client/assets/index-qsLTYpc9.css +2 -0
  3. package/dist/client/clef.svg +2 -0
  4. package/dist/client/index.html +3 -31
  5. package/dist/client-lib/components/Button.d.ts +1 -1
  6. package/dist/client-lib/components/Button.d.ts.map +1 -1
  7. package/dist/client-lib/components/CopyButton.d.ts.map +1 -1
  8. package/dist/client-lib/components/EnvBadge.d.ts.map +1 -1
  9. package/dist/client-lib/components/MatrixGrid.d.ts.map +1 -1
  10. package/dist/client-lib/components/Sidebar.d.ts +1 -1
  11. package/dist/client-lib/components/Sidebar.d.ts.map +1 -1
  12. package/dist/client-lib/components/StatusDot.d.ts.map +1 -1
  13. package/dist/client-lib/components/SyncPanel.d.ts.map +1 -1
  14. package/dist/client-lib/components/TopBar.d.ts +6 -0
  15. package/dist/client-lib/components/TopBar.d.ts.map +1 -1
  16. package/dist/client-lib/primitives/Badge.d.ts +11 -0
  17. package/dist/client-lib/primitives/Badge.d.ts.map +1 -0
  18. package/dist/client-lib/primitives/Card.d.ts +28 -0
  19. package/dist/client-lib/primitives/Card.d.ts.map +1 -0
  20. package/dist/client-lib/primitives/Dialog.d.ts +30 -0
  21. package/dist/client-lib/primitives/Dialog.d.ts.map +1 -0
  22. package/dist/client-lib/primitives/EmptyState.d.ts +10 -0
  23. package/dist/client-lib/primitives/EmptyState.d.ts.map +1 -0
  24. package/dist/client-lib/primitives/Field.d.ts +36 -0
  25. package/dist/client-lib/primitives/Field.d.ts.map +1 -0
  26. package/dist/client-lib/primitives/Input.d.ts +6 -0
  27. package/dist/client-lib/primitives/Input.d.ts.map +1 -0
  28. package/dist/client-lib/primitives/Stat.d.ts +11 -0
  29. package/dist/client-lib/primitives/Stat.d.ts.map +1 -0
  30. package/dist/client-lib/primitives/Table.d.ts +37 -0
  31. package/dist/client-lib/primitives/Table.d.ts.map +1 -0
  32. package/dist/client-lib/primitives/Tabs.d.ts +29 -0
  33. package/dist/client-lib/primitives/Tabs.d.ts.map +1 -0
  34. package/dist/client-lib/primitives/Toast.d.ts +16 -0
  35. package/dist/client-lib/primitives/Toast.d.ts.map +1 -0
  36. package/dist/client-lib/primitives/Toolbar.d.ts +29 -0
  37. package/dist/client-lib/primitives/Toolbar.d.ts.map +1 -0
  38. package/dist/client-lib/primitives/index.d.ts +23 -0
  39. package/dist/client-lib/primitives/index.d.ts.map +1 -0
  40. package/dist/client-lib/theme.d.ts +18 -41
  41. package/dist/client-lib/theme.d.ts.map +1 -1
  42. package/dist/server/api.d.ts.map +1 -1
  43. package/dist/server/api.js +215 -0
  44. package/dist/server/api.js.map +1 -1
  45. package/dist/server/envelope.d.ts +15 -0
  46. package/dist/server/envelope.d.ts.map +1 -0
  47. package/dist/server/envelope.js +310 -0
  48. package/dist/server/envelope.js.map +1 -0
  49. package/package.json +7 -2
  50. package/src/client/App.tsx +16 -41
  51. package/src/client/components/Button.tsx +13 -22
  52. package/src/client/components/CopyButton.tsx +5 -12
  53. package/src/client/components/EnvBadge.tsx +30 -15
  54. package/src/client/components/MatrixGrid.tsx +108 -252
  55. package/src/client/components/Sidebar.tsx +123 -199
  56. package/src/client/components/StatusDot.tsx +10 -15
  57. package/src/client/components/SyncPanel.tsx +14 -62
  58. package/src/client/components/TopBar.tsx +11 -36
  59. package/src/client/index.html +1 -30
  60. package/src/client/main.tsx +1 -0
  61. package/src/client/primitives/Badge.test.tsx +47 -0
  62. package/src/client/primitives/Badge.tsx +64 -0
  63. package/src/client/primitives/Card.test.tsx +50 -0
  64. package/src/client/primitives/Card.tsx +85 -0
  65. package/src/client/primitives/Dialog.test.tsx +55 -0
  66. package/src/client/primitives/Dialog.tsx +96 -0
  67. package/src/client/primitives/EmptyState.test.tsx +25 -0
  68. package/src/client/primitives/EmptyState.tsx +38 -0
  69. package/src/client/primitives/Field.test.tsx +46 -0
  70. package/src/client/primitives/Field.tsx +95 -0
  71. package/src/client/primitives/Input.tsx +26 -0
  72. package/src/client/primitives/Stat.test.tsx +32 -0
  73. package/src/client/primitives/Stat.tsx +52 -0
  74. package/src/client/primitives/Table.test.tsx +58 -0
  75. package/src/client/primitives/Table.tsx +113 -0
  76. package/src/client/primitives/Tabs.test.tsx +44 -0
  77. package/src/client/primitives/Tabs.tsx +100 -0
  78. package/src/client/primitives/Toast.test.tsx +77 -0
  79. package/src/client/primitives/Toast.tsx +89 -0
  80. package/src/client/primitives/Toolbar.test.tsx +50 -0
  81. package/src/client/primitives/Toolbar.tsx +86 -0
  82. package/src/client/primitives/index.ts +43 -0
  83. package/src/client/public/clef.svg +2 -0
  84. package/src/client/screens/BackendScreen.tsx +104 -363
  85. package/src/client/screens/DiffView.tsx +187 -378
  86. package/src/client/screens/EnvelopeScreen.test.tsx +542 -0
  87. package/src/client/screens/EnvelopeScreen.tsx +948 -0
  88. package/src/client/screens/GitLogView.tsx +48 -106
  89. package/src/client/screens/ImportScreen.tsx +105 -308
  90. package/src/client/screens/LintView.tsx +184 -379
  91. package/src/client/screens/ManifestScreen.tsx +283 -445
  92. package/src/client/screens/MatrixView.tsx +75 -91
  93. package/src/client/screens/NamespaceEditor.tsx +234 -609
  94. package/src/client/screens/PolicyView.tsx +183 -453
  95. package/src/client/screens/RecipientsScreen.tsx +71 -350
  96. package/src/client/screens/ResetScreen.tsx +67 -237
  97. package/src/client/screens/ScanScreen.tsx +85 -249
  98. package/src/client/screens/SchemaEditor.test.tsx +237 -0
  99. package/src/client/screens/SchemaEditor.tsx +435 -0
  100. package/src/client/screens/ServiceIdentitiesScreen.tsx +251 -788
  101. package/src/client/styles.css +77 -0
  102. package/src/client/theme.ts +27 -48
  103. 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 { TopBar } from "../components/TopBar";
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 style={{ flex: 1, display: "flex", flexDirection: "column", overflow: "hidden" }}>
57
- <TopBar title="History" subtitle="Commit log per encrypted file" />
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
- style={{
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 style={{ flex: 1, overflow: "auto", padding: "0 24px 24px" }}>
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 style={{ padding: 24, color: theme.red, fontFamily: theme.mono, fontSize: 12 }}>
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
- style={{ padding: 24, color: theme.textMuted, fontFamily: theme.mono, fontSize: 12 }}
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
- <table
155
- style={{
156
- width: "100%",
157
- borderCollapse: "collapse",
158
- fontFamily: theme.mono,
159
- fontSize: 12,
160
- marginTop: 16,
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
- </tbody>
187
- </table>
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>