@localstack/appinspector-ui 1.0.175 → 1.0.177

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/index.cjs CHANGED
@@ -15707,8 +15707,8 @@ var SpansFilterBar = ({
15707
15707
  var import_jsx_runtime127 = require("react/jsx-runtime");
15708
15708
  var columnHelper = createColumnHelper();
15709
15709
  var newSpanBackgroundColor = {
15710
- dark: { from: "rgba(136, 123, 2, 1)", to: "rgba(136, 123, 2, 0)" },
15711
- light: { from: "rgba(255, 222, 123, 1)", to: "rgba(255, 222, 123, 0)" }
15710
+ dark: { from: "rgba(255, 193, 7, 0.14)", to: "rgba(255, 193, 7, 0)" },
15711
+ light: { from: "rgba(255, 213, 79, 0.45)", to: "rgba(255, 213, 79, 0)" }
15712
15712
  };
15713
15713
  var LABEL_BEGINNING_OF_STREAM = "This is the beginning of the stream";
15714
15714
  var LABEL_END_OF_STREAM = "This is the end of the stream";
@@ -15784,10 +15784,8 @@ var SpansDataGridRow = (0, import_react38.memo)(
15784
15784
  onClick: () => {
15785
15785
  onSpanClick(row.original);
15786
15786
  },
15787
- sx: {
15788
- cursor: "pointer",
15789
- transition: "background-color 1200ms ease-in"
15790
- },
15787
+ sx: { cursor: "pointer" },
15788
+ transition: { duration: 2.5, ease: "easeOut" },
15791
15789
  children: row.getVisibleCells().map((cell) => {
15792
15790
  return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
15793
15791
  import_material7.TableCell,
@@ -15838,6 +15836,7 @@ var SpansDataGrid = ({
15838
15836
  hasMoreBackward,
15839
15837
  hasMoreForward,
15840
15838
  licenseLimit,
15839
+ newSpanIds,
15841
15840
  onClearSpans,
15842
15841
  onFiltersChange,
15843
15842
  onOrderChange,
@@ -16033,17 +16032,6 @@ var SpansDataGrid = ({
16033
16032
  const totalVirtualSize = virtualizer.getTotalSize();
16034
16033
  const paddingTop = virtualItems.length > 0 ? virtualItems[0]?.start ?? 0 : 0;
16035
16034
  const paddingBottom = virtualItems.length > 0 ? totalVirtualSize - (virtualItems.at(-1)?.end ?? 0) : totalVirtualSize;
16036
- const seenSpanIdsRef = (0, import_react38.useRef)(void 0);
16037
- seenSpanIdsRef.current ??= new Set((filteredSpans ?? []).map((span) => span.span_id));
16038
- (0, import_react38.useLayoutEffect)(() => {
16039
- for (const virtualItem of virtualItems) {
16040
- const row = displayRows[virtualItem.index];
16041
- if (row) seenSpanIdsRef.current?.add(row.original.span_id);
16042
- }
16043
- });
16044
- (0, import_react38.useEffect)(() => {
16045
- if (filteredSpans?.length === 0) seenSpanIdsRef.current = void 0;
16046
- }, [filteredSpans?.length]);
16047
16035
  const lastSpanId = filteredSpans?.at(-1)?.span_id;
16048
16036
  (0, import_react38.useLayoutEffect)(() => {
16049
16037
  handleScroll();
@@ -16213,7 +16201,7 @@ var SpansDataGrid = ({
16213
16201
  ) }),
16214
16202
  hasRows && virtualItems.map((virtualItem) => {
16215
16203
  const row = displayRows[virtualItem.index];
16216
- const isNew = !(seenSpanIdsRef.current?.has(row.original.span_id) ?? false);
16204
+ const isNew = newSpanIds?.has(row.original.span_id) ?? false;
16217
16205
  return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
16218
16206
  SpansDataGridRow,
16219
16207
  {
@@ -16246,7 +16234,7 @@ var SpansDataGrid = ({
16246
16234
  ) }),
16247
16235
  hasRows && virtualItems.map((virtualItem) => {
16248
16236
  const row = displayRows[virtualItem.index];
16249
- const isNew = !(seenSpanIdsRef.current?.has(row.original.span_id) ?? false);
16237
+ const isNew = newSpanIds?.has(row.original.span_id) ?? false;
16250
16238
  return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
16251
16239
  SpansDataGridRow,
16252
16240
  {
@@ -16309,6 +16297,7 @@ var SpansList = (props) => {
16309
16297
  hasMoreBackward: props.hasMoreBackward,
16310
16298
  hasMoreForward: props.hasMoreForward,
16311
16299
  licenseLimit: props.licenseLimit,
16300
+ newSpanIds: props.newSpanIds,
16312
16301
  onClearSpans: props.onClearSpans,
16313
16302
  onFiltersChange: props.onFiltersChange,
16314
16303
  onOrderChange: props.onOrderChange,
@@ -19392,11 +19381,14 @@ function useSpansWebSocket(options) {
19392
19381
 
19393
19382
  // src/hooks/use-spans.ts
19394
19383
  var PAGE_SIZE = 100;
19384
+ var NEW_SPAN_HIGHLIGHT_WINDOW_MS = 5e3;
19395
19385
  var useSpans = () => {
19396
19386
  const api = useAppInspectorApi();
19397
19387
  const { onWsClose, onWsOpen, status, wsEnabled } = useAppInspectorStatus();
19398
19388
  const { addPage, clear: clearCompute, result: computeResult, retryWorker, setFilters: setComputeFilters, workerError } = useSpansCompute();
19399
19389
  const spanMapRef = (0, import_react48.useRef)(/* @__PURE__ */ new Map());
19390
+ const newSpanIdsRef = (0, import_react48.useRef)(/* @__PURE__ */ new Set());
19391
+ const caughtUpRef = (0, import_react48.useRef)(false);
19400
19392
  const [filters, setFiltersState] = (0, import_react48.useState)(EMPTY_FILTERS);
19401
19393
  const setFilters = (0, import_react48.useCallback)((next) => {
19402
19394
  setFiltersState(next);
@@ -19426,6 +19418,8 @@ var useSpans = () => {
19426
19418
  }, []);
19427
19419
  const resetCorpus = (0, import_react48.useCallback)(() => {
19428
19420
  spanMapRef.current.clear();
19421
+ newSpanIdsRef.current.clear();
19422
+ caughtUpRef.current = false;
19429
19423
  clearCompute();
19430
19424
  }, [clearCompute]);
19431
19425
  const [epoch, setEpoch] = (0, import_react48.useState)();
@@ -19512,6 +19506,7 @@ var useSpans = () => {
19512
19506
  setFetchError(void 0);
19513
19507
  setHasMoreBackward(hasMoreBackward2);
19514
19508
  setHasMoreForward(hasMoreForward2);
19509
+ if (!hasMoreForward2) caughtUpRef.current = true;
19515
19510
  setSpansLoaded(true);
19516
19511
  },
19517
19512
  onError: (error) => {
@@ -19522,6 +19517,11 @@ var useSpans = () => {
19522
19517
  // Ordering is owned by the compute backend, so no main-thread sortComparator is needed.
19523
19518
  onPageFetched: (direction, items) => {
19524
19519
  for (const span of items) {
19520
+ if (direction === "forward" && caughtUpRef.current && !spanMapRef.current.has(span.span_id)) {
19521
+ const { span_id: spanId } = span;
19522
+ newSpanIdsRef.current.add(spanId);
19523
+ setTimeout(() => newSpanIdsRef.current.delete(spanId), NEW_SPAN_HIGHLIGHT_WINDOW_MS);
19524
+ }
19525
19525
  spanMapRef.current.set(span.span_id, span);
19526
19526
  }
19527
19527
  addPage(direction, items.map((span) => toSpanFilterProjection(span)));
@@ -19599,6 +19599,7 @@ var useSpans = () => {
19599
19599
  const spanMap = spanMapRef.current;
19600
19600
  return computeResult.orderedFilteredIds.map((id2) => spanMap.get(id2)).filter((span) => span !== void 0);
19601
19601
  }, [computeResult, spansLoaded]);
19602
+ const newSpanIds = newSpanIdsRef.current;
19602
19603
  return {
19603
19604
  clearFetchError,
19604
19605
  clearingSpans,
@@ -19618,6 +19619,7 @@ var useSpans = () => {
19618
19619
  hasMoreBackward,
19619
19620
  hasMoreForward,
19620
19621
  licenseLimit,
19622
+ newSpanIds,
19621
19623
  producerValues: computeResult.producerValues,
19622
19624
  retryWorker,
19623
19625
  search,
@@ -33026,6 +33028,7 @@ var SpansListPage = () => {
33026
33028
  hasMoreBackward,
33027
33029
  hasMoreForward,
33028
33030
  licenseLimit,
33031
+ newSpanIds,
33029
33032
  producerValues,
33030
33033
  retryWorker,
33031
33034
  search,
@@ -33167,6 +33170,7 @@ var SpansListPage = () => {
33167
33170
  hasMoreBackward,
33168
33171
  hasMoreForward,
33169
33172
  licenseLimit,
33173
+ newSpanIds,
33170
33174
  onClearSpans: clearSpansSync,
33171
33175
  onFetchForward: fetchForward,
33172
33176
  onFiltersChange: setFilters,