@package-broker/ui 0.19.7 → 2.0.0-rc.1

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 (207) hide show
  1. package/LICENSE +661 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/api-types.d.ts +9987 -0
  4. package/dist/api-types.d.ts.map +1 -0
  5. package/dist/api-types.js +6 -0
  6. package/dist/api-types.js.map +1 -0
  7. package/dist/api.d.ts +88 -0
  8. package/dist/api.d.ts.map +1 -0
  9. package/dist/api.js +179 -0
  10. package/dist/api.js.map +1 -0
  11. package/dist/app.d.ts +76 -0
  12. package/dist/app.d.ts.map +1 -0
  13. package/dist/app.js +239 -0
  14. package/dist/app.js.map +1 -0
  15. package/dist/assets/app.0348e5888f99.js +15 -0
  16. package/dist/assets/app.e8cea8b32d3a.css +2 -0
  17. package/dist/assets/index.html +13 -0
  18. package/dist/assets/manifest.json +26 -0
  19. package/dist/assets/setup.98343039898f.js +1 -0
  20. package/dist/assets/setup.html +14 -0
  21. package/dist/auth.d.ts +170 -0
  22. package/dist/auth.d.ts.map +1 -0
  23. package/dist/auth.js +551 -0
  24. package/dist/auth.js.map +1 -0
  25. package/dist/components/ui/alert.d.ts +10 -0
  26. package/dist/components/ui/alert.d.ts.map +1 -0
  27. package/dist/components/ui/alert.js +22 -0
  28. package/dist/components/ui/alert.js.map +1 -0
  29. package/dist/components/ui/badge.d.ts +8 -0
  30. package/dist/components/ui/badge.d.ts.map +1 -0
  31. package/dist/components/ui/badge.js +18 -0
  32. package/dist/components/ui/badge.js.map +1 -0
  33. package/dist/components/ui/button.d.ts +13 -0
  34. package/dist/components/ui/button.d.ts.map +1 -0
  35. package/dist/components/ui/button.js +27 -0
  36. package/dist/components/ui/button.js.map +1 -0
  37. package/dist/components/ui/card.d.ts +10 -0
  38. package/dist/components/ui/card.d.ts.map +1 -0
  39. package/dist/components/ui/card.js +21 -0
  40. package/dist/components/ui/card.js.map +1 -0
  41. package/dist/components/ui/confirm-action.d.ts +12 -0
  42. package/dist/components/ui/confirm-action.d.ts.map +1 -0
  43. package/dist/components/ui/confirm-action.js +19 -0
  44. package/dist/components/ui/confirm-action.js.map +1 -0
  45. package/dist/components/ui/dialog.d.ts +17 -0
  46. package/dist/components/ui/dialog.d.ts.map +1 -0
  47. package/dist/components/ui/dialog.js +180 -0
  48. package/dist/components/ui/dialog.js.map +1 -0
  49. package/dist/components/ui/dropdown-menu.d.ts +8 -0
  50. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  51. package/dist/components/ui/dropdown-menu.js +71 -0
  52. package/dist/components/ui/dropdown-menu.js.map +1 -0
  53. package/dist/components/ui/id-text.d.ts +11 -0
  54. package/dist/components/ui/id-text.d.ts.map +1 -0
  55. package/dist/components/ui/id-text.js +23 -0
  56. package/dist/components/ui/id-text.js.map +1 -0
  57. package/dist/components/ui/input.d.ts +5 -0
  58. package/dist/components/ui/input.d.ts.map +1 -0
  59. package/dist/components/ui/input.js +6 -0
  60. package/dist/components/ui/input.js.map +1 -0
  61. package/dist/components/ui/label.d.ts +4 -0
  62. package/dist/components/ui/label.d.ts.map +1 -0
  63. package/dist/components/ui/label.js +7 -0
  64. package/dist/components/ui/label.js.map +1 -0
  65. package/dist/components/ui/list-state.d.ts +7 -0
  66. package/dist/components/ui/list-state.d.ts.map +1 -0
  67. package/dist/components/ui/list-state.js +5 -0
  68. package/dist/components/ui/list-state.js.map +1 -0
  69. package/dist/components/ui/overlay-host.d.ts +6 -0
  70. package/dist/components/ui/overlay-host.d.ts.map +1 -0
  71. package/dist/components/ui/overlay-host.js +36 -0
  72. package/dist/components/ui/overlay-host.js.map +1 -0
  73. package/dist/components/ui/row-actions.d.ts +17 -0
  74. package/dist/components/ui/row-actions.d.ts.map +1 -0
  75. package/dist/components/ui/row-actions.js +21 -0
  76. package/dist/components/ui/row-actions.js.map +1 -0
  77. package/dist/components/ui/select.d.ts +3 -0
  78. package/dist/components/ui/select.d.ts.map +1 -0
  79. package/dist/components/ui/select.js +6 -0
  80. package/dist/components/ui/select.js.map +1 -0
  81. package/dist/components/ui/status-badge.d.ts +28 -0
  82. package/dist/components/ui/status-badge.d.ts.map +1 -0
  83. package/dist/components/ui/status-badge.js +50 -0
  84. package/dist/components/ui/status-badge.js.map +1 -0
  85. package/dist/components/ui/table.d.ts +27 -0
  86. package/dist/components/ui/table.d.ts.map +1 -0
  87. package/dist/components/ui/table.js +81 -0
  88. package/dist/components/ui/table.js.map +1 -0
  89. package/dist/components/ui/tabs.d.ts +7 -0
  90. package/dist/components/ui/tabs.d.ts.map +1 -0
  91. package/dist/components/ui/tabs.js +14 -0
  92. package/dist/components/ui/tabs.js.map +1 -0
  93. package/dist/components/ui/textarea.d.ts +3 -0
  94. package/dist/components/ui/textarea.d.ts.map +1 -0
  95. package/dist/components/ui/textarea.js +14 -0
  96. package/dist/components/ui/textarea.js.map +1 -0
  97. package/dist/components/ui/time.d.ts +5 -0
  98. package/dist/components/ui/time.d.ts.map +1 -0
  99. package/dist/components/ui/time.js +14 -0
  100. package/dist/components/ui/time.js.map +1 -0
  101. package/dist/components/ui/toolbar.d.ts +20 -0
  102. package/dist/components/ui/toolbar.d.ts.map +1 -0
  103. package/dist/components/ui/toolbar.js +42 -0
  104. package/dist/components/ui/toolbar.js.map +1 -0
  105. package/dist/components/vulnerability-status.d.ts +8 -0
  106. package/dist/components/vulnerability-status.d.ts.map +1 -0
  107. package/dist/components/vulnerability-status.js +49 -0
  108. package/dist/components/vulnerability-status.js.map +1 -0
  109. package/dist/index.d.ts +2 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +2 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/lib/use-merged-refs.d.ts +3 -0
  114. package/dist/lib/use-merged-refs.d.ts.map +1 -0
  115. package/dist/lib/use-merged-refs.js +22 -0
  116. package/dist/lib/use-merged-refs.js.map +1 -0
  117. package/dist/lib/utils.d.ts +4 -0
  118. package/dist/lib/utils.d.ts.map +1 -0
  119. package/dist/lib/utils.js +11 -0
  120. package/dist/lib/utils.js.map +1 -0
  121. package/dist/main.d.ts +2 -0
  122. package/dist/main.d.ts.map +1 -0
  123. package/dist/main.js +9 -0
  124. package/dist/main.js.map +1 -0
  125. package/dist/manifest.d.ts +8 -0
  126. package/dist/manifest.d.ts.map +1 -0
  127. package/dist/manifest.js +21 -0
  128. package/dist/manifest.js.map +1 -0
  129. package/dist/page-hash.d.ts +23 -0
  130. package/dist/page-hash.d.ts.map +1 -0
  131. package/dist/page-hash.js +45 -0
  132. package/dist/page-hash.js.map +1 -0
  133. package/dist/pages/access.d.ts +69 -0
  134. package/dist/pages/access.d.ts.map +1 -0
  135. package/dist/pages/access.js +391 -0
  136. package/dist/pages/access.js.map +1 -0
  137. package/dist/pages/audit.d.ts +63 -0
  138. package/dist/pages/audit.d.ts.map +1 -0
  139. package/dist/pages/audit.js +182 -0
  140. package/dist/pages/audit.js.map +1 -0
  141. package/dist/pages/import.d.ts +41 -0
  142. package/dist/pages/import.d.ts.map +1 -0
  143. package/dist/pages/import.js +274 -0
  144. package/dist/pages/import.js.map +1 -0
  145. package/dist/pages/management.d.ts +47 -0
  146. package/dist/pages/management.d.ts.map +1 -0
  147. package/dist/pages/management.js +141 -0
  148. package/dist/pages/management.js.map +1 -0
  149. package/dist/pages/packages.d.ts +74 -0
  150. package/dist/pages/packages.d.ts.map +1 -0
  151. package/dist/pages/packages.js +505 -0
  152. package/dist/pages/packages.js.map +1 -0
  153. package/dist/pages/projects.d.ts +58 -0
  154. package/dist/pages/projects.d.ts.map +1 -0
  155. package/dist/pages/projects.js +357 -0
  156. package/dist/pages/projects.js.map +1 -0
  157. package/dist/pages/sources/add-package-dialog.d.ts +10 -0
  158. package/dist/pages/sources/add-package-dialog.d.ts.map +1 -0
  159. package/dist/pages/sources/add-package-dialog.js +19 -0
  160. package/dist/pages/sources/add-package-dialog.js.map +1 -0
  161. package/dist/pages/sources/proxy-message.d.ts +2 -0
  162. package/dist/pages/sources/proxy-message.d.ts.map +1 -0
  163. package/dist/pages/sources/proxy-message.js +2 -0
  164. package/dist/pages/sources/proxy-message.js.map +1 -0
  165. package/dist/pages/sources/source-form.d.ts +29 -0
  166. package/dist/pages/sources/source-form.d.ts.map +1 -0
  167. package/dist/pages/sources/source-form.js +463 -0
  168. package/dist/pages/sources/source-form.js.map +1 -0
  169. package/dist/pages/sources/sync-poll.d.ts +20 -0
  170. package/dist/pages/sources/sync-poll.d.ts.map +1 -0
  171. package/dist/pages/sources/sync-poll.js +71 -0
  172. package/dist/pages/sources/sync-poll.js.map +1 -0
  173. package/dist/pages/sources.d.ts +325 -0
  174. package/dist/pages/sources.d.ts.map +1 -0
  175. package/dist/pages/sources.js +1132 -0
  176. package/dist/pages/sources.js.map +1 -0
  177. package/dist/pages/tokens/client-config.d.ts +5 -0
  178. package/dist/pages/tokens/client-config.d.ts.map +1 -0
  179. package/dist/pages/tokens/client-config.js +9 -0
  180. package/dist/pages/tokens/client-config.js.map +1 -0
  181. package/dist/pages/tokens.d.ts +127 -0
  182. package/dist/pages/tokens.d.ts.map +1 -0
  183. package/dist/pages/tokens.js +744 -0
  184. package/dist/pages/tokens.js.map +1 -0
  185. package/dist/pending.d.ts +33 -0
  186. package/dist/pending.d.ts.map +1 -0
  187. package/dist/pending.js +156 -0
  188. package/dist/pending.js.map +1 -0
  189. package/dist/qr.d.ts +14 -0
  190. package/dist/qr.d.ts.map +1 -0
  191. package/dist/qr.js +322 -0
  192. package/dist/qr.js.map +1 -0
  193. package/dist/setup.d.ts +49 -0
  194. package/dist/setup.d.ts.map +1 -0
  195. package/dist/setup.js +390 -0
  196. package/dist/setup.js.map +1 -0
  197. package/dist/test-fixtures/api-types.d.ts +228 -0
  198. package/dist/test-fixtures/api-types.d.ts.map +1 -0
  199. package/dist/test-fixtures/api-types.js +6 -0
  200. package/dist/test-fixtures/api-types.js.map +1 -0
  201. package/package.json +37 -40
  202. package/public/index.html +11 -0
  203. package/README.md +0 -11
  204. package/dist/assets/main-3NLwl1eV.js +0 -111
  205. package/dist/assets/main-CsTEYyDl.css +0 -1
  206. package/dist/config.js +0 -3
  207. package/dist/index.html +0 -22
