@mastra/playground-ui 66.0.0-alpha.7 → 66.0.0

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.
Files changed (105) hide show
  1. package/dist/{DataList-CYjnJkNE.js → DataList-Bg533xtT.js} +2 -2
  2. package/dist/{DataList-CYjnJkNE.js.map → DataList-Bg533xtT.js.map} +1 -1
  3. package/dist/{DataList-D7bShtPK.cjs → DataList-DlmchFgW.cjs} +2 -2
  4. package/dist/{DataList-D7bShtPK.cjs.map → DataList-DlmchFgW.cjs.map} +1 -1
  5. package/dist/{LogsDataList-ia_C-bSJ.cjs → LogsDataList-DQ-3y06q.cjs} +2 -2
  6. package/dist/{LogsDataList-ia_C-bSJ.cjs.map → LogsDataList-DQ-3y06q.cjs.map} +1 -1
  7. package/dist/{LogsDataList-FQ921Sml.js → LogsDataList-DyVM83Rx.js} +2 -2
  8. package/dist/{LogsDataList-FQ921Sml.js.map → LogsDataList-DyVM83Rx.js.map} +1 -1
  9. package/dist/components/DataList.cjs.js +3 -3
  10. package/dist/components/DataList.es.js +3 -3
  11. package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
  12. package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
  13. package/dist/components/LogsDataList.cjs.js +2 -2
  14. package/dist/components/LogsDataList.es.js +2 -2
  15. package/dist/components/MetricsTable.cjs.js +1 -1
  16. package/dist/components/MetricsTable.cjs.js.map +1 -1
  17. package/dist/components/MetricsTable.es.js +1 -1
  18. package/dist/components/MetricsTable.es.js.map +1 -1
  19. package/dist/{data-list-YfADUlqZ.js → data-list-DjSo5V1C.js} +2 -2
  20. package/dist/{data-list-YfADUlqZ.js.map → data-list-DjSo5V1C.js.map} +1 -1
  21. package/dist/{data-list-jF9pJ7HH.cjs → data-list-v93EXSHc.cjs} +2 -2
  22. package/dist/{data-list-jF9pJ7HH.cjs.map → data-list-v93EXSHc.cjs.map} +1 -1
  23. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +1 -1
  24. package/dist/domains/chat/tools/connect-prompt-tool.es.js +1 -1
  25. package/dist/domains/llm/provider-logo.cjs.js +3 -1
  26. package/dist/domains/llm/provider-logo.cjs.js.map +1 -1
  27. package/dist/domains/llm/provider-logo.es.js +3 -1
  28. package/dist/domains/llm/provider-logo.es.js.map +1 -1
  29. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  30. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  31. package/dist/domains/metrics/drilldown.cjs.js +1 -1
  32. package/dist/domains/metrics/drilldown.es.js +1 -1
  33. package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
  34. package/dist/domains/metrics/metrics-filters.es.js +1 -1
  35. package/dist/domains/observability/hooks/use-observability-list-filters.cjs.js +1 -1
  36. package/dist/domains/observability/hooks/use-observability-list-filters.es.js +1 -1
  37. package/dist/domains/scores/components/trace-scores-list.cjs.js +1 -1
  38. package/dist/domains/scores/components/trace-scores-list.es.js +1 -1
  39. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
  40. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
  41. package/dist/domains/spans/components/spans-filter-bar.cjs.js +1 -1
  42. package/dist/domains/spans/components/spans-filter-bar.es.js +1 -1
  43. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
  44. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
  45. package/dist/domains/spans/span-filters.cjs.js +1 -1
  46. package/dist/domains/spans/span-filters.es.js +1 -1
  47. package/dist/domains/threads/components/threads-filter-bar.cjs.js +1 -1
  48. package/dist/domains/threads/components/threads-filter-bar.es.js +1 -1
  49. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
  50. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
  51. package/dist/domains/threads/thread-filters.cjs.js +1 -1
  52. package/dist/domains/threads/thread-filters.es.js +1 -1
  53. package/dist/domains/traces/components/columns-menu/columns-menu.cjs.js +1 -1
  54. package/dist/domains/traces/components/columns-menu/columns-menu.es.js +1 -1
  55. package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
  56. package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
  57. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
  58. package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
  59. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js +1 -1
  60. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +1 -1
  61. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +1 -1
  62. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +1 -1
  63. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +1 -1
  64. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +1 -1
  65. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  66. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  67. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  68. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  69. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
  70. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
  71. package/dist/domains/traces/trace-filters.cjs.js +1 -1
  72. package/dist/domains/traces/trace-filters.es.js +1 -1
  73. package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
  74. package/dist/domains/traces/trace-query-filters.es.js +1 -1
  75. package/dist/domains/traces.cjs.js +1 -1
  76. package/dist/domains/traces.es.js +1 -1
  77. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  78. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  79. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
  80. package/dist/ee/signals/components/entity-index-list.es.js +1 -1
  81. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +1 -1
  82. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +1 -1
  83. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
  84. package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
  85. package/dist/icons/TypesafeIcon.cjs.js +19 -0
  86. package/dist/icons/TypesafeIcon.cjs.js.map +1 -0
  87. package/dist/icons/TypesafeIcon.d.ts +1 -0
  88. package/dist/icons/TypesafeIcon.es.js +16 -0
  89. package/dist/icons/TypesafeIcon.es.js.map +1 -0
  90. package/dist/layout/tabbed-container.cjs.js +1 -1
  91. package/dist/layout/tabbed-container.es.js +1 -1
  92. package/dist/src/ds/icons/TypesafeIcon.d.ts +2 -0
  93. package/dist/src/ds/icons/index.d.ts +1 -0
  94. package/dist/style.css +4 -4
  95. package/dist/{tabbed-container-Bkqv61EW.js → tabbed-container-DHmygeKi.js} +2 -2
  96. package/dist/{tabbed-container-Bkqv61EW.js.map → tabbed-container-DHmygeKi.js.map} +1 -1
  97. package/dist/{tabbed-container-DKFLulGV.cjs → tabbed-container-Dt9F_Lb5.cjs} +2 -2
  98. package/dist/{tabbed-container-DKFLulGV.cjs.map → tabbed-container-Dt9F_Lb5.cjs.map} +1 -1
  99. package/dist/{trace-filters-HWOGfVqx.cjs → trace-filters-BpeBUjCb.cjs} +2 -2
  100. package/dist/trace-filters-BpeBUjCb.cjs.map +1 -0
  101. package/dist/{trace-filters-BpIMoLTk.js → trace-filters-C27yWcan.js} +2 -2
  102. package/dist/trace-filters-C27yWcan.js.map +1 -0
  103. package/package.json +9 -9
  104. package/dist/trace-filters-BpIMoLTk.js.map +0 -1
  105. package/dist/trace-filters-HWOGfVqx.cjs.map +0 -1
@@ -10,7 +10,7 @@ import { McpServerIcon } from "./icons/McpServerIcon.es.js";
10
10
  import { ProcessorIcon } from "./icons/ProcessorIcon.es.js";
11
11
  import { ScorersIcon } from "./icons/ScorersIcon.es.js";
12
12
  import { t as Badge } from "./Badge-aVu5iGAF.js";
13
- import { C as splitColumns, S as dataListRowOuterStyles, _ as DataListCreatedCell, a as DataListSpacer, b as DataListTextCell, f as DataListRowButton, g as DataListCell, h as DataListNextPageLoading, i as DataListSubheader, l as DataListTopCellWithTooltip, m as DataListNoMatch, n as DataListTop, o as DataListSortableTopCell, p as DataListRoot, r as DataListSubHeading, s as DataListTopCell, y as DataListIdCell } from "./data-list-YfADUlqZ.js";
13
+ import { C as splitColumns, S as dataListRowOuterStyles, _ as DataListCreatedCell, a as DataListSpacer, b as DataListTextCell, f as DataListRowButton, g as DataListCell, h as DataListNextPageLoading, i as DataListSubheader, l as DataListTopCellWithTooltip, m as DataListNoMatch, n as DataListTop, o as DataListSortableTopCell, p as DataListRoot, r as DataListSubHeading, s as DataListTopCell, y as DataListIdCell } from "./data-list-DjSo5V1C.js";
14
14
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
15
  import { CornerDownRightIcon, DatabaseIcon, ListTreeIcon, RouteIcon, SplitIcon } from "lucide-react";
16
16
  // src/ds/components/DataList/data-list-skeleton.tsx
@@ -313,4 +313,4 @@ var TracesDataList = Object.assign(TracesDataListRoot, {
313
313
  });
314
314
  export { DataListSkeletonRows as i, ScoresDataList as n, DataListSkeleton as r, TracesDataList as t };
315
315
 
