@eventcatalog/core 3.29.1 → 3.30.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 (82) 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-H5UC2A5F.js → chunk-6UG4JMUV.js} +1 -1
  6. package/dist/{chunk-4MSAPCV3.js → chunk-ATRBVTJ6.js} +1 -1
  7. package/dist/{chunk-PLNJC7NZ.js → chunk-K3ZVEX2Y.js} +13 -2
  8. package/dist/{chunk-V4OTI3PF.js → chunk-MVZKHUX2.js} +1 -1
  9. package/dist/{chunk-FVKDNLZK.js → chunk-RRBDF4MM.js} +1 -1
  10. package/dist/{chunk-24NGK43A.js → chunk-Z26P4PCB.js} +1 -1
  11. package/dist/constants.cjs +1 -1
  12. package/dist/constants.js +1 -1
  13. package/dist/eventcatalog.cjs +14 -3
  14. package/dist/eventcatalog.js +6 -6
  15. package/dist/generate.cjs +1 -1
  16. package/dist/generate.js +3 -3
  17. package/dist/utils/cli-logger.cjs +1 -1
  18. package/dist/utils/cli-logger.js +2 -2
  19. package/dist/watcher.cjs +13 -2
  20. package/dist/watcher.js +1 -1
  21. package/eventcatalog/astro.config.mjs +1 -1
  22. package/eventcatalog/public/logo.png +0 -0
  23. package/eventcatalog/src/components/CopyAsMarkdown.tsx +2 -2
  24. package/eventcatalog/src/components/EnvironmentDropdown.tsx +33 -21
  25. package/eventcatalog/src/components/FieldsExplorer/FieldFilters.tsx +3 -53
  26. package/eventcatalog/src/components/FieldsExplorer/FieldsExplorer.tsx +144 -91
  27. package/eventcatalog/src/components/FieldsExplorer/FieldsTable.tsx +112 -109
  28. package/eventcatalog/src/components/Header.astro +9 -19
  29. package/eventcatalog/src/components/MDX/Accordion/Accordion.tsx +12 -14
  30. package/eventcatalog/src/components/MDX/Accordion/AccordionGroup.astro +11 -3
  31. package/eventcatalog/src/components/MDX/ResourceRef/ResourceRef.astro +15 -5
  32. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +164 -53
  33. package/eventcatalog/src/components/SchemaExplorer/DiffViewer.tsx +1 -1
  34. package/eventcatalog/src/components/SchemaExplorer/ExamplesViewer.tsx +4 -4
  35. package/eventcatalog/src/components/SchemaExplorer/Pagination.tsx +12 -10
  36. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +48 -77
  37. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +238 -169
  38. package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +189 -230
  39. package/eventcatalog/src/components/SchemaExplorer/SchemaListItem.tsx +39 -36
  40. package/eventcatalog/src/components/Search/Search.astro +1 -1
  41. package/eventcatalog/src/components/Seo.astro +1 -1
  42. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +3 -3
  43. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +229 -256
  44. package/eventcatalog/src/components/Tables/Discover/DiscoverTable.tsx +78 -59
  45. package/eventcatalog/src/components/Tables/Discover/columns.tsx +130 -197
  46. package/eventcatalog/src/components/Tables/Table.tsx +21 -18
  47. package/eventcatalog/src/components/Tables/columns/TeamsTableColumns.tsx +79 -131
  48. package/eventcatalog/src/components/Tables/columns/UserTableColumns.tsx +104 -175
  49. package/eventcatalog/src/enterprise/auth/error.astro +1 -1
  50. package/eventcatalog/src/enterprise/auth/login.astro +1 -1
  51. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/index.tsx +95 -93
  52. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +174 -136
  53. package/eventcatalog/src/enterprise/fields/pages/fields.astro +10 -8
  54. package/eventcatalog/src/enterprise/integrations/eventcatalog-features.ts +0 -8
  55. package/eventcatalog/src/layouts/DirectoryLayout.astro +17 -88
  56. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +528 -146
  57. package/eventcatalog/src/layouts/VisualiserLayout.astro +7 -2
  58. package/eventcatalog/src/pages/_index.astro +5 -3
  59. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +3 -3
  60. package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +223 -73
  61. package/eventcatalog/src/pages/discover/[type]/index.astro +22 -141
  62. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +129 -29
  63. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +129 -29
  64. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +6 -2
  65. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/[...filename].astro +2 -2
  66. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +21 -18
  67. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +33 -32
  68. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +5 -1
  69. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +2 -2
  70. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +4 -6
  71. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +11 -4
  72. package/eventcatalog/src/pages/docs/users/[id]/index.astro +11 -4
  73. package/eventcatalog/src/pages/schemas/explorer/index.astro +10 -8
  74. package/eventcatalog/src/pages/studio.astro +1 -1
  75. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +2 -7
  76. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/index.astro +2 -2
  77. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +2 -7
  78. package/eventcatalog/src/styles/theme.css +68 -12
  79. package/eventcatalog/src/types/react-syntax-highlighter.d.ts +13 -0
  80. package/package.json +1 -1
  81. package/eventcatalog/public/logo.svg +0 -14
  82. package/eventcatalog/src/enterprise/plans/index.astro +0 -319