@@ -0,0 +1,182 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { useServices } from '../auth.js';
4
+ import { Badge } from '../components/ui/badge.js';
5
+ import { Button } from '../components/ui/button.js';
6
+ import { Input } from '../components/ui/input.js';
7
+ import { Label } from '../components/ui/label.js';
8
+ import { DataTable } from '../components/ui/table.js';
9
+ import { Time } from '../components/ui/time.js';
10
+ import { IdText } from '../components/ui/id-text.js';
11
+ import { FilterToolbar } from '../components/ui/toolbar.js';
12
+ import { ListState } from '../components/ui/list-state.js';
13
+ export function readAuditHash(hash) {
14
+ const query = new URLSearchParams(hash.split('?')[1] ?? '');
15
+ const project = query.get('project');
16
+ return {
17
+ scope: project !== null && /^[A-Za-z0-9._-]{1,64}$/.test(project) ? project : null,
18
+ filters: {
19
+ actor: query.get('actor') ?? '',
20
+ action: query.get('action') ?? '',
21
+ project: query.get('filterProject') ?? '',
22
+ limit: query.get('limit') ?? '50',
23
+ after: query.get('after') ?? '',
24
+ },
25
+ };
26
+ }
27
+ export function auditHash(filters, scope) {
28
+ const query = new URLSearchParams();
29
+ if (scope !== null)
30
+ query.set('project', scope);
31
+ for (const key of ['actor', 'action', 'project', 'limit', 'after']) {
32
+ if (key === 'project' && scope !== null)
33
+ continue;
34
+ if (filters[key] !== '')
35
+ query.set(key === 'project' ? 'filterProject' : key, filters[key]);
36
+ }
37
+ return `#/audit${query.size ? `?${query}` : ''}`;
38
+ }
39
+ export async function loadAudit(client, filters, scope) {
40
+ const query = {
41
+ actor: filters.actor || undefined,
42
+ action: filters.action || undefined,
43
+ limit: filters.limit || undefined,
44
+ after: filters.after || undefined,
45
+ };
46
+ const [list, head] = await Promise.all([
47
+ scope === null
48
+ ? client.request('get', '/_pb/audit', {
49
+ query: {
50
+ actor: query.actor,
51
+ action: query.action,
52
+ project: filters.project || undefined,
53
+ limit: query.limit,
54
+ after: query.after,
55
+ },
56
+ })
57
+ : client.request('get', '/_pb/projects/{project}/audit', {
58
+ params: { project: scope },
59
+ query,
60
+ }),
61
+ client.request('get', '/_pb/audit/head'),
62
+ ]);
63
+ return {
64
+ data: list.ok ? list.data : null,
65
+ head: head.ok ? head.data : null,
66
+ error: !list.ok
67
+ ? 'Unable to load audit events.'
68
+ : !head.ok
69
+ ? 'Unable to load the chain head.'
70
+ : null,
71
+ };
72
+ }
73
+ export function AuditView(props) {
74
+ return (_jsxs("section", { "aria-labelledby": "page-heading", className: "space-y-4", children: [_jsx("h1", { tabIndex: -1, id: "page-heading", className: "text-2xl font-semibold", children: "Audit" }), props.head === null ? null : (_jsxs("div", { className: "flex flex-wrap gap-2", "aria-label": "Audit chain head", children: [_jsx(Badge, { variant: "outline", children: `Head ${props.head.seq}` }), _jsx(Badge, { variant: "secondary", children: props.head.lastVerifiedAt === null ? ('never verified') : (_jsxs(_Fragment, { children: ["Last verified ", _jsx(Time, { value: props.head.lastVerifiedAt })] })) }), props.head.pendingCount > 0 ? (_jsx(Badge, { variant: "secondary", children: `${props.head.pendingCount} pending` })) : null] })), _jsx(FilterToolbar, { chips: ['actor', 'action', 'project'].flatMap((key) => props.filters[key] && (key !== 'project' || props.scope === null)
75
+ ? [
76
+ {
77
+ label: { actor: 'Actor', action: 'Action', project: 'Project' }[key],
78
+ value: props.filters[key],
79
+ onRemove: () => props.onNavigate({ ...props.filters, [key]: '', after: '' }),
80
+ },
81
+ ]
82
+ : []), children: _jsxs("form", { className: "flex flex-wrap items-end gap-3", onSubmit: (event) => {
83
+ event.preventDefault();
84
+ const form = new FormData(event.currentTarget);
85
+ const value = (key) => String(form.get(key) ?? '');
86
+ props.onNavigate({
87
+ actor: value('actor'),
88
+ action: value('action'),
89
+ project: value('filterProject'),
90
+ limit: value('limit'),
91
+ after: '',
92
+ });
93
+ }, children: [_jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-actor", children: "Actor" }), _jsx(Input, { id: "audit-actor", name: "actor", maxLength: 200, defaultValue: props.filters.actor })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-action", children: "Action" }), _jsx(Input, { id: "audit-action", name: "action", maxLength: 200, defaultValue: props.filters.action })] }), props.scope === null ? (_jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-project", children: "Project" }), _jsx(Input, { id: "audit-project", name: "filterProject", maxLength: 200, defaultValue: props.filters.project })] })) : null, _jsxs("div", { children: [_jsx(Label, { htmlFor: "audit-limit", children: "Limit" }), _jsx(Input, { id: "audit-limit", name: "limit", type: "number", min: "1", max: "200", required: true, defaultValue: props.filters.limit })] }), _jsx(Button, { type: "submit", children: "Filter" }), _jsx(Button, { type: "button", variant: "outline", onClick: () => props.onNavigate({ actor: '', action: '', project: '', limit: '50', after: '' }), children: "Clear filters" })] }, auditHash(props.filters, props.scope)) }), props.error === null ? null : (_jsx(ListState, { kind: "error", title: props.error, children: _jsx(Button, { type: "button", variant: "outline", onClick: () => props.onNavigate({ ...props.filters }), children: "Retry" }) })), props.loading ? _jsx(ListState, { kind: "loading", title: "Loading audit events\u2026" }) : null, props.data === null ? null : (_jsxs(_Fragment, { children: [props.data.items.length ? (_jsx(DataTable, { label: "Audit events", items: props.data.items, columns: [
94
+ { key: 'seq', label: 'Sequence', value: (item) => item.seq },
95
+ {
96
+ key: 'time',
97
+ label: 'Time',
98
+ value: (item) => item.createdAt,
99
+ render: (item) => _jsx(Time, { value: item.createdAt }),
100
+ },
101
+ { key: 'action', label: 'Action', value: (item) => item.action },
102
+ {
103
+ key: 'actor',
104
+ label: 'Actor',
105
+ value: (item) => item.actor.id ?? '',
106
+ render: (item) => (_jsxs(_Fragment, { children: [_jsx("span", { className: "block text-xs text-neutral-600", children: item.actor.type }), _jsx(IdText, { value: item.actor.id, label: "actor ID" })] })),
107
+ },
108
+ {
109
+ key: 'project',
110
+ label: 'Project',
111
+ priority: 2,
112
+ value: (item) => item.projectId ?? '',
113
+ render: (item) => _jsx(IdText, { value: item.projectId, label: "project ID" }),
114
+ },
115
+ {
116
+ key: 'targetType',
117
+ label: 'Target type',
118
+ priority: 2,
119
+ value: (item) => item.targetType,
120
+ },
121
+ {
122
+ key: 'targetId',
123
+ label: 'Target ID',
124
+ priority: 3,
125
+ value: (item) => item.targetId ?? '',
126
+ render: (item) => _jsx(IdText, { value: item.targetId, label: "target ID" }),
127
+ },
128
+ ] })) : !props.loading && !props.error ? (_jsx(ListState, { kind: props.filters.actor ||
129
+ props.filters.action ||
130
+ props.filters.project ||
131
+ props.filters.after
132
+ ? 'filtered-empty'
133
+ : 'empty', title: props.filters.actor ||
134
+ props.filters.action ||
135
+ props.filters.project ||
136
+ props.filters.after
137
+ ? 'No audit events match these filters'
138
+ : 'No audit events.' })) : null, _jsxs("div", { className: "flex gap-2", children: [props.filters.after ? (_jsx(Button, { type: "button", variant: "outline", onClick: () => props.onNavigate({ ...props.filters, after: '' }), children: "First page" })) : null, _jsx(Button, { type: "button", disabled: props.data.next === null || props.loading, onClick: () => {
139
+ if (props.data?.next)
140
+ props.onNavigate({ ...props.filters, after: props.data.next });
141
+ }, children: "Next page" })] })] }))] }));
142
+ }
143
+ export function AuditPage() {
144
+ const { client } = useServices();
145
+ const [hash, setHash] = useState(() => window.location.hash);
146
+ const [result, setResult] = useState({
147
+ data: null,
148
+ head: null,
149
+ error: null,
150
+ });
151
+ const [loading, setLoading] = useState(true);
152
+ const [reload, setReload] = useState(0);
153
+ useEffect(() => {
154
+ const update = () => setHash(window.location.hash);
155
+ window.addEventListener('hashchange', update);
156
+ return () => window.removeEventListener('hashchange', update);
157
+ }, []);
158
+ useEffect(() => {
159
+ let live = true;
160
+ setLoading(true);
161
+ setResult({ data: null, head: null, error: null });
162
+ const { filters, scope } = readAuditHash(hash);
163
+ void loadAudit(client, filters, scope).then((next) => {
164
+ if (live) {
165
+ setResult(next);
166
+ setLoading(false);
167
+ }
168
+ });
169
+ return () => {
170
+ live = false;
171
+ };
172
+ }, [client, hash, reload]);
173
+ const { filters, scope } = readAuditHash(hash);
174
+ return (_jsx(AuditView, { ...result, filters: filters, scope: scope, loading: loading, onNavigate: (next) => {
175
+ const target = auditHash(next, scope);
176
+ if (window.location.hash === target)
177
+ setReload((value) => value + 1);
178
+ else
179
+ window.location.hash = target;
180
+ } }));
181
+ }
182
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/pages/audit.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { operations } from '../api-types.js';
2
+ import { type ShellServices } from '../auth.js';
3
+ export type ImportRun = operations['getImportRun']['responses'][200]['content']['application/json'];
4
+ type Action = 'approve' | 'apply' | 'cancel' | 'rollback';
5
+ interface ImportState {
6
+ runs: ImportRun[];
7
+ next: string | null;
8
+ run: ImportRun | null;
9
+ selectedId: string | null;
10
+ loading: boolean;
11
+ detailLoading: boolean;
12
+ cursor?: string | undefined;
13
+ busy: boolean;
14
+ dialog: boolean;
15
+ confirmed: boolean;
16
+ error: string | null;
17
+ notice: string | null;
18
+ }
19
+ export declare function importActionAllowed(run: ImportRun, action: Action, now?: number): boolean;
20
+ export declare function createImportController(services: ShellServices): {
21
+ back(): void;
22
+ snapshot: () => ImportState;
23
+ subscribe(listener: () => void): () => void;
24
+ load(cursor?: string): Promise<void>;
25
+ select(id: string): Promise<void>;
26
+ openApproval(): void;
27
+ closeApproval(): void;
28
+ confirmApproval(confirmed: boolean): void;
29
+ action(action: Action): Promise<void>;
30
+ };
31
+ type Controller = ReturnType<typeof createImportController>;
32
+ export declare function ImportView({ state, controller, onSelect, onBack, onPage, }: {
33
+ state: ImportState;
34
+ controller: Controller;
35
+ onSelect?: (id: string) => void;
36
+ onBack?: () => void;
37
+ onPage?: (cursor?: string) => void;
38
+ }): import("react").JSX.Element;
39
+ export declare function ImportPage(): import("react").JSX.Element;
40
+ export {};
41
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/pages/import.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAkB7D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACpG,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC1D,UAAU,WAAW;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAcD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAY7F;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa;;;wBAmCtC,MAAM,IAAI;kBAMV,MAAM;eAaT,MAAM;;;+BAmCI,OAAO;mBAGb,MAAM;EA0C9B;AAED,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5D,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE;IACD,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,+BA2TA;AAED,wBAAgB,UAAU,gCAqCzB"}
@@ -0,0 +1,274 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState, useSyncExternalStore } from 'react';
3
+ import { useServices } from '../auth.js';
4
+ import { StatusBadge } from '../components/ui/status-badge.js';
5
+ import { Time } from '../components/ui/time.js';
6
+ import { IdText } from '../components/ui/id-text.js';
7
+ import { ListState } from '../components/ui/list-state.js';
8
+ import { Button } from '../components/ui/button.js';
9
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../components/ui/dialog.js';
10
+ import { Input } from '../components/ui/input.js';
11
+ import { Label } from '../components/ui/label.js';
12
+ import { DataTable } from '../components/ui/table.js';
13
+ function publicRun(run) {
14
+ return {
15
+ id: run.id,
16
+ state: run.state,
17
+ planHash: run.planHash,
18
+ approvedAt: run.approvedAt,
19
+ approvedByUserId: run.approvedByUserId,
20
+ acceptedAt: run.acceptedAt,
21
+ beforeImageExpiresAt: run.beforeImageExpiresAt,
22
+ };
23
+ }
24
+ export function importActionAllowed(run, action, now = Date.now()) {
25
+ if (action === 'approve')
26
+ return run.state === 'planned' && !!run.planHash && run.approvedAt === null;
27
+ if (action === 'apply') {
28
+ const approved = run.approvedAt === null ? NaN : Date.parse(run.approvedAt);
29
+ return run.state === 'planned' && Number.isFinite(approved) && approved <= now + 60_000;
30
+ }
31
+ if (action === 'cancel')
32
+ return run.state === 'planned';
33
+ return (['failed', 'applied', 'verifying', 'verified'].includes(run.state) &&
34
+ (run.beforeImageExpiresAt === null || Date.parse(run.beforeImageExpiresAt) > now));
35
+ }
36
+ export function createImportController(services) {
37
+ let state = {
38
+ runs: [],
39
+ next: null,
40
+ run: null,
41
+ selectedId: null,
42
+ loading: false,
43
+ detailLoading: false,
44
+ busy: false,
45
+ dialog: false,
46
+ confirmed: false,
47
+ error: null,
48
+ notice: null,
49
+ };
50
+ let selection = 0;
51
+ let listing = 0;
52
+ const listeners = new Set();
53
+ const set = (next) => {
54
+ state = { ...state, ...next };
55
+ for (const listener of listeners)
56
+ listener();
57
+ };
58
+ const controller = {
59
+ back() {
60
+ ++selection;
61
+ set({
62
+ run: null,
63
+ selectedId: null,
64
+ detailLoading: false,
65
+ dialog: false,
66
+ confirmed: false,
67
+ error: null,
68
+ notice: null,
69
+ });
70
+ },
71
+ snapshot: () => state,
72
+ subscribe(listener) {
73
+ listeners.add(listener);
74
+ return () => {
75
+ listeners.delete(listener);
76
+ };
77
+ },
78
+ async load(cursor) {
79
+ const version = ++listing;
80
+ set({ loading: true, error: null, cursor });
81
+ const result = await services.client.request('get', '/_pb/import-runs', {
82
+ query: { cursor },
83
+ });
84
+ if (version !== listing)
85
+ return;
86
+ set(result.ok
87
+ ? { runs: result.data.items.map(publicRun), next: result.data.next, loading: false }
88
+ : { runs: [], next: null, loading: false, error: 'Unable to load import runs.' });
89
+ },
90
+ async select(id) {
91
+ if (state.busy)
92
+ return;
93
+ const version = ++selection;
94
+ set({
95
+ run: null,
96
+ selectedId: id,
97
+ detailLoading: true,
98
+ dialog: false,
99
+ confirmed: false,
100
+ error: null,
101
+ notice: null,
102
+ });
103
+ const result = await services.client.request('get', '/_pb/import-runs/{id}', {
104
+ params: { id },
105
+ });
106
+ if (version !== selection)
107
+ return;
108
+ set(result.ok
109
+ ? { run: publicRun(result.data), detailLoading: false }
110
+ : { detailLoading: false, error: 'Unable to load the import run.' });
111
+ },
112
+ openApproval() {
113
+ if (!state.busy &&
114
+ state.run?.state === 'planned' &&
115
+ state.run.planHash &&
116
+ state.run.approvedAt === null)
117
+ set({ dialog: true, confirmed: false });
118
+ },
119
+ closeApproval() {
120
+ if (state.busy)
121
+ return;
122
+ set({ dialog: false, confirmed: false });
123
+ },
124
+ confirmApproval(confirmed) {
125
+ if (state.dialog && !state.busy)
126
+ set({ confirmed });
127
+ },
128
+ async action(action) {
129
+ const run = state.run;
130
+ if (run === null || state.busy || !importActionAllowed(run, action))
131
+ return;
132
+ if (action === 'approve' &&
133
+ (!state.dialog ||
134
+ !state.confirmed ||
135
+ !run.planHash ||
136
+ run.state !== 'planned' ||
137
+ run.approvedAt !== null))
138
+ return;
139
+ set({ busy: true, error: null, notice: null });
140
+ const result = action === 'approve'
141
+ ? await services.client.request('post', '/_pb/import-runs/{id}/approve', {
142
+ params: { id: run.id },
143
+ body: { planHash: run.planHash },
144
+ })
145
+ : await services.client.request('post', `/_pb/import-runs/{id}/${action}`, {
146
+ params: { id: run.id },
147
+ });
148
+ set({ busy: false, dialog: false, confirmed: false });
149
+ if (!result.ok) {
150
+ if (result.code === 'reauth_required') {
151
+ services.requireReauth(result.request, { credential: false, secretFields: [] });
152
+ }
153
+ else {
154
+ set({
155
+ error: result.code === 'conflict'
156
+ ? 'The run changed. Reload it and try again.'
157
+ : 'Unable to update the import run.',
158
+ });
159
+ }
160
+ return;
161
+ }
162
+ await controller.select(run.id);
163
+ await controller.load(state.cursor);
164
+ set({ notice: 'Action accepted. Reload to check job progress.' });
165
+ },
166
+ };
167
+ return controller;
168
+ }
169
+ export function ImportView({ state, controller, onSelect, onBack, onPage, }) {
170
+ const run = state.run;
171
+ const [now, setNow] = useState(Date.now);
172
+ useEffect(() => {
173
+ const timer = window.setInterval(() => setNow(Date.now()), 1000);
174
+ return () => window.clearInterval(timer);
175
+ }, []);
176
+ return (_jsxs("section", { "aria-labelledby": "page-heading", className: "space-y-4", children: [_jsx("h1", { tabIndex: -1, id: "page-heading", className: "text-2xl font-semibold", children: "Import" }), _jsx("p", { children: "Upload credentials with the CLI. Import manifests are managed with the CLI." }), state.selectedId && run === null ? (_jsx(Button, { type: "button", variant: "link", className: "px-0", disabled: state.busy, onClick: () => (onBack ? onBack() : controller.back()), children: "\u2190 Back to import runs" })) : null, state.error === null ? null : (_jsx(ListState, { kind: "error", title: state.error, children: _jsx(Button, { type: "button", variant: "outline", disabled: state.busy || state.loading, onClick: () => {
177
+ if (state.selectedId)
178
+ void controller.select(state.selectedId);
179
+ else
180
+ void controller.load(state.cursor);
181
+ }, children: "Retry" }) })), state.notice === null ? null : _jsx("p", { role: "status", children: state.notice }), _jsx(Button, { type: "button", variant: "outline", disabled: state.loading || state.busy, onClick: () => void controller.load(state.cursor), children: "Reload runs" }), state.loading ? _jsx(ListState, { kind: "loading", title: "Loading import runs\u2026" }) : null, state.detailLoading ? _jsx(ListState, { kind: "loading", title: "Loading import run\u2026" }) : null, run === null && !state.detailLoading && !state.loading ? (state.runs.length ? (_jsxs(_Fragment, { children: [_jsx(DataTable, { label: "Import runs", items: state.runs, columns: [
182
+ {
183
+ key: 'id',
184
+ label: 'Run',
185
+ value: (item) => item.id,
186
+ render: (item) => (_jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [_jsxs(Button, { type: "button", variant: "link", className: "h-auto p-0 font-mono", disabled: state.busy, onClick: () => onSelect ? onSelect(item.id) : void controller.select(item.id), children: ["Run ", item.id.slice(0, 6), "\u2026", item.id.slice(-4)] }), _jsx(IdText, { value: item.id, label: "run ID" })] })),
187
+ },
188
+ {
189
+ key: 'state',
190
+ label: 'State',
191
+ value: (item) => item.state,
192
+ render: (item) => _jsx(StatusBadge, { status: item.state }),
193
+ },
194
+ {
195
+ key: 'hash',
196
+ label: 'Plan hash',
197
+ value: (item) => item.planHash ?? '',
198
+ render: (item) => item.planHash ? (_jsx(IdText, { value: item.planHash, label: "plan hash" })) : ('No plan hash'),
199
+ },
200
+ {
201
+ key: 'approved',
202
+ label: 'Approved',
203
+ priority: 2,
204
+ value: (item) => item.approvedAt ?? '',
205
+ render: (item) => _jsx(Time, { value: item.approvedAt, fallback: "Not approved" }),
206
+ },
207
+ {
208
+ key: 'accepted',
209
+ label: 'Accepted',
210
+ priority: 3,
211
+ value: (item) => item.acceptedAt ?? '',
212
+ render: (item) => _jsx(Time, { value: item.acceptedAt, fallback: "Not accepted" }),
213
+ },
214
+ {
215
+ key: 'expires',
216
+ label: 'Before-image expires',
217
+ priority: 3,
218
+ value: (item) => item.beforeImageExpiresAt ?? '',
219
+ render: (item) => (_jsx(Time, { value: item.beforeImageExpiresAt, fallback: "Not scheduled" })),
220
+ },
221
+ ] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { type: "button", variant: "outline", disabled: !state.cursor || state.busy, onClick: () => (onPage ? onPage() : void controller.load()), children: "First page" }), _jsx(Button, { type: "button", variant: "outline", disabled: !state.next || state.busy, onClick: () => {
222
+ if (state.next) {
223
+ if (onPage)
224
+ onPage(state.next);
225
+ else
226
+ void controller.load(state.next);
227
+ }
228
+ }, children: "Next page" })] })] })) : !state.error ? (_jsx(ListState, { kind: state.cursor ? 'filtered-empty' : 'empty', title: state.cursor ? 'No import runs on this page' : 'No import runs.', children: "Create an import plan with the CLI to get started." })) : null) : null, run === null ? null : (_jsxs("section", { "aria-labelledby": "run-heading", className: "space-y-3", children: [_jsx(Button, { type: "button", variant: "link", className: "px-0", disabled: state.busy, onClick: () => (onBack ? onBack() : controller.back()), children: "\u2190 Back to import runs" }), _jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [_jsxs("h2", { id: "run-heading", className: "text-lg font-semibold", children: ["Run ", _jsx(IdText, { value: run.id, label: "run ID" })] }), _jsx(StatusBadge, { status: run.state })] }), _jsxs("div", { className: "detail-grid", children: [_jsxs("div", { className: "detail-group", children: [_jsx("h3", { children: "Plan" }), _jsxs("dl", { className: "detail-list", children: [_jsx("dt", { children: "Plan hash" }), _jsx("dd", { children: run.planHash ? (_jsx(IdText, { value: run.planHash, label: "full plan hash", full: true })) : ('No plan hash') }), _jsx("dt", { children: "Run ID" }), _jsx("dd", { children: _jsx(IdText, { value: run.id, label: "run ID" }) })] })] }), _jsxs("div", { className: "detail-group", children: [_jsx("h3", { children: "Approval" }), _jsxs("dl", { className: "detail-list", children: [_jsx("dt", { children: "Approved at" }), _jsx("dd", { children: _jsx(Time, { value: run.approvedAt, fallback: "Not approved" }) }), _jsx("dt", { children: "Approved by" }), _jsx("dd", { children: _jsx(IdText, { value: run.approvedByUserId, label: "approving user ID" }) })] })] }), _jsxs("div", { className: "detail-group", children: [_jsx("h3", { children: "Execution and retention" }), _jsxs("dl", { className: "detail-list", children: [_jsx("dt", { children: "Accepted at" }), _jsx("dd", { children: _jsx(Time, { value: run.acceptedAt, fallback: "Not accepted" }) }), _jsx("dt", { children: "Before-image expires" }), _jsx("dd", { children: _jsx(Time, { value: run.beforeImageExpiresAt, fallback: "Not scheduled" }) })] })] })] }), _jsx("h3", { className: "font-semibold", children: "Actions" }), _jsx("p", { className: "text-sm text-neutral-600", children: "Apply requires an approved plan. Cancel is available for planned runs. Rollback is available after execution while before-images are retained." }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { type: "button", variant: "outline", disabled: state.busy, onClick: () => void controller.select(run.id), children: "Reload run" }), _jsx(Button, { type: "button", disabled: state.busy || !importActionAllowed(run, 'approve', now), onClick: () => controller.openApproval(), children: "Review approval" }), ['apply', 'cancel', 'rollback'].map((action) => (_jsx(Button, { type: "button", variant: action === 'apply' ? 'outline' : 'ghost', className: action === 'apply' ? undefined : 'text-red-700', disabled: state.busy || !importActionAllowed(run, action, now), title: !importActionAllowed(run, action, now)
229
+ ? 'Unavailable in the current state or retention window.'
230
+ : undefined, onClick: () => void controller.action(action), children: action === 'apply' ? 'Apply' : action === 'cancel' ? 'Cancel run' : 'Rollback' }, action)))] })] })), state.dialog && run !== null ? (_jsx(Dialog, { open: true, onOpenChange: (open) => {
231
+ if (!open)
232
+ controller.closeApproval();
233
+ }, children: _jsx(DialogContent, { onCancel: (event) => {
234
+ if (state.busy)
235
+ event.preventDefault();
236
+ }, children: _jsxs("form", { className: "grid gap-4", onSubmit: (event) => {
237
+ event.preventDefault();
238
+ if (state.busy || !state.confirmed)
239
+ return;
240
+ void controller.action('approve');
241
+ }, children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Approve import run" }), _jsx(DialogDescription, { children: "Confirm the full plan hash for the plan you reviewed with the CLI." })] }), _jsx("p", { className: "break-all", children: _jsx("code", { children: run.planHash }) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { id: "confirm-plan", type: "checkbox", className: "h-4 w-4", checked: state.confirmed, disabled: state.busy, onChange: (event) => controller.confirmApproval(event.currentTarget.checked) }), _jsx(Label, { htmlFor: "confirm-plan", children: "I confirm this plan hash." })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", disabled: state.busy, onClick: () => controller.closeApproval(), children: "Back" }), _jsx(Button, { type: "submit", disabled: !state.confirmed || state.busy, children: "Approve run" })] })] }) }) })) : null] }));
242
+ }
243
+ export function ImportPage() {
244
+ const services = useServices();
245
+ const controller = useMemo(() => createImportController(services), [services]);
246
+ const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
247
+ const [hash, setHash] = useState(() => window.location.hash);
248
+ useEffect(() => {
249
+ const change = () => setHash(window.location.hash);
250
+ window.addEventListener('hashchange', change);
251
+ return () => window.removeEventListener('hashchange', change);
252
+ }, []);
253
+ useEffect(() => {
254
+ const query = new URLSearchParams(hash.split('?')[1]);
255
+ void controller.load(query.get('cursor') ?? undefined);
256
+ const id = query.get('run');
257
+ if (id)
258
+ void controller.select(id);
259
+ else
260
+ controller.back();
261
+ }, [controller, hash]);
262
+ const navigate = (key, value) => {
263
+ const query = new URLSearchParams(hash.split('?')[1]);
264
+ if (value)
265
+ query.set(key, value);
266
+ else
267
+ query.delete(key);
268
+ if (key === 'cursor')
269
+ query.delete('run');
270
+ window.location.hash = `#/import${query.size ? `?${query}` : ''}`;
271
+ };
272
+ return (_jsx(ImportView, { state: state, controller: controller, onSelect: (id) => navigate('run', id), onBack: () => navigate('run'), onPage: (cursor) => navigate('cursor', cursor) }));
273
+ }
274
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/pages/import.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type FormEvent, type ReactNode } from 'react';
2
+ import type { ApiResult } from '../api.js';
3
+ import { type ShellServices, type ReplayResult } from '../auth.js';
4
+ export interface ManagementQuery {
5
+ project: string | null;
6
+ status?: string;
7
+ q?: string;
8
+ after?: string | undefined;
9
+ }
10
+ export declare function parseManagementHash(hash: string, statuses: readonly string[]): ManagementQuery;
11
+ export declare function createManagementStore<S>(initial: S): {
12
+ snapshot: () => S;
13
+ set(patch: Partial<S>): void;
14
+ subscribe(listener: () => void): () => void;
15
+ };
16
+ export declare function failureNotice(result: {
17
+ status: number;
18
+ code?: string;
19
+ }): string;
20
+ export declare function requireReauth(services: ShellServices, result: ApiResult<unknown>): boolean;
21
+ export declare function revisionTag(revision: number): string | null;
22
+ export declare function formValues(event: FormEvent<HTMLFormElement>): Record<string, string>;
23
+ export declare function Field(props: {
24
+ name: string;
25
+ label: string;
26
+ value?: string;
27
+ required?: boolean;
28
+ }): import("react").JSX.Element;
29
+ export declare function ManagementNotice(props: {
30
+ notice: string | null;
31
+ loading: boolean;
32
+ busy: boolean;
33
+ reload: () => void;
34
+ listError?: boolean;
35
+ }): import("react").JSX.Element;
36
+ export declare function ManagementFilters(props: {
37
+ route: 'projects' | 'access';
38
+ query: ManagementQuery;
39
+ statuses: readonly string[];
40
+ children?: ReactNode;
41
+ }): import("react").JSX.Element;
42
+ export declare function useManagementHash<Q>(services: ShellServices, controller: {
43
+ load: (query: Q) => Promise<void>;
44
+ replayed: (result: ReplayResult) => Promise<void>;
45
+ dispose: () => void;
46
+ }, parse: (hash: string) => Q, route: 'projects' | 'access'): string;
47
+ //# sourceMappingURL=management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management.d.ts","sourceRoot":"","sources":["../../src/pages/management.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAUjF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAU9F;AACD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;;eAKpC,OAAO,CAAC,CAAC,CAAC;wBAID,MAAM,IAAI;EAOjC;AACD,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkB/E;AACD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAI1F;AACD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE3D;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKpF;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,+BAO/F;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,+BAsBA;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAmFA;AACD,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE;IACV,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,EACD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAE,UAAU,GAAG,QAAQ,UAsB7B"}