@eventcatalog/core 3.0.0 → 3.1.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 (108) 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-E5Q7TZYT.js → chunk-2WGZFERB.js} +1 -1
  6. package/dist/{chunk-VO5WYA44.js → chunk-ESUL7UE6.js} +1 -1
  7. package/dist/{chunk-KF5PARQK.js → chunk-I3CW5KQI.js} +1 -1
  8. package/dist/{chunk-EKGR533N.js → chunk-KBO4IL2D.js} +1 -1
  9. package/dist/{chunk-BYP43AAT.js → chunk-URR33SNK.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 +85 -69
  21. package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +1 -1
  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/custom-documentation/components/CustomDocsNav/components/NestedItem.tsx +15 -7
  80. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NoResultsFound.tsx +2 -2
  81. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/index.tsx +19 -15
  82. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +50 -17
  83. package/eventcatalog/src/layouts/DirectoryLayout.astro +11 -6
  84. package/eventcatalog/src/layouts/DiscoverLayout.astro +13 -8
  85. package/eventcatalog/src/layouts/Footer.astro +6 -6
  86. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +62 -14
  87. package/eventcatalog/src/pages/_index.astro +135 -179
  88. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +2 -2
  89. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +4 -4
  90. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +77 -63
  91. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +23 -24
  92. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +66 -50
  93. package/eventcatalog/src/pages/docs/custom/index.astro +2 -2
  94. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +25 -21
  95. package/eventcatalog/src/pages/docs/users/[id]/index.astro +25 -21
  96. package/eventcatalog/src/pages/schemas/explorer/index.astro +1 -1
  97. package/eventcatalog/src/pages/studio.astro +59 -31
  98. package/eventcatalog/src/remark-plugins/directives.ts +6 -6
  99. package/eventcatalog/src/remark-plugins/mermaid.ts +2 -2
  100. package/eventcatalog/src/stores/theme-store.ts +93 -0
  101. package/eventcatalog/src/styles/theme.css +255 -0
  102. package/eventcatalog/src/styles/themes/forest.css +230 -0
  103. package/eventcatalog/src/styles/themes/ocean.css +235 -0
  104. package/eventcatalog/src/styles/themes/sapphire.css +230 -0
  105. package/eventcatalog/src/styles/themes/sunset.css +230 -0
  106. package/eventcatalog/src/utils/feature.ts +4 -0
  107. package/eventcatalog/tailwind.config.mjs +6 -3
  108. package/package.json +1 -1
@@ -4,14 +4,14 @@ import { showEventCatalogBranding } from '@utils/feature';
4
4
  const { className } = Astro.props;
5
5
  ---
6
6
 
7
- <footer class={`relative py-4 space-y-8 border-t border-gray-300 ${className}`}>
7
+ <footer class={`relative py-4 space-y-8 border-t border-[rgb(var(--ec-page-border))] ${className}`}>
8
8
  {
9
9
  showEventCatalogBranding() && (
10
- <div class="flex justify-between items-center py-8 text-gray-500 text-sm font-light">
10
+ <div class="flex justify-between items-center py-8 text-[rgb(var(--ec-page-text-muted))] text-sm font-light">
11
11
  <div class="flex space-x-5">
12
12
  <a href="https://github.com/event-catalog/eventcatalog" target="_blank" aria-label="View EventCatalog on GitHub">
13
13
  <svg
14
- class="w-5 h-5 bg-gray-400 hover:bg-primary dark:hover:bg-gray-400"
14
+ class="w-5 h-5 bg-[rgb(var(--ec-icon-color))] hover:bg-[rgb(var(--ec-accent))]"
15
15
  style={`mask-image: url("${buildUrl('/icons/github.svg', true)}"); mask-repeat: no-repeat; mask-position: center center;`}
16
16
  aria-hidden="true"
17
17
  />
@@ -19,7 +19,7 @@ const { className } = Astro.props;
19
19
  <a href="https://x.com/event_catalog" target="_blank" aria-label="Follow EventCatalog on X (Twitter)">
20
20
  <span class="sr-only">X (Twitter)</span>
21
21
  <svg
22
- class="w-5 h-5 bg-gray-400 hover:bg-primary dark:hover:bg-gray-400"
22
+ class="w-5 h-5 bg-[rgb(var(--ec-icon-color))] hover:bg-[rgb(var(--ec-accent))]"
23
23
  style={`mask-image: url("${buildUrl('/icons/x-twitter.svg', true)}"); mask-repeat: no-repeat; mask-position: center center;`}
24
24
  aria-hidden="true"
25
25
  />
@@ -27,7 +27,7 @@ const { className } = Astro.props;
27
27
  <a href="https://www.youtube.com/@event-catalog" target="_blank" aria-label="Watch EventCatalog on YouTube">
28
28
  <span class="sr-only">YouTube</span>
29
29
  <svg
30
- class="w-5 h-5 bg-gray-400 hover:bg-primary dark:hover:bg-gray-400"
30
+ class="w-5 h-5 bg-[rgb(var(--ec-icon-color))] hover:bg-[rgb(var(--ec-accent))]"
31
31
  style={`mask-image: url("${buildUrl('/icons/youtube.svg', true)}"); mask-repeat: no-repeat; mask-position: center center;`}
32
32
  aria-hidden="true"
33
33
  />
@@ -35,7 +35,7 @@ const { className } = Astro.props;
35
35
  </div>
36
36
  <a
37
37
  target="_blank"
38
- class="hover:text-primary hover:underline text-gray-400 font-light not-prose"
38
+ class="hover:text-[rgb(var(--ec-accent))] hover:underline text-[rgb(var(--ec-icon-color))] font-light not-prose"
39
39
  href="https://eventcatalog.dev"
40
40
  >
41
41
  Powered by EventCatalog
@@ -27,6 +27,18 @@ import '@fontsource/inter';
27
27
  import '@fontsource/inter/400.css'; // Specify weight
28
28
  import '@fontsource/inter/700.css'; // Specify weight
29
29
 
30
+ // Theme CSS variables (must load before user styles)
31
+ import '../styles/theme.css';
32
+
33
+ // Theme files - imported so they're available, applied via data-catalog-theme attribute
34
+ import '../styles/themes/ocean.css';
35
+ import '../styles/themes/sapphire.css';
36
+ import '../styles/themes/sunset.css';
37
+ import '../styles/themes/forest.css';
38
+
39
+ // Get configured theme (default, ocean, etc.)
40
+ const catalogTheme = config.theme || 'default';
41
+
30
42
  import { ClientRouter } from 'astro:transitions';
31
43
 
32
44
  import { getCommands } from '@utils/collections/commands';
@@ -39,7 +51,7 @@ import { buildUrl } from '@utils/url-builder';
39
51
  import { getQueries } from '@utils/collections/queries';
40
52
  import { hasLandingPageForDocs } from '@utils/pages';
41
53
 
42
- import { isEventCatalogUpgradeEnabled, isEmbedEnabled } from '@utils/feature';
54
+ import { isEventCatalogUpgradeEnabled, isEmbedEnabled, isCustomStylesEnabled } from '@utils/feature';
43
55
 
44
56
  const catalogHasDefaultLandingPageForDocs = await hasLandingPageForDocs();
45
57
  const customDocs = await getCollection('customPages');
@@ -63,9 +75,11 @@ if (!catalogHasDefaultLandingPageForDocs) {
63
75
  }
64
76
 
65
77
  // Try and load any custom styles if they exist
66
- try {
67
- await import('../../eventcatalog.styles.css');
68
- } catch (error) {}
78
+ if (isCustomStylesEnabled()) {
79
+ try {
80
+ await import('../../eventcatalog.styles.css');
81
+ } catch (error) {}
82
+ }
69
83
 
70
84
  const currentPath = Astro.url.pathname;
71
85
 
@@ -173,8 +187,35 @@ const canPageBeEmbedded = isEmbedEnabled();
173
187
  ---
174
188
 
175
189
  <!doctype html>
176
- <html lang="en">
190
+ <html lang="en" data-catalog-theme={catalogTheme}>
177
191
  <head>
192
+ <!-- Inline script to prevent flash of wrong theme -->
193
+ <script is:inline define:vars={{ catalogTheme }}>
194
+ (function () {
195
+ function getSystemTheme() {
196
+ if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
197
+ return 'dark';
198
+ }
199
+ return 'light';
200
+ }
201
+
202
+ function applyTheme() {
203
+ // Check localStorage first, fall back to system preference
204
+ const stored = localStorage.getItem('eventcatalog-theme');
205
+ const theme = stored === 'light' || stored === 'dark' ? stored : getSystemTheme();
206
+ document.documentElement.setAttribute('data-theme', theme);
207
+ // Also ensure catalog theme is set (for page transitions)
208
+ document.documentElement.setAttribute('data-catalog-theme', catalogTheme);
209
+ }
210
+
211
+ // Apply on initial load
212
+ applyTheme();
213
+
214
+ // Apply after Astro page transitions
215
+ document.addEventListener('astro:after-swap', applyTheme);
216
+ document.addEventListener('astro:page-load', applyTheme);
217
+ })();
218
+ </script>
178
219
  <SEO title={`EventCatalog | ${title}`} description={description} ogTitle={title} />
179
220
  <style is:global>
180
221
  .sidebar-transition {
@@ -233,7 +274,7 @@ const canPageBeEmbedded = isEmbedEnabled();
233
274
  <div class="flex">
234
275
  <aside class="flex" id="eventcatalog-vertical-nav">
235
276
  <div
236
- class="fixed flex flex-col items-center w-14 h-screen py-3 bg-white bg-gradient-to-b from-white to-gray-100 border-r border-gray-200 z-20 shadow-md justify-between"
277
+ class="fixed flex flex-col items-center w-14 h-screen py-3 bg-[rgb(var(--ec-sidebar-bg))] bg-gradient-to-b from-[rgb(var(--ec-sidebar-bg))] to-[rgb(var(--ec-sidebar-bg-gradient))] border-r border-[rgb(var(--ec-sidebar-border))] z-20 shadow-md justify-between"
237
278
  >
238
279
  <nav class="flex flex-col h-[calc(100vh-70px)] justify-between">
239
280
  <div class="flex flex-col items-center flex-1 space-y-6">
@@ -246,7 +287,9 @@ const canPageBeEmbedded = isEmbedEnabled();
246
287
  href={item.href}
247
288
  aria-label={item.label}
248
289
  class={`p-1.5 inline-block transition-colors duration-200 rounded-lg ${
249
- item.current ? 'text-white bg-gray-900' : 'hover:bg-gray-800 hover:text-white text-gray-700'
290
+ item.current
291
+ ? 'text-[rgb(var(--ec-sidebar-active-text))] bg-[rgb(var(--ec-sidebar-active-bg))]'
292
+ : 'hover:bg-[rgb(var(--ec-sidebar-hover-bg))] hover:text-[rgb(var(--ec-sidebar-active-text))] text-[rgb(var(--ec-sidebar-text))]'
250
293
  }`}
251
294
  >
252
295
  <div class="has-tooltip">
@@ -263,7 +306,7 @@ const canPageBeEmbedded = isEmbedEnabled();
263
306
  })
264
307
  }
