@devqubit/ui 0.1.10-beta-2 → 0.1.11-beta.1

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.
@@ -67,6 +67,23 @@ export declare class ApiClient {
67
67
  error?: string;
68
68
  }>;
69
69
  getArtifactDownloadUrl(runId: string, index: number): string;
70
+ createExport(runId: string): Promise<{
71
+ status: string;
72
+ run_id: string;
73
+ artifact_count: number;
74
+ object_count: number;
75
+ missing_objects: string[];
76
+ }>;
77
+ getExportInfo(runId: string): Promise<{
78
+ run_id: string;
79
+ run_name?: string;
80
+ project?: string;
81
+ artifact_count: number;
82
+ object_count: number;
83
+ available_objects: number;
84
+ missing_objects: number;
85
+ }>;
86
+ getExportDownloadUrl(runId: string): string;
70
87
  }
71
88
  export declare const api: ApiClient;
72
89
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ExportRunButton Component
3
+ *
4
+ * Provides run export functionality (bundle creation) for devqubit-ui.
5
+ */
6
+ export interface ExportRunButtonProps {
7
+ /** Run ID to export */
8
+ runId: string;
9
+ /** Optional run name for display */
10
+ runName?: string;
11
+ /** Button variant */
12
+ variant?: 'primary' | 'secondary' | 'ghost';
13
+ /** Button size */
14
+ size?: 'default' | 'sm';
15
+ /** Additional class name */
16
+ className?: string;
17
+ /** Base URL for API requests */
18
+ apiBaseUrl?: string;
19
+ }
20
+ export interface ExportProgress {
21
+ status: 'idle' | 'preparing' | 'packing' | 'downloading' | 'complete' | 'error';
22
+ message?: string;
23
+ progress?: number;
24
+ artifactCount?: number;
25
+ objectCount?: number;
26
+ bundleSize?: number;
27
+ }
28
+ /**
29
+ * Button that triggers run export/bundle download.
30
+ */
31
+ export declare function ExportRunButton({ runId, runName, variant, size, className, apiBaseUrl, }: ExportRunButtonProps): import("react/jsx-runtime").JSX.Element;
32
+ //# sourceMappingURL=ExportRunButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportRunButton.d.ts","sourceRoot":"","sources":["../../../src/components/ExportRunButton/ExportRunButton.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC5C,kBAAkB;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,OAAqB,EACrB,IAAW,EACX,SAAc,EACd,UAAe,GAChB,EAAE,oBAAoB,2CAmMtB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ExportRunButton Component Exports
3
+ */
4
+ export { ExportRunButton } from './ExportRunButton';
5
+ export type { ExportRunButtonProps, ExportProgress } from './ExportRunButton';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ExportRunButton/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/Layout/Layout.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAC;AAYzD,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,EACT,EAAE;IACD,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAMA;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,WAAW,2CA0DpE;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,eAAe,2CAYvE"}
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/Layout/Layout.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAC;AAYzD,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,EACT,EAAE;IACD,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAMA;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,WAAW,2CAqDpE;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,eAAe,2CAUvE"}
@@ -13,4 +13,6 @@ export { ProjectsTable } from './ProjectsTable';
13
13
  export type { ProjectsTableProps } from './ProjectsTable';
14
14
  export { GroupsTable } from './GroupsTable';
15
15
  export type { GroupsTableProps } from './GroupsTable';
16
+ export { ExportRunButton } from './ExportRunButton';
17
+ export type { ExportRunButtonProps, ExportProgress } from './ExportRunButton';
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG7D,cAAc,MAAM,CAAC;AAGrB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG7D,cAAc,MAAM,CAAC;AAGrB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -106,4 +106,6 @@ export declare function useMutation<TArgs extends unknown[], TResult>(mutationFn
106
106
  error: ApiError | null;
107
107
  };
108
108
  export type { AsyncState, AppContextValue, };
