@vertebr/react 0.8.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/admin/AddonEditor.d.ts +13 -0
- package/dist/components/admin/AddonEditor.d.ts.map +1 -0
- package/dist/components/admin/AddonEditor.js +27 -0
- package/dist/components/admin/AddonOverview.d.ts +8 -0
- package/dist/components/admin/AddonOverview.d.ts.map +1 -0
- package/dist/components/admin/AddonOverview.js +125 -0
- package/dist/components/admin/AddonPreviewThumb.d.ts +11 -0
- package/dist/components/admin/AddonPreviewThumb.d.ts.map +1 -0
- package/dist/components/admin/AddonPreviewThumb.js +52 -0
- package/dist/components/admin/AdminCommandPalette.d.ts +9 -0
- package/dist/components/admin/AdminCommandPalette.d.ts.map +1 -0
- package/dist/components/admin/AdminCommandPalette.js +68 -0
- package/dist/components/admin/AdminContent.d.ts +4 -1
- package/dist/components/admin/AdminContent.d.ts.map +1 -1
- package/dist/components/admin/AdminContent.js +32 -10
- package/dist/components/admin/AdminHeader.d.ts +2 -3
- package/dist/components/admin/AdminHeader.d.ts.map +1 -1
- package/dist/components/admin/AdminHeader.js +10 -3
- package/dist/components/admin/AdminPoweredBy.d.ts +5 -0
- package/dist/components/admin/AdminPoweredBy.d.ts.map +1 -0
- package/dist/components/admin/AdminPoweredBy.js +8 -0
- package/dist/components/admin/AdminSidebar.d.ts.map +1 -1
- package/dist/components/admin/AdminSidebar.js +9 -7
- package/dist/components/admin/AdminSyncPage.d.ts +7 -0
- package/dist/components/admin/AdminSyncPage.d.ts.map +1 -0
- package/dist/components/admin/AdminSyncPage.js +169 -0
- package/dist/components/admin/AdminTopBar.d.ts +11 -3
- package/dist/components/admin/AdminTopBar.d.ts.map +1 -1
- package/dist/components/admin/AdminTopBar.js +27 -4
- package/dist/components/admin/AuditBoard.d.ts +7 -0
- package/dist/components/admin/AuditBoard.d.ts.map +1 -0
- package/dist/components/admin/AuditBoard.js +43 -0
- package/dist/components/admin/HealthModal.d.ts +9 -0
- package/dist/components/admin/HealthModal.d.ts.map +1 -0
- package/dist/components/admin/HealthModal.js +59 -0
- package/dist/components/admin/PagePreviewPane.d.ts +3 -1
- package/dist/components/admin/PagePreviewPane.d.ts.map +1 -1
- package/dist/components/admin/PagePreviewPane.js +2 -2
- package/dist/components/admin/VertebrAdmin.d.ts.map +1 -1
- package/dist/components/admin/VertebrAdmin.js +146 -17
- package/dist/components/admin/addonLabels.d.ts +6 -0
- package/dist/components/admin/addonLabels.d.ts.map +1 -0
- package/dist/components/admin/addonLabels.js +20 -0
- package/dist/components/admin/adminSearch.d.ts +12 -0
- package/dist/components/admin/adminSearch.d.ts.map +1 -0
- package/dist/components/admin/adminSearch.js +120 -0
- package/dist/components/admin/breadcrumbs.d.ts.map +1 -1
- package/dist/components/admin/breadcrumbs.js +14 -0
- package/dist/components/admin/routes.d.ts.map +1 -1
- package/dist/components/admin/routes.js +43 -1
- package/dist/components/admin/types.d.ts +9 -0
- package/dist/components/admin/types.d.ts.map +1 -1
- package/dist/components/config/ReferenceInput.d.ts +11 -0
- package/dist/components/config/ReferenceInput.d.ts.map +1 -0
- package/dist/components/config/ReferenceInput.js +99 -0
- package/dist/components/config/RevisionHistory.d.ts +8 -0
- package/dist/components/config/RevisionHistory.d.ts.map +1 -0
- package/dist/components/config/RevisionHistory.js +84 -0
- package/dist/components/config/form/ConfigField.d.ts +3 -2
- package/dist/components/config/form/ConfigField.d.ts.map +1 -1
- package/dist/components/config/form/ConfigField.js +3 -2
- package/dist/components/config/form/ConfigForm.d.ts +1 -1
- package/dist/components/config/form/ConfigForm.d.ts.map +1 -1
- package/dist/components/config/form/ConfigForm.js +13 -6
- package/dist/components/config/form/RecordConfigForm.d.ts +3 -2
- package/dist/components/config/form/RecordConfigForm.d.ts.map +1 -1
- package/dist/components/config/form/RecordConfigForm.js +2 -1
- package/dist/components/config/form/SettingsConfigForm.d.ts +3 -2
- package/dist/components/config/form/SettingsConfigForm.d.ts.map +1 -1
- package/dist/components/config/form/SettingsConfigForm.js +2 -2
- package/dist/components/config/form/types.d.ts +5 -1
- package/dist/components/config/form/types.d.ts.map +1 -1
- package/dist/components/env/EnvMultiSelect.d.ts +20 -0
- package/dist/components/env/EnvMultiSelect.d.ts.map +1 -0
- package/dist/components/env/EnvMultiSelect.js +38 -0
- package/dist/components/resources/ResourceTable.d.ts +7 -1
- package/dist/components/resources/ResourceTable.d.ts.map +1 -1
- package/dist/components/resources/ResourceTable.js +56 -6
- package/dist/components/theme/ThemeToggle.d.ts +3 -1
- package/dist/components/theme/ThemeToggle.d.ts.map +1 -1
- package/dist/components/theme/ThemeToggle.js +2 -2
- package/dist/components/ui/icons.d.ts +3 -0
- package/dist/components/ui/icons.d.ts.map +1 -1
- package/dist/components/ui/icons.js +17 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/lib/capabilities.d.ts +4 -0
- package/dist/lib/capabilities.d.ts.map +1 -0
- package/dist/lib/capabilities.js +9 -0
- package/dist/styles/addon.css +540 -0
- package/dist/styles/audit.css +34 -0
- package/dist/styles/base.css +1 -0
- package/dist/styles/font-library.css +2 -0
- package/dist/styles/form.css +143 -0
- package/dist/styles/index.css +3 -0
- package/dist/styles/main.css +0 -38
- package/dist/styles/modal.css +113 -0
- package/dist/styles/motion.css +55 -0
- package/dist/styles/nav.css +39 -4
- package/dist/styles/select.css +6 -0
- package/dist/styles/shell.css +417 -14
- package/dist/styles/sidebar.css +63 -3
- package/dist/styles/sync.css +540 -0
- package/dist/styles/table.css +15 -5
- package/dist/themes/dark.css +11 -11
- package/dist/themes/index.css +1 -0
- package/dist/themes/light.css +19 -19
- package/package.json +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
2
|
import { createVertebrClient, } from "@vertebr/client";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { useVertebrTheme } from "../../hooks/useVertebrTheme";
|
|
5
|
+
import { hasCap } from "../../lib/capabilities";
|
|
5
6
|
import { parseMetricsRangeId, } from "../../lib/metricsRanges";
|
|
7
|
+
import { AdminCommandPalette } from "./AdminCommandPalette";
|
|
6
8
|
import { AdminContent } from "./AdminContent";
|
|
7
9
|
import { AdminHeader } from "./AdminHeader";
|
|
8
10
|
import { AdminSaveBar } from "./AdminSaveBar";
|
|
@@ -38,6 +40,7 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
38
40
|
});
|
|
39
41
|
});
|
|
40
42
|
const [resourceData, setResourceData] = useState(null);
|
|
43
|
+
const [resourceSearch, setResourceSearch] = useState("");
|
|
41
44
|
const [configData, setConfigData] = useState(null);
|
|
42
45
|
const [metricsData, setMetricsData] = useState(null);
|
|
43
46
|
const [metricsLoading, setMetricsLoading] = useState(false);
|
|
@@ -48,9 +51,11 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
48
51
|
const [fontLibraryLoading, setFontLibraryLoading] = useState(false);
|
|
49
52
|
const [emailsData, setEmailsData] = useState(null);
|
|
50
53
|
const [emailsLoading, setEmailsLoading] = useState(false);
|
|
54
|
+
const [healthChecks, setHealthChecks] = useState(null);
|
|
51
55
|
const [error, setError] = useState(null);
|
|
52
56
|
const [loading, setLoading] = useState(true);
|
|
53
57
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
|
|
58
|
+
const [searchOpen, setSearchOpen] = useState(false);
|
|
54
59
|
/** Skip pushState when selection was applied from the URL (catalog/popstate). */
|
|
55
60
|
const skipNextUrlPush = useRef(true);
|
|
56
61
|
const syncUrl = useCallback((next, catalogSnapshot, replace = false) => {
|
|
@@ -130,6 +135,16 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
130
135
|
}
|
|
131
136
|
syncUrl(selection, catalog, false);
|
|
132
137
|
}, [selection, catalog, syncUrl]);
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
const onKeyDown = (event) => {
|
|
140
|
+
if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") {
|
|
141
|
+
event.preventDefault();
|
|
142
|
+
setSearchOpen(true);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
window.addEventListener("keydown", onKeyDown);
|
|
146
|
+
return () => window.removeEventListener("keydown", onKeyDown);
|
|
147
|
+
}, []);
|
|
133
148
|
useEffect(() => {
|
|
134
149
|
const onPopState = () => {
|
|
135
150
|
if (!catalog)
|
|
@@ -198,7 +213,10 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
198
213
|
}
|
|
199
214
|
}
|
|
200
215
|
else if (selection.kind === "resource") {
|
|
201
|
-
const data = await client.listResource(selection.id
|
|
216
|
+
const data = await client.listResource(selection.id, {
|
|
217
|
+
...(resourceSearch.trim() ? { q: resourceSearch.trim() } : {}),
|
|
218
|
+
fresh: true,
|
|
219
|
+
});
|
|
202
220
|
if (!cancelled) {
|
|
203
221
|
setResourceData(data);
|
|
204
222
|
setConfigData(null);
|
|
@@ -208,7 +226,19 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
208
226
|
setEmailsData(null);
|
|
209
227
|
}
|
|
210
228
|
}
|
|
211
|
-
else
|
|
229
|
+
else if (selection.kind === "sync" ||
|
|
230
|
+
selection.kind === "addons" ||
|
|
231
|
+
selection.kind === "audit") {
|
|
232
|
+
if (!cancelled) {
|
|
233
|
+
setResourceData(null);
|
|
234
|
+
setConfigData(null);
|
|
235
|
+
setMetricsData(null);
|
|
236
|
+
setGalleryData(null);
|
|
237
|
+
setFontLibraryData(null);
|
|
238
|
+
setEmailsData(null);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else if (selection.kind === "config" || selection.kind === "addon") {
|
|
212
242
|
const data = await client.getConfig(selection.id);
|
|
213
243
|
if (!cancelled) {
|
|
214
244
|
setConfigData(data);
|
|
@@ -248,12 +278,54 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
248
278
|
return () => {
|
|
249
279
|
cancelled = true;
|
|
250
280
|
};
|
|
251
|
-
}, [client, selection, catalog, environment, metricsRange]);
|
|
281
|
+
}, [client, selection, catalog, environment, metricsRange, resourceSearch]);
|
|
282
|
+
const resourceSelectionId = selection?.kind === "resource" ? selection.id : null;
|
|
283
|
+
useEffect(() => {
|
|
284
|
+
setResourceSearch("");
|
|
285
|
+
}, [resourceSelectionId]);
|
|
286
|
+
const refreshHealth = useCallback(async () => {
|
|
287
|
+
if (!catalog?.health) {
|
|
288
|
+
setHealthChecks(null);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
const data = await client.getHealth({ fresh: true });
|
|
292
|
+
setHealthChecks(data.checks);
|
|
293
|
+
}, [client, catalog]);
|
|
294
|
+
useEffect(() => {
|
|
295
|
+
if (!catalog?.health) {
|
|
296
|
+
setHealthChecks(null);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
let cancelled = false;
|
|
300
|
+
void (async () => {
|
|
301
|
+
try {
|
|
302
|
+
const data = await client.getHealth({ fresh: true });
|
|
303
|
+
if (!cancelled)
|
|
304
|
+
setHealthChecks(data.checks);
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
if (!cancelled)
|
|
308
|
+
setHealthChecks(null);
|
|
309
|
+
}
|
|
310
|
+
})();
|
|
311
|
+
return () => {
|
|
312
|
+
cancelled = true;
|
|
313
|
+
};
|
|
314
|
+
}, [client, catalog?.health, environment]);
|
|
252
315
|
const refreshResource = useCallback(async () => {
|
|
253
316
|
if (selection?.kind !== "resource")
|
|
254
317
|
return;
|
|
255
|
-
const data = await client.listResource(selection.id
|
|
318
|
+
const data = await client.listResource(selection.id, {
|
|
319
|
+
...(resourceSearch.trim() ? { q: resourceSearch.trim() } : {}),
|
|
320
|
+
fresh: true,
|
|
321
|
+
});
|
|
256
322
|
setResourceData(data);
|
|
323
|
+
}, [client, selection, resourceSearch]);
|
|
324
|
+
const refreshConfig = useCallback(async () => {
|
|
325
|
+
if (selection?.kind !== "config" && selection?.kind !== "addon")
|
|
326
|
+
return;
|
|
327
|
+
const data = await client.getConfig(selection.id, { fresh: true });
|
|
328
|
+
setConfigData(data);
|
|
257
329
|
}, [client, selection]);
|
|
258
330
|
const refreshMetrics = useCallback(async () => {
|
|
259
331
|
setMetricsLoading(true);
|
|
@@ -336,11 +408,14 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
336
408
|
const envList = catalog?.environments ?? bootstrap?.environments ?? [];
|
|
337
409
|
const activeEnv = envList.find((env) => env.id === environment);
|
|
338
410
|
const authRequired = Boolean(activeEnv?.auth?.required);
|
|
411
|
+
const authProvider = activeEnv?.auth?.client?.provider;
|
|
412
|
+
const authViaTokenOnly = authProvider === "custom" && Boolean(getAccessToken);
|
|
339
413
|
const activeConfig = selection?.kind === "config"
|
|
340
414
|
? catalog?.configs.find((c) => c.id === selection.id)
|
|
341
415
|
: undefined;
|
|
342
416
|
const isPageSelection = activeConfig?.section === "page";
|
|
343
417
|
const hasPagePreview = Boolean(activeConfig?.previewPath);
|
|
418
|
+
const syncEnabled = Boolean(catalog?.sync?.enabled) && hasCap(catalog, "sync.run");
|
|
344
419
|
const switchEnvironment = (nextEnv) => {
|
|
345
420
|
if (nextEnv === environment)
|
|
346
421
|
return;
|
|
@@ -353,6 +428,7 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
353
428
|
writeStored(envStorageKey, nextEnv);
|
|
354
429
|
setEnvironment(nextEnv);
|
|
355
430
|
setResourceData(null);
|
|
431
|
+
setResourceSearch("");
|
|
356
432
|
setConfigData(null);
|
|
357
433
|
setGalleryData(null);
|
|
358
434
|
setFontLibraryData(null);
|
|
@@ -384,6 +460,16 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
384
460
|
onSelect: () => setSelection({ kind: "overview" }),
|
|
385
461
|
});
|
|
386
462
|
}
|
|
463
|
+
if (catalog.audit) {
|
|
464
|
+
entries.push({
|
|
465
|
+
key: "audit",
|
|
466
|
+
group: catalog.audit.group ?? "Analytics",
|
|
467
|
+
label: catalog.audit.label,
|
|
468
|
+
icon: iconForNavKey("audit"),
|
|
469
|
+
active: selection?.kind === "audit",
|
|
470
|
+
onSelect: () => setSelection({ kind: "audit" }),
|
|
471
|
+
});
|
|
472
|
+
}
|
|
387
473
|
for (const resource of catalog.resources) {
|
|
388
474
|
entries.push({
|
|
389
475
|
key: `resource:${resource.id}`,
|
|
@@ -445,6 +531,26 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
445
531
|
],
|
|
446
532
|
});
|
|
447
533
|
}
|
|
534
|
+
if (catalog.addons?.length) {
|
|
535
|
+
entries.push({
|
|
536
|
+
key: "addons:overview",
|
|
537
|
+
group: "Add-ons",
|
|
538
|
+
label: "Browse add-ons",
|
|
539
|
+
icon: iconForNavKey("addons:overview"),
|
|
540
|
+
active: selection?.kind === "addons",
|
|
541
|
+
onSelect: () => setSelection({ kind: "addons" }),
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
for (const addon of catalog.addons ?? []) {
|
|
545
|
+
entries.push({
|
|
546
|
+
key: `addon:${addon.id}`,
|
|
547
|
+
group: addon.group ?? "Add-ons",
|
|
548
|
+
label: addon.label,
|
|
549
|
+
icon: iconForNavKey(`addon:${addon.id}`),
|
|
550
|
+
active: selection?.kind === "addon" && selection.id === addon.id,
|
|
551
|
+
onSelect: () => setSelection({ kind: "addon", id: addon.id }),
|
|
552
|
+
});
|
|
553
|
+
}
|
|
448
554
|
for (const config of catalog.configs) {
|
|
449
555
|
const fallback = config.section === "page" ? "Pages" : "Config";
|
|
450
556
|
entries.push({
|
|
@@ -456,6 +562,16 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
456
562
|
onSelect: () => setSelection({ kind: "config", id: config.id }),
|
|
457
563
|
});
|
|
458
564
|
}
|
|
565
|
+
if (catalog.sync?.enabled && hasCap(catalog, "sync.run")) {
|
|
566
|
+
entries.push({
|
|
567
|
+
key: "sync",
|
|
568
|
+
group: "Settings",
|
|
569
|
+
label: "Sync environments",
|
|
570
|
+
icon: iconForNavKey("sync"),
|
|
571
|
+
active: selection?.kind === "sync",
|
|
572
|
+
onSelect: () => setSelection({ kind: "sync" }),
|
|
573
|
+
});
|
|
574
|
+
}
|
|
459
575
|
return sidebarGroups(entries);
|
|
460
576
|
}, [catalog, selection]);
|
|
461
577
|
if (!bootstrap && loading) {
|
|
@@ -466,16 +582,29 @@ export function VertebrAdmin({ apiBase = "/admin/api", basePath: basePathProp, t
|
|
|
466
582
|
}
|
|
467
583
|
const activeLabel = selection?.kind === "overview"
|
|
468
584
|
? (catalog?.metrics?.label ?? "Overview")
|
|
469
|
-
: selection?.kind === "
|
|
470
|
-
?
|
|
471
|
-
: selection?.kind === "
|
|
472
|
-
? (catalog?.
|
|
473
|
-
: selection?.kind === "
|
|
474
|
-
?
|
|
475
|
-
: selection?.kind === "
|
|
476
|
-
? catalog?.
|
|
477
|
-
: selection?.kind === "
|
|
478
|
-
? catalog?.
|
|
479
|
-
:
|
|
480
|
-
|
|
585
|
+
: selection?.kind === "sync"
|
|
586
|
+
? "Sync environments"
|
|
587
|
+
: selection?.kind === "audit"
|
|
588
|
+
? (catalog?.audit?.label ?? "Audit")
|
|
589
|
+
: selection?.kind === "addons"
|
|
590
|
+
? "Add-ons"
|
|
591
|
+
: selection?.kind === "gallery"
|
|
592
|
+
? (catalog?.gallery?.label ?? "Gallery")
|
|
593
|
+
: selection?.kind === "fontLibrary"
|
|
594
|
+
? (catalog?.fontLibrary?.label ?? "Font Library")
|
|
595
|
+
: selection?.kind === "emails"
|
|
596
|
+
? (catalog?.emails?.label ?? "Emails")
|
|
597
|
+
: selection?.kind === "resource"
|
|
598
|
+
? catalog?.resources.find((r) => r.id === selection.id)?.label
|
|
599
|
+
: selection?.kind === "config"
|
|
600
|
+
? catalog?.configs.find((c) => c.id === selection.id)?.label
|
|
601
|
+
: selection?.kind === "addon"
|
|
602
|
+
? catalog?.addons?.find((a) => a.id === selection.id)?.label
|
|
603
|
+
: null;
|
|
604
|
+
const selectionDescription = selection?.kind === "addons"
|
|
605
|
+
? "Preview how optional storefront features look in your shop, then configure each one."
|
|
606
|
+
: selection?.kind === "addon"
|
|
607
|
+
? catalog?.addons?.find((item) => item.id === selection.id)?.description
|
|
608
|
+
: undefined;
|
|
609
|
+
return (_jsx(SaveBarProvider, { children: _jsx(ToastProvider, { children: _jsxs("div", { className: "vertebr-root", "data-env": environment, "data-sidebar-collapsed": sidebarCollapsed || undefined, children: [_jsx(AdminTopBar, { brand: bootstrap?.brand ?? catalog?.brand ?? "Vertebr", hostName: bootstrap?.appearance?.hostName ?? catalog?.appearance?.hostName, hostLogoUrl: bootstrap?.appearance?.hostLogoUrl ?? catalog?.appearance?.hostLogoUrl, envList: envList, environment: environment, onEnvironmentChange: switchEnvironment, authUserLabel: authUserLabel, onSignOut: onSignOut, getAccessToken: getAccessToken, authViaTokenOnly: authViaTokenOnly, authRequired: authRequired, token: token, tokenDraft: tokenDraft, onTokenDraftChange: setTokenDraft, onSaveToken: saveToken, onClearToken: clearToken, theme: theme, onThemeChange: setTheme, sidebarCollapsed: sidebarCollapsed, onToggleSidebar: () => setSidebarCollapsed((prev) => !prev), syncEnabled: syncEnabled, onOpenSync: () => setSelection({ kind: "sync" }), onOpenSearch: () => setSearchOpen(true), healthChecks: healthChecks, onRefreshHealth: catalog?.health ? refreshHealth : undefined }), catalog && searchOpen ? (_jsx(AdminCommandPalette, { catalog: catalog, onClose: () => setSearchOpen(false), onSelect: setSelection })) : null, _jsx(AdminSidebar, { navGroups: navGroups, collapsed: sidebarCollapsed }), _jsxs("main", { className: "vertebr-main", children: [_jsx(AdminHeader, { activeLabel: activeLabel ?? (catalog ? "Dashboard" : "Sign in"), catalogLoaded: Boolean(catalog), authRequired: authRequired, selection: selection, isPageSelection: isPageSelection, hasPagePreview: hasPagePreview, selectionDescription: selectionDescription, error: error, breadcrumbs: breadcrumbsForSelection(selection, catalog) }), _jsx(AdminContent, { client: client, catalog: catalog, selection: selection, onSelectionChange: setSelection, authRequired: authRequired, loading: loading, isPageSelection: isPageSelection, metricsData: metricsData, metricsLoading: metricsLoading, metricsRange: metricsRange, onMetricsRangeChange: changeMetricsRange, onRefreshMetrics: refreshMetrics, galleryData: galleryData, galleryLoading: galleryLoading, onRefreshGallery: refreshGallery, fontLibraryData: fontLibraryData, fontLibraryLoading: fontLibraryLoading, onRefreshFonts: refreshFonts, emailsData: emailsData, emailsLoading: emailsLoading, onRefreshEmails: refreshEmails, resourceData: resourceData, resourceSearch: resourceSearch, onResourceSearchChange: setResourceSearch, onRefreshResource: refreshResource, configData: configData, onConfigSaved: setConfigData, onRefreshConfig: refreshConfig, galleryPicker: galleryPicker, fontLibraryPicker: fontLibraryPicker }), _jsx(AdminSaveBar, {})] }), _jsx(AdminToastStack, {})] }) }) }));
|
|
481
610
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CatalogAddonCategory } from "@vertebr/client";
|
|
2
|
+
export declare const ADDON_CATEGORY_LABELS: Record<CatalogAddonCategory, string>;
|
|
3
|
+
export declare function addonCategoryLabel(category: CatalogAddonCategory | undefined): string;
|
|
4
|
+
export declare const ADDON_CATEGORY_HINTS: Record<CatalogAddonCategory, string>;
|
|
5
|
+
export declare function addonCategoryHint(category: CatalogAddonCategory | undefined): string;
|
|
6
|
+
//# sourceMappingURL=addonLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addonLabels.d.ts","sourceRoot":"","sources":["../../../src/components/admin/addonLabels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAItE,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GACzC,MAAM,CAGR;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAIrE,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GACzC,MAAM,CAGR"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const ADDON_CATEGORY_LABELS = {
|
|
2
|
+
product: "Products",
|
|
3
|
+
engagement: "Engagement",
|
|
4
|
+
sales: "Sales",
|
|
5
|
+
};
|
|
6
|
+
export function addonCategoryLabel(category) {
|
|
7
|
+
if (!category)
|
|
8
|
+
return "Add-on";
|
|
9
|
+
return ADDON_CATEGORY_LABELS[category] ?? "Add-on";
|
|
10
|
+
}
|
|
11
|
+
export const ADDON_CATEGORY_HINTS = {
|
|
12
|
+
product: "Tied to products, variants, and checkout",
|
|
13
|
+
engagement: "Brand story and feedback on the side",
|
|
14
|
+
sales: "Promos, urgency, and cart nudges",
|
|
15
|
+
};
|
|
16
|
+
export function addonCategoryHint(category) {
|
|
17
|
+
if (!category)
|
|
18
|
+
return "Optional storefront feature";
|
|
19
|
+
return ADDON_CATEGORY_HINTS[category] ?? "Optional storefront feature";
|
|
20
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CatalogResponse } from "@vertebr/client";
|
|
2
|
+
import type { Selection } from "./types";
|
|
3
|
+
export type AdminSearchItem = {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
group: string;
|
|
7
|
+
hint?: string;
|
|
8
|
+
selection: Selection;
|
|
9
|
+
};
|
|
10
|
+
export declare function adminSearchItems(catalog: CatalogResponse): AdminSearchItem[];
|
|
11
|
+
export declare function filterAdminSearchItems(items: AdminSearchItem[], query: string): AdminSearchItem[];
|
|
12
|
+
//# sourceMappingURL=adminSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminSearch.d.ts","sourceRoot":"","sources":["../../../src/components/admin/adminSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,EAAE,CAuH5E;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,eAAe,EAAE,EACxB,KAAK,EAAE,MAAM,GACZ,eAAe,EAAE,CASnB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export function adminSearchItems(catalog) {
|
|
2
|
+
const items = [];
|
|
3
|
+
if (catalog.metrics) {
|
|
4
|
+
items.push({
|
|
5
|
+
id: "overview",
|
|
6
|
+
label: catalog.metrics.label,
|
|
7
|
+
group: catalog.metrics.group ?? "Home",
|
|
8
|
+
hint: "Overview and metrics",
|
|
9
|
+
selection: { kind: "overview" },
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
if (catalog.audit) {
|
|
13
|
+
items.push({
|
|
14
|
+
id: "audit",
|
|
15
|
+
label: catalog.audit.label,
|
|
16
|
+
group: catalog.audit.group ?? "Analytics",
|
|
17
|
+
hint: "Audit log",
|
|
18
|
+
selection: { kind: "audit" },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
for (const resource of catalog.resources) {
|
|
22
|
+
items.push({
|
|
23
|
+
id: `resource:${resource.id}`,
|
|
24
|
+
label: resource.label,
|
|
25
|
+
group: resource.group ?? "Resources",
|
|
26
|
+
hint: "Resource table",
|
|
27
|
+
selection: { kind: "resource", id: resource.id },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (catalog.gallery) {
|
|
31
|
+
items.push({
|
|
32
|
+
id: "gallery",
|
|
33
|
+
label: catalog.gallery.label,
|
|
34
|
+
group: catalog.gallery.group ?? "Resources",
|
|
35
|
+
hint: "Media library",
|
|
36
|
+
selection: { kind: "gallery" },
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if (catalog.fontLibrary) {
|
|
40
|
+
items.push({
|
|
41
|
+
id: "fonts",
|
|
42
|
+
label: catalog.fontLibrary.label,
|
|
43
|
+
group: catalog.fontLibrary.group ?? "Resources",
|
|
44
|
+
hint: "Font library",
|
|
45
|
+
selection: { kind: "fontLibrary" },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (catalog.emails) {
|
|
49
|
+
items.push({
|
|
50
|
+
id: "emails:compose",
|
|
51
|
+
label: "Compose email",
|
|
52
|
+
group: catalog.emails.group ?? "Growth",
|
|
53
|
+
hint: catalog.emails.label,
|
|
54
|
+
selection: { kind: "emails", tab: "compose" },
|
|
55
|
+
});
|
|
56
|
+
items.push({
|
|
57
|
+
id: "emails:templates",
|
|
58
|
+
label: "Email templates",
|
|
59
|
+
group: catalog.emails.group ?? "Growth",
|
|
60
|
+
hint: catalog.emails.label,
|
|
61
|
+
selection: { kind: "emails", tab: "templates" },
|
|
62
|
+
});
|
|
63
|
+
items.push({
|
|
64
|
+
id: "emails:activity",
|
|
65
|
+
label: "Email activity",
|
|
66
|
+
group: catalog.emails.group ?? "Growth",
|
|
67
|
+
hint: catalog.emails.label,
|
|
68
|
+
selection: { kind: "emails", tab: "activity" },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (catalog.addons?.length) {
|
|
72
|
+
items.push({
|
|
73
|
+
id: "addons:overview",
|
|
74
|
+
label: "Browse add-ons",
|
|
75
|
+
group: "Add-ons",
|
|
76
|
+
hint: "Preview and configure storefront features",
|
|
77
|
+
selection: { kind: "addons" },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
for (const addon of catalog.addons ?? []) {
|
|
81
|
+
items.push({
|
|
82
|
+
id: `addon:${addon.id}`,
|
|
83
|
+
label: addon.label,
|
|
84
|
+
group: addon.group ?? "Add-ons",
|
|
85
|
+
hint: addon.description ?? "Storefront add-on",
|
|
86
|
+
selection: { kind: "addon", id: addon.id },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
for (const config of catalog.configs) {
|
|
90
|
+
const bucket = config.section === "page" ? "Pages" : "Config";
|
|
91
|
+
items.push({
|
|
92
|
+
id: `config:${config.id}`,
|
|
93
|
+
label: config.label,
|
|
94
|
+
group: config.group ?? bucket,
|
|
95
|
+
hint: config.section === "page" ? "Page content" : "Settings",
|
|
96
|
+
selection: { kind: "config", id: config.id },
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (catalog.sync?.enabled) {
|
|
100
|
+
items.push({
|
|
101
|
+
id: "sync",
|
|
102
|
+
label: "Sync environments",
|
|
103
|
+
group: "Settings",
|
|
104
|
+
hint: "Copy content between environments",
|
|
105
|
+
selection: { kind: "sync" },
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return items;
|
|
109
|
+
}
|
|
110
|
+
export function filterAdminSearchItems(items, query) {
|
|
111
|
+
const needle = query.trim().toLowerCase();
|
|
112
|
+
if (!needle)
|
|
113
|
+
return items;
|
|
114
|
+
return items.filter((item) => {
|
|
115
|
+
const haystack = [item.label, item.group, item.hint ?? "", item.id]
|
|
116
|
+
.join(" ")
|
|
117
|
+
.toLowerCase();
|
|
118
|
+
return haystack.includes(needle);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../../src/components/admin/breadcrumbs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GAAG,IAAI,GAC9B,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../../src/components/admin/breadcrumbs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GAAG,IAAI,GAC9B,UAAU,EAAE,CA2Dd"}
|
|
@@ -5,6 +5,20 @@ export function breadcrumbsForSelection(selection, catalog) {
|
|
|
5
5
|
switch (selection.kind) {
|
|
6
6
|
case "overview":
|
|
7
7
|
return [...crumbs, { label: catalog.metrics?.label ?? "Overview" }];
|
|
8
|
+
case "sync":
|
|
9
|
+
return [...crumbs, { label: "Sync environments" }];
|
|
10
|
+
case "audit":
|
|
11
|
+
return [...crumbs, { label: catalog.audit?.label ?? "Audit" }];
|
|
12
|
+
case "addons":
|
|
13
|
+
return [...crumbs, { label: "Add-ons" }];
|
|
14
|
+
case "addon": {
|
|
15
|
+
const addon = catalog.addons?.find((item) => item.id === selection.id);
|
|
16
|
+
return [
|
|
17
|
+
...crumbs,
|
|
18
|
+
{ label: "Add-ons", href: "/addons" },
|
|
19
|
+
{ label: addon?.label ?? selection.id },
|
|
20
|
+
];
|
|
21
|
+
}
|
|
8
22
|
case "gallery":
|
|
9
23
|
return [...crumbs, { label: catalog.gallery?.label ?? "Gallery" }];
|
|
10
24
|
case "fontLibrary":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/components/admin/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO5D;AAOD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/components/admin/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO5D;AAOD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GACvB,MAAM,CAkCR;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GACvB,MAAM,CAIR;AASD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GAAG,IAAI,GAC9B,SAAS,GAAG,IAAI,CAiDlB;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAUpE;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GACvB,SAAS,CAuCX;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAuBnE"}
|
|
@@ -23,6 +23,14 @@ export function pathForSelection(selection, catalog) {
|
|
|
23
23
|
switch (selection.kind) {
|
|
24
24
|
case "overview":
|
|
25
25
|
return "/overview";
|
|
26
|
+
case "sync":
|
|
27
|
+
return "/sync";
|
|
28
|
+
case "audit":
|
|
29
|
+
return "/audit";
|
|
30
|
+
case "addons":
|
|
31
|
+
return "/addons";
|
|
32
|
+
case "addon":
|
|
33
|
+
return `/addons/${encodeURIComponent(selection.id)}`;
|
|
26
34
|
case "gallery":
|
|
27
35
|
return "/gallery";
|
|
28
36
|
case "fontLibrary":
|
|
@@ -77,6 +85,19 @@ export function selectionFromPath(pathname, basePath, catalog) {
|
|
|
77
85
|
const [head, ...tail] = parts;
|
|
78
86
|
if (head === "overview")
|
|
79
87
|
return { kind: "overview" };
|
|
88
|
+
if (head === "sync")
|
|
89
|
+
return { kind: "sync" };
|
|
90
|
+
if (head === "audit")
|
|
91
|
+
return { kind: "audit" };
|
|
92
|
+
if (head === "addons") {
|
|
93
|
+
if (!tail[0])
|
|
94
|
+
return { kind: "addons" };
|
|
95
|
+
const id = decodeURIComponent(tail[0]);
|
|
96
|
+
if (catalog && !catalog.addons?.some((item) => item.id === id)) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
return { kind: "addon", id };
|
|
100
|
+
}
|
|
80
101
|
if (head === "gallery")
|
|
81
102
|
return { kind: "gallery" };
|
|
82
103
|
if (head === "fonts")
|
|
@@ -134,6 +155,20 @@ export function coerceSelection(selection, catalog) {
|
|
|
134
155
|
if (selection.kind === "overview") {
|
|
135
156
|
return catalog.metrics ? selection : defaultSelection(catalog);
|
|
136
157
|
}
|
|
158
|
+
if (selection.kind === "sync") {
|
|
159
|
+
return catalog.sync?.enabled ? selection : defaultSelection(catalog);
|
|
160
|
+
}
|
|
161
|
+
if (selection.kind === "audit") {
|
|
162
|
+
return catalog.audit ? selection : defaultSelection(catalog);
|
|
163
|
+
}
|
|
164
|
+
if (selection.kind === "addons") {
|
|
165
|
+
return catalog.addons?.length ? selection : defaultSelection(catalog);
|
|
166
|
+
}
|
|
167
|
+
if (selection.kind === "addon") {
|
|
168
|
+
return catalog.addons?.some((item) => item.id === selection.id)
|
|
169
|
+
? selection
|
|
170
|
+
: defaultSelection(catalog);
|
|
171
|
+
}
|
|
137
172
|
if (selection.kind === "gallery") {
|
|
138
173
|
return catalog.gallery ? selection : defaultSelection(catalog);
|
|
139
174
|
}
|
|
@@ -162,9 +197,16 @@ export function selectionsEqual(a, b) {
|
|
|
162
197
|
return a === b;
|
|
163
198
|
if (a.kind !== b.kind)
|
|
164
199
|
return false;
|
|
165
|
-
if (a.kind === "overview" ||
|
|
200
|
+
if (a.kind === "overview" ||
|
|
201
|
+
a.kind === "gallery" ||
|
|
202
|
+
a.kind === "fontLibrary" ||
|
|
203
|
+
a.kind === "sync" ||
|
|
204
|
+
a.kind === "audit" ||
|
|
205
|
+
a.kind === "addons") {
|
|
166
206
|
return true;
|
|
167
207
|
}
|
|
208
|
+
if (a.kind === "addon" && b.kind === "addon")
|
|
209
|
+
return a.id === b.id;
|
|
168
210
|
if (a.kind === "emails" && b.kind === "emails") {
|
|
169
211
|
return (a.tab ?? "compose") === (b.tab ?? "compose");
|
|
170
212
|
}
|
|
@@ -29,6 +29,13 @@ export type NavIcon = (props: {
|
|
|
29
29
|
}) => ReactElement;
|
|
30
30
|
export type Selection = {
|
|
31
31
|
kind: "overview";
|
|
32
|
+
} | {
|
|
33
|
+
kind: "sync";
|
|
34
|
+
} | {
|
|
35
|
+
kind: "addons";
|
|
36
|
+
} | {
|
|
37
|
+
kind: "addon";
|
|
38
|
+
id: string;
|
|
32
39
|
} | {
|
|
33
40
|
kind: "resource";
|
|
34
41
|
id: string;
|
|
@@ -40,6 +47,8 @@ export type Selection = {
|
|
|
40
47
|
} | {
|
|
41
48
|
kind: "emails";
|
|
42
49
|
tab?: EmailsTab;
|
|
50
|
+
} | {
|
|
51
|
+
kind: "audit";
|
|
43
52
|
} | {
|
|
44
53
|
kind: "config";
|
|
45
54
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/admin/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MACb,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACvC,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,YAAY,CAAC;AAEtE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CAAC;AAET,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/admin/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MACb,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACvC,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,YAAY,CAAC;AAEtE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CAAC;AAET,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FieldSchema, VertebrClient } from "@vertebr/client";
|
|
2
|
+
export type ReferenceInputProps = {
|
|
3
|
+
id?: string;
|
|
4
|
+
value: unknown;
|
|
5
|
+
field: FieldSchema;
|
|
6
|
+
client: VertebrClient;
|
|
7
|
+
readOnly?: boolean;
|
|
8
|
+
onChange: (value: string) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare function ReferenceInput({ id: idProp, value, field, client, readOnly, onChange, }: ReferenceInputProps): import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=ReferenceInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReferenceInput.d.ts","sourceRoot":"","sources":["../../../src/components/config/ReferenceInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAuBF,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EAAE,MAAM,EACV,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,EAAE,mBAAmB,+BA0IrB"}
|