265
308
 
266
- <hr class="w-8 border-t border-gray-200" />
309
+ <hr class="w-8 border-t border-[rgb(var(--ec-sidebar-border))]" />
267
310
 
268
311
  {
269
312
  studioNavigationItem.length > 0 && (
@@ -272,7 +315,7 @@ const canPageBeEmbedded = isEmbedEnabled();
272
315
  data-role="nav-item"
273
316
  href={studioNavigationItem[0].href}
274
317
  aria-label={studioNavigationItem[0].label}
275
- class={`p-1.5 inline-block pt-1 pb-1 mt-0 mb-0 transition-colors duration-200 rounded-lg relative ${studioNavigationItem[0].current ? 'text-white bg-gray-900' : 'hover:bg-gray-800 hover:text-white text-gray-700'}`}
318
+ class={`p-1.5 inline-block pt-1 pb-1 mt-0 mb-0 transition-colors duration-200 rounded-lg relative ${studioNavigationItem[0].current ? 'text-[rgb(var(--ec-sidebar-active-text))] bg-[rgb(var(--ec-sidebar-active-bg))]' : 'hover:bg-[rgb(var(--ec-sidebar-hover-bg))] hover:text-[rgb(var(--ec-sidebar-active-text))] text-[rgb(var(--ec-sidebar-text))]'}`}
276
319
  >
277
320
  <div class="has-tooltip">
278
321
  <span
@@ -287,7 +330,7 @@ const canPageBeEmbedded = isEmbedEnabled();
287
330
  )
288
331
  }
