@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.js CHANGED
@@ -15731,8 +15731,8 @@ var SpansFilterBar = ({
15731
15731
  import { Fragment as Fragment5, jsx as jsx127, jsxs as jsxs122 } from "react/jsx-runtime";
15732
15732
  var columnHelper = createColumnHelper();
15733
15733
  var newSpanBackgroundColor = {
15734
- dark: { from: "rgba(136, 123, 2, 1)", to: "rgba(136, 123, 2, 0)" },
15735
- light: { from: "rgba(255, 222, 123, 1)", to: "rgba(255, 222, 123, 0)" }
15734
+ dark: { from: "rgba(255, 193, 7, 0.14)", to: "rgba(255, 193, 7, 0)" },
15735
+ light: { from: "rgba(255, 213, 79, 0.45)", to: "rgba(255, 213, 79, 0)" }
15736
15736
  };
15737
15737
  var LABEL_BEGINNING_OF_STREAM = "This is the beginning of the stream";
15738
15738
  var LABEL_END_OF_STREAM = "This is the end of the stream";
@@ -15808,10 +15808,8 @@ var SpansDataGridRow = memo8(
15808
15808
  onClick: () => {
15809
15809
  onSpanClick(row.original);
15810
15810
  },
15811
- sx: {
15812
- cursor: "pointer",
15813
- transition: "background-color 1200ms ease-in"
15814
- },
15811
+ sx: { cursor: "pointer" },
15812
+ transition: { duration: 2.5, ease: "easeOut" },
15815
15813
  children: row.getVisibleCells().map((cell) => {
15816
15814
  return /* @__PURE__ */ jsx127(
15817
15815
  TableCell,
@@ -15862,6 +15860,7 @@ var SpansDataGrid = ({
15862
15860
  hasMoreBackward,
15863
15861
  hasMoreForward,
15864
15862
  licenseLimit,
15863
+ newSpanIds,
15865
15864
  onClearSpans,
15866
15865
  onFiltersChange,
15867
15866
  onOrderChange,
@@ -16057,17 +16056,6 @@ var SpansDataGrid = ({
16057
16056
  const totalVirtualSize = virtualizer.getTotalSize();
16058
16057
  const paddingTop = virtualItems.length > 0 ? virtualItems[0]?.start ?? 0 : 0;
16059
16058
  const paddingBottom = virtualItems.length > 0 ? totalVirtualSize - (virtualItems.at(-1)?.end ?? 0) : totalVirtualSize;
16060
- const seenSpanIdsRef = useRef6(void 0);
16061
- seenSpanIdsRef.current ??= new Set((filteredSpans ?? []).map((span) => span.span_id));
16062
- useLayoutEffect3(() => {
16063
- for (const virtualItem of virtualItems) {
16064
- const row = displayRows[virtualItem.index];
16065
- if (row) seenSpanIdsRef.current?.add(row.original.span_id);
16066
- }
16067
- });
16068
- useEffect11(() => {
16069
- if (filteredSpans?.length === 0) seenSpanIdsRef.current = void 0;
16070
- }, [filteredSpans?.length]);
16071
16059
  const lastSpanId = filteredSpans?.at(-1)?.span_id;
16072
16060
  useLayoutEffect3(() => {
16073
16061
  handleScroll();
@@ -16237,7 +16225,7 @@ var SpansDataGrid = ({
16237
16225
  ) }),
16238
16226
  hasRows && virtualItems.map((virtualItem) => {
16239
16227
  const row = displayRows[virtualItem.index];
16240
- const isNew = !(seenSpanIdsRef.current?.has(row.original.span_id) ?? false);
16228
+ const isNew = newSpanIds?.has(row.original.span_id) ?? false;
16241
16229
  return /* @__PURE__ */ jsx127(
16242
16230
  SpansDataGridRow,
16243
16231
  {
@@ -16270,7 +16258,7 @@ var SpansDataGrid = ({
16270
16258
  ) }),
16271
16259
  hasRows && virtualItems.map((virtualItem) => {
16272
16260
  const row = displayRows[virtualItem.index];
16273
- const isNew = !(seenSpanIdsRef.current?.has(row.original.span_id) ?? false);
16261
+ const isNew = newSpanIds?.has(row.original.span_id) ?? false;
16274
16262
  return /* @__PURE__ */ jsx127(
16275
16263
  SpansDataGridRow,
16276
16264
  {
@@ -16333,6 +16321,7 @@ var SpansList = (props) => {
16333
16321
  hasMoreBackward: props.hasMoreBackward,
16334
16322
  hasMoreForward: props.hasMoreForward,
16335
16323
  licenseLimit: props.licenseLimit,
16324
+ newSpanIds: props.newSpanIds,
16336
16325
  onClearSpans: props.onClearSpans,
16337
16326
  onFiltersChange: props.onFiltersChange,
16338
16327
  onOrderChange: props.onOrderChange,
@@ -19416,11 +19405,14 @@ function useSpansWebSocket(options) {
19416
19405
 
19417
19406
  // src/hooks/use-spans.ts
19418
19407
  var PAGE_SIZE = 100;
19408
+ var NEW_SPAN_HIGHLIGHT_WINDOW_MS = 5e3;
19419
19409
  var useSpans = () => {
19420
19410
  const api = useAppInspectorApi();
19421
19411
  const { onWsClose, onWsOpen, status, wsEnabled } = useAppInspectorStatus();
19422
19412
  const { addPage, clear: clearCompute, result: computeResult, retryWorker, setFilters: setComputeFilters, workerError } = useSpansCompute();
19423
19413
  const spanMapRef = useRef11(/* @__PURE__ */ new Map());
19414
+ const newSpanIdsRef = useRef11(/* @__PURE__ */ new Set());
19415
+ const caughtUpRef = useRef11(false);
19424
19416
  const [filters, setFiltersState] = useState12(EMPTY_FILTERS);
19425
19417
  const setFilters = useCallback8((next) => {
19426
19418
  setFiltersState(next);
@@ -19450,6 +19442,8 @@ var useSpans = () => {
19450
19442
  }, []);
19451
19443
  const resetCorpus = useCallback8(() => {
19452
19444
  spanMapRef.current.clear();
19445
+ newSpanIdsRef.current.clear();
19446
+ caughtUpRef.current = false;
19453
19447
  clearCompute();
19454
19448
  }, [clearCompute]);
19455
19449
  const [epoch, setEpoch] = useState12();
@@ -19536,6 +19530,7 @@ var useSpans = () => {
19536
19530
  setFetchError(void 0);
19537
19531
  setHasMoreBackward(hasMoreBackward2);
19538
19532
  setHasMoreForward(hasMoreForward2);
19533
+ if (!hasMoreForward2) caughtUpRef.current = true;
19539
19534
  setSpansLoaded(true);
19540
19535
  },
19541
19536
  onError: (error) => {
@@ -19546,6 +19541,11 @@ var useSpans = () => {
19546
19541
  // Ordering is owned by the compute backend, so no main-thread sortComparator is needed.
19547
19542
  onPageFetched: (direction, items) => {
19548
19543
  for (const span of items) {
19544
+ if (direction === "forward" && caughtUpRef.current && !spanMapRef.current.has(span.span_id)) {
19545
+ const { span_id: spanId } = span;
19546
+ newSpanIdsRef.current.add(spanId);
19547
+ setTimeout(() => newSpanIdsRef.current.delete(spanId), NEW_SPAN_HIGHLIGHT_WINDOW_MS);
19548
+ }
19549
19549
  spanMapRef.current.set(span.span_id, span);
19550
19550
  }
19551
19551
  addPage(direction, items.map((span) => toSpanFilterProjection(span)));
@@ -19623,6 +19623,7 @@ var useSpans = () => {
19623
19623
  const spanMap = spanMapRef.current;
19624
19624
  return computeResult.orderedFilteredIds.map((id2) => spanMap.get(id2)).filter((span) => span !== void 0);
19625
19625
  }, [computeResult, spansLoaded]);
19626
+ const newSpanIds = newSpanIdsRef.current;
19626
19627
  return {
19627
19628
  clearFetchError,
19628
19629
  clearingSpans,
@@ -19642,6 +19643,7 @@ var useSpans = () => {
19642
19643
  hasMoreBackward,
19643
19644
  hasMoreForward,
19644
19645
  licenseLimit,
19646
+ newSpanIds,
19645
19647
  producerValues: computeResult.producerValues,
19646
19648
  retryWorker,
19647
19649
  search,
@@ -33050,6 +33052,7 @@ var SpansListPage = () => {
33050
33052
  hasMoreBackward,
33051
33053
  hasMoreForward,
33052
33054
  licenseLimit,
33055
+ newSpanIds,
33053
33056
  producerValues,
33054
33057
  retryWorker,
33055
33058
  search,
@@ -33191,6 +33194,7 @@ var SpansListPage = () => {
33191
33194
  hasMoreBackward,
33192
33195
  hasMoreForward,
33193
33196
  licenseLimit,
33197
+ newSpanIds,
33194
33198
  onClearSpans: clearSpansSync,
33195
33199
  onFetchForward: fetchForward,
33196
33200
  onFiltersChange: setFilters,