316
- //# sourceMappingURL=DataList-CYjnJkNE.js.map
316
+ //# sourceMappingURL=DataList-Bg533xtT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataList-CYjnJkNE.js","names":["WorkflowIcon","_Fragment"],"sources":["../src/ds/components/DataList/data-list-skeleton.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { DataListCell } from './data-list-cells';\nimport { DataListRoot } from './data-list-root';\nimport type { DataListFit, DataListVariant } from './data-list-root';\nimport { DataListTop } from './data-list-top';\nimport { DataListTopCell } from './data-list-top-cell';\nimport { dataListRowOuterStyles, splitColumns } from './shared';\nimport { cn } from '@/lib/utils';\n\nconst widths = ['75%', '50%', '65%', '90%', '60%', '80%'] as const;\nconst headerWidths = ['3rem', '5rem', '4rem', '3.5rem', '4.5rem', '3rem'] as const;\n\nexport type DataListSkeletonProps = {\n columns?: string;\n numberOfRows?: number;\n fit?: DataListFit;\n variant?: DataListVariant;\n};\n\nfunction SkeletonBar({ width, className }: { width: string; className?: string }) {\n return (\n <div\n className={cn('h-4 animate-pulse rounded-lg bg-(--data-list-background) text-transparent select-none', className)}\n style={{ width }}\n />\n );\n}\n\nexport type DataListSkeletonRowsProps = {\n columnCount: number;\n numberOfRows?: number;\n};\n\n/**\n * Placeholder rows only, for lists that keep their real root and header while\n * loading (e.g. virtualized lists that must keep the same scroll container).\n */\nexport function DataListSkeletonRows({ columnCount, numberOfRows = 3 }: DataListSkeletonRowsProps) {\n const getPseudoRandomWidth = (rowIdx: number, colIdx: number) => {\n const index = (rowIdx + colIdx + columnCount + numberOfRows) % widths.length;\n return widths[index] ?? widths[0];\n };\n\n return Array.from({ length: numberOfRows }).map((_, rowIdx) => (\n <div key={rowIdx} className={cn('data-list-cells grid grid-cols-subgrid gap-4 px-3', ...dataListRowOuterStyles)}>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListCell key={colIdx}>\n <SkeletonBar width={getPseudoRandomWidth(rowIdx, colIdx)} />\n </DataListCell>\n ))}\n </div>\n ));\n}\n\n/**\n * Loading placeholder mirroring the real list: same root, a sticky header\n * band with one placeholder label per column, then rows of placeholder cells.\n */\nexport function DataListSkeleton({\n columns = 'auto 1fr auto auto',\n numberOfRows = 3,\n fit,\n variant,\n}: DataListSkeletonProps) {\n const columnParts = splitColumns(columns);\n const columnCount = columnParts.length;\n const skeletonColumns = columnParts.map(col => (col === 'auto' ? 'minmax(6rem, auto)' : col)).join(' ');\n\n return (\n <DataListRoot columns={skeletonColumns} fit={fit} variant={variant}>\n <DataListTop>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListTopCell key={colIdx}>\n <SkeletonBar width={headerWidths[colIdx % headerWidths.length] ?? headerWidths[0]} className=\"h-3\" />\n </DataListTopCell>\n ))}\n </DataListTop>\n <DataListSkeletonRows columnCount={columnCount} numberOfRows={numberOfRows} />\n </DataListRoot>\n );\n}\n","import { DataListCell } from '../data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDate } from '@/utils/date-format';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n return <DataListCell className=\"text-muted-foreground\">{formatDate(timestamp, 'date') ?? '-'}</DataListCell>;\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n return (\n <DataListCell className=\"text-body-sm text-muted-foreground\">{formatDate(timestamp, 'time') ?? '-'}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n const display = input != null ? JSON.stringify(input) : '-';\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n const display = entityId || '-';\n return (\n <DataListCell>\n <Txt as=\"span\" variant=\"body-sm\" className=\"block max-w-full min-w-0 truncate\" title={display}>\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as TracesDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as TracesDataList\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { CornerDownRightIcon, DatabaseIcon, ListTreeIcon, RouteIcon, SplitIcon } from 'lucide-react';\nimport type { ComponentType, SVGProps } from 'react';\nimport { DataListCell, DataListTextCell } from '../data-list-cells';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { McpServerIcon } from '@/ds/icons/McpServerIcon';\nimport { MemoryIcon } from '@/ds/icons/MemoryIcon';\nimport { ProcessorIcon } from '@/ds/icons/ProcessorIcon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-muted-foreground' : 'text-placeholder')} aria-hidden />\n </span>\n );\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2 text-body-sm text-muted-foreground\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListTextCell font=\"mono\">{input || '-'}</DataListTextCell>;\n}\n\n// ---------------------------------------------------------------------------\n// OutputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListOutputCellProps {\n output?: string;\n /** Shown instead of `output`, in the error color, when `status` is `'error'`. */\n error?: string;\n status?: string | null;\n}\n\nexport function TracesDataListOutputCell({ output, error, status }: TracesDataListOutputCellProps) {\n const failed = status === 'error';\n const errorColor = failed ? 'text-destructive-foreground' : undefined;\n return (\n <DataListTextCell font=\"mono\" className={errorColor}>\n {(failed ? error : output) || '-'}\n </DataListTextCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TypeCell\n// ---------------------------------------------------------------------------\n\ntype EntityTypeDisplay = { label: string; Icon: ComponentType<SVGProps<SVGSVGElement>> };\n\n// Keys are lowercase `EntityType` enum values (plus legacy `workflow`).\nconst ENTITY_TYPE_DISPLAY: Record<string, EntityTypeDisplay> = {\n agent: { label: 'Agent', Icon: AgentIcon },\n workflow: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_run: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_step: { label: 'Step', Icon: WorkflowIcon },\n tool: { label: 'Tool', Icon: ToolsIcon },\n scorer: { label: 'Scorer', Icon: ScorersIcon },\n classifier: { label: 'Classifier', Icon: SplitIcon },\n memory: { label: 'Memory', Icon: MemoryIcon },\n mcp_server: { label: 'MCP Server', Icon: McpServerIcon },\n input_processor: { label: 'Processor', Icon: ProcessorIcon },\n input_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n tool_result_processor: { label: 'Processor', Icon: ProcessorIcon },\n rag_ingestion: { label: 'RAG', Icon: DatabaseIcon },\n trajectory: { label: 'Trajectory', Icon: RouteIcon },\n};\n\nexport interface TracesDataListTypeCellProps {\n entityType?: string | null;\n}\n\nexport function TracesDataListTypeCell({ entityType }: TracesDataListTypeCellProps) {\n const display = entityType ? ENTITY_TYPE_DISPLAY[entityType.toLowerCase()] : undefined;\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n {display ? (\n <>\n <display.Icon className=\"size-3.5 shrink-0 text-placeholder\" aria-hidden />\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {display.label}\n </Txt>\n </>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst UNSET_STATUS_CONFIG: { label: string; variant: BadgeVariant } = { label: '-', variant: 'neutral' };\n\nconst STATUS_CONFIG: Record<string, { label: string; variant: BadgeVariant }> = {\n completed: { label: 'OK', variant: 'success' },\n ok: { label: 'OK', variant: 'success' },\n success: { label: 'OK', variant: 'success' },\n error: { label: 'ERR', variant: 'destructive' },\n running: { label: 'RUN', variant: 'neutral' },\n unset: UNSET_STATUS_CONFIG,\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? UNSET_STATUS_CONFIG;\n\n return (\n <DataListCell>\n <Badge size=\"xs\" variant={config.variant}>\n {config.label}\n </Badge>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListCreatedCell, DataListIdCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListOutputCell,\n TracesDataListTypeCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as ScoresDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as ScoresDataList\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n CreatedCell: DataListCreatedCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n OutputCell: TracesDataListOutputCell,\n TypeCell: TracesDataListTypeCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataList-Bg533xtT.js","names":["WorkflowIcon","_Fragment"],"sources":["../src/ds/components/DataList/data-list-skeleton.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { DataListCell } from './data-list-cells';\nimport { DataListRoot } from './data-list-root';\nimport type { DataListFit, DataListVariant } from './data-list-root';\nimport { DataListTop } from './data-list-top';\nimport { DataListTopCell } from './data-list-top-cell';\nimport { dataListRowOuterStyles, splitColumns } from './shared';\nimport { cn } from '@/lib/utils';\n\nconst widths = ['75%', '50%', '65%', '90%', '60%', '80%'] as const;\nconst headerWidths = ['3rem', '5rem', '4rem', '3.5rem', '4.5rem', '3rem'] as const;\n\nexport type DataListSkeletonProps = {\n columns?: string;\n numberOfRows?: number;\n fit?: DataListFit;\n variant?: DataListVariant;\n};\n\nfunction SkeletonBar({ width, className }: { width: string; className?: string }) {\n return (\n <div\n className={cn('h-4 animate-pulse rounded-lg bg-(--data-list-background) text-transparent select-none', className)}\n style={{ width }}\n />\n );\n}\n\nexport type DataListSkeletonRowsProps = {\n columnCount: number;\n numberOfRows?: number;\n};\n\n/**\n * Placeholder rows only, for lists that keep their real root and header while\n * loading (e.g. virtualized lists that must keep the same scroll container).\n */\nexport function DataListSkeletonRows({ columnCount, numberOfRows = 3 }: DataListSkeletonRowsProps) {\n const getPseudoRandomWidth = (rowIdx: number, colIdx: number) => {\n const index = (rowIdx + colIdx + columnCount + numberOfRows) % widths.length;\n return widths[index] ?? widths[0];\n };\n\n return Array.from({ length: numberOfRows }).map((_, rowIdx) => (\n <div key={rowIdx} className={cn('data-list-cells grid grid-cols-subgrid gap-4 px-3', ...dataListRowOuterStyles)}>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListCell key={colIdx}>\n <SkeletonBar width={getPseudoRandomWidth(rowIdx, colIdx)} />\n </DataListCell>\n ))}\n </div>\n ));\n}\n\n/**\n * Loading placeholder mirroring the real list: same root, a sticky header\n * band with one placeholder label per column, then rows of placeholder cells.\n */\nexport function DataListSkeleton({\n columns = 'auto 1fr auto auto',\n numberOfRows = 3,\n fit,\n variant,\n}: DataListSkeletonProps) {\n const columnParts = splitColumns(columns);\n const columnCount = columnParts.length;\n const skeletonColumns = columnParts.map(col => (col === 'auto' ? 'minmax(6rem, auto)' : col)).join(' ');\n\n return (\n <DataListRoot columns={skeletonColumns} fit={fit} variant={variant}>\n <DataListTop>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListTopCell key={colIdx}>\n <SkeletonBar width={headerWidths[colIdx % headerWidths.length] ?? headerWidths[0]} className=\"h-3\" />\n </DataListTopCell>\n ))}\n </DataListTop>\n <DataListSkeletonRows columnCount={columnCount} numberOfRows={numberOfRows} />\n </DataListRoot>\n );\n}\n","import { DataListCell } from '../data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDate } from '@/utils/date-format';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n return <DataListCell className=\"text-muted-foreground\">{formatDate(timestamp, 'date') ?? '-'}</DataListCell>;\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n return (\n <DataListCell className=\"text-body-sm text-muted-foreground\">{formatDate(timestamp, 'time') ?? '-'}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n const display = input != null ? JSON.stringify(input) : '-';\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n const display = entityId || '-';\n return (\n <DataListCell>\n <Txt as=\"span\" variant=\"body-sm\" className=\"block max-w-full min-w-0 truncate\" title={display}>\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as TracesDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as TracesDataList\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { CornerDownRightIcon, DatabaseIcon, ListTreeIcon, RouteIcon, SplitIcon } from 'lucide-react';\nimport type { ComponentType, SVGProps } from 'react';\nimport { DataListCell, DataListTextCell } from '../data-list-cells';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { McpServerIcon } from '@/ds/icons/McpServerIcon';\nimport { MemoryIcon } from '@/ds/icons/MemoryIcon';\nimport { ProcessorIcon } from '@/ds/icons/ProcessorIcon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-muted-foreground' : 'text-placeholder')} aria-hidden />\n </span>\n );\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2 text-body-sm text-muted-foreground\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListTextCell font=\"mono\">{input || '-'}</DataListTextCell>;\n}\n\n// ---------------------------------------------------------------------------\n// OutputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListOutputCellProps {\n output?: string;\n /** Shown instead of `output`, in the error color, when `status` is `'error'`. */\n error?: string;\n status?: string | null;\n}\n\nexport function TracesDataListOutputCell({ output, error, status }: TracesDataListOutputCellProps) {\n const failed = status === 'error';\n const errorColor = failed ? 'text-destructive-foreground' : undefined;\n return (\n <DataListTextCell font=\"mono\" className={errorColor}>\n {(failed ? error : output) || '-'}\n </DataListTextCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TypeCell\n// ---------------------------------------------------------------------------\n\ntype EntityTypeDisplay = { label: string; Icon: ComponentType<SVGProps<SVGSVGElement>> };\n\n// Keys are lowercase `EntityType` enum values (plus legacy `workflow`).\nconst ENTITY_TYPE_DISPLAY: Record<string, EntityTypeDisplay> = {\n agent: { label: 'Agent', Icon: AgentIcon },\n workflow: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_run: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_step: { label: 'Step', Icon: WorkflowIcon },\n tool: { label: 'Tool', Icon: ToolsIcon },\n scorer: { label: 'Scorer', Icon: ScorersIcon },\n classifier: { label: 'Classifier', Icon: SplitIcon },\n memory: { label: 'Memory', Icon: MemoryIcon },\n mcp_server: { label: 'MCP Server', Icon: McpServerIcon },\n input_processor: { label: 'Processor', Icon: ProcessorIcon },\n input_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n tool_result_processor: { label: 'Processor', Icon: ProcessorIcon },\n rag_ingestion: { label: 'RAG', Icon: DatabaseIcon },\n trajectory: { label: 'Trajectory', Icon: RouteIcon },\n};\n\nexport interface TracesDataListTypeCellProps {\n entityType?: string | null;\n}\n\nexport function TracesDataListTypeCell({ entityType }: TracesDataListTypeCellProps) {\n const display = entityType ? ENTITY_TYPE_DISPLAY[entityType.toLowerCase()] : undefined;\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n {display ? (\n <>\n <display.Icon className=\"size-3.5 shrink-0 text-placeholder\" aria-hidden />\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {display.label}\n </Txt>\n </>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst UNSET_STATUS_CONFIG: { label: string; variant: BadgeVariant } = { label: '-', variant: 'neutral' };\n\nconst STATUS_CONFIG: Record<string, { label: string; variant: BadgeVariant }> = {\n completed: { label: 'OK', variant: 'success' },\n ok: { label: 'OK', variant: 'success' },\n success: { label: 'OK', variant: 'success' },\n error: { label: 'ERR', variant: 'destructive' },\n running: { label: 'RUN', variant: 'neutral' },\n unset: UNSET_STATUS_CONFIG,\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? UNSET_STATUS_CONFIG;\n\n return (\n <DataListCell>\n <Badge size=\"xs\" variant={config.variant}>\n {config.label}\n </Badge>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListCreatedCell, DataListIdCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListOutputCell,\n TracesDataListTypeCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as ScoresDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as ScoresDataList\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n CreatedCell: DataListCreatedCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n OutputCell: TracesDataListOutputCell,\n TypeCell: TracesDataListTypeCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ const require_icons_McpServerIcon = require("./icons/McpServerIcon.cjs.js");
10
10
  const require_icons_ProcessorIcon = require("./icons/ProcessorIcon.cjs.js");
11
11
  const require_icons_ScorersIcon = require("./icons/ScorersIcon.cjs.js");
12
12
  const require_Badge = require("./Badge-DZ6r6bcw.cjs");
13
- const require_data_list = require("./data-list-jF9pJ7HH.cjs");
13
+ const require_data_list = require("./data-list-v93EXSHc.cjs");
14
14
  let react_jsx_runtime = require("react/jsx-runtime");
15
15
  let lucide_react = require("lucide-react");
16
16
  // src/ds/components/DataList/data-list-skeleton.tsx
@@ -336,4 +336,4 @@ Object.defineProperty(exports, "TracesDataList", {
336
336
  }
337
337
  });
338
338
 
