@package-broker/ui 0.19.8 → 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.
- package/LICENSE +661 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/api-types.d.ts +9987 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +6 -0
- package/dist/api-types.js.map +1 -0
- package/dist/api.d.ts +88 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +179 -0
- package/dist/api.js.map +1 -0
- package/dist/app.d.ts +76 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +239 -0
- package/dist/app.js.map +1 -0
- package/dist/assets/app.0348e5888f99.js +15 -0
- package/dist/assets/app.e8cea8b32d3a.css +2 -0
- package/dist/assets/index.html +13 -0
- package/dist/assets/manifest.json +26 -0
- package/dist/assets/setup.98343039898f.js +1 -0
- package/dist/assets/setup.html +14 -0
- package/dist/auth.d.ts +170 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +551 -0
- package/dist/auth.js.map +1 -0
- package/dist/components/ui/alert.d.ts +10 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +22 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/badge.d.ts +8 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +18 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +13 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +27 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +21 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/confirm-action.d.ts +12 -0
- package/dist/components/ui/confirm-action.d.ts.map +1 -0
- package/dist/components/ui/confirm-action.js +19 -0
- package/dist/components/ui/confirm-action.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +180 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +8 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +71 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/id-text.d.ts +11 -0
- package/dist/components/ui/id-text.d.ts.map +1 -0
- package/dist/components/ui/id-text.js +23 -0
- package/dist/components/ui/id-text.js.map +1 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +6 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +7 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/list-state.d.ts +7 -0
- package/dist/components/ui/list-state.d.ts.map +1 -0
- package/dist/components/ui/list-state.js +5 -0
- package/dist/components/ui/list-state.js.map +1 -0
- package/dist/components/ui/overlay-host.d.ts +6 -0
- package/dist/components/ui/overlay-host.d.ts.map +1 -0
- package/dist/components/ui/overlay-host.js +36 -0
- package/dist/components/ui/overlay-host.js.map +1 -0
- package/dist/components/ui/row-actions.d.ts +17 -0
- package/dist/components/ui/row-actions.d.ts.map +1 -0
- package/dist/components/ui/row-actions.js +21 -0
- package/dist/components/ui/row-actions.js.map +1 -0
- package/dist/components/ui/select.d.ts +3 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +6 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/status-badge.d.ts +28 -0
- package/dist/components/ui/status-badge.d.ts.map +1 -0
- package/dist/components/ui/status-badge.js +50 -0
- package/dist/components/ui/status-badge.js.map +1 -0
- package/dist/components/ui/table.d.ts +27 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +81 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +7 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +14 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +14 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/time.d.ts +5 -0
- package/dist/components/ui/time.d.ts.map +1 -0
- package/dist/components/ui/time.js +14 -0
- package/dist/components/ui/time.js.map +1 -0
- package/dist/components/ui/toolbar.d.ts +20 -0
- package/dist/components/ui/toolbar.d.ts.map +1 -0
- package/dist/components/ui/toolbar.js +42 -0
- package/dist/components/ui/toolbar.js.map +1 -0
- package/dist/components/vulnerability-status.d.ts +8 -0
- package/dist/components/vulnerability-status.d.ts.map +1 -0
- package/dist/components/vulnerability-status.js +49 -0
- package/dist/components/vulnerability-status.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/use-merged-refs.d.ts +3 -0
- package/dist/lib/use-merged-refs.d.ts.map +1 -0
- package/dist/lib/use-merged-refs.js +22 -0
- package/dist/lib/use-merged-refs.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +9 -0
- package/dist/main.js.map +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +21 -0
- package/dist/manifest.js.map +1 -0
- package/dist/page-hash.d.ts +23 -0
- package/dist/page-hash.d.ts.map +1 -0
- package/dist/page-hash.js +45 -0
- package/dist/page-hash.js.map +1 -0
- package/dist/pages/access.d.ts +69 -0
- package/dist/pages/access.d.ts.map +1 -0
- package/dist/pages/access.js +391 -0
- package/dist/pages/access.js.map +1 -0
- package/dist/pages/audit.d.ts +63 -0
- package/dist/pages/audit.d.ts.map +1 -0
- package/dist/pages/audit.js +182 -0
- package/dist/pages/audit.js.map +1 -0
- package/dist/pages/import.d.ts +41 -0
- package/dist/pages/import.d.ts.map +1 -0
- package/dist/pages/import.js +274 -0
- package/dist/pages/import.js.map +1 -0
- package/dist/pages/management.d.ts +47 -0
- package/dist/pages/management.d.ts.map +1 -0
- package/dist/pages/management.js +141 -0
- package/dist/pages/management.js.map +1 -0
- package/dist/pages/packages.d.ts +74 -0
- package/dist/pages/packages.d.ts.map +1 -0
- package/dist/pages/packages.js +505 -0
- package/dist/pages/packages.js.map +1 -0
- package/dist/pages/projects.d.ts +58 -0
- package/dist/pages/projects.d.ts.map +1 -0
- package/dist/pages/projects.js +357 -0
- package/dist/pages/projects.js.map +1 -0
- package/dist/pages/sources/add-package-dialog.d.ts +10 -0
- package/dist/pages/sources/add-package-dialog.d.ts.map +1 -0
- package/dist/pages/sources/add-package-dialog.js +19 -0
- package/dist/pages/sources/add-package-dialog.js.map +1 -0
- package/dist/pages/sources/proxy-message.d.ts +2 -0
- package/dist/pages/sources/proxy-message.d.ts.map +1 -0
- package/dist/pages/sources/proxy-message.js +2 -0
- package/dist/pages/sources/proxy-message.js.map +1 -0
- package/dist/pages/sources/source-form.d.ts +29 -0
- package/dist/pages/sources/source-form.d.ts.map +1 -0
- package/dist/pages/sources/source-form.js +463 -0
- package/dist/pages/sources/source-form.js.map +1 -0
- package/dist/pages/sources/sync-poll.d.ts +20 -0
- package/dist/pages/sources/sync-poll.d.ts.map +1 -0
- package/dist/pages/sources/sync-poll.js +71 -0
- package/dist/pages/sources/sync-poll.js.map +1 -0
- package/dist/pages/sources.d.ts +325 -0
- package/dist/pages/sources.d.ts.map +1 -0
- package/dist/pages/sources.js +1132 -0
- package/dist/pages/sources.js.map +1 -0
- package/dist/pages/tokens/client-config.d.ts +5 -0
- package/dist/pages/tokens/client-config.d.ts.map +1 -0
- package/dist/pages/tokens/client-config.js +9 -0
- package/dist/pages/tokens/client-config.js.map +1 -0
- package/dist/pages/tokens.d.ts +127 -0
- package/dist/pages/tokens.d.ts.map +1 -0
- package/dist/pages/tokens.js +744 -0
- package/dist/pages/tokens.js.map +1 -0
- package/dist/pending.d.ts +33 -0
- package/dist/pending.d.ts.map +1 -0
- package/dist/pending.js +156 -0
- package/dist/pending.js.map +1 -0
- package/dist/qr.d.ts +14 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +322 -0
- package/dist/qr.js.map +1 -0
- package/dist/setup.d.ts +49 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +390 -0
- package/dist/setup.js.map +1 -0
- package/dist/test-fixtures/api-types.d.ts +228 -0
- package/dist/test-fixtures/api-types.d.ts.map +1 -0
- package/dist/test-fixtures/api-types.js +6 -0
- package/dist/test-fixtures/api-types.js.map +1 -0
- package/package.json +37 -40
- package/public/index.html +11 -0
- package/README.md +0 -11
- package/dist/assets/main-3NLwl1eV.js +0 -111
- package/dist/assets/main-CsTEYyDl.css +0 -1
- package/dist/config.js +0 -3
- package/dist/index.html +0 -22
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useSyncExternalStore } from 'react';
|
|
3
|
+
import { useServices } from '../auth.js';
|
|
4
|
+
import { buildListFilterHash } from '../page-hash.js';
|
|
5
|
+
import { Button } from '../components/ui/button.js';
|
|
6
|
+
import { Label } from '../components/ui/label.js';
|
|
7
|
+
import { Select } from '../components/ui/select.js';
|
|
8
|
+
import { DataTable } from '../components/ui/table.js';
|
|
9
|
+
import { StatusBadge } from '../components/ui/status-badge.js';
|
|
10
|
+
import { IdText } from '../components/ui/id-text.js';
|
|
11
|
+
import { ListState } from '../components/ui/list-state.js';
|
|
12
|
+
import { ConfirmAction } from '../components/ui/confirm-action.js';
|
|
13
|
+
import { createManagementStore, failureNotice, Field, formValues, ManagementFilters, ManagementNotice, parseManagementHash, requireReauth, useManagementHash, } from './management.js';
|
|
14
|
+
const ARCHIVED_NOTICE = 'Project archived.';
|
|
15
|
+
const STATUSES = ['active', 'archived'];
|
|
16
|
+
export const parseProjectsHash = (hash) => parseManagementHash(hash, STATUSES);
|
|
17
|
+
export const buildProjectsHash = (query) => buildListFilterHash('projects', parseProjectsHash(buildListFilterHash('projects', query)));
|
|
18
|
+
async function loadProjectList(client, query, includeArchived = true) {
|
|
19
|
+
if (query.status)
|
|
20
|
+
return client.request('get', '/_pb/projects', {
|
|
21
|
+
query: { status: query.status, after: query.after, limit: '50' },
|
|
22
|
+
});
|
|
23
|
+
let cursors = [query.after, undefined];
|
|
24
|
+
if (query.after?.startsWith('all:')) {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(query.after.slice(4));
|
|
27
|
+
if (!Array.isArray(parsed) ||
|
|
28
|
+
parsed.length !== 2 ||
|
|
29
|
+
!parsed.every((value) => value === null || typeof value === 'string'))
|
|
30
|
+
throw new Error('Invalid cursor');
|
|
31
|
+
cursors = parsed;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return {
|
|
35
|
+
ok: false,
|
|
36
|
+
status: 400,
|
|
37
|
+
code: 'invalid_request',
|
|
38
|
+
details: [],
|
|
39
|
+
request: { method: 'GET', path: '/_pb/projects' },
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!includeArchived && cursors[0] === null)
|
|
44
|
+
return { ok: true, status: 200, data: { items: [], next: null } };
|
|
45
|
+
if (!includeArchived)
|
|
46
|
+
return client.request('get', '/_pb/projects', {
|
|
47
|
+
query: { status: 'active', after: cursors[0] ?? undefined, limit: '50' },
|
|
48
|
+
});
|
|
49
|
+
const pages = await Promise.all(STATUSES.map((status, index) => cursors[index] === null
|
|
50
|
+
? null
|
|
51
|
+
: client.request('get', '/_pb/projects', {
|
|
52
|
+
query: { status, after: cursors[index] ?? undefined, limit: '50' },
|
|
53
|
+
})));
|
|
54
|
+
const items = [];
|
|
55
|
+
const next = [];
|
|
56
|
+
for (const [index, page] of pages.entries()) {
|
|
57
|
+
if (page && !page.ok) {
|
|
58
|
+
if (STATUSES[index] === 'archived' && page.status === 403) {
|
|
59
|
+
next.push(null);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
return page;
|
|
63
|
+
}
|
|
64
|
+
if (page?.ok)
|
|
65
|
+
items.push(...page.data.items);
|
|
66
|
+
next.push(page?.ok ? page.data.next : null);
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
ok: true,
|
|
70
|
+
status: 200,
|
|
71
|
+
data: {
|
|
72
|
+
items,
|
|
73
|
+
next: next.some((cursor) => cursor !== null) ? `all:${JSON.stringify(next)}` : null,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export function projectsViewModel(state) {
|
|
78
|
+
const selected = state.selected;
|
|
79
|
+
const ready = !!selected && !!state.etag && !state.loading && !state.stale;
|
|
80
|
+
return {
|
|
81
|
+
items: state.items.filter((item) => !state.query.q || item.name.toLowerCase().startsWith(state.query.q.toLowerCase())),
|
|
82
|
+
create: state.organization.includes('org:projects:create') && !state.stale && !state.loading,
|
|
83
|
+
settings: ready && selected.status === 'active' && state.permissions.includes('project:settings:write'),
|
|
84
|
+
transition: ready && state.organization.includes('org:projects:archive'),
|
|
85
|
+
transitionItems: !state.loading && !state.stale && state.organization.includes('org:projects:archive'),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export function createProjectsController(services) {
|
|
89
|
+
const store = createManagementStore({
|
|
90
|
+
query: { project: null },
|
|
91
|
+
items: [],
|
|
92
|
+
next: null,
|
|
93
|
+
selected: null,
|
|
94
|
+
etag: null,
|
|
95
|
+
organization: [],
|
|
96
|
+
permissions: [],
|
|
97
|
+
loading: false,
|
|
98
|
+
listError: false,
|
|
99
|
+
busy: false,
|
|
100
|
+
stale: false,
|
|
101
|
+
notice: null,
|
|
102
|
+
});
|
|
103
|
+
let generation = 0;
|
|
104
|
+
const { client } = services;
|
|
105
|
+
async function load(query, notice = buildProjectsHash(query) ===
|
|
106
|
+
buildProjectsHash(store.snapshot().query) && store.snapshot().notice === ARCHIVED_NOTICE
|
|
107
|
+
? ARCHIVED_NOTICE
|
|
108
|
+
: null) {
|
|
109
|
+
const current = ++generation;
|
|
110
|
+
store.set({
|
|
111
|
+
query,
|
|
112
|
+
items: [],
|
|
113
|
+
next: null,
|
|
114
|
+
selected: null,
|
|
115
|
+
etag: null,
|
|
116
|
+
organization: [],
|
|
117
|
+
permissions: [],
|
|
118
|
+
loading: true,
|
|
119
|
+
listError: false,
|
|
120
|
+
busy: false,
|
|
121
|
+
stale: false,
|
|
122
|
+
notice,
|
|
123
|
+
});
|
|
124
|
+
const organizationRequest = client.request('get', '/_pb/me/permissions');
|
|
125
|
+
const [initialList, organization, initialSelected, initialPermissions] = await Promise.all([
|
|
126
|
+
organizationRequest.then((result) => loadProjectList(client, query, result.ok &&
|
|
127
|
+
result.data.organization.includes('org:projects:archive') &&
|
|
128
|
+
result.data.organization.includes('project:read'))),
|
|
129
|
+
organizationRequest,
|
|
130
|
+
query.project === null
|
|
131
|
+
? null
|
|
132
|
+
: client.request('get', '/_pb/projects/{project}', { params: { project: query.project } }),
|
|
133
|
+
query.project === null
|
|
134
|
+
? null
|
|
135
|
+
: client.request('get', '/_pb/projects/{project}/permissions', {
|
|
136
|
+
params: { project: query.project },
|
|
137
|
+
}),
|
|
138
|
+
]);
|
|
139
|
+
if (current !== generation)
|
|
140
|
+
return;
|
|
141
|
+
let list = initialList;
|
|
142
|
+
let selected = initialSelected;
|
|
143
|
+
let permissions = initialPermissions;
|
|
144
|
+
if (selected && !selected.ok && selected.status === 404) {
|
|
145
|
+
let after;
|
|
146
|
+
const cursors = new Set();
|
|
147
|
+
while (true) {
|
|
148
|
+
const archivedQuery = { project: null, status: 'archived', after };
|
|
149
|
+
const archived = await loadProjectList(client, archivedQuery);
|
|
150
|
+
if (current !== generation)
|
|
151
|
+
return;
|
|
152
|
+
if (!archived.ok)
|
|
153
|
+
break;
|
|
154
|
+
if (archived.data.items.some((item) => item.slug === query.project && item.status === 'archived')) {
|
|
155
|
+
query = archivedQuery;
|
|
156
|
+
list = archived;
|
|
157
|
+
selected = null;
|
|
158
|
+
permissions = null;
|
|
159
|
+
notice = ARCHIVED_NOTICE;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
const next = archived.data.next;
|
|
163
|
+
if (!next || cursors.has(next))
|
|
164
|
+
break;
|
|
165
|
+
cursors.add(next);
|
|
166
|
+
after = next;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (notice === ARCHIVED_NOTICE) {
|
|
170
|
+
query = { ...query, project: null };
|
|
171
|
+
selected = null;
|
|
172
|
+
permissions = null;
|
|
173
|
+
if (!list.ok) {
|
|
174
|
+
query = { ...query, status: 'active', after: undefined };
|
|
175
|
+
list = await loadProjectList(client, query);
|
|
176
|
+
if (current !== generation)
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
store.set({
|
|
181
|
+
query,
|
|
182
|
+
loading: false,
|
|
183
|
+
listError: !list.ok,
|
|
184
|
+
items: list.ok ? list.data.items : [],
|
|
185
|
+
next: list.ok ? list.data.next : null,
|
|
186
|
+
organization: organization.ok ? organization.data.organization : [],
|
|
187
|
+
selected: selected?.ok ? selected.data : null,
|
|
188
|
+
etag: selected?.ok ? (selected.headers?.etag ?? null) : null,
|
|
189
|
+
permissions: permissions?.ok ? permissions.data.project : [],
|
|
190
|
+
notice: !list.ok
|
|
191
|
+
? failureNotice(list)
|
|
192
|
+
: selected && !selected.ok
|
|
193
|
+
? failureNotice(selected)
|
|
194
|
+
: notice,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async function write(run, archivedSlug) {
|
|
198
|
+
const state = store.snapshot();
|
|
199
|
+
if (state.busy || state.loading || state.stale)
|
|
200
|
+
return;
|
|
201
|
+
const current = generation;
|
|
202
|
+
store.set({ busy: true, notice: null });
|
|
203
|
+
const result = await run();
|
|
204
|
+
if (result.ok)
|
|
205
|
+
services.onProjectsChanged?.();
|
|
206
|
+
if (current !== generation)
|
|
207
|
+
return;
|
|
208
|
+
store.set({ busy: false });
|
|
209
|
+
if (requireReauth(services, result)) {
|
|
210
|
+
store.set({
|
|
211
|
+
stale: true,
|
|
212
|
+
notice: 'Complete reauthentication and confirm the pending action.',
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
else if (!result.ok) {
|
|
216
|
+
store.set({ stale: result.status === 412, notice: failureNotice(result) });
|
|
217
|
+
}
|
|
218
|
+
else
|
|
219
|
+
await load(archivedSlug ? { ...state.query, project: archivedSlug } : state.query, archivedSlug ? ARCHIVED_NOTICE : 'Project updated.');
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
snapshot: store.snapshot,
|
|
223
|
+
subscribe: store.subscribe,
|
|
224
|
+
load,
|
|
225
|
+
async create(body) {
|
|
226
|
+
if (projectsViewModel(store.snapshot()).create)
|
|
227
|
+
await write(() => client.request('post', '/_pb/projects', { body, idempotencyKey: crypto.randomUUID() }));
|
|
228
|
+
},
|
|
229
|
+
async update(body) {
|
|
230
|
+
const state = store.snapshot();
|
|
231
|
+
if (projectsViewModel(state).settings)
|
|
232
|
+
await write(() => client.request('patch', '/_pb/projects/{project}', {
|
|
233
|
+
params: { project: state.selected.slug },
|
|
234
|
+
headers: { 'If-Match': state.etag },
|
|
235
|
+
body,
|
|
236
|
+
}));
|
|
237
|
+
},
|
|
238
|
+
async transition() {
|
|
239
|
+
const state = store.snapshot();
|
|
240
|
+
if (projectsViewModel(state).transition)
|
|
241
|
+
await write(() => client.request('post', state.selected.status === 'active'
|
|
242
|
+
? '/_pb/projects/{project}/archive'
|
|
243
|
+
: '/_pb/projects/{project}/restore', {
|
|
244
|
+
params: { project: state.selected.slug },
|
|
245
|
+
headers: { 'If-Match': state.etag },
|
|
246
|
+
idempotencyKey: crypto.randomUUID(),
|
|
247
|
+
}), state.selected.status === 'active' ? state.selected.slug : undefined);
|
|
248
|
+
},
|
|
249
|
+
async transitionItem(id) {
|
|
250
|
+
const state = store.snapshot();
|
|
251
|
+
const item = state.items.find((entry) => entry.id === id);
|
|
252
|
+
if (!item?.etag || !projectsViewModel(state).transitionItems)
|
|
253
|
+
return;
|
|
254
|
+
await write(() => client.request('post', item.status === 'active'
|
|
255
|
+
? '/_pb/projects/{project}/archive'
|
|
256
|
+
: '/_pb/projects/{project}/restore', {
|
|
257
|
+
params: { project: item.slug },
|
|
258
|
+
headers: { 'If-Match': item.etag },
|
|
259
|
+
idempotencyKey: crypto.randomUUID(),
|
|
260
|
+
}), item.status === 'active' ? item.slug : undefined);
|
|
261
|
+
},
|
|
262
|
+
async replayed(result) {
|
|
263
|
+
const project = store.snapshot().query.project;
|
|
264
|
+
const path = project === null ? null : `/_pb/projects/${encodeURIComponent(project)}`;
|
|
265
|
+
const listTransition = /^\/_pb\/projects\/[^/]+\/(?:archive|restore)$/.test(result.path);
|
|
266
|
+
if (!listTransition &&
|
|
267
|
+
result.path !== '/_pb/projects' &&
|
|
268
|
+
(path === null || ![path, `${path}/archive`, `${path}/restore`].includes(result.path)))
|
|
269
|
+
return;
|
|
270
|
+
if (result.ok) {
|
|
271
|
+
const archivedSlug = listTransition && result.path.endsWith('/archive')
|
|
272
|
+
? decodeURIComponent(result.path.split('/')[3])
|
|
273
|
+
: null;
|
|
274
|
+
await load(archivedSlug
|
|
275
|
+
? { ...store.snapshot().query, project: archivedSlug }
|
|
276
|
+
: store.snapshot().query, archivedSlug ? ARCHIVED_NOTICE : 'Project updated.');
|
|
277
|
+
}
|
|
278
|
+
else
|
|
279
|
+
store.set({ stale: true, notice: failureNotice(result) });
|
|
280
|
+
},
|
|
281
|
+
dispose() {
|
|
282
|
+
++generation;
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function TokenPolicy(props) {
|
|
287
|
+
return (_jsxs(_Fragment, { children: [_jsxs(Label, { className: "grid gap-1", children: ["Maximum token scope", _jsx(Select, { name: "tokenMaxScope", defaultValue: props.project?.tokenMaxScope ?? 'read', children: ['read', 'write', 'full'].map((scope) => (_jsx("option", { value: scope, children: scope }, scope))) })] }), _jsxs(Label, { className: "grid gap-1", children: ["Publish approval", _jsxs(Select, { name: "requirePublishApproval", defaultValue: String(props.project?.requirePublishApproval ?? false), children: [_jsx("option", { value: "false", children: "Not required" }), _jsx("option", { value: "true", children: "Required" })] })] })] }));
|
|
288
|
+
}
|
|
289
|
+
export function ProjectsView({ state, controller, }) {
|
|
290
|
+
const model = projectsViewModel(state);
|
|
291
|
+
return (_jsxs(_Fragment, { children: [_jsx(ManagementNotice, { ...state, reload: () => void controller.load(state.query) }), state.query.q ? _jsx("p", { children: "Filtering loaded projects on this page." }) : null, !state.loading && !state.listError ? (model.items.length ? (_jsxs(_Fragment, { children: [_jsxs("p", { className: "my-3 text-sm text-neutral-600", children: [model.items.length, " projects on this page"] }), _jsx(DataTable, { label: "Projects", items: model.items, selectedId: state.selected?.id ?? '', columns: [
|
|
292
|
+
{
|
|
293
|
+
key: 'name',
|
|
294
|
+
label: 'Name',
|
|
295
|
+
value: (item) => item.name,
|
|
296
|
+
render: (item) => (_jsxs("div", { className: "grid gap-1", children: [_jsx("a", { className: "font-medium underline", href: buildProjectsHash({ ...state.query, project: item.slug }), children: item.name }), _jsx("code", { className: "text-xs text-neutral-600", children: item.slug })] })),
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
key: 'status',
|
|
300
|
+
label: 'Status',
|
|
301
|
+
value: (item) => item.status,
|
|
302
|
+
render: (item) => _jsx(StatusBadge, { status: item.status }),
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
key: 'id',
|
|
306
|
+
label: 'Project ID',
|
|
307
|
+
value: (item) => item.id,
|
|
308
|
+
render: (item) => _jsx(IdText, { value: item.id, label: "project ID" }),
|
|
309
|
+
priority: 3,
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
key: 'actions',
|
|
313
|
+
label: 'Actions',
|
|
314
|
+
value: () => '',
|
|
315
|
+
sortable: false,
|
|
316
|
+
render: (item) => (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("a", { className: "underline", href: buildProjectsHash({ ...state.query, project: item.slug }), children: "Open settings" }), model.transitionItems && item.etag ? (item.status === 'active' ? (_jsx(ConfirmAction, { action: "Archive", target: `${item.name} (${item.id})`, scope: `Project: ${item.slug}`, description: "Archiving keeps project history and blocks new publishes. You can restore this project later.", disabled: state.busy, onConfirm: () => void controller.transitionItem(item.id) }, `${item.id}:${item.etag}`)) : (_jsx(Button, { type: "button", size: "sm", variant: "outline", disabled: state.busy, onClick: () => void controller.transitionItem(item.id), children: "Restore" }))) : null] })),
|
|
317
|
+
},
|
|
318
|
+
] })] })) : (_jsx(ListState, { kind: state.query.q || state.query.status ? 'filtered-empty' : 'empty', title: "No projects found on this page." }))) : null, state.next ? (_jsx("a", { className: "my-4 inline-block underline", href: buildProjectsHash({ ...state.query, after: state.next }), children: "Next projects" })) : null, model.create ? (_jsxs("details", { className: "detail-group my-6", children: [_jsx("summary", { className: "cursor-pointer font-semibold", children: "New project" }), _jsx("p", { className: "mt-3 text-neutral-600", children: "The slug is the API and CLI name; it cannot change after creation." }), _jsxs("form", { className: "my-6 grid gap-3", onSubmit: (event) => {
|
|
319
|
+
event.preventDefault();
|
|
320
|
+
if (state.busy)
|
|
321
|
+
return;
|
|
322
|
+
const values = formValues(event);
|
|
323
|
+
void controller.create({
|
|
324
|
+
name: values['name'] ?? '',
|
|
325
|
+
slug: values['slug'] ?? '',
|
|
326
|
+
tokenMaxScope: values['tokenMaxScope'],
|
|
327
|
+
requirePublishApproval: values['requirePublishApproval'] === 'true',
|
|
328
|
+
});
|
|
329
|
+
}, children: [_jsx("h2", { className: "text-lg font-semibold", children: "New project" }), _jsx(Field, { name: "name", label: "Project name" }), _jsx(Field, { name: "slug", label: "Slug" }), _jsx(TokenPolicy, {}), _jsx(Button, { type: "submit", disabled: state.busy, children: "Create project" })] })] })) : null, state.selected ? (_jsxs("section", { className: "detail-group my-6 grid gap-3", "aria-label": "Project settings", children: [_jsxs("h2", { className: "text-lg font-semibold", children: ["Settings: ", state.selected.name] }), _jsxs("p", { children: ["Maximum token scope: ", state.selected.tokenMaxScope, ". Publish approval:", ' ', state.selected.requirePublishApproval ? 'required' : 'not required', "."] }), model.settings ? (_jsxs("form", { className: "grid gap-3", onSubmit: (event) => {
|
|
330
|
+
event.preventDefault();
|
|
331
|
+
if (state.busy)
|
|
332
|
+
return;
|
|
333
|
+
const values = formValues(event);
|
|
334
|
+
void controller.update({
|
|
335
|
+
name: values['name'] ?? '',
|
|
336
|
+
tokenMaxScope: values['tokenMaxScope'],
|
|
337
|
+
requirePublishApproval: values['requirePublishApproval'] === 'true',
|
|
338
|
+
});
|
|
339
|
+
}, children: [_jsx(Field, { name: "name", label: "Project name", value: state.selected.name }), _jsx(TokenPolicy, { project: state.selected }), _jsx(Button, { type: "submit", disabled: state.busy, children: "Save settings" })] }, `${state.selected.id}-${state.etag}`)) : null, model.transition ? (state.selected.status === 'active' ? (_jsx(ConfirmAction, { action: "Archive", target: state.selected.name, scope: `Project: ${state.selected.slug}`, description: "Archiving keeps project history and blocks new publishes. You can restore this project later.", disabled: state.busy, onConfirm: () => void controller.transition() }, `${state.selected.id}:${state.etag}`)) : (_jsx(Button, { type: "button", variant: "outline", disabled: state.busy, onClick: () => void controller.transition(), children: "Restore" }))) : null] })) : null] }));
|
|
340
|
+
}
|
|
341
|
+
export function ProjectsPage() {
|
|
342
|
+
const services = useServices();
|
|
343
|
+
const controller = useMemo(() => createProjectsController(services), [services]);
|
|
344
|
+
const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
|
|
345
|
+
const hash = useManagementHash(services, controller, parseProjectsHash, 'projects');
|
|
346
|
+
useEffect(() => {
|
|
347
|
+
if (state.loading || state.notice !== ARCHIVED_NOTICE || state.query.project !== null)
|
|
348
|
+
return;
|
|
349
|
+
const next = buildProjectsHash(state.query);
|
|
350
|
+
if (window.location.hash === next)
|
|
351
|
+
return;
|
|
352
|
+
window.history.replaceState(null, '', next);
|
|
353
|
+
window.dispatchEvent(new HashChangeEvent('hashchange'));
|
|
354
|
+
}, [state.loading, state.notice, state.query]);
|
|
355
|
+
return (_jsxs("section", { "aria-labelledby": "page-heading", children: [_jsx("h1", { tabIndex: -1, id: "page-heading", className: "text-xl font-semibold", children: "Projects" }), _jsx("p", { className: "mt-1 text-neutral-600", children: "Scopes for sources, packages and tokens. Archiving keeps history and blocks new publishes." }), _jsx(ManagementFilters, { route: "projects", query: parseProjectsHash(hash), statuses: STATUSES }, hash), _jsx(ProjectsView, { state: state, controller: controller })] }));
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/pages/projects.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Source } from '../sources.js';
|
|
2
|
+
export declare function AddPackageDialog({ source, busy, fieldError, alert, onSubmit, onClose, }: {
|
|
3
|
+
source: Source;
|
|
4
|
+
busy: boolean;
|
|
5
|
+
fieldError: string | null;
|
|
6
|
+
alert: string | null;
|
|
7
|
+
onSubmit: (name: string) => void;
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=add-package-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-package-dialog.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/add-package-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAa5C,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,UAAU,EACV,KAAK,EACL,QAAQ,EACR,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAuDA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '../../components/ui/button.js';
|
|
3
|
+
import { Input } from '../../components/ui/input.js';
|
|
4
|
+
import { Label } from '../../components/ui/label.js';
|
|
5
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog.js';
|
|
6
|
+
export function AddPackageDialog({ source, busy, fieldError, alert, onSubmit, onClose, }) {
|
|
7
|
+
return (_jsx(Dialog, { open: true, onOpenChange: (open) => {
|
|
8
|
+
if (!open && !busy)
|
|
9
|
+
onClose();
|
|
10
|
+
}, children: _jsxs(DialogContent, { onCancel: (event) => {
|
|
11
|
+
if (busy)
|
|
12
|
+
event.preventDefault();
|
|
13
|
+
}, children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Add package" }), _jsxs(DialogDescription, { children: ["Request a package from ", source.name, " for this project."] })] }), _jsxs("form", { className: "grid gap-3", onSubmit: (event) => {
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
if (!busy)
|
|
16
|
+
onSubmit(new FormData(event.currentTarget).get('name')?.toString() ?? '');
|
|
17
|
+
}, children: [_jsx(Label, { htmlFor: "add-package-name", children: "Package name" }), _jsx(Input, { id: "add-package-name", name: "name", required: true, maxLength: 428, placeholder: source.ecosystem === 'composer' ? 'vendor/package' : '@scope/package', disabled: busy, "aria-invalid": fieldError ? true : undefined, "aria-describedby": fieldError ? 'add-package-error' : undefined }), fieldError ? (_jsx("p", { id: "add-package-error", role: "alert", children: fieldError })) : null, alert ? _jsx("p", { role: "alert", children: alert }) : null, _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", disabled: busy, onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", disabled: busy, children: busy ? 'Requesting…' : 'Add package' })] })] })] }) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=add-package-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-package-dialog.js","sourceRoot":"","sources":["../../../src/pages/sources/add-package-dialog.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,+BAA+B,CAAC;AAEvC,MAAM,UAAU,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,UAAU,EACV,KAAK,EACL,QAAQ,EACR,OAAO,GAQR;IACC,OAAO,CACL,KAAC,MAAM,IACL,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;QAChC,CAAC,YAED,MAAC,aAAa,IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,IAAI;oBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACnC,CAAC,aAED,MAAC,YAAY,eACX,KAAC,WAAW,8BAA0B,EACtC,MAAC,iBAAiB,0CACQ,MAAM,CAAC,IAAI,0BACjB,IACP,EACf,gBACE,SAAS,EAAC,YAAY,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,CAAC,IAAI;4BAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBACvF,CAAC,aAED,KAAC,KAAK,IAAC,OAAO,EAAC,kBAAkB,6BAAqB,EACtD,KAAC,KAAK,IACJ,EAAE,EAAC,kBAAkB,EACrB,IAAI,EAAC,MAAM,EACX,QAAQ,QACR,SAAS,EAAE,GAAG,EACd,WAAW,EAAE,MAAM,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,EAClF,QAAQ,EAAE,IAAI,kBACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,sBACzB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,GAC9D,EACD,UAAU,CAAC,CAAC,CAAC,CACZ,YAAG,EAAE,EAAC,mBAAmB,EAAC,IAAI,EAAC,OAAO,YACnC,UAAU,GACT,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,YAAG,IAAI,EAAC,OAAO,YAAE,KAAK,GAAK,CAAC,CAAC,CAAC,IAAI,EAC3C,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,uBAE/D,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,YACjC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,GAC9B,IACI,IACV,IACO,GACT,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-message.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/proxy-message.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,0EACwC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-message.js","sourceRoot":"","sources":["../../../src/pages/sources/proxy-message.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAC/B,uEAAuE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { operations } from '../../api-types.js';
|
|
2
|
+
import type { ApiErrorDetail } from '../../api.js';
|
|
3
|
+
import { type Source } from '../sources.js';
|
|
4
|
+
export type CreateSource = operations['createOrganizationSource']['requestBody']['content']['application/json'];
|
|
5
|
+
export type SourceChanges = operations['updateOrganizationSource']['requestBody']['content']['application/json'];
|
|
6
|
+
export type VcsProvider = operations['listOrganizationSources']['responses'][200]['content']['application/json']['vcsProviders'][number];
|
|
7
|
+
/** The provider choices in display order, limited to those the broker reports it serves. */
|
|
8
|
+
export declare function vcsProviderOptions(reported: readonly string[]): readonly (readonly [VcsProvider, string])[];
|
|
9
|
+
export declare const SOURCE_TYPES: {
|
|
10
|
+
readonly composer: readonly ["packagist_proxy", "composer_repository", "vcs"];
|
|
11
|
+
readonly npm: readonly ["npmjs_proxy", "npm_registry"];
|
|
12
|
+
};
|
|
13
|
+
export declare const SOURCE_TYPE_LABELS: Record<CreateSource['type'], string>;
|
|
14
|
+
export declare function sourceFieldErrors(details: ApiErrorDetail[]): Record<string, string>;
|
|
15
|
+
export declare function validateSourceForm(data: FormData, type: CreateSource['type'], editing: boolean, original?: Source | null, baseline?: FormData | null): Record<string, string>;
|
|
16
|
+
export declare function sourceSubmission(data: FormData, ecosystem: CreateSource['ecosystem'], type: CreateSource['type'], original: Source | null, initialData?: FormData | null): CreateSource | SourceChanges;
|
|
17
|
+
export declare function sourceFormData(source: Source): FormData;
|
|
18
|
+
export declare function scopeNamePatterns(scopes: string): string[];
|
|
19
|
+
export declare function focusSourceError(form: HTMLFormElement | null, errors: Record<string, string>): void;
|
|
20
|
+
export declare function SourceForm({ source, busy, errors: serverErrors, alert, onSubmit, onClose, vcsProviders, }: {
|
|
21
|
+
source: Source | null;
|
|
22
|
+
busy: boolean;
|
|
23
|
+
errors: Record<string, string>;
|
|
24
|
+
alert: string | null;
|
|
25
|
+
onSubmit: (body: CreateSource | SourceChanges) => void;
|
|
26
|
+
onClose: () => void;
|
|
27
|
+
vcsProviders?: readonly VcsProvider[] | undefined;
|
|
28
|
+
}): import("react").JSX.Element;
|
|
29
|
+
//# sourceMappingURL=source-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-form.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/source-form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAanD,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,MAAM,YAAY,GACtB,UAAU,CAAC,0BAA0B,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACvF,MAAM,MAAM,aAAa,GACvB,UAAU,CAAC,0BAA0B,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACvF,MAAM,MAAM,WAAW,GACrB,UAAU,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAQjH,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAI7C;AACD,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAKX,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAOnE,CAAC;AAyFF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUnF;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,QAAQ,GAAE,QAAQ,GAAG,IAAiD,GACrE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkDxB;AAuFD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,EACpC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,WAAW,GAAE,QAAQ,GAAG,IAAiD,GACxE,YAAY,GAAG,aAAa,CAoB9B;AAWD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAoBvD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAS1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAS5F;AAED,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,YAAoC,GACrC,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,KAAK,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;CACnD,+BAqiBA"}
|