109
+ export { ThemeProvider, useTheme, useThemeOptional } from './useTheme';
110
+ export type { Theme, ThemeContextValue, ThemeProviderProps } from './useTheme';
109
111
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAqB,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExD,oCAAoC;AACpC,UAAU,UAAU,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB;AAED,mCAAmC;AACnC,UAAU,eAAe;IACvB,GAAG,EAAE,SAAS,CAAC;IACf,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;CAC5D;AAID;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,gBAAgB,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,GAAgB,EAChB,gBAAuB,GACxB,EAAE,gBAAgB,2CAalB;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,eAAe,CAIxC;AA8CD;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;aA9C6B,MAAM,IAAI;EAoDvC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM;aAzDN,MAAM,IAAI;EAkEvC;AAED;;GAEG;AACH,wBAAgB,WAAW;aAvEG,MAAM,IAAI;EAgFvC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;aArFzB,MAAM,IAAI;EA8FvC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM;;;;aAnGV,MAAM,IAAI;EAyGvC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;aA9GxB,MAAM,IAAI;EAoHvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;;;;;aAzH1B,MAAM,IAAI;EA+HvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EAC1D,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,GAC/C;IACD,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB,CAoBA;AAED,YAAY,EACV,UAAU,EACV,eAAe,GAChB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAqB,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExD,oCAAoC;AACpC,UAAU,UAAU,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB;AAED,mCAAmC;AACnC,UAAU,eAAe;IACvB,GAAG,EAAE,SAAS,CAAC;IACf,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;CAC5D;AAID;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,gBAAgB,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,GAAgB,EAChB,gBAAuB,GACxB,EAAE,gBAAgB,2CAalB;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,eAAe,CAIxC;AA8CD;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;aA9C6B,MAAM,IAAI;EAoDvC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM;aAzDN,MAAM,IAAI;EAkEvC;AAED;;GAEG;AACH,wBAAgB,WAAW;aAvEG,MAAM,IAAI;EAgFvC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;aArFzB,MAAM,IAAI;EA8FvC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM;;;;aAnGV,MAAM,IAAI;EAyGvC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;aA9GxB,MAAM,IAAI;EAoHvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;;;;;aAzH1B,MAAM,IAAI;EA+HvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EAC1D,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,GAC/C;IACD,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB,CAoBA;AAED,YAAY,EACV,UAAU,EACV,eAAe,GAChB,CAAC;AAGF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { ReactNode } from 'react';
2
+ export type Theme = 'light' | 'dark' | 'system';
3
+ export interface ThemeContextValue {
4
+ theme: Theme;
5
+ resolvedTheme: 'light' | 'dark';
6
+ setTheme: (theme: Theme) => void;
7
+ toggleTheme: () => void;
8
+ }
9
+ export interface ThemeProviderProps {
10
+ children: ReactNode;
11
+ defaultTheme?: Theme;
12
+ storageKey?: string;
13
+ }
14
+ /**
15
+ * Theme Provider (No-op placeholder)
16
+ *
17
+ * Open-core version that provides light theme only.
18
+ * For dark mode support, use devqubit-hub's ThemeProvider.
19
+ */
20
+ export declare function ThemeProvider({ children }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
21
+ /**
22
+ * Hook to access theme context
23
+ */
24
+ export declare function useTheme(): ThemeContextValue;
25
+ /**
26
+ * Hook that returns theme context or defaults if not in ThemeProvider
27
+ */
28
+ export declare function useThemeOptional(): ThemeContextValue;
29
+ //# sourceMappingURL=useTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAc7D;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAY5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CAEpD"}
package/dist/index.cjs CHANGED
@@ -1,14 +1,14 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("react"),C=require("react-router-dom");var Fe={exports:{}},ve={};var Ns;function yr(){if(Ns)return ve;Ns=1;var r=v,t=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,d=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function m(n,h,f){var x,p={},w=null,H=null;f!==void 0&&(w=""+f),h.key!==void 0&&(w=""+h.key),h.ref!==void 0&&(H=h.ref);for(x in h)i.call(h,x)&&!o.hasOwnProperty(x)&&(p[x]=h[x]);if(n&&n.defaultProps)for(x in h=n.defaultProps,h)p[x]===void 0&&(p[x]=h[x]);return{$$typeof:t,type:n,key:w,ref:H,props:p,_owner:d.current}}return ve.Fragment=a,ve.jsx=m,ve.jsxs=m,ve}var be={};var ys;function _r(){return ys||(ys=1,process.env.NODE_ENV!=="production"&&(function(){var r=v,t=Symbol.for("react.element"),a=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),d=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),m=Symbol.for("react.provider"),n=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),x=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),H=Symbol.for("react.offscreen"),S=Symbol.iterator,Z="@@iterator";function K(s){if(s===null||typeof s!="object")return null;var l=S&&s[S]||s[Z];return typeof l=="function"?l:null}var J=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function k(s){{for(var l=arguments.length,u=new Array(l>1?l-1:0),g=1;g<l;g++)u[g-1]=arguments[g];le("error",s,u)}}function le(s,l,u){{var g=J.ReactDebugCurrentFrame,E=g.getStackAddendum();E!==""&&(l+="%s",u=u.concat([E]));var P=u.map(function(R){return String(R)});P.unshift("Warning: "+l),Function.prototype.apply.call(console[s],console,P)}}var oe=!1,ee=!1,Se=!1,Ee=!1,de=!1,je;je=Symbol.for("react.module.reference");function Ie(s){return!!(typeof s=="string"||typeof s=="function"||s===i||s===o||de||s===d||s===f||s===x||Ee||s===H||oe||ee||Se||typeof s=="object"&&s!==null&&(s.$$typeof===w||s.$$typeof===p||s.$$typeof===m||s.$$typeof===n||s.$$typeof===h||s.$$typeof===je||s.getModuleId!==void 0))}function Me(s,l,u){var g=s.displayName;if(g)return g;var E=l.displayName||l.name||"";return E!==""?u+"("+E+")":u}function Pe(s){return s.displayName||"Context"}function _(s){if(s==null)return null;if(typeof s.tag=="number"&&k("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof s=="function")return s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case i:return"Fragment";case a:return"Portal";case o:return"Profiler";case d:return"StrictMode";case f:return"Suspense";case x:return"SuspenseList"}if(typeof s=="object")switch(s.$$typeof){case n:var l=s;return Pe(l)+".Consumer";case m:var u=s;return Pe(u._context)+".Provider";case h:return Me(s,s.render,"ForwardRef");case p:var g=s.displayName||null;return g!==null?g:_(s.type)||"Memo";case w:{var E=s,P=E._payload,R=E._init;try{return _(R(P))}catch{return null}}}return null}var T=Object.assign,ne=0,pe,Ce,ae,ss,rs,ts,ns;function as(){}as.__reactDisabledLog=!0;function Ks(){{if(ne===0){pe=console.log,Ce=console.info,ae=console.warn,ss=console.error,rs=console.group,ts=console.groupCollapsed,ns=console.groupEnd;var s={configurable:!0,enumerable:!0,value:as,writable:!0};Object.defineProperties(console,{info:s,log:s,warn:s,error:s,group:s,groupCollapsed:s,groupEnd:s})}ne++}}function Js(){{if(ne--,ne===0){var s={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:T({},s,{value:pe}),info:T({},s,{value:Ce}),warn:T({},s,{value:ae}),error:T({},s,{value:ss}),group:T({},s,{value:rs}),groupCollapsed:T({},s,{value:ts}),groupEnd:T({},s,{value:ns})})}ne<0&&k("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ue=J.ReactCurrentDispatcher,qe;function Te(s,l,u){{if(qe===void 0)try{throw Error()}catch(E){var g=E.stack.trim().match(/\n( *(at )?)/);qe=g&&g[1]||""}return`
2
- `+qe+s}}var Ge=!1,ke;{var Xs=typeof WeakMap=="function"?WeakMap:Map;ke=new Xs}function is(s,l){if(!s||Ge)return"";{var u=ke.get(s);if(u!==void 0)return u}var g;Ge=!0;var E=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var P;P=Ue.current,Ue.current=null,Ks();try{if(l){var R=function(){throw Error()};if(Object.defineProperty(R.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(R,[])}catch(V){g=V}Reflect.construct(s,[],R)}else{try{R.call()}catch(V){g=V}s.call(R.prototype)}}else{try{throw Error()}catch(V){g=V}s()}}catch(V){if(V&&g&&typeof V.stack=="string"){for(var N=V.stack.split(`
3
- `),U=g.stack.split(`
4
- `),F=N.length-1,$=U.length-1;F>=1&&$>=0&&N[F]!==U[$];)$--;for(;F>=1&&$>=0;F--,$--)if(N[F]!==U[$]){if(F!==1||$!==1)do if(F--,$--,$<0||N[F]!==U[$]){var z=`
5
- `+N[F].replace(" at new "," at ");return s.displayName&&z.includes("<anonymous>")&&(z=z.replace("<anonymous>",s.displayName)),typeof s=="function"&&ke.set(s,z),z}while(F>=1&&$>=0);break}}}finally{Ge=!1,Ue.current=P,Js(),Error.prepareStackTrace=E}var he=s?s.displayName||s.name:"",ie=he?Te(he):"";return typeof s=="function"&&ke.set(s,ie),ie}function Qs(s,l,u){return is(s,!1)}function Zs(s){var l=s.prototype;return!!(l&&l.isReactComponent)}function De(s,l,u){if(s==null)return"";if(typeof s=="function")return is(s,Zs(s));if(typeof s=="string")return Te(s);switch(s){case f:return Te("Suspense");case x:return Te("SuspenseList")}if(typeof s=="object")switch(s.$$typeof){case h:return Qs(s.render);case p:return De(s.type,l,u);case w:{var g=s,E=g._payload,P=g._init;try{return De(P(E),l,u)}catch{}}}return""}var ge=Object.prototype.hasOwnProperty,cs={},ls=J.ReactDebugCurrentFrame;function Ae(s){if(s){var l=s._owner,u=De(s.type,s._source,l?l.type:null);ls.setExtraStackFrame(u)}else ls.setExtraStackFrame(null)}function er(s,l,u,g,E){{var P=Function.call.bind(ge);for(var R in s)if(P(s,R)){var N=void 0;try{if(typeof s[R]!="function"){var U=Error((g||"React class")+": "+u+" type `"+R+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof s[R]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw U.name="Invariant Violation",U}N=s[R](l,R,g,u,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(F){N=F}N&&!(N instanceof Error)&&(Ae(E),k("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",g||"React class",u,R,typeof N),Ae(null)),N instanceof Error&&!(N.message in cs)&&(cs[N.message]=!0,Ae(E),k("Failed %s type: %s",u,N.message),Ae(null))}}}var sr=Array.isArray;function Ve(s){return sr(s)}function rr(s){{var l=typeof Symbol=="function"&&Symbol.toStringTag,u=l&&s[Symbol.toStringTag]||s.constructor.name||"Object";return u}}function tr(s){try{return os(s),!1}catch{return!0}}function os(s){return""+s}function ds(s){if(tr(s))return k("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",rr(s)),os(s)}var us=J.ReactCurrentOwner,nr={key:!0,ref:!0,__self:!0,__source:!0},hs,xs;function ar(s){if(ge.call(s,"ref")){var l=Object.getOwnPropertyDescriptor(s,"ref").get;if(l&&l.isReactWarning)return!1}return s.ref!==void 0}function ir(s){if(ge.call(s,"key")){var l=Object.getOwnPropertyDescriptor(s,"key").get;if(l&&l.isReactWarning)return!1}return s.key!==void 0}function cr(s,l){typeof s.ref=="string"&&us.current}function lr(s,l){{var u=function(){hs||(hs=!0,k("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",l))};u.isReactWarning=!0,Object.defineProperty(s,"key",{get:u,configurable:!0})}}function or(s,l){{var u=function(){xs||(xs=!0,k("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",l))};u.isReactWarning=!0,Object.defineProperty(s,"ref",{get:u,configurable:!0})}}var dr=function(s,l,u,g,E,P,R){var N={$$typeof:t,type:s,key:l,ref:u,props:R,_owner:P};return N._store={},Object.defineProperty(N._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(N,"_self",{configurable:!1,enumerable:!1,writable:!1,value:g}),Object.defineProperty(N,"_source",{configurable:!1,enumerable:!1,writable:!1,value:E}),Object.freeze&&(Object.freeze(N.props),Object.freeze(N)),N};function ur(s,l,u,g,E){{var P,R={},N=null,U=null;u!==void 0&&(ds(u),N=""+u),ir(l)&&(ds(l.key),N=""+l.key),ar(l)&&(U=l.ref,cr(l,E));for(P in l)ge.call(l,P)&&!nr.hasOwnProperty(P)&&(R[P]=l[P]);if(s&&s.defaultProps){var F=s.defaultProps;for(P in F)R[P]===void 0&&(R[P]=F[P])}if(N||U){var $=typeof s=="function"?s.displayName||s.name||"Unknown":s;N&&lr(R,$),U&&or(R,$)}return dr(s,N,U,E,g,us.current,R)}}var We=J.ReactCurrentOwner,ms=J.ReactDebugCurrentFrame;function ue(s){if(s){var l=s._owner,u=De(s.type,s._source,l?l.type:null);ms.setExtraStackFrame(u)}else ms.setExtraStackFrame(null)}var Ye;Ye=!1;function ze(s){return typeof s=="object"&&s!==null&&s.$$typeof===t}function fs(){{if(We.current){var s=_(We.current.type);if(s)return`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react"),T=require("react-router-dom");var Fe={exports:{}},_e={};var _s;function Et(){if(_s)return _e;_s=1;var t=g,r=Symbol.for("react.element"),n=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,u=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function d(i,f,h){var m,p={},w=null,V=null;h!==void 0&&(w=""+h),f.key!==void 0&&(w=""+f.key),f.ref!==void 0&&(V=f.ref);for(m in f)a.call(f,m)&&!o.hasOwnProperty(m)&&(p[m]=f[m]);if(i&&i.defaultProps)for(m in f=i.defaultProps,f)p[m]===void 0&&(p[m]=f[m]);return{$$typeof:r,type:i,key:w,ref:V,props:p,_owner:u.current}}return _e.Fragment=n,_e.jsx=d,_e.jsxs=d,_e}var we={};var ws;function St(){return ws||(ws=1,process.env.NODE_ENV!=="production"&&(function(){var t=g,r=Symbol.for("react.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),d=Symbol.for("react.provider"),i=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),m=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),V=Symbol.for("react.offscreen"),R=Symbol.iterator,K="@@iterator";function k(s){if(s===null||typeof s!="object")return null;var l=R&&s[R]||s[K];return typeof l=="function"?l:null}var $=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function P(s){{for(var l=arguments.length,x=new Array(l>1?l-1:0),v=1;v<l;v++)x[v-1]=arguments[v];te("error",s,x)}}function te(s,l,x){{var v=$.ReactDebugCurrentFrame,E=v.getStackAddendum();E!==""&&(l+="%s",x=x.concat([E]));var S=x.map(function(C){return String(C)});S.unshift("Warning: "+l),Function.prototype.apply.call(console[s],console,S)}}var ne=!1,J=!1,ee=!1,ae=!1,xe=!1,be;be=Symbol.for("react.module.reference");function Me(s){return!!(typeof s=="string"||typeof s=="function"||s===a||s===o||xe||s===u||s===h||s===m||ae||s===V||ne||J||ee||typeof s=="object"&&s!==null&&(s.$$typeof===w||s.$$typeof===p||s.$$typeof===d||s.$$typeof===i||s.$$typeof===f||s.$$typeof===be||s.getModuleId!==void 0))}function Ue(s,l,x){var v=s.displayName;if(v)return v;var E=l.displayName||l.name||"";return E!==""?x+"("+E+")":x}function Se(s){return s.displayName||"Context"}function _(s){if(s==null)return null;if(typeof s.tag=="number"&&P("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof s=="function")return s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case a:return"Fragment";case n:return"Portal";case o:return"Profiler";case u:return"StrictMode";case h:return"Suspense";case m:return"SuspenseList"}if(typeof s=="object")switch(s.$$typeof){case i:var l=s;return Se(l)+".Consumer";case d:var x=s;return Se(x._context)+".Provider";case f:return Ue(s,s.render,"ForwardRef");case p:var v=s.displayName||null;return v!==null?v:_(s.type)||"Memo";case w:{var E=s,S=E._payload,C=E._init;try{return _(C(S))}catch{return null}}}return null}var D=Object.assign,oe=0,ye,ke,de,rs,ns,as,is;function cs(){}cs.__reactDisabledLog=!0;function et(){{if(oe===0){ye=console.log,ke=console.info,de=console.warn,rs=console.error,ns=console.group,as=console.groupCollapsed,is=console.groupEnd;var s={configurable:!0,enumerable:!0,value:cs,writable:!0};Object.defineProperties(console,{info:s,log:s,warn:s,error:s,group:s,groupCollapsed:s,groupEnd:s})}oe++}}function st(){{if(oe--,oe===0){var s={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:D({},s,{value:ye}),info:D({},s,{value:ke}),warn:D({},s,{value:de}),error:D({},s,{value:rs}),group:D({},s,{value:ns}),groupCollapsed:D({},s,{value:as}),groupEnd:D({},s,{value:is})})}oe<0&&P("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ge=$.ReactCurrentDispatcher,We;function Pe(s,l,x){{if(We===void 0)try{throw Error()}catch(E){var v=E.stack.trim().match(/\n( *(at )?)/);We=v&&v[1]||""}return`
2
+ `+We+s}}var Ve=!1,Te;{var tt=typeof WeakMap=="function"?WeakMap:Map;Te=new tt}function ls(s,l){if(!s||Ve)return"";{var x=Te.get(s);if(x!==void 0)return x}var v;Ve=!0;var E=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var S;S=Ge.current,Ge.current=null,et();try{if(l){var C=function(){throw Error()};if(Object.defineProperty(C.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(C,[])}catch(z){v=z}Reflect.construct(s,[],C)}else{try{C.call()}catch(z){v=z}s.call(C.prototype)}}else{try{throw Error()}catch(z){v=z}s()}}catch(z){if(z&&v&&typeof z.stack=="string"){for(var y=z.stack.split(`
3
+ `),M=v.stack.split(`
4
+ `),F=y.length-1,O=M.length-1;F>=1&&O>=0&&y[F]!==M[O];)O--;for(;F>=1&&O>=0;F--,O--)if(y[F]!==M[O]){if(F!==1||O!==1)do if(F--,O--,O<0||y[F]!==M[O]){var X=`
5
+ `+y[F].replace(" at new "," at ");return s.displayName&&X.includes("<anonymous>")&&(X=X.replace("<anonymous>",s.displayName)),typeof s=="function"&&Te.set(s,X),X}while(F>=1&&O>=0);break}}}finally{Ve=!1,Ge.current=S,st(),Error.prepareStackTrace=E}var fe=s?s.displayName||s.name:"",ue=fe?Pe(fe):"";return typeof s=="function"&&Te.set(s,ue),ue}function rt(s,l,x){return ls(s,!1)}function nt(s){var l=s.prototype;return!!(l&&l.isReactComponent)}function De(s,l,x){if(s==null)return"";if(typeof s=="function")return ls(s,nt(s));if(typeof s=="string")return Pe(s);switch(s){case h:return Pe("Suspense");case m:return Pe("SuspenseList")}if(typeof s=="object")switch(s.$$typeof){case f:return rt(s.render);case p:return De(s.type,l,x);case w:{var v=s,E=v._payload,S=v._init;try{return De(S(E),l,x)}catch{}}}return""}var Ne=Object.prototype.hasOwnProperty,os={},ds=$.ReactDebugCurrentFrame;function Ae(s){if(s){var l=s._owner,x=De(s.type,s._source,l?l.type:null);ds.setExtraStackFrame(x)}else ds.setExtraStackFrame(null)}function at(s,l,x,v,E){{var S=Function.call.bind(Ne);for(var C in s)if(S(s,C)){var y=void 0;try{if(typeof s[C]!="function"){var M=Error((v||"React class")+": "+x+" type `"+C+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof s[C]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw M.name="Invariant Violation",M}y=s[C](l,C,v,x,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(F){y=F}y&&!(y instanceof Error)&&(Ae(E),P("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",v||"React class",x,C,typeof y),Ae(null)),y instanceof Error&&!(y.message in os)&&(os[y.message]=!0,Ae(E),P("Failed %s type: %s",x,y.message),Ae(null))}}}var it=Array.isArray;function ze(s){return it(s)}function ct(s){{var l=typeof Symbol=="function"&&Symbol.toStringTag,x=l&&s[Symbol.toStringTag]||s.constructor.name||"Object";return x}}function lt(s){try{return us(s),!1}catch{return!0}}function us(s){return""+s}function hs(s){if(lt(s))return P("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",ct(s)),us(s)}var xs=$.ReactCurrentOwner,ot={key:!0,ref:!0,__self:!0,__source:!0},ms,fs;function dt(s){if(Ne.call(s,"ref")){var l=Object.getOwnPropertyDescriptor(s,"ref").get;if(l&&l.isReactWarning)return!1}return s.ref!==void 0}function ut(s){if(Ne.call(s,"key")){var l=Object.getOwnPropertyDescriptor(s,"key").get;if(l&&l.isReactWarning)return!1}return s.key!==void 0}function ht(s,l){typeof s.ref=="string"&&xs.current}function xt(s,l){{var x=function(){ms||(ms=!0,P("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",l))};x.isReactWarning=!0,Object.defineProperty(s,"key",{get:x,configurable:!0})}}function mt(s,l){{var x=function(){fs||(fs=!0,P("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",l))};x.isReactWarning=!0,Object.defineProperty(s,"ref",{get:x,configurable:!0})}}var ft=function(s,l,x,v,E,S,C){var y={$$typeof:r,type:s,key:l,ref:x,props:C,_owner:S};return y._store={},Object.defineProperty(y._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(y,"_self",{configurable:!1,enumerable:!1,writable:!1,value:v}),Object.defineProperty(y,"_source",{configurable:!1,enumerable:!1,writable:!1,value:E}),Object.freeze&&(Object.freeze(y.props),Object.freeze(y)),y};function jt(s,l,x,v,E){{var S,C={},y=null,M=null;x!==void 0&&(hs(x),y=""+x),ut(l)&&(hs(l.key),y=""+l.key),dt(l)&&(M=l.ref,ht(l,E));for(S in l)Ne.call(l,S)&&!ot.hasOwnProperty(S)&&(C[S]=l[S]);if(s&&s.defaultProps){var F=s.defaultProps;for(S in F)C[S]===void 0&&(C[S]=F[S])}if(y||M){var O=typeof s=="function"?s.displayName||s.name||"Unknown":s;y&&xt(C,O),M&&mt(C,O)}return ft(s,y,M,E,v,xs.current,C)}}var Ye=$.ReactCurrentOwner,js=$.ReactDebugCurrentFrame;function me(s){if(s){var l=s._owner,x=De(s.type,s._source,l?l.type:null);js.setExtraStackFrame(x)}else js.setExtraStackFrame(null)}var He;He=!1;function Ke(s){return typeof s=="object"&&s!==null&&s.$$typeof===r}function ps(){{if(Ye.current){var s=_(Ye.current.type);if(s)return`
6
6
 
7
- Check the render method of \``+s+"`."}return""}}function hr(s){return""}var js={};function xr(s){{var l=fs();if(!l){var u=typeof s=="string"?s:s.displayName||s.name;u&&(l=`
7
+ Check the render method of \``+s+"`."}return""}}function pt(s){return""}var gs={};function gt(s){{var l=ps();if(!l){var x=typeof s=="string"?s:s.displayName||s.name;x&&(l=`
8
8
 
9
- Check the top-level render call using <`+u+">.")}return l}}function ps(s,l){{if(!s._store||s._store.validated||s.key!=null)return;s._store.validated=!0;var u=xr(l);if(js[u])return;js[u]=!0;var g="";s&&s._owner&&s._owner!==We.current&&(g=" It was passed a child from "+_(s._owner.type)+"."),ue(s),k('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',u,g),ue(null)}}function gs(s,l){{if(typeof s!="object")return;if(Ve(s))for(var u=0;u<s.length;u++){var g=s[u];ze(g)&&ps(g,l)}else if(ze(s))s._store&&(s._store.validated=!0);else if(s){var E=K(s);if(typeof E=="function"&&E!==s.entries)for(var P=E.call(s),R;!(R=P.next()).done;)ze(R.value)&&ps(R.value,l)}}}function mr(s){{var l=s.type;if(l==null||typeof l=="string")return;var u;if(typeof l=="function")u=l.propTypes;else if(typeof l=="object"&&(l.$$typeof===h||l.$$typeof===p))u=l.propTypes;else return;if(u){var g=_(l);er(u,s.props,"prop",g,s)}else if(l.PropTypes!==void 0&&!Ye){Ye=!0;var E=_(l);k("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",E||"Unknown")}typeof l.getDefaultProps=="function"&&!l.getDefaultProps.isReactClassApproved&&k("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function fr(s){{for(var l=Object.keys(s.props),u=0;u<l.length;u++){var g=l[u];if(g!=="children"&&g!=="key"){ue(s),k("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",g),ue(null);break}}s.ref!==null&&(ue(s),k("Invalid attribute `ref` supplied to `React.Fragment`."),ue(null))}}var vs={};function bs(s,l,u,g,E,P){{var R=Ie(s);if(!R){var N="";(s===void 0||typeof s=="object"&&s!==null&&Object.keys(s).length===0)&&(N+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var U=hr();U?N+=U:N+=fs();var F;s===null?F="null":Ve(s)?F="array":s!==void 0&&s.$$typeof===t?(F="<"+(_(s.type)||"Unknown")+" />",N=" Did you accidentally export a JSX literal instead of a component?"):F=typeof s,k("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",F,N)}var $=ur(s,l,u,E,P);if($==null)return $;if(R){var z=l.children;if(z!==void 0)if(g)if(Ve(z)){for(var he=0;he<z.length;he++)gs(z[he],s);Object.freeze&&Object.freeze(z)}else k("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else gs(z,s)}if(ge.call(l,"key")){var ie=_(s),V=Object.keys(l).filter(function(Nr){return Nr!=="key"}),He=V.length>0?"{key: someKey, "+V.join(": ..., ")+": ...}":"{key: someKey}";if(!vs[ie+He]){var br=V.length>0?"{"+V.join(": ..., ")+": ...}":"{}";k(`A props object containing a "key" prop is being spread into JSX:
9
+ Check the top-level render call using <`+x+">.")}return l}}function vs(s,l){{if(!s._store||s._store.validated||s.key!=null)return;s._store.validated=!0;var x=gt(l);if(gs[x])return;gs[x]=!0;var v="";s&&s._owner&&s._owner!==Ye.current&&(v=" It was passed a child from "+_(s._owner.type)+"."),me(s),P('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',x,v),me(null)}}function bs(s,l){{if(typeof s!="object")return;if(ze(s))for(var x=0;x<s.length;x++){var v=s[x];Ke(v)&&vs(v,l)}else if(Ke(s))s._store&&(s._store.validated=!0);else if(s){var E=k(s);if(typeof E=="function"&&E!==s.entries)for(var S=E.call(s),C;!(C=S.next()).done;)Ke(C.value)&&vs(C.value,l)}}}function vt(s){{var l=s.type;if(l==null||typeof l=="string")return;var x;if(typeof l=="function")x=l.propTypes;else if(typeof l=="object"&&(l.$$typeof===f||l.$$typeof===p))x=l.propTypes;else return;if(x){var v=_(l);at(x,s.props,"prop",v,s)}else if(l.PropTypes!==void 0&&!He){He=!0;var E=_(l);P("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",E||"Unknown")}typeof l.getDefaultProps=="function"&&!l.getDefaultProps.isReactClassApproved&&P("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function bt(s){{for(var l=Object.keys(s.props),x=0;x<l.length;x++){var v=l[x];if(v!=="children"&&v!=="key"){me(s),P("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",v),me(null);break}}s.ref!==null&&(me(s),P("Invalid attribute `ref` supplied to `React.Fragment`."),me(null))}}var ys={};function Ns(s,l,x,v,E,S){{var C=Me(s);if(!C){var y="";(s===void 0||typeof s=="object"&&s!==null&&Object.keys(s).length===0)&&(y+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var M=pt();M?y+=M:y+=ps();var F;s===null?F="null":ze(s)?F="array":s!==void 0&&s.$$typeof===r?(F="<"+(_(s.type)||"Unknown")+" />",y=" Did you accidentally export a JSX literal instead of a component?"):F=typeof s,P("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",F,y)}var O=jt(s,l,x,E,S);if(O==null)return O;if(C){var X=l.children;if(X!==void 0)if(v)if(ze(X)){for(var fe=0;fe<X.length;fe++)bs(X[fe],s);Object.freeze&&Object.freeze(X)}else P("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else bs(X,s)}if(Ne.call(l,"key")){var ue=_(s),z=Object.keys(l).filter(function(Ct){return Ct!=="key"}),Je=z.length>0?"{key: someKey, "+z.join(": ..., ")+": ...}":"{key: someKey}";if(!ys[ue+Je]){var Rt=z.length>0?"{"+z.join(": ..., ")+": ...}":"{}";P(`A props object containing a "key" prop is being spread into JSX:
10
10
  let props = %s;
11
11
  <%s {...props} />
12
12
  React keys must be passed directly to JSX without using spread:
13
13
  let props = %s;
14
- <%s key={someKey} {...props} />`,He,ie,br,ie),vs[ie+He]=!0}}return s===i?fr($):mr($),$}}function jr(s,l,u){return bs(s,l,u,!0)}function pr(s,l,u){return bs(s,l,u,!1)}var gr=pr,vr=jr;be.Fragment=i,be.jsx=gr,be.jsxs=vr})()),be}var _s;function Rr(){return _s||(_s=1,process.env.NODE_ENV==="production"?Fe.exports=yr():Fe.exports=_r()),Fe.exports}var e=Rr();class xe extends Error{constructor(t,a){super(a),this.status=t,this.name="ApiError"}}class Rs{baseUrl;headers;constructor(t={}){this.baseUrl=t.baseUrl??"",this.headers={"Content-Type":"application/json",...t.headers}}async request(t,a,i={}){let d=`${this.baseUrl}${a}`;if(i.params){const m=new URLSearchParams;Object.entries(i.params).forEach(([h,f])=>{f!=null&&f!==""&&m.set(h,String(f))});const n=m.toString();n&&(d+=`?${n}`)}const o=await fetch(d,{method:t,headers:this.headers,body:i.body?JSON.stringify(i.body):void 0});if(!o.ok){const m=await o.json().catch(()=>({detail:"Unknown error"}));throw new xe(o.status,m.detail||o.statusText)}if(!(o.status===204||o.headers.get("content-length")==="0"))return o.json()}async getCapabilities(){return this.request("GET","/api/v1/capabilities")}async listRuns(t){return this.request("GET","/api/runs",{params:t})}async getRun(t){return this.request("GET",`/api/runs/${t}`)}async deleteRun(t){await this.request("DELETE",`/api/runs/${t}`)}async setBaseline(t,a){return this.request("POST",`/api/projects/${t}/baseline/${a}`,{params:{redirect:"false"}})}async listProjects(t){return this.request("GET","/api/projects",{params:t})}async listGroups(t){return this.request("GET","/api/groups",{params:t})}async getGroup(t){return this.request("GET",`/api/groups/${t}`)}async getDiff(t,a){return this.request("GET","/api/diff",{params:{a:t,b:a}})}async getArtifact(t,a){return this.request("GET",`/api/runs/${t}/artifacts/${a}`)}getArtifactDownloadUrl(t,a){return`${this.baseUrl}/api/runs/${t}/artifacts/${a}/raw`}}const ws=new Rs,Ss=v.createContext(null);function Es({children:r,api:t=ws,initialWorkspace:a=null}){const[i,d]=v.useState(null),[o,m]=v.useState(a);return v.useEffect(()=>{t.getCapabilities().then(d).catch(console.error)},[t]),e.jsx(Ss.Provider,{value:{api:t,capabilities:i,currentWorkspace:o,setCurrentWorkspace:m},children:r})}function W(){const r=v.useContext(Ss);if(!r)throw new Error("useApp must be used within AppProvider");return r}function ce(r,t=[]){const[a,i]=v.useState({data:null,loading:!0,error:null}),d=v.useRef(!0),o=v.useRef(r);o.current=r;const m=v.useCallback(async()=>{i(n=>({...n,loading:!0,error:null}));try{const n=await o.current();d.current&&i({data:n,loading:!1,error:null})}catch(n){d.current&&i({data:null,loading:!1,error:n instanceof xe?n:new xe(500,String(n))})}},[]);return v.useEffect(()=>(d.current=!0,m(),()=>{d.current=!1}),t),{...a,refetch:m}}function Ke(r){const{api:t,currentWorkspace:a}=W();return ce(()=>t.listRuns({...r,workspace:a?.id}),[t,a?.id,r?.project,r?.status,r?.q,r?.limit])}function Je(r){const{api:t}=W();return ce(async()=>{const{run:a}=await t.getRun(r);return a},[t,r])}function Re(){const{api:r,currentWorkspace:t}=W();return ce(async()=>{const{projects:a}=await r.listProjects({workspace:t?.id});return a},[r,t?.id])}function Ps(r){const{api:t,currentWorkspace:a}=W();return ce(async()=>{const{groups:i}=await t.listGroups({...r,workspace:a?.id});return i},[t,a?.id,r?.project])}function Cs(r){const{api:t}=W();return ce(()=>t.getGroup(r),[t,r])}function Ts(r,t){const{api:a}=W();return ce(()=>a.getDiff(r,t),[a,r,t])}function ks(r,t){const{api:a}=W();return ce(()=>a.getArtifact(r,t),[a,r,t])}function me(r){const[t,a]=v.useState(!1),[i,d]=v.useState(null);return{mutate:v.useCallback(async(...m)=>{a(!0),d(null);try{return await r(...m)}catch(n){const h=n instanceof xe?n:new xe(500,String(n));throw d(h),h}finally{a(!1)}},[r]),loading:t,error:i}}function Y(r){return r?.slice(0,8)??""}function Oe(r){return r?.slice(0,12)??"N/A"}function _e(r){const t=new Date(r),i=Math.floor((new Date().getTime()-t.getTime())/1e3);if(i<60)return"just now";if(i<3600){const o=Math.floor(i/60);return`${o} minute${o!==1?"s":""} ago`}if(i<86400){const o=Math.floor(i/3600);return`${o} hour${o!==1?"s":""} ago`}if(i<2592e3){const o=Math.floor(i/86400);return`${o} day${o!==1?"s":""} ago`}if(i<31536e3){const o=Math.floor(i/2592e3);return`${o} month${o!==1?"s":""} ago`}const d=Math.floor(i/31536e3);return`${d} year${d!==1?"s":""} ago`}function Ds(r,t=6){return typeof r!="number"||isNaN(r)?String(r):Number(r.toPrecision(t)).toString()}function ye(r){return r<1024?`${r} bytes`:r<1048576?`${(r/1024).toFixed(1)} KB`:`${(r/1048576).toFixed(1)} MB`}function As(r){return JSON.stringify(r,null,2)}function Fs(r,t=60){return r?r.length<=t?r:r.slice(0,t-3)+"...":""}function wr(r,t){const a=new URLSearchParams;Object.entries(t).forEach(([d,o])=>{o!=null&&o!==""&&a.set(d,String(o))});const i=a.toString();return i?`${r}?${i}`:r}function L(...r){return r.filter(Boolean).join(" ")}const Sr=[{href:"/runs",label:"Runs",matchPaths:["/runs"]},{href:"/projects",label:"Projects",matchPaths:["/projects"]},{href:"/groups",label:"Groups",matchPaths:["/groups"]},{href:"/diff",label:"Compare",matchPaths:["/diff"]},{href:"/search",label:"Search",matchPaths:["/search"]}],Os=v.createContext(null);function Er({config:r,children:t}){return e.jsx(Os.Provider,{value:r,children:t})}function $s(){return v.useContext(Os)}function q({children:r,config:t}){const a=C.useLocation(),d={...$s(),...t},o=d?.navLinks??Sr,m=[...d?.prependNavLinks??[],...o,...d?.appendNavLinks??[]],n=d?.logo??{text:"devqubit",icon:"⚛"},h=f=>f.matchPaths?f.matchPaths.some(x=>a.pathname.startsWith(x)):a.pathname===f.href;return e.jsxs("div",{className:"min-h-screen bg-gray-50",children:[e.jsx("header",{className:"bg-gray-900 h-14 sticky top-0 z-50 shadow-sm",children:e.jsxs("div",{className:"max-w-container mx-auto px-6 h-full flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-8",children:[e.jsxs(C.Link,{to:"/",className:"text-lg font-semibold text-primary hover:text-primary-light flex items-center gap-2 transition-colors",children:[n.icon&&e.jsx("span",{className:"text-xl",children:n.icon}),n.text]}),e.jsx("nav",{className:"flex gap-1",children:m.map(f=>e.jsx(C.Link,{to:f.href,className:L("px-3 py-2 rounded-md text-sm font-medium transition-colors duration-150",h(f)?"text-white bg-white/10":"text-gray-400 hover:text-white hover:bg-white/5"),children:f.label},f.href))})]}),e.jsx("div",{className:"flex items-center gap-4",children:d?.headerRight})]})}),e.jsx("main",{className:"max-w-container mx-auto p-6 fade-in",children:r})]})}function fe({title:r,subtitle:t,actions:a}){return e.jsxs("div",{className:"flex items-start justify-between mb-6 gap-4 flex-wrap",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-semibold text-gray-900 flex items-center gap-2 flex-wrap",children:r}),t&&e.jsx("p",{className:"text-sm text-muted mt-1",children:t})]}),a&&e.jsx("div",{className:"flex gap-2",children:a})]})}function M({variant:r="gray",className:t,children:a,...i}){return e.jsx("span",{className:L("badge",`badge-${r}`,t),...i,children:a})}const O=v.forwardRef(({variant:r="secondary",size:t="default",loading:a,className:i,children:d,disabled:o,...m},n)=>e.jsxs("button",{ref:n,className:L("btn",r==="ghost-danger"?"btn-ghost-danger":`btn-${r}`,t==="sm"&&"btn-sm",i),disabled:o||a,...m,children:[a&&e.jsx(G,{}),d]}));O.displayName="Button";function b({className:r,children:t,...a}){return e.jsx("div",{className:L("card",r),...a,children:t})}function D({className:r,children:t,...a}){return e.jsx("div",{className:L("card-header",r),...a,children:t})}function A({className:r,children:t,...a}){return e.jsx("h3",{className:L("card-title",r),...a,children:t})}function Pr({variant:r="info",className:t,children:a,...i}){return e.jsx("div",{className:L("alert",`alert-${r}`,t),...i,children:a})}function G({className:r,...t}){return e.jsx("span",{className:L("spinner",r),...t})}function te({message:r,hint:t,className:a,...i}){return e.jsxs("div",{className:L("empty-state",a),...i,children:[e.jsx("p",{children:r}),t&&e.jsx("p",{className:"text-sm text-muted mt-2",children:t})]})}function $e({items:r,className:t,...a}){return e.jsx("dl",{className:L("kv-list",t),...a,children:r.map(({label:i,value:d})=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{children:i}),e.jsx("dd",{children:d})]},i))})}function Xe({open:r,onClose:t,title:a,children:i,actions:d}){return r?e.jsx("div",{className:L("modal-backdrop",r&&"active"),onClick:o=>o.target===o.currentTarget&&t(),children:e.jsxs("div",{className:"modal",onClick:o=>o.stopPropagation(),children:[e.jsx("h3",{className:"modal-title",children:a}),e.jsx("div",{className:"modal-body",children:i}),d&&e.jsx("div",{className:"modal-actions",children:d})]})}):null}function we({message:r,variant:t="info",visible:a,onClose:i}){if(!a)return null;const d={success:"✓",error:"✕",info:"i"}[t],o={success:"text-[#059669]",error:"text-[#DC4A4A]",info:"text-[#2563EB]"}[t];return e.jsxs("div",{className:"toast",onClick:i,children:[e.jsx("span",{className:L("mr-2 font-bold",o),children:d}),r]})}function X({children:r,className:t}){return e.jsx("div",{className:L("form-group",t),children:r})}function se({className:r,children:t,...a}){return e.jsx("label",{className:L("form-label",r),...a,children:t})}const Le=v.forwardRef(({className:r,...t},a)=>e.jsx("input",{ref:a,className:L("form-input",r),...t}));Le.displayName="Input";const re=v.forwardRef(({className:r,children:t,...a},i)=>e.jsx("select",{ref:i,className:L("form-input",r),...a,children:t}));re.displayName="Select";function Qe({children:r,className:t}){return e.jsx("div",{className:L("form-row",t),children:r})}function B({className:r,children:t,...a}){return e.jsx("table",{className:L("table",r),...a,children:t})}function Q({className:r,children:t,...a}){return e.jsx("thead",{className:r,...a,children:t})}function I({className:r,children:t,...a}){return e.jsx("tbody",{className:r,...a,children:t})}function j({className:r,children:t,...a}){return e.jsx("tr",{className:r,...a,children:t})}function y({className:r,children:t,...a}){return e.jsx("th",{className:r,...a,children:t})}function c({className:r,children:t,...a}){return e.jsx("td",{className:r,...a,children:t})}function Ze({status:r}){const t={FINISHED:"success",FAILED:"danger",RUNNING:"warning",UNKNOWN:"gray"}[r];return e.jsx(M,{variant:t,children:r})}function Be({runs:r,onDelete:t,loading:a,emptyHint:i,baselineRunId:d}){const[o,m]=v.useState(null),n=()=>{o&&t&&(t(o.run_id),m(null))};return r.length?e.jsxs(e.Fragment,{children:[e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Run ID"}),e.jsx(y,{children:"Name"}),e.jsx(y,{children:"Project"}),e.jsx(y,{children:"Status"}),e.jsx(y,{children:"Created"}),e.jsx(y,{children:"Actions"})]})}),e.jsx(I,{children:r.map(h=>e.jsxs(j,{children:[e.jsxs(c,{children:[e.jsx(C.Link,{to:`/runs/${h.run_id}`,className:"font-mono",children:Y(h.run_id)}),h.run_id===d&&e.jsx(M,{variant:"info",className:"ml-2",children:"Baseline"})]}),e.jsx(c,{children:h.run_name||"—"}),e.jsx(c,{children:h.project}),e.jsx(c,{children:e.jsx(Ze,{status:h.status})}),e.jsx(c,{className:"text-muted",children:_e(h.created_at)}),e.jsx(c,{children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx(C.Link,{to:`/runs/${h.run_id}`,children:e.jsx(O,{variant:"secondary",size:"sm",children:"View"})}),t&&e.jsx(O,{variant:"ghost-danger",size:"sm",onClick:()=>m(h),disabled:a,children:"Delete"})]})})]},h.run_id))})]}),e.jsxs(Xe,{open:!!o,onClose:()=>m(null),title:"Delete Run",actions:e.jsxs(e.Fragment,{children:[e.jsx(O,{variant:"secondary",onClick:()=>m(null),children:"Cancel"}),e.jsxs(O,{variant:"danger",onClick:n,disabled:a,children:[a&&e.jsx(G,{}),"Delete"]})]}),children:[e.jsx("p",{children:"Are you sure you want to delete this run?"}),o&&e.jsx("p",{className:"font-mono text-sm mt-2",children:Y(o.run_id)}),e.jsx("p",{className:"text-sm text-danger mt-2",children:"This action cannot be undone."})]})]}):e.jsx(te,{message:"No runs found",hint:i??"Try adjusting your filters"})}function Ls(){const[r,t]=C.useSearchParams(),{api:a}=W(),{data:i}=Re(),[d,o]=v.useState(null),[m,n]=v.useState({project:r.get("project")||"",status:r.get("status")||"",q:r.get("q")||"",limit:parseInt(r.get("limit")||"25",10)}),{data:h,loading:f,refetch:x}=Ke(m),p=me(S=>a.deleteRun(S));v.useEffect(()=>{if(d){const S=setTimeout(()=>o(null),3e3);return()=>clearTimeout(S)}},[d]);const w=v.useCallback((S,Z)=>{n(J=>({...J,[S]:Z}));const K=new URLSearchParams(r);Z?K.set(S,String(Z)):K.delete(S),t(K,{replace:!0})},[r,t]),H=v.useCallback(async S=>{try{await p.mutate(S),o({message:"Run deleted",variant:"success"}),x()}catch{o({message:"Failed to delete run",variant:"error"})}},[p,x]);return e.jsxs(q,{children:[e.jsx(fe,{title:"Runs"}),e.jsx(b,{className:"mb-4",children:e.jsxs(Qe,{children:[e.jsxs(X,{children:[e.jsx(se,{htmlFor:"project",children:"Project"}),e.jsxs(re,{id:"project",value:m.project,onChange:S=>w("project",S.target.value),children:[e.jsx("option",{value:"",children:"All projects"}),i?.map(S=>e.jsx("option",{value:S.name,children:S.name},S.name))]})]}),e.jsxs(X,{children:[e.jsx(se,{htmlFor:"status",children:"Status"}),e.jsxs(re,{id:"status",value:m.status,onChange:S=>w("status",S.target.value),children:[e.jsx("option",{value:"",children:"All"}),e.jsx("option",{value:"FINISHED",children:"Finished"}),e.jsx("option",{value:"FAILED",children:"Failed"}),e.jsx("option",{value:"RUNNING",children:"Running"})]})]}),e.jsxs(X,{children:[e.jsx(se,{htmlFor:"q",children:"Query"}),e.jsx(Le,{id:"q",value:m.q,onChange:S=>w("q",S.target.value),placeholder:"metric.fidelity > 0.9"})]}),e.jsxs(X,{children:[e.jsx(se,{htmlFor:"limit",children:"Limit"}),e.jsxs(re,{id:"limit",value:m.limit,onChange:S=>w("limit",parseInt(S.target.value,10)),children:[e.jsx("option",{value:"25",children:"25"}),e.jsx("option",{value:"50",children:"50"}),e.jsx("option",{value:"100",children:"100"})]})]}),e.jsxs(X,{className:"flex items-end gap-2",children:[e.jsx(O,{variant:"primary",onClick:()=>x(),children:"Filter"}),f&&e.jsx(G,{})]})]})}),e.jsx(b,{children:f&&!h?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(G,{})}):e.jsx(Be,{runs:h?.runs??[],onDelete:H,loading:p.loading,baselineRunId:m.project?i?.find(S=>S.name===m.project)?.baseline?.run_id:void 0})}),d&&e.jsx(we,{message:d.message,variant:d.variant,visible:!!d,onClose:()=>o(null)})]})}function Bs({projects:r,currentWorkspace:t}){if(!r.length)return e.jsx(te,{message:"No projects yet",hint:"Projects are created automatically when you log runs"});const a=i=>{const d=new URLSearchParams({project:i});return t&&d.set("workspace",t.id),`/runs?${d}`};return e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Project"}),e.jsx(y,{children:"Runs"}),e.jsx(y,{children:"Baseline"}),e.jsx(y,{})]})}),e.jsx(I,{children:r.map(i=>e.jsxs(j,{children:[e.jsxs(c,{children:[e.jsx("span",{className:"font-medium",children:i.name}),i.description&&e.jsx("p",{className:"text-muted text-sm",children:Fs(i.description)})]}),e.jsx(c,{children:e.jsx(M,{variant:"gray",children:i.run_count??0})}),e.jsx(c,{children:i.baseline?e.jsxs(e.Fragment,{children:[e.jsx(C.Link,{to:`/runs/${i.baseline.run_id}`,className:"font-mono text-sm",children:Y(i.baseline.run_id)}),i.baseline.run_name&&e.jsx("p",{className:"text-muted text-sm",children:i.baseline.run_name})]}):e.jsx("span",{className:"text-muted",children:"—"})}),e.jsx(c,{className:"text-right",children:e.jsx(C.Link,{to:a(i.name),children:e.jsx(O,{variant:"secondary",size:"sm",children:"View Runs"})})})]},i.name))})]})}function Is({groups:r}){return r.length?e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Group ID"}),e.jsx(y,{children:"Name"}),e.jsx(y,{children:"Project"}),e.jsx(y,{children:"Runs"}),e.jsx(y,{children:"Actions"})]})}),e.jsx(I,{children:r.map(t=>e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:Y(t.group_id)}),e.jsx(c,{children:t.group_name||"—"}),e.jsx(c,{children:t.project}),e.jsx(c,{children:e.jsx(M,{variant:"gray",children:t.run_count})}),e.jsx(c,{children:e.jsx(C.Link,{to:`/groups/${t.group_id}`,children:e.jsx(O,{variant:"secondary",size:"sm",children:"View Runs"})})})]},t.group_id))})]}):e.jsx(te,{message:"No groups found",hint:"Groups are created when runs have a group_id set"})}function Ms(){const{runId:r}=C.useParams(),t=C.useNavigate(),{api:a}=W(),{data:i,loading:d,error:o,refetch:m}=Je(r),{data:n,refetch:h}=Re(),[f,x]=v.useState(!1),[p,w]=v.useState(null),{mutate:H,loading:S}=me(()=>a.setBaseline(i.project,i.run_id)),{mutate:Z,loading:K}=me(()=>a.deleteRun(r)),k=n?.find(_=>_.name===i?.project)?.baseline?.run_id===r;if(v.useEffect(()=>{if(p){const _=setTimeout(()=>w(null),3e3);return()=>clearTimeout(_)}},[p]),d)return e.jsx(q,{children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(G,{})})});if(o||!i)return e.jsx(q,{children:e.jsx(b,{children:e.jsx(te,{message:"Run not found",hint:o?.message||`Run ${r} does not exist`})})});const le=i.backend||{},oe=i.fingerprints||{},ee=i.data?.params||{},Se=i.data?.metrics||{},Ee=i.data?.tags||{},de=i.artifacts||[],je=i.errors||[],Ie=async()=>{try{await H(),await h(),m(),w({message:"Baseline updated",variant:"success"})}catch{w({message:"Failed to set baseline",variant:"error"})}},Me=async()=>{try{await Z(),x(!1),w({message:"Run deleted",variant:"success"}),setTimeout(()=>t("/runs"),1e3)}catch{w({message:"Failed to delete run",variant:"error"}),x(!1)}},Pe=async _=>{const T=de[_];try{const ne=a.getArtifactDownloadUrl(i.run_id,_),pe=await fetch(ne);if(!pe.ok)throw new Error("Download failed");const Ce=await pe.blob(),ae=document.createElement("a");ae.href=URL.createObjectURL(Ce),ae.download=T?.kind||`artifact-${_}`,ae.click(),URL.revokeObjectURL(ae.href),w({message:"Download started",variant:"success"})}catch{w({message:"Download failed",variant:"error"})}};return e.jsxs(q,{children:[k&&e.jsxs("div",{className:"mb-4 px-4 py-3 bg-[#EFF6FF] border border-[#2563EB]/20 rounded-md text-[#2563EB] text-sm font-medium",children:['This run is the current baseline for project "',i.project,'"']}),e.jsxs("div",{className:"page-header",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"page-title",children:i.run_name||"Unnamed Run"}),e.jsx("p",{className:"text-muted text-sm font-mono",children:i.run_id})]}),e.jsxs("div",{className:"flex gap-2",children:[!k&&e.jsxs(O,{variant:"secondary",size:"sm",onClick:Ie,disabled:S,children:[S&&e.jsx(G,{}),"Set as Baseline"]}),e.jsx(O,{variant:"ghost-danger",size:"sm",onClick:()=>x(!0),children:"Delete"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Overview"})}),e.jsx($e,{items:[{label:"Project",value:e.jsx(C.Link,{to:`/runs?project=${i.project}`,children:i.project})},{label:"Name",value:i.run_name||"—"},{label:"Adapter",value:i.adapter||"N/A"},{label:"Status",value:e.jsx(Ze,{status:i.status})},{label:"Created",value:`${i.created_at} (${_e(i.created_at)})`},{label:"Backend",value:le.name||"N/A"},...i.group_id?[{label:"Group",value:e.jsx(C.Link,{to:`/groups/${i.group_id}`,children:i.group_name||Y(i.group_id)})}]:[]]})]}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Fingerprints"})}),e.jsx($e,{items:[{label:"Run",value:e.jsx("span",{className:"font-mono text-sm truncate",children:oe.run||"N/A"})},{label:"Program",value:e.jsx("span",{className:"font-mono text-sm truncate",children:oe.program||"N/A"})}]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Parameters"})}),Object.keys(ee).length?e.jsx(B,{children:e.jsx(I,{children:Object.entries(ee).map(([_,T])=>e.jsxs(j,{children:[e.jsx(c,{children:_}),e.jsx(c,{className:"font-mono",children:String(T)})]},_))})}):e.jsx("p",{className:"text-muted",children:"No parameters"})]}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Metrics"})}),Object.keys(Se).length?e.jsx(B,{children:e.jsx(I,{children:Object.entries(Se).map(([_,T])=>e.jsxs(j,{children:[e.jsx(c,{children:_}),e.jsx(c,{className:"font-mono",children:typeof T=="number"?Ds(T):String(T)})]},_))})}):e.jsx("p",{className:"text-muted",children:"No metrics"})]}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Tags"})}),Object.keys(Ee).length?e.jsx("div",{className:"flex flex-wrap gap-2",children:Object.entries(Ee).map(([_,T])=>e.jsxs(M,{variant:"gray",children:[_,": ",String(T)]},_))}):e.jsx("p",{className:"text-muted",children:"No tags"})]})]}),e.jsxs(b,{className:"mb-4",children:[e.jsx(D,{children:e.jsxs(A,{children:["Artifacts (",de.length,")"]})}),de.length?e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"#"}),e.jsx(y,{children:"Kind"}),e.jsx(y,{children:"Role"}),e.jsx(y,{children:"Media Type"}),e.jsx(y,{children:"Digest"}),e.jsx(y,{children:"Actions"})]})}),e.jsx(I,{children:de.map((_,T)=>e.jsxs(j,{children:[e.jsx(c,{children:T}),e.jsx(c,{className:"font-mono text-sm",children:_.kind}),e.jsx(c,{children:e.jsx(M,{variant:"gray",children:_.role})}),e.jsx(c,{className:"text-muted text-sm",children:_.media_type}),e.jsx(c,{className:"font-mono text-sm",children:Oe(_.digest)}),e.jsx(c,{children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx(C.Link,{to:`/runs/${i.run_id}/artifacts/${T}`,children:e.jsx(O,{variant:"secondary",size:"sm",children:"View"})}),e.jsx(O,{variant:"secondary",size:"sm",onClick:()=>Pe(T),children:"Download"})]})})]},T))})]}):e.jsx("p",{className:"text-muted",children:"No artifacts"})]}),je.length>0&&e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{className:"text-danger",children:"Errors"})}),je.map((_,T)=>e.jsxs("div",{className:"mb-2",children:[e.jsx("strong",{children:_.type}),": ",_.message,_.traceback&&e.jsx("pre",{className:"mt-2",children:_.traceback})]},T))]}),e.jsxs(Xe,{open:f,onClose:()=>x(!1),title:"Delete Run",actions:e.jsxs(e.Fragment,{children:[e.jsx(O,{variant:"secondary",onClick:()=>x(!1),children:"Cancel"}),e.jsxs(O,{variant:"danger",onClick:Me,disabled:K,children:[K&&e.jsx(G,{}),"Delete"]})]}),children:[e.jsx("p",{children:"Are you sure you want to delete this run?"}),e.jsx("p",{className:"font-mono text-sm mt-2",children:Y(i.run_id)}),e.jsx("p",{className:"text-sm text-danger mt-2",children:"This action cannot be undone."})]}),p&&e.jsx(we,{message:p.message,variant:p.variant,visible:!!p,onClose:()=>w(null)})]})}function Us(){const{currentWorkspace:r}=W(),{data:t,loading:a}=Re();return e.jsxs(q,{children:[e.jsx(fe,{title:"Projects"}),e.jsx(b,{children:a?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(G,{})}):e.jsx(Bs,{projects:t??[],currentWorkspace:r})})]})}function qs(){const[r,t]=C.useSearchParams(),{data:a}=Re(),[i,d]=v.useState(r.get("project")||""),{data:o,loading:m,refetch:n}=Ps({project:i||void 0}),h=v.useCallback(f=>{d(f);const x=new URLSearchParams(r);f?x.set("project",f):x.delete("project"),t(x,{replace:!0})},[r,t]);return e.jsxs(q,{children:[e.jsx(fe,{title:"Run Groups"}),e.jsx(b,{className:"mb-4",children:e.jsxs(Qe,{children:[e.jsxs(X,{children:[e.jsx(se,{htmlFor:"project",children:"Project"}),e.jsxs(re,{id:"project",value:i,onChange:f=>h(f.target.value),children:[e.jsx("option",{value:"",children:"All projects"}),a?.map(f=>e.jsx("option",{value:f.name,children:f.name},f.name))]})]}),e.jsxs(X,{className:"flex items-end gap-2",children:[e.jsx(O,{variant:"primary",onClick:()=>n(),children:"Filter"}),m&&e.jsx(G,{})]})]})}),e.jsx(b,{children:m&&!o?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(G,{})}):e.jsx(Is,{groups:o??[]})})]})}function Gs(){const{groupId:r}=C.useParams(),{api:t}=W(),{data:a,loading:i,error:d,refetch:o}=Cs(r),[m,n]=v.useState(null),h=me(x=>t.deleteRun(x));v.useEffect(()=>{if(m){const x=setTimeout(()=>n(null),3e3);return()=>clearTimeout(x)}},[m]);const f=async x=>{try{await h.mutate(x),n({message:"Run deleted",variant:"success"}),o()}catch{n({message:"Failed to delete run",variant:"error"})}};return i?e.jsx(q,{children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(G,{})})}):d||!a?e.jsx(q,{children:e.jsx(b,{children:e.jsx(te,{message:"Group not found",hint:d?.message})})}):e.jsxs(q,{children:[e.jsx(fe,{title:e.jsxs(e.Fragment,{children:["Group ",e.jsx("span",{className:"font-mono",children:Y(r)})]}),subtitle:e.jsx("span",{className:"font-mono text-muted",children:r})}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsxs(A,{children:["Runs in Group (",a.runs.length,")"]})}),e.jsx(Be,{runs:a.runs,onDelete:f,loading:h.loading})]}),m&&e.jsx(we,{message:m.message,variant:m.variant,visible:!!m,onClose:()=>n(null)})]})}function Ne({match:r,yesText:t="✓ Match",noText:a="✗ Different"}){return e.jsx("span",{className:r?"diff-match":"diff-mismatch",children:r?t:a})}function Cr(){const[r,t]=C.useSearchParams(),{data:a}=Ke({limit:100}),i=a?.runs??[],[d,o]=v.useState(r.get("a")||""),[m,n]=v.useState(r.get("b")||""),[h,f]=v.useState(""),x=p=>{if(p.preventDefault(),!d||!m){f("Please select both runs to compare");return}f(""),t({a:d,b:m})};return e.jsxs(e.Fragment,{children:[e.jsx(b,{children:e.jsxs("form",{onSubmit:x,children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(X,{children:[e.jsx(se,{htmlFor:"a",children:"Run A (Baseline)"}),e.jsxs(re,{id:"a",value:d,onChange:p=>{o(p.target.value),f("")},children:[e.jsx("option",{value:"",children:"Select run..."}),i.map(p=>e.jsxs("option",{value:p.run_id,children:[p.run_name||"Unnamed"," (",Y(p.run_id),") — ",p.project]},p.run_id))]})]}),e.jsxs(X,{children:[e.jsx(se,{htmlFor:"b",children:"Run B (Candidate)"}),e.jsxs(re,{id:"b",value:m,onChange:p=>{n(p.target.value),f("")},children:[e.jsx("option",{value:"",children:"Select run..."}),i.map(p=>e.jsxs("option",{value:p.run_id,children:[p.run_name||"Unnamed"," (",Y(p.run_id),") — ",p.project]},p.run_id))]})]})]}),h&&e.jsx("p",{className:"text-sm text-[#DC4A4A] mb-3",children:h}),e.jsx(O,{type:"submit",variant:"primary",children:"Compare"})]})}),e.jsxs(b,{className:"mt-4",children:[e.jsx(D,{children:e.jsx(A,{children:"Tips"})}),e.jsxs("ul",{className:"text-muted text-sm list-disc pl-6 space-y-1",children:[e.jsx("li",{children:"Select two runs to compare their parameters, metrics, and artifacts"}),e.jsx("li",{children:"The diff will show changed values and compute TVD for result distributions"}),e.jsx("li",{children:"You can also compare from the run detail page"})]})]})]})}function Tr({runIdA:r,runIdB:t}){const{data:a,loading:i,error:d}=Ts(r,t);if(i)return e.jsx(b,{children:e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 gap-3",children:[e.jsx(G,{}),e.jsx("p",{className:"text-muted text-sm",children:"Comparing runs..."})]})});if(d||!a)return e.jsx(b,{children:e.jsx(te,{message:"Failed to load diff",hint:d?.message})});const{run_a:o,run_b:m,report:n}=a,h=n.fingerprints.a===n.fingerprints.b;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`rounded-lg p-4 mb-4 ${h?"bg-success/10 border border-success/20":"bg-warning/10 border border-warning/20"}`,children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-2xl",children:h?"✓":"⚠"}),e.jsxs("div",{children:[e.jsx("p",{className:`font-semibold ${h?"text-success":"text-warning"}`,children:h?"Runs Match":"Runs Differ"}),e.jsx("p",{className:"text-sm text-muted",children:h?"Fingerprints are identical — runs produced the same results.":"Fingerprints differ — see details below for what changed."})]})]})}),n.warnings&&n.warnings.length>0&&e.jsxs("div",{className:"alert alert-warning mb-4",children:[e.jsx("strong",{children:"Warnings:"}),e.jsx("ul",{className:"list-disc pl-6 mt-1",children:n.warnings.map((f,x)=>e.jsx("li",{children:f},x))})]}),e.jsx(b,{className:"mb-4",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm text-muted uppercase tracking-wider mb-1",children:"Run A (Baseline)"}),e.jsx("p",{children:e.jsx(C.Link,{to:`/runs/${o.run_id}`,children:o.run_name||"Unnamed Run"})}),e.jsx("p",{className:"font-mono text-sm text-muted",children:Y(o.run_id)}),e.jsxs("p",{className:"text-muted text-sm",children:[o.project," · ",_e(o.created_at)]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm text-muted uppercase tracking-wider mb-1",children:"Run B (Candidate)"}),e.jsx("p",{children:e.jsx(C.Link,{to:`/runs/${m.run_id}`,children:m.run_name||"Unnamed Run"})}),e.jsx("p",{className:"font-mono text-sm text-muted",children:Y(m.run_id)}),e.jsxs("p",{className:"text-muted text-sm",children:[m.project," · ",_e(m.created_at)]})]})]})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Metadata"})}),e.jsx(B,{children:e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Project"}),e.jsx(c,{children:e.jsx(Ne,{match:n.metadata.project_match})})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Backend"}),e.jsx(c,{children:e.jsx(Ne,{match:n.metadata.backend_match})})]}),!n.metadata.project_match&&e.jsxs(e.Fragment,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"text-muted text-sm",children:"Project A"}),e.jsx(c,{className:"font-mono text-sm",children:n.metadata.project_a||"N/A"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"text-muted text-sm",children:"Project B"}),e.jsx(c,{className:"font-mono text-sm",children:n.metadata.project_b||"N/A"})]})]}),!n.metadata.backend_match&&e.jsxs(e.Fragment,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"text-muted text-sm",children:"Backend A"}),e.jsx(c,{className:"font-mono text-sm",children:n.metadata.backend_a||"N/A"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"text-muted text-sm",children:"Backend B"}),e.jsx(c,{className:"font-mono text-sm",children:n.metadata.backend_b||"N/A"})]})]})]})})]}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Fingerprints"})}),e.jsx(B,{children:e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Run A"}),e.jsx(c,{className:"font-mono text-sm",children:Oe(n.fingerprints.a)})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Run B"}),e.jsx(c,{className:"font-mono text-sm",children:Oe(n.fingerprints.b)})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Match"}),e.jsx(c,{children:e.jsx(Ne,{match:n.fingerprints.a===n.fingerprints.b,yesText:"✓ Yes",noText:"✗ No"})})]})]})})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(D,{children:e.jsxs(A,{children:["Program",n.program.exact_match?e.jsx(M,{variant:"success",children:"Exact Match"}):n.program.structural_match?e.jsx(M,{variant:"info",children:"Structural Match"}):e.jsx(M,{variant:"warning",children:"Different"})]})}),e.jsx(B,{children:e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Exact Match"}),e.jsx(c,{children:e.jsx(Ne,{match:n.program.exact_match,yesText:"✓ Yes",noText:"✗ No"})})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Structural Match"}),e.jsx(c,{children:e.jsx(Ne,{match:n.program.structural_match,yesText:"✓ Yes",noText:"✗ No"})})]})]})})]}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsxs(A,{children:["Device Calibration",n.device_drift?.significant_drift?e.jsx(M,{variant:"warning",children:"Drifted"}):n.device_drift?.has_calibration_data?e.jsx(M,{variant:"success",children:"Stable"}):e.jsx(M,{variant:"gray",children:"N/A"})]})}),n.device_drift?.significant_drift?e.jsx("p",{className:"text-sm text-warning",children:"⚠ Significant calibration drift detected"}):n.device_drift?.has_calibration_data?e.jsx("p",{className:"text-muted",children:"Calibration within acceptable thresholds"}):e.jsx("p",{className:"text-muted",children:"No calibration data available"})]})]}),e.jsxs(b,{className:"mb-4",children:[e.jsx(D,{children:e.jsxs(A,{children:["Parameters ",e.jsx(M,{variant:n.params.match?"success":"warning",children:n.params.match?"Match":"Different"})]})}),n.params.match?e.jsx("p",{className:"text-muted",children:"All parameters match"}):e.jsx(e.Fragment,{children:n.params.changed&&Object.keys(n.params.changed).length>0&&e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Parameter"}),e.jsx(y,{children:"Run A"}),e.jsx(y,{children:"Run B"})]})}),e.jsx(I,{children:Object.entries(n.params.changed).map(([f,x])=>e.jsxs(j,{children:[e.jsx(c,{children:f}),e.jsx(c,{className:"font-mono",children:String(x.a)}),e.jsx(c,{className:"font-mono",children:String(x.b)})]},f))})]})})]}),e.jsxs(b,{className:"mb-4",children:[e.jsx(D,{children:e.jsxs(A,{children:["Metrics ",e.jsx(M,{variant:n.metrics.match?"success":"warning",children:n.metrics.match?"Match":"Different"})]})}),n.metrics.match?e.jsx("p",{className:"text-muted",children:"All metrics match"}):e.jsx(e.Fragment,{children:n.metrics.changed&&Object.keys(n.metrics.changed).length>0&&e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Metric"}),e.jsx(y,{children:"Run A"}),e.jsx(y,{children:"Run B"})]})}),e.jsx(I,{children:Object.entries(n.metrics.changed).map(([f,x])=>e.jsxs(j,{children:[e.jsx(c,{children:f}),e.jsx(c,{className:"font-mono",children:x.a}),e.jsx(c,{className:"font-mono",children:x.b})]},f))})]})})]}),n.circuit_diff&&e.jsxs(b,{className:"mb-4",children:[e.jsx(D,{children:e.jsxs(A,{children:["Circuit",e.jsx(M,{variant:n.circuit_diff.match?"success":"warning",children:n.circuit_diff.match?"Match":"Different"})]})}),n.circuit_diff.match?e.jsx("p",{className:"text-muted",children:"Circuit structure matches"}):e.jsxs(e.Fragment,{children:[n.circuit_diff.changed&&Object.keys(n.circuit_diff.changed).length>0&&e.jsxs(e.Fragment,{children:[e.jsx("h4",{className:"text-sm text-muted mb-2",children:"Changed"}),e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Property"}),e.jsx(y,{children:"Run A"}),e.jsx(y,{children:"Run B"}),e.jsx(y,{children:"Delta"})]})}),e.jsx(I,{children:Object.entries(n.circuit_diff.changed).map(([f,x])=>e.jsxs(j,{children:[e.jsx(c,{children:x.label||f}),e.jsx(c,{className:"font-mono",children:String(x.a)}),e.jsx(c,{className:"font-mono",children:String(x.b)}),e.jsx(c,{className:"font-mono",children:x.delta!=null&&e.jsxs(e.Fragment,{children:[x.delta>0?"+":"",x.delta,x.pct!=null&&` (${x.pct>0?"+":""}${x.pct.toFixed(1)}%)`]})})]},f))})]})]}),n.circuit_diff.is_clifford_changed&&e.jsxs("div",{className:"mt-4",children:[e.jsx("h4",{className:"text-sm text-muted mb-2",children:"Clifford Status"}),e.jsx(B,{children:e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Run A"}),e.jsx(c,{className:"font-mono",children:n.circuit_diff.is_clifford_a!=null?String(n.circuit_diff.is_clifford_a):"unknown"})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Run B"}),e.jsx(c,{className:"font-mono",children:n.circuit_diff.is_clifford_b!=null?String(n.circuit_diff.is_clifford_b):"unknown"})]})]})})]}),n.circuit_diff.added_gates&&n.circuit_diff.added_gates.length>0&&e.jsxs("div",{className:"mt-4",children:[e.jsx("h4",{className:"text-sm text-muted mb-2",children:"New Gate Types (in B)"}),e.jsx("p",{className:"font-mono text-sm",children:n.circuit_diff.added_gates.join(", ")})]}),n.circuit_diff.removed_gates&&n.circuit_diff.removed_gates.length>0&&e.jsxs("div",{className:"mt-4",children:[e.jsx("h4",{className:"text-sm text-muted mb-2",children:"Removed Gate Types (from A)"}),e.jsx("p",{className:"font-mono text-sm",children:n.circuit_diff.removed_gates.join(", ")})]})]})]}),n.tvd!=null&&e.jsxs(b,{className:"mb-4",children:[e.jsx(D,{children:e.jsx(A,{children:"Results"})}),e.jsx(B,{children:e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Total Variation Distance (TVD)"}),e.jsx(c,{className:"font-mono",children:n.tvd.toFixed(6)})]}),n.shots&&e.jsxs(j,{children:[e.jsx(c,{children:"Total Shots (A / B)"}),e.jsxs(c,{className:"font-mono",children:[n.shots.a," / ",n.shots.b]})]}),n.noise_context?.noise_p95&&e.jsxs(j,{children:[e.jsx(c,{children:"Noise Threshold (p95)"}),e.jsx(c,{className:"font-mono",children:n.noise_context.noise_p95.toFixed(6)})]}),n.noise_context?.p_value!=null&&e.jsxs(j,{children:[e.jsx(c,{children:"p-value"}),e.jsx(c,{className:"font-mono",children:n.noise_context.p_value.toFixed(3)})]})]})}),n.tvd>0&&n.noise_context&&e.jsx("p",{className:"text-sm mt-4",children:n.noise_context.p_value!=null?n.noise_context.p_value>=.1?e.jsx("span",{className:"text-success",children:"✓ Consistent with sampling noise — difference is not statistically significant."}):n.noise_context.p_value>=.05?e.jsxs("span",{className:"text-warning",children:["⚠ Borderline (p=",n.noise_context.p_value.toFixed(2),"). Consider increasing shots."]}):e.jsxs("span",{className:"text-danger",children:["✗ Statistically significant difference (p=",n.noise_context.p_value.toFixed(2),") — results show meaningful divergence."]}):n.noise_context.noise_ratio!=null?n.noise_context.noise_ratio<1.5?e.jsx("span",{className:"text-success",children:"✓ TVD is within expected shot noise range."}):n.noise_context.noise_ratio<3?e.jsxs("span",{className:"text-warning",children:["⚠ Ambiguous (",n.noise_context.noise_ratio.toFixed(1),"× expected noise). Consider increasing shots."]}):e.jsxs("span",{className:"text-danger",children:["✗ TVD exceeds expected noise (",n.noise_context.noise_ratio.toFixed(1),"×) — results show meaningful differences."]}):null})]})]})}function Vs(){const[r]=C.useSearchParams(),t=r.get("a"),a=r.get("b"),i=t&&a;return e.jsxs(q,{children:[e.jsx("div",{className:"page-header",children:e.jsxs("div",{children:[e.jsx("h1",{className:"page-title",children:"Compare Runs"}),i&&e.jsx("p",{className:"text-muted text-sm",children:e.jsx(C.Link,{to:"/diff",children:"← Select different runs"})})]})}),i?e.jsx(Tr,{runIdA:t,runIdB:a}):e.jsx(Cr,{})]})}function Ws(){const{api:r}=W(),[t,a]=v.useState(""),[i,d]=v.useState(null),[o,m]=v.useState(!1),[n,h]=v.useState(""),{mutate:f,loading:x}=me(async()=>{const w=await r.listRuns({q:t,limit:100});return d(w.runs),m(!0),w}),p=w=>{if(w.preventDefault(),!t.trim()){h("Please enter a search query");return}h(""),f()};return e.jsxs(q,{children:[e.jsx("div",{className:"page-header",children:e.jsx("h1",{className:"page-title",children:"Search Runs"})}),e.jsx(b,{className:"mb-4",children:e.jsxs("form",{onSubmit:p,children:[e.jsxs(X,{children:[e.jsx(se,{htmlFor:"q",children:"Query"}),e.jsx(Le,{id:"q",type:"text",value:t,onChange:w=>{a(w.target.value),h("")},placeholder:"metric.fidelity > 0.95 and params.shots = 1000",className:"font-mono"})]}),n&&e.jsx("p",{className:"text-sm text-[#DC4A4A] mb-3",children:n}),e.jsxs("div",{className:"flex gap-2 items-center",children:[e.jsxs(O,{type:"submit",variant:"primary",disabled:x,children:[x&&e.jsx(G,{}),"Search"]}),x&&e.jsx("span",{className:"text-muted text-sm",children:"Searching..."})]})]})}),o&&i&&e.jsx(b,{className:"mb-4",children:i.length>0?e.jsx(Be,{runs:i}):e.jsx("p",{className:"text-muted text-center py-8",children:"No runs match your query"})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Query Syntax"})}),e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Field"}),e.jsx(y,{children:"Description"})]})}),e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"params.X"}),e.jsx(c,{children:"Parameter value"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"metric.X"}),e.jsx(c,{children:"Metric value"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"tags.X"}),e.jsx(c,{children:"Tag value"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"status"}),e.jsx(c,{children:"Run status"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"project"}),e.jsx(c,{children:"Project name"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"backend"}),e.jsx(c,{children:"Backend name"})]})]})]})]}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Operators"})}),e.jsxs(B,{children:[e.jsx(Q,{children:e.jsxs(j,{children:[e.jsx(y,{children:"Operator"}),e.jsx(y,{children:"Description"})]})}),e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"="}),e.jsx(c,{children:"Equals"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"!="}),e.jsx(c,{children:"Not equals"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:">"}),e.jsx(c,{children:"Greater than"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:">="}),e.jsx(c,{children:"Greater or equal"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"<"}),e.jsx(c,{children:"Less than"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"<="}),e.jsx(c,{children:"Less or equal"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"~"}),e.jsx(c,{children:"Contains"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"and"}),e.jsx(c,{children:"Combine conditions"})]})]})]})]})]}),e.jsxs(b,{className:"mt-4",children:[e.jsx(D,{children:e.jsx(A,{children:"Examples"})}),e.jsx(B,{children:e.jsxs(I,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"metric.fidelity > 0.95"}),e.jsx(c,{children:"High fidelity runs"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"params.shots = 1000 and status = FINISHED"}),e.jsx(c,{children:"Finished runs with 1000 shots"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"tags.backend ~ ibm"}),e.jsx(c,{children:"Runs with IBM backends"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"metric.error < 0.01"}),e.jsx(c,{children:"Low error runs"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"project = vqe and metric.energy < -2.0"}),e.jsx(c,{children:"VQE runs with low energy"})]})]})})]})]})}function Ys(){const{runId:r,index:t}=C.useParams(),a=parseInt(t,10),{api:i}=W(),{data:d}=Je(r),{data:o,loading:m,error:n}=ks(r,a),[h,f]=v.useState(null);v.useEffect(()=>{if(h){const k=setTimeout(()=>f(null),3e3);return()=>clearTimeout(k)}},[h]);const x=async()=>{try{const k=i.getArtifactDownloadUrl(r,a),le=await fetch(k);if(!le.ok)throw new Error("Download failed");const oe=await le.blob(),ee=document.createElement("a");ee.href=URL.createObjectURL(oe),ee.download=p?.kind||`artifact-${a}`,ee.click(),URL.revokeObjectURL(ee.href),f({message:"Download started",variant:"success"})}catch{f({message:"Download failed",variant:"error"})}};if(m)return e.jsx(q,{children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(G,{})})});if(n||!o)return e.jsx(q,{children:e.jsx(b,{children:e.jsx(te,{message:"Artifact not found",hint:n?.message})})});const{artifact:p,size:w,content:H,content_json:S,preview_available:Z,error:K}=o,J=10*1024*1024;return e.jsxs(q,{children:[e.jsx(fe,{title:p.kind,subtitle:e.jsxs(e.Fragment,{children:["← Back to run ",e.jsxs(C.Link,{to:`/runs/${r}`,children:[Y(r),d?.run_name&&` — ${d.run_name}`]})]}),actions:e.jsx(O,{variant:"primary",onClick:x,children:"Download"})}),e.jsx(b,{className:"mb-4",children:e.jsx($e,{items:[{label:"Kind",value:e.jsx("span",{className:"font-mono",children:p.kind})},{label:"Role",value:e.jsx(M,{variant:"gray",children:p.role})},{label:"Media Type",value:p.media_type},{label:"Digest",value:e.jsx("span",{className:"font-mono text-sm",children:p.digest})},{label:"Size",value:ye(w)}]})}),e.jsxs(b,{children:[e.jsx(D,{children:e.jsx(A,{children:"Content"})}),K?e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-sm text-danger",children:["Error loading artifact: ",K]}),e.jsx("p",{className:"text-muted mt-2",children:e.jsx(O,{variant:"primary",onClick:x,children:"Download to view"})})]}):Z?S?e.jsx("pre",{children:As(S)}):H?e.jsx("pre",{children:H}):e.jsxs("p",{className:"text-muted",children:["Binary content (",ye(w),") — download to view"]}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-muted",children:[e.jsx("strong",{children:"Artifact too large for preview"})," (",ye(w)," exceeds ",ye(J)," limit)"]}),e.jsx("p",{className:"text-sm text-muted mt-2",children:"Download the artifact to view its contents."}),e.jsx("p",{className:"mt-4",children:e.jsx(O,{variant:"primary",onClick:x,children:"Download"})})]})]}),h&&e.jsx(we,{message:h.message,variant:h.variant,visible:!!h,onClose:()=>f(null)})]})}const zs=[{path:"/",element:e.jsx(C.Navigate,{to:"/runs",replace:!0})},{path:"/runs",element:e.jsx(Ls,{})},{path:"/runs/:runId",element:e.jsx(Ms,{})},{path:"/runs/:runId/artifacts/:index",element:e.jsx(Ys,{})},{path:"/projects",element:e.jsx(Us,{})},{path:"/groups",element:e.jsx(qs,{})},{path:"/groups/:groupId",element:e.jsx(Gs,{})},{path:"/diff",element:e.jsx(Vs,{})},{path:"/search",element:e.jsx(Ws,{})}];function es(r=[]){return C.createBrowserRouter([...zs,...r])}const Hs=es();function kr({additionalRoutes:r,...t}){const a=r?.length?es(r):Hs;return e.jsx(Es,{...t,children:e.jsx(C.RouterProvider,{router:a})})}exports.Alert=Pr;exports.ApiClient=Rs;exports.ApiError=xe;exports.App=kr;exports.AppProvider=Es;exports.ArtifactPage=Ys;exports.Badge=M;exports.Button=O;exports.Card=b;exports.CardHeader=D;exports.CardTitle=A;exports.DiffPage=Vs;exports.EmptyState=te;exports.FormGroup=X;exports.FormRow=Qe;exports.GroupDetailPage=Gs;exports.GroupsPage=qs;exports.GroupsTable=Is;exports.Input=Le;exports.KVList=$e;exports.Label=se;exports.Layout=q;exports.LayoutConfigProvider=Er;exports.Modal=Xe;exports.PageHeader=fe;exports.ProjectsPage=Us;exports.ProjectsTable=Bs;exports.RunDetailPage=Ms;exports.RunsPage=Ls;exports.RunsTable=Be;exports.SearchPage=Ws;exports.Select=re;exports.Spinner=G;exports.StatusBadge=Ze;exports.Table=B;exports.TableBody=I;exports.TableCell=c;exports.TableHead=Q;exports.TableHeader=y;exports.TableRow=j;exports.Toast=we;exports.api=ws;exports.buildUrl=wr;exports.cn=L;exports.coreRoutes=zs;exports.createRouter=es;exports.formatBytes=ye;exports.formatNumber=Ds;exports.jsonPretty=As;exports.router=Hs;exports.shortDigest=Oe;exports.shortId=Y;exports.timeAgo=_e;exports.truncate=Fs;exports.useApp=W;exports.useArtifact=ks;exports.useDiff=Ts;exports.useGroup=Cs;exports.useGroups=Ps;exports.useLayoutConfig=$s;exports.useMutation=me;exports.useProjects=Re;exports.useRun=Je;exports.useRuns=Ke;
14
+ <%s key={someKey} {...props} />`,Je,ue,Rt,ue),ys[ue+Je]=!0}}return s===a?bt(O):vt(O),O}}function yt(s,l,x){return Ns(s,l,x,!0)}function Nt(s,l,x){return Ns(s,l,x,!1)}var _t=Nt,wt=yt;we.Fragment=a,we.jsx=_t,we.jsxs=wt})()),we}var Rs;function kt(){return Rs||(Rs=1,process.env.NODE_ENV==="production"?Fe.exports=Et():Fe.exports=St()),Fe.exports}var e=kt();class je extends Error{constructor(r,n){super(n),this.status=r,this.name="ApiError"}}class Es{baseUrl;headers;constructor(r={}){this.baseUrl=r.baseUrl??"",this.headers={"Content-Type":"application/json",...r.headers}}async request(r,n,a={}){let u=`${this.baseUrl}${n}`;if(a.params){const d=new URLSearchParams;Object.entries(a.params).forEach(([f,h])=>{h!=null&&h!==""&&d.set(f,String(h))});const i=d.toString();i&&(u+=`?${i}`)}const o=await fetch(u,{method:r,headers:this.headers,body:a.body?JSON.stringify(a.body):void 0});if(!o.ok){const d=await o.json().catch(()=>({detail:"Unknown error"}));throw new je(o.status,d.detail||o.statusText)}if(!(o.status===204||o.headers.get("content-length")==="0"))return o.json()}async getCapabilities(){return this.request("GET","/api/v1/capabilities")}async listRuns(r){return this.request("GET","/api/runs",{params:r})}async getRun(r){return this.request("GET",`/api/runs/${r}`)}async deleteRun(r){await this.request("DELETE",`/api/runs/${r}`)}async setBaseline(r,n){return this.request("POST",`/api/projects/${r}/baseline/${n}`,{params:{redirect:"false"}})}async listProjects(r){return this.request("GET","/api/projects",{params:r})}async listGroups(r){return this.request("GET","/api/groups",{params:r})}async getGroup(r){return this.request("GET",`/api/groups/${r}`)}async getDiff(r,n){return this.request("GET","/api/diff",{params:{a:r,b:n}})}async getArtifact(r,n){return this.request("GET",`/api/runs/${r}/artifacts/${n}`)}getArtifactDownloadUrl(r,n){return`${this.baseUrl}/api/runs/${r}/artifacts/${n}/raw`}async createExport(r){return this.request("POST",`/api/runs/${r}/export`)}async getExportInfo(r){return this.request("GET",`/api/runs/${r}/export/info`)}getExportDownloadUrl(r){return`${this.baseUrl}/api/runs/${r}/export/download`}}const Ss=new Es,ks=g.createContext(null);function Pt({children:t}){const r={theme:"light",resolvedTheme:"light",setTheme:()=>{},toggleTheme:()=>{}};return e.jsx(ks.Provider,{value:r,children:t})}function Ps(){const t=g.useContext(ks);return t||{theme:"light",resolvedTheme:"light",setTheme:()=>{},toggleTheme:()=>{}}}function Tt(){return Ps()}const Ts=g.createContext(null);function Ds({children:t,api:r=Ss,initialWorkspace:n=null}){const[a,u]=g.useState(null),[o,d]=g.useState(n);return g.useEffect(()=>{r.getCapabilities().then(u).catch(console.error)},[r]),e.jsx(Ts.Provider,{value:{api:r,capabilities:a,currentWorkspace:o,setCurrentWorkspace:d},children:t})}function H(){const t=g.useContext(Ts);if(!t)throw new Error("useApp must be used within AppProvider");return t}function he(t,r=[]){const[n,a]=g.useState({data:null,loading:!0,error:null}),u=g.useRef(!0),o=g.useRef(t);o.current=t;const d=g.useCallback(async()=>{a(i=>({...i,loading:!0,error:null}));try{const i=await o.current();u.current&&a({data:i,loading:!1,error:null})}catch(i){u.current&&a({data:null,loading:!1,error:i instanceof je?i:new je(500,String(i))})}},[]);return g.useEffect(()=>(u.current=!0,d(),()=>{u.current=!1}),r),{...n,refetch:d}}function Qe(t){const{api:r,currentWorkspace:n}=H();return he(()=>r.listRuns({...t,workspace:n?.id}),[r,n?.id,t?.project,t?.status,t?.q,t?.limit])}function Ze(t){const{api:r}=H();return he(async()=>{const{run:n}=await r.getRun(t);return n},[r,t])}function Ee(){const{api:t,currentWorkspace:r}=H();return he(async()=>{const{projects:n}=await t.listProjects({workspace:r?.id});return n},[t,r?.id])}function As(t){const{api:r,currentWorkspace:n}=H();return he(async()=>{const{groups:a}=await r.listGroups({...t,workspace:n?.id});return a},[r,n?.id,t?.project])}function Fs(t){const{api:r}=H();return he(()=>r.getGroup(t),[r,t])}function Os(t,r){const{api:n}=H();return he(()=>n.getDiff(t,r),[n,t,r])}function $s(t,r){const{api:n}=H();return he(()=>n.getArtifact(t,r),[n,t,r])}function pe(t){const[r,n]=g.useState(!1),[a,u]=g.useState(null);return{mutate:g.useCallback(async(...d)=>{n(!0),u(null);try{return await t(...d)}catch(i){const f=i instanceof je?i:new je(500,String(i));throw u(f),f}finally{n(!1)}},[t]),loading:r,error:a}}function Q(t){return t?.slice(0,8)??""}function Oe(t){return t?.slice(0,12)??"N/A"}function Le(t){const r=new Date(t),a=Math.floor((new Date().getTime()-r.getTime())/1e3);if(a<60)return"just now";if(a<3600){const o=Math.floor(a/60);return`${o} minute${o!==1?"s":""} ago`}if(a<86400){const o=Math.floor(a/3600);return`${o} hour${o!==1?"s":""} ago`}if(a<2592e3){const o=Math.floor(a/86400);return`${o} day${o!==1?"s":""} ago`}if(a<31536e3){const o=Math.floor(a/2592e3);return`${o} month${o!==1?"s":""} ago`}const u=Math.floor(a/31536e3);return`${u} year${u!==1?"s":""} ago`}function Ls(t,r=6){return typeof t!="number"||isNaN(t)?String(t):Number(t.toPrecision(r)).toString()}function Ce(t){return t<1024?`${t} bytes`:t<1048576?`${(t/1024).toFixed(1)} KB`:`${(t/1048576).toFixed(1)} MB`}function Bs(t){return JSON.stringify(t,null,2)}function qs(t,r=60){return t?t.length<=r?t:t.slice(0,r-3)+"...":""}function Dt(t,r){const n=new URLSearchParams;Object.entries(r).forEach(([u,o])=>{o!=null&&o!==""&&n.set(u,String(o))});const a=n.toString();return a?`${t}?${a}`:t}function L(...t){return t.filter(Boolean).join(" ")}const At=[{href:"/runs",label:"Runs",matchPaths:["/runs"]},{href:"/projects",label:"Projects",matchPaths:["/projects"]},{href:"/groups",label:"Groups",matchPaths:["/groups"]},{href:"/diff",label:"Compare",matchPaths:["/diff"]},{href:"/search",label:"Search",matchPaths:["/search"]}],Is=g.createContext(null);function Ft({config:t,children:r}){return e.jsx(Is.Provider,{value:t,children:r})}function Ms(){return g.useContext(Is)}function W({children:t,config:r}){const n=T.useLocation(),u={...Ms(),...r},o=u?.navLinks??At,d=[...u?.prependNavLinks??[],...o,...u?.appendNavLinks??[]],i=u?.logo??{text:"devqubit",icon:"⚛"},f=h=>h.matchPaths?h.matchPaths.some(m=>n.pathname.startsWith(m)):n.pathname===h.href;return e.jsxs("div",{className:"dq-layout",children:[e.jsx("header",{className:"dq-header",children:e.jsxs("div",{className:"dq-header-inner",children:[e.jsxs("div",{className:"dq-header-left",children:[e.jsxs(T.Link,{to:"/",className:"dq-logo",children:[i.icon&&e.jsx("span",{className:"dq-logo-icon",children:i.icon}),i.text]}),e.jsx("nav",{className:"dq-nav",children:d.map(h=>e.jsx(T.Link,{to:h.href,className:L("dq-nav-link",f(h)&&"active"),children:h.label},h.href))})]}),e.jsx("div",{className:"dq-header-right",children:u?.headerRight})]})}),e.jsx("main",{className:"dq-main fade-in",children:t})]})}function ge({title:t,subtitle:r,actions:n}){return e.jsxs("div",{className:"page-header",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"page-title",children:t}),r&&e.jsx("p",{className:"text-sm text-muted mt-1",children:r})]}),n&&e.jsx("div",{className:"flex gap-2",children:n})]})}function Y({variant:t="gray",className:r,children:n,...a}){return e.jsx("span",{className:L("badge",`badge-${t}`,r),...a,children:n})}const A=g.forwardRef(({variant:t="secondary",size:r="default",loading:n,className:a,children:u,disabled:o,...d},i)=>e.jsxs("button",{ref:i,className:L("btn",t==="ghost-danger"?"btn-ghost-danger":`btn-${t}`,r==="sm"&&"btn-sm",a),disabled:o||n,...d,children:[n&&e.jsx(I,{}),u]}));A.displayName="Button";function b({className:t,children:r,...n}){return e.jsx("div",{className:L("card",t),...n,children:r})}function U({className:t,children:r,...n}){return e.jsx("div",{className:L("card-header",t),...n,children:r})}function G({className:t,children:r,...n}){return e.jsx("h3",{className:L("card-title",t),...n,children:r})}function Ot({variant:t="info",className:r,children:n,...a}){return e.jsx("div",{className:L("alert",`alert-${t}`,r),...a,children:n})}function I({className:t,...r}){return e.jsx("span",{className:L("spinner",t),...r})}function le({message:t,hint:r,className:n,...a}){return e.jsxs("div",{className:L("empty-state",n),...a,children:[e.jsx("p",{children:t}),r&&e.jsx("p",{className:"text-sm text-muted mt-2",children:r})]})}function $e({items:t,className:r,...n}){return e.jsx("dl",{className:L("kv-list",r),...n,children:t.map(({label:a,value:u})=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{children:a}),e.jsx("dd",{children:u})]},a))})}function Be({open:t,onClose:r,title:n,children:a,actions:u}){return t?e.jsx("div",{className:L("modal-backdrop",t&&"active"),onClick:o=>o.target===o.currentTarget&&r(),children:e.jsxs("div",{className:"modal",onClick:o=>o.stopPropagation(),children:[e.jsx("h3",{className:"modal-title",children:n}),e.jsx("div",{className:"modal-body",children:a}),u&&e.jsx("div",{className:"modal-actions",children:u})]})}):null}function ve({message:t,variant:r="info",visible:n,onClose:a}){if(!n)return null;const u={success:"✓",error:"✕",info:"i"}[r],o={success:"text-[#059669]",error:"text-[#DC4A4A]",info:"text-[#2563EB]"}[r];return e.jsxs("div",{className:"toast",onClick:a,children:[e.jsx("span",{className:L("mr-2 font-bold",o),children:u}),t]})}function Z({children:t,className:r}){return e.jsx("div",{className:L("form-group",r),children:t})}function re({className:t,children:r,...n}){return e.jsx("label",{className:L("form-label",t),...n,children:r})}const qe=g.forwardRef(({className:t,...r},n)=>e.jsx("input",{ref:n,className:L("form-input",t),...r}));qe.displayName="Input";const ce=g.forwardRef(({className:t,children:r,...n},a)=>e.jsx("select",{ref:a,className:L("form-input",t),...n,children:r}));ce.displayName="Select";function es({children:t,className:r}){return e.jsx("div",{className:L("form-row",r),children:t})}function B({className:t,children:r,...n}){return e.jsx("table",{className:L("table",t),...n,children:r})}function se({className:t,children:r,...n}){return e.jsx("thead",{className:t,...n,children:r})}function q({className:t,children:r,...n}){return e.jsx("tbody",{className:t,...n,children:r})}function j({className:t,children:r,...n}){return e.jsx("tr",{className:t,...n,children:r})}function N({className:t,children:r,...n}){return e.jsx("th",{className:t,...n,children:r})}function c({className:t,children:r,...n}){return e.jsx("td",{className:t,...n,children:r})}function ss({status:t}){const r={FINISHED:"success",FAILED:"danger",RUNNING:"warning",UNKNOWN:"gray"}[t];return e.jsx(Y,{variant:r,children:t})}function Ie({runs:t,onDelete:r,loading:n,emptyHint:a,baselineRunId:u}){const[o,d]=g.useState(null),i=()=>{o&&r&&(r(o.run_id),d(null))};return t.length?e.jsxs(e.Fragment,{children:[e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Run ID"}),e.jsx(N,{children:"Name"}),e.jsx(N,{children:"Project"}),e.jsx(N,{children:"Status"}),e.jsx(N,{children:"Created"}),e.jsx(N,{children:"Actions"})]})}),e.jsx(q,{children:t.map(f=>e.jsxs(j,{children:[e.jsxs(c,{children:[e.jsx(T.Link,{to:`/runs/${f.run_id}`,className:"font-mono",children:Q(f.run_id)}),f.run_id===u&&e.jsx(Y,{variant:"info",className:"ml-2",children:"Baseline"})]}),e.jsx(c,{children:f.run_name||"—"}),e.jsx(c,{children:f.project}),e.jsx(c,{children:e.jsx(ss,{status:f.status})}),e.jsx(c,{className:"text-muted",children:Le(f.created_at)}),e.jsx(c,{children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx(T.Link,{to:`/runs/${f.run_id}`,children:e.jsx(A,{variant:"secondary",size:"sm",children:"View"})}),r&&e.jsx(A,{variant:"ghost-danger",size:"sm",onClick:()=>d(f),disabled:n,children:"Delete"})]})})]},f.run_id))})]}),e.jsxs(Be,{open:!!o,onClose:()=>d(null),title:"Delete Run",actions:e.jsxs(e.Fragment,{children:[e.jsx(A,{variant:"secondary",onClick:()=>d(null),children:"Cancel"}),e.jsxs(A,{variant:"danger",onClick:i,disabled:n,children:[n&&e.jsx(I,{}),"Delete"]})]}),children:[e.jsx("p",{children:"Are you sure you want to delete this run?"}),o&&e.jsx("p",{className:"font-mono text-sm mt-2",children:Q(o.run_id)}),e.jsx("p",{className:"text-sm text-danger mt-2",children:"This action cannot be undone."})]})]}):e.jsx(le,{message:"No runs found",hint:a??"Try adjusting your filters"})}function Us(){const[t,r]=T.useSearchParams(),{api:n}=H(),{data:a}=Ee(),[u,o]=g.useState(null),[d,i]=g.useState({project:t.get("project")||"",status:t.get("status")||"",q:t.get("q")||"",limit:parseInt(t.get("limit")||"25",10)}),{data:f,loading:h,refetch:m}=Qe(d),p=pe(R=>n.deleteRun(R));g.useEffect(()=>{if(u){const R=setTimeout(()=>o(null),3e3);return()=>clearTimeout(R)}},[u]);const w=g.useCallback((R,K)=>{i($=>({...$,[R]:K}));const k=new URLSearchParams(t);K?k.set(R,String(K)):k.delete(R),r(k,{replace:!0})},[t,r]),V=g.useCallback(async R=>{try{await p.mutate(R),o({message:"Run deleted",variant:"success"}),m()}catch{o({message:"Failed to delete run",variant:"error"})}},[p,m]);return e.jsxs(W,{children:[e.jsx(ge,{title:"Runs"}),e.jsx(b,{className:"mb-4",children:e.jsxs(es,{children:[e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"project",children:"Project"}),e.jsxs(ce,{id:"project",value:d.project,onChange:R=>w("project",R.target.value),children:[e.jsx("option",{value:"",children:"All projects"}),a?.map(R=>e.jsx("option",{value:R.name,children:R.name},R.name))]})]}),e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"status",children:"Status"}),e.jsxs(ce,{id:"status",value:d.status,onChange:R=>w("status",R.target.value),children:[e.jsx("option",{value:"",children:"All"}),e.jsx("option",{value:"FINISHED",children:"Finished"}),e.jsx("option",{value:"FAILED",children:"Failed"}),e.jsx("option",{value:"RUNNING",children:"Running"})]})]}),e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"q",children:"Query"}),e.jsx(qe,{id:"q",value:d.q,onChange:R=>w("q",R.target.value),placeholder:"metric.fidelity > 0.9"})]}),e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"limit",children:"Limit"}),e.jsxs(ce,{id:"limit",value:d.limit,onChange:R=>w("limit",parseInt(R.target.value,10)),children:[e.jsx("option",{value:"25",children:"25"}),e.jsx("option",{value:"50",children:"50"}),e.jsx("option",{value:"100",children:"100"})]})]}),e.jsxs(Z,{className:"flex items-end gap-2",children:[e.jsx(A,{variant:"primary",onClick:()=>m(),children:"Filter"}),h&&e.jsx(I,{})]})]})}),e.jsx(b,{children:h&&!f?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(I,{})}):e.jsx(Ie,{runs:f?.runs??[],onDelete:V,loading:p.loading,baselineRunId:d.project?a?.find(R=>R.name===d.project)?.baseline?.run_id:void 0})}),u&&e.jsx(ve,{message:u.message,variant:u.variant,visible:!!u,onClose:()=>o(null)})]})}function Gs({projects:t,currentWorkspace:r}){if(!t.length)return e.jsx(le,{message:"No projects yet",hint:"Projects are created automatically when you log runs"});const n=a=>{const u=new URLSearchParams({project:a});return r&&u.set("workspace",r.id),`/runs?${u}`};return e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Project"}),e.jsx(N,{children:"Runs"}),e.jsx(N,{children:"Baseline"}),e.jsx(N,{})]})}),e.jsx(q,{children:t.map(a=>e.jsxs(j,{children:[e.jsxs(c,{children:[e.jsx("span",{className:"font-medium",children:a.name}),a.description&&e.jsx("p",{className:"text-muted text-sm",children:qs(a.description)})]}),e.jsx(c,{children:e.jsx(Y,{variant:"gray",children:a.run_count??0})}),e.jsx(c,{children:a.baseline?e.jsxs(e.Fragment,{children:[e.jsx(T.Link,{to:`/runs/${a.baseline.run_id}`,className:"font-mono text-sm",children:Q(a.baseline.run_id)}),a.baseline.run_name&&e.jsx("p",{className:"text-muted text-sm",children:a.baseline.run_name})]}):e.jsx("span",{className:"text-muted",children:"—"})}),e.jsx(c,{className:"text-right",children:e.jsx(T.Link,{to:n(a.name),children:e.jsx(A,{variant:"secondary",size:"sm",children:"View Runs"})})})]},a.name))})]})}function Ws({groups:t}){return t.length?e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Group ID"}),e.jsx(N,{children:"Name"}),e.jsx(N,{children:"Project"}),e.jsx(N,{children:"Runs"}),e.jsx(N,{children:"Actions"})]})}),e.jsx(q,{children:t.map(r=>e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:Q(r.group_id)}),e.jsx(c,{children:r.group_name||"—"}),e.jsx(c,{children:r.project}),e.jsx(c,{children:e.jsx(Y,{variant:"gray",children:r.run_count})}),e.jsx(c,{children:e.jsx(T.Link,{to:`/groups/${r.group_id}`,children:e.jsx(A,{variant:"secondary",size:"sm",children:"View Runs"})})})]},r.group_id))})]}):e.jsx(le,{message:"No groups found",hint:"Groups are created when runs have a group_id set"})}function $t({runId:t,runName:r,variant:n="secondary",size:a="sm",className:u="",apiBaseUrl:o=""}){const[d,i]=g.useState({status:"idle"}),[f,h]=g.useState(!1),[m,p]=g.useState(null),w=async()=>{i({status:"preparing",message:"Preparing bundle..."}),h(!0);try{const k=await fetch(`${o}/api/runs/${t}/export`,{method:"POST",headers:{"Content-Type":"application/json"}});if(!k.ok){const ae=await k.json().catch(()=>({detail:"Export failed"}));throw new Error(ae.detail||`Export failed: ${k.statusText}`)}const $=await k.json();i({status:"packing",message:"Creating bundle...",artifactCount:$.artifact_count,objectCount:$.object_count}),i(ae=>({...ae,status:"downloading",message:"Downloading bundle..."}));const P=await fetch(`${o}/api/runs/${t}/export/download`);if(!P.ok)throw new Error("Download failed");const te=await P.blob(),ne=r?`${r.replace(/[^a-zA-Z0-9_-]/g,"_")}_${t.slice(0,8)}.zip`:`run_${t.slice(0,8)}.zip`,J=URL.createObjectURL(te),ee=document.createElement("a");ee.href=J,ee.download=ne,document.body.appendChild(ee),ee.click(),document.body.removeChild(ee),URL.revokeObjectURL(J),i({status:"complete",message:"Export complete!",bundleSize:te.size,artifactCount:$.artifact_count,objectCount:$.object_count}),p({message:"Bundle downloaded successfully",variant:"success"}),setTimeout(()=>{h(!1),i({status:"idle"})},2e3)}catch(k){const $=k instanceof Error?k.message:"Export failed";i({status:"error",message:$}),p({message:$,variant:"error"})}},V=()=>{d.status!=="preparing"&&d.status!=="packing"&&d.status!=="downloading"&&(h(!1),i({status:"idle"}))},R=k=>k<1024?`${k} B`:k<1024*1024?`${(k/1024).toFixed(1)} KB`:`${(k/(1024*1024)).toFixed(1)} MB`,K=["preparing","packing","downloading"].includes(d.status);return e.jsxs(e.Fragment,{children:[e.jsxs(A,{variant:n,size:a,onClick:w,disabled:K,className:u,children:[K&&e.jsx(I,{}),e.jsx(Lt,{}),"Export"]}),e.jsx(Be,{open:f,onClose:V,title:"Export Run",actions:d.status==="error"||d.status==="complete"?e.jsx(A,{variant:"secondary",onClick:V,children:"Close"}):void 0,children:e.jsxs("div",{className:"py-4",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[d.status==="error"?e.jsx("div",{className:"w-10 h-10 rounded-full bg-[var(--dq-danger-bg)] flex items-center justify-center",children:e.jsx(qt,{})}):d.status==="complete"?e.jsx("div",{className:"w-10 h-10 rounded-full bg-[var(--dq-success-bg)] flex items-center justify-center",children:e.jsx(Bt,{})}):e.jsx("div",{className:"w-10 h-10 rounded-full bg-[var(--dq-primary-bg)] flex items-center justify-center",children:e.jsx(I,{})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:d.message}),d.status==="error"&&e.jsx("p",{className:"text-sm text-[var(--dq-text-muted)]",children:"Please try again or contact support."})]})]}),(d.artifactCount!==void 0||d.objectCount!==void 0||d.bundleSize!==void 0)&&e.jsxs("div",{className:"flex flex-wrap gap-2 mt-4",children:[d.artifactCount!==void 0&&e.jsxs(Y,{variant:"gray",children:[d.artifactCount," artifacts"]}),d.objectCount!==void 0&&e.jsxs(Y,{variant:"gray",children:[d.objectCount," objects"]}),d.bundleSize!==void 0&&e.jsx(Y,{variant:"info",children:R(d.bundleSize)})]}),e.jsxs("div",{className:"mt-4 pt-4 border-t border-[var(--dq-border-light)]",children:[e.jsxs("p",{className:"text-sm text-[var(--dq-text-muted)]",children:["Run ID: ",e.jsx("code",{className:"text-xs",children:t})]}),r&&e.jsxs("p",{className:"text-sm text-[var(--dq-text-muted)]",children:["Name: ",r]})]})]})}),m&&e.jsx(ve,{message:m.message,variant:m.variant,visible:!!m,onClose:()=>p(null)})]})}function Lt(){return e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),e.jsx("polyline",{points:"7 10 12 15 17 10"}),e.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]})}function Bt(){return e.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--dq-success)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})})}function qt(){return e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"var(--dq-danger)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("line",{x1:"15",y1:"9",x2:"9",y2:"15"}),e.jsx("line",{x1:"9",y1:"9",x2:"15",y2:"15"})]})}function Vs(){const{runId:t}=T.useParams(),r=T.useNavigate(),{api:n}=H(),{data:a,loading:u,error:o,refetch:d}=Ze(t),{data:i,refetch:f}=Ee(),[h,m]=g.useState(!1),[p,w]=g.useState(null),{mutate:V,loading:R}=pe(()=>n.setBaseline(a.project,a.run_id)),{mutate:K,loading:k}=pe(()=>n.deleteRun(t)),P=i?.find(_=>_.name===a?.project)?.baseline?.run_id===t;if(g.useEffect(()=>{if(p){const _=setTimeout(()=>w(null),3e3);return()=>clearTimeout(_)}},[p]),u)return e.jsx(W,{children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(I,{})})});if(o||!a)return e.jsx(W,{children:e.jsx(b,{children:e.jsx(le,{message:"Run not found",hint:o?.message||`Run ${t} does not exist`})})});const te=a.backend||{},ne=a.fingerprints||{},J=a.data?.params||{},ee=a.data?.metrics||{},ae=a.data?.tags||{},xe=a.artifacts||[],be=a.errors||[],Me=async()=>{try{await V(),await f(),d(),w({message:"Baseline updated",variant:"success"})}catch{w({message:"Failed to set baseline",variant:"error"})}},Ue=async()=>{try{await K(),m(!1),w({message:"Run deleted",variant:"success"}),setTimeout(()=>r("/runs"),1e3)}catch{w({message:"Failed to delete run",variant:"error"}),m(!1)}},Se=async _=>{const D=xe[_];try{const oe=n.getArtifactDownloadUrl(a.run_id,_),ye=await fetch(oe);if(!ye.ok)throw new Error("Download failed");const ke=await ye.blob(),de=document.createElement("a");de.href=URL.createObjectURL(ke),de.download=D?.kind||`artifact-${_}`,de.click(),URL.revokeObjectURL(de.href),w({message:"Download started",variant:"success"})}catch{w({message:"Download failed",variant:"error"})}};return e.jsxs(W,{children:[P&&e.jsxs("div",{className:"mb-4 px-4 py-3 bg-[#EFF6FF] border border-[#2563EB]/20 rounded-md text-[#2563EB] text-sm font-medium",children:['This run is the current baseline for project "',a.project,'"']}),e.jsxs("div",{className:"page-header",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"page-title",children:a.run_name||"Unnamed Run"}),e.jsx("p",{className:"text-muted text-sm font-mono",children:a.run_id})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx($t,{runId:a.run_id,runName:a.run_name}),!P&&e.jsxs(A,{variant:"secondary",size:"sm",onClick:Me,disabled:R,children:[R&&e.jsx(I,{}),"Set as Baseline"]}),e.jsx(A,{variant:"ghost-danger",size:"sm",onClick:()=>m(!0),children:"Delete"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Overview"})}),e.jsx($e,{items:[{label:"Project",value:e.jsx(T.Link,{to:`/runs?project=${a.project}`,children:a.project})},{label:"Name",value:a.run_name||"—"},{label:"Adapter",value:a.adapter||"N/A"},{label:"Status",value:e.jsx(ss,{status:a.status})},{label:"Created",value:`${a.created_at} (${Le(a.created_at)})`},{label:"Backend",value:te.name||"N/A"},...a.group_id?[{label:"Group",value:e.jsx(T.Link,{to:`/groups/${a.group_id}`,children:a.group_name||Q(a.group_id)})}]:[]]})]}),e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Fingerprints"})}),e.jsx($e,{items:[{label:"Run",value:e.jsx("span",{className:"font-mono text-sm truncate",children:ne.run||"N/A"})},{label:"Program",value:e.jsx("span",{className:"font-mono text-sm truncate",children:ne.program||"N/A"})}]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Parameters"})}),Object.keys(J).length?e.jsx(B,{children:e.jsx(q,{children:Object.entries(J).map(([_,D])=>e.jsxs(j,{children:[e.jsx(c,{children:_}),e.jsx(c,{className:"font-mono",children:String(D)})]},_))})}):e.jsx("p",{className:"text-muted",children:"No parameters"})]}),e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Metrics"})}),Object.keys(ee).length?e.jsx(B,{children:e.jsx(q,{children:Object.entries(ee).map(([_,D])=>e.jsxs(j,{children:[e.jsx(c,{children:_}),e.jsx(c,{className:"font-mono",children:typeof D=="number"?Ls(D):String(D)})]},_))})}):e.jsx("p",{className:"text-muted",children:"No metrics"})]}),e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Tags"})}),Object.keys(ae).length?e.jsx("div",{className:"flex flex-wrap gap-2",children:Object.entries(ae).map(([_,D])=>e.jsxs(Y,{variant:"gray",children:[_,": ",String(D)]},_))}):e.jsx("p",{className:"text-muted",children:"No tags"})]})]}),e.jsxs(b,{className:"mb-4",children:[e.jsx(U,{children:e.jsxs(G,{children:["Artifacts (",xe.length,")"]})}),xe.length?e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"#"}),e.jsx(N,{children:"Kind"}),e.jsx(N,{children:"Role"}),e.jsx(N,{children:"Media Type"}),e.jsx(N,{children:"Digest"}),e.jsx(N,{children:"Actions"})]})}),e.jsx(q,{children:xe.map((_,D)=>e.jsxs(j,{children:[e.jsx(c,{children:D}),e.jsx(c,{className:"font-mono text-sm",children:_.kind}),e.jsx(c,{children:e.jsx(Y,{variant:"gray",children:_.role})}),e.jsx(c,{className:"text-muted text-sm",children:_.media_type}),e.jsx(c,{className:"font-mono text-sm",children:Oe(_.digest)}),e.jsx(c,{children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx(T.Link,{to:`/runs/${a.run_id}/artifacts/${D}`,children:e.jsx(A,{variant:"secondary",size:"sm",children:"View"})}),e.jsx(A,{variant:"secondary",size:"sm",onClick:()=>Se(D),children:"Download"})]})})]},D))})]}):e.jsx("p",{className:"text-muted",children:"No artifacts"})]}),be.length>0&&e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{className:"text-danger",children:"Errors"})}),be.map((_,D)=>e.jsxs("div",{className:"mb-2",children:[e.jsx("strong",{children:_.type}),": ",_.message,_.traceback&&e.jsx("pre",{className:"mt-2",children:_.traceback})]},D))]}),e.jsxs(Be,{open:h,onClose:()=>m(!1),title:"Delete Run",actions:e.jsxs(e.Fragment,{children:[e.jsx(A,{variant:"secondary",onClick:()=>m(!1),children:"Cancel"}),e.jsxs(A,{variant:"danger",onClick:Ue,disabled:k,children:[k&&e.jsx(I,{}),"Delete"]})]}),children:[e.jsx("p",{children:"Are you sure you want to delete this run?"}),e.jsx("p",{className:"font-mono text-sm mt-2",children:Q(a.run_id)}),e.jsx("p",{className:"text-sm text-danger mt-2",children:"This action cannot be undone."})]}),p&&e.jsx(ve,{message:p.message,variant:p.variant,visible:!!p,onClose:()=>w(null)})]})}function zs(){const{currentWorkspace:t}=H(),{data:r,loading:n}=Ee();return e.jsxs(W,{children:[e.jsx(ge,{title:"Projects"}),e.jsx(b,{children:n?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(I,{})}):e.jsx(Gs,{projects:r??[],currentWorkspace:t})})]})}function Ys(){const[t,r]=T.useSearchParams(),{data:n}=Ee(),[a,u]=g.useState(t.get("project")||""),{data:o,loading:d,refetch:i}=As({project:a||void 0}),f=g.useCallback(h=>{u(h);const m=new URLSearchParams(t);h?m.set("project",h):m.delete("project"),r(m,{replace:!0})},[t,r]);return e.jsxs(W,{children:[e.jsx(ge,{title:"Run Groups"}),e.jsx(b,{className:"mb-4",children:e.jsxs(es,{children:[e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"project",children:"Project"}),e.jsxs(ce,{id:"project",value:a,onChange:h=>f(h.target.value),children:[e.jsx("option",{value:"",children:"All projects"}),n?.map(h=>e.jsx("option",{value:h.name,children:h.name},h.name))]})]}),e.jsxs(Z,{className:"flex items-end gap-2",children:[e.jsx(A,{variant:"primary",onClick:()=>i(),children:"Filter"}),d&&e.jsx(I,{})]})]})}),e.jsx(b,{children:d&&!o?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(I,{})}):e.jsx(Ws,{groups:o??[]})})]})}function Hs(){const{groupId:t}=T.useParams(),{api:r}=H(),{data:n,loading:a,error:u,refetch:o}=Fs(t),[d,i]=g.useState(null),f=pe(m=>r.deleteRun(m));g.useEffect(()=>{if(d){const m=setTimeout(()=>i(null),3e3);return()=>clearTimeout(m)}},[d]);const h=async m=>{try{await f.mutate(m),i({message:"Run deleted",variant:"success"}),o()}catch{i({message:"Failed to delete run",variant:"error"})}};return a?e.jsx(W,{children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(I,{})})}):u||!n?e.jsx(W,{children:e.jsx(b,{children:e.jsx(le,{message:"Group not found",hint:u?.message})})}):e.jsxs(W,{children:[e.jsx(ge,{title:e.jsxs(e.Fragment,{children:["Group ",e.jsx("span",{className:"font-mono",children:Q(t)})]}),subtitle:e.jsx("span",{className:"font-mono text-muted",children:t})}),e.jsxs(b,{children:[e.jsx(U,{children:e.jsxs(G,{children:["Runs in Group (",n.runs.length,")"]})}),e.jsx(Ie,{runs:n.runs,onDelete:h,loading:f.loading})]}),d&&e.jsx(ve,{message:d.message,variant:d.variant,visible:!!d,onClose:()=>i(null)})]})}function It({className:t=""}){return e.jsx("svg",{className:t,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})})}function Mt({className:t=""}){return e.jsxs("svg",{className:t,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function Ut({className:t=""}){return e.jsxs("svg",{className:t,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}),e.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),e.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]})}function Xe({className:t=""}){return e.jsxs("svg",{className:t,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("line",{x1:"12",y1:"16",x2:"12",y2:"12"}),e.jsx("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"})]})}function Re({match:t}){return t?e.jsxs("span",{className:"diff-match inline-flex items-center gap-1.5",children:[e.jsx(It,{className:"flex-shrink-0"}),e.jsx("span",{className:"font-medium",children:"Match"})]}):e.jsxs("span",{className:"diff-mismatch inline-flex items-center gap-1.5",children:[e.jsx(Mt,{className:"flex-shrink-0"}),e.jsx("span",{className:"font-medium",children:"Different"})]})}function Gt({warnings:t}){return!t||t.length===0?null:e.jsx("div",{className:"alert alert-warning mb-4",children:e.jsxs("div",{className:"flex gap-3",children:[e.jsx(Ut,{className:"flex-shrink-0 mt-0.5"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"font-semibold mb-1",children:t.length===1?"Warning":`${t.length} Warnings`}),e.jsx("ul",{className:"space-y-1",children:t.map((r,n)=>e.jsx("li",{className:"text-sm",children:r},n))})]})]})})}function Cs({label:t,run:r,variant:n}){return e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:`absolute top-0 left-0 w-1 h-full rounded-l ${n==="a"?"bg-info":"bg-primary"}`}),e.jsxs("div",{className:"pl-4",children:[e.jsx("p",{className:`text-xs font-semibold uppercase tracking-wider mb-2 ${n==="a"?"text-info":"text-primary"}`,children:t}),e.jsx(T.Link,{to:`/runs/${r.run_id}`,className:"text-base font-medium hover:underline",children:r.run_name||"Unnamed Run"}),e.jsx("p",{className:"font-mono text-xs mt-1 text-muted",children:Q(r.run_id)}),e.jsxs("p",{className:"text-sm mt-1 text-muted",children:[r.project," · ",Le(r.created_at)]})]})]})}function ie({children:t,badge:r}){return e.jsx(U,{children:e.jsx(G,{children:e.jsxs("span",{className:"flex items-center gap-2 flex-wrap",children:[t,r&&e.jsx(Y,{variant:r.variant,children:r.label})]})})})}function Wt({tvd:t,noiseContext:r}){if(t===0)return e.jsx("p",{className:"text-sm mt-4 text-success",children:"✓ Distributions are identical (TVD = 0)"});if(!r)return null;const{p_value:n,noise_ratio:a}=r;return n!=null?n>=.1?e.jsx("p",{className:"text-sm mt-4 text-success",children:"✓ Consistent with sampling noise — difference is not statistically significant"}):n>=.05?e.jsxs("p",{className:"text-sm mt-4 text-warning",children:["⚠ Borderline (p=",n.toFixed(2),") — consider increasing shots"]}):e.jsxs("p",{className:"text-sm mt-4 text-danger",children:["✗ Statistically significant difference (p=",n.toFixed(2),") — results show meaningful divergence"]}):a!=null?a<1.5?e.jsx("p",{className:"text-sm mt-4 text-success",children:"✓ TVD is within expected shot noise range"}):a<3?e.jsxs("p",{className:"text-sm mt-4 text-warning",children:["⚠ Ambiguous (",a.toFixed(1),"× expected noise) — consider increasing shots"]}):e.jsxs("p",{className:"text-sm mt-4 text-danger",children:["✗ TVD exceeds expected noise (",a.toFixed(1),"×) — results show meaningful differences"]}):null}function Vt(){const[t,r]=T.useSearchParams(),{data:n}=Qe({limit:100}),a=n?.runs??[],[u,o]=g.useState(t.get("a")||""),[d,i]=g.useState(t.get("b")||""),[f,h]=g.useState(""),m=p=>{if(p.preventDefault(),!u||!d){h("Please select both runs to compare");return}if(u===d){h("Please select two different runs");return}h(""),r({a:u,b:d})};return e.jsxs(e.Fragment,{children:[e.jsx(b,{children:e.jsxs("form",{onSubmit:m,children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"a",children:"Run A (Baseline)"}),e.jsxs(ce,{id:"a",value:u,onChange:p=>{o(p.target.value),h("")},children:[e.jsx("option",{value:"",children:"Select run..."}),a.map(p=>e.jsxs("option",{value:p.run_id,children:[p.run_name||"Unnamed"," (",Q(p.run_id),") — ",p.project]},p.run_id))]})]}),e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"b",children:"Run B (Candidate)"}),e.jsxs(ce,{id:"b",value:d,onChange:p=>{i(p.target.value),h("")},children:[e.jsx("option",{value:"",children:"Select run..."}),a.map(p=>e.jsxs("option",{value:p.run_id,children:[p.run_name||"Unnamed"," (",Q(p.run_id),") — ",p.project]},p.run_id))]})]})]}),f&&e.jsx("p",{className:"text-sm mb-3 text-danger",children:f}),e.jsx(A,{type:"submit",variant:"primary",children:"Compare"})]})}),e.jsxs(b,{className:"mt-4",children:[e.jsx(U,{children:e.jsx(G,{children:"How it works"})}),e.jsxs("div",{className:"space-y-2 text-sm text-muted",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Xe,{className:"flex-shrink-0 mt-0.5"}),e.jsx("span",{children:"Select two runs to compare their parameters, metrics, and artifacts"})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Xe,{className:"flex-shrink-0 mt-0.5"}),e.jsx("span",{children:"The diff shows changed values and computes TVD for result distributions"})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Xe,{className:"flex-shrink-0 mt-0.5"}),e.jsx("span",{children:"You can also compare from the run detail page"})]})]})]})]})}function zt({runIdA:t,runIdB:r}){const{data:n,loading:a,error:u}=Os(t,r);if(a)return e.jsx(b,{children:e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 gap-3",children:[e.jsx(I,{}),e.jsx("p",{className:"text-sm text-muted",children:"Comparing runs..."})]})});if(u||!n)return e.jsx(b,{children:e.jsx(le,{message:"Failed to load diff",hint:u?.message})});const{run_a:o,run_b:d,report:i}=n,f=i.device_drift?.significant_drift?{variant:"warning",label:"Drift Detected"}:i.device_drift?.has_calibration_data?{variant:"success",label:"Stable"}:{variant:"gray",label:"No Data"};return e.jsxs(e.Fragment,{children:[e.jsx(Gt,{warnings:i.warnings||[]}),e.jsx(b,{className:"mb-4",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsx(Cs,{label:"Run A (Baseline)",run:o,variant:"a"}),e.jsx(Cs,{label:"Run B (Candidate)",run:d,variant:"b"})]})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(ie,{children:"Metadata"}),e.jsx(B,{children:e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Project"}),e.jsx(c,{children:e.jsx(Re,{match:i.metadata.project_match})})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Backend"}),e.jsx(c,{children:e.jsx(Re,{match:i.metadata.backend_match})})]}),!i.metadata.project_match&&e.jsxs(e.Fragment,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"text-sm text-muted",children:"Project A"}),e.jsx(c,{className:"font-mono text-sm",children:i.metadata.project_a||"N/A"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"text-sm text-muted",children:"Project B"}),e.jsx(c,{className:"font-mono text-sm",children:i.metadata.project_b||"N/A"})]})]}),!i.metadata.backend_match&&e.jsxs(e.Fragment,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"text-sm text-muted",children:"Backend A"}),e.jsx(c,{className:"font-mono text-sm",children:i.metadata.backend_a||"N/A"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"text-sm text-muted",children:"Backend B"}),e.jsx(c,{className:"font-mono text-sm",children:i.metadata.backend_b||"N/A"})]})]})]})})]}),e.jsxs(b,{children:[e.jsx(ie,{children:"Fingerprints"}),e.jsx(B,{children:e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Run A"}),e.jsx(c,{className:"font-mono text-sm",children:Oe(i.fingerprints.a)})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Run B"}),e.jsx(c,{className:"font-mono text-sm",children:Oe(i.fingerprints.b)})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Match"}),e.jsx(c,{children:e.jsx(Re,{match:i.fingerprints.a===i.fingerprints.b})})]})]})})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[e.jsxs(b,{children:[e.jsx(ie,{badge:{variant:i.program.exact_match?"success":i.program.structural_match?"info":"warning",label:i.program.exact_match?"Exact Match":i.program.structural_match?"Structural Match":"Different"},children:"Program"}),e.jsx(B,{children:e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Exact Match"}),e.jsx(c,{children:e.jsx(Re,{match:i.program.exact_match})})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Structural Match"}),e.jsx(c,{children:e.jsx(Re,{match:i.program.structural_match})})]})]})})]}),e.jsxs(b,{children:[e.jsx(ie,{badge:f,children:"Device Calibration"}),i.device_drift?.significant_drift?e.jsx("p",{className:"text-sm text-warning",children:"Significant calibration drift detected between runs"}):i.device_drift?.has_calibration_data?e.jsx("p",{className:"text-muted",children:"Calibration within acceptable thresholds"}):e.jsx("p",{className:"text-muted",children:"No calibration data available"})]})]}),e.jsxs(b,{className:"mb-4",children:[e.jsx(ie,{badge:{variant:i.params.match?"success":"warning",label:i.params.match?"Match":"Different"},children:"Parameters"}),i.params.match?e.jsx("p",{className:"text-muted",children:"All parameters match"}):e.jsx(e.Fragment,{children:i.params.changed&&Object.keys(i.params.changed).length>0&&e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Parameter"}),e.jsx(N,{children:"Run A"}),e.jsx(N,{children:"Run B"})]})}),e.jsx(q,{children:Object.entries(i.params.changed).map(([h,m])=>e.jsxs(j,{children:[e.jsx(c,{children:h}),e.jsx(c,{className:"font-mono",children:String(m.a)}),e.jsx(c,{className:"font-mono",children:String(m.b)})]},h))})]})})]}),e.jsxs(b,{className:"mb-4",children:[e.jsx(ie,{badge:{variant:i.metrics.match?"success":"warning",label:i.metrics.match?"Match":"Different"},children:"Metrics"}),i.metrics.match?e.jsx("p",{className:"text-muted",children:"All metrics match"}):e.jsx(e.Fragment,{children:i.metrics.changed&&Object.keys(i.metrics.changed).length>0&&e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Metric"}),e.jsx(N,{children:"Run A"}),e.jsx(N,{children:"Run B"})]})}),e.jsx(q,{children:Object.entries(i.metrics.changed).map(([h,m])=>e.jsxs(j,{children:[e.jsx(c,{children:h}),e.jsx(c,{className:"font-mono",children:m.a}),e.jsx(c,{className:"font-mono",children:m.b})]},h))})]})})]}),i.circuit_diff&&e.jsxs(b,{className:"mb-4",children:[e.jsx(ie,{badge:{variant:i.circuit_diff.match?"success":"warning",label:i.circuit_diff.match?"Match":"Different"},children:"Circuit"}),i.circuit_diff.match?e.jsx("p",{className:"text-muted",children:"Circuit structure matches"}):e.jsxs("div",{className:"space-y-4",children:[i.circuit_diff.changed&&Object.keys(i.circuit_diff.changed).length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-medium mb-2 text-muted",children:"Changed Properties"}),e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Property"}),e.jsx(N,{children:"Run A"}),e.jsx(N,{children:"Run B"}),e.jsx(N,{children:"Delta"})]})}),e.jsx(q,{children:Object.entries(i.circuit_diff.changed).map(([h,m])=>e.jsxs(j,{children:[e.jsx(c,{children:m.label||h}),e.jsx(c,{className:"font-mono",children:String(m.a)}),e.jsx(c,{className:"font-mono",children:String(m.b)}),e.jsx(c,{className:"font-mono",children:m.delta!=null&&e.jsxs("span",{className:m.delta>0?"text-danger":"text-success",children:[m.delta>0?"+":"",m.delta,m.pct!=null&&` (${m.pct>0?"+":""}${m.pct.toFixed(1)}%)`]})})]},h))})]})]}),i.circuit_diff.is_clifford_changed&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-medium mb-2 text-muted",children:"Clifford Status"}),e.jsx(B,{children:e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Run A"}),e.jsx(c,{className:"font-mono",children:i.circuit_diff.is_clifford_a!=null?String(i.circuit_diff.is_clifford_a):"unknown"})]}),e.jsxs(j,{children:[e.jsx(c,{children:"Run B"}),e.jsx(c,{className:"font-mono",children:i.circuit_diff.is_clifford_b!=null?String(i.circuit_diff.is_clifford_b):"unknown"})]})]})})]}),i.circuit_diff.added_gates&&i.circuit_diff.added_gates.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-medium mb-2 text-muted",children:"New Gate Types (in B)"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:i.circuit_diff.added_gates.map(h=>e.jsx(Y,{variant:"success",children:h},h))})]}),i.circuit_diff.removed_gates&&i.circuit_diff.removed_gates.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-medium mb-2 text-muted",children:"Removed Gate Types (from A)"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:i.circuit_diff.removed_gates.map(h=>e.jsx(Y,{variant:"danger",children:h},h))})]})]})]}),i.tvd!=null&&e.jsxs(b,{className:"mb-4",children:[e.jsx(ie,{children:"Results Distribution"}),e.jsx(B,{children:e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{children:"Total Variation Distance (TVD)"}),e.jsx(c,{className:"font-mono font-medium",children:i.tvd.toFixed(6)})]}),i.shots&&e.jsxs(j,{children:[e.jsx(c,{children:"Total Shots (A / B)"}),e.jsxs(c,{className:"font-mono",children:[i.shots.a," / ",i.shots.b]})]}),i.noise_context?.noise_p95&&e.jsxs(j,{children:[e.jsx(c,{children:"Noise Threshold (p95)"}),e.jsx(c,{className:"font-mono",children:i.noise_context.noise_p95.toFixed(6)})]}),i.noise_context?.p_value!=null&&e.jsxs(j,{children:[e.jsx(c,{children:"p-value"}),e.jsx(c,{className:"font-mono",children:i.noise_context.p_value.toFixed(4)})]})]})}),e.jsx(Wt,{tvd:i.tvd,noiseContext:i.noise_context})]})]})}function Ks(){const[t]=T.useSearchParams(),r=t.get("a"),n=t.get("b"),a=r&&n;return e.jsxs(W,{children:[e.jsx("div",{className:"page-header",children:e.jsxs("div",{children:[e.jsx("h1",{className:"page-title",children:"Compare Runs"}),a&&e.jsx("p",{className:"text-sm mt-1 text-muted",children:e.jsx(T.Link,{to:"/diff",children:"← Select different runs"})})]})}),a?e.jsx(zt,{runIdA:r,runIdB:n}):e.jsx(Vt,{})]})}function Js(){const{api:t}=H(),[r,n]=g.useState(""),[a,u]=g.useState(null),[o,d]=g.useState(!1),[i,f]=g.useState(""),{mutate:h,loading:m}=pe(async()=>{const w=await t.listRuns({q:r,limit:100});return u(w.runs),d(!0),w}),p=w=>{if(w.preventDefault(),!r.trim()){f("Please enter a search query");return}f(""),h()};return e.jsxs(W,{children:[e.jsx("div",{className:"page-header",children:e.jsx("h1",{className:"page-title",children:"Search Runs"})}),e.jsx(b,{className:"mb-4",children:e.jsxs("form",{onSubmit:p,children:[e.jsxs(Z,{children:[e.jsx(re,{htmlFor:"q",children:"Query"}),e.jsx(qe,{id:"q",type:"text",value:r,onChange:w=>{n(w.target.value),f("")},placeholder:"metric.fidelity > 0.95 and params.shots = 1000",className:"font-mono"})]}),i&&e.jsx("p",{className:"text-sm text-[#DC4A4A] mb-3",children:i}),e.jsxs("div",{className:"flex gap-2 items-center",children:[e.jsxs(A,{type:"submit",variant:"primary",disabled:m,children:[m&&e.jsx(I,{}),"Search"]}),m&&e.jsx("span",{className:"text-muted text-sm",children:"Searching..."})]})]})}),o&&a&&e.jsx(b,{className:"mb-4",children:a.length>0?e.jsx(Ie,{runs:a}):e.jsx("p",{className:"text-muted text-center py-8",children:"No runs match your query"})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Query Syntax"})}),e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Field"}),e.jsx(N,{children:"Description"})]})}),e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"params.X"}),e.jsx(c,{children:"Parameter value"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"metric.X"}),e.jsx(c,{children:"Metric value"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"tags.X"}),e.jsx(c,{children:"Tag value"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"status"}),e.jsx(c,{children:"Run status"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"project"}),e.jsx(c,{children:"Project name"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"backend"}),e.jsx(c,{children:"Backend name"})]})]})]})]}),e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Operators"})}),e.jsxs(B,{children:[e.jsx(se,{children:e.jsxs(j,{children:[e.jsx(N,{children:"Operator"}),e.jsx(N,{children:"Description"})]})}),e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"="}),e.jsx(c,{children:"Equals"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"!="}),e.jsx(c,{children:"Not equals"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:">"}),e.jsx(c,{children:"Greater than"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:">="}),e.jsx(c,{children:"Greater or equal"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"<"}),e.jsx(c,{children:"Less than"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"<="}),e.jsx(c,{children:"Less or equal"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"~"}),e.jsx(c,{children:"Contains"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"and"}),e.jsx(c,{children:"Combine conditions"})]})]})]})]})]}),e.jsxs(b,{className:"mt-4",children:[e.jsx(U,{children:e.jsx(G,{children:"Examples"})}),e.jsx(B,{children:e.jsxs(q,{children:[e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"metric.fidelity > 0.95"}),e.jsx(c,{children:"High fidelity runs"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"params.shots = 1000 and status = FINISHED"}),e.jsx(c,{children:"Finished runs with 1000 shots"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"tags.backend ~ ibm"}),e.jsx(c,{children:"Runs with IBM backends"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"metric.error < 0.01"}),e.jsx(c,{children:"Low error runs"})]}),e.jsxs(j,{children:[e.jsx(c,{className:"font-mono",children:"project = vqe and metric.energy < -2.0"}),e.jsx(c,{children:"VQE runs with low energy"})]})]})})]})]})}function Xs(){const{runId:t,index:r}=T.useParams(),n=parseInt(r,10),{api:a}=H(),{data:u}=Ze(t),{data:o,loading:d,error:i}=$s(t,n),[f,h]=g.useState(null);g.useEffect(()=>{if(f){const P=setTimeout(()=>h(null),3e3);return()=>clearTimeout(P)}},[f]);const m=async()=>{try{const P=a.getArtifactDownloadUrl(t,n),te=await fetch(P);if(!te.ok)throw new Error("Download failed");const ne=await te.blob(),J=document.createElement("a");J.href=URL.createObjectURL(ne),J.download=p?.kind||`artifact-${n}`,J.click(),URL.revokeObjectURL(J.href),h({message:"Download started",variant:"success"})}catch{h({message:"Download failed",variant:"error"})}};if(d)return e.jsx(W,{children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(I,{})})});if(i||!o)return e.jsx(W,{children:e.jsx(b,{children:e.jsx(le,{message:"Artifact not found",hint:i?.message})})});const{artifact:p,size:w,content:V,content_json:R,preview_available:K,error:k}=o,$=10*1024*1024;return e.jsxs(W,{children:[e.jsx(ge,{title:p.kind,subtitle:e.jsxs(e.Fragment,{children:["← Back to run ",e.jsxs(T.Link,{to:`/runs/${t}`,children:[Q(t),u?.run_name&&` — ${u.run_name}`]})]}),actions:e.jsx(A,{variant:"primary",onClick:m,children:"Download"})}),e.jsx(b,{className:"mb-4",children:e.jsx($e,{items:[{label:"Kind",value:e.jsx("span",{className:"font-mono",children:p.kind})},{label:"Role",value:e.jsx(Y,{variant:"gray",children:p.role})},{label:"Media Type",value:p.media_type},{label:"Digest",value:e.jsx("span",{className:"font-mono text-sm",children:p.digest})},{label:"Size",value:Ce(w)}]})}),e.jsxs(b,{children:[e.jsx(U,{children:e.jsx(G,{children:"Content"})}),k?e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-sm text-danger",children:["Error loading artifact: ",k]}),e.jsx("p",{className:"text-muted mt-2",children:e.jsx(A,{variant:"primary",onClick:m,children:"Download to view"})})]}):K?R?e.jsx("pre",{children:Bs(R)}):V?e.jsx("pre",{children:V}):e.jsxs("p",{className:"text-muted",children:["Binary content (",Ce(w),") — download to view"]}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-muted",children:[e.jsx("strong",{children:"Artifact too large for preview"})," (",Ce(w)," exceeds ",Ce($)," limit)"]}),e.jsx("p",{className:"text-sm text-muted mt-2",children:"Download the artifact to view its contents."}),e.jsx("p",{className:"mt-4",children:e.jsx(A,{variant:"primary",onClick:m,children:"Download"})})]})]}),f&&e.jsx(ve,{message:f.message,variant:f.variant,visible:!!f,onClose:()=>h(null)})]})}const Qs=[{path:"/",element:e.jsx(T.Navigate,{to:"/runs",replace:!0})},{path:"/runs",element:e.jsx(Us,{})},{path:"/runs/:runId",element:e.jsx(Vs,{})},{path:"/runs/:runId/artifacts/:index",element:e.jsx(Xs,{})},{path:"/projects",element:e.jsx(zs,{})},{path:"/groups",element:e.jsx(Ys,{})},{path:"/groups/:groupId",element:e.jsx(Hs,{})},{path:"/diff",element:e.jsx(Ks,{})},{path:"/search",element:e.jsx(Js,{})}];function ts(t=[]){return T.createBrowserRouter([...Qs,...t])}const Zs=ts();function Yt({additionalRoutes:t,...r}){const n=t?.length?ts(t):Zs;return e.jsx(Ds,{...r,children:e.jsx(T.RouterProvider,{router:n})})}exports.Alert=Ot;exports.ApiClient=Es;exports.ApiError=je;exports.App=Yt;exports.AppProvider=Ds;exports.ArtifactPage=Xs;exports.Badge=Y;exports.Button=A;exports.Card=b;exports.CardHeader=U;exports.CardTitle=G;exports.DiffPage=Ks;exports.EmptyState=le;exports.FormGroup=Z;exports.FormRow=es;exports.GroupDetailPage=Hs;exports.GroupsPage=Ys;exports.GroupsTable=Ws;exports.Input=qe;exports.KVList=$e;exports.Label=re;exports.Layout=W;exports.LayoutConfigProvider=Ft;exports.Modal=Be;exports.PageHeader=ge;exports.ProjectsPage=zs;exports.ProjectsTable=Gs;exports.RunDetailPage=Vs;exports.RunsPage=Us;exports.RunsTable=Ie;exports.SearchPage=Js;exports.Select=ce;exports.Spinner=I;exports.StatusBadge=ss;exports.Table=B;exports.TableBody=q;exports.TableCell=c;exports.TableHead=se;exports.TableHeader=N;exports.TableRow=j;exports.ThemeProvider=Pt;exports.Toast=ve;exports.api=Ss;exports.buildUrl=Dt;exports.cn=L;exports.coreRoutes=Qs;exports.createRouter=ts;exports.formatBytes=Ce;exports.formatNumber=Ls;exports.jsonPretty=Bs;exports.router=Zs;exports.shortDigest=Oe;exports.shortId=Q;exports.timeAgo=Le;exports.truncate=qs;exports.useApp=H;exports.useArtifact=$s;exports.useDiff=Os;exports.useGroup=Fs;exports.useGroups=As;exports.useLayoutConfig=Ms;exports.useMutation=pe;exports.useProjects=Ee;exports.useRun=Ze;exports.useRuns=Qe;exports.useTheme=Ps;exports.useThemeOptional=Tt;
package/dist/index.d.ts CHANGED
@@ -5,7 +5,8 @@ export type { AppProviderProps, AppContextValue, AsyncState } from './hooks';
5
5
  export { router, createRouter, coreRoutes } from './router';
6
6
  export { ApiClient, ApiError, api } from './api';
7
7
  export type { ApiConfig } from './api';
8
- export { useRuns, useRun, useProjects, useGroups, useGroup, useDiff, useArtifact, useMutation, } from './hooks';
8
+ export { useRuns, useRun, useProjects, useGroups, useGroup, useDiff, useArtifact, useMutation, ThemeProvider, useTheme, useThemeOptional, } from './hooks';
9
+ export type { Theme, ThemeContextValue, ThemeProviderProps } from './hooks';
9
10
  export { Layout, PageHeader, LayoutConfigProvider, useLayoutConfig } from './components/Layout';
10
11
  export type { LayoutProps, PageHeaderProps } from './components/Layout';
11
12
  export { Badge, Button, Card, CardHeader, CardTitle, Alert, Spinner, EmptyState, KVList, Modal, Toast, FormGroup, FormRow, Label, Input, Select, } from './components/ui';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG7E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EACL,OAAO,EACP,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChG,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,EACL,KAAK,EACL,MAAM,EACN,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,OAAO,EACP,UAAU,EACV,MAAM,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,KAAK,EACL,KAAK,EACL,MAAM,GACP,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,GACV,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EACL,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,UAAU,EACV,eAAe,EACf,QAAQ,EACR,UAAU,EACV,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,OAAO,EACP,WAAW,EACX,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,EAAE,GACH,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,EACT,OAAO,EACP,KAAK,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,SAAS,EACT,OAAO,EACP,YAAY,GACb,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}