339
- //# sourceMappingURL=DataList-D7bShtPK.cjs.map
339
+ //# sourceMappingURL=DataList-DlmchFgW.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataList-D7bShtPK.cjs","names":["cn","dataListRowOuterStyles","DataListCell","splitColumns","DataListRoot","DataListTop","DataListTopCell","DataListCell","formatDate","Txt","DataListRoot","DataListTop","DataListTopCell","DataListSortableTopCell","DataListRowButton","DataListNoMatch","DataListNextPageLoading","ListTreeIcon","CornerDownRightIcon","cn","DataListCell","Tooltip","TooltipTrigger","TooltipContent","DataListTextCell","AgentIcon","WorkflowIcon","ToolsIcon","ScorersIcon","SplitIcon","MemoryIcon","McpServerIcon","ProcessorIcon","DatabaseIcon","RouteIcon","_Fragment","Txt","Badge","DataListRoot","DataListTop","DataListTopCell","DataListSortableTopCell","DataListTopCellWithTooltip","DataListRowButton","DataListNoMatch","DataListSubheader","DataListSubHeading","DataListSpacer","DataListIdCell","DataListCreatedCell","DataListNextPageLoading"],"sources":["../src/ds/components/DataList/data-list-skeleton.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { DataListCell } from './data-list-cells';\nimport { DataListRoot } from './data-list-root';\nimport type { DataListFit, DataListVariant } from './data-list-root';\nimport { DataListTop } from './data-list-top';\nimport { DataListTopCell } from './data-list-top-cell';\nimport { dataListRowOuterStyles, splitColumns } from './shared';\nimport { cn } from '@/lib/utils';\n\nconst widths = ['75%', '50%', '65%', '90%', '60%', '80%'] as const;\nconst headerWidths = ['3rem', '5rem', '4rem', '3.5rem', '4.5rem', '3rem'] as const;\n\nexport type DataListSkeletonProps = {\n columns?: string;\n numberOfRows?: number;\n fit?: DataListFit;\n variant?: DataListVariant;\n};\n\nfunction SkeletonBar({ width, className }: { width: string; className?: string }) {\n return (\n <div\n className={cn('h-4 animate-pulse rounded-lg bg-(--data-list-background) text-transparent select-none', className)}\n style={{ width }}\n />\n );\n}\n\nexport type DataListSkeletonRowsProps = {\n columnCount: number;\n numberOfRows?: number;\n};\n\n/**\n * Placeholder rows only, for lists that keep their real root and header while\n * loading (e.g. virtualized lists that must keep the same scroll container).\n */\nexport function DataListSkeletonRows({ columnCount, numberOfRows = 3 }: DataListSkeletonRowsProps) {\n const getPseudoRandomWidth = (rowIdx: number, colIdx: number) => {\n const index = (rowIdx + colIdx + columnCount + numberOfRows) % widths.length;\n return widths[index] ?? widths[0];\n };\n\n return Array.from({ length: numberOfRows }).map((_, rowIdx) => (\n <div key={rowIdx} className={cn('data-list-cells grid grid-cols-subgrid gap-4 px-3', ...dataListRowOuterStyles)}>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListCell key={colIdx}>\n <SkeletonBar width={getPseudoRandomWidth(rowIdx, colIdx)} />\n </DataListCell>\n ))}\n </div>\n ));\n}\n\n/**\n * Loading placeholder mirroring the real list: same root, a sticky header\n * band with one placeholder label per column, then rows of placeholder cells.\n */\nexport function DataListSkeleton({\n columns = 'auto 1fr auto auto',\n numberOfRows = 3,\n fit,\n variant,\n}: DataListSkeletonProps) {\n const columnParts = splitColumns(columns);\n const columnCount = columnParts.length;\n const skeletonColumns = columnParts.map(col => (col === 'auto' ? 'minmax(6rem, auto)' : col)).join(' ');\n\n return (\n <DataListRoot columns={skeletonColumns} fit={fit} variant={variant}>\n <DataListTop>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListTopCell key={colIdx}>\n <SkeletonBar width={headerWidths[colIdx % headerWidths.length] ?? headerWidths[0]} className=\"h-3\" />\n </DataListTopCell>\n ))}\n </DataListTop>\n <DataListSkeletonRows columnCount={columnCount} numberOfRows={numberOfRows} />\n </DataListRoot>\n );\n}\n","import { DataListCell } from '../data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDate } from '@/utils/date-format';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n return <DataListCell className=\"text-muted-foreground\">{formatDate(timestamp, 'date') ?? '-'}</DataListCell>;\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n return (\n <DataListCell className=\"text-body-sm text-muted-foreground\">{formatDate(timestamp, 'time') ?? '-'}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n const display = input != null ? JSON.stringify(input) : '-';\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n const display = entityId || '-';\n return (\n <DataListCell>\n <Txt as=\"span\" variant=\"body-sm\" className=\"block max-w-full min-w-0 truncate\" title={display}>\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as TracesDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as TracesDataList\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { CornerDownRightIcon, DatabaseIcon, ListTreeIcon, RouteIcon, SplitIcon } from 'lucide-react';\nimport type { ComponentType, SVGProps } from 'react';\nimport { DataListCell, DataListTextCell } from '../data-list-cells';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { McpServerIcon } from '@/ds/icons/McpServerIcon';\nimport { MemoryIcon } from '@/ds/icons/MemoryIcon';\nimport { ProcessorIcon } from '@/ds/icons/ProcessorIcon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-muted-foreground' : 'text-placeholder')} aria-hidden />\n </span>\n );\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2 text-body-sm text-muted-foreground\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListTextCell font=\"mono\">{input || '-'}</DataListTextCell>;\n}\n\n// ---------------------------------------------------------------------------\n// OutputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListOutputCellProps {\n output?: string;\n /** Shown instead of `output`, in the error color, when `status` is `'error'`. */\n error?: string;\n status?: string | null;\n}\n\nexport function TracesDataListOutputCell({ output, error, status }: TracesDataListOutputCellProps) {\n const failed = status === 'error';\n const errorColor = failed ? 'text-destructive-foreground' : undefined;\n return (\n <DataListTextCell font=\"mono\" className={errorColor}>\n {(failed ? error : output) || '-'}\n </DataListTextCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TypeCell\n// ---------------------------------------------------------------------------\n\ntype EntityTypeDisplay = { label: string; Icon: ComponentType<SVGProps<SVGSVGElement>> };\n\n// Keys are lowercase `EntityType` enum values (plus legacy `workflow`).\nconst ENTITY_TYPE_DISPLAY: Record<string, EntityTypeDisplay> = {\n agent: { label: 'Agent', Icon: AgentIcon },\n workflow: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_run: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_step: { label: 'Step', Icon: WorkflowIcon },\n tool: { label: 'Tool', Icon: ToolsIcon },\n scorer: { label: 'Scorer', Icon: ScorersIcon },\n classifier: { label: 'Classifier', Icon: SplitIcon },\n memory: { label: 'Memory', Icon: MemoryIcon },\n mcp_server: { label: 'MCP Server', Icon: McpServerIcon },\n input_processor: { label: 'Processor', Icon: ProcessorIcon },\n input_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n tool_result_processor: { label: 'Processor', Icon: ProcessorIcon },\n rag_ingestion: { label: 'RAG', Icon: DatabaseIcon },\n trajectory: { label: 'Trajectory', Icon: RouteIcon },\n};\n\nexport interface TracesDataListTypeCellProps {\n entityType?: string | null;\n}\n\nexport function TracesDataListTypeCell({ entityType }: TracesDataListTypeCellProps) {\n const display = entityType ? ENTITY_TYPE_DISPLAY[entityType.toLowerCase()] : undefined;\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n {display ? (\n <>\n <display.Icon className=\"size-3.5 shrink-0 text-placeholder\" aria-hidden />\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {display.label}\n </Txt>\n </>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst UNSET_STATUS_CONFIG: { label: string; variant: BadgeVariant } = { label: '-', variant: 'neutral' };\n\nconst STATUS_CONFIG: Record<string, { label: string; variant: BadgeVariant }> = {\n completed: { label: 'OK', variant: 'success' },\n ok: { label: 'OK', variant: 'success' },\n success: { label: 'OK', variant: 'success' },\n error: { label: 'ERR', variant: 'destructive' },\n running: { label: 'RUN', variant: 'neutral' },\n unset: UNSET_STATUS_CONFIG,\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? UNSET_STATUS_CONFIG;\n\n return (\n <DataListCell>\n <Badge size=\"xs\" variant={config.variant}>\n {config.label}\n </Badge>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListCreatedCell, DataListIdCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListOutputCell,\n TracesDataListTypeCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as ScoresDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as ScoresDataList\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n CreatedCell: DataListCreatedCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n OutputCell: TracesDataListOutputCell,\n TypeCell: TracesDataListTypeCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":";;;;;;;;;;;;;;;;AAQA,IAAM,SAAS;CAAC;CAAO;CAAO;CAAO;CAAO;CAAO;AAAK;AACxD,IAAM,eAAe;CAAC;CAAQ;CAAQ;CAAQ;CAAU;CAAU;AAAM;AASxE,SAAS,YAAY,EAAE,OAAO,aAAoD;CAChF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAWA,cAAAA,GAAG,yFAAyF,SAAS;EAChH,OAAO,EAAE,MAAM;CAChB,CAAA;AAEL;;;;;AAWA,SAAgB,qBAAqB,EAAE,aAAa,eAAe,KAAgC;CACjG,MAAM,wBAAwB,QAAgB,WAAmB;EAE/D,OAAO,QADQ,SAAS,SAAS,cAAc,gBAAgB,OAAO,WAC9C,OAAO;CACjC;CAEA,OAAO,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,WAClD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAkB,WAAWA,cAAAA,GAAG,qDAAqD,GAAGC,kBAAAA,sBAAsB;EAC3G,UAAA,MAAM,KAAK,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,WAC3C,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAa,OAAO,qBAAqB,QAAQ,MAAM,EAAI,CAAA,EAC/C,GAFK,MAEL,CACf;CACE,GANK,MAML,CACN;AACH;;;;;AAMA,SAAgB,iBAAiB,EAC/B,UAAU,sBACV,eAAe,GACf,KACA,WACwB;CACxB,MAAM,cAAcC,kBAAAA,aAAa,OAAO;CACxC,MAAM,cAAc,YAAY;CAChC,MAAM,kBAAkB,YAAY,KAAI,QAAQ,QAAQ,SAAS,uBAAuB,GAAI,CAAC,CAAC,KAAK,GAAG;CAEtG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,cAAD;EAAc,SAAS;EAAsB;EAAc;EAA3D,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,aAAD,EAAA,UACG,MAAM,KAAK,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,WAC3C,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,iBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAa,OAAO,aAAa,SAAS,aAAa,WAAW,aAAa;GAAI,WAAU;EAAO,CAAA,EACrF,GAFK,MAEL,CAClB,EACU,CAAA,GACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAD;GAAmC;GAA2B;EAAe,CAAA,CACjE;;AAElB;;AC/DA,SAAgB,uBAAuB,EAAE,aAA0C;CACjF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD;EAAc,WAAU;EAAyB,UAAAC,0BAAAA,WAAW,WAAW,MAAM,KAAK;CAAkB,CAAA;AAC7G;AAUA,SAAgB,uBAAuB,EAAE,aAA0C;CACjF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,cAAD;EAAc,WAAU;EAAsC,UAAAC,0BAAAA,WAAW,WAAW,MAAM,KAAK;CAAkB,CAAA;AAErH;AAUA,SAAgB,wBAAwB,EAAE,SAAuC;CAC/E,MAAM,UAAU,SAAS,OAAO,KAAK,UAAU,KAAK,IAAI;CACxD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,YAAAA,KAAD;EACE,IAAG;EACH,SAAQ;EACR,MAAK;EACL,MAAK;EACL,WAAU;EACV,OAAO;EAEN,UAAA;CACE,CAAA,EACO,CAAA;AAElB;AAUA,SAAgB,yBAAyB,EAAE,YAA2C;CACpF,MAAM,UAAU,YAAY;CAC5B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,YAAAA,KAAD;EAAK,IAAG;EAAO,SAAQ;EAAU,WAAU;EAAoC,OAAO;EACnF,UAAA;CACE,CAAA,EACO,CAAA;AAElB;AAUA,SAAgB,wBAAwB,EAAE,SAAuC;CAC/E,MAAM,UAAU,SAAS,OAAO,MAAM,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;CACtG,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,YAAAA,KAAD;EACE,IAAG;EACH,SAAQ;EACR,MAAK;EACL,MAAK;EACL,WAAU;EACV,OAAO;EAEN,UAAA;CACE,CAAA,EACO,CAAA;AAElB;;ACrFA,SAAS,mBAAmB,OAA4C;CACtE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD,EAAc,GAAI,MAAQ,CAAA;AACnC;AAEA,IAAa,iBAAiB,OAAO,OAAO,oBAAoB;CAC9D,KAAKC,kBAAAA;CACL,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,WAAWC,kBAAAA;CACX,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,WAAW;AACb,CAAC;;ACLD,SAAgB,uBAAuB,EAAE,MAAM,cAAc,oBAAiD;CAC5G,MAAM,SAAS,gBAAgB;CAC/B,MAAM,OAAO,SAASC,aAAAA,eAAeC,aAAAA;CACrC,MAAM,QAAQ,SAAS,UAAU;CACjC,MAAM,OACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,cAAY;EAAO,WAAU;EACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAAM,WAAWC,cAAAA,GAAG,mBAAmB,SAAS,0BAA0B,kBAAkB;GAAG,eAAA;EAAa,CAAA;CACxG,CAAA;CAER,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,cAAD;EAAc,WAAU;EAAxB,UAAA,CACG,mBACC,iBAAA,GAAA,kBAAA,KAAA,CAACC,gBAAAA,SAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,gBAAD;GAAgB,SAAA;GAAS,UAAA;EAAqB,CAAA,GAC9C,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,gBAAD,EAAA,UAAiB,MAAsB,CAAA,CAChC,EAAA,CAAA,IAET,MAEF,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAoB,UAAA,QAAQ;EAAU,CAAA,CAC1C;;AAElB;AAUA,SAAgB,wBAAwB,EAAE,SAAuC;CAC/E,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,kBAAD;EAAkB,MAAK;EAAQ,UAAA,SAAS;CAAsB,CAAA;AACvE;AAaA,SAAgB,yBAAyB,EAAE,QAAQ,OAAO,UAAyC;CACjG,MAAM,SAAS,WAAW;CAE1B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,kBAAD;EAAkB,MAAK;EAAO,WAFb,SAAS,gCAAgC,KAAA;EAGtD,WAAA,SAAS,QAAQ,WAAW;CACd,CAAA;AAEtB;AASA,IAAM,sBAAyD;CAC7D,OAAO;EAAE,OAAO;EAAS,MAAMC,wBAAAA;CAAU;CACzC,UAAU;EAAE,OAAO;EAAY,MAAMC,2BAAAA;CAAa;CAClD,cAAc;EAAE,OAAO;EAAY,MAAMA,2BAAAA;CAAa;CACtD,eAAe;EAAE,OAAO;EAAQ,MAAMA,2BAAAA;CAAa;CACnD,MAAM;EAAE,OAAO;EAAQ,MAAMC,wBAAAA;CAAU;CACvC,QAAQ;EAAE,OAAO;EAAU,MAAMC,0BAAAA;CAAY;CAC7C,YAAY;EAAE,OAAO;EAAc,MAAMC,aAAAA;CAAU;CACnD,QAAQ;EAAE,OAAO;EAAU,MAAMC,yBAAAA;CAAW;CAC5C,YAAY;EAAE,OAAO;EAAc,MAAMC,4BAAAA;CAAc;CACvD,iBAAiB;EAAE,OAAO;EAAa,MAAMC,4BAAAA;CAAc;CAC3D,sBAAsB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CAChE,kBAAkB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CAC5D,uBAAuB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CACjE,uBAAuB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CACjE,eAAe;EAAE,OAAO;EAAO,MAAMC,aAAAA;CAAa;CAClD,YAAY;EAAE,OAAO;EAAc,MAAMC,aAAAA;CAAU;AACrD;AAMA,SAAgB,uBAAuB,EAAE,cAA2C;CAClF,MAAM,UAAU,aAAa,oBAAoB,WAAW,YAAY,KAAK,KAAA;CAE7E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACd,kBAAAA,cAAD;EAAc,WAAU;EACrB,UAAA,UACC,iBAAA,GAAA,kBAAA,KAAA,CAAAe,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAQ,MAAT;GAAc,WAAU;GAAqC,eAAA;EAAa,CAAA,GAC1E,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAU,WAAU;GACxC,UAAA,QAAQ;EACN,CAAA,CACL,EAAA,CAAA,IAEF;CAEU,CAAA;AAElB;AAMA,IAAM,sBAAgE;CAAE,OAAO;CAAK,SAAS;AAAU;AAEvG,IAAM,gBAA0E;CAC9E,WAAW;EAAE,OAAO;EAAM,SAAS;CAAU;CAC7C,IAAI;EAAE,OAAO;EAAM,SAAS;CAAU;CACtC,SAAS;EAAE,OAAO;EAAM,SAAS;CAAU;CAC3C,OAAO;EAAE,OAAO;EAAO,SAAS;CAAc;CAC9C,SAAS;EAAE,OAAO;EAAO,SAAS;CAAU;CAC5C,OAAO;AACT;AAMA,SAAgB,yBAAyB,EAAE,UAAyC;CAElF,MAAM,SAAS,eADF,UAAU,QAAA,CAAS,YACH,MAAQ;CAErC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAChB,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACiB,cAAAA,OAAD;EAAO,MAAK;EAAK,SAAS,OAAO;EAC9B,UAAA,OAAO;CACH,CAAA,EACK,CAAA;AAElB;;AC/IA,SAAS,mBAAmB,OAA4C;CACtE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD,EAAc,GAAI,MAAQ,CAAA;AACnC;AAEA,IAAa,iBAAiB,OAAO,OAAO,oBAAoB;CAC9D,KAAKC,kBAAAA;CACL,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,oBAAoBC,kBAAAA;CACpB,WAAWC,kBAAAA;CACX,SAASC,kBAAAA;CACT,WAAWC,kBAAAA;CACX,YAAYC,kBAAAA;CACZ,QAAQC,kBAAAA;CACR,QAAQC,kBAAAA;CACR,aAAaC,kBAAAA;CACb,UAAU;CACV,WAAW;CACX,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,iBAAiBC,kBAAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"DataList-DlmchFgW.cjs","names":["cn","dataListRowOuterStyles","DataListCell","splitColumns","DataListRoot","DataListTop","DataListTopCell","DataListCell","formatDate","Txt","DataListRoot","DataListTop","DataListTopCell","DataListSortableTopCell","DataListRowButton","DataListNoMatch","DataListNextPageLoading","ListTreeIcon","CornerDownRightIcon","cn","DataListCell","Tooltip","TooltipTrigger","TooltipContent","DataListTextCell","AgentIcon","WorkflowIcon","ToolsIcon","ScorersIcon","SplitIcon","MemoryIcon","McpServerIcon","ProcessorIcon","DatabaseIcon","RouteIcon","_Fragment","Txt","Badge","DataListRoot","DataListTop","DataListTopCell","DataListSortableTopCell","DataListTopCellWithTooltip","DataListRowButton","DataListNoMatch","DataListSubheader","DataListSubHeading","DataListSpacer","DataListIdCell","DataListCreatedCell","DataListNextPageLoading"],"sources":["../src/ds/components/DataList/data-list-skeleton.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { DataListCell } from './data-list-cells';\nimport { DataListRoot } from './data-list-root';\nimport type { DataListFit, DataListVariant } from './data-list-root';\nimport { DataListTop } from './data-list-top';\nimport { DataListTopCell } from './data-list-top-cell';\nimport { dataListRowOuterStyles, splitColumns } from './shared';\nimport { cn } from '@/lib/utils';\n\nconst widths = ['75%', '50%', '65%', '90%', '60%', '80%'] as const;\nconst headerWidths = ['3rem', '5rem', '4rem', '3.5rem', '4.5rem', '3rem'] as const;\n\nexport type DataListSkeletonProps = {\n columns?: string;\n numberOfRows?: number;\n fit?: DataListFit;\n variant?: DataListVariant;\n};\n\nfunction SkeletonBar({ width, className }: { width: string; className?: string }) {\n return (\n <div\n className={cn('h-4 animate-pulse rounded-lg bg-(--data-list-background) text-transparent select-none', className)}\n style={{ width }}\n />\n );\n}\n\nexport type DataListSkeletonRowsProps = {\n columnCount: number;\n numberOfRows?: number;\n};\n\n/**\n * Placeholder rows only, for lists that keep their real root and header while\n * loading (e.g. virtualized lists that must keep the same scroll container).\n */\nexport function DataListSkeletonRows({ columnCount, numberOfRows = 3 }: DataListSkeletonRowsProps) {\n const getPseudoRandomWidth = (rowIdx: number, colIdx: number) => {\n const index = (rowIdx + colIdx + columnCount + numberOfRows) % widths.length;\n return widths[index] ?? widths[0];\n };\n\n return Array.from({ length: numberOfRows }).map((_, rowIdx) => (\n <div key={rowIdx} className={cn('data-list-cells grid grid-cols-subgrid gap-4 px-3', ...dataListRowOuterStyles)}>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListCell key={colIdx}>\n <SkeletonBar width={getPseudoRandomWidth(rowIdx, colIdx)} />\n </DataListCell>\n ))}\n </div>\n ));\n}\n\n/**\n * Loading placeholder mirroring the real list: same root, a sticky header\n * band with one placeholder label per column, then rows of placeholder cells.\n */\nexport function DataListSkeleton({\n columns = 'auto 1fr auto auto',\n numberOfRows = 3,\n fit,\n variant,\n}: DataListSkeletonProps) {\n const columnParts = splitColumns(columns);\n const columnCount = columnParts.length;\n const skeletonColumns = columnParts.map(col => (col === 'auto' ? 'minmax(6rem, auto)' : col)).join(' ');\n\n return (\n <DataListRoot columns={skeletonColumns} fit={fit} variant={variant}>\n <DataListTop>\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <DataListTopCell key={colIdx}>\n <SkeletonBar width={headerWidths[colIdx % headerWidths.length] ?? headerWidths[0]} className=\"h-3\" />\n </DataListTopCell>\n ))}\n </DataListTop>\n <DataListSkeletonRows columnCount={columnCount} numberOfRows={numberOfRows} />\n </DataListRoot>\n );\n}\n","import { DataListCell } from '../data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDate } from '@/utils/date-format';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n return <DataListCell className=\"text-muted-foreground\">{formatDate(timestamp, 'date') ?? '-'}</DataListCell>;\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n return (\n <DataListCell className=\"text-body-sm text-muted-foreground\">{formatDate(timestamp, 'time') ?? '-'}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n const display = input != null ? JSON.stringify(input) : '-';\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n const display = entityId || '-';\n return (\n <DataListCell>\n <Txt as=\"span\" variant=\"body-sm\" className=\"block max-w-full min-w-0 truncate\" title={display}>\n {display}\n </Txt>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell>\n <Txt\n as=\"span\"\n variant=\"body-sm\"\n tone=\"muted\"\n font=\"mono\"\n className=\"block max-w-full min-w-0 truncate\"\n title={display}\n >\n {display}\n </Txt>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as TracesDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as TracesDataList\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { CornerDownRightIcon, DatabaseIcon, ListTreeIcon, RouteIcon, SplitIcon } from 'lucide-react';\nimport type { ComponentType, SVGProps } from 'react';\nimport { DataListCell, DataListTextCell } from '../data-list-cells';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { McpServerIcon } from '@/ds/icons/McpServerIcon';\nimport { MemoryIcon } from '@/ds/icons/MemoryIcon';\nimport { ProcessorIcon } from '@/ds/icons/ProcessorIcon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-muted-foreground' : 'text-placeholder')} aria-hidden />\n </span>\n );\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2 text-body-sm text-muted-foreground\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListTextCell font=\"mono\">{input || '-'}</DataListTextCell>;\n}\n\n// ---------------------------------------------------------------------------\n// OutputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListOutputCellProps {\n output?: string;\n /** Shown instead of `output`, in the error color, when `status` is `'error'`. */\n error?: string;\n status?: string | null;\n}\n\nexport function TracesDataListOutputCell({ output, error, status }: TracesDataListOutputCellProps) {\n const failed = status === 'error';\n const errorColor = failed ? 'text-destructive-foreground' : undefined;\n return (\n <DataListTextCell font=\"mono\" className={errorColor}>\n {(failed ? error : output) || '-'}\n </DataListTextCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TypeCell\n// ---------------------------------------------------------------------------\n\ntype EntityTypeDisplay = { label: string; Icon: ComponentType<SVGProps<SVGSVGElement>> };\n\n// Keys are lowercase `EntityType` enum values (plus legacy `workflow`).\nconst ENTITY_TYPE_DISPLAY: Record<string, EntityTypeDisplay> = {\n agent: { label: 'Agent', Icon: AgentIcon },\n workflow: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_run: { label: 'Workflow', Icon: WorkflowIcon },\n workflow_step: { label: 'Step', Icon: WorkflowIcon },\n tool: { label: 'Tool', Icon: ToolsIcon },\n scorer: { label: 'Scorer', Icon: ScorersIcon },\n classifier: { label: 'Classifier', Icon: SplitIcon },\n memory: { label: 'Memory', Icon: MemoryIcon },\n mcp_server: { label: 'MCP Server', Icon: McpServerIcon },\n input_processor: { label: 'Processor', Icon: ProcessorIcon },\n input_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_processor: { label: 'Processor', Icon: ProcessorIcon },\n output_step_processor: { label: 'Processor', Icon: ProcessorIcon },\n tool_result_processor: { label: 'Processor', Icon: ProcessorIcon },\n rag_ingestion: { label: 'RAG', Icon: DatabaseIcon },\n trajectory: { label: 'Trajectory', Icon: RouteIcon },\n};\n\nexport interface TracesDataListTypeCellProps {\n entityType?: string | null;\n}\n\nexport function TracesDataListTypeCell({ entityType }: TracesDataListTypeCellProps) {\n const display = entityType ? ENTITY_TYPE_DISPLAY[entityType.toLowerCase()] : undefined;\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n {display ? (\n <>\n <display.Icon className=\"size-3.5 shrink-0 text-placeholder\" aria-hidden />\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {display.label}\n </Txt>\n </>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst UNSET_STATUS_CONFIG: { label: string; variant: BadgeVariant } = { label: '-', variant: 'neutral' };\n\nconst STATUS_CONFIG: Record<string, { label: string; variant: BadgeVariant }> = {\n completed: { label: 'OK', variant: 'success' },\n ok: { label: 'OK', variant: 'success' },\n success: { label: 'OK', variant: 'success' },\n error: { label: 'ERR', variant: 'destructive' },\n running: { label: 'RUN', variant: 'neutral' },\n unset: UNSET_STATUS_CONFIG,\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? UNSET_STATUS_CONFIG;\n\n return (\n <DataListCell>\n <Badge size=\"xs\" variant={config.variant}>\n {config.label}\n </Badge>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListCreatedCell, DataListIdCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSortableTopCell } from '../data-list-sortable-top-cell';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListOutputCell,\n TracesDataListTypeCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\n// oxlint-disable-next-line react/only-export-components -- compound component root, same pattern as ScoresDataList\n// eslint-disable-next-line react-refresh/only-export-components -- compound component root, same pattern as ScoresDataList\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n CreatedCell: DataListCreatedCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n OutputCell: TracesDataListOutputCell,\n TypeCell: TracesDataListTypeCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":";;;;;;;;;;;;;;;;AAQA,IAAM,SAAS;CAAC;CAAO;CAAO;CAAO;CAAO;CAAO;AAAK;AACxD,IAAM,eAAe;CAAC;CAAQ;CAAQ;CAAQ;CAAU;CAAU;AAAM;AASxE,SAAS,YAAY,EAAE,OAAO,aAAoD;CAChF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAWA,cAAAA,GAAG,yFAAyF,SAAS;EAChH,OAAO,EAAE,MAAM;CAChB,CAAA;AAEL;;;;;AAWA,SAAgB,qBAAqB,EAAE,aAAa,eAAe,KAAgC;CACjG,MAAM,wBAAwB,QAAgB,WAAmB;EAE/D,OAAO,QADQ,SAAS,SAAS,cAAc,gBAAgB,OAAO,WAC9C,OAAO;CACjC;CAEA,OAAO,MAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,WAClD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAkB,WAAWA,cAAAA,GAAG,qDAAqD,GAAGC,kBAAAA,sBAAsB;EAC3G,UAAA,MAAM,KAAK,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,WAC3C,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAa,OAAO,qBAAqB,QAAQ,MAAM,EAAI,CAAA,EAC/C,GAFK,MAEL,CACf;CACE,GANK,MAML,CACN;AACH;;;;;AAMA,SAAgB,iBAAiB,EAC/B,UAAU,sBACV,eAAe,GACf,KACA,WACwB;CACxB,MAAM,cAAcC,kBAAAA,aAAa,OAAO;CACxC,MAAM,cAAc,YAAY;CAChC,MAAM,kBAAkB,YAAY,KAAI,QAAQ,QAAQ,SAAS,uBAAuB,GAAI,CAAC,CAAC,KAAK,GAAG;CAEtG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,cAAD;EAAc,SAAS;EAAsB;EAAc;EAA3D,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,aAAD,EAAA,UACG,MAAM,KAAK,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,WAC3C,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,iBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAa,OAAO,aAAa,SAAS,aAAa,WAAW,aAAa;GAAI,WAAU;EAAO,CAAA,EACrF,GAFK,MAEL,CAClB,EACU,CAAA,GACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAD;GAAmC;GAA2B;EAAe,CAAA,CACjE;;AAElB;;AC/DA,SAAgB,uBAAuB,EAAE,aAA0C;CACjF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD;EAAc,WAAU;EAAyB,UAAAC,0BAAAA,WAAW,WAAW,MAAM,KAAK;CAAkB,CAAA;AAC7G;AAUA,SAAgB,uBAAuB,EAAE,aAA0C;CACjF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,cAAD;EAAc,WAAU;EAAsC,UAAAC,0BAAAA,WAAW,WAAW,MAAM,KAAK;CAAkB,CAAA;AAErH;AAUA,SAAgB,wBAAwB,EAAE,SAAuC;CAC/E,MAAM,UAAU,SAAS,OAAO,KAAK,UAAU,KAAK,IAAI;CACxD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,YAAAA,KAAD;EACE,IAAG;EACH,SAAQ;EACR,MAAK;EACL,MAAK;EACL,WAAU;EACV,OAAO;EAEN,UAAA;CACE,CAAA,EACO,CAAA;AAElB;AAUA,SAAgB,yBAAyB,EAAE,YAA2C;CACpF,MAAM,UAAU,YAAY;CAC5B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,YAAAA,KAAD;EAAK,IAAG;EAAO,SAAQ;EAAU,WAAU;EAAoC,OAAO;EACnF,UAAA;CACE,CAAA,EACO,CAAA;AAElB;AAUA,SAAgB,wBAAwB,EAAE,SAAuC;CAC/E,MAAM,UAAU,SAAS,OAAO,MAAM,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;CACtG,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,YAAAA,KAAD;EACE,IAAG;EACH,SAAQ;EACR,MAAK;EACL,MAAK;EACL,WAAU;EACV,OAAO;EAEN,UAAA;CACE,CAAA,EACO,CAAA;AAElB;;ACrFA,SAAS,mBAAmB,OAA4C;CACtE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD,EAAc,GAAI,MAAQ,CAAA;AACnC;AAEA,IAAa,iBAAiB,OAAO,OAAO,oBAAoB;CAC9D,KAAKC,kBAAAA;CACL,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,WAAWC,kBAAAA;CACX,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,WAAW;AACb,CAAC;;ACLD,SAAgB,uBAAuB,EAAE,MAAM,cAAc,oBAAiD;CAC5G,MAAM,SAAS,gBAAgB;CAC/B,MAAM,OAAO,SAASC,aAAAA,eAAeC,aAAAA;CACrC,MAAM,QAAQ,SAAS,UAAU;CACjC,MAAM,OACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,cAAY;EAAO,WAAU;EACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAAM,WAAWC,cAAAA,GAAG,mBAAmB,SAAS,0BAA0B,kBAAkB;GAAG,eAAA;EAAa,CAAA;CACxG,CAAA;CAER,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,cAAD;EAAc,WAAU;EAAxB,UAAA,CACG,mBACC,iBAAA,GAAA,kBAAA,KAAA,CAACC,gBAAAA,SAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,gBAAD;GAAgB,SAAA;GAAS,UAAA;EAAqB,CAAA,GAC9C,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,gBAAD,EAAA,UAAiB,MAAsB,CAAA,CAChC,EAAA,CAAA,IAET,MAEF,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAoB,UAAA,QAAQ;EAAU,CAAA,CAC1C;;AAElB;AAUA,SAAgB,wBAAwB,EAAE,SAAuC;CAC/E,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,kBAAD;EAAkB,MAAK;EAAQ,UAAA,SAAS;CAAsB,CAAA;AACvE;AAaA,SAAgB,yBAAyB,EAAE,QAAQ,OAAO,UAAyC;CACjG,MAAM,SAAS,WAAW;CAE1B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,kBAAD;EAAkB,MAAK;EAAO,WAFb,SAAS,gCAAgC,KAAA;EAGtD,WAAA,SAAS,QAAQ,WAAW;CACd,CAAA;AAEtB;AASA,IAAM,sBAAyD;CAC7D,OAAO;EAAE,OAAO;EAAS,MAAMC,wBAAAA;CAAU;CACzC,UAAU;EAAE,OAAO;EAAY,MAAMC,2BAAAA;CAAa;CAClD,cAAc;EAAE,OAAO;EAAY,MAAMA,2BAAAA;CAAa;CACtD,eAAe;EAAE,OAAO;EAAQ,MAAMA,2BAAAA;CAAa;CACnD,MAAM;EAAE,OAAO;EAAQ,MAAMC,wBAAAA;CAAU;CACvC,QAAQ;EAAE,OAAO;EAAU,MAAMC,0BAAAA;CAAY;CAC7C,YAAY;EAAE,OAAO;EAAc,MAAMC,aAAAA;CAAU;CACnD,QAAQ;EAAE,OAAO;EAAU,MAAMC,yBAAAA;CAAW;CAC5C,YAAY;EAAE,OAAO;EAAc,MAAMC,4BAAAA;CAAc;CACvD,iBAAiB;EAAE,OAAO;EAAa,MAAMC,4BAAAA;CAAc;CAC3D,sBAAsB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CAChE,kBAAkB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CAC5D,uBAAuB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CACjE,uBAAuB;EAAE,OAAO;EAAa,MAAMA,4BAAAA;CAAc;CACjE,eAAe;EAAE,OAAO;EAAO,MAAMC,aAAAA;CAAa;CAClD,YAAY;EAAE,OAAO;EAAc,MAAMC,aAAAA;CAAU;AACrD;AAMA,SAAgB,uBAAuB,EAAE,cAA2C;CAClF,MAAM,UAAU,aAAa,oBAAoB,WAAW,YAAY,KAAK,KAAA;CAE7E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACd,kBAAAA,cAAD;EAAc,WAAU;EACrB,UAAA,UACC,iBAAA,GAAA,kBAAA,KAAA,CAAAe,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAQ,MAAT;GAAc,WAAU;GAAqC,eAAA;EAAa,CAAA,GAC1E,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAU,WAAU;GACxC,UAAA,QAAQ;EACN,CAAA,CACL,EAAA,CAAA,IAEF;CAEU,CAAA;AAElB;AAMA,IAAM,sBAAgE;CAAE,OAAO;CAAK,SAAS;AAAU;AAEvG,IAAM,gBAA0E;CAC9E,WAAW;EAAE,OAAO;EAAM,SAAS;CAAU;CAC7C,IAAI;EAAE,OAAO;EAAM,SAAS;CAAU;CACtC,SAAS;EAAE,OAAO;EAAM,SAAS;CAAU;CAC3C,OAAO;EAAE,OAAO;EAAO,SAAS;CAAc;CAC9C,SAAS;EAAE,OAAO;EAAO,SAAS;CAAU;CAC5C,OAAO;AACT;AAMA,SAAgB,yBAAyB,EAAE,UAAyC;CAElF,MAAM,SAAS,eADF,UAAU,QAAA,CAAS,YACH,MAAQ;CAErC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAChB,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACiB,cAAAA,OAAD;EAAO,MAAK;EAAK,SAAS,OAAO;EAC9B,UAAA,OAAO;CACH,CAAA,EACK,CAAA;AAElB;;AC/IA,SAAS,mBAAmB,OAA4C;CACtE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,cAAD,EAAc,GAAI,MAAQ,CAAA;AACnC;AAEA,IAAa,iBAAiB,OAAO,OAAO,oBAAoB;CAC9D,KAAKC,kBAAAA;CACL,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,oBAAoBC,kBAAAA;CACpB,WAAWC,kBAAAA;CACX,SAASC,kBAAAA;CACT,WAAWC,kBAAAA;CACX,YAAYC,kBAAAA;CACZ,QAAQC,kBAAAA;CACR,QAAQC,kBAAAA;CACR,aAAaC,kBAAAA;CACb,UAAU;CACV,WAAW;CACX,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,iBAAiBC,kBAAAA;AACnB,CAAC"}
@@ -4,7 +4,7 @@ const require_icons_AgentIcon = require("./icons/AgentIcon.cjs.js");
4
4
  const require_icons_ToolsIcon = require("./icons/ToolsIcon.cjs.js");
