@eventcatalog/core 3.17.6 → 3.18.1

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 (42) 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-JB32XRPB.js → chunk-2N7MUB5X.js} +1 -1
  6. package/dist/{chunk-JR3DP5PU.js → chunk-JT4MBAV4.js} +1 -1
  7. package/dist/{chunk-VY646YFE.js → chunk-RROI5V6Z.js} +1 -1
  8. package/dist/{chunk-CSCCSFEV.js → chunk-TUP5UN7R.js} +1 -1
  9. package/dist/{chunk-7N35ESMH.js → chunk-ZCXH24ET.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.js +5 -5
  14. package/dist/generate.cjs +1 -1
  15. package/dist/generate.js +3 -3
  16. package/dist/utils/cli-logger.cjs +1 -1
  17. package/dist/utils/cli-logger.js +2 -2
  18. package/eventcatalog/src/components/EnvironmentDropdown.tsx +1 -1
  19. package/eventcatalog/src/components/Header.astro +5 -5
  20. package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +10 -6
  21. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraphPortal.tsx +1 -1
  22. package/eventcatalog/src/components/SchemaExplorer/ApiAccessSection.tsx +10 -10
  23. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +15 -13
  24. package/eventcatalog/src/components/Search/Search.astro +2 -2
  25. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +1 -1
  26. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +5 -6
  27. package/eventcatalog/src/content.config.ts +18 -3
  28. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +2 -26
  29. package/eventcatalog/src/pages/_index.astro +138 -113
  30. package/eventcatalog/src/pages/index.astro +17 -5
  31. package/eventcatalog/src/styles/theme.css +7 -2
  32. package/eventcatalog/src/styles/themes/forest.css +7 -7
  33. package/eventcatalog/src/utils/node-graphs/container-node-graph.ts +5 -1
  34. package/eventcatalog/src/utils/node-graphs/data-products-node-graph.ts +3 -1
  35. package/eventcatalog/src/utils/node-graphs/domains-canvas.ts +8 -2
  36. package/eventcatalog/src/utils/node-graphs/domains-node-graph.ts +1 -1
  37. package/eventcatalog/src/utils/node-graphs/flows-node-graph.ts +2 -2
  38. package/eventcatalog/src/utils/node-graphs/message-node-graph.ts +13 -4
  39. package/eventcatalog/src/utils/node-graphs/services-node-graph.ts +4 -1
  40. package/eventcatalog/src/utils/node-graphs/utils/utils.ts +80 -17
  41. package/eventcatalog/tailwind.config.mjs +11 -2
  42. package/package.json +5 -5
@@ -37,7 +37,7 @@ var import_axios = __toESM(require("axios"), 1);
37
37
  var import_os = __toESM(require("os"), 1);
38
38
 
39
39
  // package.json
40
- var version = "3.17.6";
40
+ var version = "3.18.1";
41
41
 
42
42
  // src/constants.ts
43
43
  var VERSION = version;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  raiseEvent
3
- } from "../chunk-VY646YFE.js";
4
- import "../chunk-7N35ESMH.js";
3
+ } from "../chunk-RROI5V6Z.js";
4
+ import "../chunk-ZCXH24ET.js";
5
5
  export {
6
6
  raiseEvent
7
7
  };
@@ -111,7 +111,7 @@ var import_axios = __toESM(require("axios"), 1);
111
111
  var import_os = __toESM(require("os"), 1);
112
112
 
113
113
  // package.json
114
- var version = "3.17.6";
114
+ var version = "3.18.1";
115
115
 
116
116
  // src/constants.ts
117
117
  var VERSION = version;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  log_build_default
3
- } from "../chunk-JB32XRPB.js";
4
- import "../chunk-VY646YFE.js";
3
+ } from "../chunk-2N7MUB5X.js";
4
+ import "../chunk-RROI5V6Z.js";
5
5
  import "../chunk-4UVFXLPI.js";
6
- import "../chunk-7N35ESMH.js";
6
+ import "../chunk-ZCXH24ET.js";
7
7
  import "../chunk-5T63CXKU.js";
