@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
@@ -10,88 +10,91 @@ interface SchemaListItemProps {
10
10
  itemRef?: React.Ref<HTMLButtonElement>;
11
11
  }
12
12
 
13
- // Derive a namespace from available data
14
13
  function getNamespace(message: SchemaItem): string | null {
15
14
  const producers = message.data.producers || [];
16
15
  const firstProducer = producers[0];
17
16
 
18
17
  if (firstProducer) {
19
18
  const serviceName = extractServiceName(firstProducer.id);
20
- return `${serviceName}.${message.collection}`;
19
+ return serviceName;
21
20
  }
22
21
 
23
- // For services, use the service ID + spec type
24
22
  if (message.collection === 'services' && message.specType) {
25
- return `${message.specType}`;
23
+ return `${message.specType} specification`;
26
24
  }
27
25
 
28
- // For data products
29
26
  if (message.collection === 'data-products' && message.dataProductId) {
30
- return `${extractServiceName(message.dataProductId)}.contracts`;
27
+ return extractServiceName(message.dataProductId);
31
28
  }
32
29
 
33
30
  return null;
34
31
  }
35
32
 
36
33
  export default function SchemaListItem({ message, isSelected, versions, onClick, itemRef }: SchemaListItemProps) {
37
- const hasMultipleVersions = versions.length > 1;
38
34
  const ext = message.schemaExtension?.toLowerCase() || '';
39
35
  const iconSpec = ICON_SPECS[ext];
40
36
  const { label: formatLabel, color: formatColor } = getFormatBadge(ext);
41
37
  const namespace = getNamespace(message);
38
+ const summary = message.data.summary || `Browse the ${message.data.name} schema.`;
39
+ const versionLabel = `v${message.data.version}`;
42
40
 
43
41
  return (
44
42
  <button
45
43
  ref={itemRef}
46
44
  onClick={onClick}
47
- className={`w-full text-left px-3 py-2 transition-all duration-100 group ${
45
+ className={`group w-full rounded-lg border px-2.5 py-2 text-left transition-all duration-150 ${
48
46
  isSelected
49
- ? 'bg-[rgb(var(--ec-accent-subtle))] border-l-2 border-l-[rgb(var(--ec-accent))]'
50
- : 'hover:bg-[rgb(var(--ec-content-hover))] border-l-2 border-l-transparent'
47
+ ? 'border-[rgb(var(--ec-accent)/0.55)] bg-[rgb(var(--ec-accent)/0.1)] shadow-[0_0_0_1px_rgb(var(--ec-accent)/0.3),0_18px_40px_rgb(var(--ec-accent)/0.12)]'
48
+ : 'border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-dropdown-bg)/0.66)] hover:border-[rgb(var(--ec-page-text-muted)/0.3)] hover:bg-[rgb(var(--ec-content-hover)/0.5)]'
51
49
  }`}
52
50
  >
53
- <div className="flex items-center gap-2.5">
54
- {/* Schema Format Badge */}
55
- <div className="flex-shrink-0 flex items-center justify-center w-7 h-7 rounded-md bg-[rgb(var(--ec-content-hover))] border border-[rgb(var(--ec-page-border)/0.5)]">
51
+ <div className="flex items-start justify-between gap-2">
52
+ <div className="mt-0.5 flex h-4.5 w-4.5 flex-shrink-0 items-center justify-center rounded-sm border border-[rgb(var(--ec-page-border)/0.55)] bg-[rgb(var(--ec-content-hover))]">
56
53
  {iconSpec ? (
57
- <img src={buildUrl(`/icons/${iconSpec}.svg`, true)} alt={`${ext} icon`} className="h-4 w-4 schema-icon" />
54
+ <img src={buildUrl(`/icons/${iconSpec}.svg`, true)} alt={`${ext} icon`} className="schema-icon h-2.5 w-2.5" />
58
55
  ) : (
59
- <span className={`text-[10px] font-bold font-mono ${formatColor}`}>{formatLabel}</span>
56
+ <span className={`font-mono text-[6px] font-bold uppercase ${formatColor}`}>{formatLabel}</span>
60
57
  )}
61
58
  </div>
62
59
 
63
- {/* Content */}
64
- <div className="flex-1 min-w-0">
65
- <div className="flex items-baseline justify-between gap-2">
66
- <span className="text-[13px] font-medium text-[rgb(var(--ec-page-text))] truncate leading-tight">
60
+ <div className="min-w-0 flex-1">
61
+ <div className="flex items-start justify-between gap-2">
62
+ <h3 className="min-w-0 pr-1 text-[11px] font-semibold leading-4 text-[rgb(var(--ec-page-text))] break-words">
67
63
  {message.data.name}
68
- </span>
69
- <span className="flex-shrink-0 text-[11px] tabular-nums text-[rgb(var(--ec-page-text-muted))] font-mono">
70
- v{message.data.version}
64
+ </h3>
65
+ <span
66
+ className={`mt-0.5 flex-shrink-0 rounded-sm border px-1.5 py-0.5 font-mono text-[8px] font-semibold tabular-nums ${
67
+ isSelected
68
+ ? 'border-[rgb(var(--ec-accent)/0.35)] bg-[rgb(var(--ec-accent)/0.15)] text-[rgb(var(--ec-page-text))]'
69
+ : 'border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-content-hover))] text-[rgb(var(--ec-page-text-muted))]'
70
+ }`}
71
+ >
72
+ {versionLabel}
71
73
  </span>
72
74
  </div>
73
- <div className="flex items-center gap-1.5 mt-0.5">
74
- <span className="text-[11px] text-[rgb(var(--ec-page-text-muted))]">
75
+ </div>
76
+ </div>
77
+
78
+ <p className="mt-1.5 text-[10px] leading-4 text-[rgb(var(--ec-page-text-muted))] line-clamp-2">{summary}</p>
79
+
80
+ <div className="mt-1.5 flex items-end justify-between gap-2">
81
+ <div className="min-w-0">
82
+ <div className="flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[9px] text-[rgb(var(--ec-page-text-muted))]">
83
+ <span className="font-medium text-[rgb(var(--ec-page-text-muted))]">
75
84
  {getSchemaTypeLabel(message.schemaExtension)}
76
85
  </span>
77
86
  {namespace && (
78
87
  <>
79
- <span className="text-[rgb(var(--ec-page-text-muted))] opacity-40">&middot;</span>
80
- <span className="text-[11px] text-[rgb(var(--ec-page-text-muted))] truncate font-mono opacity-70">
81
- {namespace}
82
- </span>
83
- </>
84
- )}
85
- {hasMultipleVersions && (
86
- <>
87
- <span className="text-[rgb(var(--ec-page-text-muted))] opacity-40">&middot;</span>
88
- <span className="text-[11px] tabular-nums text-[rgb(var(--ec-page-text-muted))] opacity-70">
89
- {versions.length}v
90
- </span>
88
+ <span className="opacity-35">&rsaquo;</span>
89
+ <span className="truncate">{namespace}</span>
91
90
  </>
92
91
  )}
93
92
  </div>
94
93
  </div>
94
+
95
+ <span className="flex-shrink-0 text-[9px] font-medium tabular-nums text-[rgb(var(--ec-page-text-muted))]">
96
+ {versions.length}
97
+ </span>
95
98
  </div>
96
99
  </button>
97
100
  );
@@ -11,7 +11,7 @@ import SearchModal from './SearchModal.tsx';
11
11
  name="search"
12
12
  placeholder="Search EventCatalog"
13
13
  autocomplete="off"
14
- class="block w-full rounded-md caret-transparent border-0 py-1.5 pr-14 pl-10! text-[rgb(var(--ec-header-text))] bg-[rgb(var(--ec-dropdown-bg))] shadow-xs ring-1 ring-inset ring-[rgb(var(--ec-dropdown-border))] placeholder:text-[rgb(var(--ec-icon-color))] font-light sm:text-sm sm:leading-6"
14
+ class="block w-full rounded-md caret-transparent border-0 py-1.5 pr-14 pl-10! text-[rgb(var(--ec-header-text))] bg-[rgb(var(--ec-header-bg))] shadow-xs ring-1 ring-inset ring-[rgb(var(--ec-dropdown-border))] placeholder:text-[rgb(var(--ec-icon-color))] font-light sm:text-sm sm:leading-6"
15
15
  />
16
16
  <MagnifyingGlassIcon className="absolute inset-y-0 left-0 h-9 w-8 flex items-center pl-4 text-[rgb(var(--ec-icon-color))]" />
17
17
  <div class="absolute inset-y-0 right-0 flex py-1.5 pr-6">
@@ -25,7 +25,7 @@ if (typeof _image === 'string') {
25
25
  <meta charset="UTF-8" />
26
26
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
27
27
  <meta name="viewport" content="width=device-width" />
28
- <link rel="icon" type="image/svg+xml" href={buildUrl('/favicon.ico', true)} />
28
+ <link rel="icon" type="image/png" href={buildUrl('/logo.png', true)} />
29
29
 
30
30
  <SEO
31
31
  title={title}
@@ -181,7 +181,7 @@ export default function SearchBar({ nodes, onSelectResult, onSearchChange }: Pro
181
181
  return (
182
182
  <>
183
183
  {/* Search Input */}
184
- <div className="px-3 py-2 bg-[rgb(var(--ec-content-bg))] border-b border-[rgb(var(--ec-content-border))]">
184
+ <div className="px-4 py-3 bg-[rgb(var(--ec-content-bg))] border-b border-[rgb(var(--ec-content-border))]">
185
185
  <div className="flex gap-2">
186
186
  <div className="relative flex-1">
187
187
  <Search className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[rgb(var(--ec-input-placeholder))]" />
@@ -190,7 +190,7 @@ export default function SearchBar({ nodes, onSelectResult, onSearchChange }: Pro
190
190
  placeholder="Search resources..."
191
191
  value={searchQuery}
192
192
  onChange={(e) => handleSearchChange(e.target.value)}
193
- className="w-full pl-9! pr-8! py-2! text-sm! bg-[rgb(var(--ec-input-bg))]! border! border-[rgb(var(--ec-input-border))]! rounded-lg! focus:outline-hidden! focus:ring-2! focus:ring-[rgb(var(--ec-accent))]! focus:border-transparent! text-[rgb(var(--ec-input-text))]! placeholder:text-[rgb(var(--ec-input-placeholder))]!"
193
+ className="w-full pl-9! pr-8! py-2.5! text-sm! bg-[rgb(var(--ec-input-bg))]! border! border-[rgb(var(--ec-input-border))]! rounded-xl! focus:outline-hidden! focus:ring-2! focus:ring-[rgb(var(--ec-accent))]! focus:border-transparent! text-[rgb(var(--ec-input-text))]! placeholder:text-[rgb(var(--ec-input-placeholder))]!"
194
194
  />
195
195
  {searchQuery && (
196
196
  <button
@@ -207,7 +207,7 @@ export default function SearchBar({ nodes, onSelectResult, onSearchChange }: Pro
207
207
  <button
208
208
  onClick={() => setShowFilterDropdown(!showFilterDropdown)}
209
209
  className={cn(
210
- 'flex items-center justify-center w-10 h-10 rounded-lg border transition-colors',
210
+ 'flex items-center justify-center w-10 h-10 rounded-xl border transition-colors',
211
211
  searchFilters.size > 0
212
212
  ? 'bg-[rgb(var(--ec-accent)/0.1)] border-[rgb(var(--ec-accent)/0.3)] text-[rgb(var(--ec-accent))]'
213
213
  : 'bg-[rgb(var(--ec-input-bg))] border-[rgb(var(--ec-input-border))] text-[rgb(var(--ec-icon-color))] hover:text-[rgb(var(--ec-icon-hover))] hover:bg-[rgb(var(--ec-content-hover))]'