@mastra/playground-ui 64.0.0-alpha.7 → 64.0.0-alpha.8
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/DataList.cjs.js +17 -15
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +5 -4
- package/dist/components/DataList.es.js.map +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -5
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +2 -5
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/Section.cjs.js +1 -1
- package/dist/components/Section.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/data-list-DUfXIhyC.cjs +142 -0
- package/dist/data-list-DUfXIhyC.cjs.map +1 -0
- package/dist/data-list-DXQY_iQW.js +138 -0
- package/dist/data-list-DXQY_iQW.js.map +1 -0
- package/dist/{data-list-skeleton-CGKlcoiI.js → data-list-skeleton-B_SXAeE0.js} +2 -2
- package/dist/{data-list-skeleton-CGKlcoiI.js.map → data-list-skeleton-B_SXAeE0.js.map} +1 -1
- package/dist/{data-list-skeleton-DGMTqeNP.cjs → data-list-skeleton-BqC9Gggi.cjs} +6 -6
- package/dist/{data-list-skeleton-DGMTqeNP.cjs.map → data-list-skeleton-BqC9Gggi.cjs.map} +1 -1
- package/dist/data-list-spacer-ByA4ce2a.js +209 -0
- package/dist/data-list-spacer-ByA4ce2a.js.map +1 -0
- package/dist/data-list-spacer-tQaBaum4.cjs +218 -0
- package/dist/data-list-spacer-tQaBaum4.cjs.map +1 -0
- package/dist/{data-list-ecHsw-zr.cjs → data-list-top-ByT2Mo77.cjs} +13 -339
- package/dist/data-list-top-ByT2Mo77.cjs.map +1 -0
- package/dist/{data-list-DdCZZctL.js → data-list-top-DSr_ocKA.js} +5 -332
- package/dist/data-list-top-DSr_ocKA.js.map +1 -0
- package/dist/{date-time-range-picker-B3qORFfa.cjs → date-time-range-picker-BjQVCVUM.cjs} +12 -3
- package/dist/date-time-range-picker-BjQVCVUM.cjs.map +1 -0
- package/dist/{date-time-range-picker-CmtCmIrU.js → date-time-range-picker-D-EECKzz.js} +13 -4
- package/dist/date-time-range-picker-D-EECKzz.js.map +1 -0
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +0 -2
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +0 -2
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -3
- package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +2 -3
- package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +1 -1
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +1 -1
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -2
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +1 -2
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.cjs.js +0 -2
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +0 -2
- package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +5 -4
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +4 -3
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -4
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -4
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -3
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +1 -3
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +1 -3
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/{logs-data-list-DBJINzIL.js → logs-data-list-CoER2Hst.js} +3 -2
- package/dist/{logs-data-list-DBJINzIL.js.map → logs-data-list-CoER2Hst.js.map} +1 -1
- package/dist/{logs-data-list-IWZgMCKG.cjs → logs-data-list-DRR6cMgl.cjs} +22 -21
- package/dist/{logs-data-list-IWZgMCKG.cjs.map → logs-data-list-DRR6cMgl.cjs.map} +1 -1
- package/dist/new/settings.cjs.js +1 -1
- package/dist/new/settings.es.js +1 -1
- package/dist/{section-BPhTrzbk.cjs → section-CctlZIXp.cjs} +2 -2
- package/dist/{section-BPhTrzbk.cjs.map → section-CctlZIXp.cjs.map} +1 -1
- package/dist/{section-87-fGU29.js → section-D0hKTVXt.js} +2 -2
- package/dist/{section-87-fGU29.js.map → section-D0hKTVXt.js.map} +1 -1
- package/dist/{settings-row-DdLpZXM4.cjs → settings-row-m_4gDCwS.cjs} +16 -4
- package/dist/settings-row-m_4gDCwS.cjs.map +1 -0
- package/dist/{settings-row-Cm7IBGvT.js → settings-row-yuQjwWTl.js} +16 -4
- package/dist/settings-row-yuQjwWTl.js.map +1 -0
- package/dist/{side-dialog-qfaOhtjK.cjs → side-dialog-BzULMBaH.cjs} +2 -2
- package/dist/{side-dialog-qfaOhtjK.cjs.map → side-dialog-BzULMBaH.cjs.map} +1 -1
- package/dist/{side-dialog-QTPa70zU.js → side-dialog-bm8NPDXy.js} +2 -2
- package/dist/{side-dialog-QTPa70zU.js.map → side-dialog-bm8NPDXy.js.map} +1 -1
- package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +1 -1
- package/dist/src/ds/components/DateTimeRangePicker/custom-range-editor.d.ts +3 -1
- package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +3 -1
- package/dist/src/ds/new/settings/index.d.ts +1 -1
- package/dist/src/ds/new/settings/settings-container.d.ts +5 -1
- package/dist/style.css +34 -0
- package/dist/{traces-data-list-BgloVIVi.js → traces-data-list-0GcqZUbe.js} +4 -2
- package/dist/{traces-data-list-BgloVIVi.js.map → traces-data-list-0GcqZUbe.js.map} +1 -1
- package/dist/{traces-data-list-CHREkLv0.cjs → traces-data-list-B0-fbEpk.cjs} +19 -17
- package/dist/{traces-data-list-CHREkLv0.cjs.map → traces-data-list-B0-fbEpk.cjs.map} +1 -1
- package/package.json +6 -6
- package/dist/data-list-DdCZZctL.js.map +0 -1
- package/dist/data-list-ecHsw-zr.cjs.map +0 -1
- package/dist/date-time-range-picker-B3qORFfa.cjs.map +0 -1
- package/dist/date-time-range-picker-CmtCmIrU.js.map +0 -1
- package/dist/settings-row-Cm7IBGvT.js.map +0 -1
- package/dist/settings-row-DdLpZXM4.cjs.map +0 -1
|
@@ -6,8 +6,6 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
const scores = require('@mastra/react/hooks/scores');
|
|
7
7
|
const React = require('react');
|
|
8
8
|
const domains_scores_components_spanScoring = require('../../scores/components/span-scoring.cjs.js');
|
|
9
|
-
require('../../../data-list-ecHsw-zr.cjs');
|
|
10
|
-
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
11
9
|
require('@base-ui/react/use-render');
|
|
12
10
|
require('lucide-react');
|
|
13
11
|
require('@mastra/core/utils/safe-stringify');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-data-panel.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel.tsx"],"sourcesContent":["import { useScorers } from '@mastra/react/hooks/scores';\nimport { useState, type ComponentProps } from 'react';\nimport { SpanScoring } from '@/domains/scores';\nimport { TraceDataPanelView, type TraceSideView } from '@/domains/traces/components/trace-data-panel-view';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\n\ntype TraceDataPanelProps = Omit<\n ComponentProps<typeof TraceDataPanelView>,\n 'sideView' | 'onSideViewChange' | 'onEvaluateTrace'\n>;\n\n/**\n * Owns the trace panel's side column view so scoring can land on \"Scores\". Mount it with a\n * `key` on the trace (and anchor span) so a view picked on a previous trace never leaks into the next one.\n */\nexport function TraceDataPanel(props: TraceDataPanelProps) {\n const [sideView, setSideView] = useState<TraceSideView>();\n const [isScoringOpen, setIsScoringOpen] = useState(false);\n const { data: scorers, isLoading: isLoadingScorers } = useScorers();\n const rootSpan = props.anchorSpanId\n ? props.spans?.find(span => span.spanId === props.anchorSpanId)\n : props.spans?.find(span => span.parentSpanId == null);\n\n return (\n <>\n <TraceDataPanelView\n {...props}\n onEvaluateTrace={() => setIsScoringOpen(true)}\n sideView={sideView}\n onSideViewChange={setSideView}\n />\n <Dialog open={isScoringOpen} onOpenChange={setIsScoringOpen}>\n <DialogContent size=\"lg\">\n <DialogHeader>\n <DialogTitle>Score trace</DialogTitle>\n </DialogHeader>\n\n {isScoringOpen && rootSpan && (\n <SpanScoring\n traceId={props.traceId}\n spanId={rootSpan.spanId}\n entityType={rootSpan.entityType === 'agent' ? 'Agent' : 'Workflow'}\n isTopLevelSpan={!rootSpan.parentSpanId}\n scorers={scorers}\n isLoadingScorers={isLoadingScorers}\n onSuccess={() => {\n setIsScoringOpen(false);\n setSideView('scores');\n }}\n />\n )}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"names":["useState","useScorers","jsxs","Fragment","jsx","TraceDataPanelView","Dialog","DialogContent","DialogHeader","DialogTitle","SpanScoring"],"mappings":"
|
|
1
|
+
{"version":3,"file":"trace-data-panel.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel.tsx"],"sourcesContent":["import { useScorers } from '@mastra/react/hooks/scores';\nimport { useState, type ComponentProps } from 'react';\nimport { SpanScoring } from '@/domains/scores';\nimport { TraceDataPanelView, type TraceSideView } from '@/domains/traces/components/trace-data-panel-view';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\n\ntype TraceDataPanelProps = Omit<\n ComponentProps<typeof TraceDataPanelView>,\n 'sideView' | 'onSideViewChange' | 'onEvaluateTrace'\n>;\n\n/**\n * Owns the trace panel's side column view so scoring can land on \"Scores\". Mount it with a\n * `key` on the trace (and anchor span) so a view picked on a previous trace never leaks into the next one.\n */\nexport function TraceDataPanel(props: TraceDataPanelProps) {\n const [sideView, setSideView] = useState<TraceSideView>();\n const [isScoringOpen, setIsScoringOpen] = useState(false);\n const { data: scorers, isLoading: isLoadingScorers } = useScorers();\n const rootSpan = props.anchorSpanId\n ? props.spans?.find(span => span.spanId === props.anchorSpanId)\n : props.spans?.find(span => span.parentSpanId == null);\n\n return (\n <>\n <TraceDataPanelView\n {...props}\n onEvaluateTrace={() => setIsScoringOpen(true)}\n sideView={sideView}\n onSideViewChange={setSideView}\n />\n <Dialog open={isScoringOpen} onOpenChange={setIsScoringOpen}>\n <DialogContent size=\"lg\">\n <DialogHeader>\n <DialogTitle>Score trace</DialogTitle>\n </DialogHeader>\n\n {isScoringOpen && rootSpan && (\n <SpanScoring\n traceId={props.traceId}\n spanId={rootSpan.spanId}\n entityType={rootSpan.entityType === 'agent' ? 'Agent' : 'Workflow'}\n isTopLevelSpan={!rootSpan.parentSpanId}\n scorers={scorers}\n isLoadingScorers={isLoadingScorers}\n onSuccess={() => {\n setIsScoringOpen(false);\n setSideView('scores');\n }}\n />\n )}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"names":["useState","useScorers","jsxs","Fragment","jsx","TraceDataPanelView","Dialog","DialogContent","DialogHeader","DialogTitle","SpanScoring"],"mappings":";;;;;;;;;;;;;;;;;;;AAeO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,cAAA,EAAwB;AACxD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,KAAK,CAAA;AACxD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,gBAAA,KAAqBC,iBAAA,EAAW;AAClE,EAAA,MAAM,WAAW,KAAA,CAAM,YAAA,GACnB,MAAM,KAAA,EAAO,IAAA,CAAK,UAAQ,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,YAAY,IAC5D,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAEvD,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACC,+DAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,eAAA,EAAiB,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,QAC5C,QAAA;AAAA,QACA,gBAAA,EAAkB;AAAA;AAAA,KACpB;AAAA,oBACAD,cAAA,CAACE,iBAAO,IAAA,EAAM,aAAA,EAAe,cAAc,gBAAA,EACzC,QAAA,kBAAAJ,eAAA,CAACK,oBAAA,EAAA,EAAc,IAAA,EAAK,IAAA,EAClB,QAAA,EAAA;AAAA,sBAAAH,cAAA,CAACI,mBAAA,EAAA,EACC,QAAA,kBAAAJ,cAAA,CAACK,kBAAA,EAAA,EAAY,QAAA,EAAA,aAAA,EAAW,CAAA,EAC1B,CAAA;AAAA,MAEC,iBAAiB,QAAA,oBAChBL,cAAA;AAAA,QAACM,iDAAA;AAAA,QAAA;AAAA,UACC,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,UAAA,EAAY,QAAA,CAAS,UAAA,KAAe,OAAA,GAAU,OAAA,GAAU,UAAA;AAAA,UACxD,cAAA,EAAgB,CAAC,QAAA,CAAS,YAAA;AAAA,UAC1B,OAAA;AAAA,UACA,gBAAA;AAAA,UACA,WAAW,MAAM;AACf,YAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,YAAA,WAAA,CAAY,QAAQ,CAAA;AAAA,UACtB;AAAA;AAAA;AACF,KAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -2,8 +2,6 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useScorers } from '@mastra/react/hooks/scores';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { SpanScoring } from '../../scores/components/span-scoring.es.js';
|
|
5
|
-
import '../../../data-list-DdCZZctL.js';
|
|
6
|
-
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
7
5
|
import '@base-ui/react/use-render';
|
|
8
6
|
import 'lucide-react';
|
|
9
7
|
import '@mastra/core/utils/safe-stringify';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-data-panel.es.js","sources":["../../../../src/domains/traces/components/trace-data-panel.tsx"],"sourcesContent":["import { useScorers } from '@mastra/react/hooks/scores';\nimport { useState, type ComponentProps } from 'react';\nimport { SpanScoring } from '@/domains/scores';\nimport { TraceDataPanelView, type TraceSideView } from '@/domains/traces/components/trace-data-panel-view';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\n\ntype TraceDataPanelProps = Omit<\n ComponentProps<typeof TraceDataPanelView>,\n 'sideView' | 'onSideViewChange' | 'onEvaluateTrace'\n>;\n\n/**\n * Owns the trace panel's side column view so scoring can land on \"Scores\". Mount it with a\n * `key` on the trace (and anchor span) so a view picked on a previous trace never leaks into the next one.\n */\nexport function TraceDataPanel(props: TraceDataPanelProps) {\n const [sideView, setSideView] = useState<TraceSideView>();\n const [isScoringOpen, setIsScoringOpen] = useState(false);\n const { data: scorers, isLoading: isLoadingScorers } = useScorers();\n const rootSpan = props.anchorSpanId\n ? props.spans?.find(span => span.spanId === props.anchorSpanId)\n : props.spans?.find(span => span.parentSpanId == null);\n\n return (\n <>\n <TraceDataPanelView\n {...props}\n onEvaluateTrace={() => setIsScoringOpen(true)}\n sideView={sideView}\n onSideViewChange={setSideView}\n />\n <Dialog open={isScoringOpen} onOpenChange={setIsScoringOpen}>\n <DialogContent size=\"lg\">\n <DialogHeader>\n <DialogTitle>Score trace</DialogTitle>\n </DialogHeader>\n\n {isScoringOpen && rootSpan && (\n <SpanScoring\n traceId={props.traceId}\n spanId={rootSpan.spanId}\n entityType={rootSpan.entityType === 'agent' ? 'Agent' : 'Workflow'}\n isTopLevelSpan={!rootSpan.parentSpanId}\n scorers={scorers}\n isLoadingScorers={isLoadingScorers}\n onSuccess={() => {\n setIsScoringOpen(false);\n setSideView('scores');\n }}\n />\n )}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trace-data-panel.es.js","sources":["../../../../src/domains/traces/components/trace-data-panel.tsx"],"sourcesContent":["import { useScorers } from '@mastra/react/hooks/scores';\nimport { useState, type ComponentProps } from 'react';\nimport { SpanScoring } from '@/domains/scores';\nimport { TraceDataPanelView, type TraceSideView } from '@/domains/traces/components/trace-data-panel-view';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\n\ntype TraceDataPanelProps = Omit<\n ComponentProps<typeof TraceDataPanelView>,\n 'sideView' | 'onSideViewChange' | 'onEvaluateTrace'\n>;\n\n/**\n * Owns the trace panel's side column view so scoring can land on \"Scores\". Mount it with a\n * `key` on the trace (and anchor span) so a view picked on a previous trace never leaks into the next one.\n */\nexport function TraceDataPanel(props: TraceDataPanelProps) {\n const [sideView, setSideView] = useState<TraceSideView>();\n const [isScoringOpen, setIsScoringOpen] = useState(false);\n const { data: scorers, isLoading: isLoadingScorers } = useScorers();\n const rootSpan = props.anchorSpanId\n ? props.spans?.find(span => span.spanId === props.anchorSpanId)\n : props.spans?.find(span => span.parentSpanId == null);\n\n return (\n <>\n <TraceDataPanelView\n {...props}\n onEvaluateTrace={() => setIsScoringOpen(true)}\n sideView={sideView}\n onSideViewChange={setSideView}\n />\n <Dialog open={isScoringOpen} onOpenChange={setIsScoringOpen}>\n <DialogContent size=\"lg\">\n <DialogHeader>\n <DialogTitle>Score trace</DialogTitle>\n </DialogHeader>\n\n {isScoringOpen && rootSpan && (\n <SpanScoring\n traceId={props.traceId}\n spanId={rootSpan.spanId}\n entityType={rootSpan.entityType === 'agent' ? 'Agent' : 'Workflow'}\n isTopLevelSpan={!rootSpan.parentSpanId}\n scorers={scorers}\n isLoadingScorers={isLoadingScorers}\n onSuccess={() => {\n setIsScoringOpen(false);\n setSideView('scores');\n }}\n />\n )}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAeO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,EAAwB;AACxD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,gBAAA,KAAqB,UAAA,EAAW;AAClE,EAAA,MAAM,WAAW,KAAA,CAAM,YAAA,GACnB,MAAM,KAAA,EAAO,IAAA,CAAK,UAAQ,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,YAAY,IAC5D,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAEvD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,eAAA,EAAiB,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,QAC5C,QAAA;AAAA,QACA,gBAAA,EAAkB;AAAA;AAAA,KACpB;AAAA,oBACA,GAAA,CAAC,UAAO,IAAA,EAAM,aAAA,EAAe,cAAc,gBAAA,EACzC,QAAA,kBAAA,IAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAK,IAAA,EAClB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,YAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAA,aAAA,EAAW,CAAA,EAC1B,CAAA;AAAA,MAEC,iBAAiB,QAAA,oBAChB,GAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,UAAA,EAAY,QAAA,CAAS,UAAA,KAAe,OAAA,GAAU,OAAA,GAAU,UAAA;AAAA,UACxD,cAAA,EAAgB,CAAC,QAAA,CAAS,YAAA;AAAA,UAC1B,OAAA;AAAA,UACA,gBAAA;AAAA,UACA,WAAW,MAAM;AACf,YAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,YAAA,WAAA,CAAY,QAAQ,CAAA;AAAA,UACtB;AAAA;AAAA;AACF,KAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const domains_traces_traceQueryFilters = require('../../../trace-filters-Dz4oj8yV.cjs');
|
|
7
|
-
const dateTimeRangePicker = require('../../../date-time-range-picker-
|
|
7
|
+
const dateTimeRangePicker = require('../../../date-time-range-picker-BjQVCVUM.cjs');
|
|
8
8
|
const filterBarChip = require('../../../filter-bar-chip-BJJ6ytJ4.cjs');
|
|
9
9
|
const utils_cn = require('../../../cn-DlOJCxrS.cjs');
|
|
10
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-time-range-chip.cjs.js","sources":["../../../../src/domains/traces/components/trace-time-range-chip.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport type { KeyboardEvent } from 'react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../trace-filters';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker';\nimport {\n FilterBarChip,\n FilterBarFieldLabel,\n editableSegmentClass,\n fieldSegmentAccentStyle,\n segmentClass,\n} from '@/ds/components/FilterBar/filter-bar-chip';\nimport { useFilterBarContext } from '@/ds/components/FilterBar/filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { cn } from '@/lib/utils';\n\nexport const TRACE_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic FilterBar field backing the always-present time-range chip. Hidden from the\n * input's field step (the chip cannot be added twice) but registered so the chip resolves\n * its label and takes part in keyboard navigation.\n */\nexport const TRACE_TIME_RANGE_FIELD: FilterBarField = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: traceFilterFieldIcon(TRACE_TIME_RANGE_FIELD_ID),\n color: traceFilterFieldColor(TRACE_TIME_RANGE_FIELD_ID),\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const TRACE_TIME_RANGE_ITEM: FilterBarItem = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n fieldId: TRACE_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type TraceTimeRangeChipProps = Pick<\n DateTimeRangePickerProps,\n | 'preset'\n | 'onPresetChange'\n | 'dateFrom'\n | 'dateTo'\n | 'onDateChange'\n | 'onDateRangeChange'\n | 'disabled'\n | 'maxRangeMs'\n | 'presets'\n>;\n\nconst isSegment = (target: EventTarget | null) =>\n target instanceof HTMLElement && target.hasAttribute('data-filter-bar-segment');\n\n/**\n * The trace list's date range rendered as a FilterBar chip: `Time <preset>`. Always\n * present and non-removable; the value segment opens the regular DateTimeRangePicker\n * menu/popover.\n */\nexport function TraceTimeRangeChip(props: TraceTimeRangeChipProps) {\n const ctx = useFilterBarContext();\n return (\n <FilterBarChip item={TRACE_TIME_RANGE_ITEM} removable={false}>\n <span className={cn(segmentClass, 'text-foreground')} style={fieldSegmentAccentStyle(TRACE_TIME_RANGE_FIELD)}>\n <FilterBarFieldLabel field={TRACE_TIME_RANGE_FIELD} />\n </span>\n {/* The picker popup is portaled but bubbles React events through here — keep its\n keystrokes from reaching the chip's arrow-key navigation. */}\n <div\n className=\"contents\"\n onKeyDown={(event: KeyboardEvent<HTMLDivElement>) => {\n if (!isSegment(event.target)) event.stopPropagation();\n }}\n >\n <DateTimeRangePicker\n {...props}\n renderTrigger={({ label, disabled }) => (\n <button\n type=\"button\"\n ref={el => ctx.registerSegment(TRACE_TIME_RANGE_ITEM.id, 'value', el)}\n data-filter-bar-segment=\"\"\n disabled={disabled}\n aria-label={`Value: ${label}`}\n title={label}\n className={editableSegmentClass}\n >\n <span className=\"truncate\">{label}</span>\n </button>\n )}\n />\n </div>\n </FilterBarChip>\n );\n}\n"],"names":["traceFilterFieldIcon","traceFilterFieldColor","useFilterBarContext","jsxs","FilterBarChip","jsx","cn","segmentClass","fieldSegmentAccentStyle","FilterBarFieldLabel","DateTimeRangePicker","editableSegmentClass"],"mappings":";;;;;;;;;;AAgBO,MAAM,yBAAA,GAA4B;AAOlC,MAAM,sBAAA,GAAyC;AAAA,EACpD,EAAA,EAAI,yBAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAMA,sDAAqB,yBAAyB,CAAA;AAAA,EACpD,KAAA,EAAOC,uDAA+C,CAAA;AAAA,EACtD,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,EAChB,MAAA,EAAQ;AACV;AAEO,MAAM,qBAAA,GAAuC;AAAA,EAClD,EAAA,EAAI,yBAAA;AAAA,EACJ,OAAA,EAAS,yBAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,KAAA,EAAO;AACT;
|
|
1
|
+
{"version":3,"file":"trace-time-range-chip.cjs.js","sources":["../../../../src/domains/traces/components/trace-time-range-chip.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport type { KeyboardEvent } from 'react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../trace-filters';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker';\nimport {\n FilterBarChip,\n FilterBarFieldLabel,\n editableSegmentClass,\n fieldSegmentAccentStyle,\n segmentClass,\n} from '@/ds/components/FilterBar/filter-bar-chip';\nimport { useFilterBarContext } from '@/ds/components/FilterBar/filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { cn } from '@/lib/utils';\n\nexport const TRACE_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic FilterBar field backing the always-present time-range chip. Hidden from the\n * input's field step (the chip cannot be added twice) but registered so the chip resolves\n * its label and takes part in keyboard navigation.\n */\nexport const TRACE_TIME_RANGE_FIELD: FilterBarField = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: traceFilterFieldIcon(TRACE_TIME_RANGE_FIELD_ID),\n color: traceFilterFieldColor(TRACE_TIME_RANGE_FIELD_ID),\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const TRACE_TIME_RANGE_ITEM: FilterBarItem = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n fieldId: TRACE_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type TraceTimeRangeChipProps = Pick<\n DateTimeRangePickerProps,\n | 'preset'\n | 'onPresetChange'\n | 'dateFrom'\n | 'dateTo'\n | 'onDateChange'\n | 'onDateRangeChange'\n | 'disabled'\n | 'maxRangeMs'\n | 'minDate'\n | 'presets'\n>;\n\nconst isSegment = (target: EventTarget | null) =>\n target instanceof HTMLElement && target.hasAttribute('data-filter-bar-segment');\n\n/**\n * The trace list's date range rendered as a FilterBar chip: `Time <preset>`. Always\n * present and non-removable; the value segment opens the regular DateTimeRangePicker\n * menu/popover.\n */\nexport function TraceTimeRangeChip(props: TraceTimeRangeChipProps) {\n const ctx = useFilterBarContext();\n return (\n <FilterBarChip item={TRACE_TIME_RANGE_ITEM} removable={false}>\n <span className={cn(segmentClass, 'text-foreground')} style={fieldSegmentAccentStyle(TRACE_TIME_RANGE_FIELD)}>\n <FilterBarFieldLabel field={TRACE_TIME_RANGE_FIELD} />\n </span>\n {/* The picker popup is portaled but bubbles React events through here — keep its\n keystrokes from reaching the chip's arrow-key navigation. */}\n <div\n className=\"contents\"\n onKeyDown={(event: KeyboardEvent<HTMLDivElement>) => {\n if (!isSegment(event.target)) event.stopPropagation();\n }}\n >\n <DateTimeRangePicker\n {...props}\n renderTrigger={({ label, disabled }) => (\n <button\n type=\"button\"\n ref={el => ctx.registerSegment(TRACE_TIME_RANGE_ITEM.id, 'value', el)}\n data-filter-bar-segment=\"\"\n disabled={disabled}\n aria-label={`Value: ${label}`}\n title={label}\n className={editableSegmentClass}\n >\n <span className=\"truncate\">{label}</span>\n </button>\n )}\n />\n </div>\n </FilterBarChip>\n );\n}\n"],"names":["traceFilterFieldIcon","traceFilterFieldColor","useFilterBarContext","jsxs","FilterBarChip","jsx","cn","segmentClass","fieldSegmentAccentStyle","FilterBarFieldLabel","DateTimeRangePicker","editableSegmentClass"],"mappings":";;;;;;;;;;AAgBO,MAAM,yBAAA,GAA4B;AAOlC,MAAM,sBAAA,GAAyC;AAAA,EACpD,EAAA,EAAI,yBAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAMA,sDAAqB,yBAAyB,CAAA;AAAA,EACpD,KAAA,EAAOC,uDAA+C,CAAA;AAAA,EACtD,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,EAChB,MAAA,EAAQ;AACV;AAEO,MAAM,qBAAA,GAAuC;AAAA,EAClD,EAAA,EAAI,yBAAA;AAAA,EACJ,OAAA,EAAS,yBAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,KAAA,EAAO;AACT;AAgBA,MAAM,YAAY,CAAC,MAAA,KACjB,kBAAkB,WAAA,IAAe,MAAA,CAAO,aAAa,yBAAyB,CAAA;AAOzE,SAAS,mBAAmB,KAAA,EAAgC;AACjE,EAAA,MAAM,MAAMC,iCAAA,EAAoB;AAChC,EAAA,uBACEC,eAAA,CAACC,2BAAA,EAAA,EAAc,IAAA,EAAM,qBAAA,EAAuB,WAAW,KAAA,EACrD,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWC,WAAA,CAAGC,0BAAA,EAAc,iBAAiB,CAAA,EAAG,KAAA,EAAOC,qCAAA,CAAwB,sBAAsB,CAAA,EACzG,QAAA,kBAAAH,cAAA,CAACI,iCAAA,EAAA,EAAoB,KAAA,EAAO,wBAAwB,CAAA,EACtD,CAAA;AAAA,oBAGAJ,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAW,CAAC,KAAA,KAAyC;AACnD,UAAA,IAAI,CAAC,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA,QAAS,eAAA,EAAgB;AAAA,QACtD,CAAA;AAAA,QAEA,QAAA,kBAAAA,cAAA;AAAA,UAACK,uCAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACJ,aAAA,EAAe,CAAC,EAAE,KAAA,EAAO,UAAS,qBAChCL,cAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,KAAK,CAAA,EAAA,KAAM,GAAA,CAAI,gBAAgB,qBAAA,CAAsB,EAAA,EAAI,SAAS,EAAE,CAAA;AAAA,gBACpE,yBAAA,EAAwB,EAAA;AAAA,gBACxB,QAAA;AAAA,gBACA,YAAA,EAAY,UAAU,KAAK,CAAA,CAAA;AAAA,gBAC3B,KAAA,EAAO,KAAA;AAAA,gBACP,SAAA,EAAWM,kCAAA;AAAA,gBAEX,QAAA,kBAAAN,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AACpC;AAAA;AAEJ;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { V as traceFilterFieldColor, W as traceFilterFieldIcon } from '../../../trace-filters-C91h9X86.js';
|
|
3
|
-
import { D as DateTimeRangePicker } from '../../../date-time-range-picker-
|
|
3
|
+
import { D as DateTimeRangePicker } from '../../../date-time-range-picker-D-EECKzz.js';
|
|
4
4
|
import { u as useFilterBarContext, F as FilterBarChip, a as FilterBarFieldLabel, f as fieldSegmentAccentStyle, s as segmentClass, e as editableSegmentClass } from '../../../filter-bar-chip-BAqmNIeE.js';
|
|
5
5
|
import { c as cn } from '../../../cn-CQUhN5Jx.js';
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-time-range-chip.es.js","sources":["../../../../src/domains/traces/components/trace-time-range-chip.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport type { KeyboardEvent } from 'react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../trace-filters';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker';\nimport {\n FilterBarChip,\n FilterBarFieldLabel,\n editableSegmentClass,\n fieldSegmentAccentStyle,\n segmentClass,\n} from '@/ds/components/FilterBar/filter-bar-chip';\nimport { useFilterBarContext } from '@/ds/components/FilterBar/filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { cn } from '@/lib/utils';\n\nexport const TRACE_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic FilterBar field backing the always-present time-range chip. Hidden from the\n * input's field step (the chip cannot be added twice) but registered so the chip resolves\n * its label and takes part in keyboard navigation.\n */\nexport const TRACE_TIME_RANGE_FIELD: FilterBarField = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: traceFilterFieldIcon(TRACE_TIME_RANGE_FIELD_ID),\n color: traceFilterFieldColor(TRACE_TIME_RANGE_FIELD_ID),\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const TRACE_TIME_RANGE_ITEM: FilterBarItem = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n fieldId: TRACE_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type TraceTimeRangeChipProps = Pick<\n DateTimeRangePickerProps,\n | 'preset'\n | 'onPresetChange'\n | 'dateFrom'\n | 'dateTo'\n | 'onDateChange'\n | 'onDateRangeChange'\n | 'disabled'\n | 'maxRangeMs'\n | 'presets'\n>;\n\nconst isSegment = (target: EventTarget | null) =>\n target instanceof HTMLElement && target.hasAttribute('data-filter-bar-segment');\n\n/**\n * The trace list's date range rendered as a FilterBar chip: `Time <preset>`. Always\n * present and non-removable; the value segment opens the regular DateTimeRangePicker\n * menu/popover.\n */\nexport function TraceTimeRangeChip(props: TraceTimeRangeChipProps) {\n const ctx = useFilterBarContext();\n return (\n <FilterBarChip item={TRACE_TIME_RANGE_ITEM} removable={false}>\n <span className={cn(segmentClass, 'text-foreground')} style={fieldSegmentAccentStyle(TRACE_TIME_RANGE_FIELD)}>\n <FilterBarFieldLabel field={TRACE_TIME_RANGE_FIELD} />\n </span>\n {/* The picker popup is portaled but bubbles React events through here — keep its\n keystrokes from reaching the chip's arrow-key navigation. */}\n <div\n className=\"contents\"\n onKeyDown={(event: KeyboardEvent<HTMLDivElement>) => {\n if (!isSegment(event.target)) event.stopPropagation();\n }}\n >\n <DateTimeRangePicker\n {...props}\n renderTrigger={({ label, disabled }) => (\n <button\n type=\"button\"\n ref={el => ctx.registerSegment(TRACE_TIME_RANGE_ITEM.id, 'value', el)}\n data-filter-bar-segment=\"\"\n disabled={disabled}\n aria-label={`Value: ${label}`}\n title={label}\n className={editableSegmentClass}\n >\n <span className=\"truncate\">{label}</span>\n </button>\n )}\n />\n </div>\n </FilterBarChip>\n );\n}\n"],"names":[],"mappings":";;;;;;AAgBO,MAAM,yBAAA,GAA4B;AAOlC,MAAM,sBAAA,GAAyC;AAAA,EACpD,EAAA,EAAI,yBAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM,qBAAqB,yBAAyB,CAAA;AAAA,EACpD,KAAA,EAAO,sBAA+C,CAAA;AAAA,EACtD,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,EAChB,MAAA,EAAQ;AACV;AAEO,MAAM,qBAAA,GAAuC;AAAA,EAClD,EAAA,EAAI,yBAAA;AAAA,EACJ,OAAA,EAAS,yBAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,KAAA,EAAO;AACT;
|
|
1
|
+
{"version":3,"file":"trace-time-range-chip.es.js","sources":["../../../../src/domains/traces/components/trace-time-range-chip.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport type { KeyboardEvent } from 'react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../trace-filters';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker';\nimport {\n FilterBarChip,\n FilterBarFieldLabel,\n editableSegmentClass,\n fieldSegmentAccentStyle,\n segmentClass,\n} from '@/ds/components/FilterBar/filter-bar-chip';\nimport { useFilterBarContext } from '@/ds/components/FilterBar/filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { cn } from '@/lib/utils';\n\nexport const TRACE_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic FilterBar field backing the always-present time-range chip. Hidden from the\n * input's field step (the chip cannot be added twice) but registered so the chip resolves\n * its label and takes part in keyboard navigation.\n */\nexport const TRACE_TIME_RANGE_FIELD: FilterBarField = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: traceFilterFieldIcon(TRACE_TIME_RANGE_FIELD_ID),\n color: traceFilterFieldColor(TRACE_TIME_RANGE_FIELD_ID),\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const TRACE_TIME_RANGE_ITEM: FilterBarItem = {\n id: TRACE_TIME_RANGE_FIELD_ID,\n fieldId: TRACE_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type TraceTimeRangeChipProps = Pick<\n DateTimeRangePickerProps,\n | 'preset'\n | 'onPresetChange'\n | 'dateFrom'\n | 'dateTo'\n | 'onDateChange'\n | 'onDateRangeChange'\n | 'disabled'\n | 'maxRangeMs'\n | 'minDate'\n | 'presets'\n>;\n\nconst isSegment = (target: EventTarget | null) =>\n target instanceof HTMLElement && target.hasAttribute('data-filter-bar-segment');\n\n/**\n * The trace list's date range rendered as a FilterBar chip: `Time <preset>`. Always\n * present and non-removable; the value segment opens the regular DateTimeRangePicker\n * menu/popover.\n */\nexport function TraceTimeRangeChip(props: TraceTimeRangeChipProps) {\n const ctx = useFilterBarContext();\n return (\n <FilterBarChip item={TRACE_TIME_RANGE_ITEM} removable={false}>\n <span className={cn(segmentClass, 'text-foreground')} style={fieldSegmentAccentStyle(TRACE_TIME_RANGE_FIELD)}>\n <FilterBarFieldLabel field={TRACE_TIME_RANGE_FIELD} />\n </span>\n {/* The picker popup is portaled but bubbles React events through here — keep its\n keystrokes from reaching the chip's arrow-key navigation. */}\n <div\n className=\"contents\"\n onKeyDown={(event: KeyboardEvent<HTMLDivElement>) => {\n if (!isSegment(event.target)) event.stopPropagation();\n }}\n >\n <DateTimeRangePicker\n {...props}\n renderTrigger={({ label, disabled }) => (\n <button\n type=\"button\"\n ref={el => ctx.registerSegment(TRACE_TIME_RANGE_ITEM.id, 'value', el)}\n data-filter-bar-segment=\"\"\n disabled={disabled}\n aria-label={`Value: ${label}`}\n title={label}\n className={editableSegmentClass}\n >\n <span className=\"truncate\">{label}</span>\n </button>\n )}\n />\n </div>\n </FilterBarChip>\n );\n}\n"],"names":[],"mappings":";;;;;;AAgBO,MAAM,yBAAA,GAA4B;AAOlC,MAAM,sBAAA,GAAyC;AAAA,EACpD,EAAA,EAAI,yBAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM,qBAAqB,yBAAyB,CAAA;AAAA,EACpD,KAAA,EAAO,sBAA+C,CAAA;AAAA,EACtD,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,EAChB,MAAA,EAAQ;AACV;AAEO,MAAM,qBAAA,GAAuC;AAAA,EAClD,EAAA,EAAI,yBAAA;AAAA,EACJ,OAAA,EAAS,yBAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,KAAA,EAAO;AACT;AAgBA,MAAM,YAAY,CAAC,MAAA,KACjB,kBAAkB,WAAA,IAAe,MAAA,CAAO,aAAa,yBAAyB,CAAA;AAOzE,SAAS,mBAAmB,KAAA,EAAgC;AACjE,EAAA,MAAM,MAAM,mBAAA,EAAoB;AAChC,EAAA,uBACE,IAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,qBAAA,EAAuB,WAAW,KAAA,EACrD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,iBAAiB,CAAA,EAAG,KAAA,EAAO,uBAAA,CAAwB,sBAAsB,CAAA,EACzG,QAAA,kBAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAO,wBAAwB,CAAA,EACtD,CAAA;AAAA,oBAGA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAW,CAAC,KAAA,KAAyC;AACnD,UAAA,IAAI,CAAC,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA,QAAS,eAAA,EAAgB;AAAA,QACtD,CAAA;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACJ,aAAA,EAAe,CAAC,EAAE,KAAA,EAAO,UAAS,qBAChC,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,KAAK,CAAA,EAAA,KAAM,GAAA,CAAI,gBAAgB,qBAAA,CAAsB,EAAA,EAAI,SAAS,EAAE,CAAA;AAAA,gBACpE,yBAAA,EAAwB,EAAA;AAAA,gBACxB,QAAA;AAAA,gBACA,YAAA,EAAY,UAAU,KAAK,CAAA,CAAA;AAAA,gBAC3B,KAAA,EAAO,KAAA;AAAA,gBACP,SAAA,EAAW,oBAAA;AAAA,gBAEX,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AACpC;AAAA;AAEJ;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -8,10 +8,11 @@ const lucideReact = require('lucide-react');
|
|
|
8
8
|
const React = require('react');
|
|
9
9
|
const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
|
|
10
10
|
const domains_traces_utils_spanUtils = require('../utils/span-utils.cjs.js');
|
|
11
|
-
const dataList = require('../../../data-list-
|
|
12
|
-
const dataListSkeleton = require('../../../data-list-skeleton-
|
|
13
|
-
const tracesDataList = require('../../../traces-data-list-
|
|
11
|
+
const dataList = require('../../../data-list-DUfXIhyC.cjs');
|
|
12
|
+
const dataListSkeleton = require('../../../data-list-skeleton-BqC9Gggi.cjs');
|
|
13
|
+
const tracesDataList = require('../../../traces-data-list-B0-fbEpk.cjs');
|
|
14
14
|
const useDataListKeyboard = require('../../../use-data-list-keyboard-DF3tLe10.cjs');
|
|
15
|
+
const dataListTop = require('../../../data-list-top-ByT2Mo77.cjs');
|
|
15
16
|
const dropdownMenu = require('../../../dropdown-menu-CsynT1aD.cjs');
|
|
16
17
|
const Txt = require('../../../Txt-CIS2G5Jx.cjs');
|
|
17
18
|
const primitives_transitions = require('../../../primitives/transitions.cjs.js');
|
|
@@ -131,7 +132,7 @@ function TracesListView({
|
|
|
131
132
|
}),
|
|
132
133
|
columnPreferences.metadataKeys.map((key) => /* @__PURE__ */ jsxRuntime.jsx(tracesDataList.TracesDataList.TopCellWithTooltip, { tooltip: key, children: key }, key))
|
|
133
134
|
] }),
|
|
134
|
-
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(dataListSkeleton.DataListSkeletonRows, { columnCount:
|
|
135
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(dataListSkeleton.DataListSkeletonRows, { columnCount: dataListTop.splitColumns(columns).length }) : traces.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
135
136
|
tracesDataList.TracesDataList.NoMatch,
|
|
136
137
|
{
|
|
137
138
|
message: filtersApplied ? "No traces found for applied filters" : "No traces found yet"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-list-view.cjs.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumnKeys,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { getInputPreview, getSpanDurationMs } from '../utils/span-utils';\nimport { DataList, DataListSkeletonRows, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { splitColumns } from '@/ds/components/DataList/shared';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { cn } from '@/lib/utils';\nimport { formatDuration } from '@/utils/duration';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n /** Storage id for the persisted column order. Use a distinct id per page so each keeps its own order. */\n listId?: string;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n listId = 'all-traces',\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n const columnKeys = buildTraceListColumnKeys(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList\n reorderable\n id={listId}\n columns={columns}\n columnKeys={columnKeys}\n fit=\"container\"\n scrollRef={scrollRef}\n className=\"min-w-0\"\n >\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Primitive type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Primitive name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className={cn('flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground', focusRing)}\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <Txt as=\"span\" variant=\"body-sm\" font=\"mono\" className=\"min-w-0 truncate\">\n {value}\n </Txt>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {isLoading ? (\n <DataListSkeletonRows columnCount={splitColumns(columns).length} />\n ) : traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} preset=\"day-time-seconds\" />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.entityName || trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell font=\"mono\">\n {formatDuration(getSpanDurationMs(trace.startedAt, trace.endedAt))}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} preset=\"day-time-seconds\" />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompactNumber(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompactNumber(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompactNumber(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","useRef","buildTraceListColumns","buildTraceListColumnKeys","useVirtualizer","useDataListKeyboard","jsxs","TracesDataList","jsx","hasTraceColumn","TRACE_CUSTOM_COLUMN_LABELS","DropdownMenu","cn","focusRing","ListFilterIcon","Txt","DataListSkeletonRows","splitColumns","Fragment","getInputPreview","DataList","getSpanDurationMs","formatCompactNumber","formatCost","formatTraceMetadataValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traces-list-view.cjs.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumnKeys,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { getInputPreview, getSpanDurationMs } from '../utils/span-utils';\nimport { DataList, DataListSkeletonRows, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { splitColumns } from '@/ds/components/DataList/shared';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { cn } from '@/lib/utils';\nimport { formatDuration } from '@/utils/duration';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n /** Storage id for the persisted column order. Use a distinct id per page so each keeps its own order. */\n listId?: string;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n listId = 'all-traces',\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n const columnKeys = buildTraceListColumnKeys(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList\n reorderable\n id={listId}\n columns={columns}\n columnKeys={columnKeys}\n fit=\"container\"\n scrollRef={scrollRef}\n className=\"min-w-0\"\n >\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Primitive type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Primitive name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className={cn('flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground', focusRing)}\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <Txt as=\"span\" variant=\"body-sm\" font=\"mono\" className=\"min-w-0 truncate\">\n {value}\n </Txt>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {isLoading ? (\n <DataListSkeletonRows columnCount={splitColumns(columns).length} />\n ) : traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} preset=\"day-time-seconds\" />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.entityName || trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell font=\"mono\">\n {formatDuration(getSpanDurationMs(trace.startedAt, trace.endedAt))}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} preset=\"day-time-seconds\" />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompactNumber(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompactNumber(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompactNumber(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","useRef","buildTraceListColumns","buildTraceListColumnKeys","useVirtualizer","useDataListKeyboard","jsxs","TracesDataList","jsx","hasTraceColumn","TRACE_CUSTOM_COLUMN_LABELS","DropdownMenu","cn","focusRing","ListFilterIcon","Txt","DataListSkeletonRows","splitColumns","Fragment","getInputPreview","DataList","getSpanDurationMs","formatCompactNumber","formatCost","formatTraceMetadataValue"],"mappings":"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"}
|
|
@@ -4,10 +4,11 @@ import { ListFilterIcon } from 'lucide-react';
|
|
|
4
4
|
import { useRef } from 'react';
|
|
5
5
|
import { buildTraceListColumns, buildTraceListColumnKeys, hasTraceColumn, DEFAULT_TRACE_COLUMN_PREFERENCES, TRACE_CUSTOM_COLUMN_LABELS, formatTraceMetadataValue } from '../trace-list-columns.es.js';
|
|
6
6
|
import { getInputPreview, getSpanDurationMs } from '../utils/span-utils.es.js';
|
|
7
|
-
import {
|
|
8
|
-
import { a as DataListSkeletonRows } from '../../../data-list-skeleton-
|
|
9
|
-
import { T as TracesDataList } from '../../../traces-data-list-
|
|
7
|
+
import { D as DataList } from '../../../data-list-DXQY_iQW.js';
|
|
8
|
+
import { a as DataListSkeletonRows } from '../../../data-list-skeleton-B_SXAeE0.js';
|
|
9
|
+
import { T as TracesDataList } from '../../../traces-data-list-0GcqZUbe.js';
|
|
10
10
|
import { u as useDataListKeyboard } from '../../../use-data-list-keyboard-DFQr4t38.js';
|
|
11
|
+
import { s as splitColumns } from '../../../data-list-top-DSr_ocKA.js';
|
|
11
12
|
import { D as DropdownMenu } from '../../../dropdown-menu-CQ_48tVI.js';
|
|
12
13
|
import { T as Txt } from '../../../Txt-BtIGLRk1.js';
|
|
13
14
|
import { focusRing } from '../../../primitives/transitions.es.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-list-view.es.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumnKeys,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { getInputPreview, getSpanDurationMs } from '../utils/span-utils';\nimport { DataList, DataListSkeletonRows, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { splitColumns } from '@/ds/components/DataList/shared';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { cn } from '@/lib/utils';\nimport { formatDuration } from '@/utils/duration';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n /** Storage id for the persisted column order. Use a distinct id per page so each keeps its own order. */\n listId?: string;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n listId = 'all-traces',\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n const columnKeys = buildTraceListColumnKeys(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList\n reorderable\n id={listId}\n columns={columns}\n columnKeys={columnKeys}\n fit=\"container\"\n scrollRef={scrollRef}\n className=\"min-w-0\"\n >\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Primitive type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Primitive name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className={cn('flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground', focusRing)}\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <Txt as=\"span\" variant=\"body-sm\" font=\"mono\" className=\"min-w-0 truncate\">\n {value}\n </Txt>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {isLoading ? (\n <DataListSkeletonRows columnCount={splitColumns(columns).length} />\n ) : traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} preset=\"day-time-seconds\" />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.entityName || trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell font=\"mono\">\n {formatDuration(getSpanDurationMs(trace.startedAt, trace.endedAt))}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} preset=\"day-time-seconds\" />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompactNumber(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompactNumber(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompactNumber(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traces-list-view.es.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumnKeys,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { getInputPreview, getSpanDurationMs } from '../utils/span-utils';\nimport { DataList, DataListSkeletonRows, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { splitColumns } from '@/ds/components/DataList/shared';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { cn } from '@/lib/utils';\nimport { formatDuration } from '@/utils/duration';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n /** Storage id for the persisted column order. Use a distinct id per page so each keeps its own order. */\n listId?: string;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n listId = 'all-traces',\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n const columnKeys = buildTraceListColumnKeys(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList\n reorderable\n id={listId}\n columns={columns}\n columnKeys={columnKeys}\n fit=\"container\"\n scrollRef={scrollRef}\n className=\"min-w-0\"\n >\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Primitive type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Primitive name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className={cn('flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground', focusRing)}\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <Txt as=\"span\" variant=\"body-sm\" font=\"mono\" className=\"min-w-0 truncate\">\n {value}\n </Txt>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {isLoading ? (\n <DataListSkeletonRows columnCount={splitColumns(columns).length} />\n ) : traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} preset=\"day-time-seconds\" />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.entityName || trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell font=\"mono\">\n {formatDuration(getSpanDurationMs(trace.startedAt, trace.endedAt))}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} preset=\"day-time-seconds\" />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompactNumber(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompactNumber(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompactNumber(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
|
|
7
|
-
require('../../../data-list-
|
|
8
|
-
const dataListSkeleton = require('../../../data-list-skeleton-DGMTqeNP.cjs');
|
|
9
|
-
require('react');
|
|
10
|
-
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
7
|
+
const dataListSkeleton = require('../../../data-list-skeleton-BqC9Gggi.cjs');
|
|
11
8
|
const skeleton = require('../../../skeleton-lkFwOzqL.cjs');
|
|
12
9
|
|
|
13
10
|
function TracesPageSkeleton({ columnPreferences = domains_traces_traceListColumns.DEFAULT_TRACE_COLUMN_PREFERENCES }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-page-skeleton.cjs.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","buildTraceListColumns","jsxs","jsx","Skeleton","DataListSkeleton"],"mappings":"
|
|
1
|
+
{"version":3,"file":"traces-page-skeleton.cjs.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","buildTraceListColumns","jsxs","jsx","Skeleton","DataListSkeleton"],"mappings":";;;;;;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoBA,gEAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAUC,sDAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnDD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACAD,cAAA,CAACE,iCAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns.es.js';
|
|
3
|
-
import '../../../data-list-
|
|
4
|
-
import { D as DataListSkeleton } from '../../../data-list-skeleton-CGKlcoiI.js';
|
|
5
|
-
import 'react';
|
|
6
|
-
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
3
|
+
import { D as DataListSkeleton } from '../../../data-list-skeleton-B_SXAeE0.js';
|
|
7
4
|
import { S as Skeleton } from '../../../skeleton-Q4fDAXcz.js';
|
|
8
5
|
|
|
9
6
|
function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-page-skeleton.es.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traces-page-skeleton.es.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoB,gCAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAU,sBAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnD,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACA,GAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
|
|
@@ -9,8 +9,8 @@ const React = require('react');
|
|
|
9
9
|
const domains_workflows_components_workflowsList_workflowsSort = require('./workflows-sort.cjs.js');
|
|
10
10
|
const domains_workflows_utils_nestedWorkflows = require('../../utils/nested-workflows.cjs.js');
|
|
11
11
|
const Badge = require('../../../../Badge-63UxysBA.cjs');
|
|
12
|
-
const dataList = require('../../../../data-list-
|
|
13
|
-
const dataListSkeleton = require('../../../../data-list-skeleton-
|
|
12
|
+
const dataList = require('../../../../data-list-DUfXIhyC.cjs');
|
|
13
|
+
const dataListSkeleton = require('../../../../data-list-skeleton-BqC9Gggi.cjs');
|
|
14
14
|
const useDataListKeyboard = require('../../../../use-data-list-keyboard-DF3tLe10.cjs');
|
|
15
15
|
const disclosureChevron = require('../../../../disclosure-chevron-D0KwJ8Zc.cjs');
|
|
16
16
|
const tooltip = require('../../../../tooltip-BppwIf6Y.cjs');
|
|
@@ -5,8 +5,8 @@ import { useState, useMemo, useRef } from 'react';
|
|
|
5
5
|
import { sortWorkflows } from './workflows-sort.es.js';
|
|
6
6
|
import { flattenWorkflowTree } from '../../utils/nested-workflows.es.js';
|
|
7
7
|
import { B as Badge } from '../../../../Badge-CHGARUEW.js';
|
|
8
|
-
import {
|
|
9
|
-
import { D as DataListSkeleton } from '../../../../data-list-skeleton-
|
|
8
|
+
import { D as DataList } from '../../../../data-list-DXQY_iQW.js';
|
|
9
|
+
import { D as DataListSkeleton } from '../../../../data-list-skeleton-B_SXAeE0.js';
|
|
10
10
|
import { u as useDataListKeyboard } from '../../../../use-data-list-keyboard-DFQr4t38.js';
|
|
11
11
|
import { D as DisclosureChevron } from '../../../../disclosure-chevron-qzDAjl55.js';
|
|
12
12
|
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from '../../../../tooltip-DrsXZDAj.js';
|
|
@@ -5,9 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const ee_signals_components_entityIndexModel = require('./entity-index-model.cjs.js');
|
|
7
7
|
const ee_signals_components_entityIndexStatus = require('./entity-index-status.cjs.js');
|
|
8
|
-
const dataList = require('../../../data-list-
|
|
9
|
-
require('react');
|
|
10
|
-
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
8
|
+
const dataList = require('../../../data-list-DUfXIhyC.cjs');
|
|
11
9
|
|
|
12
10
|
const columns = "minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)";
|
|
13
11
|
function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-index-list.cjs.js","sources":["../../../../src/ee/signals/components/entity-index-list.tsx"],"sourcesContent":["import type { ThemeLearningEntity } from '@mastra/client-js';\n\nimport { entityIndexMetadata } from './entity-index-model';\nimport { EntityIndexStatus } from './entity-index-status';\nimport { DataList } from '@/ds/components/DataList';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst columns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface EntityIndexListProps {\n entities: readonly ThemeLearningEntity[];\n hasSearch: boolean;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n LinkComponent: LinkComponent;\n}\n\nexport function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }: EntityIndexListProps) {\n return (\n <section aria-label=\"Trace Intelligence agents\" className=\"min-h-0\">\n <DataList columns={columns} fit=\"container\">\n <DataList.Top>\n <DataList.TopCell>Agent</DataList.TopCell>\n <DataList.TopCell>Traces</DataList.TopCell>\n <DataList.TopCell>Signals set</DataList.TopCell>\n <DataList.TopCell>Status</DataList.TopCell>\n <DataList.TopCell>Updated</DataList.TopCell>\n </DataList.Top>\n {entities.length === 0 && hasSearch ? <DataList.NoMatch message=\"No agents match your search\" /> : null}\n {entities.map(entity => {\n const metadata = entityIndexMetadata(entity);\n const key = `${entity.entityType}:${entity.entityId}`;\n const isAnalyzing = entity.status === 'collecting';\n const cells = (\n <>\n <DataList.Cell className=\"min-w-0 overflow-visible text-left\">\n {isAnalyzing ? null : <span className=\"sr-only\">Open agent {entity.entityId}</span>}\n <span\n aria-hidden={isAnalyzing ? undefined : true}\n className=\"block overflow-clip text-ellipsis whitespace-nowrap\"\n >\n {entity.entityId}\n </span>\n </DataList.Cell>\n <DataList.NumberCell>{metadata.traceCount}</DataList.NumberCell>\n <DataList.Cell>{metadata.signalsSet}</DataList.Cell>\n <DataList.Cell className=\"overflow-visible\">\n <EntityIndexStatus entity={entity} />\n </DataList.Cell>\n <DataList.Cell title={entity.updatedAt}>{metadata.updatedAt}</DataList.Cell>\n </>\n );\n // No signals yet means the detail page has nothing to show, so the row stays static.\n if (isAnalyzing) {\n return (\n <DataList.RowStatic key={key} className=\"min-w-0\">\n {cells}\n </DataList.RowStatic>\n );\n }\n return (\n <DataList.RowLink key={key} to={getEntityHref(entity)} LinkComponent={LinkComponent} className=\"min-w-0\">\n {cells}\n </DataList.RowLink>\n );\n })}\n </DataList>\n </section>\n );\n}\n"],"names":["jsx","jsxs","DataList","entityIndexMetadata","Fragment","EntityIndexStatus"],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity-index-list.cjs.js","sources":["../../../../src/ee/signals/components/entity-index-list.tsx"],"sourcesContent":["import type { ThemeLearningEntity } from '@mastra/client-js';\n\nimport { entityIndexMetadata } from './entity-index-model';\nimport { EntityIndexStatus } from './entity-index-status';\nimport { DataList } from '@/ds/components/DataList';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst columns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface EntityIndexListProps {\n entities: readonly ThemeLearningEntity[];\n hasSearch: boolean;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n LinkComponent: LinkComponent;\n}\n\nexport function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }: EntityIndexListProps) {\n return (\n <section aria-label=\"Trace Intelligence agents\" className=\"min-h-0\">\n <DataList columns={columns} fit=\"container\">\n <DataList.Top>\n <DataList.TopCell>Agent</DataList.TopCell>\n <DataList.TopCell>Traces</DataList.TopCell>\n <DataList.TopCell>Signals set</DataList.TopCell>\n <DataList.TopCell>Status</DataList.TopCell>\n <DataList.TopCell>Updated</DataList.TopCell>\n </DataList.Top>\n {entities.length === 0 && hasSearch ? <DataList.NoMatch message=\"No agents match your search\" /> : null}\n {entities.map(entity => {\n const metadata = entityIndexMetadata(entity);\n const key = `${entity.entityType}:${entity.entityId}`;\n const isAnalyzing = entity.status === 'collecting';\n const cells = (\n <>\n <DataList.Cell className=\"min-w-0 overflow-visible text-left\">\n {isAnalyzing ? null : <span className=\"sr-only\">Open agent {entity.entityId}</span>}\n <span\n aria-hidden={isAnalyzing ? undefined : true}\n className=\"block overflow-clip text-ellipsis whitespace-nowrap\"\n >\n {entity.entityId}\n </span>\n </DataList.Cell>\n <DataList.NumberCell>{metadata.traceCount}</DataList.NumberCell>\n <DataList.Cell>{metadata.signalsSet}</DataList.Cell>\n <DataList.Cell className=\"overflow-visible\">\n <EntityIndexStatus entity={entity} />\n </DataList.Cell>\n <DataList.Cell title={entity.updatedAt}>{metadata.updatedAt}</DataList.Cell>\n </>\n );\n // No signals yet means the detail page has nothing to show, so the row stays static.\n if (isAnalyzing) {\n return (\n <DataList.RowStatic key={key} className=\"min-w-0\">\n {cells}\n </DataList.RowStatic>\n );\n }\n return (\n <DataList.RowLink key={key} to={getEntityHref(entity)} LinkComponent={LinkComponent} className=\"min-w-0\">\n {cells}\n </DataList.RowLink>\n );\n })}\n </DataList>\n </section>\n );\n}\n"],"names":["jsx","jsxs","DataList","entityIndexMetadata","Fragment","EntityIndexStatus"],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { entityIndexMetadata } from './entity-index-model.es.js';
|
|
3
3
|
import { EntityIndexStatus } from './entity-index-status.es.js';
|
|
4
|
-
import {
|
|
5
|
-
import 'react';
|
|
6
|
-
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
4
|
+
import { D as DataList } from '../../../data-list-DXQY_iQW.js';
|
|
7
5
|
|
|
8
6
|
const columns = "minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)";
|
|
9
7
|
function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }) {
|