8
8
  export {
9
9
  log_build_default as default
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  raiseEvent
3
- } from "./chunk-VY646YFE.js";
3
+ } from "./chunk-RROI5V6Z.js";
4
4
  import {
5
5
  countResources,
6
6
  serializeCounts
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-7N35ESMH.js";
3
+ } from "./chunk-ZCXH24ET.js";
4
4
 
5
5
  // src/utils/cli-logger.ts
6
6
  import pc from "picocolors";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-7N35ESMH.js";
3
+ } from "./chunk-ZCXH24ET.js";
4
4
 
5
5
  // src/analytics/analytics.js
6
6
  import axios from "axios";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  logger
3
- } from "./chunk-JR3DP5PU.js";
3
+ } from "./chunk-JT4MBAV4.js";
4
4
  import {
5
5
  cleanup,
6
6
  getEventCatalogConfigFile
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "3.17.6";
2
+ var version = "3.18.1";
3
3
 
4
4
  // src/constants.ts
5
5
  var VERSION = version;
@@ -25,7 +25,7 @@ __export(constants_exports, {
25
25
  module.exports = __toCommonJS(constants_exports);
26
26
 
27
27
  // package.json
28
- var version = "3.17.6";
28
+ var version = "3.18.1";
29
29
 
30
30
  // src/constants.ts
31
31
  var VERSION = version;
package/dist/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-7N35ESMH.js";
3
+ } from "./chunk-ZCXH24ET.js";
4
4
  export {
5
5
  VERSION
6
6
  };
@@ -114,7 +114,7 @@ var verifyRequiredFieldsAreInCatalogConfigFile = async (projectDirectory) => {
114
114
  var import_picocolors = __toESM(require("picocolors"), 1);
115
115
 
116
116
  // package.json
117
- var version = "3.17.6";
117
+ var version = "3.18.1";
118
118
 
119
119
  // src/constants.ts
120
120
  var VERSION = version;
@@ -6,8 +6,8 @@ import {
6
6
  } from "./chunk-PLNJC7NZ.js";
7
7
  import {
8
8
  log_build_default
9
- } from "./chunk-JB32XRPB.js";
10
- import "./chunk-VY646YFE.js";
9
+ } from "./chunk-2N7MUB5X.js";
10
+ import "./chunk-RROI5V6Z.js";
11
11
  import "./chunk-4UVFXLPI.js";
12
12
  import {
13
13
  runMigrations
@@ -22,13 +22,13 @@ import {
22
22
  } from "./chunk-3KXCGYET.js";
23
23
  import {
24
24
  generate
25
- } from "./chunk-CSCCSFEV.js";
25
+ } from "./chunk-TUP5UN7R.js";
26
26
  import {
27
27
  logger
28
- } from "./chunk-JR3DP5PU.js";
28
+ } from "./chunk-JT4MBAV4.js";
29
29
  import {
30
30
  VERSION
31
- } from "./chunk-7N35ESMH.js";
31
+ } from "./chunk-ZCXH24ET.js";
32
32
  import {
33
33
  getEventCatalogConfigFile,
34
34
  verifyRequiredFieldsAreInCatalogConfigFile
package/dist/generate.cjs CHANGED
@@ -78,7 +78,7 @@ var getEventCatalogConfigFile = async (projectDirectory) => {
78
78
  var import_picocolors = __toESM(require("picocolors"), 1);
79
79
 
80
80
  // package.json
81
- var version = "3.17.6";
81
+ var version = "3.18.1";
82
82
 
83
83
  // src/constants.ts
84
84
  var VERSION = version;
package/dist/generate.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  generate
3
- } from "./chunk-CSCCSFEV.js";
4
- import "./chunk-JR3DP5PU.js";
5
- import "./chunk-7N35ESMH.js";
3
+ } from "./chunk-TUP5UN7R.js";
4
+ import "./chunk-JT4MBAV4.js";
5
+ import "./chunk-ZCXH24ET.js";
6
6
  import "./chunk-5T63CXKU.js";
