@eventcatalog/core 3.0.0 → 3.2.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 (109) hide show
  1. package/dist/analytics/analytics.cjs +1 -1
  2. package/dist/analytics/analytics.js +2 -2
  3. package/dist/analytics/log-build.cjs +1 -1
  4. package/dist/analytics/log-build.js +3 -3
  5. package/dist/{chunk-VO5WYA44.js → chunk-AA47DJ43.js} +1 -1
  6. package/dist/{chunk-EKGR533N.js → chunk-GGRXP5WM.js} +1 -1
  7. package/dist/{chunk-E5Q7TZYT.js → chunk-L3QRQT7U.js} +1 -1
  8. package/dist/{chunk-BYP43AAT.js → chunk-RWYEP5SD.js} +1 -1
  9. package/dist/{chunk-KF5PARQK.js → chunk-VPQCMMRM.js} +1 -1
  10. package/dist/constants.cjs +1 -1
  11. package/dist/constants.js +1 -1
  12. package/dist/eventcatalog.cjs +1 -1
  13. package/dist/eventcatalog.config.d.cts +7 -0
  14. package/dist/eventcatalog.config.d.ts +7 -0
  15. package/dist/eventcatalog.js +5 -5
  16. package/dist/generate.cjs +1 -1
  17. package/dist/generate.js +3 -3
  18. package/dist/utils/cli-logger.cjs +1 -1
  19. package/dist/utils/cli-logger.js +2 -2
  20. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +520 -247
  21. package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +3 -3
  22. package/eventcatalog/src/components/Checkbox.astro +7 -4
  23. package/eventcatalog/src/components/CopyAsMarkdown.tsx +15 -15
  24. package/eventcatalog/src/components/EnvironmentDropdown.tsx +15 -7
  25. package/eventcatalog/src/components/FavoriteButton.tsx +1 -1
  26. package/eventcatalog/src/components/Grids/DomainGrid.tsx +72 -60
  27. package/eventcatalog/src/components/Grids/MessageGrid.tsx +68 -48
  28. package/eventcatalog/src/components/Header.astro +15 -10
  29. package/eventcatalog/src/components/Lists/OwnersList.tsx +17 -10
  30. package/eventcatalog/src/components/Lists/PillListFlat.styles.css +12 -0
  31. package/eventcatalog/src/components/Lists/PillListFlat.tsx +15 -15
  32. package/eventcatalog/src/components/Lists/VersionList.astro +15 -5
  33. package/eventcatalog/src/components/MDX/Accordion/Accordion.tsx +3 -3
  34. package/eventcatalog/src/components/MDX/Admonition.tsx +49 -9
  35. package/eventcatalog/src/components/MDX/Attachments.astro +15 -11
  36. package/eventcatalog/src/components/MDX/ChannelInformation/ChannelInformation.tsx +29 -15
  37. package/eventcatalog/src/components/MDX/EntityPropertiesTable/EntityPropertiesTable.astro +20 -13
  38. package/eventcatalog/src/components/MDX/Link/Link.astro +1 -1
  39. package/eventcatalog/src/components/MDX/MessageTable/MessageTable.client.tsx +50 -29
  40. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.tsx +14 -12
  41. package/eventcatalog/src/components/MDX/NodeGraph/StepWalkthrough.tsx +4 -4
  42. package/eventcatalog/src/components/MDX/NodeGraph/StudioModal.tsx +4 -4
  43. package/eventcatalog/src/components/MDX/NodeGraph/VisualiserSearch.tsx +2 -2
  44. package/eventcatalog/src/components/MDX/ResourceGroupTable/ResourceGroupTable.client.tsx +54 -33
  45. package/eventcatalog/src/components/MDX/ResourceLink/ResourceLink.astro +1 -1
  46. package/eventcatalog/src/components/MDX/Steps/Step.astro +2 -2
  47. package/eventcatalog/src/components/MDX/Steps/Steps.astro +3 -3
  48. package/eventcatalog/src/components/MDX/Tabs/Tabs.astro +13 -9
  49. package/eventcatalog/src/components/MDX/Tiles/Tile.astro +25 -13
  50. package/eventcatalog/src/components/MDX/Tiles/Tiles.astro +1 -1
  51. package/eventcatalog/src/components/SchemaExplorer/ApiAccessSection.tsx +3 -3
  52. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +3 -3
  53. package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +29 -25
  54. package/eventcatalog/src/components/SchemaExplorer/DiffViewer.tsx +3 -3
  55. package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +61 -42
  56. package/eventcatalog/src/components/SchemaExplorer/OwnersSection.tsx +13 -9
  57. package/eventcatalog/src/components/SchemaExplorer/Pagination.tsx +6 -4
  58. package/eventcatalog/src/components/SchemaExplorer/ProducersConsumersSection.tsx +17 -13
  59. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +35 -8
  60. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsHeader.tsx +33 -21
  61. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +1 -1
  62. package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +41 -33
  63. package/eventcatalog/src/components/SchemaExplorer/SchemaListItem.tsx +19 -7
  64. package/eventcatalog/src/components/SchemaExplorer/SchemaViewerModal.tsx +8 -8
  65. package/eventcatalog/src/components/Search/Search.astro +3 -3
  66. package/eventcatalog/src/components/Search/SearchModal.tsx +65 -36
  67. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +31 -21
  68. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +92 -59
  69. package/eventcatalog/src/components/Tables/Table.tsx +25 -24
  70. package/eventcatalog/src/components/Tables/columns/ContainersTableColumns.tsx +22 -16
  71. package/eventcatalog/src/components/Tables/columns/DomainTableColumns.tsx +14 -11
  72. package/eventcatalog/src/components/Tables/columns/FlowTableColumns.tsx +6 -6
  73. package/eventcatalog/src/components/Tables/columns/MessageTableColumns.tsx +22 -16
  74. package/eventcatalog/src/components/Tables/columns/ServiceTableColumns.tsx +22 -16
  75. package/eventcatalog/src/components/Tables/columns/SharedColumns.tsx +4 -4
  76. package/eventcatalog/src/components/Tables/columns/TeamsTableColumns.tsx +21 -13
  77. package/eventcatalog/src/components/Tables/columns/UserTableColumns.tsx +30 -19
  78. package/eventcatalog/src/components/ThemeToggle.tsx +18 -0
  79. package/eventcatalog/src/enterprise/ai/chat-api.ts +24 -3
  80. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NestedItem.tsx +15 -7
  81. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NoResultsFound.tsx +2 -2
  82. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/index.tsx +19 -15
  83. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +50 -17
  84. package/eventcatalog/src/layouts/DirectoryLayout.astro +11 -6
  85. package/eventcatalog/src/layouts/DiscoverLayout.astro +13 -8
  86. package/eventcatalog/src/layouts/Footer.astro +6 -6
  87. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +62 -14
  88. package/eventcatalog/src/pages/_index.astro +135 -179
  89. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +2 -2
  90. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +4 -4
  91. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +77 -63
  92. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +23 -24
  93. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +66 -50
  94. package/eventcatalog/src/pages/docs/custom/index.astro +2 -2
  95. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +25 -21
  96. package/eventcatalog/src/pages/docs/users/[id]/index.astro +25 -21
  97. package/eventcatalog/src/pages/schemas/explorer/index.astro +1 -1
  98. package/eventcatalog/src/pages/studio.astro +59 -31
  99. package/eventcatalog/src/remark-plugins/directives.ts +6 -6
  100. package/eventcatalog/src/remark-plugins/mermaid.ts +2 -2
  101. package/eventcatalog/src/stores/theme-store.ts +93 -0
  102. package/eventcatalog/src/styles/theme.css +255 -0
  103. package/eventcatalog/src/styles/themes/forest.css +230 -0
  104. package/eventcatalog/src/styles/themes/ocean.css +235 -0
  105. package/eventcatalog/src/styles/themes/sapphire.css +230 -0
  106. package/eventcatalog/src/styles/themes/sunset.css +230 -0
  107. package/eventcatalog/src/utils/feature.ts +4 -0
  108. package/eventcatalog/tailwind.config.mjs +6 -3
  109. package/package.json +7 -6