5
5
  const require_icons_WorkflowIcon = require("./icons/WorkflowIcon.cjs.js");
6
6
  const require_Badge = require("./Badge-DZ6r6bcw.cjs");
7
- const require_data_list = require("./data-list-jF9pJ7HH.cjs");
7
+ const require_data_list = require("./data-list-v93EXSHc.cjs");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  // src/ds/components/LogsDataList/logs-data-list-cells.tsx
10
10
  var LEVEL_VARIANT = {
@@ -98,4 +98,4 @@ Object.defineProperty(exports, "LogsDataList", {
98
98
  }
99
99
  });
100
100
 
101
- //# sourceMappingURL=LogsDataList-ia_C-bSJ.cjs.map
101
+ //# sourceMappingURL=LogsDataList-DQ-3y06q.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"LogsDataList-ia_C-bSJ.cjs","names":["DataListCell","Badge","cn","AgentIcon","WorkflowIcon","ToolsIcon","Txt","DataListTextCell","DataListRoot","DataListTop","DataListTopCell","DataListSortableTopCell","DataListTopCellWithTooltip","DataListTopCellSmart","DataListRowWrapper","DataListRowButton","DataListRowLink","DataListSpacer","DataListNoMatch","DataListDateCell","DataListTimeCell","DataListNextPageLoading"],"sources":["../src/ds/components/LogsDataList/logs-data-list-cells.tsx","../src/ds/components/LogsDataList/logs-data-list.tsx"],"sourcesContent":["import { Badge } from '../Badge';\nimport type { BadgeVariant } from '../Badge';\nimport { DataListCell, DataListTextCell } from '../DataList/data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nconst LEVEL_VARIANT: Record<LogLevel, BadgeVariant> = {\n debug: 'neutral',\n info: 'info',\n warn: 'warning',\n error: 'destructive',\n fatal: 'destructive',\n};\n\n// ---------------------------------------------------------------------------\n// LevelCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListLevelCellProps {\n level: LogLevel;\n}\n\nexport function LogsDataListLevelCell({ level }: LogsDataListLevelCellProps) {\n return (\n <DataListCell>\n <Badge variant={LEVEL_VARIANT[level]}>{level}</Badge>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-placeholder', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case 'agent':\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case 'workflow_run':\n return <WorkflowIcon className={iconClass} aria-hidden />;\n case 'tool':\n return <ToolsIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface LogsDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function LogsDataListEntityCell({ entityType, entityName }: LogsDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? (\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {entityName}\n </Txt>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// MessageCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListMessageCellProps {\n message: string;\n}\n\nexport function LogsDataListMessageCell({ message }: LogsDataListMessageCellProps) {\n return (\n <DataListCell className=\"min-w-0 truncate font-mono text-body-sm text-muted-foreground\">{message}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// DataCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListDataCellProps {\n data?: Record<string, unknown> | null;\n}\n\nexport function LogsDataListDataCell({ data }: LogsDataListDataCellProps) {\n if (!data || Object.keys(data).length === 0) {\n return <DataListCell>{null}</DataListCell>;\n }\n\n const summary = Object.entries(data)\n .map(([k, v]) => {\n if (typeof v === 'string') return `${k}: ${v}`;\n try {\n return `${k}: ${JSON.stringify(v)}`;\n } catch {\n return `${k}: <unserializable>`;\n }\n })\n .join(', ');\n\n return <DataListTextCell font=\"mono\">{summary}</DataListTextCell>;\n}\n","import { DataListDateCell, DataListTimeCell } from '../DataList/data-list-cells';\nimport { DataListNextPageLoading } from '../DataList/data-list-next-page-loading';\nimport { DataListNoMatch } from '../DataList/data-list-no-match';\nimport { DataListRoot } from '../DataList/data-list-root';\nimport { DataListRowButton } from '../DataList/data-list-row-button';\nimport { DataListRowLink } from '../DataList/data-list-row-link';\nimport { DataListRowWrapper } from '../DataList/data-list-row-wrapper';\nimport { DataListSortableTopCell } from '../DataList/data-list-sortable-top-cell';\nimport { DataListSpacer } from '../DataList/data-list-spacer';\nimport { DataListTop } from '../DataList/data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip, DataListTopCellSmart } from '../DataList/data-list-top-cell';\nimport {\n LogsDataListLevelCell,\n LogsDataListEntityCell,\n LogsDataListMessageCell,\n LogsDataListDataCell,\n} from './logs-data-list-cells';\n\nexport const LogsDataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n Spacer: DataListSpacer,\n NoMatch: DataListNoMatch,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n LevelCell: LogsDataListLevelCell,\n EntityCell: LogsDataListEntityCell,\n MessageCell: LogsDataListMessageCell,\n DataCell: LogsDataListDataCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":";;;;;;;;;AAWA,IAAM,gBAAgD;CACpD,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAUA,SAAgB,sBAAsB,EAAE,SAAqC;CAC3E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;EAAO,SAAS,cAAc;EAAS,UAAA;CAAa,CAAA,EACxC,CAAA;AAElB;AAMA,SAAS,eAAe,EAAE,YAAY,aAAyD;CAC7F,MAAM,YAAYC,cAAAA,GAAG,sCAAsC,SAAS;CAGpE,QAF6B,WAAW,YAEhC,GAAR;EACE,KAAK,SACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,KAAK;EACL,KAAK,gBACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,cAAD;GAAc,WAAW;GAAW,eAAA;EAAa,CAAA;EAC1D,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,SACE,OAAO;CACX;AACF;AAOA,SAAgB,uBAAuB,EAAE,YAAY,cAA2C;CAG9F,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACL,kBAAAA,cAAD;EAAc,WAAU;EAAxB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD,EAAgB,YAJP,cAAc,GAIY,CAAA,GAClC,aACC,iBAAA,GAAA,kBAAA,IAAA,CAACM,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAU,WAAU;GACxC,UAAA;EACE,CAAA,IAEL,GAEU;;AAElB;AAUA,SAAgB,wBAAwB,EAAE,WAAyC;CACjF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACN,kBAAAA,cAAD;EAAc,WAAU;EAAiE,UAAA;CAAsB,CAAA;AAEnH;AAUA,SAAgB,qBAAqB,EAAE,QAAmC;CACxE,IAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,GACxC,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,cAAD,EAAA,UAAe,KAAmB,CAAA;CAG3C,MAAM,UAAU,OAAO,QAAQ,IAAI,CAAC,CACjC,KAAK,CAAC,GAAG,OAAO;EACf,IAAI,OAAO,MAAM,UAAU,OAAO,GAAG,EAAE,IAAI;EAC3C,IAAI;GACF,OAAO,GAAG,EAAE,IAAI,KAAK,UAAU,CAAC;EAClC,QAAQ;GACN,OAAO,GAAG,EAAE;EACd;CACF,CAAC,CAAC,CACD,KAAK,IAAI;CAEZ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACO,kBAAAA,kBAAD;EAAkB,MAAK;EAAQ,UAAA;CAA0B,CAAA;AAClE;;ACnGA,IAAa,eAAe,OAAO,OAAOC,kBAAAA,cAAc;CACtD,KAAKC,kBAAAA;CACL,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,oBAAoBC,kBAAAA;CACpB,cAAcC,kBAAAA;CACd,YAAYC,kBAAAA;CACZ,WAAWC,kBAAAA;CACX,SAASC,kBAAAA;CACT,QAAQC,kBAAAA;CACR,SAASC,kBAAAA;CACT,UAAUC,kBAAAA;CACV,UAAUC,kBAAAA;CACV,WAAW;CACX,YAAY;CACZ,aAAa;CACb,UAAU;CACV,iBAAiBC,kBAAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"LogsDataList-DQ-3y06q.cjs","names":["DataListCell","Badge","cn","AgentIcon","WorkflowIcon","ToolsIcon","Txt","DataListTextCell","DataListRoot","DataListTop","DataListTopCell","DataListSortableTopCell","DataListTopCellWithTooltip","DataListTopCellSmart","DataListRowWrapper","DataListRowButton","DataListRowLink","DataListSpacer","DataListNoMatch","DataListDateCell","DataListTimeCell","DataListNextPageLoading"],"sources":["../src/ds/components/LogsDataList/logs-data-list-cells.tsx","../src/ds/components/LogsDataList/logs-data-list.tsx"],"sourcesContent":["import { Badge } from '../Badge';\nimport type { BadgeVariant } from '../Badge';\nimport { DataListCell, DataListTextCell } from '../DataList/data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nconst LEVEL_VARIANT: Record<LogLevel, BadgeVariant> = {\n debug: 'neutral',\n info: 'info',\n warn: 'warning',\n error: 'destructive',\n fatal: 'destructive',\n};\n\n// ---------------------------------------------------------------------------\n// LevelCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListLevelCellProps {\n level: LogLevel;\n}\n\nexport function LogsDataListLevelCell({ level }: LogsDataListLevelCellProps) {\n return (\n <DataListCell>\n <Badge variant={LEVEL_VARIANT[level]}>{level}</Badge>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-placeholder', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case 'agent':\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case 'workflow_run':\n return <WorkflowIcon className={iconClass} aria-hidden />;\n case 'tool':\n return <ToolsIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface LogsDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function LogsDataListEntityCell({ entityType, entityName }: LogsDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? (\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {entityName}\n </Txt>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// MessageCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListMessageCellProps {\n message: string;\n}\n\nexport function LogsDataListMessageCell({ message }: LogsDataListMessageCellProps) {\n return (\n <DataListCell className=\"min-w-0 truncate font-mono text-body-sm text-muted-foreground\">{message}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// DataCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListDataCellProps {\n data?: Record<string, unknown> | null;\n}\n\nexport function LogsDataListDataCell({ data }: LogsDataListDataCellProps) {\n if (!data || Object.keys(data).length === 0) {\n return <DataListCell>{null}</DataListCell>;\n }\n\n const summary = Object.entries(data)\n .map(([k, v]) => {\n if (typeof v === 'string') return `${k}: ${v}`;\n try {\n return `${k}: ${JSON.stringify(v)}`;\n } catch {\n return `${k}: <unserializable>`;\n }\n })\n .join(', ');\n\n return <DataListTextCell font=\"mono\">{summary}</DataListTextCell>;\n}\n","import { DataListDateCell, DataListTimeCell } from '../DataList/data-list-cells';\nimport { DataListNextPageLoading } from '../DataList/data-list-next-page-loading';\nimport { DataListNoMatch } from '../DataList/data-list-no-match';\nimport { DataListRoot } from '../DataList/data-list-root';\nimport { DataListRowButton } from '../DataList/data-list-row-button';\nimport { DataListRowLink } from '../DataList/data-list-row-link';\nimport { DataListRowWrapper } from '../DataList/data-list-row-wrapper';\nimport { DataListSortableTopCell } from '../DataList/data-list-sortable-top-cell';\nimport { DataListSpacer } from '../DataList/data-list-spacer';\nimport { DataListTop } from '../DataList/data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip, DataListTopCellSmart } from '../DataList/data-list-top-cell';\nimport {\n LogsDataListLevelCell,\n LogsDataListEntityCell,\n LogsDataListMessageCell,\n LogsDataListDataCell,\n} from './logs-data-list-cells';\n\nexport const LogsDataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n Spacer: DataListSpacer,\n NoMatch: DataListNoMatch,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n LevelCell: LogsDataListLevelCell,\n EntityCell: LogsDataListEntityCell,\n MessageCell: LogsDataListMessageCell,\n DataCell: LogsDataListDataCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":";;;;;;;;;AAWA,IAAM,gBAAgD;CACpD,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAUA,SAAgB,sBAAsB,EAAE,SAAqC;CAC3E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;EAAO,SAAS,cAAc;EAAS,UAAA;CAAa,CAAA,EACxC,CAAA;AAElB;AAMA,SAAS,eAAe,EAAE,YAAY,aAAyD;CAC7F,MAAM,YAAYC,cAAAA,GAAG,sCAAsC,SAAS;CAGpE,QAF6B,WAAW,YAEhC,GAAR;EACE,KAAK,SACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,KAAK;EACL,KAAK,gBACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,cAAD;GAAc,WAAW;GAAW,eAAA;EAAa,CAAA;EAC1D,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,SACE,OAAO;CACX;AACF;AAOA,SAAgB,uBAAuB,EAAE,YAAY,cAA2C;CAG9F,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACL,kBAAAA,cAAD;EAAc,WAAU;EAAxB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD,EAAgB,YAJP,cAAc,GAIY,CAAA,GAClC,aACC,iBAAA,GAAA,kBAAA,IAAA,CAACM,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAU,WAAU;GACxC,UAAA;EACE,CAAA,IAEL,GAEU;;AAElB;AAUA,SAAgB,wBAAwB,EAAE,WAAyC;CACjF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACN,kBAAAA,cAAD;EAAc,WAAU;EAAiE,UAAA;CAAsB,CAAA;AAEnH;AAUA,SAAgB,qBAAqB,EAAE,QAAmC;CACxE,IAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,GACxC,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,cAAD,EAAA,UAAe,KAAmB,CAAA;CAG3C,MAAM,UAAU,OAAO,QAAQ,IAAI,CAAC,CACjC,KAAK,CAAC,GAAG,OAAO;EACf,IAAI,OAAO,MAAM,UAAU,OAAO,GAAG,EAAE,IAAI;EAC3C,IAAI;GACF,OAAO,GAAG,EAAE,IAAI,KAAK,UAAU,CAAC;EAClC,QAAQ;GACN,OAAO,GAAG,EAAE;EACd;CACF,CAAC,CAAC,CACD,KAAK,IAAI;CAEZ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACO,kBAAAA,kBAAD;EAAkB,MAAK;EAAQ,UAAA;CAA0B,CAAA;AAClE;;ACnGA,IAAa,eAAe,OAAO,OAAOC,kBAAAA,cAAc;CACtD,KAAKC,kBAAAA;CACL,SAASC,kBAAAA;CACT,iBAAiBC,kBAAAA;CACjB,oBAAoBC,kBAAAA;CACpB,cAAcC,kBAAAA;CACd,YAAYC,kBAAAA;CACZ,WAAWC,kBAAAA;CACX,SAASC,kBAAAA;CACT,QAAQC,kBAAAA;CACR,SAASC,kBAAAA;CACT,UAAUC,kBAAAA;CACV,UAAUC,kBAAAA;CACV,WAAW;CACX,YAAY;CACZ,aAAa;CACb,UAAU;CACV,iBAAiBC,kBAAAA;AACnB,CAAC"}
@@ -4,7 +4,7 @@ import { AgentIcon } from "./icons/AgentIcon.es.js";
4
4
  import { ToolsIcon } from "./icons/ToolsIcon.es.js";
