@mastra/playground-ui 60.0.0-alpha.1 → 60.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/LogsDataList.cjs.js +0 -2
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +0 -2
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MainSidebar.cjs.js +11 -125
- package/dist/components/MainSidebar.cjs.js.map +1 -1
- package/dist/components/MainSidebar.es.js +1 -120
- package/dist/components/MainSidebar.es.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +0 -1
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +0 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +0 -2
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +0 -2
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/workflows/hooks/use-workflow-runs.cjs.js +3 -3
- package/dist/domains/workflows/hooks/use-workflow-runs.cjs.js.map +1 -1
- package/dist/domains/workflows/hooks/use-workflow-runs.es.js +3 -3
- package/dist/domains/workflows/hooks/use-workflow-runs.es.js.map +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +7 -7
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js.map +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.es.js +8 -8
- package/dist/domains/workflows/runs/workflow-run-list.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +0 -2
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +0 -2
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +0 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +0 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/{main-sidebar-link-active-C9QPj3D6.js → main-sidebar-BEXzGkDX.js} +118 -6
- package/dist/main-sidebar-BEXzGkDX.js.map +1 -0
- package/dist/{main-sidebar-link-active-UEuukSeT.cjs → main-sidebar-jbUd9Rz8.cjs} +117 -4
- package/dist/main-sidebar-jbUd9Rz8.cjs.map +1 -0
- package/dist/new/sidebar.cjs.js +32 -32
- package/dist/new/sidebar.cjs.js.map +1 -1
- package/dist/new/sidebar.es.js +2 -2
- package/dist/src/domains/workflows/hooks/use-workflow-runs.d.ts +6 -1
- package/package.json +6 -6
- package/dist/main-sidebar-link-active-C9QPj3D6.js.map +0 -1
- package/dist/main-sidebar-link-active-UEuukSeT.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-workflow-runs.es.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\nexport const useWorkflowRuns = (workflowId: string
|
|
1
|
+
{"version":3,"file":"use-workflow-runs.es.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\n/**\n * `summary: true` asks the server to reduce each run snapshot to `{ status, timestamp }`,\n * avoiding transfer of full snapshots when only list metadata is displayed.\n */\nexport const useWorkflowRuns = (\n workflowId: string,\n { enabled = true, summary = false }: { enabled?: boolean; summary?: boolean } = {},\n) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const query = useInfiniteQuery({\n queryKey: ['workflow-runs', workflowId, { summary }],\n queryFn: ({ pageParam }) =>\n client\n .getWorkflow(workflowId)\n .runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...(summary ? { summary: true } : {}) }),\n initialPageParam: 0,\n getNextPageParam: getWorkflowRunsNextPageParam,\n select: selectUniqueRuns,\n retry: false,\n enabled,\n refetchInterval: 5000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { ...query, setEndOfListElement };\n};\n\nexport const workflowRunQueryKey = (workflowId: string, runId: string) => ['workflow-run', workflowId, runId] as const;\n\nexport const useWorkflowRun = (\n workflowId: string,\n runId: string,\n refetchInterval?: UseQueryOptions<GetWorkflowRunByIdResponse>['refetchInterval'],\n) => {\n const client = useMastraClient();\n return useQuery({\n queryKey: workflowRunQueryKey(workflowId, runId),\n queryFn: () => client.getWorkflow(workflowId).runById(runId),\n enabled: Boolean(workflowId && runId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval,\n });\n};\n\nexport const useDeleteWorkflowRun = (workflowId: string): UseMutationResult<unknown, Error, { runId: string }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ runId }: { runId: string }) => client.getWorkflow(workflowId).deleteRunById(runId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['workflow-runs', workflowId] });\n toast.success('Workflow run deleted successfully');\n },\n onError: () => {\n toast.error('Failed to delete workflow run');\n },\n });\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -21,17 +21,15 @@ const utils_dateFormat = require('../../../utils/date-format.cjs.js');
|
|
|
21
21
|
|
|
22
22
|
const runSnapshotSchema = zod.z.object({
|
|
23
23
|
status: zod.z.enum(["running", "failed", "canceled", "pending", "waiting", "paused", "suspended", "success"]),
|
|
24
|
-
timestamp: zod.z.number().optional()
|
|
25
|
-
context: zod.z.object({ input: zod.z.unknown() })
|
|
24
|
+
timestamp: zod.z.number().optional()
|
|
26
25
|
});
|
|
27
26
|
const wrappedRunInputSchema = zod.z.object({ output: zod.z.unknown() });
|
|
28
27
|
function parseRunSnapshot(snapshot) {
|
|
29
28
|
const result = runSnapshotSchema.safeParse(snapshot);
|
|
30
29
|
return result.success ? result.data : void 0;
|
|
31
30
|
}
|
|
32
|
-
function formatRunInput(
|
|
33
|
-
if (
|
|
34
|
-
const input = snapshot.context.input;
|
|
31
|
+
function formatRunInput(input) {
|
|
32
|
+
if (input == null) return null;
|
|
35
33
|
const parsedString = zod.z.string().safeParse(input);
|
|
36
34
|
if (parsedString.success) return parsedString.data;
|
|
37
35
|
const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);
|
|
@@ -60,7 +58,9 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
|
|
|
60
58
|
setEndOfListElement,
|
|
61
59
|
isFetchingNextPage,
|
|
62
60
|
hasNextPage
|
|
63
|
-
} = domains_workflows_hooks_useWorkflowRuns.useWorkflowRuns(workflowId);
|
|
61
|
+
} = domains_workflows_hooks_useWorkflowRuns.useWorkflowRuns(workflowId, { summary: true });
|
|
62
|
+
const { data: activeRun } = domains_workflows_hooks_useWorkflowRuns.useWorkflowRun(workflowId, runId ?? "");
|
|
63
|
+
const activeRunInput = formatRunInput(activeRun?.payload);
|
|
64
64
|
const { mutateAsync: deleteRun } = domains_workflows_hooks_useWorkflowRuns.useDeleteWorkflowRun(workflowId);
|
|
65
65
|
const handleDelete = async (runId2) => {
|
|
66
66
|
try {
|
|
@@ -86,7 +86,7 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
|
|
|
86
86
|
runList.map((run) => {
|
|
87
87
|
const isActiveRun = run.runId === runId;
|
|
88
88
|
const snapshot = parseRunSnapshot(run.snapshot);
|
|
89
|
-
const runInput = isActiveRun ?
|
|
89
|
+
const runInput = isActiveRun ? activeRunInput : null;
|
|
90
90
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
91
91
|
threadList.ThreadListItem,
|
|
92
92
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-run-list.cjs.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n context: z.object({ input: z.unknown() }),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(snapshot: RunSnapshot | undefined): string | null {\n if (!snapshot || snapshot.context.input == null) return null;\n\n const input = snapshot.context.input;\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? formatRunInput(snapshot) : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["z","jsxs","jsx","formatDate","useState","useLinkComponent","useWorkflowRuns","useDeleteWorkflowRun","runId","Fragment","Collapsible","CollapsibleTrigger","ChevronRight","CollapsibleContent","ScrollArea","Skeleton","ThreadList","ThreadListEmpty","ThreadListItems","ThreadListItem","WorkflowRunStatusIcon","getRunTimestamp","getRunResourceId","Icon","Spinner","AlertDialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-run-list.cjs.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(input: unknown): string | null {\n if (input == null) return null;\n\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId, { summary: true });\n // The list only carries summary snapshots; the active run's input comes from the full run.\n const { data: activeRun } = useWorkflowRun(workflowId, runId ?? '');\n const activeRunInput = formatRunInput(activeRun?.payload);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? activeRunInput : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["z","jsxs","jsx","formatDate","useState","useLinkComponent","useWorkflowRuns","useWorkflowRun","useDeleteWorkflowRun","runId","Fragment","Collapsible","CollapsibleTrigger","ChevronRight","CollapsibleContent","ScrollArea","Skeleton","ThreadList","ThreadListEmpty","ThreadListItems","ThreadListItem","WorkflowRunStatusIcon","getRunTimestamp","getRunResourceId","Icon","Spinner","AlertDialog"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { useState } from 'react';
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon.es.js';
|
|
6
6
|
import { getRunResourceId, getRunTimestamp } from '../utils.es.js';
|
|
7
|
-
import { useWorkflowRuns, useDeleteWorkflowRun } from '../hooks/use-workflow-runs.es.js';
|
|
7
|
+
import { useWorkflowRuns, useWorkflowRun, useDeleteWorkflowRun } from '../hooks/use-workflow-runs.es.js';
|
|
8
8
|
import { A as AlertDialog } from '../../../alert-dialog-C21QCl3B.js';
|
|
9
9
|
import { C as Collapsible, b as CollapsibleTrigger, a as CollapsibleContent } from '../../../collapsible-DhhP5p1j.js';
|
|
10
10
|
import { S as ScrollArea } from '../../../scroll-area-DyTZoISq.js';
|
|
@@ -17,17 +17,15 @@ import { formatDate } from '../../../utils/date-format.es.js';
|
|
|
17
17
|
|
|
18
18
|
const runSnapshotSchema = z.object({
|
|
19
19
|
status: z.enum(["running", "failed", "canceled", "pending", "waiting", "paused", "suspended", "success"]),
|
|
20
|
-
timestamp: z.number().optional()
|
|
21
|
-
context: z.object({ input: z.unknown() })
|
|
20
|
+
timestamp: z.number().optional()
|
|
22
21
|
});
|
|
23
22
|
const wrappedRunInputSchema = z.object({ output: z.unknown() });
|
|
24
23
|
function parseRunSnapshot(snapshot) {
|
|
25
24
|
const result = runSnapshotSchema.safeParse(snapshot);
|
|
26
25
|
return result.success ? result.data : void 0;
|
|
27
26
|
}
|
|
28
|
-
function formatRunInput(
|
|
29
|
-
if (
|
|
30
|
-
const input = snapshot.context.input;
|
|
27
|
+
function formatRunInput(input) {
|
|
28
|
+
if (input == null) return null;
|
|
31
29
|
const parsedString = z.string().safeParse(input);
|
|
32
30
|
if (parsedString.success) return parsedString.data;
|
|
33
31
|
const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);
|
|
@@ -56,7 +54,9 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
|
|
|
56
54
|
setEndOfListElement,
|
|
57
55
|
isFetchingNextPage,
|
|
58
56
|
hasNextPage
|
|
59
|
-
} = useWorkflowRuns(workflowId);
|
|
57
|
+
} = useWorkflowRuns(workflowId, { summary: true });
|
|
58
|
+
const { data: activeRun } = useWorkflowRun(workflowId, runId ?? "");
|
|
59
|
+
const activeRunInput = formatRunInput(activeRun?.payload);
|
|
60
60
|
const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);
|
|
61
61
|
const handleDelete = async (runId2) => {
|
|
62
62
|
try {
|
|
@@ -82,7 +82,7 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
|
|
|
82
82
|
runList.map((run) => {
|
|
83
83
|
const isActiveRun = run.runId === runId;
|
|
84
84
|
const snapshot = parseRunSnapshot(run.snapshot);
|
|
85
|
-
const runInput = isActiveRun ?
|
|
85
|
+
const runInput = isActiveRun ? activeRunInput : null;
|
|
86
86
|
return /* @__PURE__ */ jsx(
|
|
87
87
|
ThreadListItem,
|
|
88
88
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-run-list.es.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n context: z.object({ input: z.unknown() }),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(snapshot: RunSnapshot | undefined): string | null {\n if (!snapshot || snapshot.context.input == null) return null;\n\n const input = snapshot.context.input;\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? formatRunInput(snapshot) : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["runId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-run-list.es.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(input: unknown): string | null {\n if (input == null) return null;\n\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId, { summary: true });\n // The list only carries summary snapshots; the active run's input comes from the full run.\n const { data: activeRun } = useWorkflowRun(workflowId, runId ?? '');\n const activeRunInput = formatRunInput(activeRun?.payload);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? activeRunInput : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["runId"],"mappings":"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"}
|
|
@@ -6,8 +6,6 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
const ee_signals_components_entityIndexModel = require('./entity-index-model.cjs.js');
|
|
7
7
|
const Badge = require('../../../Badge-DFNxcz-r.cjs');
|
|
8
8
|
const dataList = require('../../../data-list-RI8c32dk.cjs');
|
|
9
|
-
require('react');
|
|
10
|
-
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
11
9
|
|
|
12
10
|
const columns = "minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)";
|
|
13
11
|
function Status({ entity }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-index-list.cjs.js","sources":["../../../../src/ee/signals/components/entity-index-list.tsx"],"sourcesContent":["import type { ThemeLearningEntity } from '@mastra/client-js';\n\nimport { entityIndexMetadata, entityStatusLabel } from './entity-index-model';\nimport { Badge } from '@/ds/components/Badge';\nimport { DataList } from '@/ds/components/DataList';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst columns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface EntityIndexListProps {\n entities: readonly ThemeLearningEntity[];\n hasSearch: boolean;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n LinkComponent: LinkComponent;\n}\n\nfunction Status({ entity }: { entity: ThemeLearningEntity }) {\n const label = entityStatusLabel(entity.status);\n const variant = entity.status === 'ready' ? 'green' : entity.status === 'processing' ? 'blue' : 'neutral';\n return (\n <Badge variant={variant} size=\"sm\" indicator={entity.status === undefined ? undefined : 'dot'}>\n {label}\n </Badge>\n );\n}\n\nexport function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }: EntityIndexListProps) {\n return (\n <section aria-label=\"Trace Intelligence entities\" className=\"min-h-0\">\n <DataList columns={columns} fit=\"container\">\n <DataList.Top>\n <DataList.TopCell>Entity</DataList.TopCell>\n <DataList.TopCell>Traces</DataList.TopCell>\n <DataList.TopCell>Signals set</DataList.TopCell>\n <DataList.TopCell>Status</DataList.TopCell>\n <DataList.TopCell>Updated</DataList.TopCell>\n </DataList.Top>\n {entities.length === 0 && hasSearch ? <DataList.NoMatch message=\"No entities match your search\" /> : null}\n {entities.map(entity => {\n const metadata = entityIndexMetadata(entity);\n return (\n <DataList.RowLink\n key={`${entity.entityType}:${entity.entityId}`}\n to={getEntityHref(entity)}\n LinkComponent={LinkComponent}\n className=\"min-w-0\"\n >\n <DataList.Cell className=\"min-w-0 overflow-visible text-left\">\n <span className=\"sr-only\">Open entity {entity.entityId}</span>\n <span aria-hidden=\"true\" className=\"block overflow-clip text-ellipsis whitespace-nowrap\">\n {entity.entityId}\n </span>\n </DataList.Cell>\n <DataList.NumberCell>{metadata.traceCount}</DataList.NumberCell>\n <DataList.Cell>{metadata.signalsSet}</DataList.Cell>\n <DataList.Cell>\n <Status entity={entity} />\n </DataList.Cell>\n <DataList.Cell title={entity.updatedAt}>{metadata.updatedAt}</DataList.Cell>\n </DataList.RowLink>\n );\n })}\n </DataList>\n </section>\n );\n}\n"],"names":["entityStatusLabel","jsx","Badge","jsxs","DataList","entityIndexMetadata"],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity-index-list.cjs.js","sources":["../../../../src/ee/signals/components/entity-index-list.tsx"],"sourcesContent":["import type { ThemeLearningEntity } from '@mastra/client-js';\n\nimport { entityIndexMetadata, entityStatusLabel } from './entity-index-model';\nimport { Badge } from '@/ds/components/Badge';\nimport { DataList } from '@/ds/components/DataList';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst columns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface EntityIndexListProps {\n entities: readonly ThemeLearningEntity[];\n hasSearch: boolean;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n LinkComponent: LinkComponent;\n}\n\nfunction Status({ entity }: { entity: ThemeLearningEntity }) {\n const label = entityStatusLabel(entity.status);\n const variant = entity.status === 'ready' ? 'green' : entity.status === 'processing' ? 'blue' : 'neutral';\n return (\n <Badge variant={variant} size=\"sm\" indicator={entity.status === undefined ? undefined : 'dot'}>\n {label}\n </Badge>\n );\n}\n\nexport function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }: EntityIndexListProps) {\n return (\n <section aria-label=\"Trace Intelligence entities\" className=\"min-h-0\">\n <DataList columns={columns} fit=\"container\">\n <DataList.Top>\n <DataList.TopCell>Entity</DataList.TopCell>\n <DataList.TopCell>Traces</DataList.TopCell>\n <DataList.TopCell>Signals set</DataList.TopCell>\n <DataList.TopCell>Status</DataList.TopCell>\n <DataList.TopCell>Updated</DataList.TopCell>\n </DataList.Top>\n {entities.length === 0 && hasSearch ? <DataList.NoMatch message=\"No entities match your search\" /> : null}\n {entities.map(entity => {\n const metadata = entityIndexMetadata(entity);\n return (\n <DataList.RowLink\n key={`${entity.entityType}:${entity.entityId}`}\n to={getEntityHref(entity)}\n LinkComponent={LinkComponent}\n className=\"min-w-0\"\n >\n <DataList.Cell className=\"min-w-0 overflow-visible text-left\">\n <span className=\"sr-only\">Open entity {entity.entityId}</span>\n <span aria-hidden=\"true\" className=\"block overflow-clip text-ellipsis whitespace-nowrap\">\n {entity.entityId}\n </span>\n </DataList.Cell>\n <DataList.NumberCell>{metadata.traceCount}</DataList.NumberCell>\n <DataList.Cell>{metadata.signalsSet}</DataList.Cell>\n <DataList.Cell>\n <Status entity={entity} />\n </DataList.Cell>\n <DataList.Cell title={entity.updatedAt}>{metadata.updatedAt}</DataList.Cell>\n </DataList.RowLink>\n );\n })}\n </DataList>\n </section>\n );\n}\n"],"names":["entityStatusLabel","jsx","Badge","jsxs","DataList","entityIndexMetadata"],"mappings":"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"}
|
|
@@ -2,8 +2,6 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { entityIndexMetadata, entityStatusLabel } from './entity-index-model.es.js';
|
|
3
3
|
import { B as Badge } from '../../../Badge-Bzn8Z-_I.js';
|
|
4
4
|
import { D as DataList } from '../../../data-list-5-nRJbEO.js';
|
|
5
|
-
import 'react';
|
|
6
|
-
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
7
5
|
|
|
8
6
|
const columns = "minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)";
|
|
9
7
|
function Status({ entity }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-index-list.es.js","sources":["../../../../src/ee/signals/components/entity-index-list.tsx"],"sourcesContent":["import type { ThemeLearningEntity } from '@mastra/client-js';\n\nimport { entityIndexMetadata, entityStatusLabel } from './entity-index-model';\nimport { Badge } from '@/ds/components/Badge';\nimport { DataList } from '@/ds/components/DataList';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst columns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface EntityIndexListProps {\n entities: readonly ThemeLearningEntity[];\n hasSearch: boolean;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n LinkComponent: LinkComponent;\n}\n\nfunction Status({ entity }: { entity: ThemeLearningEntity }) {\n const label = entityStatusLabel(entity.status);\n const variant = entity.status === 'ready' ? 'green' : entity.status === 'processing' ? 'blue' : 'neutral';\n return (\n <Badge variant={variant} size=\"sm\" indicator={entity.status === undefined ? undefined : 'dot'}>\n {label}\n </Badge>\n );\n}\n\nexport function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }: EntityIndexListProps) {\n return (\n <section aria-label=\"Trace Intelligence entities\" className=\"min-h-0\">\n <DataList columns={columns} fit=\"container\">\n <DataList.Top>\n <DataList.TopCell>Entity</DataList.TopCell>\n <DataList.TopCell>Traces</DataList.TopCell>\n <DataList.TopCell>Signals set</DataList.TopCell>\n <DataList.TopCell>Status</DataList.TopCell>\n <DataList.TopCell>Updated</DataList.TopCell>\n </DataList.Top>\n {entities.length === 0 && hasSearch ? <DataList.NoMatch message=\"No entities match your search\" /> : null}\n {entities.map(entity => {\n const metadata = entityIndexMetadata(entity);\n return (\n <DataList.RowLink\n key={`${entity.entityType}:${entity.entityId}`}\n to={getEntityHref(entity)}\n LinkComponent={LinkComponent}\n className=\"min-w-0\"\n >\n <DataList.Cell className=\"min-w-0 overflow-visible text-left\">\n <span className=\"sr-only\">Open entity {entity.entityId}</span>\n <span aria-hidden=\"true\" className=\"block overflow-clip text-ellipsis whitespace-nowrap\">\n {entity.entityId}\n </span>\n </DataList.Cell>\n <DataList.NumberCell>{metadata.traceCount}</DataList.NumberCell>\n <DataList.Cell>{metadata.signalsSet}</DataList.Cell>\n <DataList.Cell>\n <Status entity={entity} />\n </DataList.Cell>\n <DataList.Cell title={entity.updatedAt}>{metadata.updatedAt}</DataList.Cell>\n </DataList.RowLink>\n );\n })}\n </DataList>\n </section>\n );\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity-index-list.es.js","sources":["../../../../src/ee/signals/components/entity-index-list.tsx"],"sourcesContent":["import type { ThemeLearningEntity } from '@mastra/client-js';\n\nimport { entityIndexMetadata, entityStatusLabel } from './entity-index-model';\nimport { Badge } from '@/ds/components/Badge';\nimport { DataList } from '@/ds/components/DataList';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst columns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface EntityIndexListProps {\n entities: readonly ThemeLearningEntity[];\n hasSearch: boolean;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n LinkComponent: LinkComponent;\n}\n\nfunction Status({ entity }: { entity: ThemeLearningEntity }) {\n const label = entityStatusLabel(entity.status);\n const variant = entity.status === 'ready' ? 'green' : entity.status === 'processing' ? 'blue' : 'neutral';\n return (\n <Badge variant={variant} size=\"sm\" indicator={entity.status === undefined ? undefined : 'dot'}>\n {label}\n </Badge>\n );\n}\n\nexport function EntityIndexList({ entities, hasSearch, getEntityHref, LinkComponent }: EntityIndexListProps) {\n return (\n <section aria-label=\"Trace Intelligence entities\" className=\"min-h-0\">\n <DataList columns={columns} fit=\"container\">\n <DataList.Top>\n <DataList.TopCell>Entity</DataList.TopCell>\n <DataList.TopCell>Traces</DataList.TopCell>\n <DataList.TopCell>Signals set</DataList.TopCell>\n <DataList.TopCell>Status</DataList.TopCell>\n <DataList.TopCell>Updated</DataList.TopCell>\n </DataList.Top>\n {entities.length === 0 && hasSearch ? <DataList.NoMatch message=\"No entities match your search\" /> : null}\n {entities.map(entity => {\n const metadata = entityIndexMetadata(entity);\n return (\n <DataList.RowLink\n key={`${entity.entityType}:${entity.entityId}`}\n to={getEntityHref(entity)}\n LinkComponent={LinkComponent}\n className=\"min-w-0\"\n >\n <DataList.Cell className=\"min-w-0 overflow-visible text-left\">\n <span className=\"sr-only\">Open entity {entity.entityId}</span>\n <span aria-hidden=\"true\" className=\"block overflow-clip text-ellipsis whitespace-nowrap\">\n {entity.entityId}\n </span>\n </DataList.Cell>\n <DataList.NumberCell>{metadata.traceCount}</DataList.NumberCell>\n <DataList.Cell>{metadata.signalsSet}</DataList.Cell>\n <DataList.Cell>\n <Status entity={entity} />\n </DataList.Cell>\n <DataList.Cell title={entity.updatedAt}>{metadata.updatedAt}</DataList.Cell>\n </DataList.RowLink>\n );\n })}\n </DataList>\n </section>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,6 @@ const domains_auth_components_sessionExpired = require('../../../domains/auth/co
|
|
|
18
18
|
const Button = require('../../../Button-BAMnPqos.cjs');
|
|
19
19
|
const buttonsGroup = require('../../../buttons-group-CoZP3lJt.cjs');
|
|
20
20
|
const dataListSkeleton = require('../../../data-list-skeleton-CgbWqYky.cjs');
|
|
21
|
-
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
22
21
|
const EmptyState = require('../../../EmptyState-2XQgeju6.cjs');
|
|
23
22
|
const listSearch = require('../../../list-search-hOQI7qF_.cjs');
|
|
24
23
|
const select = require('../../../select-BByMAS0L.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-intelligence-entity-index.cjs.js","sources":["../../../../src/ee/signals/components/trace-intelligence-entity-index.tsx"],"sourcesContent":["import type { SignalCatalogEntry, ThemeLearningEntity } from '@mastra/client-js';\nimport { Columns2, List } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport { useThemeEntities } from '../hooks';\nimport { TraceSignalSettingsButton, TraceSignalSettingsPanel } from '../settings/trace-signal-settings';\nimport { TraceIntelligenceExplainer } from '../trace-intelligence-explainer';\nimport { useTraceIntelligence } from '../use-trace-intelligence';\nimport { EntityIndexCompactGrid } from './entity-index-compact-grid';\nimport { EntityIndexList } from './entity-index-list';\nimport { filterAndSortEntities } from './entity-index-model';\nimport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\nimport { PermissionDenied } from '@/domains/auth/components/permission-denied';\nimport { SessionExpired } from '@/domains/auth/components/session-expired';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { ListSearch } from '@/ds/components/ListSearch';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/utils/errors';\n\nexport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\n\nconst listColumns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface TraceIntelligenceEntityIndexProps {\n entityType: string;\n search: string;\n sort: TraceIntelligenceEntitySort;\n view: TraceIntelligenceEntityView;\n onSearchChange: (search: string) => void;\n onSortChange: (sort: TraceIntelligenceEntitySort) => void;\n onViewChange: (view: TraceIntelligenceEntityView) => void;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n headerAction?: ReactNode;\n}\n\nfunction EntityIndexError({ error }: { error: Error }) {\n if (is401UnauthorizedError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <SessionExpired />\n </div>\n );\n }\n if (is403ForbiddenError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <PermissionDenied resource=\"Trace Intelligence\" />\n </div>\n );\n }\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState tone=\"error\" titleSlot=\"Failed to load Trace Intelligence\" descriptionSlot={error.message} />\n </div>\n );\n}\n\nfunction EntityIndexControls({\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n headerAction,\n signalCatalog,\n}: Pick<\n TraceIntelligenceEntityIndexProps,\n 'search' | 'sort' | 'view' | 'onSearchChange' | 'onSortChange' | 'onViewChange' | 'headerAction'\n> & { signalCatalog: readonly SignalCatalogEntry[] }) {\n return (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <div className=\"max-w-120 flex-1\">\n <ListSearch\n value={search}\n onSearch={onSearchChange}\n label=\"Filter entities\"\n placeholder=\"Filter by entity identifier\"\n />\n </div>\n <div className=\"flex items-center justify-between gap-2 sm:ml-auto sm:justify-end\">\n <TraceIntelligenceExplainer signalCatalog={signalCatalog} />\n <Select<TraceIntelligenceEntitySort> value={sort} onValueChange={onSortChange}>\n <SelectTrigger aria-label=\"Sort entities\" size=\"md\" variant=\"ghost\" className=\"w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"end\">\n <SelectItem value=\"default\">Default order</SelectItem>\n <SelectItem value=\"entity-asc\">Entity: A–Z</SelectItem>\n <SelectItem value=\"entity-desc\">Entity: Z–A</SelectItem>\n </SelectContent>\n </Select>\n {headerAction}\n <ButtonsGroup aria-label=\"Entities view\">\n <Button\n type=\"button\"\n variant={view === 'list' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"List view\"\n aria-pressed={view === 'list'}\n onClick={() => onViewChange('list')}\n >\n <List />\n </Button>\n <Button\n type=\"button\"\n variant={view === 'compact' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"Compact view\"\n aria-pressed={view === 'compact'}\n onClick={() => onViewChange('compact')}\n >\n <Columns2 />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n );\n}\n\nexport function TraceIntelligenceEntityIndex({\n entityType,\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n getEntityHref,\n headerAction,\n}: TraceIntelligenceEntityIndexProps) {\n const entitiesQuery = useThemeEntities(entityType);\n const { LinkComponent, signalCatalog: contextSignalCatalog, signalManagement } = useTraceIntelligence();\n const [settingsOpen, setSettingsOpen] = useState(false);\n\n if (entitiesQuery.error) return <EntityIndexError error={entitiesQuery.error} />;\n\n const sourceEntities = entitiesQuery.data?.entities ?? [];\n const signalCatalog =\n sourceEntities.find(entity => entity.signalCatalog?.length)?.signalCatalog ?? contextSignalCatalog;\n const entities = filterAndSortEntities(sourceEntities, search, sort);\n const hasSearch = search.trim().length > 0;\n let body = (\n <EntityIndexList\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n if (entitiesQuery.isPending) {\n body = (\n <div role=\"status\" aria-label=\"Loading Trace Intelligence entities\">\n <DataListSkeleton columns={listColumns} />\n </div>\n );\n } else if (entitiesQuery.data.entities.length === 0 && !hasSearch) {\n body = (\n <EmptyState\n titleSlot=\"No Trace Intelligence entities yet\"\n descriptionSlot=\"Entities appear after Trace Intelligence begins collecting generated signal data.\"\n />\n );\n } else if (view === 'compact') {\n body = (\n <EntityIndexCompactGrid\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n }\n\n return (\n <div className=\"mx-auto grid size-full min-h-0 max-w-7xl grid-rows-[auto_minmax(0,1fr)]\">\n <div className=\"pb-3\">\n <EntityIndexControls\n search={search}\n sort={sort}\n view={view}\n onSearchChange={onSearchChange}\n onSortChange={onSortChange}\n onViewChange={onViewChange}\n signalCatalog={signalCatalog}\n headerAction={\n headerAction || signalManagement ? (\n <>\n {headerAction}\n {signalManagement ? (\n <TraceSignalSettingsButton open={settingsOpen} onClick={() => setSettingsOpen(open => !open)} />\n ) : null}\n </>\n ) : undefined\n }\n />\n </div>\n <div\n className={\n settingsOpen\n ? 'grid max-h-full min-h-0 grid-cols-1 items-start gap-4 lg:grid-cols-[1fr_1fr]'\n : 'grid min-h-0 grid-cols-1'\n }\n >\n <div className=\"min-h-0 min-w-0\">{body}</div>\n {settingsOpen ? <TraceSignalSettingsPanel onClose={() => setSettingsOpen(false)} /> : null}\n </div>\n </div>\n );\n}\n"],"names":["is401UnauthorizedError","jsx","SessionExpired","is403ForbiddenError","PermissionDenied","EmptyState","jsxs","ListSearch","TraceIntelligenceExplainer","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ButtonsGroup","Button","List","Columns2","useThemeEntities","useTraceIntelligence","useState","filterAndSortEntities","EntityIndexList","DataListSkeleton","EntityIndexCompactGrid","Fragment","TraceSignalSettingsButton","TraceSignalSettingsPanel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trace-intelligence-entity-index.cjs.js","sources":["../../../../src/ee/signals/components/trace-intelligence-entity-index.tsx"],"sourcesContent":["import type { SignalCatalogEntry, ThemeLearningEntity } from '@mastra/client-js';\nimport { Columns2, List } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport { useThemeEntities } from '../hooks';\nimport { TraceSignalSettingsButton, TraceSignalSettingsPanel } from '../settings/trace-signal-settings';\nimport { TraceIntelligenceExplainer } from '../trace-intelligence-explainer';\nimport { useTraceIntelligence } from '../use-trace-intelligence';\nimport { EntityIndexCompactGrid } from './entity-index-compact-grid';\nimport { EntityIndexList } from './entity-index-list';\nimport { filterAndSortEntities } from './entity-index-model';\nimport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\nimport { PermissionDenied } from '@/domains/auth/components/permission-denied';\nimport { SessionExpired } from '@/domains/auth/components/session-expired';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { ListSearch } from '@/ds/components/ListSearch';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/utils/errors';\n\nexport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\n\nconst listColumns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface TraceIntelligenceEntityIndexProps {\n entityType: string;\n search: string;\n sort: TraceIntelligenceEntitySort;\n view: TraceIntelligenceEntityView;\n onSearchChange: (search: string) => void;\n onSortChange: (sort: TraceIntelligenceEntitySort) => void;\n onViewChange: (view: TraceIntelligenceEntityView) => void;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n headerAction?: ReactNode;\n}\n\nfunction EntityIndexError({ error }: { error: Error }) {\n if (is401UnauthorizedError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <SessionExpired />\n </div>\n );\n }\n if (is403ForbiddenError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <PermissionDenied resource=\"Trace Intelligence\" />\n </div>\n );\n }\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState tone=\"error\" titleSlot=\"Failed to load Trace Intelligence\" descriptionSlot={error.message} />\n </div>\n );\n}\n\nfunction EntityIndexControls({\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n headerAction,\n signalCatalog,\n}: Pick<\n TraceIntelligenceEntityIndexProps,\n 'search' | 'sort' | 'view' | 'onSearchChange' | 'onSortChange' | 'onViewChange' | 'headerAction'\n> & { signalCatalog: readonly SignalCatalogEntry[] }) {\n return (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <div className=\"max-w-120 flex-1\">\n <ListSearch\n value={search}\n onSearch={onSearchChange}\n label=\"Filter entities\"\n placeholder=\"Filter by entity identifier\"\n />\n </div>\n <div className=\"flex items-center justify-between gap-2 sm:ml-auto sm:justify-end\">\n <TraceIntelligenceExplainer signalCatalog={signalCatalog} />\n <Select<TraceIntelligenceEntitySort> value={sort} onValueChange={onSortChange}>\n <SelectTrigger aria-label=\"Sort entities\" size=\"md\" variant=\"ghost\" className=\"w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"end\">\n <SelectItem value=\"default\">Default order</SelectItem>\n <SelectItem value=\"entity-asc\">Entity: A–Z</SelectItem>\n <SelectItem value=\"entity-desc\">Entity: Z–A</SelectItem>\n </SelectContent>\n </Select>\n {headerAction}\n <ButtonsGroup aria-label=\"Entities view\">\n <Button\n type=\"button\"\n variant={view === 'list' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"List view\"\n aria-pressed={view === 'list'}\n onClick={() => onViewChange('list')}\n >\n <List />\n </Button>\n <Button\n type=\"button\"\n variant={view === 'compact' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"Compact view\"\n aria-pressed={view === 'compact'}\n onClick={() => onViewChange('compact')}\n >\n <Columns2 />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n );\n}\n\nexport function TraceIntelligenceEntityIndex({\n entityType,\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n getEntityHref,\n headerAction,\n}: TraceIntelligenceEntityIndexProps) {\n const entitiesQuery = useThemeEntities(entityType);\n const { LinkComponent, signalCatalog: contextSignalCatalog, signalManagement } = useTraceIntelligence();\n const [settingsOpen, setSettingsOpen] = useState(false);\n\n if (entitiesQuery.error) return <EntityIndexError error={entitiesQuery.error} />;\n\n const sourceEntities = entitiesQuery.data?.entities ?? [];\n const signalCatalog =\n sourceEntities.find(entity => entity.signalCatalog?.length)?.signalCatalog ?? contextSignalCatalog;\n const entities = filterAndSortEntities(sourceEntities, search, sort);\n const hasSearch = search.trim().length > 0;\n let body = (\n <EntityIndexList\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n if (entitiesQuery.isPending) {\n body = (\n <div role=\"status\" aria-label=\"Loading Trace Intelligence entities\">\n <DataListSkeleton columns={listColumns} />\n </div>\n );\n } else if (entitiesQuery.data.entities.length === 0 && !hasSearch) {\n body = (\n <EmptyState\n titleSlot=\"No Trace Intelligence entities yet\"\n descriptionSlot=\"Entities appear after Trace Intelligence begins collecting generated signal data.\"\n />\n );\n } else if (view === 'compact') {\n body = (\n <EntityIndexCompactGrid\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n }\n\n return (\n <div className=\"mx-auto grid size-full min-h-0 max-w-7xl grid-rows-[auto_minmax(0,1fr)]\">\n <div className=\"pb-3\">\n <EntityIndexControls\n search={search}\n sort={sort}\n view={view}\n onSearchChange={onSearchChange}\n onSortChange={onSortChange}\n onViewChange={onViewChange}\n signalCatalog={signalCatalog}\n headerAction={\n headerAction || signalManagement ? (\n <>\n {headerAction}\n {signalManagement ? (\n <TraceSignalSettingsButton open={settingsOpen} onClick={() => setSettingsOpen(open => !open)} />\n ) : null}\n </>\n ) : undefined\n }\n />\n </div>\n <div\n className={\n settingsOpen\n ? 'grid max-h-full min-h-0 grid-cols-1 items-start gap-4 lg:grid-cols-[1fr_1fr]'\n : 'grid min-h-0 grid-cols-1'\n }\n >\n <div className=\"min-h-0 min-w-0\">{body}</div>\n {settingsOpen ? <TraceSignalSettingsPanel onClose={() => setSettingsOpen(false)} /> : null}\n </div>\n </div>\n );\n}\n"],"names":["is401UnauthorizedError","jsx","SessionExpired","is403ForbiddenError","PermissionDenied","EmptyState","jsxs","ListSearch","TraceIntelligenceExplainer","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ButtonsGroup","Button","List","Columns2","useThemeEntities","useTraceIntelligence","useState","filterAndSortEntities","EntityIndexList","DataListSkeleton","EntityIndexCompactGrid","Fragment","TraceSignalSettingsButton","TraceSignalSettingsPanel"],"mappings":"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"}
|
|
@@ -14,7 +14,6 @@ import { SessionExpired } from '../../../domains/auth/components/session-expired
|
|
|
14
14
|
import { B as Button } from '../../../Button-B8nF87ai.js';
|
|
15
15
|
import { B as ButtonsGroup } from '../../../buttons-group-DsZgrZBZ.js';
|
|
16
16
|
import { D as DataListSkeleton } from '../../../data-list-skeleton-BrSh9Y_3.js';
|
|
17
|
-
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
18
17
|
import { E as EmptyState } from '../../../EmptyState-Bc4nJ9QH.js';
|
|
19
18
|
import { L as ListSearch } from '../../../list-search-O3LYX7Bs.js';
|
|
20
19
|
import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from '../../../select-Dkmx3L5p.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-intelligence-entity-index.es.js","sources":["../../../../src/ee/signals/components/trace-intelligence-entity-index.tsx"],"sourcesContent":["import type { SignalCatalogEntry, ThemeLearningEntity } from '@mastra/client-js';\nimport { Columns2, List } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport { useThemeEntities } from '../hooks';\nimport { TraceSignalSettingsButton, TraceSignalSettingsPanel } from '../settings/trace-signal-settings';\nimport { TraceIntelligenceExplainer } from '../trace-intelligence-explainer';\nimport { useTraceIntelligence } from '../use-trace-intelligence';\nimport { EntityIndexCompactGrid } from './entity-index-compact-grid';\nimport { EntityIndexList } from './entity-index-list';\nimport { filterAndSortEntities } from './entity-index-model';\nimport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\nimport { PermissionDenied } from '@/domains/auth/components/permission-denied';\nimport { SessionExpired } from '@/domains/auth/components/session-expired';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { ListSearch } from '@/ds/components/ListSearch';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/utils/errors';\n\nexport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\n\nconst listColumns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface TraceIntelligenceEntityIndexProps {\n entityType: string;\n search: string;\n sort: TraceIntelligenceEntitySort;\n view: TraceIntelligenceEntityView;\n onSearchChange: (search: string) => void;\n onSortChange: (sort: TraceIntelligenceEntitySort) => void;\n onViewChange: (view: TraceIntelligenceEntityView) => void;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n headerAction?: ReactNode;\n}\n\nfunction EntityIndexError({ error }: { error: Error }) {\n if (is401UnauthorizedError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <SessionExpired />\n </div>\n );\n }\n if (is403ForbiddenError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <PermissionDenied resource=\"Trace Intelligence\" />\n </div>\n );\n }\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState tone=\"error\" titleSlot=\"Failed to load Trace Intelligence\" descriptionSlot={error.message} />\n </div>\n );\n}\n\nfunction EntityIndexControls({\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n headerAction,\n signalCatalog,\n}: Pick<\n TraceIntelligenceEntityIndexProps,\n 'search' | 'sort' | 'view' | 'onSearchChange' | 'onSortChange' | 'onViewChange' | 'headerAction'\n> & { signalCatalog: readonly SignalCatalogEntry[] }) {\n return (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <div className=\"max-w-120 flex-1\">\n <ListSearch\n value={search}\n onSearch={onSearchChange}\n label=\"Filter entities\"\n placeholder=\"Filter by entity identifier\"\n />\n </div>\n <div className=\"flex items-center justify-between gap-2 sm:ml-auto sm:justify-end\">\n <TraceIntelligenceExplainer signalCatalog={signalCatalog} />\n <Select<TraceIntelligenceEntitySort> value={sort} onValueChange={onSortChange}>\n <SelectTrigger aria-label=\"Sort entities\" size=\"md\" variant=\"ghost\" className=\"w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"end\">\n <SelectItem value=\"default\">Default order</SelectItem>\n <SelectItem value=\"entity-asc\">Entity: A–Z</SelectItem>\n <SelectItem value=\"entity-desc\">Entity: Z–A</SelectItem>\n </SelectContent>\n </Select>\n {headerAction}\n <ButtonsGroup aria-label=\"Entities view\">\n <Button\n type=\"button\"\n variant={view === 'list' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"List view\"\n aria-pressed={view === 'list'}\n onClick={() => onViewChange('list')}\n >\n <List />\n </Button>\n <Button\n type=\"button\"\n variant={view === 'compact' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"Compact view\"\n aria-pressed={view === 'compact'}\n onClick={() => onViewChange('compact')}\n >\n <Columns2 />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n );\n}\n\nexport function TraceIntelligenceEntityIndex({\n entityType,\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n getEntityHref,\n headerAction,\n}: TraceIntelligenceEntityIndexProps) {\n const entitiesQuery = useThemeEntities(entityType);\n const { LinkComponent, signalCatalog: contextSignalCatalog, signalManagement } = useTraceIntelligence();\n const [settingsOpen, setSettingsOpen] = useState(false);\n\n if (entitiesQuery.error) return <EntityIndexError error={entitiesQuery.error} />;\n\n const sourceEntities = entitiesQuery.data?.entities ?? [];\n const signalCatalog =\n sourceEntities.find(entity => entity.signalCatalog?.length)?.signalCatalog ?? contextSignalCatalog;\n const entities = filterAndSortEntities(sourceEntities, search, sort);\n const hasSearch = search.trim().length > 0;\n let body = (\n <EntityIndexList\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n if (entitiesQuery.isPending) {\n body = (\n <div role=\"status\" aria-label=\"Loading Trace Intelligence entities\">\n <DataListSkeleton columns={listColumns} />\n </div>\n );\n } else if (entitiesQuery.data.entities.length === 0 && !hasSearch) {\n body = (\n <EmptyState\n titleSlot=\"No Trace Intelligence entities yet\"\n descriptionSlot=\"Entities appear after Trace Intelligence begins collecting generated signal data.\"\n />\n );\n } else if (view === 'compact') {\n body = (\n <EntityIndexCompactGrid\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n }\n\n return (\n <div className=\"mx-auto grid size-full min-h-0 max-w-7xl grid-rows-[auto_minmax(0,1fr)]\">\n <div className=\"pb-3\">\n <EntityIndexControls\n search={search}\n sort={sort}\n view={view}\n onSearchChange={onSearchChange}\n onSortChange={onSortChange}\n onViewChange={onViewChange}\n signalCatalog={signalCatalog}\n headerAction={\n headerAction || signalManagement ? (\n <>\n {headerAction}\n {signalManagement ? (\n <TraceSignalSettingsButton open={settingsOpen} onClick={() => setSettingsOpen(open => !open)} />\n ) : null}\n </>\n ) : undefined\n }\n />\n </div>\n <div\n className={\n settingsOpen\n ? 'grid max-h-full min-h-0 grid-cols-1 items-start gap-4 lg:grid-cols-[1fr_1fr]'\n : 'grid min-h-0 grid-cols-1'\n }\n >\n <div className=\"min-h-0 min-w-0\">{body}</div>\n {settingsOpen ? <TraceSignalSettingsPanel onClose={() => setSettingsOpen(false)} /> : null}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trace-intelligence-entity-index.es.js","sources":["../../../../src/ee/signals/components/trace-intelligence-entity-index.tsx"],"sourcesContent":["import type { SignalCatalogEntry, ThemeLearningEntity } from '@mastra/client-js';\nimport { Columns2, List } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport { useThemeEntities } from '../hooks';\nimport { TraceSignalSettingsButton, TraceSignalSettingsPanel } from '../settings/trace-signal-settings';\nimport { TraceIntelligenceExplainer } from '../trace-intelligence-explainer';\nimport { useTraceIntelligence } from '../use-trace-intelligence';\nimport { EntityIndexCompactGrid } from './entity-index-compact-grid';\nimport { EntityIndexList } from './entity-index-list';\nimport { filterAndSortEntities } from './entity-index-model';\nimport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\nimport { PermissionDenied } from '@/domains/auth/components/permission-denied';\nimport { SessionExpired } from '@/domains/auth/components/session-expired';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { EmptyState } from '@/ds/components/EmptyState';\nimport { ListSearch } from '@/ds/components/ListSearch';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/utils/errors';\n\nexport type { TraceIntelligenceEntitySort, TraceIntelligenceEntityView } from './entity-index-model';\n\nconst listColumns = 'minmax(12rem,1.5fr) minmax(7rem,0.6fr) minmax(8rem,0.7fr) minmax(8rem,0.7fr) minmax(12rem,1fr)';\n\nexport interface TraceIntelligenceEntityIndexProps {\n entityType: string;\n search: string;\n sort: TraceIntelligenceEntitySort;\n view: TraceIntelligenceEntityView;\n onSearchChange: (search: string) => void;\n onSortChange: (sort: TraceIntelligenceEntitySort) => void;\n onViewChange: (view: TraceIntelligenceEntityView) => void;\n getEntityHref: (entity: ThemeLearningEntity) => string;\n headerAction?: ReactNode;\n}\n\nfunction EntityIndexError({ error }: { error: Error }) {\n if (is401UnauthorizedError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <SessionExpired />\n </div>\n );\n }\n if (is403ForbiddenError(error)) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <PermissionDenied resource=\"Trace Intelligence\" />\n </div>\n );\n }\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState tone=\"error\" titleSlot=\"Failed to load Trace Intelligence\" descriptionSlot={error.message} />\n </div>\n );\n}\n\nfunction EntityIndexControls({\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n headerAction,\n signalCatalog,\n}: Pick<\n TraceIntelligenceEntityIndexProps,\n 'search' | 'sort' | 'view' | 'onSearchChange' | 'onSortChange' | 'onViewChange' | 'headerAction'\n> & { signalCatalog: readonly SignalCatalogEntry[] }) {\n return (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <div className=\"max-w-120 flex-1\">\n <ListSearch\n value={search}\n onSearch={onSearchChange}\n label=\"Filter entities\"\n placeholder=\"Filter by entity identifier\"\n />\n </div>\n <div className=\"flex items-center justify-between gap-2 sm:ml-auto sm:justify-end\">\n <TraceIntelligenceExplainer signalCatalog={signalCatalog} />\n <Select<TraceIntelligenceEntitySort> value={sort} onValueChange={onSortChange}>\n <SelectTrigger aria-label=\"Sort entities\" size=\"md\" variant=\"ghost\" className=\"w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"end\">\n <SelectItem value=\"default\">Default order</SelectItem>\n <SelectItem value=\"entity-asc\">Entity: A–Z</SelectItem>\n <SelectItem value=\"entity-desc\">Entity: Z–A</SelectItem>\n </SelectContent>\n </Select>\n {headerAction}\n <ButtonsGroup aria-label=\"Entities view\">\n <Button\n type=\"button\"\n variant={view === 'list' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"List view\"\n aria-pressed={view === 'list'}\n onClick={() => onViewChange('list')}\n >\n <List />\n </Button>\n <Button\n type=\"button\"\n variant={view === 'compact' ? 'primary' : 'default'}\n size=\"icon-md\"\n tooltip=\"Compact view\"\n aria-pressed={view === 'compact'}\n onClick={() => onViewChange('compact')}\n >\n <Columns2 />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n );\n}\n\nexport function TraceIntelligenceEntityIndex({\n entityType,\n search,\n sort,\n view,\n onSearchChange,\n onSortChange,\n onViewChange,\n getEntityHref,\n headerAction,\n}: TraceIntelligenceEntityIndexProps) {\n const entitiesQuery = useThemeEntities(entityType);\n const { LinkComponent, signalCatalog: contextSignalCatalog, signalManagement } = useTraceIntelligence();\n const [settingsOpen, setSettingsOpen] = useState(false);\n\n if (entitiesQuery.error) return <EntityIndexError error={entitiesQuery.error} />;\n\n const sourceEntities = entitiesQuery.data?.entities ?? [];\n const signalCatalog =\n sourceEntities.find(entity => entity.signalCatalog?.length)?.signalCatalog ?? contextSignalCatalog;\n const entities = filterAndSortEntities(sourceEntities, search, sort);\n const hasSearch = search.trim().length > 0;\n let body = (\n <EntityIndexList\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n if (entitiesQuery.isPending) {\n body = (\n <div role=\"status\" aria-label=\"Loading Trace Intelligence entities\">\n <DataListSkeleton columns={listColumns} />\n </div>\n );\n } else if (entitiesQuery.data.entities.length === 0 && !hasSearch) {\n body = (\n <EmptyState\n titleSlot=\"No Trace Intelligence entities yet\"\n descriptionSlot=\"Entities appear after Trace Intelligence begins collecting generated signal data.\"\n />\n );\n } else if (view === 'compact') {\n body = (\n <EntityIndexCompactGrid\n entities={entities}\n hasSearch={hasSearch}\n getEntityHref={getEntityHref}\n LinkComponent={LinkComponent}\n />\n );\n }\n\n return (\n <div className=\"mx-auto grid size-full min-h-0 max-w-7xl grid-rows-[auto_minmax(0,1fr)]\">\n <div className=\"pb-3\">\n <EntityIndexControls\n search={search}\n sort={sort}\n view={view}\n onSearchChange={onSearchChange}\n onSortChange={onSortChange}\n onViewChange={onViewChange}\n signalCatalog={signalCatalog}\n headerAction={\n headerAction || signalManagement ? (\n <>\n {headerAction}\n {signalManagement ? (\n <TraceSignalSettingsButton open={settingsOpen} onClick={() => setSettingsOpen(open => !open)} />\n ) : null}\n </>\n ) : undefined\n }\n />\n </div>\n <div\n className={\n settingsOpen\n ? 'grid max-h-full min-h-0 grid-cols-1 items-start gap-4 lg:grid-cols-[1fr_1fr]'\n : 'grid min-h-0 grid-cols-1'\n }\n >\n <div className=\"min-h-0 min-w-0\">{body}</div>\n {settingsOpen ? <TraceSignalSettingsPanel onClose={() => setSettingsOpen(false)} /> : null}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|