@@ -17,47 +17,51 @@ export default function ProducersConsumersSection({ message, isExpanded, onToggl
17
17
  if (totalCount === 0) return null;
18
18
 
19
19
  return (
20
- <div className="flex-shrink-0 border-b border-gray-200">
20
+ <div className="flex-shrink-0 border-b border-[rgb(var(--ec-page-border))]">
21
21
  <button
22
22
  onClick={onToggle}
23
- className="w-full flex items-center justify-between px-4 py-1.5 text-left hover:bg-gray-50 transition-colors"
23
+ className="w-full flex items-center justify-between px-4 py-1.5 text-left hover:bg-[rgb(var(--ec-content-hover))] transition-colors"
24
24
  >
25
25
  <div className="flex items-center gap-2">
26
26
  <svg
27
27
  xmlns="http://www.w3.org/2000/svg"
28
- className="h-4 w-4 text-gray-600"
28
+ className="h-4 w-4 text-[rgb(var(--ec-page-text-muted))]"
29
29
  fill="none"
30
30
  viewBox="0 0 24 24"
31
31
  stroke="currentColor"
32
32
  >
33
33
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
34
34
  </svg>
35
- <span className="text-xs font-semibold text-gray-900">Producers & Consumers</span>
36
- <span className="inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-700">
35
+ <span className="text-xs font-semibold text-[rgb(var(--ec-page-text))]">Producers & Consumers</span>
36
+ <span className="inline-flex items-center rounded-full bg-[rgb(var(--ec-content-hover))] px-2 py-0.5 text-xs font-medium text-[rgb(var(--ec-page-text-muted))]">
37
37
  {totalCount} services
38
38
  </span>
39
39
  </div>
40
- {isExpanded ? <ChevronUpIcon className="h-4 w-4 text-gray-600" /> : <ChevronDownIcon className="h-4 w-4 text-gray-600" />}
40
+ {isExpanded ? (
41
+ <ChevronUpIcon className="h-4 w-4 text-[rgb(var(--ec-page-text-muted))]" />
42
+ ) : (
43
+ <ChevronDownIcon className="h-4 w-4 text-[rgb(var(--ec-page-text-muted))]" />
44
+ )}
41
45
  </button>
42
46
 
43
47
  {isExpanded && (
44
- <div className="px-4 pb-2 bg-gray-50">
48
+ <div className="px-4 pb-2 bg-[rgb(var(--ec-content-hover))]">
45
49
  {producers.length > 0 && (
46
50
  <div className="mb-3">
47
- <h4 className="text-xs font-semibold text-gray-900 mb-2">Producers ({producers.length})</h4>
51
+ <h4 className="text-xs font-semibold text-[rgb(var(--ec-page-text))] mb-2">Producers ({producers.length})</h4>
48
52
  <div className="flex flex-wrap gap-2">
49
53
  {producers.map((producer: Producer, idx: number) => (
50
54
  <a
51
55
  key={`${producer.id}-${idx}`}
52
56
  href={buildUrl(`/docs/services/${producer.id}/${producer.version}`)}
53
- className="inline-flex items-center gap-1.5 pl-1 pr-3 py-1 text-xs font-medium text-gray-700 bg-white border border-gray-200 rounded-full hover:border-gray-300 hover:shadow-sm transition-all"
57
+ className="inline-flex items-center gap-1.5 pl-1 pr-3 py-1 text-xs font-medium text-[rgb(var(--ec-page-text))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-full hover:border-pink-400 dark:hover:border-pink-500 hover:shadow-sm transition-all"
54
58
  title={`View ${producer.id}`}
55
59
  >
56
60
  <div className="flex items-center justify-center w-5 h-5 bg-gradient-to-b from-pink-500 to-pink-600 rounded-full">
57
61
  <ServerIcon className="h-3 w-3 text-white" />
58
62
  </div>
59
63
  <span className="font-medium">{producer.id}</span>
60
- <span className="text-gray-500 text-[11px]">v{producer.version}</span>
64
+ <span className="text-[rgb(var(--ec-page-text-muted))] text-[11px]">v{producer.version}</span>
61
65
  </a>
62
66
  ))}
63
67
  </div>
@@ -65,20 +69,20 @@ export default function ProducersConsumersSection({ message, isExpanded, onToggl
65
69
  )}
66
70
  {consumers.length > 0 && (
67
71
  <div>
68
- <h4 className="text-xs font-semibold text-gray-900 mb-2">Consumers ({consumers.length})</h4>
72
+ <h4 className="text-xs font-semibold text-[rgb(var(--ec-page-text))] mb-2">Consumers ({consumers.length})</h4>
69
73
  <div className="flex flex-wrap gap-2">
70
74
  {consumers.map((consumer: Consumer, idx: number) => (
71
75
  <a
72
76
  key={`${consumer.id}-${idx}`}
73
77
  href={buildUrl(`/docs/services/${consumer.id}/${consumer.version}`)}
74
- className="inline-flex items-center gap-1.5 pl-1 pr-3 py-1 text-xs font-medium text-gray-700 bg-white border border-gray-200 rounded-full hover:border-gray-300 hover:shadow-sm transition-all"
78
+ className="inline-flex items-center gap-1.5 pl-1 pr-3 py-1 text-xs font-medium text-[rgb(var(--ec-page-text))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-full hover:border-pink-400 dark:hover:border-pink-500 hover:shadow-sm transition-all"
75
79
  title={`View ${consumer.id}`}
76
80
  >
77
81
  <div className="flex items-center justify-center w-5 h-5 bg-gradient-to-b from-pink-500 to-pink-600 rounded-full">
78
82
  <ServerIcon className="h-3 w-3 text-white" />
79
83
  </div>
80
84
  <span className="font-medium">{consumer.id}</span>
81
- <span className="text-gray-500 text-[11px]">v{consumer.version}</span>
85
+ <span className="text-[rgb(var(--ec-page-text-muted))] text-[11px]">v{consumer.version}</span>
82
86
  </a>
83
87
  ))}
84
88
  </div>
@@ -1,11 +1,13 @@
1
1
  import { ClipboardDocumentIcon, ArrowsPointingOutIcon } from '@heroicons/react/24/outline';
2
2
  import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
3
- import { oneLight as syntaxHighlighterStyle } from 'react-syntax-highlighter/dist/cjs/styles/prism';
3
+ import { oneDark } from 'react-syntax-highlighter/dist/cjs/styles/prism';
4
+ import { oneLight } from 'react-syntax-highlighter/dist/cjs/styles/prism';
4
5
  import { buildUrl } from '@utils/url-builder';
5
6
  import JSONSchemaViewer from './JSONSchemaViewer';
6
7
  import AvroSchemaViewer from './AvroSchemaViewer';
7
8
  import { getLanguageForHighlight } from './utils';
8
9
  import type { SchemaItem } from './types';
10
+ import { useState, useEffect } from 'react';
9
11
 
10
12
  interface SchemaContentViewerProps {
11
13
  message: SchemaItem;
@@ -28,9 +30,34 @@ export default function SchemaContentViewer({
28
30
  showRequired = false,
29
31
  onOpenFullscreen,
30
32
  }: SchemaContentViewerProps) {
33
+ const [isDarkMode, setIsDarkMode] = useState(false);
34
+
35
+ useEffect(() => {
36
+ // Check initial theme
37
+ const checkTheme = () => {
38
+ const theme = document.documentElement.getAttribute('data-theme');
39
+ setIsDarkMode(theme === 'dark');
40
+ };
41
+
42
+ checkTheme();
43
+
44
+ // Watch for theme changes
45
+ const observer = new MutationObserver((mutations) => {
46
+ mutations.forEach((mutation) => {
47
+ if (mutation.attributeName === 'data-theme') {
48
+ checkTheme();
49
+ }
50
+ });
51
+ });
52
+
53
+ observer.observe(document.documentElement, { attributes: true });
54
+
55
+ return () => observer.disconnect();
56
+ }, []);
57
+
31
58
  if (!message.schemaContent) {
32
59
  return (
33
- <div className="flex items-center justify-center h-full text-gray-500">
60
+ <div className="flex items-center justify-center h-full text-[rgb(var(--ec-page-text-muted))]">
34
61
  <p className="text-sm">No schema content available</p>
35
62
  </div>
36
63
  );
@@ -47,7 +74,7 @@ export default function SchemaContentViewer({
47
74
  }
48
75
 
49
76
  return (
50
- <div className="h-full overflow-auto p-3 relative bg-white border border-gray-200 rounded-lg">
77
+ <div className="h-full overflow-auto p-3 relative bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-lg">
51
78
  <div className="absolute top-5 right-5 z-10 flex items-center gap-2">
52
79
  {message.collection === 'services' &&
53
80
  (() => {
@@ -67,7 +94,7 @@ export default function SchemaContentViewer({
67
94
  return (
68
95
  <a
69
96
  href={specUrl}
70
- className="inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-gray-700 bg-white border border-gray-300 hover:bg-gray-50 rounded-md transition-colors shadow-sm"
97
+ className="inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))] hover:text-[rgb(var(--ec-page-text))] rounded-md transition-colors shadow-sm"
71
98
  title="View full specification"
72
99
  >
73
100
  <svg
@@ -91,7 +118,7 @@ export default function SchemaContentViewer({
91
118
  {onOpenFullscreen && (
92
119
  <button
93
120
  onClick={onOpenFullscreen}
94
- className="inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-gray-700 bg-white border border-gray-300 hover:bg-gray-50 rounded-md transition-colors shadow-sm"
121
+ className="inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))] hover:text-[rgb(var(--ec-page-text))] rounded-md transition-colors shadow-sm"
95
122
  title="Open in fullscreen"
96
123
  >
97
124
  <ArrowsPointingOutIcon className="h-3.5 w-3.5" />
@@ -100,7 +127,7 @@ export default function SchemaContentViewer({
100
127
  )}
101
128
  <button
102
129
  onClick={onCopy}
103
- className="inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-gray-700 bg-white border border-gray-300 hover:bg-gray-50 rounded-md transition-colors shadow-sm"
130
+ className="inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))] hover:text-[rgb(var(--ec-page-text))] rounded-md transition-colors shadow-sm"
104
131
  title="Copy code"
105
132
  >
106
133
  <ClipboardDocumentIcon className="h-3.5 w-3.5" />
@@ -109,7 +136,7 @@ export default function SchemaContentViewer({
109
136
  </div>
110
137
  <SyntaxHighlighter
111
138
  language={getLanguageForHighlight(message.schemaExtension)}
112
- style={syntaxHighlighterStyle}
139
+ style={isDarkMode ? oneDark : oneLight}
113
140
  customStyle={{
114
141
  margin: 0,
115
142
  padding: '0.75rem',
@@ -119,8 +146,8 @@ export default function SchemaContentViewer({
119
146
  lineHeight: '1.5',
120
147
  height: '100%',
121
148
  overflow: 'auto',
149
+ background: 'rgb(var(--ec-code-bg))',
122
150
  }}
123
- className="bg-white border border-gray-200 rounded-lg"
124
151
  showLineNumbers={true}
125
152
  wrapLines={true}
126
153
  wrapLongLines={true}
@@ -50,7 +50,7 @@ export default function SchemaDetailsHeader({
50
50
  const iconName = ext === 'json' ? 'json-schema' : ext;
51
51
 
52
52
  return (
53
- <div className="flex-shrink-0 border-b border-gray-200 bg-white">
53
+ <div className="flex-shrink-0 border-b border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))]">
54
54
  {/* Main Header */}
55
55
  <div className="px-4 py-3">
56
56
  <div className="flex items-start justify-between gap-4">
@@ -58,19 +58,19 @@ export default function SchemaDetailsHeader({
58
58
  {/* Title Row */}
59
59
  <div className="flex items-start gap-3">
60
60
  <div
61
- className={`flex-shrink-0 flex items-center justify-center w-9 h-9 rounded-lg bg-${color}-50 border border-${color}-100 mt-0.5`}
61
+ className={`flex-shrink-0 flex items-center justify-center w-9 h-9 rounded-lg bg-${color}-50 dark:bg-${color}-500/10 border border-${color}-100 dark:border-${color}-500/30 mt-0.5`}
62
62
  >
63
- <Icon className={`h-4.5 w-4.5 text-${color}-600`} />
63
+ <Icon className={`h-4.5 w-4.5 text-${color}-600 dark:text-${color}-400`} />
64
64
  </div>
65
65
  <div className="min-w-0 flex-1">
66
66
  <div className="flex items-center gap-2">
67
- <h2 className="text-base font-semibold text-gray-900 truncate">{message.data.name}</h2>
67
+ <h2 className="text-base font-semibold text-[rgb(var(--ec-page-text))] truncate">{message.data.name}</h2>
68
68
  {hasMultipleVersions ? (
69
69
  <div className="relative flex-shrink-0">
70
70
  <select
71
71
  value={selectedVersion || message.data.version}
72
72
  onChange={(e) => onVersionChange(e.target.value)}
73
- className="appearance-none text-xs font-medium text-gray-600 bg-gray-50 border border-gray-200 rounded-md pl-2.5 pr-7 py-1 focus:outline-none focus:ring-1 focus:ring-gray-300 focus:border-gray-300 cursor-pointer hover:bg-gray-100 transition-colors"
73
+ className="appearance-none text-xs font-medium text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-content-hover))] border border-[rgb(var(--ec-page-border))] rounded-md pl-2.5 pr-7 py-1 focus:outline-none focus:ring-1 focus:ring-[rgb(var(--ec-accent))] focus:border-[rgb(var(--ec-accent))] cursor-pointer hover:bg-[rgb(var(--ec-input-bg))] transition-colors"
74
74
  >
75
75
  {availableVersions.map((v) => (
76
76
  <option key={v.data.version} value={v.data.version}>
@@ -78,10 +78,10 @@ export default function SchemaDetailsHeader({
78
78
  </option>
79
79
  ))}
80
80
  </select>
81
- <ClockIcon className="absolute right-2 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-gray-400 pointer-events-none" />
81
+ <ClockIcon className="absolute right-2 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-[rgb(var(--ec-icon-color))] pointer-events-none" />
82
82
  </div>
83
83
  ) : (
84
- <span className="text-xs text-gray-500 flex-shrink-0 font-medium bg-gray-50 px-2 py-1 rounded-md border border-gray-200">
84
+ <span className="text-xs text-[rgb(var(--ec-page-text-muted))] flex-shrink-0 font-medium bg-[rgb(var(--ec-content-hover))] px-2 py-1 rounded-md border border-[rgb(var(--ec-page-border))]">
85
85
  v{message.data.version}
86
86
  </span>
87
87
  )}
@@ -89,11 +89,11 @@ export default function SchemaDetailsHeader({
89
89
  {/* Tags */}
90
90
  <div className="flex items-center gap-1.5 mt-1">
91
91
  <span
92
- className={`inline-flex items-center px-1.5 py-0.5 rounded text-[11px] font-medium bg-${color}-50 text-${color}-700 border border-${color}-100`}
92
+ className={`inline-flex items-center px-1.5 py-0.5 rounded text-[11px] font-medium bg-${color}-50 dark:bg-${color}-500/10 text-${color}-700 dark:text-${color}-400 border border-${color}-100 dark:border-${color}-500/30`}
93
93
  >
94
94
  {message.collection}
95
95
  </span>
96
- <span className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] font-medium bg-gray-50 text-gray-600 border border-gray-100">
96
+ <span className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] font-medium bg-[rgb(var(--ec-content-hover))] text-[rgb(var(--ec-page-text-muted))] border border-[rgb(var(--ec-page-border))]">
97
97
  {hasSchemaIcon && (
98
98
  <img src={buildUrl(`/icons/${iconName}.svg`, true)} alt={`${ext} icon`} className="h-3 w-3 opacity-70" />
99
99
  )}
@@ -101,7 +101,9 @@ export default function SchemaDetailsHeader({
101
101
  </span>
102
102
  </div>
103
103
  {/* Summary */}
104
- {message.data.summary && <p className="text-xs text-gray-500 mt-1.5 line-clamp-1">{message.data.summary}</p>}
104
+ {message.data.summary && (
105
+ <p className="text-xs text-[rgb(var(--ec-page-text-muted))] mt-1.5 line-clamp-1">{message.data.summary}</p>
106
+ )}
105
107
  </div>
106
108
  </div>
107
109
  </div>
@@ -109,7 +111,7 @@ export default function SchemaDetailsHeader({
109
111
  {/* View Docs Button */}
110
112
  <a
111
113
  href={buildUrl(`/docs/${message.collection}/${message.data.id}/${message.data.version}`)}
112
- className="flex-shrink-0 inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-gray-600 bg-white border border-gray-200 rounded-md hover:bg-gray-50 hover:text-gray-900 transition-colors"
114
+ className="flex-shrink-0 inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-md hover:bg-[rgb(var(--ec-content-hover))] hover:text-[rgb(var(--ec-page-text))] transition-colors"
113
115
  >
114
116
  View docs
115
117
  <ArrowTopRightOnSquareIcon className="h-3.5 w-3.5" />
@@ -118,13 +120,15 @@ export default function SchemaDetailsHeader({
118
120
  </div>
119
121
 
120
122
  {/* Action Bar */}
121
- <div className="px-4 py-2 bg-gray-50/50 border-t border-gray-100 flex items-center justify-between">
123
+ <div className="px-4 py-2 bg-[rgb(var(--ec-content-hover))] border-t border-[rgb(var(--ec-page-border))] flex items-center justify-between">
122
124
  {/* View Mode Toggle */}
123
- <div className="flex items-center gap-0.5 p-0.5 bg-gray-100/80 rounded-md">
125
+ <div className="flex items-center gap-0.5 p-0.5 bg-[rgb(var(--ec-input-bg))] border border-[rgb(var(--ec-page-border))] rounded-md">
124
126
  <button
125
127
  onClick={() => onViewModeChange('code')}
126
128
  className={`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded transition-all ${
127
- schemaViewMode === 'code' ? 'bg-white text-gray-900 shadow-sm' : 'text-gray-500 hover:text-gray-700'
129
+ schemaViewMode === 'code'
130
+ ? 'bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] shadow-sm'
131
+ : 'text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]'
128
132
  }`}
129
133
  title="View raw code"
130
134
  >
@@ -135,7 +139,9 @@ export default function SchemaDetailsHeader({
135
139
  <button
136
140
  onClick={() => onViewModeChange('schema')}
137
141
  className={`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded transition-all ${
138
- schemaViewMode === 'schema' ? 'bg-white text-gray-900 shadow-sm' : 'text-gray-500 hover:text-gray-700'
142
+ schemaViewMode === 'schema'
143
+ ? 'bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] shadow-sm'
144
+ : 'text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]'
139
145
  }`}
140
146
  title="View as schema"
141
147
  >
@@ -147,7 +153,9 @@ export default function SchemaDetailsHeader({
147
153
  <button
148
154
  onClick={() => onViewModeChange('diff')}
149
155
  className={`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded transition-all ${
150
- schemaViewMode === 'diff' ? 'bg-white text-gray-900 shadow-sm' : 'text-gray-500 hover:text-gray-700'
156
+ schemaViewMode === 'diff'
157
+ ? 'bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] shadow-sm'
158
+ : 'text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]'
151
159
  }`}
152
160
  title="View version diffs"
153
161
  >
@@ -155,7 +163,9 @@ export default function SchemaDetailsHeader({
155
163
  History
156
164
  <span
157
165
  className={`ml-0.5 px-1 py-0.5 rounded text-[10px] tabular-nums ${
158
- schemaViewMode === 'diff' ? 'bg-gray-100 text-gray-600' : 'bg-gray-200/60 text-gray-500'
166
+ schemaViewMode === 'diff'
167
+ ? 'bg-[rgb(var(--ec-content-hover))] text-[rgb(var(--ec-page-text-muted))]'
168
+ : 'bg-[rgb(var(--ec-input-bg))] text-[rgb(var(--ec-icon-color))]'
159
169
  }`}
160
170
  >
161
171
  {diffCount}
@@ -165,7 +175,9 @@ export default function SchemaDetailsHeader({
165
175
  <button
166
176
  onClick={() => onViewModeChange('api')}
167
177
  className={`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded transition-all ${
168
- schemaViewMode === 'api' ? 'bg-white text-gray-900 shadow-sm' : 'text-gray-500 hover:text-gray-700'
178
+ schemaViewMode === 'api'
179
+ ? 'bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] shadow-sm'
180
+ : 'text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]'
169
181
  }`}
170
182
  title="API access"
171
183
  >
@@ -180,8 +192,8 @@ export default function SchemaDetailsHeader({
180
192
  onClick={onCopy}
181
193
  className={`inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-md transition-all ${
182
194
  isCopied
183
- ? 'bg-green-50 text-green-600 border border-green-200'
184
- : 'text-gray-500 bg-white border border-gray-200 hover:bg-gray-50 hover:text-gray-700'
195
+ ? 'bg-green-50 dark:bg-green-500/10 text-green-600 dark:text-green-400 border border-green-200 dark:border-green-500/30'
196
+ : 'text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))] hover:text-[rgb(var(--ec-page-text))]'
185
197
  }`}
186
198
  title="Copy schema to clipboard"
187
199
  >
@@ -199,7 +211,7 @@ export default function SchemaDetailsHeader({
199
211
  </button>
200
212
  <button
201
213
  onClick={onDownload}
202
- className="inline-flex items-center gap-1 px-2 py-1 text-xs font-medium text-gray-500 bg-white border border-gray-200 rounded-md hover:bg-gray-50 hover:text-gray-700 transition-all"
214
+ className="inline-flex items-center gap-1 px-2 py-1 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-md hover:bg-[rgb(var(--ec-content-hover))] hover:text-[rgb(var(--ec-page-text))] transition-all"
203
215
  title="Download schema file"
204
216
  >
205
217
  <ArrowDownTrayIcon className="h-3.5 w-3.5" />
@@ -142,7 +142,7 @@ export default function SchemaDetailsPanel({
142
142
  const isCopied = copiedId === message.data.id;
143
143
 
144
144
  return (
145
- <div className="h-full flex flex-col bg-white overflow-hidden">
145
+ <div className="h-full flex flex-col bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] overflow-hidden">
146
146
  {/* Header */}
147
147
  <SchemaDetailsHeader
148
148
  message={message}
@@ -351,14 +351,14 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
351
351
  {/* Split View - Full Height */}
352
352
  <div className="flex-1 flex gap-4 overflow-hidden">
353
353
  {/* Left: Schema List */}
354
- <div className="w-[320px] flex-shrink-0 flex flex-col bg-white border border-gray-200 rounded-lg overflow-hidden shadow-sm">
354
+ <div className="w-[320px] flex-shrink-0 flex flex-col bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-lg overflow-hidden shadow-sm">
355
355
  {/* Search Header */}
356
- <div className="flex-shrink-0 p-3 border-b border-gray-200">
356
+ <div className="flex-shrink-0 p-3 border-b border-[rgb(var(--ec-page-border))]">
357
357
  {/* Search + Format Filter Row */}
358
358
  <div className="flex items-center gap-2">
359
359
  <div className="relative flex-1">
360
360
  <div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
361
- <MagnifyingGlassIcon className="h-4 w-4 text-gray-400" />
361
+ <MagnifyingGlassIcon className="h-4 w-4 text-[rgb(var(--ec-icon-color))]" />
362
362
  </div>
363
363
  <input
364
364
  ref={searchInputRef}
@@ -366,11 +366,11 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
366
366
  placeholder="Search schemas..."
367
367
  value={searchQuery}
368
368
  onChange={(e) => setSearchQuery(e.target.value)}
369
- className="w-full rounded-md border border-gray-200 bg-white py-2 pl-9 pr-8 text-sm placeholder:text-gray-400 focus:border-gray-300 focus:outline-none focus:ring-1 focus:ring-gray-300 transition-all"
369
+ className="w-full rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-input-bg))] py-2 pl-9 pr-8 text-sm text-[rgb(var(--ec-page-text))] placeholder:text-[rgb(var(--ec-icon-color))] focus:border-[rgb(var(--ec-accent))] focus:outline-none focus:ring-1 focus:ring-[rgb(var(--ec-accent)/0.3)] transition-all"
370
370
  />
371
371
  {searchQuery && (
372
372
  <button onClick={() => setSearchQuery('')} className="absolute inset-y-0 right-0 flex items-center pr-2.5">
373
- <XMarkIcon className="h-4 w-4 text-gray-400 hover:text-gray-600" />
373
+ <XMarkIcon className="h-4 w-4 text-[rgb(var(--ec-icon-color))] hover:text-[rgb(var(--ec-page-text))]" />
374
374
  </button>
375
375
  )}
376
376
  </div>
@@ -379,7 +379,7 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
379
379
  <select
380
380
  value={selectedSchemaType}
381
381
  onChange={(e) => setSelectedSchemaType(e.target.value)}
382
- className="flex-shrink-0 text-xs font-medium text-gray-600 bg-white border border-gray-200 rounded-md px-2 py-2 focus:outline-none focus:ring-1 focus:ring-gray-300 focus:border-gray-300 cursor-pointer hover:bg-gray-50 transition-colors"
382
+ className="flex-shrink-0 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] bg-[rgb(var(--ec-input-bg))] border border-[rgb(var(--ec-page-border))] rounded-md px-2 py-2 focus:outline-none focus:ring-1 focus:ring-[rgb(var(--ec-accent)/0.3)] focus:border-[rgb(var(--ec-accent))] cursor-pointer hover:bg-[rgb(var(--ec-content-hover))] transition-colors"
383
383
  >
384
384
  <option value="all">All formats</option>
385
385
  {schemaTypes.map((type) => {
@@ -408,14 +408,16 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
408
408
  onClick={() => toggleType('events')}
409
409
  className={`inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-all border ${
410
410
  selectedTypes.has('events')
411
- ? 'bg-orange-50 text-orange-700 border-orange-200'
412
- : 'text-gray-600 border-gray-200 hover:bg-gray-50'
411
+ ? 'bg-orange-50 dark:bg-orange-500/10 text-orange-700 dark:text-orange-300 border-orange-200 dark:border-orange-500/30'
412
+ : 'text-[rgb(var(--ec-page-text-muted))] border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))]'
413
413
  }`}
414
414
  title="Events"
415
415
  >
416
416
  <BoltIcon className={`h-3.5 w-3.5 ${selectedTypes.has('events') ? 'text-orange-500' : 'text-orange-400'}`} />
417
417
  <span>Events</span>
418
- <span className={`tabular-nums ${selectedTypes.has('events') ? 'text-orange-500' : 'text-gray-400'}`}>
418
+ <span
419
+ className={`tabular-nums ${selectedTypes.has('events') ? 'text-orange-500' : 'text-[rgb(var(--ec-icon-color))]'}`}
420
+ >
419
421
  {stats.events}
420
422
  </span>
421
423
  </button>
@@ -425,8 +427,8 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
425
427
  onClick={() => toggleType('commands')}
426
428
  className={`inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-all border ${
427
429
  selectedTypes.has('commands')
428
- ? 'bg-blue-50 text-blue-700 border-blue-200'
429
- : 'text-gray-600 border-gray-200 hover:bg-gray-50'
430
+ ? 'bg-blue-50 dark:bg-blue-500/10 text-blue-700 dark:text-blue-300 border-blue-200 dark:border-blue-500/30'
431
+ : 'text-[rgb(var(--ec-page-text-muted))] border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))]'
430
432
  }`}
431
433
  title="Commands"
432
434
  >
@@ -434,7 +436,9 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
434
436
  className={`h-3.5 w-3.5 ${selectedTypes.has('commands') ? 'text-blue-500' : 'text-blue-400'}`}
435
437
  />
436
438
  <span>Commands</span>
437
- <span className={`tabular-nums ${selectedTypes.has('commands') ? 'text-blue-500' : 'text-gray-400'}`}>
439
+ <span
440
+ className={`tabular-nums ${selectedTypes.has('commands') ? 'text-blue-500' : 'text-[rgb(var(--ec-icon-color))]'}`}
441
+ >
438
442
  {stats.commands}
439
443
  </span>
440
444
  </button>
@@ -444,8 +448,8 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
444
448
  onClick={() => toggleType('queries')}
445
449
  className={`inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-all border ${
446
450
  selectedTypes.has('queries')
447
- ? 'bg-green-50 text-green-700 border-green-200'
448
- : 'text-gray-600 border-gray-200 hover:bg-gray-50'
451
+ ? 'bg-green-50 dark:bg-green-500/10 text-green-700 dark:text-green-300 border-green-200 dark:border-green-500/30'
452
+ : 'text-[rgb(var(--ec-page-text-muted))] border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))]'
449
453
  }`}
450
454
  title="Queries"
451
455
  >
@@ -453,7 +457,9 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
453
457
  className={`h-3.5 w-3.5 ${selectedTypes.has('queries') ? 'text-green-500' : 'text-green-400'}`}
454
458
  />
455
459
  <span>Queries</span>
456
- <span className={`tabular-nums ${selectedTypes.has('queries') ? 'text-green-500' : 'text-gray-400'}`}>
460
+ <span
461
+ className={`tabular-nums ${selectedTypes.has('queries') ? 'text-green-500' : 'text-[rgb(var(--ec-icon-color))]'}`}
462
+ >
457
463
  {stats.queries}
458
464
  </span>
459
465
  </button>
@@ -463,16 +469,18 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
463
469
  onClick={() => toggleType('specifications')}
464
470
  className={`inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-all border ${
465
471
  selectedTypes.has('specifications')
466
- ? 'bg-purple-50 text-purple-700 border-purple-200'
467
- : 'text-gray-600 border-gray-200 hover:bg-gray-50'
472
+ ? 'bg-[rgb(var(--ec-accent-subtle))] text-[rgb(var(--ec-accent-text))] border-[rgb(var(--ec-accent)/0.3)]'
473
+ : 'text-[rgb(var(--ec-page-text-muted))] border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))]'
468
474
  }`}
469
475
  title="Specifications (OpenAPI, AsyncAPI, etc.)"
470
476
  >
471
477
  <CodeBracketIcon
472
- className={`h-3.5 w-3.5 ${selectedTypes.has('specifications') ? 'text-purple-500' : 'text-purple-400'}`}
478
+ className={`h-3.5 w-3.5 ${selectedTypes.has('specifications') ? 'text-[rgb(var(--ec-accent))]' : 'text-[rgb(var(--ec-accent)/0.7)]'}`}
473
479
  />
474
480
  <span>Specs</span>
475
- <span className={`tabular-nums ${selectedTypes.has('specifications') ? 'text-purple-500' : 'text-gray-400'}`}>
481
+ <span
482
+ className={`tabular-nums ${selectedTypes.has('specifications') ? 'text-[rgb(var(--ec-accent))]' : 'text-[rgb(var(--ec-icon-color))]'}`}
483
+ >
476
484
  {stats.specifications}
477
485
  </span>
478
486
  </button>
@@ -481,8 +489,8 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
481
489
  </div>
482
490
 
483
491
  {/* Results Count Bar */}
484
- <div className="flex-shrink-0 px-3 py-1.5 bg-gray-50 border-b border-gray-100 flex items-center justify-between">
485
- <span className="text-xs text-gray-500">
492
+ <div className="flex-shrink-0 px-3 py-1.5 bg-[rgb(var(--ec-content-hover))] border-b border-[rgb(var(--ec-page-border))] flex items-center justify-between">
493
+ <span className="text-xs text-[rgb(var(--ec-page-text-muted))]">
486
494
  {filteredMessages.length === stats.total
487
495
  ? `${stats.total} schemas`
488
496
  : `${filteredMessages.length} of ${stats.total} schemas`}
@@ -494,7 +502,7 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
494
502
  clearTypeFilters();
495
503
  setSelectedSchemaType('all');
496
504
  }}
497
- className="text-xs text-gray-500 hover:text-gray-700"
505
+ className="text-xs text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]"
498
506
  >
499
507
  Clear filters
500
508
  </button>
@@ -504,7 +512,7 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
504
512
  {/* Schema List - Independently Scrollable */}
505
513
  <div className="flex-1 overflow-y-auto">
506
514
  {paginatedMessages.length > 0 ? (
507
- <div className="divide-y divide-gray-100">
515
+ <div className="divide-y divide-[rgb(var(--ec-page-border))]">
508
516
  {paginatedMessages.map((message) => {
509
517
  // For services, also check spec type to determine if selected
510
518
  const isSelected =
@@ -536,11 +544,11 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
536
544
  </div>
537
545
  ) : (
538
546
  <div className="flex flex-col items-center justify-center h-full p-6 text-center">
539
- <div className="flex items-center justify-center w-12 h-12 rounded-full bg-gray-100 mb-3">
540
- <MagnifyingGlassIcon className="h-6 w-6 text-gray-400" />
547
+ <div className="flex items-center justify-center w-12 h-12 rounded-full bg-[rgb(var(--ec-content-hover))] mb-3">
548
+ <MagnifyingGlassIcon className="h-6 w-6 text-[rgb(var(--ec-icon-color))]" />
541
549
  </div>
542
- <h3 className="text-sm font-semibold text-gray-900 mb-1">No schemas found</h3>
543
- <p className="text-xs text-gray-500 mb-3 max-w-[200px]">
550
+ <h3 className="text-sm font-semibold text-[rgb(var(--ec-page-text))] mb-1">No schemas found</h3>
551
+ <p className="text-xs text-[rgb(var(--ec-page-text-muted))] mb-3 max-w-[200px]">
544
552
  {searchQuery ? `No results for "${searchQuery}"` : 'Try adjusting your filters'}
545
553
  </p>
546
554
  {(searchQuery || selectedTypes.size > 0 || selectedSchemaType !== 'all') && (
@@ -550,7 +558,7 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
550
558
  clearTypeFilters();
551
559
  setSelectedSchemaType('all');
552
560
  }}
553
- className="text-xs font-medium text-gray-600 hover:text-gray-900"
561
+ className="text-xs font-medium text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]"
554
562
  >
555
563
  Clear filters
556
564
  </button>
@@ -564,7 +572,7 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
564
572
  </div>
565
573
 
566
574
  {/* Right: Schema Details */}
567
- <div className="flex-1 bg-white border border-gray-200 rounded-lg overflow-hidden">
575
+ <div className="flex-1 bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-lg overflow-hidden">
568
576
  {displayMessage ? (
569
577
  <SchemaDetailsPanel
570
578
  message={displayMessage}
@@ -576,11 +584,11 @@ export default function SchemaExplorer({ schemas, apiAccessEnabled = false }: Sc
576
584
  ) : (
577
585
  <div className="h-full flex items-center justify-center">
578
586
  <div className="text-center max-w-xs">
579
- <div className="flex items-center justify-center w-14 h-14 mx-auto mb-4 rounded-xl bg-gray-50 border border-gray-100">
580
- <DocumentTextIcon className="h-7 w-7 text-gray-400" />
587
+ <div className="flex items-center justify-center w-14 h-14 mx-auto mb-4 rounded-xl bg-[rgb(var(--ec-content-hover))] border border-[rgb(var(--ec-page-border))]">
588
+ <DocumentTextIcon className="h-7 w-7 text-[rgb(var(--ec-icon-color))]" />
581
589
  </div>
582
- <h3 className="text-sm font-semibold text-gray-900 mb-1">Select a schema</h3>
583
- <p className="text-sm text-gray-500 leading-relaxed">
590
+ <h3 className="text-sm font-semibold text-[rgb(var(--ec-page-text))] mb-1">Select a schema</h3>
591
+ <p className="text-sm text-[rgb(var(--ec-page-text-muted))] leading-relaxed">
584
592
  Choose a schema from the list to view details, compare versions, and access raw code
585
593
  </p>
586
594
  </div>