@mastra/playground-ui 26.1.0-alpha.0 → 26.1.0-alpha.2
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/CHANGELOG.md +22 -0
- package/dist/index.cjs.js +190 -109
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +190 -109
- package/dist/index.es.js.map +1 -1
- package/dist/src/domains/logs/components/logs-list-view.d.ts +3 -2
- package/dist/src/domains/traces/components/traces-list-view.d.ts +3 -2
- package/dist/src/ds/components/DataList/ScoresDataList/scores-data-list.d.ts +1 -2
- package/dist/src/ds/components/DataList/TracesDataList/traces-data-list.d.ts +4 -4
- package/dist/src/ds/components/DataList/data-list-root.d.ts +8 -2
- package/dist/src/ds/components/DataList/data-list-row-button.d.ts +7 -7
- package/dist/src/ds/components/DataList/data-list-row.d.ts +7 -6
- package/dist/src/ds/components/DataList/data-list-spacer.d.ts +10 -0
- package/dist/src/ds/components/DataList/data-list-subheader.d.ts +3 -6
- package/dist/src/ds/components/DataList/data-list.d.ts +5 -6
- package/dist/src/ds/components/LogsDataList/logs-data-list.d.ts +4 -4
- package/package.json +7 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @mastra/playground-ui
|
|
2
2
|
|
|
3
|
+
## 26.1.0-alpha.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`d1fdbd0`](https://github.com/mastra-ai/mastra/commit/d1fdbd012add5623cb7e6b7f882b605ab358bbb4), [`d91ebe2`](https://github.com/mastra-ai/mastra/commit/d91ebe28ee065d8f2ed6df741c3c07f58d359529), [`e41e7c8`](https://github.com/mastra-ai/mastra/commit/e41e7c88285feefe5cddea22105b40092bcf217f)]:
|
|
8
|
+
- @mastra/core@1.33.0-alpha.2
|
|
9
|
+
- @mastra/client-js@1.17.2-alpha.2
|
|
10
|
+
- @mastra/react@0.2.36-alpha.2
|
|
11
|
+
|
|
12
|
+
## 26.1.0-alpha.1
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Improved Studio's Traces page to scale smoothly to many traces. The list now renders only the visible window, so scrolling stays responsive and memory usage stays bounded regardless of how many traces are loaded. ([#16262](https://github.com/mastra-ai/mastra/pull/16262))
|
|
17
|
+
|
|
18
|
+
- Improved Studio's Logs page to scale smoothly to many log records. The list now renders only the visible window, so scrolling stays responsive and memory usage stays bounded regardless of how many logs are loaded. ([#16263](https://github.com/mastra-ai/mastra/pull/16263))
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [[`dccd8f1`](https://github.com/mastra-ai/mastra/commit/dccd8f1f8b8f1ad203b77556207e5529567c616d)]:
|
|
21
|
+
- @mastra/core@1.33.0-alpha.1
|
|
22
|
+
- @mastra/client-js@1.17.2-alpha.1
|
|
23
|
+
- @mastra/react@0.2.36-alpha.1
|
|
24
|
+
|
|
3
25
|
## 26.1.0-alpha.0
|
|
4
26
|
|
|
5
27
|
### Minor Changes
|
package/dist/index.cjs.js
CHANGED
|
@@ -52,6 +52,7 @@ const reactResizablePanels = require('react-resizable-panels');
|
|
|
52
52
|
const zustand = require('zustand');
|
|
53
53
|
const middleware = require('zustand/middleware');
|
|
54
54
|
const reactQuery = require('@tanstack/react-query');
|
|
55
|
+
const reactVirtual = require('@tanstack/react-virtual');
|
|
55
56
|
const observability = require('@mastra/core/observability');
|
|
56
57
|
|
|
57
58
|
function _interopNamespaceDefault(e) {
|
|
@@ -12502,10 +12503,11 @@ function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }) {
|
|
|
12502
12503
|
] });
|
|
12503
12504
|
}
|
|
12504
12505
|
|
|
12505
|
-
function DataListRoot({ children, columns, className }) {
|
|
12506
|
+
function DataListRoot({ children, columns, className, scrollRef }) {
|
|
12506
12507
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12507
12508
|
"div",
|
|
12508
12509
|
{
|
|
12510
|
+
ref: scrollRef,
|
|
12509
12511
|
className: cn(
|
|
12510
12512
|
"grid bg-surface2 border max-h-full border-border1 rounded-xl overflow-y-auto content-start",
|
|
12511
12513
|
className
|
|
@@ -12526,32 +12528,46 @@ const dataListRowStyles = [
|
|
|
12526
12528
|
"transition-colors duration-200 rounded-lg"
|
|
12527
12529
|
];
|
|
12528
12530
|
|
|
12529
|
-
|
|
12530
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(...dataListRowStyles, className), children });
|
|
12531
|
-
}
|
|
12531
|
+
const DataListRow = React.forwardRef(({ children, className, ...rest }, ref) => {
|
|
12532
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(...dataListRowStyles, className), ...rest, children });
|
|
12533
|
+
});
|
|
12534
|
+
DataListRow.displayName = "DataListRow";
|
|
12532
12535
|
|
|
12533
|
-
|
|
12534
|
-
|
|
12535
|
-
}
|
|
12536
|
+
const DataListRowButton = React.forwardRef(
|
|
12537
|
+
({ children, className, type = "button", ...rest }, ref) => {
|
|
12538
|
+
return /* @__PURE__ */ jsxRuntime.jsx("button", { ref, type, className: cn(...dataListRowStyles, "text-left", className), ...rest, children });
|
|
12539
|
+
}
|
|
12540
|
+
);
|
|
12541
|
+
DataListRowButton.displayName = "DataListRowButton";
|
|
12536
12542
|
|
|
12537
12543
|
function DataListRowLink({ children, to, className, LinkComponent: Link }) {
|
|
12538
12544
|
return /* @__PURE__ */ jsxRuntime.jsx(Link, { href: to, className: cn(...dataListRowStyles, className), children });
|
|
12539
12545
|
}
|
|
12540
12546
|
|
|
12541
|
-
function
|
|
12542
|
-
|
|
12543
|
-
|
|
12544
|
-
{
|
|
12545
|
-
className: cn(
|
|
12546
|
-
"data-list-subheader relative isolate col-span-full px-4 py-3 border-none text-ui-md text-neutral4 font-medium mx-1",
|
|
12547
|
-
"before:absolute before:inset-x-0 before:inset-y-1 before:bg-surface4 before:rounded-md before:-z-1",
|
|
12548
|
-
className
|
|
12549
|
-
),
|
|
12550
|
-
children
|
|
12551
|
-
}
|
|
12552
|
-
);
|
|
12547
|
+
function DataListSpacer({ height }) {
|
|
12548
|
+
if (height <= 0) return null;
|
|
12549
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", style: { height } });
|
|
12553
12550
|
}
|
|
12554
12551
|
|
|
12552
|
+
const DataListSubheader = React.forwardRef(
|
|
12553
|
+
({ children, className, ...rest }, ref) => {
|
|
12554
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12555
|
+
"div",
|
|
12556
|
+
{
|
|
12557
|
+
ref,
|
|
12558
|
+
className: cn(
|
|
12559
|
+
"data-list-subheader relative isolate col-span-full px-4 py-3 border-none text-ui-md text-neutral4 font-medium mx-1",
|
|
12560
|
+
"before:absolute before:inset-x-0 before:inset-y-1 before:bg-surface4 before:rounded-md before:-z-1",
|
|
12561
|
+
className
|
|
12562
|
+
),
|
|
12563
|
+
...rest,
|
|
12564
|
+
children
|
|
12565
|
+
}
|
|
12566
|
+
);
|
|
12567
|
+
}
|
|
12568
|
+
);
|
|
12569
|
+
DataListSubheader.displayName = "DataListSubheader";
|
|
12570
|
+
|
|
12555
12571
|
function DataListSubHeading({ children, className }) {
|
|
12556
12572
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-ui-sm text-neutral2 font-normal", className), children });
|
|
12557
12573
|
}
|
|
@@ -12636,6 +12652,7 @@ const DataList = Object.assign(DataListRoot, {
|
|
|
12636
12652
|
NoMatch: DataListNoMatch,
|
|
12637
12653
|
Subheader: DataListSubheader,
|
|
12638
12654
|
SubHeading: DataListSubHeading,
|
|
12655
|
+
Spacer: DataListSpacer,
|
|
12639
12656
|
NextPageLoading: DataListNextPageLoading,
|
|
12640
12657
|
Pagination: DataListPagination
|
|
12641
12658
|
});
|
|
@@ -12776,6 +12793,7 @@ const TracesDataList = Object.assign(TracesDataListRoot, {
|
|
|
12776
12793
|
NoMatch: DataListNoMatch,
|
|
12777
12794
|
Subheader: DataListSubheader,
|
|
12778
12795
|
SubHeading: DataListSubHeading,
|
|
12796
|
+
Spacer: DataListSpacer,
|
|
12779
12797
|
IdCell: TracesDataListIdCell,
|
|
12780
12798
|
DateCell: TracesDataListDateCell,
|
|
12781
12799
|
TimeCell: TracesDataListTimeCell,
|
|
@@ -13076,6 +13094,7 @@ const LogsDataList = Object.assign(DataListRoot, {
|
|
|
13076
13094
|
Row: DataListRow,
|
|
13077
13095
|
RowButton: DataListRowButton,
|
|
13078
13096
|
RowLink: DataListRowLink,
|
|
13097
|
+
Spacer: DataListSpacer,
|
|
13079
13098
|
NoMatch: DataListNoMatch,
|
|
13080
13099
|
DateCell: LogsDataListDateCell,
|
|
13081
13100
|
TimeCell: LogsDataListTimeCell,
|
|
@@ -17933,6 +17952,8 @@ function groupTracesByThread(traces) {
|
|
|
17933
17952
|
}
|
|
17934
17953
|
|
|
17935
17954
|
const COLUMNS$1 = "auto auto auto auto minmax(5rem,1fr) auto auto";
|
|
17955
|
+
const ROW_HEIGHT$1 = 36;
|
|
17956
|
+
const OVERSCAN$1 = 8;
|
|
17936
17957
|
function TracesListView({
|
|
17937
17958
|
traces,
|
|
17938
17959
|
isLoading,
|
|
@@ -17945,32 +17966,73 @@ function TracesListView({
|
|
|
17945
17966
|
groupByThread,
|
|
17946
17967
|
threadTitles
|
|
17947
17968
|
}) {
|
|
17969
|
+
const scrollRef = React.useRef(null);
|
|
17970
|
+
const items = React.useMemo(() => {
|
|
17971
|
+
if (traces.length === 0) return [];
|
|
17972
|
+
if (!groupByThread) {
|
|
17973
|
+
return traces.map((trace) => ({ kind: "row", key: trace.traceId, trace }));
|
|
17974
|
+
}
|
|
17975
|
+
const { groups, ungrouped } = groupTracesByThread(traces);
|
|
17976
|
+
const result = [];
|
|
17977
|
+
for (const group of groups) {
|
|
17978
|
+
result.push({
|
|
17979
|
+
kind: "subheader",
|
|
17980
|
+
key: `header-${group.threadId}`,
|
|
17981
|
+
node: /* @__PURE__ */ jsxRuntime.jsxs(TracesDataList.SubHeading, { className: "flex gap-2", children: [
|
|
17982
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "uppercase", children: "Thread" }),
|
|
17983
|
+
threadTitles?.[group.threadId] && /* @__PURE__ */ jsxRuntime.jsxs("b", { children: [
|
|
17984
|
+
"'",
|
|
17985
|
+
threadTitles[group.threadId],
|
|
17986
|
+
"'"
|
|
17987
|
+
] }),
|
|
17988
|
+
/* @__PURE__ */ jsxRuntime.jsxs("b", { children: [
|
|
17989
|
+
"# ",
|
|
17990
|
+
group.threadId
|
|
17991
|
+
] }),
|
|
17992
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-neutral2", children: [
|
|
17993
|
+
"(",
|
|
17994
|
+
group.traces.length,
|
|
17995
|
+
")"
|
|
17996
|
+
] })
|
|
17997
|
+
] })
|
|
17998
|
+
});
|
|
17999
|
+
for (const trace of group.traces) {
|
|
18000
|
+
result.push({ kind: "row", key: trace.traceId, trace });
|
|
18001
|
+
}
|
|
18002
|
+
}
|
|
18003
|
+
if (ungrouped.length > 0) {
|
|
18004
|
+
result.push({
|
|
18005
|
+
kind: "subheader",
|
|
18006
|
+
key: "header-ungrouped",
|
|
18007
|
+
node: /* @__PURE__ */ jsxRuntime.jsxs(TracesDataList.SubHeading, { className: "flex gap-2 uppercase", children: [
|
|
18008
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "No thread" }),
|
|
18009
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-neutral2", children: [
|
|
18010
|
+
"(",
|
|
18011
|
+
ungrouped.length,
|
|
18012
|
+
")"
|
|
18013
|
+
] })
|
|
18014
|
+
] })
|
|
18015
|
+
});
|
|
18016
|
+
for (const trace of ungrouped) {
|
|
18017
|
+
result.push({ kind: "row", key: trace.traceId, trace });
|
|
18018
|
+
}
|
|
18019
|
+
}
|
|
18020
|
+
return result;
|
|
18021
|
+
}, [traces, groupByThread, threadTitles]);
|
|
18022
|
+
const virtualizer = reactVirtual.useVirtualizer({
|
|
18023
|
+
count: items.length,
|
|
18024
|
+
getScrollElement: () => scrollRef.current,
|
|
18025
|
+
estimateSize: () => ROW_HEIGHT$1,
|
|
18026
|
+
overscan: OVERSCAN$1
|
|
18027
|
+
});
|
|
17948
18028
|
if (isLoading) {
|
|
17949
18029
|
return /* @__PURE__ */ jsxRuntime.jsx(DataListSkeleton, { columns: COLUMNS$1 });
|
|
17950
18030
|
}
|
|
17951
|
-
const
|
|
17952
|
-
|
|
17953
|
-
|
|
17954
|
-
|
|
17955
|
-
|
|
17956
|
-
TracesDataList.RowButton,
|
|
17957
|
-
{
|
|
17958
|
-
onClick: () => onTraceClick(trace),
|
|
17959
|
-
className: cn(isFeatured && "bg-surface4"),
|
|
17960
|
-
children: [
|
|
17961
|
-
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.IdCell, { traceId: trace.traceId }),
|
|
17962
|
-
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.DateCell, { timestamp: displayDate }),
|
|
17963
|
-
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.TimeCell, { timestamp: displayDate }),
|
|
17964
|
-
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.NameCell, { name: trace.name }),
|
|
17965
|
-
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.InputCell, { input: getInputPreview(trace.input) }),
|
|
17966
|
-
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.EntityCell, { entityType: trace.entityType, entityName }),
|
|
17967
|
-
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.StatusCell, { status: trace.attributes?.status })
|
|
17968
|
-
]
|
|
17969
|
-
},
|
|
17970
|
-
trace.traceId
|
|
17971
|
-
);
|
|
17972
|
-
});
|
|
17973
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(TracesDataList, { columns: COLUMNS$1, className: "min-w-0", children: [
|
|
18031
|
+
const virtualItems = virtualizer.getVirtualItems();
|
|
18032
|
+
const totalSize = virtualizer.getTotalSize();
|
|
18033
|
+
const paddingTop = virtualItems[0]?.start ?? 0;
|
|
18034
|
+
const paddingBottom = virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;
|
|
18035
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(TracesDataList, { columns: COLUMNS$1, scrollRef, className: "min-w-0", children: [
|
|
17974
18036
|
/* @__PURE__ */ jsxRuntime.jsxs(TracesDataList.Top, { children: [
|
|
17975
18037
|
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.TopCell, { children: "ID" }),
|
|
17976
18038
|
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.TopCell, { children: "Date" }),
|
|
@@ -17980,55 +18042,53 @@ function TracesListView({
|
|
|
17980
18042
|
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.TopCell, { children: "Entity" }),
|
|
17981
18043
|
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.TopCell, { children: "Status" })
|
|
17982
18044
|
] }),
|
|
17983
|
-
|
|
18045
|
+
items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17984
18046
|
TracesDataList.NoMatch,
|
|
17985
18047
|
{
|
|
17986
18048
|
message: filtersApplied ? "No traces found for applied filters" : "No traces found yet"
|
|
17987
18049
|
}
|
|
17988
|
-
) :
|
|
17989
|
-
|
|
17990
|
-
|
|
17991
|
-
|
|
17992
|
-
|
|
17993
|
-
|
|
17994
|
-
|
|
17995
|
-
|
|
17996
|
-
|
|
17997
|
-
|
|
17998
|
-
|
|
17999
|
-
|
|
18000
|
-
|
|
18001
|
-
|
|
18002
|
-
|
|
18003
|
-
|
|
18004
|
-
|
|
18005
|
-
|
|
18006
|
-
|
|
18007
|
-
|
|
18008
|
-
|
|
18009
|
-
|
|
18010
|
-
|
|
18011
|
-
|
|
18012
|
-
|
|
18013
|
-
|
|
18014
|
-
|
|
18015
|
-
|
|
18016
|
-
|
|
18017
|
-
|
|
18018
|
-
|
|
18019
|
-
|
|
18020
|
-
|
|
18021
|
-
|
|
18022
|
-
|
|
18023
|
-
|
|
18024
|
-
|
|
18025
|
-
|
|
18026
|
-
|
|
18027
|
-
|
|
18028
|
-
|
|
18029
|
-
|
|
18030
|
-
}
|
|
18031
|
-
)
|
|
18050
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
18051
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.Spacer, { height: paddingTop }),
|
|
18052
|
+
virtualItems.map((vi) => {
|
|
18053
|
+
const item = items[vi.index];
|
|
18054
|
+
if (!item) return null;
|
|
18055
|
+
if (item.kind === "subheader") {
|
|
18056
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TracesDataList.Subheader, { ref: virtualizer.measureElement, "data-index": vi.index, children: item.node }, item.key);
|
|
18057
|
+
}
|
|
18058
|
+
const trace = item.trace;
|
|
18059
|
+
const isFeatured = trace.traceId === featuredTraceId;
|
|
18060
|
+
const displayDate = trace.startedAt ?? trace.createdAt;
|
|
18061
|
+
const entityName = trace.entityName || trace.entityId || trace.attributes?.agentId || trace.attributes?.workflowId;
|
|
18062
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18063
|
+
TracesDataList.RowButton,
|
|
18064
|
+
{
|
|
18065
|
+
ref: virtualizer.measureElement,
|
|
18066
|
+
"data-index": vi.index,
|
|
18067
|
+
onClick: () => onTraceClick(trace),
|
|
18068
|
+
className: cn(isFeatured && "bg-surface4"),
|
|
18069
|
+
children: [
|
|
18070
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.IdCell, { traceId: trace.traceId }),
|
|
18071
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.DateCell, { timestamp: displayDate }),
|
|
18072
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.TimeCell, { timestamp: displayDate }),
|
|
18073
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.NameCell, { name: trace.name }),
|
|
18074
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.InputCell, { input: getInputPreview(trace.input) }),
|
|
18075
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.EntityCell, { entityType: trace.entityType, entityName }),
|
|
18076
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.StatusCell, { status: trace.attributes?.status })
|
|
18077
|
+
]
|
|
18078
|
+
},
|
|
18079
|
+
trace.traceId
|
|
18080
|
+
);
|
|
18081
|
+
}),
|
|
18082
|
+
/* @__PURE__ */ jsxRuntime.jsx(TracesDataList.Spacer, { height: paddingBottom }),
|
|
18083
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18084
|
+
TracesDataList.NextPageLoading,
|
|
18085
|
+
{
|
|
18086
|
+
isLoading: isFetchingNextPage,
|
|
18087
|
+
hasMore: hasNextPage,
|
|
18088
|
+
setEndOfListElement
|
|
18089
|
+
}
|
|
18090
|
+
)
|
|
18091
|
+
] })
|
|
18032
18092
|
] });
|
|
18033
18093
|
}
|
|
18034
18094
|
|
|
@@ -19049,6 +19109,8 @@ function LogsLayout({ listSlot, logPanelSlot, tracePanelSlot, spanPanelSlot, log
|
|
|
19049
19109
|
}
|
|
19050
19110
|
|
|
19051
19111
|
const COLUMNS = "auto auto auto auto minmax(5rem,1fr) minmax(5rem,1fr)";
|
|
19112
|
+
const ROW_HEIGHT = 36;
|
|
19113
|
+
const OVERSCAN = 8;
|
|
19052
19114
|
function LogsListView({
|
|
19053
19115
|
logs,
|
|
19054
19116
|
isLoading,
|
|
@@ -19059,10 +19121,21 @@ function LogsListView({
|
|
|
19059
19121
|
featuredLogId,
|
|
19060
19122
|
onLogClick
|
|
19061
19123
|
}) {
|
|
19124
|
+
const scrollRef = React.useRef(null);
|
|
19125
|
+
const virtualizer = reactVirtual.useVirtualizer({
|
|
19126
|
+
count: logs.length,
|
|
19127
|
+
getScrollElement: () => scrollRef.current,
|
|
19128
|
+
estimateSize: () => ROW_HEIGHT,
|
|
19129
|
+
overscan: OVERSCAN
|
|
19130
|
+
});
|
|
19062
19131
|
if (isLoading) {
|
|
19063
19132
|
return /* @__PURE__ */ jsxRuntime.jsx(DataListSkeleton, { columns: COLUMNS });
|
|
19064
19133
|
}
|
|
19065
|
-
|
|
19134
|
+
const virtualItems = virtualizer.getVirtualItems();
|
|
19135
|
+
const totalSize = virtualizer.getTotalSize();
|
|
19136
|
+
const paddingTop = virtualItems[0]?.start ?? 0;
|
|
19137
|
+
const paddingBottom = virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;
|
|
19138
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(LogsDataList, { columns: COLUMNS, scrollRef, className: "min-w-0", children: [
|
|
19066
19139
|
/* @__PURE__ */ jsxRuntime.jsxs(LogsDataList.Top, { children: [
|
|
19067
19140
|
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.TopCell, { children: "Date" }),
|
|
19068
19141
|
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.TopCell, { children: "Time" }),
|
|
@@ -19071,27 +19144,35 @@ function LogsListView({
|
|
|
19071
19144
|
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.TopCell, { children: "Message" }),
|
|
19072
19145
|
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.TopCell, { children: "Data" })
|
|
19073
19146
|
] }),
|
|
19074
|
-
logs.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(LogsDataList.NoMatch, { message: "No logs match your search" }) :
|
|
19075
|
-
|
|
19076
|
-
|
|
19077
|
-
|
|
19078
|
-
|
|
19079
|
-
|
|
19080
|
-
|
|
19081
|
-
|
|
19082
|
-
|
|
19083
|
-
|
|
19084
|
-
|
|
19085
|
-
|
|
19086
|
-
|
|
19087
|
-
|
|
19088
|
-
|
|
19089
|
-
|
|
19090
|
-
|
|
19091
|
-
|
|
19092
|
-
|
|
19093
|
-
|
|
19094
|
-
|
|
19147
|
+
logs.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(LogsDataList.NoMatch, { message: "No logs match your search" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
19148
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.Spacer, { height: paddingTop }),
|
|
19149
|
+
virtualItems.map((vi) => {
|
|
19150
|
+
const log = logs[vi.index];
|
|
19151
|
+
if (!log) return null;
|
|
19152
|
+
const id = logIdMap.get(log);
|
|
19153
|
+
if (!id) return null;
|
|
19154
|
+
const isFeatured = id === featuredLogId;
|
|
19155
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19156
|
+
LogsDataList.RowButton,
|
|
19157
|
+
{
|
|
19158
|
+
ref: virtualizer.measureElement,
|
|
19159
|
+
"data-index": vi.index,
|
|
19160
|
+
onClick: () => onLogClick(log),
|
|
19161
|
+
className: cn(isFeatured && "bg-surface4"),
|
|
19162
|
+
children: [
|
|
19163
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.DateCell, { timestamp: log.timestamp }),
|
|
19164
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.TimeCell, { timestamp: log.timestamp }),
|
|
19165
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.LevelCell, { level: log.level }),
|
|
19166
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.EntityCell, { entityType: log.entityType, entityName: log.entityName }),
|
|
19167
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.MessageCell, { message: log.message }),
|
|
19168
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.DataCell, { data: log.data })
|
|
19169
|
+
]
|
|
19170
|
+
},
|
|
19171
|
+
id
|
|
19172
|
+
);
|
|
19173
|
+
}),
|
|
19174
|
+
/* @__PURE__ */ jsxRuntime.jsx(LogsDataList.Spacer, { height: paddingBottom })
|
|
19175
|
+
] }),
|
|
19095
19176
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19096
19177
|
LogsDataList.NextPageLoading,
|
|
19097
19178
|
{
|