7
7
  export {
8
8
  generate
@@ -36,7 +36,7 @@ module.exports = __toCommonJS(cli_logger_exports);
36
36
  var import_picocolors = __toESM(require("picocolors"), 1);
37
37
 
38
38
  // package.json
39
- var version = "3.17.6";
39
+ var version = "3.18.1";
40
40
 
41
41
  // src/constants.ts
42
42
  var VERSION = version;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  logger
3
- } from "../chunk-JR3DP5PU.js";
4
- import "../chunk-7N35ESMH.js";
3
+ } from "../chunk-JT4MBAV4.js";
4
+ import "../chunk-ZCXH24ET.js";
5
5
  export {
6
6
  logger
7
7
  };
@@ -63,7 +63,7 @@ export const EnvironmentDropdown: React.FC<EnvironmentDropdownProps> = ({ enviro
63
63
  <button
64
64
  type="button"
65
65
  onClick={toggleDropdown}
66
- className="flex items-center space-x-1 text-sm font-medium text-[rgb(var(--ec-header-text))] hover:text-[rgb(var(--ec-icon-hover))] focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[rgb(var(--ec-accent))] rounded-md px-3 py-2"
66
+ className="flex items-center space-x-1 text-sm font-medium text-[rgb(var(--ec-header-text)/0.7)] hover:text-[rgb(var(--ec-header-text))] focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[rgb(var(--ec-accent))] rounded-md px-3 py-2 transition-colors"
67
67
  aria-expanded={isOpen}
68
68
  aria-haspopup="true"
69
69
  >
@@ -29,7 +29,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
29
29
  >
30
30
  <div class="px-4 sm:px-4 lg:px-4">
31
31
  <div class="flex justify-between items-center">
32
- <div class="flex-shrink-0 flex items-center w-3/12">
32
+ <div class="flex-shrink-0 flex items-center w-3/12 lg:w-[360px]">
33
33
  <a href={buildUrl(catalog.landingPage || '/')} class="flex space-x-2 items-center group">
34
34
  {
35
35
  logo.src && logo.src !== '/' && (
@@ -45,7 +45,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
45
45
  </div>
46
46
 
47
47
  <div class="hidden lg:flex flex-grow -ml-1 items-center">
48
- <div class="flex-grow max-w-xl">
48
+ <div class="w-full max-w-xl">
49
49
  <Search />
50
50
  </div>
51
51
  {isEventCatalogChatEnabled() && <ChatPanelButton client:idle />}
@@ -132,7 +132,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
132
132
  <img
133
133
  src={buildUrl('/icons/discord.svg', true)}
134
134
  alt=""
135
- class="h-6 w-6 hover:opacity-100 transition-opacity"
135
+ class="h-6 w-6 hover:opacity-100 transition-opacity ec-themed-icon"
136
136
  aria-hidden="true"
137
137
  />
138
138
  </a>
@@ -146,7 +146,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
146
146
  <img
147
147
  src={buildUrl('/icons/github.svg', true)}
148
148
  alt=""
149
- class="h-6 w-6 hover:opacity-100 transition-opacity"
149
+ class="h-6 w-6 hover:opacity-100 transition-opacity ec-themed-icon"
150
150
  aria-hidden="true"
151
151
  />
152
152
  </a>
@@ -164,7 +164,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
164
164
  <img
165
165
  src={buildUrl('/icons/github.svg', true)}
166
166
  alt=""
167
- class="h-6 w-6 opacity-70 hover:opacity-100 transition-opacity"
167
+ class="h-6 w-6 opacity-70 hover:opacity-100 transition-opacity ec-themed-icon"
168
168
  aria-hidden="true"
169
169
  />
170
170
  </a>
@@ -8,9 +8,9 @@
8
8
  * - URL building with Astro's URL utilities
9
9
  */
10
10
 
11
- import { useCallback, lazy, Suspense } from 'react';
12
- import '@eventcatalog/visualiser/styles.css';
11
+ import { useCallback, lazy, Suspense, useEffect } from 'react';
13
12
  import type { Node, Edge } from '@xyflow/react';
13
+ import { buildUrl } from '@utils/url-builder';
14
14
 
15
15
  const NodeGraph = lazy(() => import('@eventcatalog/visualiser').then((module) => ({ default: module.NodeGraph })));
16
16
 
@@ -39,17 +39,21 @@ interface AstroNodeGraphProps {
39
39
  }
40
40
 
41
41
  const AstroNodeGraph = ({ isDevMode = false, resourceKey, ...otherProps }: AstroNodeGraphProps) => {
42
+ useEffect(() => {
43
+ // Load visualizer styles only when this component is mounted.
44
+ // Use the core-scoped stylesheet so visualizer styles don't override EventCatalog utility classes globally.
45
+ import('@eventcatalog/visualiser/styles-core.css');
46
+ }, []);
47
+
42
48
  // Astro-specific navigation handler
43
49
  const handleNavigate = useCallback((url: string) => {
44
50
  // Use window.location for navigation since we can't import astro:transitions/client in a React component
45
51
  window.location.href = url;
46
52
  }, []);
47
53
 
48
- // Astro-specific URL builder
54
+ // Astro-specific URL builder that respects the configured base path
49
55
  const handleBuildUrl = useCallback((path: string) => {
50
- // Simple URL builder - just return the path as-is
51
- // The consuming app (core) should handle base URLs if needed
52
- return path;
56
+ return buildUrl(path);
53
57
  }, []);
54
58
 
55
59
  // Layout persistence: Save layout to Astro API route
@@ -1,7 +1,7 @@
1
1
  const NodeGraphPortal = (props: any) => {
2
2
  return (
3
3
  <div
4
- className="h-[30em] my-6 mb-12 w-full relative border border-[rgb(var(--ec-page-border))] rounded-md"
4
+ className="h-[30em] my-6 mb-12 w-full relative !border !border-[rgb(var(--ec-page-border))] rounded-md overflow-hidden"
5
5
  id={`${props.id}-portal`}
6
6
  style={{
7
7
  maxHeight: props.maxHeight ? `${props.maxHeight}em` : `30em`,
@@ -33,14 +33,14 @@ export default function ApiAccessSection({
33
33
  const isCopied = copiedId === `${message.data.id}-api`;
34
34
 
35
35
  return (
36
- <div className="flex-shrink-0 border-b border-gray-100">
36
+ <div className="flex-shrink-0 border-b border-[rgb(var(--ec-page-border))]">
37
37
  <button
38
38
  onClick={onToggle}
39
- className="w-full flex items-center justify-between px-4 py-2 text-left hover:bg-gray-50/50 transition-colors"
39
+ className="w-full flex items-center justify-between px-4 py-2 text-left hover:bg-[rgb(var(--ec-page-bg)/0.5)] transition-colors"
40
40
  >
41
41
  <div className="flex items-center gap-2">
42
- <CommandLineIcon className="h-3.5 w-3.5 text-gray-700" />
43
- <span className="text-xs font-medium text-gray-700">API</span>
42
+ <CommandLineIcon className="h-3.5 w-3.5 text-[rgb(var(--ec-icon-color))]" />
43
+ <span className="text-xs font-medium text-[rgb(var(--ec-page-text))]">API</span>
44
44
  {!apiAccessEnabled && (
45
45
  <span className="inline-flex items-center gap-1 rounded bg-[rgb(var(--ec-accent-subtle))] px-1.5 py-0.5 text-[10px] font-medium text-[rgb(var(--ec-accent-text))] border border-[rgb(var(--ec-accent)/0.2)]">
46
46
  <LockClosedIcon className="h-2.5 w-2.5" />
@@ -49,9 +49,9 @@ export default function ApiAccessSection({
49
49
  )}
50
50
  </div>
51
51
  {isExpanded ? (
52
- <ChevronUpIcon className="h-3.5 w-3.5 text-gray-400" />
52
+ <ChevronUpIcon className="h-3.5 w-3.5 text-[rgb(var(--ec-page-text-muted))]" />
53
53
  ) : (
54
- <ChevronDownIcon className="h-3.5 w-3.5 text-gray-400" />
54
+ <ChevronDownIcon className="h-3.5 w-3.5 text-[rgb(var(--ec-page-text-muted))]" />
55
55
  )}
56
56
  </button>
57
57
 
@@ -81,7 +81,7 @@ export default function ApiAccessSection({
81
81
  className={`inline-flex items-center gap-1.5 px-2 py-1 text-[10px] font-medium rounded border transition-colors ${
82
82
  copiedId === `${message.data.id}-curl`
83
83
  ? 'bg-emerald-50 text-emerald-600 border-emerald-200'
84
- : 'text-gray-500 border-gray-200 hover:bg-gray-50 hover:text-gray-700'
84
+ : 'text-[rgb(var(--ec-page-text-muted))] border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-input-bg))] hover:text-[rgb(var(--ec-page-text))]'
85
85
  }`}
86
86
  >
87
87
  {copiedId === `${message.data.id}-curl` ? (
@@ -101,7 +101,7 @@ export default function ApiAccessSection({
101
101
  className={`inline-flex items-center gap-1.5 px-2 py-1 text-[10px] font-medium rounded border transition-colors ${
102
102
  copiedId === `${message.data.id}-url`
103
103
  ? 'bg-emerald-50 text-emerald-600 border-emerald-200'
104
- : 'text-gray-500 border-gray-200 hover:bg-gray-50 hover:text-gray-700'
104
+ : 'text-[rgb(var(--ec-page-text-muted))] border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-input-bg))] hover:text-[rgb(var(--ec-page-text))]'
105
105
  }`}
106
106
  >
107
107
  {copiedId === `${message.data.id}-url` ? (
@@ -121,8 +121,8 @@ export default function ApiAccessSection({
121
121
  ) : (
122
122
  <div className="flex items-center justify-between gap-3 bg-[rgb(var(--ec-accent-subtle))] border border-[rgb(var(--ec-accent)/0.2)] rounded-md px-3 py-2.5">
123
123
  <div className="flex-1 min-w-0">
124
- <p className="text-xs font-medium text-gray-700">Access schemas via API</p>
125
- <p className="text-[10px] text-gray-500 mt-0.5">CI/CD, automation & integrations</p>
124
+ <p className="text-xs font-medium text-[rgb(var(--ec-page-text))]">Access schemas via API</p>
125
+ <p className="text-[10px] text-[rgb(var(--ec-page-text-muted))] mt-0.5">CI/CD, automation & integrations</p>
126
126
  </div>
127
127
  <a
128
128
  href="https://eventcatalog.cloud"
@@ -29,8 +29,8 @@ export default function ApiContentViewer({ message, onCopy, copiedId, apiAccessE
29
29
  <div className="flex items-center justify-center w-16 h-16 mx-auto mb-4 rounded-2xl bg-[rgb(var(--ec-accent-subtle))] border border-[rgb(var(--ec-accent)/0.3)]">
30
30
  <LockClosedIcon className="h-8 w-8 text-[rgb(var(--ec-accent))]" />
31
31
  </div>
32
- <h3 className="text-lg font-semibold text-gray-900 mb-2">API Access</h3>
33
- <p className="text-sm text-gray-600 mb-6">
32
+ <h3 className="text-lg font-semibold text-[rgb(var(--ec-page-text))] mb-2">API Access</h3>
33
+ <p className="text-sm text-[rgb(var(--ec-page-text-muted))] mb-6">
34
34
  Access your schemas programmatically via REST API. Perfect for CI/CD pipelines, automation, and integrations with your
35
35
  development workflow.
36
36
  </p>
@@ -45,7 +45,7 @@ export default function ApiContentViewer({ message, onCopy, copiedId, apiAccessE
45
45
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
46
46
  </svg>
47
47
  </a>
48
- <p className="text-xs text-gray-500 mt-3">Start your 14-day free trial</p>
48
+ <p className="text-xs text-[rgb(var(--ec-page-text-muted))] mt-3">Start your 14-day free trial</p>
49
49
  </div>
50
50
  </div>
51
51
  );
@@ -56,12 +56,12 @@ export default function ApiContentViewer({ message, onCopy, copiedId, apiAccessE
56
56
  <div className="max-w-2xl">
57
57
  {/* Header */}
58
58
  <div className="flex items-center gap-3 mb-6">
59
- <div className="flex items-center justify-center w-10 h-10 rounded-lg bg-gray-100">
60
- <CommandLineIcon className="h-5 w-5 text-gray-700" />
59
+ <div className="flex items-center justify-center w-10 h-10 rounded-lg bg-[rgb(var(--ec-accent-subtle))]">
60
+ <CommandLineIcon className="h-5 w-5 text-[rgb(var(--ec-icon-color))]" />
61
61
  </div>
62
62
  <div>
63
- <h3 className="text-sm font-semibold text-gray-900">API Access</h3>
64
- <p className="text-xs text-gray-500">Access this schema programmatically</p>
63
+ <h3 className="text-sm font-semibold text-[rgb(var(--ec-page-text))]">API Access</h3>
64
+ <p className="text-xs text-[rgb(var(--ec-page-text-muted))]">Access this schema programmatically</p>
65
65
  </div>
66
66
  </div>
67
67
 
@@ -125,16 +125,18 @@ export default function ApiContentViewer({ message, onCopy, copiedId, apiAccessE
125
125
  </div>
126
126
 
127
127
  {/* Response Info */}
128
- <div className="border border-gray-200 rounded-lg p-4">
129
- <h4 className="text-xs font-semibold text-gray-900 mb-3">Response</h4>
128
+ <div className="border border-[rgb(var(--ec-page-border))] rounded-lg p-4">
129
+ <h4 className="text-xs font-semibold text-[rgb(var(--ec-page-text))] mb-3">Response</h4>
130
130
  <div className="space-y-2">
131
131
  <div className="flex items-center justify-between text-xs">
132
- <span className="text-gray-500">Content-Type</span>
133
- <code className="text-gray-700 bg-gray-100 px-2 py-0.5 rounded">application/json</code>
132
+ <span className="text-[rgb(var(--ec-page-text-muted))]">Content-Type</span>
133
+ <code className="text-[rgb(var(--ec-page-text))] bg-[rgb(var(--ec-input-bg))] px-2 py-0.5 rounded">
134
+ application/json
135
+ </code>
134
136
  </div>
135
137
  <div className="flex items-center justify-between text-xs">
136
- <span className="text-gray-500">Returns</span>
137
- <span className="text-gray-700">Raw schema content</span>
138
+ <span className="text-[rgb(var(--ec-page-text-muted))]">Returns</span>
139
+ <span className="text-[rgb(var(--ec-page-text))]">Raw schema content</span>
138
140
  </div>
139
141
  </div>
140
142
  </div>
@@ -4,14 +4,14 @@ import SearchModal from './SearchModal.tsx';
4
4
  ---
5
5
 
6
6
  <div>
7
- <div class="relative flex items-center w-full pr-4">
7
+ <div class="relative flex items-center w-full pr-4 ml-1">
8
8
  <input
9
9
  id="search-dummy-input"
10
10
  type="text"
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-sm 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 px-4"
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-sm 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">
@@ -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-none 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 !text-sm !bg-[rgb(var(--ec-input-bg))] !border !border-[rgb(var(--ec-input-border))] !rounded-lg focus:!outline-none 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
@@ -865,7 +865,7 @@ export default function NestedSideBar() {
865
865
  <span
866
866
  className={cn(
867
867
  'flex items-center justify-center w-5 h-5 flex-shrink-0',
868
- isActive ? 'text-[rgb(var(--ec-content-text))]' : 'text-[rgb(var(--ec-content-text-muted))]'
868
+ isActive ? 'text-[rgb(var(--ec-accent-text))]' : 'text-[rgb(var(--ec-content-text-muted))]'
869
869
  )}
870
870
  >
871
871
  <IconComponent className="w-4 h-4" />
@@ -876,7 +876,7 @@ export default function NestedSideBar() {
876
876
  className={cn(
877
877
  'text-[13px] truncate',
878
878
  isActive
879
- ? 'text-[rgb(var(--ec-content-text))] font-medium'
879
+ ? 'text-[rgb(var(--ec-accent-text))] font-medium'
880
880
  : 'text-[rgb(var(--ec-content-text-secondary))] group-hover:text-[rgb(var(--ec-content-text))]'
881
881
  )}
882
882
  >
@@ -910,7 +910,7 @@ export default function NestedSideBar() {
910
910
  'group flex items-center justify-between w-full px-3 py-1.5 rounded-lg cursor-pointer text-left transition-colors hover:bg-[rgb(var(--ec-content-hover))] active:bg-[rgb(var(--ec-content-hover))]';
911
911
  const parentClasses = itemHasChildren ? 'font-medium' : '';
912
912
  const activeClasses = isActive
913
- ? 'bg-[rgb(var(--ec-content-active))] hover:bg-[rgb(var(--ec-content-active))] border-l-2 border-[rgb(var(--ec-accent))] rounded-l-none'
913
+ ? 'bg-[rgb(var(--ec-accent-subtle))] hover:bg-[rgb(var(--ec-accent-subtle))] !rounded-none'
914
914
  : '';
915
915
 
916
916
  // Leaf item with href → render as link
@@ -1122,8 +1122,7 @@ export default function NestedSideBar() {
1122
1122
  onClick={() => navigateToFavorite(fav)}
1123
1123
  className={cn(
1124
1124
  'group flex items-center justify-between w-full px-3 py-1.5 rounded-lg cursor-pointer text-left transition-colors hover:bg-amber-500/10 active:bg-amber-500/20',
1125
- isActive &&
1126
- 'bg-[rgb(var(--ec-content-active))] hover:bg-[rgb(var(--ec-content-active))] border-l-2 border-[rgb(var(--ec-accent))] rounded-l-none'
1125
+ isActive && 'bg-[rgb(var(--ec-accent-subtle))] hover:bg-[rgb(var(--ec-accent-subtle))] !rounded-none'
1127
1126
  )}
1128
1127
  >
1129
1128
  <div className="flex items-center gap-2.5 min-w-0 flex-1">
@@ -1131,7 +1130,7 @@ export default function NestedSideBar() {
1131
1130
  className={cn(
1132
1131
  'text-[14px] truncate',
1133
1132
  isActive
1134
- ? 'text-[rgb(var(--ec-content-text))] font-medium'
1133
+ ? 'text-[rgb(var(--ec-accent-text))] font-medium'
1135
1134
  : 'text-[rgb(var(--ec-content-text-secondary))] group-hover:text-[rgb(var(--ec-content-text))]'
1136
1135
  )}
1137
1136
  >
@@ -311,6 +311,14 @@ const flows = defineCollection({
311
311
  .merge(baseSchema),
312
312
  });
313
313
 
314
+ const operationSchema = z
315
+ .object({
316
+ method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).optional(),
317
+ path: z.string().optional(),
318
+ statusCodes: z.array(z.string()).optional(),
319
+ })
320
+ .optional();
321
+
314
322
  const messageDetailsPanelPropertySchema = z.object({
315
323
  producers: detailPanelPropertySchema.optional(),
316
324
  consumers: detailPanelPropertySchema.optional(),
@@ -332,10 +340,12 @@ const events = defineCollection({
332
340
  }),
333
341
  schema: z
334
342
  .object({
343
+ // Used by users
344
+ operation: operationSchema,
345
+ // Used by eventcatalog
335
346
  producers: z.array(reference('services')).optional(),
336
347
  consumers: z.array(reference('services')).optional(),
337
348
  channels: z.array(channelPointer).optional(),
338
- // Used by eventcatalog
339
349
  messageChannels: z.array(reference('channels')).optional(),
340
350
  detailsPanel: messageDetailsPanelPropertySchema.optional(),
341
351
  })
@@ -352,11 +362,13 @@ const commands = defineCollection({
352
362
  }),
353
363
  schema: z
354
364
  .object({
365
+ // Used by users
366
+ operation: operationSchema,
367
+ // Used by eventcatalog
355
368
  producers: z.array(reference('services')).optional(),
356
369
  consumers: z.array(reference('services')).optional(),
357
370
  channels: z.array(channelPointer).optional(),
358
371
  detailsPanel: messageDetailsPanelPropertySchema.optional(),
359
- // Used by eventcatalog
360
372
  messageChannels: z.array(reference('channels')).optional(),
361
373
  })
362
374
  .merge(baseSchema),
@@ -372,11 +384,13 @@ const queries = defineCollection({
372
384
  }),
373
385
  schema: z
374
386
  .object({
387
+ // Used by users
388
+ operation: operationSchema,
389
+ // Used by eventcatalog
375
390
  producers: z.array(reference('services')).optional(),
376
391
  consumers: z.array(reference('services')).optional(),
377
392
  channels: z.array(channelPointer).optional(),
378
393
  detailsPanel: messageDetailsPanelPropertySchema.optional(),
379
- // Used by eventcatalog
380
394
  messageChannels: z.array(reference('channels')).optional(),
381
395
  })
382
396
  .merge(baseSchema),
@@ -622,6 +636,7 @@ const channels = defineCollection({
622
636
  channels: z.array(channelPointer).optional(),
623
637
  address: z.string().optional(),
624
638
  protocols: z.array(z.string()).optional(),
639
+ deliveryGuarantee: z.enum(['at-most-once', 'at-least-once', 'exactly-once']).optional(),
625
640
  routes: z.array(channelPointer).optional(),
626
641
  parameters: z
627
642
  .record(
@@ -299,7 +299,7 @@ const canPageBeEmbedded = isEmbedEnabled();
299
299
  <div class="flex">
300
300
  <aside class="flex" id="eventcatalog-vertical-nav">
301
301
  <div
302
- 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"
302
+ class="fixed flex flex-col items-center w-14 h-screen py-3 bg-[rgb(var(--ec-sidebar-bg))] bg-gradient-to-t from-[rgb(var(--ec-accent)/0.08)] to-[rgb(var(--ec-sidebar-bg))] border-r border-[rgb(var(--ec-sidebar-border))] z-20 shadow-md justify-between"
303
303
  >
304
304
  <nav class="flex flex-col h-[calc(100vh-70px)] justify-between">
305
305
  <div class="flex flex-col items-center flex-1 space-y-6">
@@ -333,30 +333,6 @@ const canPageBeEmbedded = isEmbedEnabled();
333
333
 
334
334
  <hr class="w-8 border-t border-[rgb(var(--ec-sidebar-border))]" />
335
335
 
336
- {
337
- studioNavigationItem.length > 0 && (
338
- <a
339
- id={studioNavigationItem[0].id}
340
- data-role="nav-item"
341
- href={studioNavigationItem[0].href}
342
- aria-label={studioNavigationItem[0].label}
343
- 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))]'}`}
344
- >
345
- <div class="has-tooltip">
346
- <span
347
- class="tooltip rounded shadow-lg p-1 text-xs bg-gray-900 text-white ml-10 whitespace-nowrap"
348
- aria-hidden="true"
349
- >
350
- {studioNavigationItem[0].label}
351
- </span>
352
- <SquareDashedMousePointerIcon className="h-6 w-6" aria-hidden="true" />
353
- </div>
354
- </a>
355
- )
356
- }
357
-
358
- {studioNavigationItem.length > 0 && <hr class="w-8 border-t border-[rgb(var(--ec-sidebar-border))]" />}
359
-
360
336
  {
361
337
  premiumFeatures.map((item) => (
362
338
  <a
@@ -420,7 +396,7 @@ const canPageBeEmbedded = isEmbedEnabled();
420
396
  showNestedSideBar && (
421
397
  <SideNav
422
398
  id="sidebar"
423
- class={`sidebar-transition h-content bg-[rgb(var(--ec-sidebar-bg))] border-r border-[rgb(var(--ec-sidebar-border))] w-[320px] ml-14`}
399
+ class={`sidebar-transition h-content bg-[rgb(var(--ec-sidebar-bg))] bg-gradient-to-bl from-[rgb(var(--ec-sidebar-bg))] via-[rgb(var(--ec-sidebar-bg))] to-[rgb(var(--ec-accent)/0.08)] border-r border-[rgb(var(--ec-sidebar-border))] w-[320px] ml-14`}
424
400
  />
425
401
  )
426
402
  }