@datarecce/ui 1.53.1 → 1.53.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/{RouteConfigContext-B9Wq4LRq.d.ts → RouteConfigContext-CRxwjA3a.d.ts} +3 -3
  2. package/dist/{RouteConfigContext-B9Wq4LRq.d.ts.map → RouteConfigContext-CRxwjA3a.d.ts.map} +1 -1
  3. package/dist/{ScreenshotDataGrid-C8snBiZi.d.ts → ScreenshotDataGrid-CTp_HEpb.d.ts} +2 -2
  4. package/dist/{ScreenshotDataGrid-C8snBiZi.d.ts.map → ScreenshotDataGrid-CTp_HEpb.d.ts.map} +1 -1
  5. package/dist/advanced.d.ts +5 -5
  6. package/dist/advanced.js +1 -1
  7. package/dist/advanced.js.map +1 -1
  8. package/dist/api-S5ho3Qs3.js +3 -0
  9. package/dist/{api-DTKI1Y_n.js.map → api-S5ho3Qs3.js.map} +1 -1
  10. package/dist/api.js +1 -1
  11. package/dist/components-run.d.ts +2 -2
  12. package/dist/components-run.js +1 -1
  13. package/dist/components.d.ts +5 -5
  14. package/dist/components.js +1 -1
  15. package/dist/contexts.d.ts +3 -3
  16. package/dist/contexts.js +1 -1
  17. package/dist/{fetchClient-Bf9Q3QKq.js → fetchClient-D0p358nB.js} +2 -2
  18. package/dist/{fetchClient-Bf9Q3QKq.js.map → fetchClient-D0p358nB.js.map} +1 -1
  19. package/dist/hooks-CeTKVd72.js +7 -0
  20. package/dist/hooks-CeTKVd72.js.map +1 -0
  21. package/dist/hooks.d.ts +1 -1
  22. package/dist/hooks.js +1 -1
  23. package/dist/{index-JMq11hbe.d.ts → index-BRyoSMEd.d.ts} +7 -7
  24. package/dist/{index-JMq11hbe.d.ts.map → index-BRyoSMEd.d.ts.map} +1 -1
  25. package/dist/{index-CQRX1OT9.d.ts → index-Ccdaxnlh.d.ts} +2 -2
  26. package/dist/{index-CQRX1OT9.d.ts.map → index-Ccdaxnlh.d.ts.map} +1 -1
  27. package/dist/{index-CtXdIcug.d.ts → index-Cqok64Sw.d.ts} +2 -2
  28. package/dist/{index-CtXdIcug.d.ts.map → index-Cqok64Sw.d.ts.map} +1 -1
  29. package/dist/{index-DgZ__aEk.d.ts → index-Da0AhIBC.d.ts} +13 -13
  30. package/dist/index-Da0AhIBC.d.ts.map +1 -0
  31. package/dist/{index-BI0TA-5T.d.ts → index-DqNK3h9o.d.ts} +7 -7
  32. package/dist/{index-BI0TA-5T.d.ts.map → index-DqNK3h9o.d.ts.map} +1 -1
  33. package/dist/{index-CbMseltT.d.ts → index-gs16KfoD.d.ts} +4 -4
  34. package/dist/{index-CbMseltT.d.ts.map → index-gs16KfoD.d.ts.map} +1 -1
  35. package/dist/index.d.ts +8 -8
  36. package/dist/index.js +1 -1
  37. package/dist/{keepAlive-Bowms1oa.js → keepAlive-bjIHulj-.js} +2 -2
  38. package/dist/{keepAlive-Bowms1oa.js.map → keepAlive-bjIHulj-.js.map} +1 -1
  39. package/dist/lib/api/user.js +1 -1
  40. package/dist/{lineage-DQYm0BLV.d.ts → lineage-Cqlo57P1.d.ts} +40 -40
  41. package/dist/lineage-Cqlo57P1.d.ts.map +1 -0
  42. package/dist/{primitives-CMRs10su.d.ts → primitives-4OaWN3IW.d.ts} +43 -43
  43. package/dist/{primitives-CMRs10su.d.ts.map → primitives-4OaWN3IW.d.ts.map} +1 -1
  44. package/dist/primitives.d.ts +4 -4
  45. package/dist/primitives.js +1 -1
  46. package/dist/result.d.ts +1 -1
  47. package/dist/result.js +1 -1
  48. package/dist/src-DH5i0LSg.js +12 -0
  49. package/dist/src-DH5i0LSg.js.map +1 -0
  50. package/dist/style.css +23 -23
  51. package/dist/styles.css +2 -2
  52. package/dist/theme-u98ih3Tv.js +3 -0
  53. package/dist/theme-u98ih3Tv.js.map +1 -0
  54. package/dist/theme.js +1 -1
  55. package/dist/{types-Je-sKjuJ.d.ts → types-D9KPWvGb.d.ts} +10 -10
  56. package/dist/{types-Je-sKjuJ.d.ts.map → types-D9KPWvGb.d.ts.map} +1 -1
  57. package/dist/types.d.ts +5 -5
  58. package/dist/utils-Dl2dMzK8.js +6 -0
  59. package/dist/utils-Dl2dMzK8.js.map +1 -0
  60. package/dist/utils-FOrjYCpW.js +3 -0
  61. package/dist/{utils-BzZEjJAS.js.map → utils-FOrjYCpW.js.map} +1 -1
  62. package/dist/utils.js +1 -1
  63. package/package.json +1 -1
  64. package/dist/api-DTKI1Y_n.js +0 -3
  65. package/dist/components-CX4IKLp2.js +0 -3
  66. package/dist/components-CX4IKLp2.js.map +0 -1
  67. package/dist/index-DgZ__aEk.d.ts.map +0 -1
  68. package/dist/lineage-DQYm0BLV.d.ts.map +0 -1
  69. package/dist/lineage-yiiuC0Il.js +0 -7
  70. package/dist/lineage-yiiuC0Il.js.map +0 -1
  71. package/dist/src-BjFwHKOB.js +0 -3
  72. package/dist/src-BjFwHKOB.js.map +0 -1
  73. package/dist/theme-wN7zbYoG.js +0 -3
  74. package/dist/theme-wN7zbYoG.js.map +0 -1
  75. package/dist/utils-BzZEjJAS.js +0 -3
  76. package/dist/utils-D1bvitEj.js +0 -6
  77. package/dist/utils-D1bvitEj.js.map +0 -1
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{c as e}from"./keepAlive-Bowms1oa.js";import{Xt as t}from"./utils-D1bvitEj.js";import{Qt as n,en as r}from"./lineage-yiiuC0Il.js";import{_ as i,b as a,k as o,w as s}from"./utils-BzZEjJAS.js";import{QueryClient as c,QueryClientProvider as l}from"@tanstack/react-query";import{createContext as u,useCallback as d,useContext as f,useMemo as p}from"react";import{jsx as m}from"react/jsx-runtime";const h=u(null);h.displayName=`RecceRoutingContext`;function g(){return f(h)||{basePath:``,buildPath:e=>e,pathname:``,navigate:e=>{typeof window<`u`&&(window.location.href=e)}}}function _(){let{pathname:e,navigate:t}=g();return[e,t]}function v({children:e,config:t}){let n=t?.basePath??``,r=t?.pathname??``,i=t?.onNavigate,a=d(e=>n?`${n}${e.startsWith(`/`)?e:`/${e}`}`:e,[n]),o=d((e,t)=>{i?i(e,t):typeof window<`u`&&(t?.replace?(window.history.replaceState(null,``,e),window.dispatchEvent(new PopStateEvent(`popstate`))):window.location.href=e)},[i]),s=p(()=>({basePath:n,buildPath:a,pathname:r,navigate:o}),[n,a,r,o]);return m(h.Provider,{value:s,children:e})}const y=e=>new c({defaultOptions:{queries:{staleTime:e?.staleTime??1e3*60,gcTime:e?.gcTime??1e3*60*5,retry:1,refetchOnWindowFocus:!1}}});function b({children:c,api:u,theme:d=`system`,routing:f,queryClient:h,runActions:g,lineage:_,checks:b,query:x,features:S={}}){let C=h?.staleTime,w=h?.gcTime,T=p(()=>y({staleTime:C,gcTime:w}),[C,w]),{enableInstance:E=!0,enableIdleTimeout:D=!0,enableLineage:O=!0,enableRunActions:k=!0,enableChecks:A=!0,enableQuery:j=!0}=S,M=c;return M=m(v,{config:f,children:M}),M=m(t,{defaultMode:d,children:M}),M=m(e,{config:u,children:M}),M=m(l,{client:T,children:M}),j&&(M=m(n,{sql:x?.sql,isExecuting:x?.isExecuting,error:x?.error,baseResult:x?.baseResult,currentResult:x?.currentResult,onSqlChange:x?.onSqlChange,onExecute:x?.onExecute,onCancel:x?.onCancel,children:M})),A&&(M=m(r,{checks:b?.checks,isLoading:b?.isLoading,error:b?.error,selectedCheckId:b?.selectedCheckId,onSelectCheck:b?.onSelectCheck,onCreateCheck:b?.onCreateCheck,onUpdateCheck:b?.onUpdateCheck,onDeleteCheck:b?.onDeleteCheck,onReorderChecks:b?.onReorderChecks,refetchChecks:b?.refetchChecks,children:M})),k&&(M=m(o,{onRunAction:g?.onRunAction,onShowRunId:g?.onShowRunId,initialRunId:g?.initialRunId,initialHistoryOpen:g?.initialHistoryOpen,children:M})),O&&(M=m(i,{lineageGraph:_?.lineageGraph,envInfo:_?.envInfo,reviewMode:_?.reviewMode,cloudMode:_?.cloudMode,fileMode:_?.fileMode,fileName:_?.fileName,isDemoSite:_?.isDemoSite,isCodespace:_?.isCodespace,isLoading:_?.isLoading,error:_?.error,supportTasks:_?.supportTasks,onRefetchLineageGraph:_?.onRefetchLineageGraph,runsAggregated:_?.runsAggregated,onRefetchRunsAggregated:_?.onRefetchRunsAggregated,children:M})),D&&(M=m(a,{children:M})),E&&(M=m(s,{children:M})),M}const x=`0.2.0`;export{g as i,b as n,_ as r,x as t};
3
- //# sourceMappingURL=src-BjFwHKOB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-BjFwHKOB.js","names":[],"sources":["../src/providers/contexts/RoutingContext.tsx","../src/providers/RecceProvider.tsx","../src/index.ts"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\n\n/**\n * Navigation options for route changes\n */\nexport interface NavigateOptions {\n /** Replace current history entry instead of pushing */\n replace?: boolean;\n /** Scroll to top after navigation (default: true) */\n scroll?: boolean;\n}\n\n/**\n * Configuration for the routing provider\n */\nexport interface RoutingConfig {\n /** Base path prefix for all routes */\n basePath?: string;\n\n /**\n * Current pathname (provided by consumer's router)\n * If not provided, defaults to empty string\n */\n pathname?: string;\n\n /**\n * Navigation handler (provided by consumer's router)\n * Called when components need to navigate programmatically\n *\n * @example\n * ```tsx\n * // Next.js App Router\n * const router = useRouter();\n * <RecceProvider\n * routing={{\n * pathname: usePathname(),\n * onNavigate: (path, options) => {\n * options?.replace ? router.replace(path) : router.push(path);\n * }\n * }}\n * />\n * ```\n */\n onNavigate?: (path: string, options?: NavigateOptions) => void;\n}\n\n/**\n * Routing context value available to consumers\n */\nexport interface RoutingContextValue {\n /** Base path prefix */\n basePath: string;\n /** Build a full path with base path prefix */\n buildPath: (path: string) => string;\n /** Current pathname (if provided by consumer) */\n pathname: string;\n /** Navigate to a path */\n navigate: (path: string, options?: NavigateOptions) => void;\n}\n\nconst RoutingContext = createContext<RoutingContextValue | null>(null);\nRoutingContext.displayName = \"RecceRoutingContext\";\n\n/**\n * Hook to access routing context\n *\n * @returns Routing context with path utilities and navigation\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { pathname, navigate, buildPath } = useRouting();\n *\n * return (\n * <button onClick={() => navigate(buildPath('/checks'))}>\n * Go to Checks\n * </button>\n * );\n * }\n * ```\n */\nexport function useRouting(): RoutingContextValue {\n const context = useContext(RoutingContext);\n if (!context) {\n // Return sensible defaults if not within provider\n return {\n basePath: \"\",\n buildPath: (path: string) => path,\n pathname: \"\",\n navigate: (path: string) => {\n // Fallback: use window.location for navigation\n if (typeof window !== \"undefined\") {\n window.location.href = path;\n }\n },\n };\n }\n return context;\n}\n\n/**\n * Hook compatible with useAppLocation API\n *\n * Returns a tuple of [pathname, setLocation] for easy migration from\n * the OSS useAppLocation hook.\n *\n * @returns [pathname, navigate] tuple\n *\n * @example\n * ```tsx\n * const [location, setLocation] = useAppLocation();\n * setLocation('/checks?id=123');\n * setLocation('/checks', { replace: true });\n * ```\n */\nexport function useAppLocation(): [\n string,\n (path: string, options?: NavigateOptions) => void,\n] {\n const { pathname, navigate } = useRouting();\n return [pathname, navigate];\n}\n\ninterface RoutingProviderProps {\n children: ReactNode;\n config?: RoutingConfig;\n}\n\nexport function RoutingProvider({ children, config }: RoutingProviderProps) {\n const basePath = config?.basePath ?? \"\";\n const pathname = config?.pathname ?? \"\";\n const onNavigate = config?.onNavigate;\n\n const buildPath = useCallback(\n (path: string) => {\n if (!basePath) return path;\n return `${basePath}${path.startsWith(\"/\") ? path : `/${path}`}`;\n },\n [basePath],\n );\n\n const navigate = useCallback(\n (path: string, options?: NavigateOptions) => {\n if (onNavigate) {\n onNavigate(path, options);\n } else if (typeof window !== \"undefined\") {\n // Fallback: use window.location\n if (options?.replace) {\n window.history.replaceState(null, \"\", path);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n } else {\n window.location.href = path;\n }\n }\n },\n [onNavigate],\n );\n\n const value = useMemo<RoutingContextValue>(\n () => ({\n basePath,\n buildPath,\n pathname,\n navigate,\n }),\n [basePath, buildPath, pathname, navigate],\n );\n\n return (\n <RoutingContext.Provider value={value}>{children}</RoutingContext.Provider>\n );\n}\n","\"use client\";\n\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { type ReactNode, useMemo } from \"react\";\nimport type { RecceActionProviderProps } from \"../contexts/action\";\nimport { RecceActionProvider } from \"../contexts/action\";\nimport { IdleTimeoutProvider } from \"../contexts/idle\";\nimport { RecceInstanceInfoProvider } from \"../contexts/instance\";\nimport type { LineageGraphProviderProps } from \"../contexts/lineage\";\nimport { LineageGraphProvider } from \"../contexts/lineage\";\nimport type { ApiClient } from \"../lib/fetchClient\";\nimport { ApiProvider } from \"./contexts/ApiContext\";\nimport type { Check, CheckProviderProps } from \"./contexts/CheckContext\";\nimport { CheckProvider } from \"./contexts/CheckContext\";\nimport type { QueryProviderProps, QueryResult } from \"./contexts/QueryContext\";\nimport { QueryProvider } from \"./contexts/QueryContext\";\nimport { RoutingProvider } from \"./contexts/RoutingContext\";\nimport { ThemeProvider } from \"./contexts/ThemeContext\";\n\n/**\n * Theme mode selection for RecceProvider.\n */\ntype ThemeMode = \"light\" | \"dark\" | \"system\";\n\n/**\n * Props for {@link RecceProvider}.\n */\ninterface RecceProviderProps {\n children: ReactNode;\n\n /**\n * API configuration - simple config OR custom client.\n */\n api:\n | {\n baseUrl: string;\n headers?: Record<string, string>;\n timeout?: number;\n }\n | {\n client: ApiClient;\n };\n\n /**\n * Theme mode.\n *\n * @defaultValue \"system\"\n */\n theme?: ThemeMode;\n\n /**\n * Routing configuration\n *\n * @example\n * ```tsx\n * // With Next.js App Router\n * const router = useRouter();\n * const pathname = usePathname();\n *\n * <RecceProvider\n * routing={{\n * basePath: '/app',\n * pathname,\n * onNavigate: (path, options) => {\n * options?.replace ? router.replace(path) : router.push(path);\n * }\n * }}\n * />\n * ```\n */\n routing?: {\n basePath?: string;\n pathname?: string;\n onNavigate?: (\n path: string,\n options?: { replace?: boolean; scroll?: boolean },\n ) => void;\n };\n\n /**\n * TanStack Query client configuration.\n */\n queryClient?: {\n staleTime?: number;\n gcTime?: number;\n };\n\n /**\n * Run action configuration\n * Props for RecceActionProvider - manages run execution and result display\n */\n runActions?: {\n /** Handler called when a run action is requested */\n onRunAction?: RecceActionProviderProps[\"onRunAction\"];\n /** Handler called when a run result should be shown */\n onShowRunId?: RecceActionProviderProps[\"onShowRunId\"];\n /** Initial run ID to display */\n initialRunId?: string;\n /** Initial state for history panel */\n initialHistoryOpen?: boolean;\n };\n\n /**\n * Lineage graph configuration\n * Props for LineageGraphProvider - manages lineage visualization\n */\n lineage?: {\n /** The processed lineage graph data */\n lineageGraph?: LineageGraphProviderProps[\"lineageGraph\"];\n /** Environment information (git, dbt, sqlmesh metadata) */\n envInfo?: LineageGraphProviderProps[\"envInfo\"];\n /** Whether in review mode (read-only checks) */\n reviewMode?: boolean;\n /** Whether in cloud mode (recce cloud) */\n cloudMode?: boolean;\n /** Whether in file mode (loading from file) */\n fileMode?: boolean;\n /** The state file name if in file mode */\n fileName?: string;\n /** Whether this is the demo site */\n isDemoSite?: boolean;\n /** Whether running in GitHub Codespace */\n isCodespace?: boolean;\n /** Loading state */\n isLoading?: boolean;\n /** Error message if loading failed */\n error?: string;\n /** Supported task types from server */\n supportTasks?: Record<string, boolean>;\n /** Callback to refetch the lineage graph */\n onRefetchLineageGraph?: () => void;\n /** Pre-aggregated run results by model */\n runsAggregated?: LineageGraphProviderProps[\"runsAggregated\"];\n /** Callback to refetch aggregated runs */\n onRefetchRunsAggregated?: () => void;\n };\n\n /**\n * Check management configuration\n * Props for CheckProvider - manages check CRUD operations\n */\n checks?: {\n /** List of checks */\n checks?: Check[];\n /** Loading state */\n isLoading?: boolean;\n /** Error message */\n error?: string;\n /** Currently selected check ID */\n selectedCheckId?: string;\n /** Handler for check selection */\n onSelectCheck?: CheckProviderProps[\"onSelectCheck\"];\n /** Handler for check creation */\n onCreateCheck?: CheckProviderProps[\"onCreateCheck\"];\n /** Handler for check updates */\n onUpdateCheck?: CheckProviderProps[\"onUpdateCheck\"];\n /** Handler for check deletion */\n onDeleteCheck?: CheckProviderProps[\"onDeleteCheck\"];\n /** Handler for check reordering */\n onReorderChecks?: CheckProviderProps[\"onReorderChecks\"];\n /** Callback to refetch checks */\n refetchChecks?: () => void;\n };\n\n /**\n * Query editor configuration\n * Props for QueryProvider - manages SQL query execution\n */\n query?: {\n /** Current SQL query */\n sql?: string;\n /** Whether query is executing */\n isExecuting?: boolean;\n /** Error message */\n error?: string;\n /** Query result for base environment */\n baseResult?: QueryResult;\n /** Query result for current environment */\n currentResult?: QueryResult;\n /** Handler for SQL changes */\n onSqlChange?: QueryProviderProps[\"onSqlChange\"];\n /** Handler for query execution */\n onExecute?: QueryProviderProps[\"onExecute\"];\n /** Handler for query cancellation */\n onCancel?: QueryProviderProps[\"onCancel\"];\n };\n\n /**\n * Feature flags - control which contexts are enabled\n * Set to false to skip a context entirely (reduces overhead if unused)\n */\n features?: {\n /** Enable RecceInstanceInfoProvider (instance info and feature toggles) */\n enableInstance?: boolean;\n /** Enable IdleTimeoutProvider (session timeout and keep-alive) */\n enableIdleTimeout?: boolean;\n /** Enable LineageGraphProvider (lineage visualization) */\n enableLineage?: boolean;\n /** Enable RecceActionProvider (run execution) */\n enableRunActions?: boolean;\n /** Enable CheckProvider (check management) */\n enableChecks?: boolean;\n /** Enable QueryProvider (SQL query editor) */\n enableQuery?: boolean;\n };\n}\n\n// Create a default query client\nconst createDefaultQueryClient = (\n options?: RecceProviderProps[\"queryClient\"],\n) =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: options?.staleTime ?? 1000 * 60, // 1 minute\n gcTime: options?.gcTime ?? 1000 * 60 * 5, // 5 minutes\n retry: 1,\n refetchOnWindowFocus: false,\n },\n },\n });\n\n/**\n * RecceProvider - The single entry point for @datarecce/ui\n *\n * This provider orchestrates ALL Recce contexts in the correct order.\n * It follows a props-driven design - pass your data and callbacks, no internal fetching.\n *\n * **Architecture:**\n * - Foundation layer: QueryClient → API → Theme → Routing\n * - Data layer: Instance → Idle → Lineage → RunActions\n * - UI layer: Checks → Query\n *\n * **Feature Flags:**\n * Use `features` prop to disable unused contexts and reduce overhead.\n *\n * @example\n * ```tsx\n * // Minimal setup (only API + Theme)\n * <RecceProvider api={{ baseUrl: \"/api\" }}>\n * <MyApp />\n * </RecceProvider>\n *\n * // Full setup with all features\n * <RecceProvider\n * api={{ baseUrl: \"/api\" }}\n * theme=\"dark\"\n * lineage={{\n * lineageGraph: data.lineageGraph,\n * envInfo: data.envInfo,\n * onRefetchLineageGraph: refetch,\n * }}\n * runActions={{\n * onRunAction: handleRunAction,\n * onShowRunId: handleShowRun,\n * }}\n * checks={{\n * checks: checksData,\n * onCreateCheck: createCheck,\n * onUpdateCheck: updateCheck,\n * }}\n * features={{\n * enableLineage: true,\n * enableRunActions: true,\n * enableChecks: true,\n * }}\n * >\n * <MyApp />\n * </RecceProvider>\n * ```\n */\nexport function RecceProvider({\n children,\n api,\n theme = \"system\",\n routing,\n queryClient: queryClientConfig,\n runActions,\n lineage,\n checks,\n query,\n features = {},\n}: RecceProviderProps) {\n // Extract primitive values to stabilize dependency and prevent unnecessary QueryClient recreation\n const staleTime = queryClientConfig?.staleTime;\n const gcTime = queryClientConfig?.gcTime;\n\n const queryClient = useMemo(\n () =>\n createDefaultQueryClient({\n staleTime,\n gcTime,\n }),\n [staleTime, gcTime],\n );\n\n // Default all features to true unless explicitly disabled\n const {\n enableInstance = true,\n enableIdleTimeout = true,\n enableLineage = true,\n enableRunActions = true,\n enableChecks = true,\n enableQuery = true,\n } = features;\n\n // Foundation layer: QueryClient → API → Theme → Routing\n let tree = children;\n\n // Wrap with Routing (innermost of foundation layer)\n tree = <RoutingProvider config={routing}>{tree}</RoutingProvider>;\n\n // Wrap with Theme\n tree = <ThemeProvider defaultMode={theme}>{tree}</ThemeProvider>;\n\n // Wrap with API\n tree = <ApiProvider config={api}>{tree}</ApiProvider>;\n\n // Wrap with QueryClient (outermost of foundation layer)\n tree = <QueryClientProvider client={queryClient}>{tree}</QueryClientProvider>;\n\n // Data layer: Instance → Idle → Lineage → RunActions\n // These are wrapped in reverse order (bottom-up)\n\n // UI layer: Query (innermost)\n if (enableQuery) {\n tree = (\n <QueryProvider\n sql={query?.sql}\n isExecuting={query?.isExecuting}\n error={query?.error}\n baseResult={query?.baseResult}\n currentResult={query?.currentResult}\n onSqlChange={query?.onSqlChange}\n onExecute={query?.onExecute}\n onCancel={query?.onCancel}\n >\n {tree}\n </QueryProvider>\n );\n }\n\n // UI layer: Checks\n if (enableChecks) {\n tree = (\n <CheckProvider\n checks={checks?.checks}\n isLoading={checks?.isLoading}\n error={checks?.error}\n selectedCheckId={checks?.selectedCheckId}\n onSelectCheck={checks?.onSelectCheck}\n onCreateCheck={checks?.onCreateCheck}\n onUpdateCheck={checks?.onUpdateCheck}\n onDeleteCheck={checks?.onDeleteCheck}\n onReorderChecks={checks?.onReorderChecks}\n refetchChecks={checks?.refetchChecks}\n >\n {tree}\n </CheckProvider>\n );\n }\n\n // Data layer: RunActions\n if (enableRunActions) {\n tree = (\n <RecceActionProvider\n onRunAction={runActions?.onRunAction}\n onShowRunId={runActions?.onShowRunId}\n initialRunId={runActions?.initialRunId}\n initialHistoryOpen={runActions?.initialHistoryOpen}\n >\n {tree}\n </RecceActionProvider>\n );\n }\n\n // Data layer: Lineage\n if (enableLineage) {\n tree = (\n <LineageGraphProvider\n lineageGraph={lineage?.lineageGraph}\n envInfo={lineage?.envInfo}\n reviewMode={lineage?.reviewMode}\n cloudMode={lineage?.cloudMode}\n fileMode={lineage?.fileMode}\n fileName={lineage?.fileName}\n isDemoSite={lineage?.isDemoSite}\n isCodespace={lineage?.isCodespace}\n isLoading={lineage?.isLoading}\n error={lineage?.error}\n supportTasks={lineage?.supportTasks}\n onRefetchLineageGraph={lineage?.onRefetchLineageGraph}\n runsAggregated={lineage?.runsAggregated}\n onRefetchRunsAggregated={lineage?.onRefetchRunsAggregated}\n >\n {tree}\n </LineageGraphProvider>\n );\n }\n\n // Data layer: Idle (depends on Instance for idle timeout config)\n if (enableIdleTimeout) {\n tree = <IdleTimeoutProvider>{tree}</IdleTimeoutProvider>;\n }\n\n // Data layer: Instance (outermost, provides feature toggles for all others)\n if (enableInstance) {\n tree = <RecceInstanceInfoProvider>{tree}</RecceInstanceInfoProvider>;\n }\n\n return tree;\n}\n\nexport type { RecceProviderProps };\n","// @datarecce/ui - React component library for data validation interfaces\n\n// Version\nexport const VERSION = \"0.2.0\";\n\n// API utilities\nexport type {\n CatalogMetadata,\n GitInfo,\n LineageData,\n LineageDataFromMetadata,\n ManifestMetadata,\n MergedEdgeData,\n MergedLineageEnvMetadata,\n MergedLineageResponse,\n MergedNodeData,\n ModelEnvDetail,\n ModelInfoResult,\n NodeColumnData,\n NodeData,\n PullRequestInfo,\n RecceInstanceInfo,\n RecceServerFlags,\n RunsAggregated,\n ServerInfoResult,\n ServerMode,\n SQLMeshInfo,\n StateMetadata,\n} from \"./api\";\nexport {\n aggregateRuns,\n cacheKeys,\n getLastKeepAliveTime,\n getModelInfo,\n getRecceInstanceInfo,\n getServerFlag,\n getServerInfo,\n markRelaunchHintCompleted,\n reorderChecks,\n resetKeepAliveState,\n sendKeepAlive,\n setKeepAliveCallback,\n useChecks,\n} from \"./api\";\n\n// Components - UI components for data validation interfaces\n// NOTE: LineageCanvasProps canonical in @datarecce/ui/types\nexport type {\n // High-level views (Layer 3)\n ChecksViewProps,\n // Data type icons\n ColumnTooltipInput,\n DataTypeIconProps,\n // UI primitives\n DiffTextProps,\n // Lineage\n LineageCanvasProps,\n LineageViewProps,\n LineageViewRef,\n SplitProps,\n SquareIconProps,\n TypeCategory,\n} from \"./components\";\nexport {\n // Data type icons\n buildColumnTooltip,\n // High-level views (Layer 3)\n ChecksView,\n classifyType,\n DataTypeIcon,\n // UI primitives\n DiffText,\n HSplit,\n // Lineage\n LineageCanvas,\n LineageView,\n SquareIcon,\n VSplit,\n} from \"./components\";\n\n// Result view factory and types\n// NOTE: canonical in @datarecce/ui/result\nexport type {\n CreatedResultViewProps,\n ResultViewConfig,\n ResultViewData,\n ResultViewProps,\n ResultViewRef,\n ResultViewTransformOptions,\n ScreenshotWrapperType,\n} from \"./components/result\";\nexport { createResultView } from \"./components/result\";\n// Constants - reusable constant values for UI components\nexport {\n type DisableTooltipMessageKey,\n DisableTooltipMessages,\n} from \"./constants\";\n// Contexts - React contexts for state management\n// NOTE: Context hooks canonical in @datarecce/ui/contexts\n// NOTE: Types canonical in @datarecce/ui/types\nexport type {\n // LineageViewContext types\n ActionMode,\n ActionState,\n // Action context\n AxiosQueryParams,\n // Lineage graph types (canonical: @datarecce/ui/types)\n EnvInfo,\n IdleTimeoutContextType,\n InstanceInfoType,\n LineageGraph,\n LineageGraphColumnNode,\n LineageGraphContextType,\n LineageGraphEdge,\n LineageGraphNode,\n LineageGraphNodes,\n LineageGraphProviderProps,\n LineageViewContextType,\n NodeAction,\n NodeColumnSetMap,\n RecceActionContextType,\n RecceActionOptions,\n RecceActionProviderProps,\n RecceFeatureMode,\n RecceFeatureToggles,\n SelectMode,\n SubmitRunTrackProps,\n} from \"./contexts\";\nexport {\n // Lineage graph utilities (canonical: @datarecce/ui/contexts)\n buildLineageGraph,\n COLUMN_HEIGHT,\n // Instance info\n defaultFeatureToggles,\n defaultInstanceInfo,\n getNeighborSet,\n // Idle timeout\n IdleTimeoutProvider,\n intersect,\n isLineageGraphColumnNode,\n isLineageGraphNode,\n // Lineage graph\n LineageGraphProvider,\n layoutWithDagre,\n // Action context\n RecceActionProvider,\n RecceInstanceInfoProvider,\n selectDownstream,\n selectUpstream,\n toReactFlowBasic,\n union,\n useIdleDetection,\n useIdleTimeout,\n useIdleTimeoutSafe,\n useLineageGraphContext,\n useRecceActionContext,\n useRecceInstanceContext,\n useRecceInstanceInfo,\n useRecceServerFlag,\n useRunsAggregated,\n} from \"./contexts\";\n// Hooks - utility hooks for theming and data\nexport type {\n MultiNodesActionCallbacks,\n MultiNodesActionTracking,\n MultiNodesActionTrackProps,\n MultiNodesActionType,\n OSSCheckContext,\n OSSQueryContext,\n RecceActionOptions as OSSRecceActionOptions,\n ThemeColors,\n UseModelColumnsReturn,\n UseMultiNodesActionOptions,\n UseMultiNodesActionReturn,\n UseRunResult,\n} from \"./hooks\";\nexport {\n CheckContextAdapter,\n defaultSqlQuery,\n IGNORE_SCREENSHOT_CLASS,\n LineageGraphAdapter,\n QueryContextAdapter,\n RecceActionAdapter,\n RecceShareStateContextProvider,\n unionColumns,\n useCheckEvents,\n useCopyToClipboard,\n useCopyToClipboardButton,\n useCSVExport,\n useFeedbackCollectionToast,\n useImageDownloadModal,\n useIsDark,\n useModelColumns,\n useMultiNodesAction,\n useRecceCheckContext,\n useRecceQueryContext,\n useRecceShareStateContext,\n useRun,\n useThemeColors,\n} from \"./hooks\";\n// NOTE: SchemaDiffRow canonical in @datarecce/ui/types\nexport type {\n SchemaDataGridOptions,\n SchemaDataGridResult,\n SchemaDiffRow,\n SchemaRow,\n SingleEnvSchemaDataGridResult,\n} from \"./lib\";\n// Lib - library utilities including data grid generators\nexport {\n mergeColumns,\n toSchemaDataGrid,\n toSingleEnvDataGrid,\n} from \"./lib\";\n// Provider (main entry point) and Hooks - from providers module\n// NOTE: API hooks (`useApiClient`, `useApiConfig`, `useApiConfigOptional`) canonical in @datarecce/ui/contexts\nexport type {\n Check,\n CheckContextType,\n CheckProviderProps,\n NavigateOptions,\n QueryContextType,\n QueryProviderProps,\n QueryResult,\n RoutingConfig,\n RoutingContextValue,\n} from \"./providers\";\nexport {\n CheckProvider,\n QueryProvider,\n RecceProvider,\n type RecceProviderProps,\n useApiClient,\n useApiConfig,\n useApiConfigOptional,\n useAppLocation,\n useCheckContext,\n useQueryContext,\n useRecceTheme,\n useRouting,\n} from \"./providers\";\n// Theme - colors palette and MUI theme with CSS Variables\n// NOTE: `colors` and `getChartThemeColors` canonical in @datarecce/ui/theme\nexport type { Theme } from \"./theme\";\nexport { colors, theme } from \"./theme\";\n// Utils - utility functions for data manipulation and formatting\n// NOTE: `deltaPercentageString`, `formatTimestamp`, `formatTimeToNow`, `isSchemaChanged`\n// canonical in @datarecce/ui/utils\nexport {\n deltaPercentageString,\n extractSchemas,\n formatTimestamp,\n formatTimeToNow,\n isSchemaChanged,\n} from \"./utils\";\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{n as e}from"./colors-4aGxuAVw.js";import{createTheme as t}from"@mui/material/styles";function n(e){return{gridColor:e?`#4b5563`:`#d1d5db`,textColor:e?`#e5e7eb`:`#374151`,borderColor:e?`#6b7280`:`#9ca3af`,tooltipBackgroundColor:e?`#1f2937`:`#ffffff`,tooltipTextColor:e?`#e5e7eb`:`#111827`,barLabelColor:e?`#ffffff`:`#1f2937`,secondaryTextColor:e?`#e5e7eb`:`#6b7280`,overlayBackgroundColor:e?`#1f2937cc`:`#ffffffcc`}}function r(e,t=!0){let r=n(e);return{grid:{color:t?r.gridColor:void 0,display:t},ticks:{color:r.textColor},border:{color:r.borderColor}}}function i(e){let t=n(e);return{legend:{labels:{color:t.textColor}},title:{color:t.textColor},tooltip:{backgroundColor:t.tooltipBackgroundColor,titleColor:t.tooltipTextColor,bodyColor:t.tooltipTextColor,borderColor:t.borderColor,borderWidth:1}}}const a=`#63B3ED`,o=`#F6AD55`,s=`${a}A5`,c=`${o}A5`,l=`#90CDF4`,u=`#FBD38D`,d=`${l}A5`,f=`${u}A5`,p=a,m=l;function h(e){return{current:e?l:a,base:e?u:o,currentWithAlpha:e?d:s,baseWithAlpha:e?f:c,info:e?m:p}}function g(e,t){return[{props:{color:e,variant:`contained`},style:{backgroundColor:`var(--mui-palette-${e}-main, ${t[500]})`,color:`var(--mui-palette-${e}-contrastText, #ffffff)`,"&:hover":{backgroundColor:`var(--mui-palette-${e}-dark, ${t[600]})`}}},{props:{color:e,variant:`outlined`},style:{"&&":{borderColor:`var(--mui-palette-${e}-main, ${t[500]})`,color:`var(--mui-palette-${e}-dark, ${t[600]})`},"&:hover":{borderColor:`var(--mui-palette-${e}-dark, ${t[600]})`,backgroundColor:`color-mix(in srgb, var(--mui-palette-${e}-light, ${t[50]}) 30%, transparent)`}}},{props:{color:e,variant:`text`},style:{"&&":{color:`var(--mui-palette-${e}-dark, ${t[600]})`},"&:hover":{backgroundColor:`color-mix(in srgb, var(--mui-palette-${e}-light, ${t[50]}) 30%, transparent)`}}}]}function _(e,t){return[{props:{color:e,variant:`filled`},style:{backgroundColor:`var(--mui-palette-${e}-main, ${t[500]})`,color:`var(--mui-palette-${e}-contrastText, #ffffff)`,"&:hover":{backgroundColor:`var(--mui-palette-${e}-dark, ${t[600]})`},"&.MuiChip-clickable:hover":{backgroundColor:`var(--mui-palette-${e}-dark, ${t[600]})`}}},{props:{color:e,variant:`outlined`},style:{"&&":{borderColor:`var(--mui-palette-${e}-main, ${t[500]})`,color:`var(--mui-palette-${e}-dark, ${t[600]})`},"&:hover":{backgroundColor:`color-mix(in srgb, var(--mui-palette-${e}-light, ${t[50]}) 25%, transparent)`}}}]}function v(e,t){return[{props:{color:e},style:{"& .MuiBadge-badge":{backgroundColor:`var(--mui-palette-${e}-main, ${t[500]})`,color:`var(--mui-palette-${e}-contrastText, #ffffff)`}}}]}function y(e,t){return[{props:{color:e},style:{color:`var(--mui-palette-${e}-main, ${t[500]})`}}]}const b=[...g(`brand`,e.brand),...g(`iochmara`,e.iochmara),...g(`cyan`,e.cyan),...g(`amber`,e.amber),...g(`green`,e.green),...g(`red`,e.red),...g(`rose`,e.rose),...g(`fuchsia`,e.fuchsia),...g(`neutral`,e.neutral)],x=[..._(`brand`,e.brand),..._(`iochmara`,e.iochmara),..._(`cyan`,e.cyan),..._(`amber`,e.amber),..._(`green`,e.green),..._(`red`,e.red),..._(`rose`,e.rose),..._(`fuchsia`,e.fuchsia),..._(`neutral`,e.neutral)],S=[...v(`brand`,e.brand),...v(`iochmara`,e.iochmara)],C=[...y(`brand`,e.brand),...y(`iochmara`,e.iochmara)],w={typography:{fontFamily:[`-apple-system`,`BlinkMacSystemFont`,`"Segoe UI"`,`Roboto`,`"Helvetica Neue"`,`Arial`,`sans-serif`,`"Apple Color Emoji"`,`"Segoe UI Emoji"`,`"Segoe UI Symbol"`].join(`,`),fontSize:14,h1:{fontWeight:600},h2:{fontWeight:600},h3:{fontWeight:600},h4:{fontWeight:600},h5:{fontWeight:600},h6:{fontWeight:600},button:{textTransform:`none`,fontWeight:500}},shape:{borderRadius:8},components:{MuiButton:{defaultProps:{disableElevation:!0},styleOverrides:{root:{borderRadius:6,boxShadow:`none`,textTransform:`none`,fontWeight:500,"&:hover":{boxShadow:`none`}},sizeSmall:{fontSize:`0.8125rem`,padding:`4px 10px`},sizeMedium:{padding:`0.5rem 1rem`,fontSize:`1rem`},sizeLarge:{padding:`0.75rem 1.5rem`,fontSize:`1.125rem`},contained:{"&:hover":{boxShadow:`none`}},outlined:{borderWidth:`1px`,"&:hover":{borderWidth:`1px`}}},variants:[{props:{size:`xsmall`},style:{fontSize:`0.75rem`,padding:`2px 8px`,minHeight:24}},...b]},MuiChip:{styleOverrides:{root:{borderRadius:6,fontWeight:500},sizeSmall:{fontSize:`0.75rem`,height:24},sizeMedium:{height:32,fontSize:`0.875rem`}},variants:[{props:{size:`xsmall`},style:{fontSize:`0.6875rem`,height:20,"& .MuiChip-label":{padding:`0 6px`}}},...x]},MuiBadge:{variants:[...S],styleOverrides:{badge:{fontWeight:500,fontSize:`0.75rem`}}},MuiAlert:{styleOverrides:{root:{borderRadius:6,"&.MuiAlert-standard.MuiAlert-colorSuccess":{backgroundColor:`var(--mui-palette-success-light)`,color:`var(--mui-palette-success-dark)`,"& .MuiAlert-icon":{color:`var(--mui-palette-success-dark)`}},"&.MuiAlert-standard.MuiAlert-colorWarning":{backgroundColor:`var(--mui-palette-warning-light)`,color:`var(--mui-palette-warning-dark)`,"& .MuiAlert-icon":{color:`var(--mui-palette-warning-dark)`}},"&.MuiAlert-standard.MuiAlert-colorError":{backgroundColor:`var(--mui-palette-error-light)`,color:`var(--mui-palette-error-dark)`,"& .MuiAlert-icon":{color:`var(--mui-palette-error-dark)`}},"&.MuiAlert-standard.MuiAlert-colorInfo":{backgroundColor:`var(--mui-palette-info-light)`,color:`var(--mui-palette-info-dark)`,"& .MuiAlert-icon":{color:`var(--mui-palette-info-dark)`}}}}},MuiTabs:{styleOverrides:{indicator:{height:2}}},MuiTab:{styleOverrides:{root:{textTransform:`none`,fontWeight:500,minHeight:48}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500}}},MuiCircularProgress:{defaultProps:{color:`primary`},variants:[...C]},MuiLink:{defaultProps:{underline:`hover`},styleOverrides:{root:{fontWeight:500,color:`var(--mui-palette-secondary-main)`,textDecorationColor:`var(--mui-palette-secondary-light)`,"&:hover":{color:`var(--mui-palette-secondary-dark)`}}}},MuiPopover:{styleOverrides:{paper:{borderRadius:8,boxShadow:`0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)`}}},MuiDivider:{styleOverrides:{root:{borderColor:`var(--mui-palette-divider)`}}},MuiBreadcrumbs:{styleOverrides:{separator:{color:`var(--mui-palette-text-secondary)`}}},MuiCard:{styleOverrides:{root:{borderRadius:8,boxShadow:`0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)`}}},MuiPaper:{styleOverrides:{root:{backgroundImage:`none`}}},MuiTooltip:{styleOverrides:{tooltip:{fontSize:`0.75rem`}}},MuiIconButton:{styleOverrides:{root:{borderRadius:6},sizeSmall:{padding:4},sizeMedium:{padding:8},sizeLarge:{padding:12}}},MuiTextField:{defaultProps:{variant:`outlined`,size:`small`},styleOverrides:{root:{"& .MuiOutlinedInput-root":{borderRadius:6}}}},MuiOutlinedInput:{styleOverrides:{root:{borderRadius:6,"&:hover .MuiOutlinedInput-notchedOutline":{borderColor:`var(--mui-palette-secondary-light)`},"&.Mui-focused .MuiOutlinedInput-notchedOutline":{borderColor:`var(--mui-palette-secondary-main)`,borderWidth:2}},notchedOutline:{borderColor:`var(--mui-palette-divider)`}}},MuiCheckbox:{defaultProps:{color:`primary`},styleOverrides:{root:{borderRadius:4}}},MuiSwitch:{defaultProps:{color:`primary`}},MuiDialog:{styleOverrides:{paper:{borderRadius:8}}},MuiDialogTitle:{styleOverrides:{root:{fontWeight:600,fontSize:`1.125rem`}}},MuiMenu:{styleOverrides:{paper:{borderRadius:8,boxShadow:`0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)`}}},MuiMenuItem:{styleOverrides:{root:{fontSize:`0.875rem`,padding:`0.5rem 0.75rem`,"&:hover":{backgroundColor:`var(--mui-palette-action-hover)`},"&.Mui-selected":{backgroundColor:`var(--mui-palette-action-selected)`,"&:hover":{backgroundColor:`var(--mui-palette-action-selected)`}}}}},MuiAutocomplete:{styleOverrides:{paper:{borderRadius:6,boxShadow:`0 4px 6px -1px rgba(0, 0, 0, 0.15), 0 2px 4px -2px rgba(0, 0, 0, 0.1)`,backgroundColor:e.neutral[200],".dark &":{backgroundColor:e.neutral[700]}},listbox:{padding:`4px 0`},option:{fontSize:`0.875rem`,padding:`0.5rem 0.75rem`,'&[aria-selected="true"]':{backgroundColor:`var(--mui-palette-action-selected)`},"&.Mui-focused":{backgroundColor:`var(--mui-palette-action-hover)`}}}}}},T=t({cssVariables:{colorSchemeSelector:`class`},colorSchemes:{light:{palette:{mode:`light`,primary:{main:e.iochmara[500],light:e.iochmara[300],dark:e.iochmara[600],contrastText:`#ffffff`},secondary:{main:e.cyan[500],light:e.cyan[400],dark:e.cyan[600],contrastText:`#ffffff`},brand:{light:e.brand[400],main:e.brand[500],dark:e.brand[600],contrastText:`#ffffff`},iochmara:{light:e.iochmara[400],main:e.iochmara[500],dark:e.iochmara[600],contrastText:`#ffffff`},cyan:{main:e.cyan[500],light:e.cyan[300],dark:e.cyan[600],contrastText:`#ffffff`},amber:{main:e.amber[500],light:e.amber[300],dark:e.amber[600],contrastText:`#ffffff`},green:{main:e.green[500],light:e.green[300],dark:e.green[600],contrastText:`#ffffff`},red:{main:e.red[500],light:e.red[300],dark:e.red[600],contrastText:`#ffffff`},rose:{main:e.rose[500],light:e.rose[300],dark:e.rose[600],contrastText:`#ffffff`},fuchsia:{main:e.fuchsia[500],light:e.fuchsia[300],dark:e.fuchsia[600],contrastText:`#ffffff`},neutral:{main:e.neutral[600],light:e.neutral[300],dark:e.neutral[700],contrastText:`#ffffff`},grey:e.neutral,success:e.success,warning:e.warning,error:e.error,info:e.info,background:{default:`#ffffff`,paper:e.neutral[50]},text:{primary:e.neutral[900],secondary:e.neutral[600],disabled:e.neutral[400]},divider:e.neutral[200]}},dark:{palette:{mode:`dark`,primary:{main:e.iochmara[500],light:e.iochmara[300],dark:e.iochmara[600],contrastText:`#ffffff`},secondary:{main:e.cyan[500],light:e.cyan[400],dark:e.cyan[600],contrastText:`#ffffff`},brand:{light:e.brand[300],main:e.brand[400],dark:e.brand[600],contrastText:`#ffffff`},iochmara:{light:e.iochmara[300],main:e.iochmara[400],dark:e.iochmara[600],contrastText:`#ffffff`},cyan:{main:e.cyan[400],light:e.cyan[300],dark:e.cyan[600],contrastText:`#ffffff`},amber:{main:e.amber[400],light:e.amber[300],dark:e.amber[600],contrastText:`#000000`},green:{main:e.green[400],light:e.green[300],dark:e.green[600],contrastText:`#ffffff`},red:{main:e.red[400],light:e.red[300],dark:e.red[600],contrastText:`#ffffff`},rose:{main:e.rose[400],light:e.rose[300],dark:e.rose[600],contrastText:`#ffffff`},fuchsia:{main:e.fuchsia[400],light:e.fuchsia[300],dark:e.fuchsia[600],contrastText:`#ffffff`},neutral:{main:e.neutral[400],light:e.neutral[300],dark:e.neutral[200],contrastText:e.neutral[900]},grey:e.neutral,success:{light:e.success.light,main:e.success.main,dark:e.success.dark,contrastText:`#000000`},warning:{light:e.warning.light,main:e.warning.main,dark:e.warning.dark,contrastText:`#000000`},error:{light:e.error.light,main:e.error.main,dark:e.error.dark,contrastText:`#ffffff`},info:{light:e.info.light,main:e.info.main,dark:e.info.dark,contrastText:`#ffffff`},background:{default:e.neutral[900],paper:e.neutral[800]},text:{primary:e.neutral[50],secondary:e.neutral[400],disabled:e.neutral[600]},divider:e.neutral[700]}}},...w});export{r as _,u as a,a as c,s as d,p as f,i as g,n as h,o as i,l,h as m,dataGridThemeLight as n,f as o,m as p,T as r,c as s,dataGridThemeDark as t,d as u};
3
- //# sourceMappingURL=theme-wN7zbYoG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme-wN7zbYoG.js","names":[],"sources":["../src/theme/chartTheme.ts","../src/theme/theme.ts"],"sourcesContent":["/**\n * Shared chart theme utilities — single source of truth for both\n * Chart.js-backed charts (`HistogramChart`, `TopKBarChart`) and the\n * SVG-rendered paired histogram cells.\n */\n\nexport interface ChartThemeColors {\n gridColor: string;\n textColor: string;\n borderColor: string;\n tooltipBackgroundColor: string;\n tooltipTextColor: string;\n /** Text color for labels drawn inside bars (must contrast with pastel bar fills) */\n barLabelColor: string;\n /** Subdued text color for secondary labels like percentages */\n secondaryTextColor: string;\n /** Semi-transparent background for chips/badges drawn over bars (e.g. trimmed-top-K marker). */\n overlayBackgroundColor: string;\n}\n\n/**\n * Get theme-aware colors for Chart.js charts\n * @param isDark - Whether dark mode is active\n * @returns Theme colors for Chart.js configuration\n */\nexport function getChartThemeColors(isDark: boolean): ChartThemeColors {\n return {\n gridColor: isDark ? \"#4b5563\" : \"#d1d5db\",\n textColor: isDark ? \"#e5e7eb\" : \"#374151\",\n borderColor: isDark ? \"#6b7280\" : \"#9ca3af\",\n tooltipBackgroundColor: isDark ? \"#1f2937\" : \"#ffffff\",\n tooltipTextColor: isDark ? \"#e5e7eb\" : \"#111827\",\n barLabelColor: isDark ? \"#ffffff\" : \"#1f2937\",\n secondaryTextColor: isDark ? \"#e5e7eb\" : \"#6b7280\",\n // 80% (cc) opacity: legible over a tall bar without reading as a hard block.\n overlayBackgroundColor: isDark ? \"#1f2937cc\" : \"#ffffffcc\",\n };\n}\n\n/**\n * Get Chart.js scale options with theme-aware colors\n * @param isDark - Whether dark mode is active\n * @param showGrid - Whether to show grid lines\n * @returns Partial scale options for Chart.js\n */\nexport function getThemedScaleOptions(isDark: boolean, showGrid = true) {\n const colors = getChartThemeColors(isDark);\n return {\n grid: {\n color: showGrid ? colors.gridColor : undefined,\n display: showGrid,\n },\n ticks: {\n color: colors.textColor,\n },\n border: {\n color: colors.borderColor,\n },\n };\n}\n\n/**\n * Get Chart.js plugin options with theme-aware colors\n * @param isDark - Whether dark mode is active\n * @returns Plugin options for Chart.js (legend, title, tooltip)\n */\nexport function getThemedPluginOptions(isDark: boolean) {\n const colors = getChartThemeColors(isDark);\n return {\n legend: {\n labels: {\n color: colors.textColor,\n },\n },\n title: {\n color: colors.textColor,\n },\n tooltip: {\n backgroundColor: colors.tooltipBackgroundColor,\n titleColor: colors.tooltipTextColor,\n bodyColor: colors.tooltipTextColor,\n borderColor: colors.borderColor,\n borderWidth: 1,\n },\n };\n}\n\n// Bar color constants - Light mode\nexport const CURRENT_BAR_COLOR = \"#63B3ED\";\nexport const BASE_BAR_COLOR = \"#F6AD55\";\nexport const CURRENT_BAR_COLOR_WITH_ALPHA = `${CURRENT_BAR_COLOR}A5`;\nexport const BASE_BAR_COLOR_WITH_ALPHA = `${BASE_BAR_COLOR}A5`;\n\n// Bar color constants - Dark mode (slightly brighter for better visibility)\nexport const CURRENT_BAR_COLOR_DARK = \"#90CDF4\";\nexport const BASE_BAR_COLOR_DARK = \"#FBD38D\";\nexport const CURRENT_BAR_COLOR_DARK_WITH_ALPHA = `${CURRENT_BAR_COLOR_DARK}A5`;\nexport const BASE_BAR_COLOR_DARK_WITH_ALPHA = `${BASE_BAR_COLOR_DARK}A5`;\n\n// `info`-style accent color used by some chart legends. Equal to the current\n// bar color today but kept as a named export so consumers can pull a stable\n// \"info\" accent without binding to the base/current palette.\nexport const INFO_VAL_COLOR = CURRENT_BAR_COLOR;\nexport const INFO_VAL_COLOR_DARK = CURRENT_BAR_COLOR_DARK;\n\n/**\n * Bar colors for base/current comparison.\n */\nexport interface ChartBarColors {\n current: string;\n base: string;\n currentWithAlpha: string;\n baseWithAlpha: string;\n /** Accent color for `info`-styled legends; matches `current` today. */\n info: string;\n}\n\n/**\n * Get theme-aware bar colors for charts.\n * @param isDark - Whether dark mode is active\n */\nexport function getChartBarColors(isDark: boolean): ChartBarColors {\n return {\n current: isDark ? CURRENT_BAR_COLOR_DARK : CURRENT_BAR_COLOR,\n base: isDark ? BASE_BAR_COLOR_DARK : BASE_BAR_COLOR,\n currentWithAlpha: isDark\n ? CURRENT_BAR_COLOR_DARK_WITH_ALPHA\n : CURRENT_BAR_COLOR_WITH_ALPHA,\n baseWithAlpha: isDark\n ? BASE_BAR_COLOR_DARK_WITH_ALPHA\n : BASE_BAR_COLOR_WITH_ALPHA,\n info: isDark ? INFO_VAL_COLOR_DARK : INFO_VAL_COLOR,\n };\n}\n","/**\n * MUI Theme configuration with CSS Variables mode\n *\n * This theme uses MUI 7's CSS Variables mode with `colorSchemeSelector: 'class'`\n * to toggle between light and dark modes using the `.dark` class on the document.\n * This integrates with the ThemeContext which manages the class toggle.\n *\n * Color values and component variants are aligned with the main Recce theme at\n * ui/src/components/ui/mui-theme.ts for consistency.\n */\n\nimport { createTheme, type ThemeOptions } from \"@mui/material/styles\";\n\nimport { colors } from \"./colors\";\n\n// Custom color names type for variant generation\ntype CustomColorName =\n | \"brand\"\n | \"iochmara\"\n | \"cyan\"\n | \"amber\"\n | \"green\"\n | \"red\"\n | \"rose\"\n | \"fuchsia\"\n | \"neutral\";\n\n// Type for color scales with numeric keys (50, 100, 200, etc.)\ninterface ColorScale {\n readonly [key: number]: string;\n readonly 50: string;\n readonly 100: string;\n readonly 200: string;\n readonly 300: string;\n readonly 400: string;\n readonly 500: string;\n readonly 600: string;\n readonly 700: string;\n readonly 800: string;\n readonly 900: string;\n readonly 950: string;\n}\n\n/**\n * Helper to generate button color variants for a given color\n * Creates contained, outlined, and text variant styles\n *\n * Uses the `&&` selector pattern to increase CSS specificity, ensuring our\n * custom color variant styles override MUI's default outlined/text button styles.\n * MUI's default styles have high specificity that would otherwise win the cascade.\n *\n * @see https://mui.com/material-ui/customization/theme-components/#specificity\n */\nfunction createButtonColorVariants<T extends CustomColorName>(\n colorName: T,\n colorScale: ColorScale,\n) {\n return [\n // Contained variant (solid) - uses CSS variables for light/dark mode\n {\n props: { color: colorName, variant: \"contained\" as const },\n style: {\n backgroundColor: `var(--mui-palette-${colorName}-main, ${colorScale[500]})`,\n color: `var(--mui-palette-${colorName}-contrastText, #ffffff)`,\n \"&:hover\": {\n backgroundColor: `var(--mui-palette-${colorName}-dark, ${colorScale[600]})`,\n },\n },\n },\n // Outlined variant - uses && for higher specificity over MUI defaults\n {\n props: { color: colorName, variant: \"outlined\" as const },\n style: {\n // && increases specificity to override MUI's default outlined styles\n \"&&\": {\n borderColor: `var(--mui-palette-${colorName}-main, ${colorScale[500]})`,\n color: `var(--mui-palette-${colorName}-dark, ${colorScale[600]})`,\n },\n \"&:hover\": {\n borderColor: `var(--mui-palette-${colorName}-dark, ${colorScale[600]})`,\n backgroundColor: `color-mix(in srgb, var(--mui-palette-${colorName}-light, ${colorScale[50]}) 30%, transparent)`,\n },\n },\n },\n // Text variant (ghost) - uses && for higher specificity over MUI defaults\n {\n props: { color: colorName, variant: \"text\" as const },\n style: {\n // && increases specificity to override MUI's default text styles\n \"&&\": {\n color: `var(--mui-palette-${colorName}-dark, ${colorScale[600]})`,\n },\n \"&:hover\": {\n backgroundColor: `color-mix(in srgb, var(--mui-palette-${colorName}-light, ${colorScale[50]}) 30%, transparent)`,\n },\n },\n },\n ];\n}\n\n/**\n * Helper to generate Chip color variants\n * Uses CSS variables for automatic light/dark mode support\n *\n * Uses the `&&` selector pattern for outlined variant to ensure our custom\n * color styles override MUI's default chip outlined styles.\n */\nfunction createChipColorVariants<T extends CustomColorName>(\n colorName: T,\n colorScale: ColorScale,\n) {\n return [\n // Filled variant - uses CSS variables for light/dark mode\n {\n props: { color: colorName, variant: \"filled\" as const },\n style: {\n backgroundColor: `var(--mui-palette-${colorName}-main, ${colorScale[500]})`,\n color: `var(--mui-palette-${colorName}-contrastText, #ffffff)`,\n \"&:hover\": {\n backgroundColor: `var(--mui-palette-${colorName}-dark, ${colorScale[600]})`,\n },\n \"&.MuiChip-clickable:hover\": {\n backgroundColor: `var(--mui-palette-${colorName}-dark, ${colorScale[600]})`,\n },\n },\n },\n // Outlined variant - uses && for higher specificity over MUI defaults\n {\n props: { color: colorName, variant: \"outlined\" as const },\n style: {\n // && increases specificity to override MUI's default outlined styles\n \"&&\": {\n borderColor: `var(--mui-palette-${colorName}-main, ${colorScale[500]})`,\n color: `var(--mui-palette-${colorName}-dark, ${colorScale[600]})`,\n },\n \"&:hover\": {\n backgroundColor: `color-mix(in srgb, var(--mui-palette-${colorName}-light, ${colorScale[50]}) 25%, transparent)`,\n },\n },\n },\n ];\n}\n\n/**\n * Helper to generate Badge color variants\n * Uses CSS variables for automatic light/dark mode support\n */\nfunction createBadgeColorVariant<T extends CustomColorName>(\n colorName: T,\n colorScale: ColorScale,\n) {\n return [\n {\n props: { color: colorName },\n style: {\n \"& .MuiBadge-badge\": {\n backgroundColor: `var(--mui-palette-${colorName}-main, ${colorScale[500]})`,\n color: `var(--mui-palette-${colorName}-contrastText, #ffffff)`,\n },\n },\n },\n ];\n}\n\n/**\n * Helper to generate CircularProgress color variants\n * Uses CSS variables for automatic light/dark mode support\n */\nfunction createProgressColorVariant<T extends CustomColorName>(\n colorName: T,\n colorScale: ColorScale,\n) {\n return [\n {\n props: { color: colorName },\n style: {\n color: `var(--mui-palette-${colorName}-main, ${colorScale[500]})`,\n },\n },\n ];\n}\n\n// Generate all button color variants\nconst buttonColorVariants = [\n ...createButtonColorVariants(\"brand\", colors.brand),\n ...createButtonColorVariants(\"iochmara\", colors.iochmara),\n ...createButtonColorVariants(\"cyan\", colors.cyan),\n ...createButtonColorVariants(\"amber\", colors.amber),\n ...createButtonColorVariants(\"green\", colors.green),\n ...createButtonColorVariants(\"red\", colors.red),\n ...createButtonColorVariants(\"rose\", colors.rose),\n ...createButtonColorVariants(\"fuchsia\", colors.fuchsia),\n ...createButtonColorVariants(\"neutral\", colors.neutral),\n];\n\n// Generate all chip color variants\nconst chipColorVariants = [\n ...createChipColorVariants(\"brand\", colors.brand),\n ...createChipColorVariants(\"iochmara\", colors.iochmara),\n ...createChipColorVariants(\"cyan\", colors.cyan),\n ...createChipColorVariants(\"amber\", colors.amber),\n ...createChipColorVariants(\"green\", colors.green),\n ...createChipColorVariants(\"red\", colors.red),\n ...createChipColorVariants(\"rose\", colors.rose),\n ...createChipColorVariants(\"fuchsia\", colors.fuchsia),\n ...createChipColorVariants(\"neutral\", colors.neutral),\n];\n\n// Generate all badge color variants\nconst badgeColorVariants = [\n ...createBadgeColorVariant(\"brand\", colors.brand),\n ...createBadgeColorVariant(\"iochmara\", colors.iochmara),\n];\n\n// Generate all progress color variants\nconst progressColorVariants = [\n ...createProgressColorVariant(\"brand\", colors.brand),\n ...createProgressColorVariant(\"iochmara\", colors.iochmara),\n];\n\n// Module augmentations are in js/mui-augmentations.d.ts (included via tsconfig)\n\n/**\n * System font stack for optimal cross-platform rendering\n */\nconst systemFontStack = [\n \"-apple-system\",\n \"BlinkMacSystemFont\",\n '\"Segoe UI\"',\n \"Roboto\",\n '\"Helvetica Neue\"',\n \"Arial\",\n \"sans-serif\",\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n].join(\",\");\n\n/**\n * Shared theme options for both light and dark modes\n */\nconst sharedThemeOptions: ThemeOptions = {\n typography: {\n fontFamily: systemFontStack,\n // Slightly smaller default sizes for data-dense UIs\n fontSize: 14,\n h1: { fontWeight: 600 },\n h2: { fontWeight: 600 },\n h3: { fontWeight: 600 },\n h4: { fontWeight: 600 },\n h5: { fontWeight: 600 },\n h6: { fontWeight: 600 },\n button: {\n textTransform: \"none\", // No uppercase for buttons\n fontWeight: 500,\n },\n },\n shape: {\n borderRadius: 8, // Rounded corners\n },\n components: {\n MuiButton: {\n defaultProps: {\n disableElevation: true, // Match Chakra's flat button style\n },\n styleOverrides: {\n root: {\n borderRadius: 6,\n boxShadow: \"none\",\n textTransform: \"none\",\n fontWeight: 500,\n \"&:hover\": {\n boxShadow: \"none\",\n },\n },\n sizeSmall: {\n fontSize: \"0.8125rem\",\n padding: \"4px 10px\",\n },\n sizeMedium: {\n padding: \"0.5rem 1rem\",\n fontSize: \"1rem\",\n },\n sizeLarge: {\n padding: \"0.75rem 1.5rem\",\n fontSize: \"1.125rem\",\n },\n contained: {\n \"&:hover\": {\n boxShadow: \"none\",\n },\n },\n outlined: {\n borderWidth: \"1px\",\n \"&:hover\": {\n borderWidth: \"1px\",\n },\n },\n },\n variants: [\n // Size variant: xsmall\n {\n props: { size: \"xsmall\" },\n style: {\n fontSize: \"0.75rem\",\n padding: \"2px 8px\",\n minHeight: 24,\n },\n },\n // Color variants for brand and iochmara\n ...buttonColorVariants,\n ],\n },\n MuiChip: {\n styleOverrides: {\n root: {\n borderRadius: 6,\n fontWeight: 500,\n },\n sizeSmall: {\n fontSize: \"0.75rem\",\n height: 24,\n },\n sizeMedium: {\n height: 32,\n fontSize: \"0.875rem\",\n },\n },\n variants: [\n // Size variant: xsmall\n {\n props: { size: \"xsmall\" },\n style: {\n fontSize: \"0.6875rem\",\n height: 20,\n \"& .MuiChip-label\": {\n padding: \"0 6px\",\n },\n },\n },\n // Color variants for brand and iochmara\n ...chipColorVariants,\n ],\n },\n MuiBadge: {\n variants: [\n // Color variants for brand and iochmara\n ...badgeColorVariants,\n ],\n styleOverrides: {\n badge: {\n fontWeight: 500,\n fontSize: \"0.75rem\",\n },\n },\n },\n // Alert overrides\n MuiAlert: {\n styleOverrides: {\n root: {\n borderRadius: 6,\n \"&.MuiAlert-standard.MuiAlert-colorSuccess\": {\n backgroundColor: \"var(--mui-palette-success-light)\",\n color: \"var(--mui-palette-success-dark)\",\n \"& .MuiAlert-icon\": {\n color: \"var(--mui-palette-success-dark)\",\n },\n },\n \"&.MuiAlert-standard.MuiAlert-colorWarning\": {\n backgroundColor: \"var(--mui-palette-warning-light)\",\n color: \"var(--mui-palette-warning-dark)\",\n \"& .MuiAlert-icon\": {\n color: \"var(--mui-palette-warning-dark)\",\n },\n },\n \"&.MuiAlert-standard.MuiAlert-colorError\": {\n backgroundColor: \"var(--mui-palette-error-light)\",\n color: \"var(--mui-palette-error-dark)\",\n \"& .MuiAlert-icon\": {\n color: \"var(--mui-palette-error-dark)\",\n },\n },\n \"&.MuiAlert-standard.MuiAlert-colorInfo\": {\n backgroundColor: \"var(--mui-palette-info-light)\",\n color: \"var(--mui-palette-info-dark)\",\n \"& .MuiAlert-icon\": {\n color: \"var(--mui-palette-info-dark)\",\n },\n },\n },\n },\n },\n // Tabs overrides\n MuiTabs: {\n styleOverrides: {\n indicator: {\n height: 2,\n },\n },\n },\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n fontWeight: 500,\n minHeight: 48,\n },\n },\n },\n // Avatar overrides\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n },\n },\n },\n MuiCircularProgress: {\n defaultProps: {\n color: \"primary\",\n },\n variants: [\n // Color variants for brand and iochmara\n ...progressColorVariants,\n ],\n },\n // Link overrides\n MuiLink: {\n defaultProps: {\n underline: \"hover\",\n },\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"var(--mui-palette-secondary-main)\",\n textDecorationColor: \"var(--mui-palette-secondary-light)\",\n \"&:hover\": {\n color: \"var(--mui-palette-secondary-dark)\",\n },\n },\n },\n },\n // Popover overrides\n MuiPopover: {\n styleOverrides: {\n paper: {\n borderRadius: 8,\n boxShadow:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n },\n },\n },\n // Divider overrides\n MuiDivider: {\n styleOverrides: {\n root: {\n borderColor: \"var(--mui-palette-divider)\",\n },\n },\n },\n // Breadcrumbs overrides\n MuiBreadcrumbs: {\n styleOverrides: {\n separator: {\n color: \"var(--mui-palette-text-secondary)\",\n },\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n borderRadius: 8,\n boxShadow:\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)\",\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundImage: \"none\", // Remove default gradient\n },\n },\n },\n MuiTooltip: {\n styleOverrides: {\n tooltip: {\n fontSize: \"0.75rem\",\n },\n },\n },\n // IconButton overrides\n MuiIconButton: {\n styleOverrides: {\n root: {\n borderRadius: 6,\n },\n sizeSmall: {\n padding: 4,\n },\n sizeMedium: {\n padding: 8,\n },\n sizeLarge: {\n padding: 12,\n },\n },\n },\n // TextField overrides\n MuiTextField: {\n defaultProps: {\n variant: \"outlined\",\n size: \"small\",\n },\n styleOverrides: {\n root: {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: 6,\n },\n },\n },\n },\n // OutlinedInput overrides\n MuiOutlinedInput: {\n styleOverrides: {\n root: {\n borderRadius: 6,\n \"&:hover .MuiOutlinedInput-notchedOutline\": {\n borderColor: \"var(--mui-palette-secondary-light)\",\n },\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\n borderColor: \"var(--mui-palette-secondary-main)\",\n borderWidth: 2,\n },\n },\n notchedOutline: {\n borderColor: \"var(--mui-palette-divider)\",\n },\n },\n },\n // Checkbox overrides\n MuiCheckbox: {\n defaultProps: {\n color: \"primary\",\n },\n styleOverrides: {\n root: {\n borderRadius: 4,\n },\n },\n },\n // Switch overrides\n MuiSwitch: {\n defaultProps: {\n color: \"primary\",\n },\n },\n // Dialog overrides\n MuiDialog: {\n styleOverrides: {\n paper: {\n borderRadius: 8,\n },\n },\n },\n MuiDialogTitle: {\n styleOverrides: {\n root: {\n fontWeight: 600,\n fontSize: \"1.125rem\",\n },\n },\n },\n // Menu overrides\n MuiMenu: {\n styleOverrides: {\n paper: {\n borderRadius: 8,\n boxShadow:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n },\n },\n },\n MuiMenuItem: {\n styleOverrides: {\n root: {\n fontSize: \"0.875rem\",\n padding: \"0.5rem 0.75rem\",\n \"&:hover\": {\n backgroundColor: \"var(--mui-palette-action-hover)\",\n },\n \"&.Mui-selected\": {\n backgroundColor: \"var(--mui-palette-action-selected)\",\n \"&:hover\": {\n backgroundColor: \"var(--mui-palette-action-selected)\",\n },\n },\n },\n },\n },\n // Autocomplete overrides\n MuiAutocomplete: {\n styleOverrides: {\n paper: {\n borderRadius: 6,\n boxShadow:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.15), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n backgroundColor: colors.neutral[200],\n \".dark &\": {\n backgroundColor: colors.neutral[700],\n },\n },\n listbox: {\n padding: \"4px 0\",\n },\n option: {\n fontSize: \"0.875rem\",\n padding: \"0.5rem 0.75rem\",\n '&[aria-selected=\"true\"]': {\n backgroundColor: \"var(--mui-palette-action-selected)\",\n },\n \"&.Mui-focused\": {\n backgroundColor: \"var(--mui-palette-action-hover)\",\n },\n },\n },\n },\n },\n};\n\n/**\n * MUI Theme with CSS Variables mode enabled\n *\n * Uses `colorSchemeSelector: 'class'` to switch themes via `.dark` class,\n * which is toggled by the ThemeContext provider.\n *\n * Usage:\n * ```tsx\n * import { ThemeProvider } from '@mui/material/styles';\n * import { theme } from '@datarecce/ui/theme';\n *\n * <ThemeProvider theme={theme}>\n * <App />\n * </ThemeProvider>\n * ```\n */\nexport const theme = createTheme({\n cssVariables: {\n colorSchemeSelector: \"class\", // Use .dark class for dark mode\n },\n colorSchemes: {\n light: {\n palette: {\n mode: \"light\",\n primary: {\n main: colors.iochmara[500],\n light: colors.iochmara[300],\n dark: colors.iochmara[600],\n contrastText: \"#ffffff\",\n },\n secondary: {\n main: colors.cyan[500],\n light: colors.cyan[400],\n dark: colors.cyan[600],\n contrastText: \"#ffffff\",\n },\n brand: {\n light: colors.brand[400],\n main: colors.brand[500],\n dark: colors.brand[600],\n contrastText: \"#ffffff\",\n },\n iochmara: {\n light: colors.iochmara[400],\n main: colors.iochmara[500],\n dark: colors.iochmara[600],\n contrastText: \"#ffffff\",\n },\n cyan: {\n main: colors.cyan[500],\n light: colors.cyan[300],\n dark: colors.cyan[600],\n contrastText: \"#ffffff\",\n },\n amber: {\n main: colors.amber[500],\n light: colors.amber[300],\n dark: colors.amber[600],\n contrastText: \"#ffffff\",\n },\n green: {\n main: colors.green[500],\n light: colors.green[300],\n dark: colors.green[600],\n contrastText: \"#ffffff\",\n },\n red: {\n main: colors.red[500],\n light: colors.red[300],\n dark: colors.red[600],\n contrastText: \"#ffffff\",\n },\n rose: {\n main: colors.rose[500],\n light: colors.rose[300],\n dark: colors.rose[600],\n contrastText: \"#ffffff\",\n },\n fuchsia: {\n main: colors.fuchsia[500],\n light: colors.fuchsia[300],\n dark: colors.fuchsia[600],\n contrastText: \"#ffffff\",\n },\n neutral: {\n main: colors.neutral[600],\n light: colors.neutral[300],\n dark: colors.neutral[700],\n contrastText: \"#ffffff\",\n },\n grey: colors.neutral, // Color scale (50, 100, etc.) - MUI's built-in grey\n success: colors.success,\n warning: colors.warning,\n error: colors.error,\n info: colors.info,\n background: {\n default: \"#ffffff\",\n paper: colors.neutral[50],\n },\n text: {\n primary: colors.neutral[900],\n secondary: colors.neutral[600],\n disabled: colors.neutral[400],\n },\n divider: colors.neutral[200],\n },\n },\n dark: {\n palette: {\n mode: \"dark\",\n primary: {\n main: colors.iochmara[500],\n light: colors.iochmara[300],\n dark: colors.iochmara[600],\n contrastText: \"#ffffff\",\n },\n secondary: {\n main: colors.cyan[500],\n light: colors.cyan[400],\n dark: colors.cyan[600],\n contrastText: \"#ffffff\",\n },\n brand: {\n light: colors.brand[300],\n main: colors.brand[400],\n dark: colors.brand[600],\n contrastText: \"#ffffff\",\n },\n iochmara: {\n light: colors.iochmara[300],\n main: colors.iochmara[400],\n dark: colors.iochmara[600],\n contrastText: \"#ffffff\",\n },\n cyan: {\n main: colors.cyan[400],\n light: colors.cyan[300],\n dark: colors.cyan[600],\n contrastText: \"#ffffff\",\n },\n amber: {\n main: colors.amber[400],\n light: colors.amber[300],\n dark: colors.amber[600],\n contrastText: \"#000000\",\n },\n green: {\n main: colors.green[400],\n light: colors.green[300],\n dark: colors.green[600],\n contrastText: \"#ffffff\",\n },\n red: {\n main: colors.red[400],\n light: colors.red[300],\n dark: colors.red[600],\n contrastText: \"#ffffff\",\n },\n rose: {\n main: colors.rose[400],\n light: colors.rose[300],\n dark: colors.rose[600],\n contrastText: \"#ffffff\",\n },\n fuchsia: {\n main: colors.fuchsia[400],\n light: colors.fuchsia[300],\n dark: colors.fuchsia[600],\n contrastText: \"#ffffff\",\n },\n neutral: {\n main: colors.neutral[400],\n light: colors.neutral[300],\n dark: colors.neutral[200],\n contrastText: colors.neutral[900],\n },\n grey: colors.neutral, // Color scale (50, 100, etc.) - MUI's built-in grey\n success: {\n light: colors.success.light,\n main: colors.success.main,\n dark: colors.success.dark,\n contrastText: \"#000000\",\n },\n warning: {\n light: colors.warning.light,\n main: colors.warning.main,\n dark: colors.warning.dark,\n contrastText: \"#000000\",\n },\n error: {\n light: colors.error.light,\n main: colors.error.main,\n dark: colors.error.dark,\n contrastText: \"#ffffff\",\n },\n info: {\n light: colors.info.light,\n main: colors.info.main,\n dark: colors.info.dark,\n contrastText: \"#ffffff\",\n },\n background: {\n default: colors.neutral[900],\n paper: colors.neutral[800],\n },\n text: {\n primary: colors.neutral[50],\n secondary: colors.neutral[400],\n disabled: colors.neutral[600],\n },\n divider: colors.neutral[700],\n },\n },\n },\n ...sharedThemeOptions,\n});\n\n/**\n * Theme type export for consumers who need to type their theme\n */\nexport type RecceTheme = typeof theme;\n"],"mappings":"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AAkB,EACpB,EACA,eAAgB,CACd,KAAM,CACJ,aAAc,EACd,UAAW,OACX,cAAe,OACf,WAAY,IACZ,UAAW,CACT,UAAW,MACb,CACF,EACA,UAAW,CACT,SAAU,YACV,QAAS,UACX,EACA,WAAY,CACV,QAAS,cACT,SAAU,MACZ,EACA,UAAW,CACT,QAAS,iBACT,SAAU,UACZ,EACA,UAAW,CACT,UAAW,CACT,UAAW,MACb,CACF,EACA,SAAU,CACR,YAAa,MACb,UAAW,CACT,YAAa,KACf,CACF,CACF,EACA,SAAU,CAER,CACE,MAAO,CAAE,KAAM,QAAS,EACxB,MAAO,CACL,SAAU,UACV,QAAS,UACT,UAAW,EACb,CACF,EAEA,GAAG,CACL,CACF,EACA,QAAS,CACP,eAAgB,CACd,KAAM,CACJ,aAAc,EACd,WAAY,GACd,EACA,UAAW,CACT,SAAU,UACV,OAAQ,EACV,EACA,WAAY,CACV,OAAQ,GACR,SAAU,UACZ,CACF,EACA,SAAU,CAER,CACE,MAAO,CAAE,KAAM,QAAS,EACxB,MAAO,CACL,SAAU,YACV,OAAQ,GACR,mBAAoB,CAClB,QAAS,OACX,CACF,CACF,EAEA,GAAG,CACL,CACF,EACA,SAAU,CACR,SAAU,CAER,GAAG,CACL,EACA,eAAgB,CACd,MAAO,CACL,WAAY,IACZ,SAAU,SACZ,CACF,CACF,EAEA,SAAU,CACR,eAAgB,CACd,KAAM,CACJ,aAAc,EACd,4CAA6C,CAC3C,gBAAiB,mCACjB,MAAO,kCACP,mBAAoB,CAClB,MAAO,iCACT,CACF,EACA,4CAA6C,CAC3C,gBAAiB,mCACjB,MAAO,kCACP,mBAAoB,CAClB,MAAO,iCACT,CACF,EACA,0CAA2C,CACzC,gBAAiB,iCACjB,MAAO,gCACP,mBAAoB,CAClB,MAAO,+BACT,CACF,EACA,yCAA0C,CACxC,gBAAiB,gCACjB,MAAO,+BACP,mBAAoB,CAClB,MAAO,8BACT,CACF,CACF,CACF,CACF,EAEA,QAAS,CACP,eAAgB,CACd,UAAW,CACT,OAAQ,CACV,CACF,CACF,EACA,OAAQ,CACN,eAAgB,CACd,KAAM,CACJ,cAAe,OACf,WAAY,IACZ,UAAW,EACb,CACF,CACF,EAEA,UAAW,CACT,eAAgB,CACd,KAAM,CACJ,WAAY,GACd,CACF,CACF,EACA,oBAAqB,CACnB,aAAc,CACZ,MAAO,SACT,EACA,SAAU,CAER,GAAG,CACL,CACF,EAEA,QAAS,CACP,aAAc,CACZ,UAAW,OACb,EACA,eAAgB,CACd,KAAM,CACJ,WAAY,IACZ,MAAO,oCACP,oBAAqB,qCACrB,UAAW,CACT,MAAO,mCACT,CACF,CACF,CACF,EAEA,WAAY,CACV,eAAgB,CACd,MAAO,CACL,aAAc,EACd,UACE,sEACJ,CACF,CACF,EAEA,WAAY,CACV,eAAgB,CACd,KAAM,CACJ,YAAa,4BACf,CACF,CACF,EAEA,eAAgB,CACd,eAAgB,CACd,UAAW,CACT,MAAO,mCACT,CACF,CACF,EACA,QAAS,CACP,eAAgB,CACd,KAAM,CACJ,aAAc,EACd,UACE,mEACJ,CACF,CACF,EACA,SAAU,CACR,eAAgB,CACd,KAAM,CACJ,gBAAiB,MACnB,CACF,CACF,EACA,WAAY,CACV,eAAgB,CACd,QAAS,CACP,SAAU,SACZ,CACF,CACF,EAEA,cAAe,CACb,eAAgB,CACd,KAAM,CACJ,aAAc,CAChB,EACA,UAAW,CACT,QAAS,CACX,EACA,WAAY,CACV,QAAS,CACX,EACA,UAAW,CACT,QAAS,EACX,CACF,CACF,EAEA,aAAc,CACZ,aAAc,CACZ,QAAS,WACT,KAAM,OACR,EACA,eAAgB,CACd,KAAM,CACJ,2BAA4B,CAC1B,aAAc,CAChB,CACF,CACF,CACF,EAEA,iBAAkB,CAChB,eAAgB,CACd,KAAM,CACJ,aAAc,EACd,2CAA4C,CAC1C,YAAa,oCACf,EACA,iDAAkD,CAChD,YAAa,oCACb,YAAa,CACf,CACF,EACA,eAAgB,CACd,YAAa,4BACf,CACF,CACF,EAEA,YAAa,CACX,aAAc,CACZ,MAAO,SACT,EACA,eAAgB,CACd,KAAM,CACJ,aAAc,CAChB,CACF,CACF,EAEA,UAAW,CACT,aAAc,CACZ,MAAO,SACT,CACF,EAEA,UAAW,CACT,eAAgB,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"}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as e,d as t,f as n,i as r,o as i,r as a,t as o}from"./keepAlive-Bowms1oa.js";import{t as s}from"./fetchClient-Bf9Q3QKq.js";import{useQuery as c}from"@tanstack/react-query";import{createContext as l,useCallback as u,useContext as d,useEffect as f,useMemo as p,useRef as m,useState as h}from"react";import{jsx as g,jsxs as _}from"react/jsx-runtime";import v from"lodash/throttle";const y={basePath:``},b=l(null);b.displayName=`RouteConfigContext`;function x({children:e,basePath:t=y.basePath}){let n=u(e=>!t||e.startsWith(t)||e.match(/^https?:\/\//)||e.startsWith(`#`)?e:`${t.endsWith(`/`)?t.slice(0,-1):t}${e.startsWith(`/`)?e:`/${e}`}`,[t]),r=p(()=>({basePath:t,resolvePath:n}),[t,n]);return g(b.Provider,{value:r,children:e})}const S={basePath:``,resolvePath:e=>e};function C(){return d(b)??S}function ee(){return d(b)}const w=l({runAction:()=>void 0,showRunId:()=>void 0,isRunResultOpen:!1,closeRunResult:()=>void 0,isHistoryOpen:!1,closeHistory:()=>void 0,showHistory:()=>void 0,setHistoryOpen:()=>void 0,clearRunResult:()=>void 0});w.displayName=`RecceActionContext`;function T({children:e,onRunAction:t,onShowRunId:n,initialRunId:r,initialHistoryOpen:i=!1}){let[a,o]=h(!!r),[s,c]=h(r),[l,d]=h(i),f=u(()=>{o(!1)},[]),m=u(()=>{c(void 0),o(!1)},[]),_=u(()=>{d(!0)},[]),v=u(()=>{d(!1)},[]),y=u((e,t)=>{c(e),o(!0),n?.(e,t)},[n]),b=u(async(e,n,r)=>{if(!t){console.warn(`RecceActionProvider: onRunAction not provided, cannot execute run`);return}let i=await t(e,n,r);typeof i==`string`&&y(i)},[t,y]),x=p(()=>({runAction:b,runId:s,showRunId:y,isRunResultOpen:a,closeRunResult:f,isHistoryOpen:l,closeHistory:v,showHistory:_,setHistoryOpen:d,clearRunResult:m}),[b,s,y,a,f,l,v,_,m]);return g(w.Provider,{value:x,children:e})}function E(){return d(w)}const D={mode:null,disableSaveToFile:!1,disableExportStateFile:!1,disableImportStateFile:!1,disableUpdateChecklist:!1,disableDatabaseQuery:!1,disableViewActionDropdown:!1,disableNodeActionDropdown:!1,disableShare:!1,checklistPermissionDenied:!1},O={singleEnv:!1,authed:!1,lifetimeExpiredAt:void 0,featureToggles:D,shareUrl:void 0,sessionId:void 0,pythonVersion:void 0},k=s({baseURL:``});function A(){let r=t()?.apiClient??k;return c({queryKey:n.instanceInfo(),queryFn:()=>e(r)})}const j=l(O);j.displayName=`RecceInstanceInfoContext`;function M({children:e}){let{data:t,isLoading:n}=A(),[r,i]=h(D),[a,o]=h(!1),[s,c]=h(!1),[l,u]=h(),[d,f]=h(),[p,m]=h(),[_,v]=h(),[y,b]=h(t);if(!n&&t&&t!==y){b(t),o(t.single_env),c(t.authed),f(t.share_url),m(t.session_id),v(t.python_version),t.lifetime_expired_at&&(u(new Date(t.lifetime_expired_at)),console.log(`lifetime expired at`,t.lifetime_expired_at));let e={...D};t.server_mode===`read-only`?(e.mode=`read only`,e.disableSaveToFile=!0,e.disableExportStateFile=!0,e.disableImportStateFile=!0,e.disableUpdateChecklist=!0,e.disableDatabaseQuery=!0,e.disableViewActionDropdown=!0,e.disableNodeActionDropdown=!0,e.disableShare=!0):t.server_mode===`preview`&&(e.mode=`metadata only`,e.disableSaveToFile=!0,e.disableExportStateFile=!0,e.disableImportStateFile=!0,e.disableUpdateChecklist=!1,e.disableDatabaseQuery=!0,e.disableViewActionDropdown=!1,e.disableNodeActionDropdown=!1,e.disableShare=!0),t.single_env&&(e.disableUpdateChecklist=!0,e.disableShare=!0),t.cloud_instance&&(e.disableShare=!0),t.user_role===`viewer`&&(e.disableUpdateChecklist||(e.checklistPermissionDenied=!0),e.disableUpdateChecklist=!0),i(e)}return g(j.Provider,{value:{featureToggles:r,singleEnv:a,authed:s,lifetimeExpiredAt:l,shareUrl:d,sessionId:p,pythonVersion:_},children:e})}function N(){return d(j)}const P=l(void 0);function F(){return d(P)??null}const I=s({baseURL:``});function te(){return typeof window<`u`&&!!window.RECCE_DEBUG_IDLE}function L(e,t){te()&&(t?console.log(e,t):console.log(e))}const R={ACTIVITY_EVENTS:[`focus`,`mousemove`,`keydown`,`scroll`],EVENT_THROTTLE_MS:150};function z(){let{data:e,isLoading:n,isError:r}=A(),i=F()?.isDisconnected??!1,o=t()?.apiClient??I,s=e?.idle_timeout,c=s!==void 0&&s>0&&!i;L(`[Idle Detection] Instance info`,{isLoading:n,isError:r,hasIdleTimeout:s!==void 0,idleTimeout:s===void 0?`not configured`:`${s}s`,isDisconnected:i,isEnabled:c});let l=u(async()=>{document.hidden||await a(o)&&L(`[Idle Detection] Keep-alive sent successfully`,{timestamp:new Date().toISOString()})},[o]),d=u(e=>{c&&!document.hidden&&(L(`[Idle Detection] Activity detected`,{event:e.type,tabActive:!document.hidden}),l())},[c,l]),m=u(()=>{c&&(document.hidden||(L(`[Idle Detection] Tab became active`,{timestamp:new Date().toISOString()}),l()))},[c,l]),h=p(()=>v(d,R.EVENT_THROTTLE_MS,{leading:!0,trailing:!0}),[d]);f(()=>{if(!c){L(`[Idle Detection] Disabled`,{idleTimeout:s,reason:s===void 0?`idle_timeout not configured on server`:s===0?`idle_timeout is 0`:`disconnected`});return}return L(`[Idle Detection] Initialized`,{enabled:!0,idleTimeout:`${s}s`,eventThrottle:`${R.EVENT_THROTTLE_MS}ms`,apiThrottle:`3s (API layer)`,monitoredEvents:R.ACTIVITY_EVENTS.join(`, `)}),R.ACTIVITY_EVENTS.forEach(e=>{window.addEventListener(e,h,{passive:!0})}),document.addEventListener(`visibilitychange`,m),()=>{L(`[Idle Detection] Cleanup - removing event listeners`),R.ACTIVITY_EVENTS.forEach(e=>{window.removeEventListener(e,h)}),document.removeEventListener(`visibilitychange`,m),h.cancel()}},[c,h,m,s])}function B({children:e}){let{data:t}=A(),n=m(Date.now()),[i,a]=h(null),[s,c]=h(!1),l=t?.idle_timeout??null,d=l!==null&&l>0,p=m(d);f(()=>{p.current=d},[d]),f(()=>{if(!d){r(null);return}r(e=>{p.current&&(n.current=e)});let e=o();return e>0&&(n.current=e),()=>{r(null)}},[d]);let v=u(()=>{c(!0)},[]),y=u(()=>{c(!1),n.current=Date.now()},[]);return f(()=>{if(!d||l===null){a(null);return}if(s)return;let e=()=>{let e=(Date.now()-n.current)/1e3;a(Math.max(0,l-e))};e();let t=setInterval(e,1e3);return()=>{clearInterval(t)}},[d,l,s]),_(P.Provider,{value:{remainingSeconds:i,idleTimeout:l,isEnabled:d,setDisconnected:v,resetConnection:y,isDisconnected:s},children:[g(V,{}),e]})}function V(){return z(),null}function H(){let e=d(P);if(!e)throw Error(`useIdleTimeout must be used within IdleTimeoutProvider`);return e}const U=l({isActionAvailable:()=>!0,isDemoSite:!1,isLoading:!0});U.displayName=`RecceLineageGraphContext`;function W({children:e,lineageGraph:t,envInfo:n,reviewMode:r,cloudMode:i,fileMode:a,fileName:o,isDemoSite:s=!1,isCodespace:c,isLoading:l,error:d,supportTasks:f,onRefetchLineageGraph:m,runsAggregated:h,onRefetchRunsAggregated:_}){let v=u(e=>f?f[e]??!0:!0,[f]),y=p(()=>({lineageGraph:t,envInfo:n,reviewMode:r,cloudMode:i,fileMode:a,fileName:o,isDemoSite:s,isCodespace:c,isLoading:l,error:d,supportTasks:f,refetchLineageGraph:m,isActionAvailable:v,runsAggregated:h,refetchRunsAggregated:_}),[t,n,r,i,a,o,s,c,l,d,f,m,v,h,_]);return g(U.Provider,{value:y,children:e})}function G(){return d(U)}function K(){let{runsAggregated:e,refetchRunsAggregated:t}=G();return[e,t]}const q=l(void 0),J=()=>{let e=d(q);if(!e)throw Error(`useLineageViewContext must be used within a LineageViewProvider`);return e},Y=()=>d(q);function X(e){return e.type===`lineageGraphNode`}function Z(e){return e.type===`lineageGraphColumnNode`}const ne=s({baseURL:``});function re(){let e=t()?.apiClient??ne;return c({queryKey:n.flag(),queryFn:()=>i(e)})}function Q(e){return e===`unknown`?`modified`:e}const ie=24;function ae(...e){let t=new Set;for(let n of e)for(let e of n)t.add(e);return t}function oe(...e){if(e.length===0)return new Set;let t=new Set(e[0]);for(let n of e)t=new Set([...t].filter(e=>n.has(e)));return t}function $(e,t,n=1e3){let r=new Set,i={},a=(e,n)=>{if(n<0||i[e]!=null&&i[e]>=n)return;i[e]=n;let o=t(e);for(let e of o)a(e,n-1);r.add(e)};for(let t of e)a(t,n);return r}function se(e){let t={},n={},r=[];for(let[n,i]of Object.entries(e.nodes))t[n]={id:n,data:{id:n,name:i.name,resourceType:i.resource_type,packageName:i.package_name,schema:i.schema,materialized:i.materialized,changeStatus:Q(i.change_status),change:i.change??void 0,parents:{},children:{}},type:`lineageGraphNode`},i.change_status&&r.push(n);for(let r of e.edges){let e=`${r.source}_${r.target}`,i=t[r.source],a=t[r.target];!i||!a||(n[e]={id:e,source:r.source,target:r.target,data:{changeStatus:r.change_status??void 0}},a.data.parents[r.source]=n[e],i.data.children[r.target]=n[e])}let i=e.metadata?.base,a=e.metadata?.current;return{nodes:t,edges:n,modifiedSet:r,manifestMetadata:{base:i?.manifest_metadata??void 0,current:a?.manifest_metadata??void 0},catalogMetadata:{base:i?.catalog_metadata??void 0,current:a?.catalog_metadata??void 0}}}function ce(e,t,n=1e3){return $(t,t=>e.nodes[t]===void 0?[]:Object.keys(e.nodes[t].data.parents),n)}function le(e,t,n=1e3){return $(t,t=>e.nodes[t]===void 0?[]:Object.keys(e.nodes[t].data.children),n)}function ue(e,t){let n=[],r=[];function i(e){return e===`removed`?0:e===`added`?2:1}function a(e,t){return i(e.data?.changeStatus)-i(t.data?.changeStatus)}let o=t===void 0?void 0:new Set(t),s=Object.values(e.nodes).sort(a);for(let e of s)o&&!o.has(e.id)||n.push({id:e.id,position:{x:0,y:0},width:300,height:60,className:`no-track-pii-safe`,data:{...e.data},type:`lineageGraphNode`,targetPosition:`left`,sourcePosition:`right`,style:{width:300,height:60}});let c=Object.values(e.edges).sort(a);for(let e of c)o&&(!o.has(e.source)||!o.has(e.target))||r.push({id:e.id,type:`lineageGraphEdge`,source:e.source,target:e.target,data:{...e.data}});return[n,r]}function de(e,t,n,r=`LR`){let i=new e.graphlib.Graph;i.setDefaultEdgeLabel(()=>({})),i.setGraph({rankdir:r,ranksep:50,nodesep:30});for(let e of t){if(!X(e))continue;let t=300,n=60;e.style?.height&&e.style.width&&(t=parseInt(String(e.style.width),10),n=parseInt(String(e.style.height),10)),i.setNode(e.id,{width:t,height:n})}for(let e of n)i.setEdge(e.source,e.target);e.layout(i);for(let e of t){if(!X(e))continue;let t=e.style?.width??300,n=e.style?.height??60,r=i.node(e.id);e.position={x:r.x-Number(t)/2,y:r.y-Number(n)/2}}}export{E as A,F as C,D,A as E,C as M,ee as N,O,z as S,N as T,W as _,de as a,B as b,ue as c,re as d,Z as f,J as g,Y as h,oe as i,x as j,T as k,ae as l,q as m,se as n,le as o,X as p,$ as r,ce as s,ie as t,Q as u,G as v,M as w,H as x,K as y};
3
- //# sourceMappingURL=utils-BzZEjJAS.js.map
@@ -1,6 +0,0 @@
1
- "use client";
2
- import{n as e}from"./colors-4aGxuAVw.js";import{createContext as t,memo as n,useCallback as r,useContext as i,useEffect as a,useId as o,useState as s}from"react";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";import d from"@mui/material/Box";import f from"@mui/material/Tooltip";import p from"@mui/material/IconButton";import m from"@mui/material/Typography";import h from"@mui/material/Alert";import g from"@mui/material/CircularProgress";import _ from"@mui/material/Snackbar";import v from"@mui/material/Stack";import{PiCopy as y,PiDotsThreeVertical as b}from"react-icons/pi";import ee from"@mui/material/Menu";import te from"@mui/material/MenuItem";import{format as ne,formatDistance as x,parseISO as S}from"date-fns";import{VscClose as re,VscKebabVertical as ie,VscKey as ae,VscPin as oe,VscPinned as se}from"react-icons/vsc";import C from"file-saver";import ce from"write-excel-file/universal";import w from"lodash";import{useCopyToClipboard as le}from"usehooks-ts";import ue from"react-split";const de={INTEGER:`integer`,INT:`integer`,BIGINT:`integer`,SMALLINT:`integer`,TINYINT:`integer`,INT64:`integer`,INT32:`integer`,INT16:`integer`,INT8:`integer`,INT4:`integer`,INT2:`integer`,MEDIUMINT:`integer`,SERIAL:`integer`,BIGSERIAL:`integer`,SMALLSERIAL:`integer`,DOUBLE:`number`,FLOAT:`number`,REAL:`number`,NUMERIC:`number`,DECIMAL:`number`,NUMBER:`number`,FLOAT64:`number`,FLOAT32:`number`,"DOUBLE PRECISION":`number`,VARCHAR:`text`,TEXT:`text`,STRING:`text`,CHAR:`text`,"CHARACTER VARYING":`text`,CHARACTER:`text`,NCHAR:`text`,NVARCHAR:`text`,VARCHAR2:`text`,NVARCHAR2:`text`,CLOB:`text`,NCLOB:`text`,TINYTEXT:`text`,MEDIUMTEXT:`text`,LONGTEXT:`text`,BOOLEAN:`boolean`,BOOL:`boolean`,DATE:`date`,TIMESTAMP:`datetime`,DATETIME:`datetime`,TIMESTAMP_NTZ:`datetime`,TIMESTAMP_LTZ:`datetime`,TIMESTAMP_TZ:`datetime`,TIMESTAMPTZ:`datetime`,"TIMESTAMP WITH TIME ZONE":`datetime`,"TIMESTAMP WITHOUT TIME ZONE":`datetime`,"TIMESTAMP WITH LOCAL TIME ZONE":`datetime`,DATETIME2:`datetime`,SMALLDATETIME:`datetime`,DATETIMEOFFSET:`datetime`,TIME:`time`,TIMETZ:`time`,"TIME WITH TIME ZONE":`time`,"TIME WITHOUT TIME ZONE":`time`,BINARY:`binary`,VARBINARY:`binary`,BYTES:`binary`,BLOB:`binary`,BYTEA:`binary`,TINYBLOB:`binary`,MEDIUMBLOB:`binary`,LONGBLOB:`binary`,JSON:`json`,JSONB:`json`,VARIANT:`json`,OBJECT:`json`,STRUCT:`json`,MAP:`json`,ARRAY:`array`,LIST:`array`,GEOGRAPHY:`geography`,GEOMETRY:`geography`,POINT:`geography`,LINESTRING:`geography`,POLYGON:`geography`,MULTIPOINT:`geography`,MULTILINESTRING:`geography`,MULTIPOLYGON:`geography`,GEOMETRYCOLLECTION:`geography`,SDO_GEOMETRY:`geography`};function fe(e){let t=e.trim().toUpperCase();if(!t)return`unknown`;if(/^TINYINT\s*\(\s*1\s*\)$/.test(t))return`boolean`;let n=t.indexOf(`(`);return de[n===-1?t:t.slice(0,n).trimEnd()]??`unknown`}const T=.6,pe=18/30;function E({size:e=`1em`,style:t,className:n,children:r}){return u(`svg`,{viewBox:`0 0 30 18`,width:e,height:typeof e==`number`?e*pe:`${pe}em`,style:t,className:n,"aria-hidden":`true`,children:[l(`rect`,{x:T,y:T,width:30-T*2,height:18-T*2,rx:3,fill:`none`,stroke:`currentColor`,strokeWidth:1.2}),r]})}function D({text:e,size:t,style:n,className:r}){return l(E,{size:t,style:n,className:r,children:l(`text`,{x:30/2,y:18/2,textAnchor:`middle`,dominantBaseline:`central`,fontSize:10.5,fontFamily:`monospace`,fontWeight:500,fill:`currentColor`,children:e})})}function me(e){return l(D,{text:`123`,...e})}function he(e){return l(D,{text:`1.2`,...e})}function ge(e){return l(D,{text:`abc`,...e})}function _e(e){return l(D,{text:`T/F`,...e})}function ve({size:e,style:t,className:n}){let r=o(),i=T,a=T;return u(E,{size:e,style:t,className:n,children:[u(`mask`,{id:r,children:[l(`rect`,{x:i,y:a,width:15-i,height:16.8,fill:`white`}),l(`text`,{x:15/2,y:18/2,textAnchor:`middle`,dominantBaseline:`central`,fontSize:10,fontFamily:`monospace`,fontWeight:700,fill:`black`,children:`0`})]}),l(`path`,{d:`M15 ${a} H3.6 Q${i} ${a} ${i} 3.6 V14.400000000000002 Q${i} 17.400000000000002 3.6 17.400000000000002 H15 Z`,fill:`currentColor`,mask:`url(#${r})`}),l(`text`,{x:22.5,y:18/2,textAnchor:`middle`,dominantBaseline:`central`,fontSize:10,fontFamily:`monospace`,fontWeight:700,fill:`currentColor`,children:`1`})]})}function ye(e){return l(D,{text:`{ }`,...e})}function be({size:e,style:t,className:n}){return u(E,{size:e,style:t,className:n,children:[u(`g`,{stroke:`currentColor`,fill:`none`,strokeWidth:1.2,strokeLinecap:`round`,children:[l(`line`,{x1:6,y1:5,x2:4,y2:5}),l(`line`,{x1:4,y1:5,x2:4,y2:13}),l(`line`,{x1:4,y1:13,x2:6,y2:13}),l(`line`,{x1:24,y1:5,x2:26,y2:5}),l(`line`,{x1:26,y1:5,x2:26,y2:13}),l(`line`,{x1:26,y1:13,x2:24,y2:13})]}),l(`text`,{x:30/2,y:18/2,textAnchor:`middle`,dominantBaseline:`central`,fontSize:9,fontFamily:`monospace`,fontWeight:500,fill:`currentColor`,children:`1,2`})]})}function xe(e){return l(D,{text:`···`,...e})}function Se({size:e,style:t,className:n}){return l(E,{size:e,style:t,className:n,children:u(`g`,{stroke:`currentColor`,fill:`none`,strokeWidth:1,strokeLinecap:`round`,strokeLinejoin:`round`,transform:`translate(9, 2.5)`,children:[l(`rect`,{x:0,y:2,width:11,height:9.5,rx:1.2}),l(`line`,{x1:3,y1:.5,x2:3,y2:3.5}),l(`line`,{x1:8,y1:.5,x2:8,y2:3.5}),l(`line`,{x1:0,y1:5.5,x2:11,y2:5.5})]})})}function Ce({size:e,style:t,className:n}){return l(E,{size:e,style:t,className:n,children:u(`g`,{stroke:`currentColor`,fill:`none`,strokeWidth:1,strokeLinecap:`round`,strokeLinejoin:`round`,transform:`translate(4, 2.5)`,children:[l(`rect`,{x:0,y:2,width:9.5,height:8.5,rx:1.2}),l(`line`,{x1:2.5,y1:.5,x2:2.5,y2:3.5}),l(`line`,{x1:7,y1:.5,x2:7,y2:3.5}),l(`line`,{x1:0,y1:5,x2:9.5,y2:5}),l(`circle`,{cx:17,cy:8.5,r:3.2}),l(`line`,{x1:17,y1:6.8,x2:17,y2:8.5}),l(`line`,{x1:17,y1:8.5,x2:18.3,y2:9.5})]})})}function we({size:e,style:t,className:n}){return l(E,{size:e,style:t,className:n,children:u(`g`,{stroke:`currentColor`,fill:`none`,strokeWidth:1,strokeLinecap:`round`,strokeLinejoin:`round`,transform:`translate(10, 3.5)`,children:[l(`circle`,{cx:5,cy:5.5,r:5}),l(`line`,{x1:5,y1:3,x2:5,y2:5.5}),l(`line`,{x1:5,y1:5.5,x2:7,y2:6.8})]})})}function Te({size:e,style:t,className:n}){return l(E,{size:e,style:t,className:n,children:u(`g`,{stroke:`currentColor`,fill:`none`,strokeWidth:1,strokeLinecap:`round`,strokeLinejoin:`round`,children:[l(`path`,{d:`M15 14.5 C15 14.5 10.5 11 10.5 8 A4.5 4.5 0 0 1 19.5 8 C19.5 11 15 14.5 15 14.5 Z`,strokeWidth:1.2}),l(`circle`,{cx:15,cy:8,r:1.5,fill:`currentColor`,stroke:`none`})]})})}function Ee(e){let{name:t,status:n,baseType:r,currentType:i,cllAvailable:a,impacted:o}=e,s;switch(n){case`added`:s=i?`${t} added ${i}`:`${t} added`;break;case`removed`:return`deleted ${t}`;case`type_changed`:s=`${t}, was ${r} now ${i}`;break;case`definition_changed`:s=i?`${t} ${i} changed definition`:`${t} changed definition`;break;case`definition_unknown`:s=i?`${t} ${i} change status unknown`:`${t} change status unknown`;break;case`unchanged`:s=i?`${t} ${i}`:t;break;default:s=r&&i&&r!==i?`${t}, was ${r} now ${i}`:i?`${t} ${i}`:t;break}return o&&(s+=` · impacted`),a&&(s+=` · Click for column lineage`),s}const De={integer:me,number:he,text:ge,boolean:_e,date:Se,datetime:Ce,time:we,binary:ve,json:ye,array:be,geography:Te,unknown:xe};function Oe({type:e,size:t,style:n,className:r,disableTooltip:i}){let a=De[fe(e)],o=l(`span`,{"data-testid":`data-type-icon`,style:{display:`inline-flex`,alignItems:`center`,lineHeight:0},children:l(a,{size:t,style:n,className:r})});return i?o:l(f,{title:e,placement:`top`,arrow:!0,children:o})}const O=t(null);O.displayName=`RecceThemeContext`;function ke(){let e=i(O);if(!e)throw Error(`useRecceTheme must be used within RecceProvider`);return e}function Ae(){return i(O)}function je({children:e,defaultMode:t=`system`}){let[n,r]=s(t),[i,o]=s(()=>typeof window>`u`?`light`:t===`system`?window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:t);return a(()=>{if(n===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`);o(e.matches?`dark`:`light`);let t=e=>{o(e.matches?`dark`:`light`)};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}else o(n)},[n]),a(()=>{typeof window>`u`||document.documentElement.classList.toggle(`dark`,i===`dark`)},[i]),l(O.Provider,{value:{mode:n,resolvedMode:i,setMode:r},children:e})}const Me=t(null);let k=0;function Ne({children:e}){let[t,n]=s([]),i=r(e=>{let t=e.id||`toast-${++k}`,r={id:t,open:!0,duration:e.type===`loading`?null:e.duration??5e3,closable:e.closable??!0,...e};return n(e=>[...e.filter(e=>e.id!==t),r]),t},[]),a=r(e=>{n(t=>t.map(t=>t.id===e?{...t,open:!1}:t)),setTimeout(()=>{n(t=>t.filter(t=>t.id!==e))},300)},[]),o={toast:i,success:e=>i({...e,type:`success`}),error:e=>i({...e,type:`error`}),warning:e=>i({...e,type:`warning`}),info:e=>i({...e,type:`info`}),loading:e=>i({...e,type:`loading`}),dismiss:a,update:r((e,t)=>{n(n=>n.map(n=>n.id===e?{...n,...t}:n))},[])};return u(Me.Provider,{value:o,children:[e,t.map(e=>l(_,{open:e.open,autoHideDuration:e.duration,onClose:()=>e.closable&&a(e.id),anchorOrigin:{vertical:`bottom`,horizontal:`right`},children:l(h,{severity:e.type===`loading`?`info`:e.type||`info`,onClose:e.closable?()=>a(e.id):void 0,icon:e.type===`loading`?l(g,{size:20,color:`inherit`}):void 0,sx:{width:`100%`,minWidth:300},children:u(v,{spacing:.5,children:[e.title&&l(m,{variant:`subtitle2`,sx:{fontWeight:`bold`},children:e.title}),e.description&&l(m,{variant:`body2`,component:`div`,children:e.description})]})})},e.id))]})}function Pe(){let e=i(Me);if(!e)throw Error(`useToaster must be used within ToasterProvider`);return e}const A=new Set,j={create:e=>{let t=e.id||`toast-${++k}`;return A.forEach(n=>n({type:`create`,options:{...e,id:t}})),t},success:e=>j.create({...e,type:`success`}),error:e=>j.create({...e,type:`error`}),warning:e=>j.create({...e,type:`warning`}),info:e=>j.create({...e,type:`info`}),loading:e=>j.create({...e,type:`loading`}),dismiss:e=>{A.forEach(t=>t({type:`dismiss`,id:e}))},remove:e=>{A.forEach(t=>t({type:`dismiss`,id:e}))},update:(e,t)=>{A.forEach(n=>n({type:`update`,id:e,options:t}))},subscribe:e=>(A.add(e),()=>A.delete(e))};function Fe(){let[e,t]=s([]);s(()=>j.subscribe(e=>{if(e.type===`create`&&e.options){let n={id:e.options.id||`toast-${++k}`,open:!0,duration:e.options.type===`loading`?void 0:e.options.duration??5e3,closable:e.options.closable??!0,...e.options};t(e=>[...e.filter(e=>e.id!==n.id),n])}else if(e.type===`dismiss`&&e.id){let n=e.id;t(e=>e.map(e=>e.id===n?{...e,open:!1}:e)),setTimeout(()=>{t(e=>e.filter(e=>e.id!==n))},300)}else e.type===`update`&&e.id&&e.options&&t(t=>t.map(t=>t.id===e.id?{...t,...e.options}:t))}));let n=e=>{t(t=>t.map(t=>t.id===e?{...t,open:!1}:t)),setTimeout(()=>{t(t=>t.filter(t=>t.id!==e))},300)};return l(c,{children:e.map(e=>l(_,{open:e.open,autoHideDuration:e.duration,onClose:()=>e.closable&&n(e.id),anchorOrigin:{vertical:`bottom`,horizontal:`right`},children:l(h,{severity:e.type===`loading`?`info`:e.type||`info`,onClose:e.closable?()=>n(e.id):void 0,icon:e.type===`loading`?l(g,{size:20,color:`inherit`}):void 0,sx:{width:`100%`,minWidth:300},children:u(v,{spacing:.5,children:[e.title&&l(m,{variant:`subtitle2`,sx:{fontWeight:`bold`},children:e.title}),e.description&&l(m,{variant:`body2`,component:`div`,children:e.description})]})})},e.id))})}function M(){let e=Ae(),[t,n]=s(!1),[r,i]=s(!1);return a(()=>{if(n(!0),!e){let e=()=>{i(document.documentElement.classList.contains(`dark`))};e();let t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),()=>t.disconnect()}},[e]),t?e?e.resolvedMode===`dark`:r:!1}function N(e,t=`en-US`,n){return typeof e==`number`?new Intl.NumberFormat(t,n).format(e):e}function Ie(e){let t=e>0&&e<=.001,n=e<1&&e>=.999,r=(t=e)=>N(t,`en-US`,{style:`percent`,minimumFractionDigits:1});return t?`<${r(.001)}`:n?`>${r(.999)}`:r()}function Le(e){if(typeof e!=`number`)return e;{let t=Math.abs(e),n=10**-2,r=10**3,i=10**6,a=10**9,o=10**12,s=10**15,c=t>=n,l=t>=1,u=t>=r,d=t>=i,f=t>=a,p=t>=o,m=t>=s;if(m||p)return new Intl.NumberFormat(`en-US`,{style:`unit`,unit:`liter`,unitDisplay:`narrow`,maximumFractionDigits:m?0:2}).format(e/0xe8d4a51000).replace(`L`,`T`);if(f||d||u){let t={base:f?a:d?i:r,unit:f?`B`:d?`M`:`K`};return new Intl.NumberFormat(`en-US`,{style:`unit`,unit:`liter`,unitDisplay:`narrow`,maximumFractionDigits:1}).format(e/t.base).replace(`L`,t.unit)}else if(l)return new Intl.NumberFormat(`en-US`,{maximumFractionDigits:2}).format(e);else return new Intl.NumberFormat(`en-US`,{maximumFractionDigits:c?3:2,notation:c||t===0?`standard`:`scientific`}).format(e)}}function Re(e,t){return`${e}_${t}`}function ze(e,t,n){return n?.has(Re(e,t))??!1}function Be(e,t){C(new Blob([e],{type:`text/csv;charset=utf-8`}),t)}function Ve(e,t){C(new Blob([e],{type:`text/tab-separated-values;charset=utf-8`}),t)}function He(e,t){C(e,t)}async function Ue(e){if(typeof navigator>`u`||!navigator.clipboard?.writeText)throw Error(`Clipboard API not available. Ensure you're using HTTPS or localhost.`);await navigator.clipboard.writeText(e)}function We(e){return e==null?null:typeof e==`object`?{value:JSON.stringify(e),type:String}:typeof e==`number`?{value:e,type:Number}:typeof e==`boolean`?{value:e,type:Boolean}:{value:String(e),type:String}}function Ge(e,t){return ce([e.map(e=>({value:e,type:String})),...t.map(e=>e.map(We))]).toBlob()}function Ke(e,t){return(e==null?``:String(e))===(t==null?``:String(t))?e:`${e==null?``:`(${e})`} ${t==null?``:`(${t})`}`.trim()}function P(e){return!e?.columns||!e.data?null:{columns:e.columns.map(e=>e.name),rows:e.data.map(e=>[...e])}}function qe(e){return P(e)}function Je(e){return P(e)}function Ye(e,t){let n=e,r=t?.displayMode??`inline`,i=t?.primaryKeys??[];return n?.diff?Xe(n.diff,r,i):Ze(n,r)}function Xe(e,t,n){if(!e?.columns||!e?.data)return null;let r=e.columns.findIndex(e=>e.key.toLowerCase()===`in_a`),i=e.columns.findIndex(e=>e.key.toLowerCase()===`in_b`),a=e.columns.filter(e=>e.key.toLowerCase()!==`in_a`&&e.key.toLowerCase()!==`in_b`),o=a.map(e=>e.name),s=a.map(t=>e.columns.findIndex(e=>e.key===t.key)),c=n.map(t=>e.columns.findIndex(e=>e.key===t)).filter(e=>e>=0),l=e=>s.map(t=>e[t]),u=e=>c.length===0?``:c.map(t=>String(e[t]??``)).join(`|||`),d=new Map,f=[];if(e.data.forEach((e,t)=>{let n=r>=0?e[r]:!0,a=i>=0?e[i]:!0,o=u(e);o===``&&(o=String(t)),d.has(o)||(d.set(o,{base:null,current:null}),f.push(o));let s=d.get(o);if(!s)return;let c=l(e);n&&(s.base=c),a&&(s.current=c)}),t===`side_by_side`){let e=[];o.forEach(t=>{e.push(`base__${t}`,`current__${t}`)});let t=[];for(let e of f){let n=d.get(e);if(!n)continue;let r=n.base,i=n.current,a=[];o.forEach((e,t)=>{a.push(r?r[t]:null),a.push(i?i[t]:null)}),t.push(a)}return{columns:e,rows:t}}let p=[...o],m=[];for(let e of f){let t=d.get(e);if(!t)continue;let n=t.base,r=t.current,i=[];o.forEach((e,t)=>{let a=n?n[t]:null,o=r?r[t]:null;i.push(Ke(a,o))}),m.push(i)}return{columns:p,rows:m}}function Ze(e,t){let n=e?.current||e?.base;if(!n)return null;if(!e?.base||!e?.current)return P(n);let r=e.current.columns.map(e=>e.name);if(t===`side_by_side`){let t=[];r.forEach(e=>{t.push(`base__${e}`,`current__${e}`)});let n=[],i=Math.max(e.base.data.length,e.current.data.length);for(let t=0;t<i;t++){let i=[],a=t<e.base.data.length?e.base.data[t]:null,o=t<e.current.data.length?e.current.data[t]:null;r.forEach((e,t)=>{i.push(a?a[t]:null),i.push(o?o[t]:null)}),n.push(i)}return{columns:t,rows:n}}let i=[...r],a=[],o=Math.max(e.base.data.length,e.current.data.length);for(let t=0;t<o;t++){let n=t<e.base.data.length?e.base.data[t]:null,i=t<e.current.data.length?e.current.data[t]:null,o=[];r.forEach((e,t)=>{let r=n?n[t]:null,a=i?i[t]:null;o.push(Ke(r,a))}),a.push(o)}return{columns:i,rows:a}}function Qe(e){let t=e,n=t?.current||t?.base;if(!n)return null;if(t?.base&&t?.current){let e=[`_source`,...t.current.columns.map(e=>e.name)],n=[];return t.base.data.forEach(e=>{n.push([`base`,...e])}),t.current.data.forEach(e=>{n.push([`current`,...e])}),{columns:e,rows:n}}return P(n)}function $e(e){let t=e;if(!t||typeof t!=`object`)return null;let n=[`node`,`base_count`,`current_count`,`diff`,`diff_percent`],r=[];for(let[e,n]of Object.entries(t))if(n&&typeof n==`object`){let t=n.base,i=n.curr,a=t!=null&&i!=null?i-t:null,o=t&&a!==null?(a/t*100).toFixed(2)+`%`:null;r.push([e,t,i,a,o])}return{columns:n,rows:r}}function et(e){let t=e;return t?.data?P(t.data):null}function tt(e){return P(e)}function nt(e){let t=e,n=!!t?.base?.values,r=!!t?.current?.values;if(!n&&!r)return null;let i=[`_source`,`value`,`count`],a=[];return t?.base?.values&&t.base.values.forEach((e,n)=>{a.push([`base`,e,t.base.counts[n]])}),t?.current?.values&&t.current.values.forEach((e,n)=>{a.push([`current`,e,t.current.counts[n]])}),{columns:i,rows:a}}const rt={query:qe,query_base:Je,query_diff:Ye,profile:Qe,profile_diff:Qe,row_count:$e,row_count_diff:$e,value_diff:et,value_diff_detail:tt,top_k_diff:nt};function it(e,t,n){let r=rt[e];if(!r)return null;try{return r(t,n)}catch(t){return console.error(`Failed to extract CSV data for run type "${e}":`,t),null}}function at(e){return e in rt}function ot(e){if(e==null)return``;let t=typeof e==`object`?JSON.stringify(e):String(e);return t.includes(`,`)||t.includes(`"`)||t.includes(`
3
- `)||t.includes(`\r`)?`"${t.replace(/"/g,`""`)}"`:t}function st(e,t){return``+[e.map(ot).join(`,`),...t.map(e=>e.map(ot).join(`,`))].join(`\r
4
- `)}function F(e){return e==null?``:(typeof e==`object`?JSON.stringify(e):String(e)).replace(/[\t\r\n]+/g,` `)}function ct(e,t){return[e.map(F).join(` `),...t.map(e=>e.map(F).join(` `))].join(`\r
5
- `)}function lt(e){let t=e===1?`row`:`rows`;if(e<1e3)return`${e} ${t}`;if(e<1e6){let n=e/1e3;return n>=999.95?`1M ${t}`:`${n%1==0?String(n):n.toFixed(1)}k ${t}`}let n=e/1e6;return`${n%1==0?String(n):n.toFixed(1)}M ${t}`}function I(){let e=new Date;return`${e.getFullYear()}${String(e.getMonth()+1).padStart(2,`0`)}${String(e.getDate()).padStart(2,`0`)}-${String(e.getHours()).padStart(2,`0`)}${String(e.getMinutes()).padStart(2,`0`)}${String(e.getSeconds()).padStart(2,`0`)}`}function ut(e,t){let n=I(),r=e.replace(/_/g,`-`),i;return t?.node_names&&Array.isArray(t.node_names)&&t.node_names.length===1?i=String(t.node_names[0]):t?.model&&typeof t.model==`string`&&(i=t.model),i?(i=i.replace(/[^a-zA-Z0-9_.-]/g,`-`).toLowerCase(),`${r}-${i}-${n}.csv`):`${r}-result-${n}.csv`}function L({value:t,colorPalette:n,grayOut:r,noCopy:i,fontSize:a,onCopy:o}){let[c,f]=s(!1),p=M();return u(d,{sx:{display:`flex`,p:`2px 5px`,minWidth:`30px`,maxWidth:`200px`,overflow:`hidden`,textOverflow:`ellipsis`,color:p?e[n][300]:e[n][800],bgcolor:p?e[n][900]:e[n][100],alignItems:`center`,gap:`2px`,borderRadius:`8px`,fontSize:a,flexShrink:i?0:`inherit`},onMouseEnter:()=>{f(!0)},onMouseLeave:()=>{f(!1)},children:[l(d,{sx:{overflow:`hidden`,textOverflow:`ellipsis`,color:r?`text.disabled`:`inherit`},children:t}),l(dt,{value:t,noCopy:i,grayOut:r,isHovered:c,onCopy:o})]})}function dt({value:e,noCopy:t,grayOut:n,isHovered:r,onCopy:i}){return t||n||!r?null:l(f,{title:`Copy Value`,children:l(p,{"aria-label":`Copy`,size:`small`,onClick:()=>{i?i(e):typeof navigator<`u`&&navigator.clipboard&&navigator.clipboard.writeText(e)},sx:{minWidth:`0.625rem`,height:`0.625rem`,display:`flex`,alignItems:`center`,justifyContent:`center`,p:0,color:`inherit`},children:l(y,{size:`0.625rem`})})})}function R(e,t){return[{value:`Show raw value`,onClick:()=>{t({[e]:`raw`})}},{value:`Show 2 decimal points`,onClick:()=>{t({[e]:2})}},{value:`Show as percentage`,onClick:()=>{t({[e]:`percent`})}},{value:`Show with net change`,onClick:()=>{t({[e]:`delta`})}}]}function z({name:e,columnStatus:t,columnType:n,primaryKeys:r=[],onPrimaryKeyChange:i,pinnedColumns:a=[],onPinnedColumnsChange:o,onColumnsRenderModeChanged:f}){let[m,h]=s(null),g=!!m,_=e=>{h(e.currentTarget)},v=()=>{h(null)};if(e===`index`)return l(c,{});let y=r.includes(e),b=a.includes(e),ne=t!==`added`&&t!==`removed`,x=[];return f&&(x=R(e,f)),u(d,{sx:{display:`flex`,alignItems:`center`,gap:`10px`,width:`100%`},className:`grid-header`,children:[y&&l(ae,{}),l(d,{sx:{flex:1,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e}),ne&&i&&l(d,{component:y?re:ae,className:y?`close-icon`:`key-icon`,sx:{display:y?`block`:`none`,cursor:`pointer`},onClick:y?()=>{i&&i(r.filter(t=>t!==e))}:()=>{i&&i([...r.filter(e=>e!==`index`),e])}}),!y&&o&&l(d,{component:b?se:oe,className:b?`unpin-icon`:`pin-icon`,sx:{display:b?`block`:`none`,cursor:`pointer`},onClick:b?()=>{o&&o(a.filter(t=>t!==e))}:()=>{o&&o([...a,e])}}),!y&&n===`number`&&x.length>0&&u(c,{children:[l(p,{"aria-label":`Options`,size:`small`,className:`!size-4 !min-w-4`,onClick:_,children:l(ie,{})}),l(ee,{anchorEl:m,open:g,onClose:v,children:x.map(e=>l(te,{onClick:()=>{e.onClick(),v()},children:e.value},e.value))})]})]})}function ft({name:e,pinnedColumns:t=[],onPinnedColumnsChange:n=()=>{},columnType:r,onColumnsRenderModeChanged:i}){let[a,o]=s(null),f=!!a,m=e=>{o(e.currentTarget)},h=()=>{o(null)},g=[];i&&(g=R(e,i));let _=t.includes(e);return u(d,{sx:{display:`flex`,alignItems:`center`,width:`100%`},className:`grid-header`,children:[l(d,{sx:{flex:1},children:e}),l(d,{component:_?se:oe,className:_?`unpin-icon`:`pin-icon`,sx:{display:_?`block`:`none`,cursor:`pointer`},onClick:_?()=>{n(t.filter(t=>t!==e))}:()=>{n([...t,e])}}),r===`number`&&u(c,{children:[l(p,{"aria-label":`Options`,size:`small`,className:`size-6!`,sx:{p:0},onClick:m,children:l(b,{})}),l(ee,{anchorEl:a,open:f,onClose:h,children:g.map(e=>l(te,{onClick:()=>{e.onClick(),h()},children:e.value},e.value))})]})]})}function B(e){return e.data.map((t,n)=>({...e.columns.reduce((e,n,r)=>(e[n.key]=t[r],e),{}),__status:void 0,_index:n+1}))}function pt(e){let t=Number(e);return!Number.isNaN(t)&&Number.isFinite(t)?t:mt(e)}function mt(e){let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t&=t}return Math.abs(t)}function ht(e,t){let n=t.toLowerCase();if(n in e)return e[n];let r=Object.keys(e).find(e=>e.toLowerCase()===n);return r?e[r]:void 0}function V(e,t){let n=[...e],r=[...t],i=[];for(;n.length>0&&r.length>0;)if(i.includes(n[0]))n.shift();else if(i.includes(r[0]))r.shift();else if(n[0]===r[0])i.push(n[0]),n.shift(),r.shift();else if(r.includes(n[0])){let e=r.indexOf(n[0]);for(let t=0;t<e;t++)i.includes(r[t])||i.push(r[t]);i.push(n[0]),n.shift(),r.splice(0,e+1)}else i.push(n[0]),n.shift();return n.forEach(e=>{i.includes(e)||i.push(e)}),r.forEach(e=>{i.includes(e)||i.push(e)}),i}function H(e,t){let n=V(e,t),r={};for(let i of n)e.includes(i)?t.includes(i)?r[i]=void 0:r[i]=`removed`:r[i]=`added`;let i={};e.forEach((e,t)=>{i[e]=t});let a=-1;for(let e of n){let t=i[e];t!=null&&(t>a?a=t:r[e]=`reordered`)}return r}function gt(e){let t={};return e.columns.forEach((e,n)=>{t[e.name]={key:e.key,index:n,colType:e.type}}),t}function _t(e){let t={};if(e.columns.forEach((e,n)=>{t[e.key]={key:e.key,index:n,colType:e.type}}),!t.in_a)throw Error(`Joined DataFrame missing required 'in_a' column`);if(!t.in_b)throw Error(`Joined DataFrame missing required 'in_b' column`);return t}function vt(e,t){let n={},r=H(e.columns.map(e=>e.key),t.columns.map(e=>e.key));return Object.entries(r).forEach(([r,i])=>{let a=e.columns.find(e=>e.key===r),o=t.columns.find(e=>e.key===r);n[r]={status:i,baseColumnKey:a?.key??`unknown`,currentColumnKey:o?.key??`unknown`,colType:a?.type??o?.type??`unknown`,key:a?.key??o?.key??`unknown`}}),n}function U(e,t){let n=[];for(let r of t){let t=e.find(e=>e.key===r);if(!t)throw Error(`Column ${r} not found`);n.push(t.key)}return n}function W(e,t,n){if(t.length===0)return String(n._index);let r=[];for(let i of t){let t=e.find(e=>e.key===i);if(!t)throw Error(`Primary Column ${i} not found`);let a=n[i];r.push(`${t.name}=${a}`)}return r.join(`|`)}function G(e,t=2){let n=N(Object.is(e,-0)?0:e,`en-US`,{maximumFractionDigits:t,roundingMode:`halfEven`})??String(e);return n===`-0`?`0`:n}function yt(e,t){return Number.isNaN(e)?`NaN`:Number.isFinite(e)?t===`raw`?String(e):typeof t==`number`?G(e,t):t===`percent`?N(e,`en-US`,{style:`percent`,maximumFractionDigits:2})??String(e):G(e,2):e>0?`∞`:`-∞`}function K(e,t,n,r){let i=ht(e,t);if(i==null)return[`-`,!0];let a,o=!1;return typeof i==`boolean`?a=i.toString():i===``?(a=`(empty)`,o=!0):a=typeof i==`number`?yt(i,r):n===`number`?yt(parseFloat(i),r):String(i),[a,o]}function bt(e){if(e===`added`)return`diff-header-added`;if(e===`removed`)return`diff-header-removed`}const xt=e=>{let t=e.colDef,n=t?.context?.columnType,r=t?.context?.columnRenderMode,i=t?.field??``;if(!e.data)return null;let[a,o]=K(e.data,i,n,r);return l(m,{component:`span`,style:{color:o?`gray`:`inherit`},children:a})};function St(){function e(e){j.create({description:e,type:`info`,duration:5e3,closable:!0})}function t(e,t){j.create({title:e,description:String(t),type:`error`,duration:5e3,closable:!0})}return{successToast:e,failToast:t}}function Ct(e){let[,t]=le(),{successToast:n}=St(),r=e=>{t(e),n(`${e} copied`)};return l(L,{...e,onCopy:r})}function wt(e={}){let t=e.DiffTextComponent??L;return e=>{let n=e.colDef,r=n?.context?.columnType,i=n?.context?.columnRenderMode,a=n?.field??``;if(!e.data)return null;let o=e.data,s=`base__${a}`.toLowerCase(),c=`current__${a}`.toLowerCase();if(!Object.hasOwn(o,s)&&!Object.hasOwn(o,c))return`-`;let p=Object.hasOwn(o,s),h=Object.hasOwn(o,c),[g,_]=K(o,`base__${a}`.toLowerCase(),r,i),[v,y]=K(o,`current__${a}`.toLowerCase(),r,i);if(o[s]===o[c])return l(m,{component:`span`,style:{color:y?`gray`:`inherit`},children:v});if(i===`delta`&&(r===`number`||r===`integer`)&&p&&h){let e=Et(o[s]),n=Et(o[c]);if(Number.isFinite(e)&&Number.isFinite(n)){let r=n-e,i=e===0?0:r/e*100,a=G(n),o=G(r),s=`(${r>=0?`+`:``}${o})`;return l(f,{title:`Base: ${e}\nCurrent: ${n}\nChange: ${r>=0?`+`:``}${r} (${i>=0?`+`:``}${i.toFixed(2)}%)`,slotProps:{tooltip:{sx:{whiteSpace:`pre-line`}}},enterDelay:300,placement:`top`,children:u(d,{sx:{gap:`5px`,display:`flex`,alignItems:`center`,lineHeight:`normal`,height:`100%`},children:[l(t,{value:a,colorPalette:`green`,grayOut:y}),l(m,{sx:{color:r>=0?`green.600`:`red.600`,fontSize:`0.75rem`},children:s})]})})}}return u(d,{sx:{display:`flex`,gap:`5px`,alignItems:`center`,lineHeight:`normal`,height:`100%`},children:[p&&l(t,{value:g,colorPalette:`red`,grayOut:_}),h&&l(t,{value:v,colorPalette:`green`,grayOut:y})]})}}const Tt=wt({DiffTextComponent:Ct});function Et(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=Number.parseFloat(e);return Number.isNaN(t)?0:t}return 0}function Dt({children:e,direction:t=`horizontal`,sizes:n,minSizes:r=0,maxSizes:i,gutterSize:a=5,snapOffset:o=30,dragInterval:s=1,onDragEnd:c,onDrag:u,theme:f,style:p,className:m}){let h=M(),g=f?f===`dark`:h,_={display:`flex`,flexDirection:t===`horizontal`?`row`:`column`,height:`100%`,width:`100%`,...p};return l(d,{className:m,sx:{height:`100%`,width:`100%`,"& .gutter":{backgroundColor:`divider`,backgroundRepeat:`no-repeat`,backgroundPosition:`50%`,transition:`background-color 0.15s ease`,"&:hover":{backgroundColor:g?`grey.600`:`grey.300`}},"& .gutter.gutter-horizontal":{cursor:`col-resize`},"& .gutter.gutter-vertical":{cursor:`row-resize`}},children:l(ue,{style:_,direction:t,sizes:n,minSize:r,maxSize:i,gutterSize:a,snapOffset:o,dragInterval:s,onDragEnd:c,onDrag:u,children:e})})}const q=n(Dt);q.displayName=`SplitPane`;function Ot(e){let{style:t,children:n,gutterSize:r=5,minSize:i,maxSize:a,sizes:o,snapOffset:s,dragInterval:c,onDragEnd:u,onDrag:d,className:f}=e;return l(q,{direction:`horizontal`,gutterSize:r,minSizes:i,maxSizes:a,sizes:o,snapOffset:typeof s==`number`?s:void 0,dragInterval:c,onDragEnd:u,onDrag:d,style:t,className:f,children:n})}function kt(e){let{style:t,children:n,gutterSize:r=5,minSize:i,maxSize:a,sizes:o,snapOffset:s,dragInterval:c,onDragEnd:u,onDrag:d,className:f}=e;return l(q,{direction:`vertical`,gutterSize:r,minSizes:i,maxSizes:a,sizes:o,snapOffset:typeof s==`number`?s:void 0,dragInterval:c,onDragEnd:u,onDrag:d,style:t,className:f,children:n})}function At({color:e}){return l(d,{component:`span`,sx:{display:`inline-block`,width:`10px`,height:`10px`,bgcolor:e,mr:1,borderRadius:`4px`}})}function jt(e,t){return n=>{let r=n.data;if(!r)return;let i=r.__status;if(i===`removed`)return`diff-cell-removed`;if(i===`added`)return`diff-cell-added`;if(t===`added`||t===`removed`)return;let a=`base__${e}`.toLowerCase(),o=`current__${e}`.toLowerCase();if(!w.isEqual(r[a],r[o]))return`diff-cell-removed`}}function Mt(e,t){return n=>{let r=n.data;if(!r)return;let i=r.__status;if(i===`removed`)return`diff-cell-removed`;if(i===`added`)return`diff-cell-added`;if(t===`added`||t===`removed`)return;let a=`base__${e}`.toLowerCase(),o=`current__${e}`.toLowerCase();if(!w.isEqual(r[a],r[o]))return`diff-cell-added`}}function Nt(e){let{name:t,columnStatus:n,columnType:r,columnRenderMode:i,displayMode:a,baseTitle:o=`Base`,currentTitle:s=`Current`,headerProps:c={},renderComponents:u}=e,{DataFrameColumnGroupHeader:d,defaultRenderCell:f,inlineRenderCell:p}=u,m=bt(n),h=()=>l(d,{name:t,columnStatus:n,columnType:r,...c});if(a===`inline`)return{field:t,headerName:t,headerClass:m,headerComponent:h,cellRenderer:p,context:{columnType:r,columnRenderMode:i}};let g=jt(t,n),_=Mt(t,n);return{headerName:t,headerClass:m,headerGroupComponent:h,context:{columnType:r,columnRenderMode:i},children:[{field:`base__${t}`,headerName:o,headerClass:m,cellClass:g,cellRenderer:f,context:{columnType:r,columnRenderMode:i}},{field:`current__${t}`,headerName:s,headerClass:m,cellClass:_,cellRenderer:f,context:{columnType:r,columnRenderMode:i}}]}}function Pt(){return{field:`_index`,headerName:``,width:50,maxWidth:100,cellClass:`index-column`,resizable:!1,pinned:`left`}}function Ft(e,t,n){let{key:r,name:i,columnType:a,columnStatus:o,columnRenderMode:s}=e,{DataFrameColumnGroupHeader:c,defaultRenderCell:u}=n;return{field:r,headerName:i,headerComponent:()=>l(c,{name:i,columnStatus:o??``,columnType:a,...t}),pinned:`left`,cellClass:e=>{if(e.data?.__status)return`diff-header-${e.data.__status}`},cellRenderer:u,context:{columnType:a,columnRenderMode:s}}}function It(e,t,n,r,i,a){let{name:o,columnType:s,columnStatus:c,columnRenderMode:l}=e;return Nt({name:o,columnStatus:c??``,columnType:s,columnRenderMode:l,displayMode:t,baseTitle:i,currentTitle:a,headerProps:n,renderComponents:r})}function J(e){let{columns:t,displayMode:n,headerProps:r,baseTitle:i,currentTitle:a,allowIndexFallback:o=!1,renderComponents:s}=e,c=[],l=!1;!t.some(e=>e.isPrimaryKey)&&o&&(c.push(Pt()),l=!0);for(let e of t)if(e.isPrimaryKey)c.push(Ft(e,r,s));else{let t=It(e,n,r,s,i,a);c.push({...t,pinned:e.frozen?`left`:void 0})}return{columns:c,usedIndexFallback:l}}function Lt(e,t,n){return!t||!n?!0:e===`added`||e===`removed`||e===`modified`}function Rt(e,t){return t.includes(e)}function zt(e,t){return t.includes(e)}function Bt(e,t){return t.includes(e)}function Vt(e,t){return e[t]}function Ht(e){let{columnMap:t,primaryKeys:n,pinnedColumns:r,columnsRenderMode:i,changedOnly:a=!1,rowStats:o,excludeColumns:s=[],strictMode:c=!1}=e,l=(o?.modified??0)>0,u=[];return n.forEach(e=>{let n=Vt(t,e);if(!n){if(c)throw Error(`Primary key column "${e}" not found in columnMap`);return}u.push({key:e,name:e,columnType:n.colType,columnStatus:n.status,columnRenderMode:i[e],frozen:!0,isPrimaryKey:!0})}),r.forEach(e=>{if(Rt(e,n)||Bt(e,s))return;let r=Vt(t,e);if(!r){if(c)throw Error(`Pinned column "${e}" not found in columnMap`);return}u.push({key:e,name:e,columnType:r.colType,columnStatus:r.status,columnRenderMode:i[e],frozen:!0})}),Object.entries(t).forEach(([e,t])=>{Rt(e,n)||zt(e,r)||Bt(e,s)||Lt(t.status,a,l)&&u.push({key:e,name:e,columnType:t.colType,columnStatus:t.status,columnRenderMode:i[e]})}),u}function Ut(e){let{columnMap:t,primaryKeys:n,pinnedColumns:r,columnsRenderMode:i,excludeColumns:a=[],strictMode:o=!1}=e,s=[];return n.forEach(e=>{let n=t[e];if(!n){if(o)throw Error(`Primary key column "${e}" not found in columnMap`);return}s.push({key:e,name:e,columnType:n.colType,columnRenderMode:i[e],frozen:!0,isPrimaryKey:!0})}),r.forEach(e=>{if(n.includes(e)||a.includes(e))return;let r=t[e];if(!r){if(o)throw Error(`Pinned column "${e}" not found in columnMap`);return}s.push({key:r.key,name:e,columnType:r.colType,columnRenderMode:i[e],frozen:!0})}),Object.entries(t).forEach(([e,t])=>{n.includes(e)||r.includes(e)||a.includes(e)||s.push({key:t.key,name:e,columnType:t.colType,columnRenderMode:i[e]})}),s}function Wt(e){return`baseColumnKey`in e&&`currentColumnKey`in e}function Gt(e,t){return t.includes(e)}function Kt(e){return Wt(e)?{baseKey:e.baseColumnKey,currentKey:e.currentColumnKey}:{baseKey:e.key,currentKey:e.key}}function qt(e,t,n,r,i){n.forEach(n=>{let a=n.key;Gt(a,i)?e[String(a).toLowerCase()]=t[a]:e[`${r}${a}`.toLowerCase()]=t[a]})}function Jt(e,t,n,r){let i=!1;for(let[a,o]of Object.entries(n)){if(a===`index`||Gt(a,r))continue;let{baseKey:n,currentKey:s}=Kt(o);if(n===`unknown`||s===`unknown`)continue;let c=e[n],l=t[s];w.isEqual(c,l)||(i=!0,o.status=`modified`)}return i}function Y(e){let{baseMap:t,currentMap:n,baseColumns:r,currentColumns:i,columnMap:a,primaryKeys:o,changedOnly:s=!1}=e,c=H(Object.keys(t),Object.keys(n)),l={added:0,removed:0,modified:0},u=Object.entries(c).map(([e])=>{let s=t[e],c=n[e],u={_index:pt(e),__status:void 0};return s&&qt(u,s,r,`base__`,o),c&&qt(u,c,i,`current__`,o),s?c?Jt(s,c,a,o)&&(u.__status=`modified`,l.modified++):(u.__status=`removed`,l.removed++):(u.__status=`added`,l.added++),u});return s&&(u=u.filter(e=>e.__status===`added`||e.__status===`removed`||e.__status===`modified`)),{rows:u,rowStats:l}}var X=class extends Error{context;details;constructor(e,t,n){super(t?`[${t}] ${e}`:e),this.context=t,this.details=n,this.name=`DataGridValidationError`}};function Z(e,t=`DataFrame`){if(e!=null){if(typeof e!=`object`)throw new X(`Expected an object, got ${typeof e}`,t);if(!(`columns`in e))throw new X(`Missing 'columns' property`,t,{receivedKeys:Object.keys(e)});if(!Array.isArray(e.columns))throw new X(`'columns' must be an array, got ${typeof e.columns}`,t);if(!(`data`in e))throw new X(`Missing 'data' property`,t,{receivedKeys:Object.keys(e)});if(!Array.isArray(e.data))throw new X(`'data' must be an array, got ${typeof e.data}`,t);Yt(e.columns,t),e.data.length>0&&Xt(e,t)}}function Yt(e,t=`DataFrame`){e.forEach((e,n)=>{if(!e||typeof e!=`object`)throw new X(`Column at index ${n} is not an object`,t,{column:e});if(typeof e.key!=`string`||e.key===``)throw new X(`Column at index ${n} has invalid 'key': expected non-empty string, got ${JSON.stringify(e.key)}`,t,{column:e});if(typeof e.name!=`string`)throw new X(`Column '${e.key}' has invalid 'name': expected string, got ${typeof e.name}`,t,{column:e});if(typeof e.type!=`string`)throw new X(`Column '${e.key}' has invalid 'type': expected string, got ${typeof e.type}`,t,{column:e})})}function Xt(e,t=`DataFrame`){let n=e.columns.length;for(let r=0;r<e.data.length;r++){let i=e.data[r];if(!Array.isArray(i))throw new X(`Row at index ${r} is not an array`,t,{row:i,rowType:typeof i});if(i.length!==n)throw new X(`Row ${r} has ${i.length} values but expected ${n} (column count)`,t,{rowIndex:r,rowLength:i.length,columnCount:n,columns:e.columns.map(e=>e.key)})}}function Zt(e,t,n={}){let{required:r=!1,caseInsensitive:i=!1,context:a=`primaryKeys`}=n;if(r&&(!e||e.length===0))throw new X(`Primary keys are required but none were provided`,a);if(!e||e.length===0)return;let o=t.map(e=>e.key),s=i?o.map(e=>e.toLowerCase()):o;for(let t of e){let e=i?t.toLowerCase():t;if(!(i?s.includes(e):o.includes(t)))throw new X(`Primary key column '${t}' not found in columns`,a,{requestedKey:t,availableColumns:o,caseInsensitive:i})}let c=new Set;for(let t of e){let n=i?t.toLowerCase():t;if(c.has(n))throw new X(`Duplicate primary key: '${t}'`,a,{primaryKeys:e});c.add(n)}}function Qt(e,t){Z(e,`dataframe`),e&&t?.primaryKeys&&Zt(t.primaryKeys,e.columns,{context:`toDataGrid`})}function $t(e,t,n){if(Z(e,`base`),Z(t,`current`),n?.primaryKeys&&n.primaryKeys.length>0){let r=e?.columns??[],i=t?.columns??[],a=new Set([...r.map(e=>e.key),...i.map(e=>e.key)]);for(let e of n.primaryKeys)if(!a.has(e))throw new X(`Primary key column '${e}' not found in either base or current DataFrame`,`toDataDiffGrid`,{requestedKey:e,baseColumns:r.map(e=>e.key),currentColumns:i.map(e=>e.key)})}}function en(e,t){if(!e)throw new X(`DataFrame is required for value diff`);if(Z(e),!t||t.length===0)throw new X(`Primary keys are required for value diff`);Zt(t,e.columns,{required:!0,context:`toValueDiffGrid`});let n=e.columns.map(e=>e.key);if(!n.includes(`in_a`))throw new X(`Value diff DataFrame must include lowercase 'in_a' column`);if(!n.includes(`in_b`))throw new X(`Value diff DataFrame must include lowercase 'in_b' column`)}function tn(e,t,n,r){$t(e,t,n);let i=e??{columns:[],data:[]},a=t??{columns:[],data:[]},o=n?.primaryKeys??[],s=n?.pinnedColumns??[],c=n?.changedOnly??!1,l=n?.displayMode??`side_by_side`,u=n?.columnsRenderMode??{},d=B(i),f=B(a),p=vt(i,a),m={},h={},g=!1,_=!1;if(o.length===0)d.forEach(e=>{m[String(e._index)]=e}),f.forEach(e=>{h[String(e._index)]=e});else{let e=U(i.columns,o);d.forEach(t=>{let n=W(i.columns,e,t);n in m&&(g=!0),m[n]=t});let t=U(a.columns,o);f.forEach(e=>{let n=W(a.columns,t,e);n in h&&(_=!0),h[n]=e})}let{rows:v,rowStats:y}=Y({baseMap:m,currentMap:h,baseColumns:i.columns,currentColumns:a.columns,columnMap:p,primaryKeys:o,changedOnly:c}),{columns:b}=J({columns:Ht({columnMap:p,primaryKeys:o,pinnedColumns:s,columnsRenderMode:u,changedOnly:c,rowStats:y,excludeColumns:[`index`],strictMode:!1}),displayMode:l,allowIndexFallback:!0,baseTitle:n?.baseTitle,currentTitle:n?.currentTitle,headerProps:{primaryKeys:o,pinnedColumns:s,onPrimaryKeyChange:n?.onPrimaryKeyChange,onPinnedColumnsChange:n?.onPinnedColumnsChange,onColumnsRenderModeChanged:n?.onColumnsRenderModeChanged},renderComponents:r?.renderComponents??{DataFrameColumnGroupHeader:()=>null,defaultRenderCell:()=>null,inlineRenderCell:()=>null}});return{columns:b,rows:v,invalidPKeyBase:g,invalidPKeyCurrent:_}}function nn(){return{field:`_index`,headerName:``,width:50,cellClass:`index-column`,resizable:!1,pinned:`left`}}function rn(e,t,n){let{key:r,name:i,columnType:a,columnRenderMode:o}=e,{DataFrameColumnGroupHeader:s,defaultRenderCell:c}=n;return{field:r,headerName:i,headerComponent:()=>l(s,{name:i,columnStatus:``,columnType:a,pinnedColumns:t.pinnedColumns,onPinnedColumnsChange:t.onPinnedColumnsChange,onColumnsRenderModeChanged:t.onColumnsRenderModeChanged}),pinned:`left`,cellRenderer:c,context:{columnType:a,columnRenderMode:o}}}function an(e,t,n){let{key:r,name:i,columnType:a,columnRenderMode:o}=e,{DataFrameColumnHeader:s,defaultRenderCell:c}=n;return{field:r,headerName:i,headerComponent:()=>l(s,{name:i,columnType:a,pinnedColumns:t.pinnedColumns,onPinnedColumnsChange:t.onPinnedColumnsChange,onColumnsRenderModeChanged:t.onColumnsRenderModeChanged}),cellRenderer:c,context:{columnType:a,columnRenderMode:o}}}function on(e){let{columns:t,headerProps:n,allowIndexFallback:r=!0,renderComponents:i}=e,a=[],o=!1;!t.some(e=>e.isPrimaryKey)&&r&&(a.push(nn()),o=!0);for(let e of t)if(e.isPrimaryKey)a.push(rn(e,n,i));else{let t=an(e,n,i);a.push({...t,pinned:e.frozen?`left`:void 0})}return{columns:a,usedIndexFallback:o}}function sn(e,t,n){Qt(e,t);let r=t.primaryKeys??[],i=t.pinnedColumns??[],a=t.columnsRenderMode??{},{columns:o}=on({columns:Ut({columnMap:gt(e),primaryKeys:r,pinnedColumns:i,columnsRenderMode:a}),headerProps:{pinnedColumns:i,onPinnedColumnsChange:t.onPinnedColumnsChange,onColumnsRenderModeChanged:t.onColumnsRenderModeChanged},allowIndexFallback:!0,renderComponents:n.renderComponents});return{columns:o,rows:B(e)}}function cn(e,t,n,r){en(e,t);let i=n?.pinnedColumns??[],a=n?.changedOnly??!1,o=n?.displayMode??`inline`,s=n?.columnsRenderMode??{},c=B(e),l=_t(e),u={},d={},f=U(e.columns,t),p=l.in_a.key,m=l.in_b.key;c.forEach(t=>{let n=W(e.columns,f,t);t[p]&&(u[n.toLowerCase()]=t),t[m]&&(d[n.toLowerCase()]=t)});let{rows:h,rowStats:g}=Y({baseMap:u,currentMap:d,baseColumns:e.columns,currentColumns:e.columns,columnMap:l,primaryKeys:t,changedOnly:a}),{columns:_}=J({columns:Ht({columnMap:l,primaryKeys:t,pinnedColumns:i,columnsRenderMode:s,changedOnly:a,rowStats:g,excludeColumns:[`in_a`,`in_b`],strictMode:!0}),displayMode:o,allowIndexFallback:!1,baseTitle:n?.baseTitle,currentTitle:n?.currentTitle,headerProps:{primaryKeys:t,pinnedColumns:i,onPinnedColumnsChange:n?.onPinnedColumnsChange,onColumnsRenderModeChanged:n?.onColumnsRenderModeChanged},renderComponents:r?.renderComponents??{DataFrameColumnGroupHeader:()=>null,defaultRenderCell:()=>null,inlineRenderCell:()=>null}});return{columns:_,rows:h}}const Q={DataFrameColumnGroupHeader:z,defaultRenderCell:xt,inlineRenderCell:Tt},$={DataFrameColumnGroupHeader:z,DataFrameColumnHeader:ft,defaultRenderCell:xt};function ln(e){return Nt({...e,renderComponents:Q})}function un(e){return J({...e,renderComponents:Q})}function dn(e,t,n){return tn(e,t,n,{renderComponents:Q})}function fn(e,t,n){return cn(e,t,n,{renderComponents:Q})}function pn(e,t){return sn(e,t,{renderComponents:$})}function mn(e){return on({...e,renderComponents:$})}function hn(e,t){if(e===0&&t!==0)return`N/A`;if(e<t){let n=(t-e)/e*100;return`+${n>=.1?n.toFixed(1):` <0.1 `}%`}else if(e>t){let n=(e-t)/e*100;return`-${n>=.1?n.toFixed(1):` <0.1 `}%`}else return`0`}function gn(e,t){return e!==null&&t!==null?e===t?`0`:hn(e,t):e===t?`N/A`:e===null?`Added`:t===null?`Removed`:`N/A`}function _n(e){return{columns:[{key:`name`,name:`Name`,type:`text`},{key:`base`,name:`Base Rows`,type:`number`},{key:`current`,name:`Current Rows`,type:`number`},{key:`delta`,name:`Delta`,type:`text`}],data:Object.entries(e).map(([e,t])=>{let n=typeof t.base==`number`?t.base:null,r=typeof t.curr==`number`?t.curr:null;return[e,n,r,gn(n,r)]})}}function vn(e){return{columns:[{key:`name`,name:`Name`,type:`text`},{key:`current`,name:`Row Count`,type:`number`}],data:Object.entries(e).map(([e,t])=>[e,typeof t.curr==`number`?t.curr:null])}}function yn(e,t){if(e===null&&t!==null)return`added`;if(e!==null&&t===null)return`removed`;if(e!==null&&t!==null&&e!==t)return`modified`}function bn(e){return{columns:[{field:`name`,headerName:`Name`,resizable:!0},{field:`current`,headerName:`Row Count`,resizable:!0}],rows:B(vn(e)).map(e=>({...e,current:e.current??`N/A`,__status:void 0}))}}function xn(){return e=>{let t=e.data;if(!t)return;let n=t.base,r=t.current,i=n===`N/A`?null:n,a=r===`N/A`?null:r;if(i!==a){if(i===null||typeof i==`number`&&typeof a==`number`&&i<a)return`diff-cell-added`;if(a===null||typeof i==`number`&&typeof a==`number`&&i>a)return`diff-cell-removed`}}}function Sn(e){let t=B(_n(e)).map(e=>{let t=e.base,n=e.current;return{...e,base:t??`N/A`,current:n??`N/A`,__status:yn(typeof t==`number`?t:null,typeof n==`number`?n:null)}}),n=xn();return{columns:[{field:`name`,headerName:`Name`,resizable:!0,cellClass:n},{field:`base`,headerName:`Base Rows`,resizable:!0,cellClass:n},{field:`current`,headerName:`Current Rows`,resizable:!0,cellClass:n},{field:`delta`,headerName:`Delta`,resizable:!0,cellClass:n}],rows:t}}function Cn(e){let t=new Set,n=new Set;if(e?.nodes){let r=Object.values(e.nodes);for(let e of r)e.data.schema&&(e.data.changeStatus!==`added`&&t.add(e.data.schema),e.data.changeStatus!==`removed`&&n.add(e.data.schema))}return[t,n]}function wn(e,t){let n=V(e,t);if(n.length===0)return[];if(e.length===0||t.length===0)return n.map((e,t)=>t===n.length-1?e:e+`,`);let r=``;return n.forEach(n=>{e.includes(n)&&t.includes(n)&&(r=n)}),n.map((i,a)=>{let o;return o=e.includes(i)?t.includes(i)?i:`--- ${i} (Removed)`:`--- ${i} (Added)`,i===r||a===n.length-1?o:o+`,`})}function Tn(e){let t=Math.floor(e);return{hours:Math.floor(t/3600),minutes:Math.floor(t%3600/60),seconds:t%60}}function En({hours:e,minutes:t,seconds:n}){return e>0?`${e}:${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`:`${t}:${n.toString().padStart(2,`0`)}`}function Dn({hours:e,minutes:t,seconds:n}){let r=[];return e>0&&r.push(`${e} hour${e===1?``:`s`}`),t>0&&r.push(`${t} min${t===1?``:`s`}`),e===0&&(r.length===0||n>0)&&r.push(`${n} second${n===1?``:`s`}`),r.join(` `)}function On(e,t=`verbose`){let n=Tn(e);return t===`compact`?En(n):Dn(n)}function kn(e){if(!Number.isFinite(e))return String(e);let{hours:t,minutes:n,seconds:r}=Tn((Math.floor(e)%86400+86400)%86400),i=e=>e.toString().padStart(2,`0`);return`${i(t)}:${i(n)}:${i(r)}`}function An(e){let t=new Date(e*1e3);return Number.isNaN(t.getTime())?String(e):t.toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`,timeZone:`UTC`})}function jn(e){return ne(S(e),`yyyy-MM-dd'T'HH:mm:ss`)}function Mn(e){return x(S(e),new Date,{addSuffix:!0})}function Nn(e,t){if(!e||!t)return;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!0;for(let e=0;e<n.length;e++)if(n[e]!==r[e])return!0;for(let n of r)if(!e[n]||e[n].type!==t[n]?.type)return!0;return!1}function Pn(e,t){return e?.organization_name&&e.web_url?`${e.web_url}/organizations/${e.organization_name}/settings`:t}export{validateToDataGridInputs as $,Oe as $t,createCellClassCurrent as A,I as At,isPinnedColumn as B,Ve as Bt,buildJoinedColumnMap as C,St as Ct,columnPrecisionSelectOptions as D,ht as Dt,calculateDelta as E,B as Et,getHeaderCellClass as F,at as Ft,toDiffColumn as G,M as Gt,rowCountDiffResultToDataFrame as H,ze as Ht,getPrimaryKeyValue as I,Ge as It,validateColumns as J,j as Jt,toRenderedValue as K,Fe as Kt,getRowCountDiffStatus as L,Ue as Lt,formatSmartDecimal as M,st as Mt,getCellClass as N,ct as Nt,columnRenderedValue as O,L as Ot,getDisplayColumns as P,it as Pt,validateToDataDiffGridInputs as Q,Ae as Qt,getSimpleDisplayColumns as R,Be as Rt,buildDiffRows as S,Ct as St,buildSimpleColumnDefinitions as T,H as Tt,rowCountResultToDataFrame as U,Le as Ut,isPrimaryKeyColumn as V,Re as Vt,shouldIncludeColumn as W,Ie as Wt,validatePrimaryKeyConfig as X,je as Xt,validateDataFrame as Y,Pe as Yt,validatePrimaryKeys as Z,ke as Zt,Cn as _,ToggleSwitch as _t,getCaseInsensitive as a,bn as at,buildColumnOrder as b,kt as bt,keyToNumber as c,mn as ct,On as d,dn as dt,Ee as en,validateToValueDiffGridInputs as et,An as f,pn as ft,wn as g,DiffDisplayModeSwitch as gt,jn as h,ChangedOnlyCheckbox as ht,formatNumber as i,Sn as it,determineRowStatus as j,lt as jt,createCellClassBase as k,ut as kt,Pn as l,Q as lt,Mn as m,fn as mt,formatAsAbbreviatedNumber as n,toDataGrid as nt,getValueAtPath as o,hn as ot,kn as p,ln as pt,validateColumnDataAlignment as q,Ne as qt,formatIntervalMinMax as r,toValueDiffGrid as rt,hashStringToNumber as s,un as st,dataFrameToRowObjects as t,fe as tn,toDataDiffGrid as tt,Nn as u,$ as ut,DataGridValidationError as v,At as vt,buildMergedColumnMap as w,V as wt,buildDiffColumnDefinitions as x,q as xt,buildColumnMap as y,Ot as yt,isExcludedColumn as z,He as zt};
6
- //# sourceMappingURL=utils-D1bvitEj.js.map