@@ -3,9 +3,10 @@ import { render } from 'astro:content';
3
3
 
4
4
  import VerticalSideBarLayout from '@layouts/VerticalSideBarLayout.astro';
5
5
  import components from '@components/MDX/components';
6
+ import CopyAsMarkdown from '@components/CopyAsMarkdown';
6
7
  import { buildUrl } from '@utils/url-builder';
7
8
  import { AlignLeftIcon, HistoryIcon } from 'lucide-react';
8
- import { isResourceDocsEnabled } from '@utils/feature';
9
+ import { isEventCatalogChatEnabled, isResourceDocsEnabled } from '@utils/feature';
9
10
  import { getIcon } from '@utils/badges';
10
11
  import { collectionToResourceMap } from '@utils/collections/util';
11
12
 
@@ -33,6 +34,8 @@ const docsBasePath = `/docs/${props.data.resourceCollection}/${props.data.resour
33
34
  const singularResourceName =
34
35
  collectionToResourceMap[props.data.resourceCollection as keyof typeof collectionToResourceMap] ??
35
36
  props.data.resourceCollection.slice(0, props.data.resourceCollection.length - 1);
37
+ const chatEnabled = isEventCatalogChatEnabled();
38
+ const chatQuery = `Tell me about the ${props.data.type} doc "${title}" for ${props.data.resourceId} (version ${props.data.version})`;
36
39
 
37
40
  const pagefindAttributes =
38
41
  props.data.version === props.data.latestVersion
@@ -44,35 +47,37 @@ const pagefindAttributes =
44
47
  ---
45
48
 
46
49
  <VerticalSideBarLayout title={pageTitle} description={props.data.summary}>
47
- <main class="flex docs-layout h-full bg-[rgb(var(--ec-page-bg))]" {...pagefindAttributes}>
48
- <div class="flex docs-layout w-full pl-16">
49
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto py-8 bg-[rgb(var(--ec-page-bg))]">
50
- <div class="border-b border-[rgb(var(--ec-page-border))] pb-4">
51
- <p class="text-xs uppercase tracking-wide text-[rgb(var(--ec-page-text-muted))]">
52
- <a
53
- href={buildUrl(`/docs/${props.data.resourceCollection}/${props.data.resourceId}/${props.data.resourceVersion}`)}
54
- class="hover:underline"
55
- >
56
- {singularResourceName}: {props.data.resourceId}
57
- </a>
58
- </p>
59
- <div class="flex items-center gap-2 pt-1">
60
- <h2 id="doc-page-header" class="text-2xl md:text-4xl font-bold text-[rgb(var(--ec-page-text))]">{title}</h2>
61
- <span
62
- class="text-xs rounded-md px-2 py-1 bg-[rgb(var(--ec-content-hover))] text-[rgb(var(--ec-page-text-muted))] border border-[rgb(var(--ec-page-border))]"
63
- >
64
- v{props.data.version}
65
- {props.data.version === props.data.latestVersion && ' (latest)'}
66
- </span>
50
+ <main class="flex docs-layout min-h-full bg-[rgb(var(--ec-page-bg))]" {...pagefindAttributes}>
51
+ <div class="flex docs-layout w-full">
52
+ <div class="w-full lg:mr-2 pr-24 py-8 bg-[rgb(var(--ec-page-bg))]">
53
+ <div class="border-b border-[rgb(var(--ec-page-border))] md:pb-2">
54
+ <div>
55
+ <div class="flex justify-between items-center">
56
+ <div class="flex items-center gap-2">
57
+ <h2 id="doc-page-header" class="text-2xl md:text-4xl font-bold text-[rgb(var(--ec-page-text))]">{title}</h2>
58
+ </div>
59
+ <div class="hidden lg:block">
60
+ <CopyAsMarkdown
61
+ client:only="react"
62
+ schemas={[]}
63
+ chatQuery={chatQuery}
64
+ chatEnabled={chatEnabled}
65
+ editUrl=""
66
+ markdownDownloadEnabled={true}
67
+ rssFeedEnabled={false}
68
+ preferChatAsDefault={false}
69
+ />
70
+ </div>
71
+ </div>
67
72
  </div>
68
73
  {
69
74
  props.data.summary && (
70
- <p class="text-lg pt-2 text-[rgb(var(--ec-page-text-muted))] font-light">{props.data.summary}</p>
75
+ <p class="text-base pt-2 text-[rgb(var(--ec-page-text-muted))] font-light">{props.data.summary}</p>
71
76
  )
72
77
  }
73
78
  {
74
79
  badges.length > 0 && (
75
- <div class="flex flex-wrap gap-3 pt-4">
80
+ <div class="flex flex-wrap gap-3 py-4">
76
81
  {badges.map((badge: any) => (
77
82
  <span
78
83
  class={`