5
5
  import { WorkflowIcon } from "./icons/WorkflowIcon.es.js";
6
6
  import { t as Badge } from "./Badge-aVu5iGAF.js";
7
- import { a as DataListSpacer, b as DataListTextCell, c as DataListTopCellSmart, d as DataListRowLink, f as DataListRowButton, g as DataListCell, h as DataListNextPageLoading, l as DataListTopCellWithTooltip, m as DataListNoMatch, n as DataListTop, o as DataListSortableTopCell, p as DataListRoot, s as DataListTopCell, u as DataListRowWrapper, v as DataListDateCell, x as DataListTimeCell } from "./data-list-YfADUlqZ.js";
7
+ import { a as DataListSpacer, b as DataListTextCell, c as DataListTopCellSmart, d as DataListRowLink, f as DataListRowButton, g as DataListCell, h as DataListNextPageLoading, l as DataListTopCellWithTooltip, m as DataListNoMatch, n as DataListTop, o as DataListSortableTopCell, p as DataListRoot, s as DataListTopCell, u as DataListRowWrapper, v as DataListDateCell, x as DataListTimeCell } from "./data-list-DjSo5V1C.js";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  // src/ds/components/LogsDataList/logs-data-list-cells.tsx
10
10
  var LEVEL_VARIANT = {
@@ -93,4 +93,4 @@ var LogsDataList = Object.assign(DataListRoot, {
93
93
  });
94
94
  export { LogsDataList as t };
95
95
 
96
- //# sourceMappingURL=LogsDataList-FQ921Sml.js.map
96
+ //# sourceMappingURL=LogsDataList-DyVM83Rx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LogsDataList-FQ921Sml.js","names":[],"sources":["../src/ds/components/LogsDataList/logs-data-list-cells.tsx","../src/ds/components/LogsDataList/logs-data-list.tsx"],"sourcesContent":["import { Badge } from '../Badge';\nimport type { BadgeVariant } from '../Badge';\nimport { DataListCell, DataListTextCell } from '../DataList/data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nconst LEVEL_VARIANT: Record<LogLevel, BadgeVariant> = {\n debug: 'neutral',\n info: 'info',\n warn: 'warning',\n error: 'destructive',\n fatal: 'destructive',\n};\n\n// ---------------------------------------------------------------------------\n// LevelCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListLevelCellProps {\n level: LogLevel;\n}\n\nexport function LogsDataListLevelCell({ level }: LogsDataListLevelCellProps) {\n return (\n <DataListCell>\n <Badge variant={LEVEL_VARIANT[level]}>{level}</Badge>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-placeholder', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case 'agent':\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case 'workflow_run':\n return <WorkflowIcon className={iconClass} aria-hidden />;\n case 'tool':\n return <ToolsIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface LogsDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function LogsDataListEntityCell({ entityType, entityName }: LogsDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? (\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {entityName}\n </Txt>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// MessageCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListMessageCellProps {\n message: string;\n}\n\nexport function LogsDataListMessageCell({ message }: LogsDataListMessageCellProps) {\n return (\n <DataListCell className=\"min-w-0 truncate font-mono text-body-sm text-muted-foreground\">{message}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// DataCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListDataCellProps {\n data?: Record<string, unknown> | null;\n}\n\nexport function LogsDataListDataCell({ data }: LogsDataListDataCellProps) {\n if (!data || Object.keys(data).length === 0) {\n return <DataListCell>{null}</DataListCell>;\n }\n\n const summary = Object.entries(data)\n .map(([k, v]) => {\n if (typeof v === 'string') return `${k}: ${v}`;\n try {\n return `${k}: ${JSON.stringify(v)}`;\n } catch {\n return `${k}: <unserializable>`;\n }\n })\n .join(', ');\n\n return <DataListTextCell font=\"mono\">{summary}</DataListTextCell>;\n}\n","import { DataListDateCell, DataListTimeCell } from '../DataList/data-list-cells';\nimport { DataListNextPageLoading } from '../DataList/data-list-next-page-loading';\nimport { DataListNoMatch } from '../DataList/data-list-no-match';\nimport { DataListRoot } from '../DataList/data-list-root';\nimport { DataListRowButton } from '../DataList/data-list-row-button';\nimport { DataListRowLink } from '../DataList/data-list-row-link';\nimport { DataListRowWrapper } from '../DataList/data-list-row-wrapper';\nimport { DataListSortableTopCell } from '../DataList/data-list-sortable-top-cell';\nimport { DataListSpacer } from '../DataList/data-list-spacer';\nimport { DataListTop } from '../DataList/data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip, DataListTopCellSmart } from '../DataList/data-list-top-cell';\nimport {\n LogsDataListLevelCell,\n LogsDataListEntityCell,\n LogsDataListMessageCell,\n LogsDataListDataCell,\n} from './logs-data-list-cells';\n\nexport const LogsDataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n Spacer: DataListSpacer,\n NoMatch: DataListNoMatch,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n LevelCell: LogsDataListLevelCell,\n EntityCell: LogsDataListEntityCell,\n MessageCell: LogsDataListMessageCell,\n DataCell: LogsDataListDataCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":";;;;;;;;;AAWA,IAAM,gBAAgD;CACpD,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAUA,SAAgB,sBAAsB,EAAE,SAAqC;CAC3E,OACE,oBAAC,cAAD,EAAA,UACE,oBAAC,OAAD;EAAO,SAAS,cAAc;EAAS,UAAA;CAAa,CAAA,EACxC,CAAA;AAElB;AAMA,SAAS,eAAe,EAAE,YAAY,aAAyD;CAC7F,MAAM,YAAY,GAAG,sCAAsC,SAAS;CAGpE,QAF6B,WAAW,YAEhC,GAAR;EACE,KAAK,SACH,OAAO,oBAAC,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,KAAK;EACL,KAAK,gBACH,OAAO,oBAAC,cAAD;GAAc,WAAW;GAAW,eAAA;EAAa,CAAA;EAC1D,KAAK,QACH,OAAO,oBAAC,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,SACE,OAAO;CACX;AACF;AAOA,SAAgB,uBAAuB,EAAE,YAAY,cAA2C;CAG9F,OACE,qBAAC,cAAD;EAAc,WAAU;EAAxB,UAAA,CACE,oBAAC,gBAAD,EAAgB,YAJP,cAAc,GAIY,CAAA,GAClC,aACC,oBAAC,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAU,WAAU;GACxC,UAAA;EACE,CAAA,IAEL,GAEU;;AAElB;AAUA,SAAgB,wBAAwB,EAAE,WAAyC;CACjF,OACE,oBAAC,cAAD;EAAc,WAAU;EAAiE,UAAA;CAAsB,CAAA;AAEnH;AAUA,SAAgB,qBAAqB,EAAE,QAAmC;CACxE,IAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,GACxC,OAAO,oBAAC,cAAD,EAAA,UAAe,KAAmB,CAAA;CAG3C,MAAM,UAAU,OAAO,QAAQ,IAAI,CAAC,CACjC,KAAK,CAAC,GAAG,OAAO;EACf,IAAI,OAAO,MAAM,UAAU,OAAO,GAAG,EAAE,IAAI;EAC3C,IAAI;GACF,OAAO,GAAG,EAAE,IAAI,KAAK,UAAU,CAAC;EAClC,QAAQ;GACN,OAAO,GAAG,EAAE;EACd;CACF,CAAC,CAAC,CACD,KAAK,IAAI;CAEZ,OAAO,oBAAC,kBAAD;EAAkB,MAAK;EAAQ,UAAA;CAA0B,CAAA;AAClE;;ACnGA,IAAa,eAAe,OAAO,OAAO,cAAc;CACtD,KAAK;CACL,SAAS;CACT,iBAAiB;CACjB,oBAAoB;CACpB,cAAc;CACd,YAAY;CACZ,WAAW;CACX,SAAS;CACT,QAAQ;CACR,SAAS;CACT,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,aAAa;CACb,UAAU;CACV,iBAAiB;AACnB,CAAC"}
1
+ {"version":3,"file":"LogsDataList-DyVM83Rx.js","names":[],"sources":["../src/ds/components/LogsDataList/logs-data-list-cells.tsx","../src/ds/components/LogsDataList/logs-data-list.tsx"],"sourcesContent":["import { Badge } from '../Badge';\nimport type { BadgeVariant } from '../Badge';\nimport { DataListCell, DataListTextCell } from '../DataList/data-list-cells';\nimport { Txt } from '@/ds/components/Txt';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nconst LEVEL_VARIANT: Record<LogLevel, BadgeVariant> = {\n debug: 'neutral',\n info: 'info',\n warn: 'warning',\n error: 'destructive',\n fatal: 'destructive',\n};\n\n// ---------------------------------------------------------------------------\n// LevelCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListLevelCellProps {\n level: LogLevel;\n}\n\nexport function LogsDataListLevelCell({ level }: LogsDataListLevelCellProps) {\n return (\n <DataListCell>\n <Badge variant={LEVEL_VARIANT[level]}>{level}</Badge>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-placeholder', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case 'agent':\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case 'workflow_run':\n return <WorkflowIcon className={iconClass} aria-hidden />;\n case 'tool':\n return <ToolsIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface LogsDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function LogsDataListEntityCell({ entityType, entityName }: LogsDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? (\n <Txt as=\"span\" variant=\"body-sm\" className=\"min-w-0 truncate\">\n {entityName}\n </Txt>\n ) : (\n '-'\n )}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// MessageCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListMessageCellProps {\n message: string;\n}\n\nexport function LogsDataListMessageCell({ message }: LogsDataListMessageCellProps) {\n return (\n <DataListCell className=\"min-w-0 truncate font-mono text-body-sm text-muted-foreground\">{message}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// DataCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListDataCellProps {\n data?: Record<string, unknown> | null;\n}\n\nexport function LogsDataListDataCell({ data }: LogsDataListDataCellProps) {\n if (!data || Object.keys(data).length === 0) {\n return <DataListCell>{null}</DataListCell>;\n }\n\n const summary = Object.entries(data)\n .map(([k, v]) => {\n if (typeof v === 'string') return `${k}: ${v}`;\n try {\n return `${k}: ${JSON.stringify(v)}`;\n } catch {\n return `${k}: <unserializable>`;\n }\n })\n .join(', ');\n\n return <DataListTextCell font=\"mono\">{summary}</DataListTextCell>;\n}\n","import { DataListDateCell, DataListTimeCell } from '../DataList/data-list-cells';\nimport { DataListNextPageLoading } from '../DataList/data-list-next-page-loading';\nimport { DataListNoMatch } from '../DataList/data-list-no-match';\nimport { DataListRoot } from '../DataList/data-list-root';\nimport { DataListRowButton } from '../DataList/data-list-row-button';\nimport { DataListRowLink } from '../DataList/data-list-row-link';\nimport { DataListRowWrapper } from '../DataList/data-list-row-wrapper';\nimport { DataListSortableTopCell } from '../DataList/data-list-sortable-top-cell';\nimport { DataListSpacer } from '../DataList/data-list-spacer';\nimport { DataListTop } from '../DataList/data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip, DataListTopCellSmart } from '../DataList/data-list-top-cell';\nimport {\n LogsDataListLevelCell,\n LogsDataListEntityCell,\n LogsDataListMessageCell,\n LogsDataListDataCell,\n} from './logs-data-list-cells';\n\nexport const LogsDataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n Spacer: DataListSpacer,\n NoMatch: DataListNoMatch,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n LevelCell: LogsDataListLevelCell,\n EntityCell: LogsDataListEntityCell,\n MessageCell: LogsDataListMessageCell,\n DataCell: LogsDataListDataCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"mappings":";;;;;;;;;AAWA,IAAM,gBAAgD;CACpD,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAUA,SAAgB,sBAAsB,EAAE,SAAqC;CAC3E,OACE,oBAAC,cAAD,EAAA,UACE,oBAAC,OAAD;EAAO,SAAS,cAAc;EAAS,UAAA;CAAa,CAAA,EACxC,CAAA;AAElB;AAMA,SAAS,eAAe,EAAE,YAAY,aAAyD;CAC7F,MAAM,YAAY,GAAG,sCAAsC,SAAS;CAGpE,QAF6B,WAAW,YAEhC,GAAR;EACE,KAAK,SACH,OAAO,oBAAC,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,KAAK;EACL,KAAK,gBACH,OAAO,oBAAC,cAAD;GAAc,WAAW;GAAW,eAAA;EAAa,CAAA;EAC1D,KAAK,QACH,OAAO,oBAAC,WAAD;GAAW,WAAW;GAAW,eAAA;EAAa,CAAA;EACvD,SACE,OAAO;CACX;AACF;AAOA,SAAgB,uBAAuB,EAAE,YAAY,cAA2C;CAG9F,OACE,qBAAC,cAAD;EAAc,WAAU;EAAxB,UAAA,CACE,oBAAC,gBAAD,EAAgB,YAJP,cAAc,GAIY,CAAA,GAClC,aACC,oBAAC,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAU,WAAU;GACxC,UAAA;EACE,CAAA,IAEL,GAEU;;AAElB;AAUA,SAAgB,wBAAwB,EAAE,WAAyC;CACjF,OACE,oBAAC,cAAD;EAAc,WAAU;EAAiE,UAAA;CAAsB,CAAA;AAEnH;AAUA,SAAgB,qBAAqB,EAAE,QAAmC;CACxE,IAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,GACxC,OAAO,oBAAC,cAAD,EAAA,UAAe,KAAmB,CAAA;CAG3C,MAAM,UAAU,OAAO,QAAQ,IAAI,CAAC,CACjC,KAAK,CAAC,GAAG,OAAO;EACf,IAAI,OAAO,MAAM,UAAU,OAAO,GAAG,EAAE,IAAI;EAC3C,IAAI;GACF,OAAO,GAAG,EAAE,IAAI,KAAK,UAAU,CAAC;EAClC,QAAQ;GACN,OAAO,GAAG,EAAE;EACd;CACF,CAAC,CAAC,CACD,KAAK,IAAI;CAEZ,OAAO,oBAAC,kBAAD;EAAkB,MAAK;EAAQ,UAAA;CAA0B,CAAA;AAClE;;ACnGA,IAAa,eAAe,OAAO,OAAO,cAAc;CACtD,KAAK;CACL,SAAS;CACT,iBAAiB;CACjB,oBAAoB;CACpB,cAAc;CACd,YAAY;CACZ,WAAW;CACX,SAAS;CACT,QAAQ;CACR,SAAS;CACT,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,aAAa;CACb,UAAU;CACV,iBAAiB;AACnB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_data_list = require("../data-list-jF9pJ7HH.cjs");
3
- const require_DataList = require("../DataList-D7bShtPK.cjs");
4
- const require_tabbed_container = require("../tabbed-container-DKFLulGV.cjs");
2
+ const require_data_list = require("../data-list-v93EXSHc.cjs");
3
+ const require_DataList = require("../DataList-DlmchFgW.cjs");
4
+ const require_tabbed_container = require("../tabbed-container-Dt9F_Lb5.cjs");
5
5
  const require_use_data_list_keyboard = require("../use-data-list-keyboard-BCLBdaWR.cjs");
6
6
  exports.DataList = require_data_list.DataList;
7
7
  exports.DataListSkeleton = require_DataList.DataListSkeleton;
@@ -1,5 +1,5 @@
1
- import { t as DataList } from "../data-list-YfADUlqZ.js";
2
- import { i as DataListSkeletonRows, n as ScoresDataList, r as DataListSkeleton, t as TracesDataList } from "../DataList-CYjnJkNE.js";
3
- import { t as TabbedContainer } from "../tabbed-container-Bkqv61EW.js";
1
+ import { t as DataList } from "../data-list-DjSo5V1C.js";
2
+ import { i as DataListSkeletonRows, n as ScoresDataList, r as DataListSkeleton, t as TracesDataList } from "../DataList-Bg533xtT.js";
3
+ import { t as TabbedContainer } from "../tabbed-container-DHmygeKi.js";
4
4
  import { t as useDataListKeyboard } from "../use-data-list-keyboard-fJXq2T3y.js";
5
5
  export { DataList, DataListSkeleton, DataListSkeletonRows, ScoresDataList, TabbedContainer, TracesDataList, useDataListKeyboard };
@@ -6,7 +6,7 @@ const require_hooks_use_copy_to_clipboard = require("../hooks/use-copy-to-clipbo
6
6
  const require_Notice = require("../Notice-DWNeCe-t.cjs");
7
7
  const require_components_Field = require("./Field.cjs.js");
8
8
  const require_input_group = require("../input-group-uDpFNnSW.cjs");
9
- const require_data_list = require("../data-list-jF9pJ7HH.cjs");
9
+ const require_data_list = require("../data-list-v93EXSHc.cjs");
10
10
  const require_env_file = require("../env-file-CuxvmI0O.cjs");
11
11
  let react = require("react");
12
12
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -5,7 +5,7 @@ import { useCopyToClipboard } from "../hooks/use-copy-to-clipboard.es.js";
5
5
  import { t as Notice } from "../Notice-CyKngbbv.js";
6
6
  import { Field, FieldError, FieldLabel } from "./Field.es.js";
7
7
  import { i as InputGroupInput, n as InputGroupAddon, r as InputGroupButton, t as InputGroup } from "../input-group-g85FYfze.js";
8
- import { t as DataList } from "../data-list-YfADUlqZ.js";
8
+ import { t as DataList } from "../data-list-DjSo5V1C.js";
9
9
  import { t as DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE } from "../env-file-Dla5M95q.js";
10
10
  import { createContext, use, useMemo, useState } from "react";
11
11
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_DataList = require("../DataList-D7bShtPK.cjs");
3
- const require_LogsDataList = require("../LogsDataList-ia_C-bSJ.cjs");
2
+ const require_DataList = require("../DataList-DlmchFgW.cjs");
3
+ const require_LogsDataList = require("../LogsDataList-DQ-3y06q.cjs");
4
4
  exports.LogsDataList = require_LogsDataList.LogsDataList;
5
5
  exports.LogsDataListSkeleton = require_DataList.DataListSkeleton;
@@ -1,3 +1,3 @@
1
- import { r as DataListSkeleton } from "../DataList-CYjnJkNE.js";
2
- import { t as LogsDataList } from "../LogsDataList-FQ921Sml.js";
1
+ import { r as DataListSkeleton } from "../DataList-Bg533xtT.js";
2
+ import { t as LogsDataList } from "../LogsDataList-DyVM83Rx.js";
3
3
  export { LogsDataList, DataListSkeleton as LogsDataListSkeleton };
@@ -117,7 +117,7 @@ function MetricsTable({ columns, rows, getRowKey, sort, defaultSort, onSortChang
117
117
  onKeyDown: onRowClick ? onKeyDown : void 0,
118
118
  onMouseEnter: onRowHover ? () => onRowHover(row) : void 0,
119
119
  onMouseLeave: onRowHover ? () => onRowHover(void 0) : void 0,
120
- className: require_utils.cn("relative grid items-center gap-3 rounded px-3 py-2 text-body-sm text-foreground transition-opacity duration-150", ROW_LINE, onRowClick && require_utils.cn("cursor-pointer", FOCUS), isRowDimmed?.(row) && "opacity-40"),
120
+ className: require_utils.cn("relative grid items-center gap-3 rounded px-3 pt-2 pb-2.25 text-body-sm text-foreground transition-opacity duration-150", ROW_LINE, onRowClick && require_utils.cn("cursor-pointer", FOCUS), isRowDimmed?.(row) && "opacity-40"),
121
121
  style: template,
122
122
  children: columns.map((column) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
123
123
  role: "cell",
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsTable.cjs.js","names":["ArrowUpIcon","ArrowDownIcon","useState","ScrollArea","cn"],"sources":["../../src/ds/components/MetricsTable/metrics-table.tsx"],"sourcesContent":["import { ArrowDownIcon, ArrowUpIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport type { KeyboardEvent, MouseEvent } from 'react';\nimport type { MetricsTableColumn, MetricsTableProps, MetricsTableSort } from './metrics-table-types';\nimport { ScrollArea } from '@/ds/components/ScrollArea/scroll-area';\nimport { cn } from '@/lib/utils';\n\n/**\n * Full-width lines that fade over their last 6px. A hovered row covers the lines above and below\n * it, which then fade over 24px so they read as part of the hover; the header line does the same\n * when the first row is hovered. Written out in full so Tailwind finds every class.\n */\nconst HEADER_LINE =\n 'after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border after:[mask-image:linear-gradient(to_right,transparent,black_6px,black_calc(100%-6px),transparent)] [&:has(+:hover)]:after:[mask-image:linear-gradient(to_right,transparent,black_24px,black_calc(100%-24px),transparent)]';\nconst ROW_LINE =\n 'isolate before:absolute before:inset-x-0 before:-top-px before:bottom-0 before:-z-10 before:rounded hover:before:bg-fill-subtle after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border last:after:hidden after:[mask-image:linear-gradient(to_right,transparent,black_6px,black_calc(100%-6px),transparent)] hover:after:[mask-image:linear-gradient(to_right,transparent,black_24px,black_calc(100%-24px),transparent)] [&:has(+:hover)]:after:[mask-image:linear-gradient(to_right,transparent,black_24px,black_calc(100%-24px),transparent)]';\n\nconst FOCUS =\n 'focus-visible:outline-1 focus-visible:outline-solid focus-visible:outline-border-focus focus-visible:-outline-offset-1';\n\n/** A click on the sorted column flips it; on another column, starts that column's way. */\nfunction nextSort<Row>(current: MetricsTableSort | undefined, column: MetricsTableColumn<Row>): MetricsTableSort {\n if (current?.column !== column.id) return { column: column.id, direction: column.firstDirection ?? 'desc' };\n return { column: column.id, direction: current.direction === 'desc' ? 'asc' : 'desc' };\n}\n\n/** Controls a cell can hold; their own clicks and keys don't count as the row's. */\nconst CONTROLS = 'a, button, input, select, textarea, label, [role=\"button\"], [role=\"link\"], [contenteditable]';\n\n/** Whether an event started on a control inside the row rather than on the row itself. */\nconst fromControl = (event: MouseEvent | KeyboardEvent) => {\n const control = event.target instanceof Element ? event.target.closest(CONTROLS) : null;\n return control !== null && event.currentTarget.contains(control);\n};\n\nconst ARIA_SORT = { asc: 'ascending', desc: 'descending' } as const;\nconst SORT_ICON = { asc: ArrowUpIcon, desc: ArrowDownIcon };\n\nfunction sortRows<Row>(rows: Row[], columns: MetricsTableColumn<Row>[], sort: MetricsTableSort | undefined) {\n const by = columns.find(c => c.id === sort?.column)?.sortValue;\n if (!sort || !by) return rows;\n return [...rows].sort((a, b) => {\n const x = by(a);\n const y = by(b);\n const d = typeof x === 'number' && typeof y === 'number' ? x - y : String(x).localeCompare(String(y));\n return sort.direction === 'desc' ? -d : d;\n });\n}\n\n/**\n * A table for the numbers behind a chart: one row per series or group, columns for its figures,\n * separated by lines that fade at the ends. With `SeriesMark` and `Sparkline` cells and the row\n * hover and click hooks it doubles as the chart's legend; without them it's a plain data table.\n */\nexport function MetricsTable<Row>({\n columns,\n rows,\n getRowKey,\n sort,\n defaultSort,\n onSortChange,\n onRowClick,\n onRowHover,\n isRowDimmed,\n rowTitle,\n empty,\n 'aria-label': ariaLabel,\n className,\n}: MetricsTableProps<Row>) {\n const [ownSort, setOwnSort] = useState(defaultSort);\n const current = sort ?? ownSort;\n const shown = sortRows(rows, columns, current);\n const template = { gridTemplateColumns: columns.map(c => c.width ?? 'max-content').join(' ') };\n\n const sortBy = (column: MetricsTableColumn<Row>) => {\n const next = nextSort(current, column);\n setOwnSort(next);\n onSortChange?.(next);\n };\n\n return (\n // Narrower than its content (a phone), the table scrolls sideways instead of squeezing columns or the page.\n <ScrollArea orientation=\"horizontal\" className={className}>\n <div role=\"table\" aria-label={ariaLabel} className=\"grid min-w-max\">\n <div\n role=\"row\"\n className={cn(\n 'relative grid items-end gap-3 px-3 pb-2 text-body-sm font-medium text-placeholder',\n HEADER_LINE,\n )}\n style={template}\n >\n {columns.map(column => {\n const sorted = current?.column === column.id ? current.direction : undefined;\n const SortIcon = sorted && SORT_ICON[sorted];\n const end = column.align === 'end';\n return (\n <div\n key={column.id}\n role=\"columnheader\"\n aria-sort={sorted && ARIA_SORT[sorted]}\n className={cn('flex min-w-0', end && 'justify-end text-right')}\n >\n {column.sortValue ? (\n <button\n type=\"button\"\n onClick={() => sortBy(column)}\n className={cn(\n 'flex items-center gap-1 rounded whitespace-nowrap hover:text-muted-foreground',\n FOCUS,\n )}\n >\n {column.header}\n {SortIcon && <SortIcon aria-hidden className=\"size-3\" />}\n </button>\n ) : (\n <span className=\"whitespace-nowrap\">{column.header}</span>\n )}\n </div>\n );\n })}\n </div>\n {shown.map(row => {\n const onClick = (e: MouseEvent) => {\n if (!fromControl(e)) onRowClick?.(row);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n // Only while the row itself has focus, so a cell's link or input keeps its keys.\n if (e.target !== e.currentTarget) return;\n if (e.key !== 'Enter' && e.key !== ' ') return;\n // Space would also scroll the page.\n e.preventDefault();\n onRowClick?.(row);\n };\n return (\n <div\n key={getRowKey(row)}\n role=\"row\"\n tabIndex={onRowClick ? 0 : undefined}\n title={rowTitle?.(row)}\n onClick={onRowClick ? onClick : undefined}\n onKeyDown={onRowClick ? onKeyDown : undefined}\n onMouseEnter={onRowHover ? () => onRowHover(row) : undefined}\n onMouseLeave={onRowHover ? () => onRowHover(undefined) : undefined}\n className={cn(\n 'relative grid items-center gap-3 rounded px-3 py-2 text-body-sm text-foreground transition-opacity duration-150',\n ROW_LINE,\n onRowClick && cn('cursor-pointer', FOCUS),\n isRowDimmed?.(row) && 'opacity-40',\n )}\n style={template}\n >\n {columns.map(column => (\n <div\n key={column.id}\n role=\"cell\"\n className={cn('flex min-w-0 items-center', column.align === 'end' && 'justify-end text-right')}\n >\n {column.cell(row)}\n </div>\n ))}\n </div>\n );\n })}\n {shown.length === 0 && empty !== undefined && empty !== null ? (\n <div role=\"row\">\n <p role=\"cell\" className=\"py-8 text-center text-body-sm text-muted-foreground\">\n {empty}\n </p>\n </div>\n ) : null}\n </div>\n </ScrollArea>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MetricsTable.cjs.js","names":["ArrowUpIcon","ArrowDownIcon","useState","ScrollArea","cn"],"sources":["../../src/ds/components/MetricsTable/metrics-table.tsx"],"sourcesContent":["import { ArrowDownIcon, ArrowUpIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport type { KeyboardEvent, MouseEvent } from 'react';\nimport type { MetricsTableColumn, MetricsTableProps, MetricsTableSort } from './metrics-table-types';\nimport { ScrollArea } from '@/ds/components/ScrollArea/scroll-area';\nimport { cn } from '@/lib/utils';\n\n/**\n * Full-width lines that fade over their last 6px. A hovered row covers the lines above and below\n * it, which then fade over 24px so they read as part of the hover; the header line does the same\n * when the first row is hovered. Written out in full so Tailwind finds every class.\n */\nconst HEADER_LINE =\n 'after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border after:[mask-image:linear-gradient(to_right,transparent,black_6px,black_calc(100%-6px),transparent)] [&:has(+:hover)]:after:[mask-image:linear-gradient(to_right,transparent,black_24px,black_calc(100%-24px),transparent)]';\nconst ROW_LINE =\n 'isolate before:absolute before:inset-x-0 before:-top-px before:bottom-0 before:-z-10 before:rounded hover:before:bg-fill-subtle after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border last:after:hidden after:[mask-image:linear-gradient(to_right,transparent,black_6px,black_calc(100%-6px),transparent)] hover:after:[mask-image:linear-gradient(to_right,transparent,black_24px,black_calc(100%-24px),transparent)] [&:has(+:hover)]:after:[mask-image:linear-gradient(to_right,transparent,black_24px,black_calc(100%-24px),transparent)]';\n\nconst FOCUS =\n 'focus-visible:outline-1 focus-visible:outline-solid focus-visible:outline-border-focus focus-visible:-outline-offset-1';\n\n/** A click on the sorted column flips it; on another column, starts that column's way. */\nfunction nextSort<Row>(current: MetricsTableSort | undefined, column: MetricsTableColumn<Row>): MetricsTableSort {\n if (current?.column !== column.id) return { column: column.id, direction: column.firstDirection ?? 'desc' };\n return { column: column.id, direction: current.direction === 'desc' ? 'asc' : 'desc' };\n}\n\n/** Controls a cell can hold; their own clicks and keys don't count as the row's. */\nconst CONTROLS = 'a, button, input, select, textarea, label, [role=\"button\"], [role=\"link\"], [contenteditable]';\n\n/** Whether an event started on a control inside the row rather than on the row itself. */\nconst fromControl = (event: MouseEvent | KeyboardEvent) => {\n const control = event.target instanceof Element ? event.target.closest(CONTROLS) : null;\n return control !== null && event.currentTarget.contains(control);\n};\n\nconst ARIA_SORT = { asc: 'ascending', desc: 'descending' } as const;\nconst SORT_ICON = { asc: ArrowUpIcon, desc: ArrowDownIcon };\n\nfunction sortRows<Row>(rows: Row[], columns: MetricsTableColumn<Row>[], sort: MetricsTableSort | undefined) {\n const by = columns.find(c => c.id === sort?.column)?.sortValue;\n if (!sort || !by) return rows;\n return [...rows].sort((a, b) => {\n const x = by(a);\n const y = by(b);\n const d = typeof x === 'number' && typeof y === 'number' ? x - y : String(x).localeCompare(String(y));\n return sort.direction === 'desc' ? -d : d;\n });\n}\n\n/**\n * A table for the numbers behind a chart: one row per series or group, columns for its figures,\n * separated by lines that fade at the ends. With `SeriesMark` and `Sparkline` cells and the row\n * hover and click hooks it doubles as the chart's legend; without them it's a plain data table.\n */\nexport function MetricsTable<Row>({\n columns,\n rows,\n getRowKey,\n sort,\n defaultSort,\n onSortChange,\n onRowClick,\n onRowHover,\n isRowDimmed,\n rowTitle,\n empty,\n 'aria-label': ariaLabel,\n className,\n}: MetricsTableProps<Row>) {\n const [ownSort, setOwnSort] = useState(defaultSort);\n const current = sort ?? ownSort;\n const shown = sortRows(rows, columns, current);\n const template = { gridTemplateColumns: columns.map(c => c.width ?? 'max-content').join(' ') };\n\n const sortBy = (column: MetricsTableColumn<Row>) => {\n const next = nextSort(current, column);\n setOwnSort(next);\n onSortChange?.(next);\n };\n\n return (\n // Narrower than its content (a phone), the table scrolls sideways instead of squeezing columns or the page.\n <ScrollArea orientation=\"horizontal\" className={className}>\n <div role=\"table\" aria-label={ariaLabel} className=\"grid min-w-max\">\n <div\n role=\"row\"\n className={cn(\n 'relative grid items-end gap-3 px-3 pb-2 text-body-sm font-medium text-placeholder',\n HEADER_LINE,\n )}\n style={template}\n >\n {columns.map(column => {\n const sorted = current?.column === column.id ? current.direction : undefined;\n const SortIcon = sorted && SORT_ICON[sorted];\n const end = column.align === 'end';\n return (\n <div\n key={column.id}\n role=\"columnheader\"\n aria-sort={sorted && ARIA_SORT[sorted]}\n className={cn('flex min-w-0', end && 'justify-end text-right')}\n >\n {column.sortValue ? (\n <button\n type=\"button\"\n onClick={() => sortBy(column)}\n className={cn(\n 'flex items-center gap-1 rounded whitespace-nowrap hover:text-muted-foreground',\n FOCUS,\n )}\n >\n {column.header}\n {SortIcon && <SortIcon aria-hidden className=\"size-3\" />}\n </button>\n ) : (\n <span className=\"whitespace-nowrap\">{column.header}</span>\n )}\n </div>\n );\n })}\n </div>\n {shown.map(row => {\n const onClick = (e: MouseEvent) => {\n if (!fromControl(e)) onRowClick?.(row);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n // Only while the row itself has focus, so a cell's link or input keeps its keys.\n if (e.target !== e.currentTarget) return;\n if (e.key !== 'Enter' && e.key !== ' ') return;\n // Space would also scroll the page.\n e.preventDefault();\n onRowClick?.(row);\n };\n return (\n <div\n key={getRowKey(row)}\n role=\"row\"\n tabIndex={onRowClick ? 0 : undefined}\n title={rowTitle?.(row)}\n onClick={onRowClick ? onClick : undefined}\n onKeyDown={onRowClick ? onKeyDown : undefined}\n onMouseEnter={onRowHover ? () => onRowHover(row) : undefined}\n onMouseLeave={onRowHover ? () => onRowHover(undefined) : undefined}\n className={cn(\n // The separator is drawn inside the row's bottom edge; one more pixel below keeps the\n // content centered between the lines above and below it.\n 'relative grid items-center gap-3 rounded px-3 pt-2 pb-2.25 text-body-sm text-foreground transition-opacity duration-150',\n ROW_LINE,\n onRowClick && cn('cursor-pointer', FOCUS),\n isRowDimmed?.(row) && 'opacity-40',\n )}\n style={template}\n >\n {columns.map(column => (\n <div\n key={column.id}\n role=\"cell\"\n className={cn('flex min-w-0 items-center', column.align === 'end' && 'justify-end text-right')}\n >\n {column.cell(row)}\n </div>\n ))}\n </div>\n );\n })}\n {shown.length === 0 && empty !== undefined && empty !== null ? (\n <div role=\"row\">\n <p role=\"cell\" className=\"py-8 text-center text-body-sm text-muted-foreground\">\n {empty}\n </p>\n </div>\n ) : null}\n </div>\n </ScrollArea>\n );\n}\n"],"mappings":"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"}
@@ -116,7 +116,7 @@ function MetricsTable({ columns, rows, getRowKey, sort, defaultSort, onSortChang
116
116
  onKeyDown: onRowClick ? onKeyDown : void 0,
117
117
  onMouseEnter: onRowHover ? () => onRowHover(row) : void 0,
118
118
  onMouseLeave: onRowHover ? () => onRowHover(void 0) : void 0,
119
- className: cn("relative grid items-center gap-3 rounded px-3 py-2 text-body-sm text-foreground transition-opacity duration-150", ROW_LINE, onRowClick && cn("cursor-pointer", FOCUS), isRowDimmed?.(row) && "opacity-40"),
119
+ className: cn("relative grid items-center gap-3 rounded px-3 pt-2 pb-2.25 text-body-sm text-foreground transition-opacity duration-150", ROW_LINE, onRowClick && cn("cursor-pointer", FOCUS), isRowDimmed?.(row) && "opacity-40"),
120
120
  style: template,
121
121
  children: columns.map((column) => /* @__PURE__ */ jsx("div", {
122
122
  role: "cell",