289
332
 
290
- {studioNavigationItem.length > 0 && <hr class="w-8 border-t border-gray-200" />}
333
+ {studioNavigationItem.length > 0 && <hr class="w-8 border-t border-[rgb(var(--ec-sidebar-border))]" />}
291
334
 
292
335
  {
293
336
  premiumFeatures.map((item) => (
@@ -297,7 +340,9 @@ const canPageBeEmbedded = isEmbedEnabled();
297
340
  href={item.href}
298
341
  aria-label={item.label}
299
342
  class={`p-1.5 inline-block transition-colors duration-200 rounded-lg mb-8 relative ${
300
- item.current ? 'text-white bg-gray-900' : 'hover:bg-gray-800 hover:text-white text-gray-700'
343
+ item.current
344
+ ? 'text-[rgb(var(--ec-sidebar-active-text))] bg-[rgb(var(--ec-sidebar-active-bg))]'
345
+ : 'hover:bg-[rgb(var(--ec-sidebar-hover-bg))] hover:text-[rgb(var(--ec-sidebar-active-text))] text-[rgb(var(--ec-sidebar-text))]'
301
346
  }`}
302
347
  >
303
348
  <div class="has-tooltip">
@@ -328,7 +373,7 @@ const canPageBeEmbedded = isEmbedEnabled();
328
373
  data-role="nav-item"
329
374
  href={buildUrl('/plans')}
330
375
  aria-label="Upgrade EventCatalog"
331
- class={`p-1.5 inline-block transition-colors duration-200 rounded-lg ${currentPath.includes('/pro') ? 'text-white bg-gray-900' : 'bg-gray-200 hover:bg-gray-800 hover:text-white text-gray-700'}`}
376
+ class={`p-1.5 inline-block transition-colors duration-200 rounded-lg ${currentPath.includes('/pro') ? 'text-[rgb(var(--ec-sidebar-active-text))] bg-[rgb(var(--ec-sidebar-active-bg))]' : 'bg-[rgb(var(--ec-sidebar-bg-gradient))] hover:bg-[rgb(var(--ec-sidebar-hover-bg))] hover:text-[rgb(var(--ec-sidebar-active-text))] text-[rgb(var(--ec-sidebar-text))]'}`}
332
377
  >
333
378
  <div class="has-tooltip">
334
379
  <span
@@ -348,12 +393,15 @@ const canPageBeEmbedded = isEmbedEnabled();
348
393
 
349
394
  {
350
395
  showNestedSideBar && (
351
- <SideNav id="sidebar" class={`sidebar-transition h-content bg-white border-r border-gray-100 w-[320px] ml-14`} />
396
+ <SideNav
397
+ id="sidebar"
398
+ class={`sidebar-transition h-content bg-[rgb(var(--ec-sidebar-bg))] border-r border-[rgb(var(--ec-sidebar-border))] w-[320px] ml-14`}
399
+ />
352
400
  )
353
401
  }
354
402
  </aside>
355
403
  <main
356
- class={`sidebar-transition w-full max-h-content overflow-y-auto ${showNestedSideBar ? 'ml-0' : 'ml-14'}`}
404
+ class={`sidebar-transition w-full max-h-content overflow-y-auto bg-[rgb(var(--ec-page-bg))] ${showNestedSideBar ? 'ml-0' : 'ml-14'}`}
357
405
  id="content"
358
406
  >
359
407
  <slot />
@@ -77,9 +77,9 @@ const topTiles = [
77
77
  description: 'Business flows',
78
78
  href: buildUrl('/discover/flows'),
79
79
  icon: Workflow,
80
- bgColor: 'bg-purple-500',
81
- borderColor: 'border-purple-200',
82
- textColor: 'text-purple-600',
80
+ bgColor: 'bg-[rgb(var(--ec-accent))]',
81
+ borderColor: 'border-[rgb(var(--ec-accent)/0.3)]',
82
+ textColor: 'text-[rgb(var(--ec-accent))]',
83
83
  emptyText: 'No flows yet',
84
84
  addHref: 'https://www.eventcatalog.dev/docs/flows',
85
85
  },
@@ -91,71 +91,63 @@ const quickActions = [
91
91
  description: 'Browse all documented resources',
92
92
  icon: BookOpenText,
93
93
  href: getDefaultUrl('docs', 'domains'),
94
- iconBg: 'bg-blue-50',
95
- iconColor: 'text-blue-600',
96
- hoverBorder: 'hover:border-blue-300',
94
+ iconBg: 'bg-blue-50 dark:bg-blue-500/10',
95
+ iconColor: 'text-blue-600 dark:text-blue-400',
97
96
  },
98
97
  {
99
98
  title: 'Visualizer',
100
99
  description: 'Interactive architecture diagrams',
101
100
  icon: Workflow,
102
101
  href: getDefaultUrl('visualiser', 'domains'),
103
- iconBg: 'bg-purple-50',
104
- iconColor: 'text-purple-600',
105
- hoverBorder: 'hover:border-purple-300',
102
+ iconBg: 'bg-[rgb(var(--ec-accent-subtle))]',
103
+ iconColor: 'text-[rgb(var(--ec-accent))]',
106
104
  },
107
105
  {
108
106
  title: 'Discover',
109
107
  description: 'Search and filter all resources',
110
108
  icon: TableProperties,
111
109
  href: buildUrl('/discover/events'),
112
- iconBg: 'bg-teal-50',
113
- iconColor: 'text-teal-600',
114
- hoverBorder: 'hover:border-teal-300',
110
+ iconBg: 'bg-teal-50 dark:bg-teal-500/10',
111
+ iconColor: 'text-teal-600 dark:text-teal-400',
115
112
  },
116
113
  {
117
114
  title: 'Schema Explorer',
118
115
  description: 'Browse and compare schemas',
119
116
  icon: FileJson,
120
117
  href: buildUrl('/schemas/explorer'),
121
- iconBg: 'bg-amber-50',
122
- iconColor: 'text-amber-600',
123
- hoverBorder: 'hover:border-amber-300',
124
- },
125
- ];
126
-
127
- const learnLinks = [
128
- {
129
- title: 'Getting Started',
130
- description: 'Set up your first catalog',
131
- href: 'https://www.eventcatalog.dev/docs/development/getting-started/introduction',
132
- icon: BookOpenText,
118
+ iconBg: 'bg-amber-50 dark:bg-amber-500/10',
119
+ iconColor: 'text-amber-600 dark:text-amber-400',
133
120
  },
134
121
  {
135
- title: 'Generators & Plugins',
136
- description: 'AsyncAPI, OpenAPI integrations',
137
- href: 'https://www.eventcatalog.dev/integrations',
138
- icon: Zap,
122
+ title: 'Team Directory',
123
+ description: 'Ownership & contacts',
124
+ icon: BookUser,
125
+ href: buildUrl('/directory/users'),
126
+ iconBg: 'bg-orange-50 dark:bg-orange-500/10',
127
+ iconColor: 'text-orange-600 dark:text-orange-400',
139
128
  },
140
129
  {
141
- title: 'SDK & CLI',
142
- description: 'Programmatic catalog access',
130
+ title: 'API & SDK',
131
+ description: 'Programmatic access',
132
+ icon: Code2,
143
133
  href: 'https://www.eventcatalog.dev/docs/sdk',
144
- icon: Terminal,
134
+ iconBg: 'bg-indigo-50 dark:bg-indigo-500/10',
135
+ iconColor: 'text-indigo-600 dark:text-indigo-400',
136
+ external: true,
145
137
  },
146
138
  ];
147
139
  ---
148
140
 
149
141
  <VerticalSideBarLayout title="EventCatalog">
150
- <body class="min-h-screen bg-gray-50/50 font-inter">
142
+ <div class="min-h-screen font-inter">
151
143
  <!-- Hero Section -->
152
- <div class="relative bg-white border-b border-gray-200">
144
+ <div class="relative bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border-b border-[rgb(var(--ec-page-border))]">
153
145
  <main class="container px-6 lg:px-8 mx-auto py-10 max-w-[85em]">
154
146
  <div class="max-w-3xl">
155
- <h1 class="text-3xl md:text-4xl font-bold mb-3 text-gray-900 tracking-tight">
147
+ <h1 class="text-3xl md:text-4xl font-bold mb-3 text-[rgb(var(--ec-page-text))] tracking-tight">
156
148
  {config?.organizationName || 'EventCatalog'}
157
149
  </h1>
158
- <p class="text-base text-gray-600 leading-relaxed mb-6">
150
+ <p class="text-base text-[rgb(var(--ec-page-text-muted))] leading-relaxed mb-6">
159
151
  {
160
152
  config.tagline ||
161
153
  'Explore and understand your event-driven architecture. Browse documentation, visualize dependencies, and discover how your systems communicate.'
@@ -166,14 +158,14 @@ const learnLinks = [
166
158
  <div class="flex flex-wrap items-center gap-3">
167
159
  <a
168
160
  href={getDefaultUrl('docs', 'domains')}
169
- class="inline-flex items-center gap-2 px-5 py-2.5 bg-gray-900 text-white rounded-lg font-medium hover:bg-gray-800 transition-colors"
161
+ class="inline-flex items-center gap-2 px-5 py-2.5 bg-[rgb(var(--ec-button-bg))] text-[rgb(var(--ec-button-text))] rounded-lg font-medium hover:bg-[rgb(var(--ec-button-bg-hover))] transition-colors"
170
162
  >
171
163
  <BookOpenText className="w-4 h-4" />
172
164
  Explore Docs
173
165
  </a>
174
166
  <a
175
167
  href={getDefaultUrl('visualiser', 'domains')}
176
- class="inline-flex items-center gap-2 px-5 py-2.5 bg-white text-gray-700 border border-gray-300 rounded-lg font-medium hover:bg-gray-50 hover:border-gray-400 transition-colors"
168
+ class="inline-flex items-center gap-2 px-5 py-2.5 bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] border border-[rgb(var(--ec-page-border))] rounded-lg font-medium hover:bg-[rgb(var(--ec-content-hover))] hover:border-[rgb(var(--ec-accent))] transition-colors"
177
169
  >
178
170
  <Workflow className="w-4 h-4" />
179
171
  View Architecture
@@ -188,10 +180,13 @@ const learnLinks = [
188
180
  <!-- Architecture Stats -->
189
181
  <section class="mb-10">
190
182
  <div class="flex items-center justify-between mb-4">
191
- <h2 class="text-sm font-semibold uppercase tracking-wider text-gray-500">Your Catalog</h2>
183
+ <h2 class="text-sm font-semibold uppercase tracking-wider text-[rgb(var(--ec-page-text-muted))]">Your Catalog</h2>
192
184
  {
193
185
  hasContent && (
194
- <a href={buildUrl('/discover/events')} class="text-sm text-gray-500 hover:text-gray-700 flex items-center gap-1">
186
+ <a
187
+ href={buildUrl('/discover/events')}
188
+ class="text-sm text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] flex items-center gap-1"
189
+ >
195
190
  View all
196
191
  <ArrowRightIcon className="w-3 h-3" />
197
192
  </a>
@@ -204,31 +199,31 @@ const learnLinks = [
204
199
  tile.count > 0 ? (
205
200
  <a
206
201
  href={tile.href}
207
- class={`group relative bg-white p-5 rounded-xl border border-gray-200 hover:border-gray-300 hover:shadow-sm transition-all`}
202
+ class={`group relative bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] p-5 rounded-xl border border-[rgb(var(--ec-page-border))] hover:border-t-[rgb(var(--ec-accent))] hover:border-r-[rgb(var(--ec-accent))] hover:border-b-[rgb(var(--ec-accent))] hover:shadow-sm transition-all`}
208
203
  >
209
204
  <div class={`absolute left-0 top-0 bottom-0 w-1 ${tile.bgColor} rounded-l-xl`} />
210
205
  <div class="flex items-start justify-between mb-3">
211
- <div class={`p-2 rounded-lg ${tile.iconBg || 'bg-gray-100'}`}>
206
+ <div class={`p-2 rounded-lg ${tile.iconBg || 'bg-[rgb(var(--ec-content-hover))]'}`}>
212
207
  <tile.icon className={`w-4 h-4 ${tile.textColor}`} />
213
208
  </div>
214
- <ArrowRightIcon className="w-4 h-4 text-gray-300 group-hover:text-gray-500 transition-colors" />
209
+ <ArrowRightIcon className="w-4 h-4 text-[rgb(var(--ec-icon-color))] group-hover:text-[rgb(var(--ec-page-text-muted))] transition-colors" />
215
210
  </div>
216
- <div class="text-2xl font-bold text-gray-900 mb-0.5">{tile.count}</div>
217
- <div class="text-sm text-gray-500">{tile.description}</div>
211
+ <div class="text-2xl font-bold text-[rgb(var(--ec-page-text))] mb-0.5">{tile.count}</div>
212
+ <div class="text-sm text-[rgb(var(--ec-page-text-muted))]">{tile.description}</div>
218
213
  </a>
219
214
  ) : (
220
- <div class="relative bg-gray-50 p-5 rounded-xl border border-dashed border-gray-300">
221
- <div class={`absolute left-0 top-0 bottom-0 w-1 bg-gray-300 rounded-l-xl`} />
215
+ <div class="relative bg-[rgb(var(--ec-content-hover))] p-5 rounded-xl border border-dashed border-[rgb(var(--ec-page-border))]">
216
+ <div class={`absolute left-0 top-0 bottom-0 w-1 bg-[rgb(var(--ec-icon-color))] rounded-l-xl`} />
222
217
  <div class="flex items-start justify-between mb-3">
223
- <div class="p-2 rounded-lg bg-gray-100">
224
- <tile.icon className="w-4 h-4 text-gray-400" />
218
+ <div class="p-2 rounded-lg bg-[rgb(var(--ec-content-hover))]">
219
+ <tile.icon className="w-4 h-4 text-[rgb(var(--ec-icon-color))]" />
225
220
  </div>
226
221
  </div>
227
- <div class="text-sm font-medium text-gray-500 mb-2">{tile.emptyText}</div>
222
+ <div class="text-sm font-medium text-[rgb(var(--ec-page-text-muted))] mb-2">{tile.emptyText}</div>
228
223
  <a
229
224
  href={tile.addHref}
230
225
  target="_blank"
231
- class="inline-flex items-center gap-1 text-xs font-medium text-gray-600 hover:text-gray-900"
226
+ class="inline-flex items-center gap-1 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]"
232
227
  >
233
228
  <PlusIcon className="w-3 h-3" />
234
229
  Add {tile.title.toLowerCase()}
@@ -240,143 +235,104 @@ const learnLinks = [
240
235
  </div>
241
236
  </section>
242
237
 
243
- <!-- Two Column Layout -->
244
- <div class="grid grid-cols-1 lg:grid-cols-3 gap-8 mb-10">
245
- <!-- Main Column -->
246
- <div class="lg:col-span-2 space-y-8">
247
- <!-- Quick Actions -->
248
- <section>
249
- <h2 class="text-lg font-semibold text-gray-900 mb-4">Explore</h2>
250
- <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
251
- {
252
- quickActions.map((action) => (
253
- <a
254
- href={action.href}
255
- class={`group flex items-start gap-4 bg-white p-5 rounded-xl border border-gray-200 ${action.hoverBorder} hover:shadow-sm transition-all`}
256
- >
257
- <div class={`${action.iconBg} p-3 rounded-xl`}>
258
- <action.icon className={`w-6 h-6 ${action.iconColor}`} />
259
- </div>
260
- <div class="flex-1 min-w-0 pt-0.5">
261
- <div class="font-semibold text-gray-900 group-hover:text-gray-700 mb-1">{action.title}</div>
262
- <div class="text-sm text-gray-500 leading-relaxed">{action.description}</div>
263
- </div>
264
- </a>
265
- ))
266
- }
267
- </div>
268
- </section>
238
+ <!-- Explore Section - Full Width -->
239
+ <section class="mb-10">
240
+ <h2 class="text-lg font-semibold text-[rgb(var(--ec-page-text))] mb-4">Explore</h2>
241
+ <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
242
+ {
243
+ quickActions.map((action: any) => (
244
+ <a
245
+ href={action.href}
246
+ target={action.external ? '_blank' : undefined}
247
+ class="group flex items-start gap-4 bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] p-5 rounded-xl border border-[rgb(var(--ec-page-border))] hover:border-[rgb(var(--ec-accent))] hover:shadow-sm transition-all"
248
+ >
249
+ <div class={`${action.iconBg} p-3 rounded-xl flex-shrink-0`}>
250
+ <action.icon className={`w-5 h-5 ${action.iconColor}`} />
251
+ </div>
252
+ <div class="flex-1 min-w-0 pt-0.5">
253
+ <div class="font-semibold text-[rgb(var(--ec-page-text))] mb-1 flex items-center gap-1.5">
254
+ {action.title}
255
+ {action.external && (
256
+ <svg
257
+ class="w-3.5 h-3.5 text-[rgb(var(--ec-icon-color))]"
258
+ fill="none"
259
+ stroke="currentColor"
260
+ viewBox="0 0 24 24"
261
+ >
262
+ <path
263
+ stroke-linecap="round"
264
+ stroke-linejoin="round"
265
+ stroke-width="2"
266
+ d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
267
+ />
268
+ </svg>
269
+ )}
270
+ </div>
271
+ <div class="text-sm text-[rgb(var(--ec-page-text-muted))] leading-relaxed">{action.description}</div>
272
+ </div>
273
+ </a>
274
+ ))
275
+ }
276
+ </div>
277
+ </section>
269
278
 
270
- <!-- Additional Links -->
271
- <section class="grid grid-cols-1 sm:grid-cols-2 gap-3">
279
+ <!-- Resources & Community - Compact Footer Style -->
280
+ <section class="border-t border-[rgb(var(--ec-page-border))] pt-8 pb-4">
281
+ <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-6">
282
+ <div class="flex flex-wrap items-center gap-x-6 gap-y-3">
272
283
  <a
273
- href={buildUrl('/directory/users')}
274
- class="group flex items-center gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-orange-200 hover:shadow-sm transition-all"
284
+ href="https://www.eventcatalog.dev/docs/development/getting-started/introduction"
285
+ target="_blank"
286
+ class="text-sm text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] transition-colors"
275
287
  >
276
- <div class="bg-orange-50 p-2.5 rounded-lg">
277
- <BookUser className="w-5 h-5 text-orange-600" />
278
- </div>
279
- <div class="flex-1 min-w-0">
280
- <div class="font-medium text-gray-900 group-hover:text-orange-600 transition-colors">Team Directory</div>
281
- <div class="text-sm text-gray-500 truncate">Ownership & contacts</div>
282
- </div>
288
+ Getting Started
283
289
  </a>
284
290
  <a
285
- href="https://www.eventcatalog.dev/docs/sdk"
291
+ href="https://www.eventcatalog.dev/integrations"
286
292
  target="_blank"
287
- class="group flex items-center gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-indigo-200 hover:shadow-sm transition-all"
293
+ class="text-sm text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] transition-colors"
288
294
  >
289
- <div class="bg-indigo-50 p-2.5 rounded-lg">
290
- <Code2 className="w-5 h-5 text-indigo-600" />
291
- </div>
292
- <div class="flex-1 min-w-0">
293
- <div class="font-medium text-gray-900 group-hover:text-indigo-600 transition-colors">API & SDK</div>
294
- <div class="text-sm text-gray-500 truncate">Programmatic access</div>
295
- </div>
295
+ Integrations
296
296
  </a>
297
- </section>
298
- </div>
299
-
300
- <!-- Sidebar -->
301
- <div class="space-y-6">
302
- <!-- Learn More -->
303
- <section class="bg-white rounded-xl border border-gray-200 p-5">
304
- <h3 class="font-semibold text-gray-900 mb-4">Learn More</h3>
305
- <div class="space-y-3">
306
- {
307
- learnLinks.map((link) => (
308
- <a
309
- href={link.href}
310
- target="_blank"
311
- class="group flex items-start gap-3 text-sm hover:bg-gray-50 -mx-2 px-2 py-2 rounded-lg transition-colors"
312
- >
313
- <link.icon className="w-4 h-4 text-gray-400 mt-0.5 flex-shrink-0" />
314
- <div>
315
- <div class="font-medium text-gray-700 group-hover:text-gray-900">{link.title}</div>
316
- <div class="text-gray-500">{link.description}</div>
317
- </div>
318
- </a>
319
- ))
320
- }
321
- </div>
322
- </section>
323
-
324
- <!-- Community -->
325
- <section class="bg-white rounded-xl border border-gray-200 p-5">
326
- <h3 class="font-semibold text-gray-900 mb-4">Community</h3>
327
- <div class="space-y-3">
328
- <a
329
- href="https://discord.gg/3rjaZMmrAm"
330
- target="_blank"
331
- class="group flex items-center gap-3 p-3 -mx-1 rounded-lg hover:bg-gray-50 transition-colors"
332
- >
333
- <div class="bg-indigo-100 p-2 rounded-lg">
334
- <svg class="w-4 h-4 text-indigo-600" fill="currentColor" viewBox="0 0 24 24">
335
- <path
336
- d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"
337
- ></path>
338
- </svg>
339
- </div>
340
- <div>
341
- <div class="text-sm font-medium text-gray-900 group-hover:text-indigo-600">Join Discord</div>
342
- <div class="text-xs text-gray-500">Chat with the community</div>
343
- </div>
344
- </a>
345
- <a
346
- href="https://github.com/event-catalog/eventcatalog"
347
- target="_blank"
348
- class="group flex items-center gap-3 p-3 -mx-1 rounded-lg hover:bg-gray-50 transition-colors"
349
- >
350
- <div class="bg-gray-100 p-2 rounded-lg">
351
- <svg class="w-4 h-4 text-gray-700" fill="currentColor" viewBox="0 0 24 24">
352
- <path
353
- fill-rule="evenodd"
354
- d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
355
- clip-rule="evenodd"></path>
356
- </svg>
357
- </div>
358
- <div>
359
- <div class="text-sm font-medium text-gray-900 group-hover:text-gray-700">GitHub</div>
360
- <div class="text-xs text-gray-500">Star & contribute</div>
361
- </div>
362
- </a>
363
- <a
364
- href="https://www.eventcatalog.dev/docs"
365
- target="_blank"
366
- class="group flex items-center gap-3 p-3 -mx-1 rounded-lg hover:bg-gray-50 transition-colors"
367
- >
368
- <div class="bg-blue-100 p-2 rounded-lg">
369
- <DocumentTextIcon className="w-4 h-4 text-blue-600" />
370
- </div>
371
- <div>
372
- <div class="text-sm font-medium text-gray-900 group-hover:text-blue-600">Documentation</div>
373
- <div class="text-xs text-gray-500">Guides & references</div>
374
- </div>
375
- </a>
376
- </div>
377
- </section>
297
+ <a
298
+ href="https://www.eventcatalog.dev/docs"
299
+ target="_blank"
300
+ class="text-sm text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] transition-colors"
301
+ >
302
+ Documentation
303
+ </a>
304
+ </div>
305
+ <div class="flex items-center gap-4">
306
+ <a
307
+ href="https://discord.gg/3rjaZMmrAm"
308
+ target="_blank"
309
+ class="flex items-center gap-2 text-sm text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] transition-colors"
310
+ title="Join Discord"
311
+ >
312
+ <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
313
+ <path
314
+ d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"
315
+ ></path>
316
+ </svg>
317
+ <span class="hidden sm:inline">Discord</span>
318
+ </a>
319
+ <a
320
+ href="https://github.com/event-catalog/eventcatalog"
321
+ target="_blank"
322
+ class="flex items-center gap-2 text-sm text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] transition-colors"
323
+ title="GitHub"
324
+ >
325
+ <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
326
+ <path
327
+ fill-rule="evenodd"
328
+ d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
329
+ clip-rule="evenodd"></path>
330
+ </svg>
331
+ <span class="hidden sm:inline">GitHub</span>
332
+ </a>
333
+ </div>
378
334
  </div>
379
- </div>
335
+ </section>
380
336
  </main>
381
- </body>
337
+ </div>
382
338
  </VerticalSideBarLayout>