@lunora/studio 1.0.0-alpha.2 → 1.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__assets__/package-og.svg +1 -1
- package/dist/index.d.ts +23 -17
- package/dist/index.js +34 -34
- package/dist/mount.d.ts +1 -1
- package/dist/mount.js +1 -1
- package/dist/packem_shared/{ADMIN_FUNCTION_PREFIX-DmBqMZ-z.js → ADMIN_FUNCTIONS-CdaxLGkE.js} +3 -0
- package/dist/packem_shared/{ApiDocsPanel-DpRjJhG5.js → ApiDocsPanel-BgrN4kml.js} +3 -3
- package/dist/packem_shared/{ApiReferencePanel-DMIUp-kK.js → ApiReferencePanel-1vubqG5s.js} +2 -2
- package/dist/packem_shared/{ApiTab-DURGU15e.js → ApiTab-CHkX49o_.js} +4 -4
- package/dist/packem_shared/{AuditPanel-BC59Nhst.js → AuditPanel-CP9HM9nq.js} +19 -31
- package/dist/packem_shared/{CommandPalette-Dx_CoB9i.js → CommandPalette-BtgkBzZI.js} +2 -2
- package/dist/packem_shared/{ConfirmButton-WQVUoGFb.js → ConfirmButton-C2eVi2Qv.js} +1 -1
- package/dist/packem_shared/{ConnectionBadge-Bxagrip8.js → ConnectionBadge-B2DDM2Tn.js} +1 -1
- package/dist/packem_shared/{createStudioI18n-CgvlmDkN.js → DEFAULT_LOCALE-CiX4W7Kr.js} +1 -1
- package/dist/packem_shared/{DataBrowser-Coz6jJE6.js → DataBrowser-Bb1gTQ6c.js} +182 -249
- package/dist/packem_shared/{ExportImportPanel-WO34fJxy.js → ExportImportPanel-Dj87tRa5.js} +9 -5
- package/dist/packem_shared/{FileBrowser-Zcr-Qgxo.js → FileBrowser-CWvxp_is.js} +7 -7
- package/dist/packem_shared/{FunctionRunner-j0Rd5m9t.js → FunctionRunner-DlWApMCH.js} +4 -4
- package/dist/packem_shared/{FunctionStatsPanel-DboBl-XL.js → FunctionStatsPanel-CuO2Tmw-.js} +141 -198
- package/dist/packem_shared/{GlobalDataBrowser-9MhPEfgN.js → GlobalDataBrowser-3X9uRfdO.js} +37 -66
- package/dist/packem_shared/{HealthPanel-DOIgbUtx.js → HealthPanel-Dj0GRo5P.js} +31 -23
- package/dist/packem_shared/{HomePanel-bdOCNA-p.js → HomePanel-BewOCuag.js} +450 -389
- package/dist/packem_shared/{InsightsPanel-DaZPnSgt.js → InsightsPanel-y_Q-xdPY.js} +104 -66
- package/dist/packem_shared/{LogsPanel-CWdqAGpQ.js → LogsPanel-C7crgYoS.js} +35 -47
- package/dist/packem_shared/{MailPanel-D_EGtDnS.js → MailPanel-PILidruz.js} +31 -38
- package/dist/packem_shared/{MetricsPanel-E4Gv6wTO.js → MetricsPanel-DioILzgf.js} +34 -48
- package/dist/packem_shared/{MigrationsPanel-DQdPY9io.js → MigrationsPanel-DkIcRoE5.js} +31 -38
- package/dist/packem_shared/{OpenRpcReferencePanel-j2p3HB0s.js → OpenRpcReferencePanel-vbcYbv3V.js} +2 -2
- package/dist/packem_shared/{PitrPanel-BbBkQR6t.js → PitrPanel-yKJ1JPPk.js} +4 -4
- package/dist/packem_shared/{ScheduledJobs-Ok1CYYwI.js → ScheduledJobs-BWNwIN3I.js} +164 -61
- package/dist/packem_shared/{SchemaViewer-D8XGnp-X.js → SchemaViewer-CNr8Wame.js} +4 -4
- package/dist/packem_shared/{SecurityAdvisorPanel-Cdm2IxLW.js → SecurityAdvisorPanel-BBzv7L3c.js} +44 -31
- package/dist/packem_shared/SettingsPanel-BKSKl8tl.js +390 -0
- package/dist/packem_shared/{ShardInput-DNCsT1KW.js → ShardInput-gx_DZXXn.js} +1 -1
- package/dist/packem_shared/SqlEditorPanel-CkemCQvy.js +13 -0
- package/dist/packem_shared/Studio-QkOjc2NS.js +33 -0
- package/dist/packem_shared/{StudioApp-dvywkJ8I.js → StudioApp-TEElspKL.js} +278 -4
- package/dist/packem_shared/{StudioI18nProvider-Dcajsznk.js → StudioI18nProvider-B-tDCZIi.js} +1 -1
- package/dist/packem_shared/TableEditor-JS3sXYgS.js +11 -0
- package/dist/packem_shared/{advisor-view-DBlzJi6C.js → advisor-view-CGcfMiPq.js} +1 -1
- package/dist/packem_shared/{app.d-CCmwDEVs.d.ts → app.d-Cnij4Zp5.d.ts} +1 -1
- package/dist/packem_shared/{cf-links-BZfRdxSE.js → cf-links-2cktDedA.js} +1 -1
- package/dist/packem_shared/{data-grid-CCh2Couo.js → data-grid-B5CaV3wS.js} +2 -2
- package/dist/packem_shared/{grid-features-DTjG6Sex.js → grid-features-CzUfqgsM.js} +3 -3
- package/dist/packem_shared/{internal-BBZYexre.js → internal-rXJEAhXS.js} +1 -1
- package/dist/packem_shared/{live-status-bPff1O7Y.js → live-status-FZ0psC1z.js} +1 -1
- package/dist/packem_shared/{reference-view-BCKIoai7.js → reference-view-B4E49Lip.js} +3 -3
- package/dist/packem_shared/{sql-editor-panel-CW2y2x9h.js → sql-editor-panel-CUJoYF1Z.js} +6 -6
- package/dist/packem_shared/{studio-BDVd7rIV.js → studio-c5Vf7kSh.js} +2897 -1668
- package/dist/packem_shared/{TableEditor-DIVDk3vT.js → table-editor-9fhJ4hMJ.js} +43 -7
- package/dist/packem_shared/{table-list-sidebar-aZHLq70w.js → table-list-sidebar-Bg7uzbvC.js} +2 -2
- package/dist/packem_shared/use-admin-query-BkbdNFNz.js +105 -0
- package/dist/standalone/studio.js +198 -176
- package/dist/styles.css +1 -1
- package/package.json +13 -12
- package/dist/packem_shared/SettingsPanel-D3WF2mBU.js +0 -176
- package/dist/packem_shared/SqlEditorPanel-BuQ7f2Hs.js +0 -13
- package/dist/packem_shared/Studio-D36od9Oz.js +0 -33
- package/dist/packem_shared/use-live-admin-D1h1Fzsd.js +0 -73
- package/dist/packem_shared/use-live-shard-seed-B74RYcOy.js +0 -76
|
@@ -2,12 +2,12 @@ import { useLunora } from '@lunora/react';
|
|
|
2
2
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
3
3
|
import { E as EmptyState } from './empty-state-DY_oe0k6.js';
|
|
4
4
|
import { T as Table, a as TableHeader, b as TableRow, c as TableHead, d as TableBody, e as TableCell } from './table-_RzNvy3R.js';
|
|
5
|
+
import { b as useClientQuery } from './use-admin-query-BkbdNFNz.js';
|
|
5
6
|
import { useAutoRefresh } from './DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js';
|
|
6
|
-
import { useT } from './
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { G as GridContainer, C as CellValue } from './data-grid-CCh2Couo.js';
|
|
7
|
+
import { useT } from './DEFAULT_LOCALE-CiX4W7Kr.js';
|
|
8
|
+
import { b as CLOUDFLARE_D1_URL } from './cf-links-2cktDedA.js';
|
|
9
|
+
import { u as useFacets, T as TableListSidebar, G as GridPagination, D as DataFacets } from './table-list-sidebar-Bg7uzbvC.js';
|
|
10
|
+
import { G as GridContainer, C as CellValue } from './data-grid-B5CaV3wS.js';
|
|
11
11
|
import { jsxDEV } from 'react/jsx-dev-runtime';
|
|
12
12
|
|
|
13
13
|
const DEFAULT_PAGE_SIZE = 50;
|
|
@@ -37,13 +37,9 @@ const GlobalDataBrowser = ({
|
|
|
37
37
|
} = {}) => {
|
|
38
38
|
const client = useLunora();
|
|
39
39
|
const t = useT();
|
|
40
|
-
const [tables, setTables] = useState(null);
|
|
41
|
-
const [tablesError, setTablesError] = useState(null);
|
|
42
40
|
const [selectedTable, setSelectedTable] = useState(initialTable ?? null);
|
|
43
41
|
const [offset, setOffset] = useState(0);
|
|
44
42
|
const [pageSize, setPageSize] = useState(initialPageSize);
|
|
45
|
-
const [page, setPage] = useState(null);
|
|
46
|
-
const [pageError, setPageError] = useState(null);
|
|
47
43
|
const [filters, setFilters] = useState([]);
|
|
48
44
|
const filtersRef = useRef(filters);
|
|
49
45
|
filtersRef.current = filters;
|
|
@@ -53,76 +49,53 @@ const GlobalDataBrowser = ({
|
|
|
53
49
|
refetchFacets: refetchFacetsViaHook,
|
|
54
50
|
toggleFacet
|
|
55
51
|
} = useFacets();
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const result = await client.readGlobalTablePage({
|
|
72
|
-
filters: activeFilters,
|
|
73
|
-
limit,
|
|
74
|
-
offset: nextOffset,
|
|
75
|
-
table
|
|
76
|
-
});
|
|
77
|
-
if (fetchSeqRef.current !== seq) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
setPage(result);
|
|
81
|
-
setOffset(nextOffset);
|
|
82
|
-
} catch (error_0) {
|
|
83
|
-
if (fetchSeqRef.current !== seq) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
setPage(null);
|
|
87
|
-
setPageError(errorMessage(error_0));
|
|
88
|
-
}
|
|
89
|
-
}, [client, pageSize]);
|
|
90
|
-
const facetFetcher = (table_0, activeFilters_0) => (column) => client.facetGlobalColumn({
|
|
52
|
+
const tablesQuery = useClientQuery(["lunora-global-tables"], () => client.listGlobalTables());
|
|
53
|
+
const tables = tablesQuery.data ?? null;
|
|
54
|
+
const tablesError = tablesQuery.error;
|
|
55
|
+
const pageQuery = useClientQuery(["lunora-global-page", selectedTable ?? "", offset, pageSize, JSON.stringify(filters)], () => client.readGlobalTablePage({
|
|
56
|
+
filters,
|
|
57
|
+
limit: pageSize,
|
|
58
|
+
offset,
|
|
59
|
+
table: selectedTable ?? ""
|
|
60
|
+
}), {
|
|
61
|
+
enabled: selectedTable !== null,
|
|
62
|
+
keepPreviousData: false
|
|
63
|
+
});
|
|
64
|
+
const page = pageQuery.data ?? null;
|
|
65
|
+
const pageError = pageQuery.error;
|
|
66
|
+
const facetFetcher = (table, activeFilters) => (column) => client.facetGlobalColumn({
|
|
91
67
|
column,
|
|
92
|
-
filters:
|
|
93
|
-
table
|
|
68
|
+
filters: activeFilters,
|
|
69
|
+
table
|
|
94
70
|
});
|
|
95
|
-
const refetchFacets = (
|
|
96
|
-
refetchFacetsViaHook(facetFetcher(
|
|
71
|
+
const refetchFacets = (table_0, activeFilters_0) => {
|
|
72
|
+
refetchFacetsViaHook(facetFetcher(table_0, activeFilters_0));
|
|
97
73
|
};
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
fireAndForget(fetchTables());
|
|
100
|
-
}, [fetchTables]);
|
|
101
74
|
useAutoRefresh(() => {
|
|
102
|
-
|
|
75
|
+
tablesQuery.refetch();
|
|
103
76
|
if (selectedTable !== null) {
|
|
104
|
-
|
|
77
|
+
pageQuery.refetch();
|
|
105
78
|
refetchFacets(selectedTable, filtersRef.current);
|
|
106
79
|
}
|
|
107
80
|
}, true);
|
|
108
81
|
const appliedInitialTable = useRef(void 0);
|
|
109
|
-
const selectTable = useCallback((
|
|
110
|
-
setSelectedTable(
|
|
111
|
-
appliedInitialTable.current =
|
|
82
|
+
const selectTable = useCallback((table_1) => {
|
|
83
|
+
setSelectedTable(table_1);
|
|
84
|
+
appliedInitialTable.current = table_1;
|
|
112
85
|
setFilters([]);
|
|
113
86
|
filtersRef.current = [];
|
|
114
87
|
clearFacets();
|
|
115
|
-
|
|
116
|
-
onSelectTable?.(
|
|
117
|
-
}, [clearFacets,
|
|
88
|
+
setOffset(0);
|
|
89
|
+
onSelectTable?.(table_1);
|
|
90
|
+
}, [clearFacets, onSelectTable]);
|
|
118
91
|
const onToggleFacet = (column_0) => {
|
|
119
92
|
toggleFacet(column_0, selectedTable === null ? null : facetFetcher(selectedTable, filtersRef.current));
|
|
120
93
|
};
|
|
121
94
|
const applyFilters = (next) => {
|
|
122
95
|
setFilters(next);
|
|
123
96
|
filtersRef.current = next;
|
|
97
|
+
setOffset(0);
|
|
124
98
|
if (selectedTable !== null) {
|
|
125
|
-
fireAndForget(fetchPage(selectedTable, 0, pageSize, next));
|
|
126
99
|
refetchFacets(selectedTable, next);
|
|
127
100
|
}
|
|
128
101
|
};
|
|
@@ -146,11 +119,11 @@ const GlobalDataBrowser = ({
|
|
|
146
119
|
selectTable(target);
|
|
147
120
|
});
|
|
148
121
|
}, [initialTable, selectTable]);
|
|
149
|
-
const goToPage = (
|
|
122
|
+
const goToPage = (nextOffset) => {
|
|
150
123
|
if (selectedTable === null) {
|
|
151
124
|
return;
|
|
152
125
|
}
|
|
153
|
-
|
|
126
|
+
setOffset(Math.max(0, nextOffset));
|
|
154
127
|
};
|
|
155
128
|
const total = page?.total ?? 0;
|
|
156
129
|
const hasPrevious = offset > 0;
|
|
@@ -158,7 +131,7 @@ const GlobalDataBrowser = ({
|
|
|
158
131
|
const rangeStart = page === null || page.rows.length === 0 ? 0 : offset + 1;
|
|
159
132
|
const rangeEnd = page === null ? 0 : offset + page.rows.length;
|
|
160
133
|
const reloadTables = () => {
|
|
161
|
-
|
|
134
|
+
tablesQuery.refetch();
|
|
162
135
|
};
|
|
163
136
|
const goPrevious = () => {
|
|
164
137
|
goToPage(offset - pageSize);
|
|
@@ -171,9 +144,7 @@ const GlobalDataBrowser = ({
|
|
|
171
144
|
};
|
|
172
145
|
const changePageSize = (size) => {
|
|
173
146
|
setPageSize(size);
|
|
174
|
-
|
|
175
|
-
fireAndForget(fetchPage(selectedTable, 0, size));
|
|
176
|
-
}
|
|
147
|
+
setOffset(0);
|
|
177
148
|
};
|
|
178
149
|
return /* @__PURE__ */ jsxDEV("div", {
|
|
179
150
|
className: "flex h-full min-w-0",
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { c } from 'react/compiler-runtime';
|
|
2
2
|
import { useLunora } from '@lunora/react';
|
|
3
3
|
import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
|
|
4
|
-
import ConnectionBadge from './ConnectionBadge-
|
|
5
|
-
import { L as LiveError } from './live-status-
|
|
4
|
+
import ConnectionBadge from './ConnectionBadge-B2DDM2Tn.js';
|
|
5
|
+
import { L as LiveError } from './live-status-FZ0psC1z.js';
|
|
6
6
|
import { B as Badge } from './badge-B2PKA1-5.js';
|
|
7
7
|
import { C as Card } from './card-DURq3ElK.js';
|
|
8
|
-
import { u as
|
|
9
|
-
import { useT } from './
|
|
10
|
-
import { ADMIN_FUNCTIONS } from './
|
|
11
|
-
import { f as fireAndForget,
|
|
8
|
+
import { u as useAdminQuery } from './use-admin-query-BkbdNFNz.js';
|
|
9
|
+
import { useT } from './DEFAULT_LOCALE-CiX4W7Kr.js';
|
|
10
|
+
import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-CdaxLGkE.js';
|
|
11
|
+
import { f as fireAndForget, b as formatTimestamp, c as callOptions, e as errorMessage, a as adminRef } from './internal-rXJEAhXS.js';
|
|
12
12
|
import { l as loadRecentShards } from './shard-history-DyebH1R5.js';
|
|
13
13
|
import { c as cn } from './utils-B05Dmz_H.js';
|
|
14
14
|
import { shardsToAggregate } from './aggregateMetrics-D4nUHEKU.js';
|
|
@@ -333,7 +333,6 @@ const HealthPanel = ({
|
|
|
333
333
|
const [auth, setAuth] = useState(null);
|
|
334
334
|
const [scheduler, setScheduler] = useState(null);
|
|
335
335
|
const [migrations, setMigrations] = useState([]);
|
|
336
|
-
const [liveError, setLiveError] = useState(void 0);
|
|
337
336
|
const [recentShards] = useState(loadRecentShards);
|
|
338
337
|
const inFlightRef = useRef(false);
|
|
339
338
|
const mountedRef = useRef(true);
|
|
@@ -387,10 +386,19 @@ const HealthPanel = ({
|
|
|
387
386
|
clearTimeout(trailingTimerRef.current);
|
|
388
387
|
}
|
|
389
388
|
}, []);
|
|
390
|
-
|
|
391
|
-
|
|
389
|
+
const {
|
|
390
|
+
data: liveMetrics,
|
|
391
|
+
liveError
|
|
392
|
+
} = useAdminQuery(ADMIN_FUNCTIONS.getMetrics, {}, {
|
|
393
|
+
live: true,
|
|
394
|
+
shardKey: rootShard
|
|
395
|
+
});
|
|
396
|
+
useEffect(() => {
|
|
397
|
+
if (liveMetrics === void 0) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
392
400
|
scheduleFanOut();
|
|
393
|
-
},
|
|
401
|
+
}, [liveMetrics]);
|
|
394
402
|
const recentErrors = entries.filter((entry) => entry.level === "error");
|
|
395
403
|
const topErrors = recentErrors.slice(0, RECENT_ERROR_LIMIT);
|
|
396
404
|
const trend = requestErrorSeries(totals?.history);
|
|
@@ -398,7 +406,7 @@ const HealthPanel = ({
|
|
|
398
406
|
const buckets = auth?.history ?? [];
|
|
399
407
|
return {
|
|
400
408
|
attempts: buckets.map((bucket) => bucket.attempts),
|
|
401
|
-
failures: buckets.map((
|
|
409
|
+
failures: buckets.map((bucket) => bucket.failures)
|
|
402
410
|
};
|
|
403
411
|
}, [auth?.history]);
|
|
404
412
|
const worstFunctions = functions.filter((stat) => stat.calls > 0).toSorted((a, b) => b.errors / b.calls - a.errors / a.calls || b.calls - a.calls).slice(0, TOP_FUNCTION_LIMIT);
|
|
@@ -549,25 +557,25 @@ const HealthPanel = ({
|
|
|
549
557
|
children: t("No function activity yet.")
|
|
550
558
|
}, void 0, false) : /* @__PURE__ */ jsxDEV("ul", {
|
|
551
559
|
className: "divide-y divide-border",
|
|
552
|
-
children: worstFunctions.map((
|
|
560
|
+
children: worstFunctions.map((stat) => /* @__PURE__ */ jsxDEV("li", {
|
|
553
561
|
className: "flex flex-wrap items-center justify-between gap-2 px-4 py-2 text-xs",
|
|
554
562
|
"data-testid": "hl-fn-row",
|
|
555
563
|
children: [/* @__PURE__ */ jsxDEV("span", {
|
|
556
564
|
className: "truncate font-mono text-foreground",
|
|
557
|
-
children:
|
|
565
|
+
children: stat.path
|
|
558
566
|
}, void 0, false), /* @__PURE__ */ jsxDEV("span", {
|
|
559
567
|
className: "flex shrink-0 items-center gap-2",
|
|
560
568
|
children: [/* @__PURE__ */ jsxDEV("span", {
|
|
561
569
|
className: "tabular-nums text-muted-foreground",
|
|
562
570
|
children: t("{count} calls", {
|
|
563
|
-
count:
|
|
571
|
+
count: stat.calls.toString()
|
|
564
572
|
})
|
|
565
573
|
}, void 0, false), /* @__PURE__ */ jsxDEV(Badge, {
|
|
566
|
-
variant: LEVEL_VARIANT[rateLevel(
|
|
567
|
-
children: ratePercent(
|
|
574
|
+
variant: LEVEL_VARIANT[rateLevel(stat.errors / stat.calls, REQUEST_ERROR_WARN, REQUEST_ERROR_CRIT)],
|
|
575
|
+
children: ratePercent(stat.errors, stat.calls)
|
|
568
576
|
}, void 0, false)]
|
|
569
577
|
}, void 0, true)]
|
|
570
|
-
},
|
|
578
|
+
}, stat.path, true))
|
|
571
579
|
}, void 0, false)]
|
|
572
580
|
}, void 0, true), /* @__PURE__ */ jsxDEV(Card, {
|
|
573
581
|
className: "gap-0 py-0",
|
|
@@ -592,23 +600,23 @@ const HealthPanel = ({
|
|
|
592
600
|
children: t("No recent errors.")
|
|
593
601
|
}, void 0, false), topErrors.length > 0 && /* @__PURE__ */ jsxDEV("ul", {
|
|
594
602
|
className: "divide-y divide-border",
|
|
595
|
-
children: topErrors.map((
|
|
603
|
+
children: topErrors.map((entry, index) => /* @__PURE__ */ jsxDEV("li", {
|
|
596
604
|
className: "flex flex-col gap-0.5 px-4 py-2 text-xs",
|
|
597
605
|
"data-testid": "hl-error-row",
|
|
598
606
|
children: [/* @__PURE__ */ jsxDEV("span", {
|
|
599
607
|
className: "flex items-center gap-2",
|
|
600
608
|
children: [/* @__PURE__ */ jsxDEV("time", {
|
|
601
609
|
className: "shrink-0 text-muted-foreground",
|
|
602
|
-
children: formatTimestamp(
|
|
603
|
-
}, void 0, false),
|
|
610
|
+
children: formatTimestamp(entry.timestamp)
|
|
611
|
+
}, void 0, false), entry.functionPath !== void 0 && /* @__PURE__ */ jsxDEV("span", {
|
|
604
612
|
className: "truncate font-mono text-foreground",
|
|
605
|
-
children:
|
|
613
|
+
children: entry.functionPath
|
|
606
614
|
}, void 0, false)]
|
|
607
615
|
}, void 0, true), /* @__PURE__ */ jsxDEV("span", {
|
|
608
616
|
className: "text-destructive",
|
|
609
|
-
children:
|
|
617
|
+
children: entry.message
|
|
610
618
|
}, void 0, false)]
|
|
611
|
-
}, `${
|
|
619
|
+
}, `${entry.timestamp.toString()}-${index.toString()}`, true))
|
|
612
620
|
}, void 0, false)]
|
|
613
621
|
}, void 0, true)]
|
|
614
622
|
}, void 0, true), /* @__PURE__ */ jsxDEV(Card, {
|