@datarecce/ui 1.69.0-nightly.20261018 → 1.69.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/ScreenshotDataGrid-C0a0wbBT.d.ts.map +1 -1
  2. package/dist/advanced.js +1 -1
  3. package/dist/advanced.js.map +1 -1
  4. package/dist/api-AYddXFtC.d.ts.map +1 -1
  5. package/dist/{api-cPhVDn2I.js → api-CXojkmC5.js} +2 -2
  6. package/dist/api-CXojkmC5.js.map +1 -0
  7. package/dist/api.js +1 -1
  8. package/dist/components-run.js +1 -1
  9. package/dist/components.js +1 -1
  10. package/dist/constants-Bgp90yan.js.map +1 -1
  11. package/dist/constants.js +1 -1
  12. package/dist/contexts.js +1 -1
  13. package/dist/fetchClient-CrlcoCZY.js.map +1 -1
  14. package/dist/hooks-b9FwrZPG.js +7 -0
  15. package/dist/hooks-b9FwrZPG.js.map +1 -0
  16. package/dist/hooks.js +1 -1
  17. package/dist/index-Cq6tdNkH.d.ts.map +1 -1
  18. package/dist/index-DyZpNyPS.d.ts.map +1 -1
  19. package/dist/index-_bLa-E79.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/instanceInfo-DpT8Y-AR.d.ts.map +1 -1
  22. package/dist/{keepAlive-ysOdIHPt.js → keepAlive-6018Rh0s.js} +2 -2
  23. package/dist/keepAlive-6018Rh0s.js.map +1 -0
  24. package/dist/lib/api/queryClient.js.map +1 -1
  25. package/dist/lib/api/track.d.ts +1 -0
  26. package/dist/lib/api/track.d.ts.map +1 -1
  27. package/dist/lib/api/track.js.map +1 -1
  28. package/dist/lib/api/user.js.map +1 -1
  29. package/dist/lib/const.js.map +1 -1
  30. package/dist/lib/result/ResultErrorFallback.js +1 -1
  31. package/dist/lib/result/ResultErrorFallback.js.map +1 -1
  32. package/dist/lineage-CT7F9WyJ.d.ts.map +1 -1
  33. package/dist/primitives-CGDNiZec.d.ts.map +1 -1
  34. package/dist/primitives.js +1 -1
  35. package/dist/result.js +1 -1
  36. package/dist/src-B_6isgaC.js +12 -0
  37. package/dist/src-B_6isgaC.js.map +1 -0
  38. package/dist/theme-nKZCsBcx.js.map +1 -1
  39. package/dist/theme.js +1 -1
  40. package/dist/types-DDUJBASg.d.ts.map +1 -1
  41. package/dist/types.js.map +1 -1
  42. package/dist/utils-CJLzkK2v.js +3 -0
  43. package/dist/utils-CJLzkK2v.js.map +1 -0
  44. package/dist/utils-DK-VHeQC.js +8 -0
  45. package/dist/utils-DK-VHeQC.js.map +1 -0
  46. package/dist/utils.js +1 -1
  47. package/package.json +10 -10
  48. package/dist/api-cPhVDn2I.js.map +0 -1
  49. package/dist/hooks-BZLz7kRm.js +0 -7
  50. package/dist/hooks-BZLz7kRm.js.map +0 -1
  51. package/dist/keepAlive-ysOdIHPt.js.map +0 -1
  52. package/dist/src-DRheRvQC.js +0 -12
  53. package/dist/src-DRheRvQC.js.map +0 -1
  54. package/dist/utils-B5d3RPUV.js +0 -3
  55. package/dist/utils-B5d3RPUV.js.map +0 -1
  56. package/dist/utils-Uyt6wNnz.js +0 -8
  57. package/dist/utils-Uyt6wNnz.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"theme-nKZCsBcx.js","names":[],"sources":["../src/components/data/agGridTheme.ts","../src/theme/semanticColors.ts","../src/theme/chartTheme.ts","../src/theme/colors.ts","../src/theme/theme.ts"],"sourcesContent":["\"use client\";\n\n/**\n * @file agGridTheme.ts\n * @description AG Grid theme configuration for data grids\n *\n * Provides light and dark themes using AG Grid's themeQuartz as a base.\n */\n\nimport { themeQuartz } from \"ag-grid-community\";\n\n// System font stack for headers\nconst systemFontStack =\n 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\n/**\n * Light theme for AG Grid data grids\n */\nexport const dataGridThemeLight = themeQuartz.withParams({\n backgroundColor: \"#ffffff\",\n headerBackgroundColor: \"#f5f5f5\",\n rowHoverColor: \"#ffffff\",\n borderColor: \"#e0e0e0\",\n foregroundColor: \"#1e1e1e\",\n fontFamily: \"monospace\",\n fontSize: 13,\n headerFontFamily: systemFontStack,\n headerFontSize: 13,\n headerFontWeight: 700,\n cellHorizontalPadding: 8,\n wrapperBorderRadius: 0,\n});\n\n/**\n * Dark theme for AG Grid data grids\n */\nexport const dataGridThemeDark = themeQuartz.withParams({\n backgroundColor: \"#1e1e1e\",\n headerBackgroundColor: \"#383838\",\n rowHoverColor: \"#1e1e1e\",\n borderColor: \"#4a4a4a\",\n foregroundColor: \"#e0e0e0\",\n fontFamily: \"monospace\",\n fontSize: 13,\n headerFontFamily: systemFontStack,\n headerFontSize: 13,\n headerFontWeight: 700,\n cellHorizontalPadding: 8,\n wrapperBorderRadius: 0,\n});\n","export type ComparisonRole = \"base\" | \"current\";\nexport type StructuralChangeStatus =\n | \"added\"\n | \"removed\"\n | \"modified\"\n | \"unchanged\";\nexport type QuantitativeDirection = \"increase\" | \"decrease\" | \"equal\";\n\nexport interface SemanticColorChannel {\n accent: string;\n foreground: string;\n background: string;\n border: string;\n chartFill: string;\n}\n\nexport interface SemanticColorTheme {\n comparison: Record<ComparisonRole, SemanticColorChannel>;\n structural: {\n neutral: SemanticColorChannel;\n secondaryAccent: Record<StructuralChangeStatus, string>;\n };\n direction: SemanticColorChannel;\n categorical: {\n overlap: SemanticColorChannel & { pattern: \"crosshatch\" };\n };\n}\n\nexport const STRUCTURAL_CHANGE_PRESENTATION = {\n added: { symbol: \"+\", label: \"Added\" },\n removed: { symbol: \"−\", label: \"Removed\" },\n modified: { symbol: \"Δ\", label: \"Modified\" },\n unchanged: { symbol: \"\", label: \"Unchanged\" },\n} as const satisfies Record<\n StructuralChangeStatus,\n { symbol: string; label: string }\n>;\n\nexport const STRUCTURAL_EDGE_DASH = {\n added: \"12 4\",\n removed: \"3 3\",\n modified: \"8 3 2 3\",\n unchanged: \"0\",\n} as const satisfies Record<StructuralChangeStatus, string>;\n\nconst light: SemanticColorTheme = {\n comparison: {\n base: {\n accent: \"#F6AD55\",\n foreground: \"#98471F\",\n background: \"#FFF3E6\",\n border: \"#98471F\",\n chartFill: \"#F6AD55A5\",\n },\n current: {\n accent: \"#63B3ED\",\n foreground: \"#245A85\",\n background: \"#E6F3FC\",\n border: \"#245A85\",\n chartFill: \"#63B3EDA5\",\n },\n },\n structural: {\n neutral: {\n accent: \"#737373\",\n foreground: \"#262626\",\n background: \"#FAFAFA\",\n border: \"#737373\",\n chartFill: \"#737373A5\",\n },\n secondaryAccent: {\n added: \"#15803D\",\n removed: \"#DC2626\",\n modified: \"#B45309\",\n unchanged: \"#737373\",\n },\n },\n direction: {\n accent: \"#737373\",\n foreground: \"#404040\",\n background: \"#FAFAFA\",\n border: \"#737373\",\n chartFill: \"#737373A5\",\n },\n categorical: {\n overlap: {\n accent: \"#805AD5\",\n foreground: \"#553C9A\",\n background: \"#FAF5FF\",\n border: \"#553C9A\",\n chartFill: \"#805AD5A5\",\n pattern: \"crosshatch\",\n },\n },\n};\n\nconst dark: SemanticColorTheme = {\n comparison: {\n base: {\n accent: \"#FBD38D\",\n foreground: \"#FBD38D\",\n background: \"#4A2A14\",\n border: \"#FBD38D\",\n chartFill: \"#FBD38D66\",\n },\n current: {\n accent: \"#90CDF4\",\n foreground: \"#90CDF4\",\n background: \"#173B57\",\n border: \"#90CDF4\",\n chartFill: \"#90CDF466\",\n },\n },\n structural: {\n neutral: {\n accent: \"#A3A3A3\",\n foreground: \"#E5E5E5\",\n background: \"#171717\",\n border: \"#A3A3A3\",\n chartFill: \"#A3A3A3A5\",\n },\n secondaryAccent: {\n added: \"#4ADE80\",\n removed: \"#F87171\",\n modified: \"#FCD34D\",\n unchanged: \"#A3A3A3\",\n },\n },\n direction: {\n accent: \"#A3A3A3\",\n foreground: \"#E5E5E5\",\n background: \"#171717\",\n border: \"#A3A3A3\",\n chartFill: \"#A3A3A3A5\",\n },\n categorical: {\n overlap: {\n accent: \"#B794F4\",\n foreground: \"#E9D8FD\",\n background: \"#2D1F47\",\n border: \"#B794F4\",\n chartFill: \"#B794F4A5\",\n pattern: \"crosshatch\",\n },\n },\n};\n\nexport function getSemanticColorTheme(isDark: boolean): SemanticColorTheme {\n return isDark ? dark : light;\n}\n\n/**\n * Composite a hex color that may carry an alpha channel over an opaque hex\n * background and return the resulting `[r, g, b]` channel values.\n *\n * This is the one place the alpha-flattening math lives. The histogram\n * crosshatch needs the color a translucent `chartFill` actually resolves to on\n * screen, and the contrast tests need the same value to check it, so neither\n * keeps a private copy.\n */\nexport function compositeRgbChannels(\n foreground: string,\n background: string,\n): [number, number, number] {\n const parseRgb = (value: string) =>\n [1, 3, 5].map((index) =>\n Number.parseInt(value.slice(index, index + 2), 16),\n );\n const foregroundRgb = parseRgb(foreground);\n const backgroundRgb = parseRgb(background);\n const alpha =\n foreground.length >= 9\n ? Number.parseInt(foreground.slice(7, 9), 16) / 255\n : 1;\n const [red, green, blue] = foregroundRgb.map((channel, index) =>\n Math.round(channel * alpha + backgroundRgb[index] * (1 - alpha)),\n );\n return [red, green, blue];\n}\n\n/**\n * {@link compositeRgbChannels} formatted as the space-separated `rgb()` string\n * used for colors across the codebase.\n */\nexport function compositeHex(foreground: string, background: string): string {\n return `rgb(${compositeRgbChannels(foreground, background).join(\" \")})`;\n}\n","/**\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\nimport { getSemanticColorTheme } from \"./semanticColors\";\n\nconst LIGHT_SEMANTIC_COLORS = getSemanticColorTheme(false);\nconst DARK_SEMANTIC_COLORS = getSemanticColorTheme(true);\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 =\n LIGHT_SEMANTIC_COLORS.comparison.current.accent;\nexport const BASE_BAR_COLOR = LIGHT_SEMANTIC_COLORS.comparison.base.accent;\nexport const CURRENT_BAR_COLOR_WITH_ALPHA =\n LIGHT_SEMANTIC_COLORS.comparison.current.chartFill;\nexport const BASE_BAR_COLOR_WITH_ALPHA =\n LIGHT_SEMANTIC_COLORS.comparison.base.chartFill;\n\n// Bar color constants - Dark mode (slightly brighter for better visibility)\nexport const CURRENT_BAR_COLOR_DARK =\n DARK_SEMANTIC_COLORS.comparison.current.accent;\nexport const BASE_BAR_COLOR_DARK = DARK_SEMANTIC_COLORS.comparison.base.accent;\nexport const CURRENT_BAR_COLOR_DARK_WITH_ALPHA =\n DARK_SEMANTIC_COLORS.comparison.current.chartFill;\nexport const BASE_BAR_COLOR_DARK_WITH_ALPHA =\n DARK_SEMANTIC_COLORS.comparison.base.chartFill;\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\nexport interface ComparisonColorPair {\n /** Existing chart color that identifies the environment. */\n accent: string;\n /** Low-intensity fill for comparison cells. */\n background: string;\n /** Text/icon color with at least 4.5:1 contrast against the fill. */\n foreground: string;\n}\n\nexport interface ComparisonThemeColors {\n /** Current environment. */\n current: ComparisonColorPair;\n /** Base environment. */\n base: ComparisonColorPair;\n}\n\n/**\n * Theme-aware colors for base/current comparisons outside charts.\n *\n * These reuse the chart accents for a consistent base/current identity.\n */\nexport function getComparisonThemeColors(\n isDark: boolean,\n): ComparisonThemeColors {\n const { base, current } = getSemanticColorTheme(isDark).comparison;\n return {\n current: {\n accent: current.accent,\n background: current.background,\n foreground: current.foreground,\n },\n base: {\n accent: base.accent,\n background: base.background,\n foreground: base.foreground,\n },\n };\n}\n","/**\n * Recce brand colors and palette definitions\n *\n * These colors are used to create a consistent visual identity across\n * the Recce UI components. The palette includes brand colors, semantic\n * colors for status indicators, and neutral grays.\n *\n * Color values are aligned with the main Recce theme at\n * ui/src/components/ui/mui-theme.ts for consistency.\n */\n\nexport const colors = {\n /** White color */\n white: \"#FFFFFF\",\n\n /** Black color */\n black: \"#000000\",\n /**\n * Primary brand color - Orange/Coral\n * Used for primary actions, branding elements, and highlights\n */\n brand: {\n 50: \"#FFDED5\",\n 100: \"#FFC1B0\",\n 200: \"#FFA58C\",\n 300: \"#FF8967\",\n 400: \"#FF6E42\",\n 500: \"#FD541E\", // Primary brand color\n 600: \"#F04104\",\n 700: \"#C93A06\",\n 800: \"#A23206\",\n 900: \"#7C2906\",\n 950: \"#571E05\",\n },\n\n /**\n * Secondary color - Blue (Iochmara)\n * Used for secondary actions, links, and information elements\n */\n iochmara: {\n 50: \"#EAF3FB\",\n 100: \"#C4DDF3\",\n 200: \"#9EC6EB\",\n 300: \"#79B0E2\",\n 400: \"#5599D8\",\n 500: \"#3182CE\", // Secondary color\n 600: \"#2A6CA7\",\n 700: \"#225581\",\n 800: \"#193E5C\",\n 900: \"#102638\",\n 950: \"#060E14\",\n },\n\n /**\n * Neutral grays\n * Used for backgrounds, borders, and text\n */\n neutral: {\n 50: \"#FAFAFA\",\n 100: \"#F5F5F5\",\n 200: \"#E5E5E5\",\n 300: \"#D4D4D4\",\n 400: \"#A3A3A3\",\n 500: \"#737373\",\n 600: \"#525252\",\n 700: \"#404040\",\n 800: \"#262626\",\n 900: \"#171717\",\n 950: \"#0A0A0A\",\n },\n\n /**\n * Cyan color scale\n * Used for secondary accents\n */\n cyan: {\n 50: \"#ECFEFF\",\n 100: \"#CFFAFE\",\n 200: \"#A5F3FC\",\n 300: \"#67E8F9\",\n 400: \"#22D3EE\",\n 500: \"#06B6D4\",\n 600: \"#0891B2\",\n 700: \"#0E7490\",\n 800: \"#155E75\",\n 900: \"#164E63\",\n 950: \"#083344\",\n },\n\n /**\n * Amber color scale\n * Used for warnings\n */\n amber: {\n 50: \"#FFFBEB\",\n 100: \"#FEF3C7\",\n 200: \"#FDE68A\",\n 300: \"#FCD34D\",\n 400: \"#FBBF24\",\n 500: \"#F59E0B\",\n 600: \"#D97706\",\n 700: \"#B45309\",\n 800: \"#92400E\",\n 900: \"#78350F\",\n 950: \"#431407\",\n },\n\n /**\n * Yellow color scale\n * Used for warnings and highlights\n */\n yellow: {\n 50: \"#FEFCE8\",\n 100: \"#FEF9C3\",\n 200: \"#FEF08A\",\n 300: \"#FDE047\",\n 400: \"#FACC15\",\n 500: \"#EAB308\",\n 600: \"#CA8A04\",\n 700: \"#A16207\",\n 800: \"#854D0E\",\n 900: \"#713F12\",\n 950: \"#422006\",\n },\n\n /**\n * Green color scale\n * Used for success states\n */\n green: {\n 50: \"#F0FDF4\",\n 100: \"#DCFCE7\",\n 200: \"#BBF7D0\",\n 300: \"#86EFAC\",\n 400: \"#4ADE80\",\n 500: \"#22C55E\",\n 600: \"#16A34A\",\n 700: \"#15803D\",\n 800: \"#166534\",\n 900: \"#14532D\",\n 950: \"#052E16\",\n },\n\n /**\n * Red color scale\n * Used for errors\n */\n red: {\n 50: \"#FEF2F2\",\n 100: \"#FEE2E2\",\n 200: \"#FECACA\",\n 300: \"#FCA5A5\",\n 400: \"#F87171\",\n 500: \"#EF4444\",\n 600: \"#DC2626\",\n 700: \"#B91C1C\",\n 800: \"#991B1B\",\n 900: \"#7F1D1D\",\n 950: \"#450A0A\",\n },\n\n /**\n * Rose color scale\n * Used for accent colors\n */\n rose: {\n 50: \"#FFF1F2\",\n 100: \"#FFE4E6\",\n 200: \"#FECDD3\",\n 300: \"#FDA4AF\",\n 400: \"#FB7185\",\n 500: \"#F43F5E\",\n 600: \"#E11D48\",\n 700: \"#BE123C\",\n 800: \"#9F1239\",\n 900: \"#881337\",\n 950: \"#4C0519\",\n },\n\n /**\n * Fuchsia color scale\n * Used for accent colors\n */\n fuchsia: {\n 50: \"#FDF4FF\",\n 100: \"#FAE8FF\",\n 200: \"#F5D0FE\",\n 300: \"#F0ABFC\",\n 400: \"#E879F9\",\n 500: \"#D946EF\",\n 600: \"#C026D3\",\n 700: \"#A21CAF\",\n 800: \"#86198F\",\n 900: \"#701A75\",\n 950: \"#4A044E\",\n },\n\n /**\n * Semantic colors for status indicators\n */\n success: {\n main: \"#22C55E\", // green[500]\n light: \"#4ADE80\", // green[400],\n dark: \"#16A34A\", // green[600],\n contrastText: \"#ffffff\",\n },\n\n warning: {\n main: \"#EAB308\", // amber[500],\n light: \"#FACC15\", // amber[400],\n dark: \"#78350F\", // amber[900] - darker for better contrast on light backgrounds\n contrastText: \"#000000\",\n },\n\n error: {\n main: \"#EF4444\", // red[500],\n light: \"#F87171\", // red[400],\n dark: \"#DC2626\", // red[600],\n contrastText: \"#ffffff\",\n },\n\n info: {\n main: \"#3182CE\",\n light: \"#79B0E2\",\n dark: \"#225581\",\n contrastText: \"#ffffff\",\n },\n} as const;\n\n/**\n * Color aliases for backward compatibility\n * Maps common color names to their Recce palette equivalents\n */\nexport const colorAliases: Record<string, keyof typeof colors> = {\n orange: \"amber\",\n gray: \"neutral\",\n};\n\n/**\n * Type for accessing color shades\n */\nexport type ColorShade =\n | 50\n | 100\n | 200\n | 300\n | 400\n | 500\n | 600\n | 700\n | 800\n | 900\n | 950;\n\n/**\n * Type for semantic color variants\n */\nexport type SemanticColorVariant = \"light\" | \"main\" | \"dark\" | \"contrastText\";\n\n/**\n * Semantic variant mappings from Chakra-style tokens to scale values\n * These map semantic names to numeric scale values in the color palette\n *\n * Used during Chakra UI -> MUI migration to translate Chakra token paths\n * like \"colors.green.solid\" to actual color values\n */\nexport const semanticVariantMap: Record<string, number> = {\n solid: 600, // Dark, for text/icons\n subtle: 50, // Light, for backgrounds\n muted: 200, // Slightly muted\n emphasized: 500, // Standard emphasis\n focusRing: 400, // Focus ring color\n light: 300, // Light variant\n};\n\n/**\n * Token lookup function to mimic Chakra UI's token API\n *\n * This utility function translates Chakra-style token paths to actual\n * color values from the color palette. Used during migration from\n * Chakra UI to MUI.\n *\n * @param path - Token path like \"colors.green.solid\" or \"colors.neutral.500\"\n * @returns The hex color value, or undefined if not found\n *\n * @example\n * token(\"colors.green.solid\") // => \"#16A34A\"\n * token(\"colors.neutral.500\") // => \"#737373\"\n * token(\"colors.orange.400\") // => \"#FBBF24\" (maps orange to amber)\n */\nexport function token(path: string): string | undefined {\n const parts = path.split(\".\");\n\n // Handle \"colors.X.Y\" paths\n if (parts[0] === \"colors\" && parts.length >= 3) {\n let colorName = parts[1];\n const variant = parts[2];\n\n // Apply color aliases (e.g., orange -> amber, gray -> neutral)\n if (colorName in colorAliases) {\n colorName = colorAliases[colorName];\n }\n\n // Handle \"colors.white\" and other special cases\n if (colorName === \"white\") return colors.white;\n if (colorName === \"black\") return colors.black;\n\n // Try base colors\n if (colorName in colors) {\n const color = colors[colorName as keyof typeof colors];\n\n // First check for numeric scale (e.g., \"500\")\n if (typeof color === \"object\" && variant in color) {\n return (color as Record<string, string>)[variant];\n }\n\n // Then check for semantic variant mapping (e.g., \"solid\" -> 600)\n if (variant in semanticVariantMap) {\n const scaleValue = semanticVariantMap[variant];\n if (typeof color === \"object\" && scaleValue in color) {\n return (color as Record<string, string>)[scaleValue];\n }\n }\n }\n }\n\n return undefined;\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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CV,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,CACd,MAAO,CACL,aAAc,CAChB,CACF,CACF,EACA,eAAgB,CACd,eAAgB,CACd,KAAM,CACJ,WAAY,IACZ,SAAU,UACZ,CACF,CACF,EAEA,QAAS,CACP,eAAgB,CACd,MAAO,CACL,aAAc,EACd,UACE,sEACJ,CACF,CACF,EACA,YAAa,CACX,eAAgB,CACd,KAAM,CACJ,SAAU,WACV,QAAS,iBACT,UAAW,CACT,gBAAiB,iCACnB,EACA,iBAAkB,CAChB,gBAAiB,qCACjB,UAAW,CACT,gBAAiB,oCACnB,CACF,CACF,CACF,CACF,EAEA,gBAAiB,CACf,eAAgB,CACd,MAAO,CACL,aAAc,EACd,U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"}