@@ -128,23 +133,26 @@ const pagefindAttributes =
128
133
  <Content components={components(props)} />
129
134
  </div>
130
135
  </div>
131
- <aside class="hidden lg:block sticky top-0 pb-10 w-80 overflow-y-auto border-l border-[rgb(var(--ec-page-border))] py-2">
132
- <div class="sticky top-28 left-0 h-full overflow-y-auto px-6 py-4">
133
- <h3 class="text-sm text-[rgb(var(--ec-page-text))] font-semibold capitalize flex items-center gap-2">
136
+ <aside
137
+ class="hidden xl:block sticky top-[4rem] self-start w-[280px] max-h-[calc(100vh-4rem)] overflow-y-auto py-2 flex-shrink-0 pr-10 bg-[rgb(var(--ec-page-bg))]"
138
+ >
139
+ <div class="mt-8 space-y-8">
140
+ <h3 class="text-xs text-[rgb(var(--ec-page-text))] font-semibold capitalize flex items-center gap-2 mb-4">
134
141
  <AlignLeftIcon className="w-4 h-4" />
135
142
  On this page
136
143
  </h3>
137
- <nav class="space-y-1 text-sm py-4">
144
+ <nav class="text-xs border-l border-[rgb(var(--ec-page-border))]">
138
145
  {
139
146
  headings.map((heading) => {
147
+ const level = heading.depth > 2 ? heading.depth : 1;
140
148
  if (heading.depth > 3) {
141
149
  return null;
142
150
  }
143
151
  return (
144
152
  <a
145
153
  href={`#${heading.slug}`}
146
- class={`block text-[12px] py-0.5 ${heading.depth === 1 ? 'font-light' : ''} text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))]`}
147
- style={`padding-left: ${(heading.depth - 1) * 8}px`}
154
+ class={`block py-1.5 pr-2.5 leading-5 text-[rgb(var(--ec-page-text-muted))] hover:border-[rgb(var(--ec-page-border))] hover:text-[rgb(var(--ec-page-text))] border-l-2 border-transparent -ml-px transition-all duration-200`}
155
+ style={`padding-left: ${level * 0.75}rem`}
148
156
  >
149
157
  {heading.text}
150
158
  </a>
@@ -189,7 +197,99 @@ const pagefindAttributes =
189
197
  overflow: auto;
190
198
  }
191
199
 
200
+ .toc-active-text {
201
+ color: rgb(var(--ec-accent));
202
+ }
203
+
204
+ .toc-active-border {
205
+ border-color: rgb(var(--ec-accent));
206
+ }
207
+
192
208
  .version-item:hover {
193
209
  background: linear-gradient(to left, rgb(var(--ec-accent-gradient-from)), rgb(var(--ec-accent-gradient-to)));
194
210
  }
195
211
  </style>
212
+
213
+ <script>
214
+ // @ts-nocheck
215
+ function setupObserver() {
216
+ try {
217
+ const observerOptions = {
218
+ rootMargin: '0px 0px -40% 0px',
219
+ threshold: 0.1,
220
+ };
221
+
222
+ let observerPaused = false;
223
+
224
+ function highlightTocItem(id) {
225
+ document.querySelectorAll('.active-toc-item').forEach((link) => {
226
+ link.classList.remove('active-toc-item', 'toc-active-text', 'font-medium', 'toc-active-border');
227
+ link.classList.add('border-transparent');
228
+ });
229
+
230
+ const tocLink = document.querySelector(`nav a[href="#${id}"]`);
231
+ if (tocLink) {
232
+ tocLink.classList.add('active-toc-item', 'toc-active-text', 'font-medium', 'toc-active-border');
233
+ tocLink.classList.remove('border-transparent');
234
+
235
+ setTimeout(() => {
236
+ tocLink.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
237
+ }, 10);
238
+ }
239
+ }
240
+
241
+ const observer = new IntersectionObserver((entries) => {
242
+ if (observerPaused) return;
243
+
244
+ entries.forEach((entry) => {
245
+ const id = entry.target.getAttribute('id');
246
+ if (entry.isIntersecting && id) {
247
+ highlightTocItem(id);
248
+ }
249
+ });
250
+ }, observerOptions);
251
+
252
+ const prose = document.querySelector('.prose');
253
+ if (!prose) return;
254
+
255
+ const headings = prose.querySelectorAll('h1[id], h2[id], h3[id]');
256
+
257
+ if (headings.length > 0) {
258
+ headings.forEach((heading) => observer.observe(heading));
259
+ } else {
260
+ const allHeadings = prose.querySelectorAll('h1, h2, h3');
261
+ allHeadings.forEach((heading) => {
262
+ if (!heading.id) {
263
+ const text = heading.textContent || '';
264
+ heading.id = text
265
+ .toLowerCase()
266
+ .replace(/[^\w\s-]/g, '')
267
+ .replace(/\s+/g, '-');
268
+ }
269
+ observer.observe(heading);
270
+ });
271
+ }
272
+
273
+ const tocLinks = document.querySelectorAll('nav a[href^="#"]');
274
+ tocLinks.forEach((link) => {
275
+ link.addEventListener('click', () => {
276
+ const hrefAttr = link.getAttribute('href');
277
+ if (!hrefAttr) return;
278
+
279
+ const id = hrefAttr.substring(1);
280
+ highlightTocItem(id);
281
+
282
+ observerPaused = true;
283
+ setTimeout(() => {
284
+ observerPaused = false;
285
+ }, 1000);
286
+ });
287
+ });
288
+ } catch (error) {
289
+ console.error('Error setting up TOC observer:', error);
290
+ }
291
+ }
292
+
293
+ setupObserver();
294
+ document.addEventListener('astro:page-load', setupObserver);
295
+ </script>
@@ -149,7 +149,11 @@ const pagefindAttributes =
149
149
  ---
150
150
 
151
151
  <VerticalSideBarLayout title={pageTitle}>
152
- <div {...pagefindAttributes} class="relative">
152
+ <div
153
+ {...pagefindAttributes}
154
+ class="relative"
155
+ style="margin-left: calc(var(--ec-app-content-padding-left, 5rem) * -1); margin-right: calc(var(--ec-app-content-padding-right, 5rem) * -1);"
156
+ >
153
157
  {
154
158
  // Currently, Pagefind does not index metadata (such as the title),
155
159
  // so we need to ensure it is included as text on the page.
@@ -173,7 +177,7 @@ const pagefindAttributes =
173
177
  </div>
174
178
  )
175
179
  }
176
- <div id="asyncapi" class="not-prose md:pr-14" set:html={renderedComponent} />
180
+ <div id="asyncapi" class="not-prose" set:html={renderedComponent} />
177
181
  </div>
178
182
  </VerticalSideBarLayout>
179
183
 
@@ -16,9 +16,9 @@ const lang = getLanguageForHighlight(example.extension);
16
16
  ---
17
17
 
18
18
  <VerticalSideBarLayout title={pageTitle} description={`Example: ${example.title} for ${data.name}`}>
19
- <main class="flex sm:px-8 docs-layout h-full">
19
+ <main class="flex sm:px-8 docs-layout min-h-full">
20
20
  <div class="flex docs-layout w-full">
21
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto py-8">
21
+ <div class="w-full lg:mr-2 pr-8 py-8">
22
22
  <div class="border-b border-[rgb(var(--ec-page-border))] md:pb-4">
23
23
  <h1 class="text-2xl md:text-4xl font-bold text-[rgb(var(--ec-page-text))] mb-2">
24
24
  {example.title}
@@ -64,10 +64,10 @@ const pagefindAttributes =
64
64
  ---
65
65
 
66
66
  <VerticalSideBarLayout title={pageTitle} description={`GraphQL schema for ${data.name}`}>
67
- <main class="flex sm:px-8 docs-layout h-full" {...pagefindAttributes}>
67
+ <main class="flex docs-layout min-h-full bg-[rgb(var(--ec-page-bg))]" {...pagefindAttributes}>
68
68
  <div class="flex docs-layout w-full">
69
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto py-8">
70
- <div class="border-b border-[rgb(var(--ec-page-border))] md:pb-4">
69
+ <div class="w-full lg:mr-2 pr-24 py-8 bg-[rgb(var(--ec-page-bg))]">
70
+ <div class="border-b border-[rgb(var(--ec-page-border))] md:pb-2">
71
71
  <div>
72
72
  <div class="flex justify-between items-start">
73
73
  <div class="flex-1">
@@ -82,21 +82,24 @@ const pagefindAttributes =
82
82
  {
83
83
  badges && (
84
84
  <div class="flex flex-wrap gap-3 py-4">
85
- {badges.map((badge: any) => (
86
- <span
87
- id={badge.id || ''}
88
- class={`
89
- inline-flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm font-medium
90
- bg-${badge.backgroundColor || 'gray'}-500/10 border border-${badge.backgroundColor || 'gray'}-500/20
91
- text-${badge.textColor || 'gray'}-500
92
- shadow-xs transition-all duration-200 ease-out
93
- `}
94
- >
95
- {badge.icon && <badge.icon className={`w-4 h-4 flex-shrink-0`} />}
96
- {badge.iconURL && <img src={badge.iconURL} class="w-4 h-4 flex-shrink-0 opacity-80" alt="" />}
97
- <span>{badge.content}</span>
98
- </span>
99
- ))}
85
+ {badges.map((badge: any) => {
86
+ return (
87
+ <span
88
+ id={badge.id || ''}
89
+ class={`
90
+ inline-flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm font-medium
91
+ bg-[rgb(var(--ec-content-hover))] border border-[rgb(var(--ec-page-border))]
92
+ text-[rgb(var(--ec-page-text))]
93
+ shadow-xs
94
+ ${badge.class ? badge.class : ''}
95
+ `}
96
+ >
97
+ {badge.icon && <badge.icon className="w-4 h-4 flex-shrink-0 text-[rgb(var(--ec-icon-color))]" />}
98
+ {badge.iconURL && <img src={badge.iconURL} class="w-4 h-4 flex-shrink-0 opacity-80" alt="" />}
99
+ <span>{badge.content}</span>
100
+ </span>
101
+ );
102
+ })}
100
103
  </div>
101
104
  )
102
105
  }
@@ -284,9 +284,9 @@ nodeGraphs.push({
284
284
  ---
285
285
 
286
286
  <VerticalSideBarLayout title={pageTitle} description={props.data.summary}>
287
- <main class="flex docs-layout h-full bg-[rgb(var(--ec-page-bg))]" {...pagefindAttributes}>
288
- <div class="flex docs-layout w-full pl-16">
289
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto py-8 bg-[rgb(var(--ec-page-bg))]">
287
+ <main class="flex docs-layout min-h-full bg-[rgb(var(--ec-page-bg))]" {...pagefindAttributes}>
288
+ <div class="flex docs-layout w-full">
289
+ <div class="w-full lg:mr-2 pr-24 py-8 bg-[rgb(var(--ec-page-bg))]">
290
290
  <div class="border-b border-[rgb(var(--ec-page-border))] md:pb-2">
291
291
  <div>
292
292
  <div class="flex justify-between items-center">
@@ -332,6 +332,33 @@ nodeGraphs.push({
332
332
  />
333
333
  </div>
334
334
  </div>
335
+
336
+ <h2 class="text-base pt-2 text-[rgb(var(--ec-page-text-muted))] font-light">{props.data.summary}</h2>
337
+ {
338
+ badges && (
339
+ <div class="flex flex-wrap gap-3 py-4">
340
+ {badges.map((badge: any) => {
341
+ return (
342
+ <span
343
+ id={badge.id || ''}
344
+ class={`
345
+ inline-flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm font-medium
346
+ bg-[rgb(var(--ec-content-hover))] border border-[rgb(var(--ec-page-border))]
347
+ text-[rgb(var(--ec-page-text))]
348
+ shadow-xs
349
+ ${badge.class ? badge.class : ''}
350
+ `}
351
+ >
352
+ {badge.icon && <badge.icon className="w-4 h-4 flex-shrink-0 text-[rgb(var(--ec-icon-color))]" />}
353
+ {badge.iconURL && <img src={badge.iconURL} class="w-4 h-4 flex-shrink-0 opacity-80" alt="" />}
354
+ <span>{badge.content}</span>
355
+ </span>
356
+ );
357
+ })}
358
+ </div>
359
+ )
360
+ }
361
+
335
362
  {
336
363
  isMarkedAsDeprecated && hasDeprecated && (
337
364
  <Admonition
@@ -366,32 +393,6 @@ nodeGraphs.push({
366
393
  )
367
394
  }
368
395
 
369
- <h2 class="text-lg pt-2 text-[rgb(var(--ec-page-text-muted))] font-light">{props.data.summary}</h2>
370
- {
371
- badges && (
372
- <div class="flex flex-wrap gap-3 py-4">
373
- {badges.map((badge: any) => {
374
- return (
375
- <span
376
- id={badge.id || ''}
377
- class={`
378
- inline-flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm font-medium
379
- bg-[rgb(var(--ec-content-hover))] border border-[rgb(var(--ec-page-border))]
380
- text-[rgb(var(--ec-page-text))]
381
- shadow-xs
382
- ${badge.class ? badge.class : ''}
383
- `}
384
- >
385
- {badge.icon && <badge.icon className="w-4 h-4 flex-shrink-0 text-[rgb(var(--ec-icon-color))]" />}
386
- {badge.iconURL && <img src={badge.iconURL} class="w-4 h-4 flex-shrink-0 opacity-80" alt="" />}
387
- <span>{badge.content}</span>
388
- </span>
389
- );
390
- })}
391
- </div>
392
- )
393
- }
394
-
395
396
  {
396
397
  props.data.draft && (
397
398
  <Admonition type="warning" title={props.data?.draft?.title || `Draft ${friendlyCollectionName}`}>
@@ -445,7 +446,7 @@ nodeGraphs.push({
445
446
  }
446
447
  </div>
447
448
 
448
- <div class="prose prose-md py-4 w-full">
449
+ <div class="prose prose-md py-4 w-full text-[15px]">
449
450
  <Content components={components(props)} />
450
451
  </div>
451
452
  <div data-pagefind-ignore>
@@ -501,9 +502,9 @@ nodeGraphs.push({
501
502
  </div>
502
503
  <aside
503
504
  id="eventcatalog-docs-sidebar"
504
- class="hidden xl:block sticky top-0 pb-10 w-[280px] overflow-y-auto py-2 flex-shrink-0 pr-10 bg-[rgb(var(--ec-page-bg))]"
505
+ class="hidden xl:block sticky top-[4rem] self-start w-[280px] max-h-[calc(100vh-4rem)] overflow-y-auto py-2 flex-shrink-0 pr-10 bg-[rgb(var(--ec-page-bg))]"
505
506
  >
506
- <div class="mt-4 space-y-8">
507
+ <div class="mt-8 space-y-8">
507
508
  {
508
509
  headings.length > 0 && (
509
510
  <div>
@@ -64,7 +64,11 @@ if (isRemote) {
64
64
  </p>
65
65
  </div>
66
66
  ) : (
67
- <div {...pagefindAttributes} class="relative">
67
+ <div
68
+ {...pagefindAttributes}
69
+ class="relative"
70
+ style="margin-left: calc(var(--ec-app-content-padding-left, 5rem) * -1); margin-right: calc(var(--ec-app-content-padding-right, 5rem) * -1);"
71
+ >
68
72
  {
69
73
  // Currently, Pagefind does not index metadata (such as the title),
70
74
  // so we need to ensure it is included as text on the page.
@@ -32,12 +32,12 @@ const badges = [
32
32
 
33
33
  <VerticalSideBarLayout title={pageTitle} description={ubiquitousLanguage.summary}>
34
34
  <main
35
- class="flex sm:px-8 docs-layout h-full max-w-7xl bg-[rgb(var(--ec-page-bg))]"
35
+ class="flex sm:px-8 docs-layout min-h-full max-w-7xl bg-[rgb(var(--ec-page-bg))]"
36
36
  data-pagefind-body
37
37
  data-pagefind-meta={`title:${pageTitle}`}
38
38
  >
39
39
  <div class="flex docs-layout w-full">
40
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto py-8 min-h-[50em]">
40
+ <div class="w-full lg:mr-2 pr-8 py-8 min-h-[50em]">
41
41
  {/* Breadcrumb */}
42
42
  <nav class="mb-4 flex items-center space-x-2 text-sm text-[rgb(var(--ec-page-text-muted))]" aria-label="Breadcrumb">
43
43
  <a
@@ -23,20 +23,18 @@ const { subdomains, duplicateTerms } = ubiquitousLanguageData;
23
23
 
24
24
  <VerticalSideBarLayout title={pageTitle} description={props.data.summary}>
25
25
  <main
26
- class="flex sm:px-6 docs-layout h-full bg-[rgb(var(--ec-page-bg))]"
26
+ class="flex docs-layout min-h-full bg-[rgb(var(--ec-page-bg))]"
27
27
  data-pagefind-body
28
28
  data-pagefind-meta={`title:${pageTitle}`}
29
29
  >
30
30
  <div class="flex docs-layout w-full">
31
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto pt-6 pb-8 min-h-[50em]">
31
+ <div class="w-full lg:mr-2 pr-24 py-8 min-h-[50em]">
32
32
  {/* Title Section */}
33
33
  <div class="relative border-b border-[rgb(var(--ec-page-border))] mb-6 pb-6">
34
34
  <div class="xl:flex xl:items-start xl:justify-between">
35
35
  <div class="min-w-0 flex-1">
36
- <h1 class="text-xl font-bold leading-7 text-[rgb(var(--ec-page-text))] sm:text-2xl xl:text-3xl">
37
- Ubiquitous Language
38
- </h1>
39
- <p class="mt-2 text-sm text-[rgb(var(--ec-page-text-muted))]">
36
+ <h1 class="text-2xl md:text-4xl font-bold text-[rgb(var(--ec-page-text))]">Ubiquitous Language</h1>
37
+ <p class="pt-2 text-base text-[rgb(var(--ec-page-text-muted))] font-light">
40
38
  Browse and discover ubiquitous language terms in the {props.data.name} domain{
41
39
  subdomains.length > 0 ? ' and its subdomains' : ''
42
40
  }
@@ -63,9 +63,13 @@ const pageTitle = `Team | ${props.data.name}`;
63
63
  ---
64
64
 
65
65
  <VerticalSideBarLayout title={pageTitle} description={props.data.summary}>
66
- <main class="flex sm:px-8 docs-layout h-full" data-pagefind-body data-pagefind-meta={`title:${pageTitle}`}>
66
+ <main
67
+ class="flex docs-layout min-h-full bg-[rgb(var(--ec-page-bg))]"
68
+ data-pagefind-body
69
+ data-pagefind-meta={`title:${pageTitle}`}
70
+ >
67
71
  <div class="flex docs-layout w-full">
68
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto py-8">
72
+ <div class="w-full lg:mr-2 pr-24 py-8 bg-[rgb(var(--ec-page-bg))]">
69
73
  <div class="border-b border-[rgb(var(--ec-page-border))] pb-6">
70
74
  <div class="flex justify-start">
71
75
  <div class="flex flex-col justify-between space-y-3">
@@ -146,8 +150,11 @@ const pageTitle = `Team | ${props.data.name}`;
146
150
  <Content components={components(props)} />
147
151
  </div>
148
152
  </div>
149
- <aside class="hidden lg:block sticky top-0 pb-10 w-96 overflow-y-auto py-2" data-pagefind-ignore>
150
- <div class="sticky top-28 left-0 h-full overflow-y-auto pr-6 py-4">
153
+ <aside
154
+ class="hidden xl:block sticky top-[5.5rem] self-start w-[280px] max-h-[calc(100vh-5.5rem)] overflow-y-auto py-2 flex-shrink-0 pr-10 bg-[rgb(var(--ec-page-bg))]"
155
+ data-pagefind-ignore
156
+ >
157
+ <div class="py-2">
151
158
  {
152
159
  ownedDomainsList.length > 0 && (
153
160
  <PillListFlat
@@ -60,9 +60,13 @@ const pageTitle = `User | ${props.data.name}`;
60
60
  ---
61
61
 
62
62
  <VerticalSideBarLayout title={pageTitle}>
63
- <main class="flex sm:px-8 docs-layout h-full" data-pagefind-body data-pagefind-meta={`title:${pageTitle}`}>
63
+ <main
64
+ class="flex docs-layout min-h-full bg-[rgb(var(--ec-page-bg))]"
65
+ data-pagefind-body
66
+ data-pagefind-meta={`title:${pageTitle}`}
67
+ >
64
68
  <div class="flex docs-layout w-full">
65
- <div class="w-full lg:mr-2 pr-8 overflow-y-auto py-8">
69
+ <div class="w-full lg:mr-2 pr-24 py-8 bg-[rgb(var(--ec-page-bg))]">
66
70
  <div class="border-b border-[rgb(var(--ec-page-border))] pb-6">
67
71
  <div class="flex justify-start gap-6">
68
72
  {
@@ -147,8 +151,11 @@ const pageTitle = `User | ${props.data.name}`;
147
151
  <Content components={components(props)} />
148
152
  </div>
149
153
  </div>
150
- <aside class="hidden lg:block sticky top-0 pb-10 w-96 overflow-y-auto py-2" data-pagefind-ignore>
151
- <div class="sticky top-28 left-0 h-full overflow-y-auto pr-6 py-4">
154
+ <aside
155
+ class="hidden xl:block sticky top-[5.5rem] self-start w-[280px] max-h-[calc(100vh-5.5rem)] overflow-y-auto py-2 flex-shrink-0 pr-10 bg-[rgb(var(--ec-page-bg))]"
156
+ data-pagefind-ignore
157
+ >
158
+ <div class="py-2">
152
159
  {
153
160
  ownedDomainsList.length > 0 && (
154
161
  <PillListFlat
@@ -13,13 +13,15 @@ const apiAccessEnabled = isEventCatalogScaleEnabled();
13
13
  ---
14
14
 
15
15
  <VerticalSideBarLayout title="Schema Explorer - EventCatalog" showNestedSideBar={false}>
16
- <main class="flex docs-layout h-[calc(100vh-var(--header-height,0px)-64px)] bg-[rgb(var(--ec-page-bg))]">
17
- <div class="flex docs-layout w-full h-full">
18
- <div class="w-full flex flex-col h-full">
19
- <div class="w-full max-w-none! h-full flex flex-col overflow-hidden">
20
- <SchemaExplorer client:load schemas={schemas as any} apiAccessEnabled={apiAccessEnabled} />
21
- </div>
22
- </div>
23
- </div>
16
+ <style is:global>
17
+ #eventcatalog-header {
18
+ left: calc(var(--ec-vertical-nav-width, 14rem) + var(--ec-schema-sidebar-width, 360px)) !important;
19
+ }
20
+ </style>
21
+ <main
22
+ class="min-h-0 overflow-hidden bg-[rgb(var(--ec-page-bg))]"
23
+ style={`--ec-schema-sidebar-width: 360px; margin-left: calc(var(--ec-app-content-padding-left, 5rem) * -1); margin-right: calc(var(--ec-app-content-padding-right, 5rem) * -1); height: calc(100dvh - 60px);`}
24
+ >
25
+ <SchemaExplorer client:load schemas={schemas as any} apiAccessEnabled={apiAccessEnabled} />
24
26
  </main>
25
27
  </VerticalSideBarLayout>
@@ -42,7 +42,7 @@ const hasResources = resourcesToShow.length > 0;
42
42
  <head>
43
43
  <meta charset="UTF-8" />
44
44
  <meta name="viewport" content="width=device-width" />
45
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
45
+ <link rel="icon" type="image/png" href="/logo.png" />
46
46
  <meta name="generator" content={Astro.generator} />
47
47
  <title>EventCatalog Studio</title>
48
48
  </head>
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  import NodeGraph from '@components/MDX/NodeGraph/NodeGraph.astro';
3
3
  import VisualiserLayout from '@layouts/VisualiserLayout.astro';
4
- import { buildUrl } from '@utils/url-builder';
5
4
  import { ClientRouter } from 'astro:transitions';
6
5
 
7
6
  import { Page } from './_index.data';
@@ -19,9 +18,9 @@ const {
19
18
  ---
20
19
 
21
20
  <VisualiserLayout title={`Visualiser | ${props.data.name} (${props.collection})`} description={props.data.summary}>
22
- <div class="m-4">
21
+ <div class="p-2">
23
22
  <div
24
- class="h-[calc(100vh-130px)] w-full relative border border-[rgb(var(--ec-page-border))] rounded-md"
23
+ class="h-[calc(100vh-5rem)] w-full relative border border-[rgb(var(--ec-page-border))]"
25
24
  id={`${id}-portal`}
26
25
  transition:animate="fade"
27
26
  >
@@ -34,10 +33,6 @@ const {
34
33
  linkTo="visualiser"
35
34
  version={props.data.version}
36
35
  linksToVisualiser={false}
37
- href={{
38
- label: `Open documentation for ${props.data.name} v${props.data.version}`,
39
- url: buildUrl(`/docs/${props.collection}/${props.data.id}/${props.data.version}`),
40
- }}
41
36
  />
42
37
  </div>
43
38
  <ClientRouter />
@@ -20,9 +20,9 @@ const {
20
20
  ---
21
21
 
22
22
  <VisualiserLayout title={`Visualiser | ${props.data.name} (${props.collection})`} description={props.data.summary}>
23
- <div class="m-4">
23
+ <div class="p-2">
24
24
  <div
25
- class="h-[calc(100vh-130px)] w-full relative border border-[rgb(var(--ec-page-border))] rounded-md"
25
+ class="h-[calc(100vh-5rem)] w-full relative border border-[rgb(var(--ec-page-border))]"
26
26
  id={`${id}-portal`}
27
27
  transition:animate="fade"
28
28
  >
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  import NodeGraph from '@components/MDX/NodeGraph/NodeGraph.astro';
3
3
  import VisualiserLayout from '@layouts/VisualiserLayout.astro';
4
- import { buildUrl } from '@utils/url-builder';
5
4
  import { ClientRouter } from 'astro:transitions';
6
5
 
7
6
  import { Page } from './_index.data';
@@ -19,9 +18,9 @@ const {
19
18
  ---
20
19
 
21
20
  <VisualiserLayout title={`Visualiser | ${props.data.name} (${props.collection})`} description={props.data.summary}>
22
- <div class="m-4">
21
+ <div class="p-2">
23
22
  <div
24
- class="h-[calc(100vh-130px)] w-full relative border border-[rgb(var(--ec-page-border))] rounded-md"
23
+ class="h-[calc(100vh-5rem)] w-full relative border border-[rgb(var(--ec-page-border))]"
25
24
  id={`${id}-portal`}
26
25
  transition:animate="fade"
27
26
  >
@@ -34,10 +33,6 @@ const {
34
33
  linkTo="visualiser"
35
34
  version={props.data.version}
36
35
  linksToVisualiser={false}
37
- href={{
38
- label: `Open documentation for ${props.data.name} v${props.data.version}`,
39
- url: buildUrl(`/docs/${props.collection}/${props.data.id}/${props.data.version}`),
40
- }}
41
36
  />
42
37
  </div>
43
38
  <ClientRouter />