1
+ {"version":3,"file":"theme-nKZCsBcx.js","names":["systemFontStack","dataGridThemeLight","themeQuartz","dataGridThemeDark","STRUCTURAL_CHANGE_PRESENTATION","STRUCTURAL_EDGE_DASH","light","dark","getSemanticColorTheme","isDark","compositeRgbChannels","parseRgb","value","index","foregroundRgb","foreground","backgroundRgb","background","alpha","red","green","blue","channel","compositeHex","LIGHT_SEMANTIC_COLORS","DARK_SEMANTIC_COLORS","getChartThemeColors","getThemedScaleOptions","colors","showGrid","getThemedPluginOptions","CURRENT_BAR_COLOR","BASE_BAR_COLOR","CURRENT_BAR_COLOR_WITH_ALPHA","BASE_BAR_COLOR_WITH_ALPHA","CURRENT_BAR_COLOR_DARK","BASE_BAR_COLOR_DARK","CURRENT_BAR_COLOR_DARK_WITH_ALPHA","BASE_BAR_COLOR_DARK_WITH_ALPHA","INFO_VAL_COLOR","INFO_VAL_COLOR_DARK","getChartBarColors","getComparisonThemeColors","current","base","colorAliases","semanticVariantMap","token","parts","path","colorName","variant","color","scaleValue","createButtonColorVariants","colorScale","createChipColorVariants","createBadgeColorVariant","createProgressColorVariant","buttonColorVariants","chipColorVariants","badgeColorVariants","progressColorVariants","sharedThemeOptions","theme","createTheme"],"sources":["../src/components/data/agGridTheme.ts","../src/theme/semanticColors.ts","../src/theme/chartTheme.ts","../src/theme/colors.ts","../src/theme/theme.ts"],"sourcesContent":["\"use client\";\n\n/**\n * @file agGridTheme.ts\n * @description AG Grid theme configuration for data grids\n *\n * Provides light and dark themes using AG Grid's themeQuartz as a base.\n */\n\nimport { themeQuartz } from \"ag-grid-community\";\n\n// System font stack for headers\nconst systemFontStack =\n 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\n/**\n * Light theme for AG Grid data grids\n */\nexport const dataGridThemeLight = themeQuartz.withParams({\n backgroundColor: \"#ffffff\",\n headerBackgroundColor: \"#f5f5f5\",\n rowHoverColor: \"#ffffff\",\n borderColor: \"#e0e0e0\",\n foregroundColor: \"#1e1e1e\",\n fontFamily: \"monospace\",\n fontSize: 13,\n headerFontFamily: systemFontStack,\n headerFontSize: 13,\n headerFontWeight: 700,\n cellHorizontalPadding: 8,\n wrapperBorderRadius: 0,\n});\n\n/**\n * Dark theme for AG Grid data grids\n */\nexport const dataGridThemeDark = themeQuartz.withParams({\n backgroundColor: \"#1e1e1e\",\n headerBackgroundColor: \"#383838\",\n rowHoverColor: \"#1e1e1e\",\n borderColor: \"#4a4a4a\",\n foregroundColor: \"#e0e0e0\",\n fontFamily: \"monospace\",\n fontSize: 13,\n headerFontFamily: systemFontStack,\n headerFontSize: 13,\n headerFontWeight: 700,\n cellHorizontalPadding: 8,\n wrapperBorderRadius: 0,\n});\n","export type ComparisonRole = \"base\" | \"current\";\nexport type StructuralChangeStatus =\n | \"added\"\n | \"removed\"\n | \"modified\"\n | \"unchanged\";\nexport type QuantitativeDirection = \"increase\" | \"decrease\" | \"equal\";\n\nexport interface SemanticColorChannel {\n accent: string;\n foreground: string;\n background: string;\n border: string;\n chartFill: string;\n}\n\nexport interface SemanticColorTheme {\n comparison: Record<ComparisonRole, SemanticColorChannel>;\n structural: {\n neutral: SemanticColorChannel;\n secondaryAccent: Record<StructuralChangeStatus, string>;\n };\n direction: SemanticColorChannel;\n categorical: {\n overlap: SemanticColorChannel & { pattern: \"crosshatch\" };\n };\n}\n\nexport const STRUCTURAL_CHANGE_PRESENTATION = {\n added: { symbol: \"+\", label: \"Added\" },\n removed: { symbol: \"−\", label: \"Removed\" },\n modified: { symbol: \"Δ\", label: \"Modified\" },\n unchanged: { symbol: \"\", label: \"Unchanged\" },\n} as const satisfies Record<\n StructuralChangeStatus,\n { symbol: string; label: string }\n>;\n\nexport const STRUCTURAL_EDGE_DASH = {\n added: \"12 4\",\n removed: \"3 3\",\n modified: \"8 3 2 3\",\n unchanged: \"0\",\n} as const satisfies Record<StructuralChangeStatus, string>;\n\nconst light: SemanticColorTheme = {\n comparison: {\n base: {\n accent: \"#F6AD55\",\n foreground: \"#98471F\",\n background: \"#FFF3E6\",\n border: \"#98471F\",\n chartFill: \"#F6AD55A5\",\n },\n current: {\n accent: \"#63B3ED\",\n foreground: \"#245A85\",\n background: \"#E6F3FC\",\n border: \"#245A85\",\n chartFill: \"#63B3EDA5\",\n },\n },\n structural: {\n neutral: {\n accent: \"#737373\",\n foreground: \"#262626\",\n background: \"#FAFAFA\",\n border: \"#737373\",\n chartFill: \"#737373A5\",\n },\n secondaryAccent: {\n added: \"#15803D\",\n removed: \"#DC2626\",\n modified: \"#B45309\",\n unchanged: \"#737373\",\n },\n },\n direction: {\n accent: \"#737373\",\n foreground: \"#404040\",\n background: \"#FAFAFA\",\n border: \"#737373\",\n chartFill: \"#737373A5\",\n },\n categorical: {\n overlap: {\n accent: \"#805AD5\",\n foreground: \"#553C9A\",\n background: \"#FAF5FF\",\n border: \"#553C9A\",\n chartFill: \"#805AD5A5\",\n pattern: \"crosshatch\",\n },\n },\n};\n\nconst dark: SemanticColorTheme = {\n comparison: {\n base: {\n accent: \"#FBD38D\",\n foreground: \"#FBD38D\",\n background: \"#4A2A14\",\n border: \"#FBD38D\",\n chartFill: \"#FBD38D66\",\n },\n current: {\n accent: \"#90CDF4\",\n foreground: \"#90CDF4\",\n background: \"#173B57\",\n border: \"#90CDF4\",\n chartFill: \"#90CDF466\",\n },\n },\n structural: {\n neutral: {\n accent: \"#A3A3A3\",\n foreground: \"#E5E5E5\",\n background: \"#171717\",\n border: \"#A3A3A3\",\n chartFill: \"#A3A3A3A5\",\n },\n secondaryAccent: {\n added: \"#4ADE80\",\n removed: \"#F87171\",\n modified: \"#FCD34D\",\n unchanged: \"#A3A3A3\",\n },\n },\n direction: {\n accent: \"#A3A3A3\",\n foreground: \"#E5E5E5\",\n background: \"#171717\",\n border: \"#A3A3A3\",\n chartFill: \"#A3A3A3A5\",\n },\n categorical: {\n overlap: {\n accent: \"#B794F4\",\n foreground: \"#E9D8FD\",\n background: \"#2D1F47\",\n border: \"#B794F4\",\n chartFill: \"#B794F4A5\",\n pattern: \"crosshatch\",\n },\n },\n};\n\nexport function getSemanticColorTheme(isDark: boolean): SemanticColorTheme {\n return isDark ? dark : light;\n}\n\n/**\n * Composite a hex color that may carry an alpha channel over an opaque hex\n * background and return the resulting `[r, g, b]` channel values.\n *\n * This is the one place the alpha-flattening math lives. The histogram\n * crosshatch needs the color a translucent `chartFill` actually resolves to on\n * screen, and the contrast tests need the same value to check it, so neither\n * keeps a private copy.\n */\nexport function compositeRgbChannels(\n foreground: string,\n background: string,\n): [number, number, number] {\n const parseRgb = (value: string) =>\n [1, 3, 5].map((index) =>\n Number.parseInt(value.slice(index, index + 2), 16),\n );\n const foregroundRgb = parseRgb(foreground);\n const backgroundRgb = parseRgb(background);\n const alpha =\n foreground.length >= 9\n ? Number.parseInt(foreground.slice(7, 9), 16) / 255\n : 1;\n const [red, green, blue] = foregroundRgb.map((channel, index) =>\n Math.round(channel * alpha + backgroundRgb[index] * (1 - alpha)),\n );\n return [red, green, blue];\n}\n\n/**\n * {@link compositeRgbChannels} formatted as the space-separated `rgb()` string\n * used for colors across the codebase.\n */\nexport function compositeHex(foreground: string, background: string): string {\n return `rgb(${compositeRgbChannels(foreground, background).join(\" \")})`;\n}\n","/**\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\nimport { getSemanticColorTheme } from \"./semanticColors\";\n\nconst LIGHT_SEMANTIC_COLORS = getSemanticColorTheme(false);\nconst DARK_SEMANTIC_COLORS = getSemanticColorTheme(true);\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 =\n LIGHT_SEMANTIC_COLORS.comparison.current.accent;\nexport const BASE_BAR_COLOR = LIGHT_SEMANTIC_COLORS.comparison.base.accent;\nexport const CURRENT_BAR_COLOR_WITH_ALPHA =\n LIGHT_SEMANTIC_COLORS.comparison.current.chartFill;\nexport const BASE_BAR_COLOR_WITH_ALPHA =\n LIGHT_SEMANTIC_COLORS.comparison.base.chartFill;\n\n// Bar color constants - Dark mode (slightly brighter for better visibility)\nexport const CURRENT_BAR_COLOR_DARK =\n DARK_SEMANTIC_COLORS.comparison.current.accent;\nexport const BASE_BAR_COLOR_DARK = DARK_SEMANTIC_COLORS.comparison.base.accent;\nexport const CURRENT_BAR_COLOR_DARK_WITH_ALPHA =\n DARK_SEMANTIC_COLORS.comparison.current.chartFill;\nexport const BASE_BAR_COLOR_DARK_WITH_ALPHA =\n DARK_SEMANTIC_COLORS.comparison.base.chartFill;\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\nexport interface ComparisonColorPair {\n /** Existing chart color that identifies the environment. */\n accent: string;\n /** Low-intensity fill for comparison cells. */\n background: string;\n /** Text/icon color with at least 4.5:1 contrast against the fill. */\n foreground: string;\n}\n\nexport interface ComparisonThemeColors {\n /** Current environment. */\n current: ComparisonColorPair;\n /** Base environment. */\n base: ComparisonColorPair;\n}\n\n/**\n * Theme-aware colors for base/current comparisons outside charts.\n *\n * These reuse the chart accents for a consistent base/current identity.\n */\nexport function getComparisonThemeColors(\n isDark: boolean,\n): ComparisonThemeColors {\n const { base, current } = getSemanticColorTheme(isDark).comparison;\n return {\n current: {\n accent: current.accent,\n background: current.background,\n foreground: current.foreground,\n },\n base: {\n accent: base.accent,\n background: base.background,\n foreground: base.foreground,\n },\n };\n}\n","/**\n * Recce brand colors and palette definitions\n *\n * These colors are used to create a consistent visual identity across\n * the Recce UI components. The palette includes brand colors, semantic\n * colors for status indicators, and neutral grays.\n *\n * Color values are aligned with the main Recce theme at\n * ui/src/components/ui/mui-theme.ts for consistency.\n */\n\nexport const colors = {\n /** White color */\n white: \"#FFFFFF\",\n\n /** Black color */\n black: \"#000000\",\n /**\n * Primary brand color - Orange/Coral\n * Used for primary actions, branding elements, and highlights\n */\n brand: {\n 50: \"#FFDED5\",\n 100: \"#FFC1B0\",\n 200: \"#FFA58C\",\n 300: \"#FF8967\",\n 400: \"#FF6E42\",\n 500: \"#FD541E\", // Primary brand color\n 600: \"#F04104\",\n 700: \"#C93A06\",\n 800: \"#A23206\",\n 900: \"#7C2906\",\n 950: \"#571E05\",\n },\n\n /**\n * Secondary color - Blue (Iochmara)\n * Used for secondary actions, links, and information elements\n */\n iochmara: {\n 50: \"#EAF3FB\",\n 100: \"#C4DDF3\",\n 200: \"#9EC6EB\",\n 300: \"#79B0E2\",\n 400: \"#5599D8\",\n 500: \"#3182CE\", // Secondary color\n 600: \"#2A6CA7\",\n 700: \"#225581\",\n 800: \"#193E5C\",\n 900: \"#102638\",\n 950: \"#060E14\",\n },\n\n /**\n * Neutral grays\n * Used for backgrounds, borders, and text\n */\n neutral: {\n 50: \"#FAFAFA\",\n 100: \"#F5F5F5\",\n 200: \"#E5E5E5\",\n 300: \"#D4D4D4\",\n 400: \"#A3A3A3\",\n 500: \"#737373\",\n 600: \"#525252\",\n 700: \"#404040\",\n 800: \"#262626\",\n 900: \"#171717\",\n 950: \"#0A0A0A\",\n },\n\n /**\n * Cyan color scale\n * Used for secondary accents\n */\n cyan: {\n 50: \"#ECFEFF\",\n 100: \"#CFFAFE\",\n 200: \"#A5F3FC\",\n 300: \"#67E8F9\",\n 400: \"#22D3EE\",\n 500: \"#06B6D4\",\n 600: \"#0891B2\",\n 700: \"#0E7490\",\n 800: \"#155E75\",\n 900: \"#164E63\",\n 950: \"#083344\",\n },\n\n /**\n * Amber color scale\n * Used for warnings\n */\n amber: {\n 50: \"#FFFBEB\",\n 100: \"#FEF3C7\",\n 200: \"#FDE68A\",\n 300: \"#FCD34D\",\n 400: \"#FBBF24\",\n 500: \"#F59E0B\",\n 600: \"#D97706\",\n 700: \"#B45309\",\n 800: \"#92400E\",\n 900: \"#78350F\",\n 950: \"#431407\",\n },\n\n /**\n * Yellow color scale\n * Used for warnings and highlights\n */\n yellow: {\n 50: \"#FEFCE8\",\n 100: \"#FEF9C3\",\n 200: \"#FEF08A\",\n 300: \"#FDE047\",\n 400: \"#FACC15\",\n 500: \"#EAB308\",\n 600: \"#CA8A04\",\n 700: \"#A16207\",\n 800: \"#854D0E\",\n 900: \"#713F12\",\n 950: \"#422006\",\n },\n\n /**\n * Green color scale\n * Used for success states\n */\n green: {\n 50: \"#F0FDF4\",\n 100: \"#DCFCE7\",\n 200: \"#BBF7D0\",\n 300: \"#86EFAC\",\n 400: \"#4ADE80\",\n 500: \"#22C55E\",\n 600: \"#16A34A\",\n 700: \"#15803D\",\n 800: \"#166534\",\n 900: \"#14532D\",\n 950: \"#052E16\",\n },\n\n /**\n * Red color scale\n * Used for errors\n */\n red: {\n 50: \"#FEF2F2\",\n 100: \"#FEE2E2\",\n 200: \"#FECACA\",\n 300: \"#FCA5A5\",\n 400: \"#F87171\",\n 500: \"#EF4444\",\n 600: \"#DC2626\",\n 700: \"#B91C1C\",\n 800: \"#991B1B\",\n 900: \"#7F1D1D\",\n 950: \"#450A0A\",\n },\n\n /**\n * Rose color scale\n * Used for accent colors\n */\n rose: {\n 50: \"#FFF1F2\",\n 100: \"#FFE4E6\",\n 200: \"#FECDD3\",\n 300: \"#FDA4AF\",\n 400: \"#FB7185\",\n 500: \"#F43F5E\",\n 600: \"#E11D48\",\n 700: \"#BE123C\",\n 800: \"#9F1239\",\n 900: \"#881337\",\n 950: \"#4C0519\",\n },\n\n /**\n * Fuchsia color scale\n * Used for accent colors\n */\n fuchsia: {\n 50: \"#FDF4FF\",\n 100: \"#FAE8FF\",\n 200: \"#F5D0FE\",\n 300: \"#F0ABFC\",\n 400: \"#E879F9\",\n 500: \"#D946EF\",\n 600: \"#C026D3\",\n 700: \"#A21CAF\",\n 800: \"#86198F\",\n 900: \"#701A75\",\n 950: \"#4A044E\",\n },\n\n /**\n * Semantic colors for status indicators\n */\n success: {\n main: \"#22C55E\", // green[500]\n light: \"#4ADE80\", // green[400],\n dark: \"#16A34A\", // green[600],\n contrastText: \"#ffffff\",\n },\n\n warning: {\n main: \"#EAB308\", // amber[500],\n light: \"#FACC15\", // amber[400],\n dark: \"#78350F\", // amber[900] - darker for better contrast on light backgrounds\n contrastText: \"#000000\",\n },\n\n error: {\n main: \"#EF4444\", // red[500],\n light: \"#F87171\", // red[400],\n dark: \"#DC2626\", // red[600],\n contrastText: \"#ffffff\",\n },\n\n info: {\n main: \"#3182CE\",\n light: \"#79B0E2\",\n dark: \"#225581\",\n contrastText: \"#ffffff\",\n },\n} as const;\n\n/**\n * Color aliases for backward compatibility\n * Maps common color names to their Recce palette equivalents\n */\nexport const colorAliases: Record<string, keyof typeof colors> = {\n orange: \"amber\",\n gray: \"neutral\",\n};\n\n/**\n * Type for accessing color shades\n */\nexport type ColorShade =\n | 50\n | 100\n | 200\n | 300\n | 400\n | 500\n | 600\n | 700\n | 800\n | 900\n | 950;\n\n/**\n * Type for semantic color variants\n */\nexport type SemanticColorVariant = \"light\" | \"main\" | \"dark\" | \"contrastText\";\n\n/**\n * Semantic variant mappings from Chakra-style tokens to scale values\n * These map semantic names to numeric scale values in the color palette\n *\n * Used during Chakra UI -> MUI migration to translate Chakra token paths\n * like \"colors.green.solid\" to actual color values\n */\nexport const semanticVariantMap: Record<string, number> = {\n solid: 600, // Dark, for text/icons\n subtle: 50, // Light, for backgrounds\n muted: 200, // Slightly muted\n emphasized: 500, // Standard emphasis\n focusRing: 400, // Focus ring color\n light: 300, // Light variant\n};\n\n/**\n * Token lookup function to mimic Chakra UI's token API\n *\n * This utility function translates Chakra-style token paths to actual\n * color values from the color palette. Used during migration from\n * Chakra UI to MUI.\n *\n * @param path - Token path like \"colors.green.solid\" or \"colors.neutral.500\"\n * @returns The hex color value, or undefined if not found\n *\n * @example\n * token(\"colors.green.solid\") // => \"#16A34A\"\n * token(\"colors.neutral.500\") // => \"#737373\"\n * token(\"colors.orange.400\") // => \"#FBBF24\" (maps orange to amber)\n */\nexport function token(path: string): string | undefined {\n const parts = path.split(\".\");\n\n // Handle \"colors.X.Y\" paths\n if (parts[0] === \"colors\" && parts.length >= 3) {\n let colorName = parts[1];\n const variant = parts[2];\n\n // Apply color aliases (e.g., orange -> amber, gray -> neutral)\n if (colorName in colorAliases) {\n colorName = colorAliases[colorName];\n }\n\n // Handle \"colors.white\" and other special cases\n if (colorName === \"white\") return colors.white;\n if (colorName === \"black\") return colors.black;\n\n // Try base colors\n if (colorName in colors) {\n const color = colors[colorName as keyof typeof colors];\n\n // First check for numeric scale (e.g., \"500\")\n if (typeof color === \"object\" && variant in color) {\n return (color as Record<string, string>)[variant];\n }\n\n // Then check for semantic variant mapping (e.g., \"solid\" -> 600)\n if (variant in semanticVariantMap) {\n const scaleValue = semanticVariantMap[variant];\n if (typeof color === \"object\" && scaleValue in color) {\n return (color as Record<string, string>)[scaleValue];\n }\n }\n }\n }\n\n return undefined;\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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,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,GAAGJ,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,GAAGC,CACL,CACF,EACA,SAAU,CACR,SAAU,CAER,GAAGC,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,GAAGC,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,CACd,MAAO,CACL,aAAc,CAChB,CACF,CACF,E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"}
package/dist/theme.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{C as e,D as t,E as n,S as r,T as i,_ as a,a as o,b as s,c,d as l,f as u,g as d,h as f,i as p,l as m,m as h,n as g,o as _,p as v,r as y,s as b,t as x,u as S,v as C,w,x as T,y as E}from"./theme-nKZCsBcx.js";export{_ as BASE_BAR_COLOR,b as BASE_BAR_COLOR_DARK,c as BASE_BAR_COLOR_DARK_WITH_ALPHA,m as BASE_BAR_COLOR_WITH_ALPHA,S as CURRENT_BAR_COLOR,l as CURRENT_BAR_COLOR_DARK,u as CURRENT_BAR_COLOR_DARK_WITH_ALPHA,v as CURRENT_BAR_COLOR_WITH_ALPHA,h as INFO_VAL_COLOR,f as INFO_VAL_COLOR_DARK,T as STRUCTURAL_CHANGE_PRESENTATION,r as STRUCTURAL_EDGE_DASH,g as colorAliases,y as colors,e as compositeHex,w as compositeRgbChannels,n as dataGridThemeDark,t as dataGridThemeLight,d as getChartBarColors,a as getChartThemeColors,C as getComparisonThemeColors,i as getSemanticColorTheme,E as getThemedPluginOptions,s as getThemedScaleOptions,p as semanticVariantMap,x as theme,o as token};
2
+ export{o as BASE_BAR_COLOR,s as BASE_BAR_COLOR_DARK,c as BASE_BAR_COLOR_DARK_WITH_ALPHA,l as BASE_BAR_COLOR_WITH_ALPHA,u as CURRENT_BAR_COLOR,d as CURRENT_BAR_COLOR_DARK,f as CURRENT_BAR_COLOR_DARK_WITH_ALPHA,p as CURRENT_BAR_COLOR_WITH_ALPHA,m as INFO_VAL_COLOR,h as INFO_VAL_COLOR_DARK,x as STRUCTURAL_CHANGE_PRESENTATION,S as STRUCTURAL_EDGE_DASH,n as colorAliases,r as colors,C as compositeHex,w as compositeRgbChannels,E as dataGridThemeDark,D as dataGridThemeLight,g as getChartBarColors,_ as getChartThemeColors,v as getComparisonThemeColors,T as getSemanticColorTheme,y as getThemedPluginOptions,b as getThemedScaleOptions,i as semanticVariantMap,t as theme,a as token}from"./theme-nKZCsBcx.js";
@@ -1 +1 @@
1
- {"version":3,"file":"types-DDUJBASg.d.ts","names":[],"sources":["../src/components/run/RunStatusBadge.tsx","../src/components/run/RunList.tsx","../src/components/run/RunProgress.tsx","../src/components/run/RunToolbar.tsx","../src/components/run/registry.ts","../src/components/run/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types-DDUJBASg.d.ts","names":["_$__registry0.RunRegistry"],"sources":["../src/components/run/RunStatusBadge.tsx","../src/components/run/RunList.tsx","../src/components/run/RunProgress.tsx","../src/components/run/RunToolbar.tsx","../src/components/run/registry.ts","../src/components/run/types.ts"],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../src/types/index.ts"],"sourcesContent":["// @datarecce/ui/types - Type-only exports for TypeScript consumers\n// Use this entry point when you only need types (no runtime code)\n// Import: import type { CheckCardData, LineageNodeData } from '@datarecce/ui/types';\n\nexport const TYPES_API_VERSION = \"0.1.0\";\n\n// =============================================================================\n// LINEAGE TYPES\n// =============================================================================\n\n// Column node types\nexport type {\n ColumnTransformationType,\n LineageColumnNodeData,\n LineageColumnNodeProps,\n} from \"../components/lineage/columns\";\n// Edge types\nexport type {\n EdgeChangeStatus,\n LineageEdgeData,\n LineageEdgeProps,\n} from \"../components/lineage/edges\";\n// Canvas types\nexport type { LineageCanvasProps } from \"../components/lineage/LineageCanvas\";\n// View types\nexport type {\n LineageViewProps,\n LineageViewRef,\n} from \"../components/lineage/LineageView\";\n// Legend types\nexport type {\n ChangeStatusLegendItem,\n LineageLegendProps,\n TransformationLegendItem,\n} from \"../components/lineage/legend\";\n// Node types\nexport type {\n LineageNodeData,\n LineageNodeProps,\n NodeChangeStatus,\n} from \"../components/lineage/nodes\";\n\n// =============================================================================\n// CHECK TYPES\n// =============================================================================\n\nexport type {\n CheckAction,\n CheckActionsProps,\n CheckActionType,\n} from \"../components/check/CheckActions\";\nexport type {\n CheckCardData,\n CheckCardProps,\n CheckRunStatus,\n CheckType,\n} from \"../components/check/CheckCard\";\nexport type { CheckDescriptionProps } from \"../components/check/CheckDescription\";\nexport type {\n CheckDetailProps,\n CheckDetailTab,\n} from \"../components/check/CheckDetail\";\nexport type { CheckEmptyStateProps } from \"../components/check/CheckEmptyState\";\nexport type { CheckListProps } from \"../components/check/CheckList\";\n\n// =============================================================================\n// RUN TYPES\n// =============================================================================\n\nexport type {\n RunListItemData,\n RunListItemProps,\n RunListProps,\n} from \"../components/run/RunList\";\n\nexport type {\n RunProgressOverlayProps,\n RunProgressProps,\n RunProgressVariant,\n} from \"../components/run/RunProgress\";\n\nexport type {\n RunStatus,\n RunStatusBadgeProps,\n RunStatusWithDateProps,\n} from \"../components/run/RunStatusBadge\";\n\n// =============================================================================\n// DATA TYPES\n// =============================================================================\n\nexport type {\n HistogramChartProps,\n HistogramDataset,\n HistogramDataType,\n} from \"../components/data/HistogramChart\";\nexport type {\n TopKBarChartProps,\n TopKDataset,\n TopKItem,\n} from \"../components/data/TopKBarChart\";\n\n// =============================================================================\n// SCHEMA TYPES\n// =============================================================================\n\nexport type {\n SchemaDiffRow,\n SchemaDiffStatus,\n} from \"../components/schema/types\";\n\n// =============================================================================\n// EDITOR TYPES\n// =============================================================================\n\nexport type {\n DiffEditorLanguage,\n DiffEditorProps,\n DiffEditorTheme,\n} from \"../components/editor/DiffEditor\";\n\n// =============================================================================\n// UI TYPES\n// =============================================================================\n\nexport type { EmptyStateProps } from \"../components/ui/EmptyState\";\n\nexport type {\n SplitDirection,\n SplitPaneProps,\n} from \"../components/ui/SplitPane\";\n\n// =============================================================================\n// CONTEXT TYPES\n// =============================================================================\n\n// Action context types\nexport type {\n AxiosQueryParams,\n RecceActionContextType,\n RecceActionOptions,\n RecceActionProviderProps,\n SubmitRunTrackProps,\n} from \"../contexts/action\";\n// Idle timeout types\nexport type { IdleTimeoutContextType } from \"../contexts/idle\";\n// Instance context types\nexport type { InstanceInfoType } from \"../contexts/instance\";\nexport type {\n LineageGraphContextType,\n LineageGraphProviderProps,\n NodeDetailsOpenRequest,\n NodeDetailsView,\n} from \"../contexts/lineage\";\n// Lineage graph types\nexport type {\n EnvInfo,\n LineageGraph,\n LineageGraphColumnNode,\n LineageGraphEdge,\n LineageGraphNode,\n LineageGraphNodes,\n} from \"../contexts/lineage/types\";\nexport type { NodeColumnSetMap } from \"../contexts/lineage/utils\";\n\n// =============================================================================\n// PROVIDER TYPES\n// =============================================================================\n\nexport type {\n Check,\n CheckContextType,\n CheckProviderProps,\n} from \"../providers/contexts/CheckContext\";\n\nexport type {\n QueryContextType,\n QueryProviderProps,\n QueryResult,\n} from \"../providers/contexts/QueryContext\";\n\nexport type {\n NavigateOptions,\n RoutingConfig,\n RoutingContextValue,\n} from \"../providers/contexts/RoutingContext\";\n\nexport type { RecceProviderProps } from \"../providers/RecceProvider\";\n\n// =============================================================================\n// THEME TYPES\n// =============================================================================\n\nexport type { ThemeColors } from \"../hooks/useThemeColors\";\nexport type { Theme } from \"../theme\";\nexport type {\n ColorShade,\n SemanticColorVariant,\n} from \"../theme/colors\";\n\n// =============================================================================\n// API TYPES\n// =============================================================================\n\nexport type {\n CatalogMetadata,\n GitInfo,\n LineageData,\n LineageDataFromMetadata,\n ManifestMetadata,\n MergedEdgeData,\n MergedLineageEnvMetadata,\n MergedLineageResponse,\n MergedNodeData,\n NodeColumnData,\n NodeData,\n PullRequestInfo,\n RecceInstanceInfo,\n RecceServerFlags,\n RunsAggregated,\n ServerInfoResult,\n ServerMode,\n SQLMeshInfo,\n StateMetadata,\n} from \"../api\";\n\n// =============================================================================\n// FEATURE TYPES\n// =============================================================================\n\nexport type {\n RecceFeatureMode,\n RecceFeatureToggles,\n} from \"../contexts/instance\";\n"],"mappings":";AAIA,MAAa,EAAoB"}
1
+ {"version":3,"file":"types.js","names":["TYPES_API_VERSION"],"sources":["../src/types/index.ts"],"sourcesContent":["// @datarecce/ui/types - Type-only exports for TypeScript consumers\n// Use this entry point when you only need types (no runtime code)\n// Import: import type { CheckCardData, LineageNodeData } from '@datarecce/ui/types';\n\nexport const TYPES_API_VERSION = \"0.1.0\";\n\n// =============================================================================\n// LINEAGE TYPES\n// =============================================================================\n\n// Column node types\nexport type {\n ColumnTransformationType,\n LineageColumnNodeData,\n LineageColumnNodeProps,\n} from \"../components/lineage/columns\";\n// Edge types\nexport type {\n EdgeChangeStatus,\n LineageEdgeData,\n LineageEdgeProps,\n} from \"../components/lineage/edges\";\n// Canvas types\nexport type { LineageCanvasProps } from \"../components/lineage/LineageCanvas\";\n// View types\nexport type {\n LineageViewProps,\n LineageViewRef,\n} from \"../components/lineage/LineageView\";\n// Legend types\nexport type {\n ChangeStatusLegendItem,\n LineageLegendProps,\n TransformationLegendItem,\n} from \"../components/lineage/legend\";\n// Node types\nexport type {\n LineageNodeData,\n LineageNodeProps,\n NodeChangeStatus,\n} from \"../components/lineage/nodes\";\n\n// =============================================================================\n// CHECK TYPES\n// =============================================================================\n\nexport type {\n CheckAction,\n CheckActionsProps,\n CheckActionType,\n} from \"../components/check/CheckActions\";\nexport type {\n CheckCardData,\n CheckCardProps,\n CheckRunStatus,\n CheckType,\n} from \"../components/check/CheckCard\";\nexport type { CheckDescriptionProps } from \"../components/check/CheckDescription\";\nexport type {\n CheckDetailProps,\n CheckDetailTab,\n} from \"../components/check/CheckDetail\";\nexport type { CheckEmptyStateProps } from \"../components/check/CheckEmptyState\";\nexport type { CheckListProps } from \"../components/check/CheckList\";\n\n// =============================================================================\n// RUN TYPES\n// =============================================================================\n\nexport type {\n RunListItemData,\n RunListItemProps,\n RunListProps,\n} from \"../components/run/RunList\";\n\nexport type {\n RunProgressOverlayProps,\n RunProgressProps,\n RunProgressVariant,\n} from \"../components/run/RunProgress\";\n\nexport type {\n RunStatus,\n RunStatusBadgeProps,\n RunStatusWithDateProps,\n} from \"../components/run/RunStatusBadge\";\n\n// =============================================================================\n// DATA TYPES\n// =============================================================================\n\nexport type {\n HistogramChartProps,\n HistogramDataset,\n HistogramDataType,\n} from \"../components/data/HistogramChart\";\nexport type {\n TopKBarChartProps,\n TopKDataset,\n TopKItem,\n} from \"../components/data/TopKBarChart\";\n\n// =============================================================================\n// SCHEMA TYPES\n// =============================================================================\n\nexport type {\n SchemaDiffRow,\n SchemaDiffStatus,\n} from \"../components/schema/types\";\n\n// =============================================================================\n// EDITOR TYPES\n// =============================================================================\n\nexport type {\n DiffEditorLanguage,\n DiffEditorProps,\n DiffEditorTheme,\n} from \"../components/editor/DiffEditor\";\n\n// =============================================================================\n// UI TYPES\n// =============================================================================\n\nexport type { EmptyStateProps } from \"../components/ui/EmptyState\";\n\nexport type {\n SplitDirection,\n SplitPaneProps,\n} from \"../components/ui/SplitPane\";\n\n// =============================================================================\n// CONTEXT TYPES\n// =============================================================================\n\n// Action context types\nexport type {\n AxiosQueryParams,\n RecceActionContextType,\n RecceActionOptions,\n RecceActionProviderProps,\n SubmitRunTrackProps,\n} from \"../contexts/action\";\n// Idle timeout types\nexport type { IdleTimeoutContextType } from \"../contexts/idle\";\n// Instance context types\nexport type { InstanceInfoType } from \"../contexts/instance\";\nexport type {\n LineageGraphContextType,\n LineageGraphProviderProps,\n NodeDetailsOpenRequest,\n NodeDetailsView,\n} from \"../contexts/lineage\";\n// Lineage graph types\nexport type {\n EnvInfo,\n LineageGraph,\n LineageGraphColumnNode,\n LineageGraphEdge,\n LineageGraphNode,\n LineageGraphNodes,\n} from \"../contexts/lineage/types\";\nexport type { NodeColumnSetMap } from \"../contexts/lineage/utils\";\n\n// =============================================================================\n// PROVIDER TYPES\n// =============================================================================\n\nexport type {\n Check,\n CheckContextType,\n CheckProviderProps,\n} from \"../providers/contexts/CheckContext\";\n\nexport type {\n QueryContextType,\n QueryProviderProps,\n QueryResult,\n} from \"../providers/contexts/QueryContext\";\n\nexport type {\n NavigateOptions,\n RoutingConfig,\n RoutingContextValue,\n} from \"../providers/contexts/RoutingContext\";\n\nexport type { RecceProviderProps } from \"../providers/RecceProvider\";\n\n// =============================================================================\n// THEME TYPES\n// =============================================================================\n\nexport type { ThemeColors } from \"../hooks/useThemeColors\";\nexport type { Theme } from \"../theme\";\nexport type {\n ColorShade,\n SemanticColorVariant,\n} from \"../theme/colors\";\n\n// =============================================================================\n// API TYPES\n// =============================================================================\n\nexport type {\n CatalogMetadata,\n GitInfo,\n LineageData,\n LineageDataFromMetadata,\n ManifestMetadata,\n MergedEdgeData,\n MergedLineageEnvMetadata,\n MergedLineageResponse,\n MergedNodeData,\n NodeColumnData,\n NodeData,\n PullRequestInfo,\n RecceInstanceInfo,\n RecceServerFlags,\n RunsAggregated,\n ServerInfoResult,\n ServerMode,\n SQLMeshInfo,\n StateMetadata,\n} from \"../api\";\n\n// =============================================================================\n// FEATURE TYPES\n// =============================================================================\n\nexport type {\n RecceFeatureMode,\n RecceFeatureToggles,\n} from \"../contexts/instance\";\n"],"mappings":";AAIA,MAAaA,EAAoB,Q"}
@@ -0,0 +1,3 @@
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-6018Rh0s.js";import{n as s}from"./fetchClient-CrlcoCZY.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/* @__PURE__ */ 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 te({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/* @__PURE__ */ g(w.Provider,{value:x,children:e})}function ne(){return d(w)}const T={mode:null,disableSaveToFile:!1,disableExportStateFile:!1,disableImportStateFile:!1,disableUpdateChecklist:!1,disableDatabaseQuery:!1,disableViewActionDropdown:!1,disableNodeActionDropdown:!1,disableShare:!1,checklistPermissionDenied:!1},E={singleEnv:!1,authed:!1,lifetimeExpiredAt:void 0,featureToggles:T,shareUrl:void 0,sessionId:void 0,pythonVersion:void 0},D=s({baseURL:``});function O(){let r=t()?.apiClient??D;return c({queryKey:n.instanceInfo(),queryFn:()=>e(r)})}const k=l(E);k.displayName=`RecceInstanceInfoContext`;function A({children:e}){let{data:t,isLoading:n}=O(),[r,i]=h(T),[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={...T};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/* @__PURE__ */ g(k.Provider,{value:{featureToggles:r,singleEnv:a,authed:s,lifetimeExpiredAt:l,shareUrl:d,sessionId:p,pythonVersion:_},children:e})}function j(){return d(k)}const M=l(void 0);function N(){return d(M)??null}const P=s({baseURL:``});function re(){return typeof window<`u`&&!!window.RECCE_DEBUG_IDLE}function F(e,t){re()&&(t?console.log(e,t):console.log(e))}const I={ACTIVITY_EVENTS:[`focus`,`mousemove`,`keydown`,`scroll`],EVENT_THROTTLE_MS:150};function L(){let{data:e,isLoading:n,isError:r}=O(),i=N()?.isDisconnected??!1,o=t()?.apiClient??P,s=e?.idle_timeout,c=s!==void 0&&s>0&&!i;F(`[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)&&F(`[Idle Detection] Keep-alive sent successfully`,{timestamp:(/* @__PURE__ */ new Date()).toISOString()})},[o]),d=u(e=>{c&&!document.hidden&&(F(`[Idle Detection] Activity detected`,{event:e.type,tabActive:!document.hidden}),l())},[c,l]),m=u(()=>{c&&(document.hidden||(F(`[Idle Detection] Tab became active`,{timestamp:(/* @__PURE__ */ new Date()).toISOString()}),l()))},[c,l]),h=p(()=>v(d,I.EVENT_THROTTLE_MS,{leading:!0,trailing:!0}),[d]);f(()=>{if(!c)F(`[Idle Detection] Disabled`,{idleTimeout:s,reason:s===void 0?`idle_timeout not configured on server`:s===0?`idle_timeout is 0`:`disconnected`});else return F(`[Idle Detection] Initialized`,{enabled:!0,idleTimeout:`${s}s`,eventThrottle:`${I.EVENT_THROTTLE_MS}ms`,apiThrottle:`3s (API layer)`,monitoredEvents:I.ACTIVITY_EVENTS.join(`, `)}),I.ACTIVITY_EVENTS.forEach(e=>{window.addEventListener(e,h,{passive:!0})}),document.addEventListener(`visibilitychange`,m),()=>{F(`[Idle Detection] Cleanup - removing event listeners`),I.ACTIVITY_EVENTS.forEach(e=>{window.removeEventListener(e,h)}),document.removeEventListener(`visibilitychange`,m),h.cancel()}},[c,h,m,s])}function R({children:e}){let{data:t}=O(),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,t=Math.max(0,l-e);a(t)};e();let t=setInterval(e,1e3);return()=>{clearInterval(t)}},[d,l,s]),/* @__PURE__ */ _(M.Provider,{value:{remainingSeconds:i,idleTimeout:l,isEnabled:d,setDisconnected:v,resetConnection:y,isDisconnected:s},children:[/* @__PURE__ */ g(z,{}),e]})}function z(){return L(),null}function B(){let e=d(M);if(!e)throw Error(`useIdleTimeout must be used within IdleTimeoutProvider`);return e}const V=l({isActionAvailable:()=>!0,isDemoSite:!1,isLoading:!0});V.displayName=`RecceLineageGraphContext`;function H({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/* @__PURE__ */ g(V.Provider,{value:y,children:e})}function U(){return d(V)}function W(){let{runsAggregated:e,refetchRunsAggregated:t}=U();return[e,t]}const G=l(void 0),K=()=>{let e=d(G);if(!e)throw Error(`useLineageViewContext must be used within a LineageViewProvider`);return e},q=()=>d(G);function J(e){return e.type===`lineageGraphNode`}function Y(e){return e.type===`lineageGraphColumnNode`}const ie=s({baseURL:``});function ae(){let e=t()?.apiClient??ie;return c({queryKey:n.flag(),queryFn:()=>i(e)})}function X(e){return e===`unknown`?`modified`:e}function oe(e,t,n,r){let{parent_map:i,child_map:a,columns:o}=e.current,s=/* @__PURE__ */ new Map,c=/* @__PURE__ */ new Set;function l(e,t){if(c.has(e))return;c.add(e);let n=o[e];if(n){let t=e.slice(0,-(n.name.length+1)),i=s.get(t)??[];i.push({column:n.name,isImpacted:r.has(e),transformationType:n.transformation_type,changeStatus:X(n.change_status)}),s.set(t,i)}let i=t[e]??[];for(let e of i)l(e,t)}let u=`${t}_${n}`,d=o[u];if(d){let e=u.slice(0,-(d.name.length+1));s.set(e,[{column:d.name,isImpacted:r.has(u),transformationType:d.transformation_type,changeStatus:X(d.change_status)}])}c.add(u);for(let e of i[u]??[])l(e,i);for(let e of a[u]??[])l(e,a);return s}const se=24,Z={status:`unknown`,unchecked_nodes:[],unchecked_node_count:0,more:!1};function ce(e){if(e==null||![`complete`,`partial`,`unknown`].includes(e.status)||!Array.isArray(e.unchecked_nodes)||!e.unchecked_nodes.every(e=>typeof e==`string`)||!Number.isInteger(e.unchecked_node_count)||e.unchecked_node_count<e.unchecked_nodes.length||typeof e.more!=`boolean`)return{...Z,unchecked_nodes:[]};let t=e.unchecked_node_count>0,n=e.unchecked_node_count>e.unchecked_nodes.length;return(e.status===`partial`?t&&e.more===n:!t&&e.unchecked_nodes.length===0&&!e.more)?{status:e.status,unchecked_nodes:[...e.unchecked_nodes],unchecked_node_count:e.unchecked_node_count,more:e.more}:{...Z,unchecked_nodes:[]}}function le(e){return e===`complete`||e===`unchecked`||e===`not_applicable`?e:`unknown`}function Q(...e){let t=/* @__PURE__ */ new Set;for(let n of e)for(let e of n)t.add(e);return t}function ue(...e){if(e.length===0)return/* @__PURE__ */ 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=/* @__PURE__ */ 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 de(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,baseSchema:i.base_schema??i.schema,materialized:i.materialized,changeStatus:X(i.change_status),change:i.change??void 0,schemaComparisonStatus:le(i.schema_comparison_status),baseCatalogStatus:i.base_catalog_status,currentCatalogStatus:i.current_catalog_status,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},artifactHealth:e.artifact_health,schemaCoverage:ce(e.schema_coverage)}}function fe(e,t,n=1e3){return $(t,t=>e.nodes[t]===void 0?[]:Object.keys(e.nodes[t].data.parents),n)}function pe(e,t,n=1e3){return $(t,t=>e.nodes[t]===void 0?[]:Object.keys(e.nodes[t].data.children),n)}function me(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 he(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(!J(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(!J(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{te as A,L as C,O as D,j as E,x as M,C as N,T as O,ee as P,B as S,A as T,K as _,he as a,W as b,me as c,oe as d,ae as f,q as g,G as h,ue as i,ne as j,E as k,Q as l,J as m,de as n,pe as o,Y as p,$ as r,fe as s,se as t,X as u,H as v,N as w,R as x,U as y};
3
+ //# sourceMappingURL=utils-CJLzkK2v.js.map