@eventcatalog/core 2.50.1 → 2.50.2

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.
@@ -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 = "2.50.1";
40
+ var version = "2.50.2";
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-BTQCPTER.js";
4
- import "../chunk-SDBKZ3UM.js";
3
+ } from "../chunk-PRZAFM4L.js";
4
+ import "../chunk-L3RINLLN.js";
5
5
  export {
6
6
  raiseEvent
7
7
  };
@@ -106,7 +106,7 @@ var import_axios = __toESM(require("axios"), 1);
106
106
  var import_os = __toESM(require("os"), 1);
107
107
 
108
108
  // package.json
109
- var version = "2.50.1";
109
+ var version = "2.50.2";
110
110
 
111
111
  // src/constants.ts
112
112
  var VERSION = version;
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  log_build_default
3
- } from "../chunk-UG5JRBOA.js";
4
- import "../chunk-BTQCPTER.js";
5
- import "../chunk-SDBKZ3UM.js";
3
+ } from "../chunk-6DT6JYDR.js";
4
+ import "../chunk-PRZAFM4L.js";
5
+ import "../chunk-L3RINLLN.js";
6
6
  import "../chunk-E7TXTI7G.js";
7
7
  export {
8
8
  log_build_default as default
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  raiseEvent
3
- } from "./chunk-BTQCPTER.js";
3
+ } from "./chunk-PRZAFM4L.js";
4
4
  import {
5
5
  getEventCatalogConfigFile,
6
6
  verifyRequiredFieldsAreInCatalogConfigFile
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "2.50.1";
2
+ var version = "2.50.2";
3
3
 
4
4
  // src/constants.ts
5
5
  var VERSION = version;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-SDBKZ3UM.js";
3
+ } from "./chunk-L3RINLLN.js";
4
4
 
5
5
  // src/analytics/analytics.js
6
6
  import axios from "axios";
@@ -25,7 +25,7 @@ __export(constants_exports, {
25
25
  module.exports = __toCommonJS(constants_exports);
26
26
 
27
27
  // package.json
28
- var version = "2.50.1";
28
+ var version = "2.50.2";
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-SDBKZ3UM.js";
3
+ } from "./chunk-L3RINLLN.js";
4
4
  export {
5
5
  VERSION
6
6
  };
@@ -157,7 +157,7 @@ var import_axios = __toESM(require("axios"), 1);
157
157
  var import_os = __toESM(require("os"), 1);
158
158
 
159
159
  // package.json
160
- var version = "2.50.1";
160
+ var version = "2.50.2";
161
161
 
162
162
  // src/constants.ts
163
163
  var VERSION = version;
@@ -6,8 +6,8 @@ import {
6
6
  } from "./chunk-XE6PFSH5.js";
7
7
  import {
8
8
  log_build_default
9
- } from "./chunk-UG5JRBOA.js";
10
- import "./chunk-BTQCPTER.js";
9
+ } from "./chunk-6DT6JYDR.js";
10
+ import "./chunk-PRZAFM4L.js";
11
11
  import {
12
12
  catalogToAstro,
13
13
  checkAndConvertMdToMdx
@@ -15,7 +15,7 @@ import {
15
15
  import "./chunk-LDBRNJIL.js";
16
16
  import {
17
17
  VERSION
18
- } from "./chunk-SDBKZ3UM.js";
18
+ } from "./chunk-L3RINLLN.js";
19
19
  import {
20
20
  isAuthEnabled,
21
21
  isBackstagePluginEnabled,
@@ -47,18 +47,78 @@ export function CopyPageMenu({
47
47
  chatQuery,
48
48
  chatEnabled = false,
49
49
  editUrl,
50
+ markdownDownloadEnabled = false,
50
51
  }: {
51
52
  schemas: Schema[];
52
53
  chatQuery?: string;
53
54
  chatEnabled: boolean;
54
55
  editUrl: string;
56
+ markdownDownloadEnabled: boolean;
55
57
  }) {
56
- const [buttonText, setButtonText] = useState('Copy page');
58
+ // Define available actions
59
+ const availableActions = {
60
+ copyMarkdown: markdownDownloadEnabled,
61
+ editPage: !!editUrl,
62
+ copySchemas: schemas.length > 0,
63
+ viewMarkdown: markdownDownloadEnabled,
64
+ chat: chatEnabled,
65
+ };
66
+
67
+ // Check if any actions are available
68
+ const hasAnyActions = Object.values(availableActions).some(Boolean);
69
+
70
+ // If no actions are available, return null
71
+ if (!hasAnyActions) {
72
+ return null;
73
+ }
57
74
 
58
75
  // get the url of the current page
59
76
  const url = window.location.href;
60
77
  const markdownUrl = url + '.mdx';
61
78
 
79
+ // Determine the default action based on what's available
80
+ const getDefaultAction = () => {
81
+ if (availableActions.copyMarkdown) {
82
+ return {
83
+ type: 'copyMarkdown',
84
+ text: 'Copy page',
85
+ icon: Copy,
86
+ };
87
+ }
88
+ if (availableActions.editPage) {
89
+ return {
90
+ type: 'editPage',
91
+ text: 'Edit page',
92
+ icon: PenSquareIcon,
93
+ };
94
+ }
95
+ if (availableActions.copySchemas) {
96
+ return {
97
+ type: 'copySchemas',
98
+ text: 'Copy schema',
99
+ icon: FileText,
100
+ };
101
+ }
102
+ if (availableActions.viewMarkdown) {
103
+ return {
104
+ type: 'viewMarkdown',
105
+ text: 'View Markdown',
106
+ icon: FileText,
107
+ };
108
+ }
109
+ if (availableActions.chat) {
110
+ return {
111
+ type: 'chat',
112
+ text: 'Open Chat',
113
+ icon: MessageCircleQuestion,
114
+ };
115
+ }
116
+ return null;
117
+ };
118
+
119
+ const defaultAction = getDefaultAction();
120
+ const [buttonText, setButtonText] = useState(defaultAction?.text || 'Action');
121
+
62
122
  // Fetch the markdown from the url + .mdx
63
123
  const copyMarkdownToClipboard = async () => {
64
124
  console.log('Copying markdown to clipboard');
@@ -70,11 +130,11 @@ export function CopyPageMenu({
70
130
  }
71
131
  const markdown = await response.text();
72
132
  await navigator.clipboard.writeText(markdown);
73
- setTimeout(() => setButtonText('Copy page'), 3000); // Revert after 3 seconds
133
+ setTimeout(() => setButtonText(defaultAction?.text || 'Action'), 3000); // Revert after 3 seconds
74
134
  } catch (error) {
75
135
  console.error('Failed to copy markdown:', error);
76
136
  setButtonText('Copy failed'); // Provide feedback on failure
77
- setTimeout(() => setButtonText('Copy page'), 3000);
137
+ setTimeout(() => setButtonText(defaultAction?.text || 'Action'), 3000);
78
138
  }
79
139
  };
80
140
 
@@ -91,25 +151,52 @@ export function CopyPageMenu({
91
151
  }
92
152
  const schemaContent = await response.text(); // Or response.json() if it's always JSON
93
153
  await navigator.clipboard.writeText(schemaContent);
94
- setTimeout(() => setButtonText('Copy page'), 3000); // Revert after 3 seconds
154
+ setTimeout(() => setButtonText(defaultAction?.text || 'Action'), 3000); // Revert after 3 seconds
95
155
  } catch (error) {
96
156
  console.error('Failed to copy schema:', error);
97
157
  setButtonText('Copy failed'); // Provide feedback on failure
98
- setTimeout(() => setButtonText('Copy page'), 3000);
158
+ setTimeout(() => setButtonText(defaultAction?.text || 'Action'), 3000);
99
159
  }
100
160
  };
101
161
 
162
+ // Handle the default action based on type
163
+ const handleDefaultAction = () => {
164
+ if (!defaultAction) return;
165
+
166
+ switch (defaultAction.type) {
167
+ case 'copyMarkdown':
168
+ copyMarkdownToClipboard();
169
+ break;
170
+ case 'editPage':
171
+ window.open(editUrl, '_blank');
172
+ break;
173
+ case 'copySchemas':
174
+ copySchemaToClipboard(schemas[0]);
175
+ break;
176
+ case 'viewMarkdown':
177
+ window.open(markdownUrl, '_blank');
178
+ break;
179
+ case 'chat':
180
+ window.open(buildUrl(`/chat?query=${chatQuery}`));
181
+ break;
182
+ }
183
+ };
184
+
185
+ if (!defaultAction) {
186
+ return null;
187
+ }
188
+
102
189
  return (
103
190
  <DropdownMenu.Root>
104
191
  {/* Container for the split button */}
105
192
  <div className="inline-flex rounded-md shadow-sm border border-gray-300">
106
- {/* Left Button: Copy Action */}
193
+ {/* Left Button: Default Action */}
107
194
  <button
108
195
  type="button"
109
- onClick={copyMarkdownToClipboard}
196
+ onClick={handleDefaultAction}
110
197
  className="inline-flex items-center justify-center gap-1 px-3 py-1.5 text-sm font-medium text-gray-700 bg-white rounded-l-md hover:bg-gray-50 focus:z-10 focus:outline-none focus:ring-1 focus:ring-indigo-500"
111
198
  >
112
- <Copy className="w-4 h-4" />
199
+ <defaultAction.icon className="w-4 h-4" />
113
200
  {buttonText}
114
201
  </button>
115
202
  {/* Right Button: Dropdown Trigger */}
@@ -130,14 +217,16 @@ export function CopyPageMenu({
130
217
  sideOffset={5}
131
218
  align="end"
132
219
  >
133
- <DropdownMenu.Item
134
- className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
135
- onSelect={() => copyMarkdownToClipboard()}
136
- >
137
- <MenuItemContent icon={Copy} title="Copy page" description="Copy page as Markdown for LLMs" />
138
- </DropdownMenu.Item>
220
+ {availableActions.copyMarkdown && (
221
+ <DropdownMenu.Item
222
+ className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
223
+ onSelect={() => copyMarkdownToClipboard()}
224
+ >
225
+ <MenuItemContent icon={Copy} title="Copy page" description="Copy page as Markdown for LLMs" />
226
+ </DropdownMenu.Item>
227
+ )}
139
228
 
140
- {editUrl && (
229
+ {availableActions.editPage && (
141
230
  <DropdownMenu.Item
142
231
  className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
143
232
  onSelect={() => window.open(editUrl, '_blank')}
@@ -151,49 +240,58 @@ export function CopyPageMenu({
151
240
  </DropdownMenu.Item>
152
241
  )}
153
242
 
154
- {schemas.map((schema) => {
155
- const title =
156
- schema.format === 'asyncapi'
157
- ? 'Copy AsyncAPI specification'
158
- : schema.format === 'openapi'
159
- ? 'Copy OpenAPI specification'
160
- : 'Copy schema';
161
- const type =
162
- schema.format === 'asyncapi' || schema.format === 'openapi'
163
- ? 'specification'
164
- : `${schema.format.toUpperCase()} schema`;
165
-
166
- const Icon =
167
- schema.format === 'asyncapi' ? (
168
- <img src={buildUrl('/icons/asyncapi.svg', true)} className="w-4 h-4" />
169
- ) : schema.format === 'openapi' ? (
170
- <img src={buildUrl('/icons/openapi.svg', true)} className="w-4 h-4" />
171
- ) : (
172
- FileText
243
+ {availableActions.copySchemas &&
244
+ schemas.map((schema) => {
245
+ const title =
246
+ schema.format === 'asyncapi'
247
+ ? 'Copy AsyncAPI specification'
248
+ : schema.format === 'openapi'
249
+ ? 'Copy OpenAPI specification'
250
+ : 'Copy schema';
251
+ const type =
252
+ schema.format === 'asyncapi' || schema.format === 'openapi'
253
+ ? 'specification'
254
+ : `${schema.format.toUpperCase()} schema`;
255
+
256
+ const Icon =
257
+ schema.format === 'asyncapi' ? (
258
+ <img src={buildUrl('/icons/asyncapi.svg', true)} className="w-4 h-4" />
259
+ ) : schema.format === 'openapi' ? (
260
+ <img src={buildUrl('/icons/openapi.svg', true)} className="w-4 h-4" />
261
+ ) : (
262
+ FileText
263
+ );
264
+
265
+ return (
266
+ <DropdownMenu.Item
267
+ key={schema.url}
268
+ className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
269
+ onSelect={() => copySchemaToClipboard(schema)}
270
+ >
271
+ <MenuItemContent icon={Icon} title={title} description={`Copy ${type} to clipboard`} />
272
+ </DropdownMenu.Item>
173
273
  );
274
+ })}
174
275
 
175
- return (
176
- <DropdownMenu.Item
177
- className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
178
- onSelect={() => copySchemaToClipboard(schema)}
179
- >
180
- <MenuItemContent icon={Icon} title={title} description={`Copy ${type} to clipboard`} />
181
- </DropdownMenu.Item>
182
- );
183
- })}
184
-
185
- <DropdownMenu.Item
186
- className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
187
- onSelect={() => window.open(markdownUrl, '_blank')}
188
- >
189
- <MenuItemContent icon={FileText} title="View as Markdown" description="View this page as plain text" external={true} />
190
- </DropdownMenu.Item>
191
- {chatEnabled && (
276
+ {availableActions.viewMarkdown && (
277
+ <DropdownMenu.Item
278
+ className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
279
+ onSelect={() => window.open(markdownUrl, '_blank')}
280
+ >
281
+ <MenuItemContent
282
+ icon={FileText}
283
+ title="View as Markdown"
284
+ description="View this page as plain text"
285
+ external={true}
286
+ />
287
+ </DropdownMenu.Item>
288
+ )}
289
+
290
+ {availableActions.chat && (
192
291
  <DropdownMenu.Item
193
292
  className="cursor-pointer hover:bg-gray-100 focus:outline-none focus:bg-gray-100"
194
293
  onSelect={() => window.open(buildUrl(`/chat?query=${chatQuery}`))}
195
294
  >
196
- {/* Using MessageCircleQuestion as a placeholder for Claude logo */}
197
295
  <MenuItemContent
198
296
  icon={MessageCircleQuestion}
199
297
  title="Open in EventCatalog Chat"
@@ -212,19 +212,16 @@ nodeGraphs.push({
212
212
  {props.data.name}
213
213
  <span class="">(v{props.data.version})</span>
214
214
  </h2>
215
- {
216
- isMarkdownDownloadEnabled() && (
217
- <div class="hidden lg:block">
218
- <CopyAsMarkdown
219
- client:only="react"
220
- schemas={schemasForResource}
221
- chatQuery={generatePromptForResource(props)}
222
- chatEnabled={isEventCatalogChatEnabled()}
223
- editUrl={editUrl}
224
- />
225
- </div>
226
- )
227
- }
215
+ <div class="hidden lg:block">
216
+ <CopyAsMarkdown
217
+ client:only="react"
218
+ schemas={schemasForResource}
219
+ chatQuery={generatePromptForResource(props)}
220
+ chatEnabled={isEventCatalogChatEnabled()}
221
+ markdownDownloadEnabled={isMarkdownDownloadEnabled()}
222
+ editUrl={editUrl}
223
+ />
224
+ </div>
228
225
  </div>
229
226
  {
230
227
  isMarkedAsDeprecated && hasDeprecated && (
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/event-catalog/eventcatalog.git"
7
7
  },
8
8
  "type": "module",
9
- "version": "2.50.1",
9
+ "version": "2.50.2",
10
10
  "publishConfig": {
11
11
  "access": "public"
12
12
  },
@@ -24,9 +24,9 @@
24
24
  "@ai-sdk/anthropic": "^1.2.11",
25
25
  "@ai-sdk/google": "^1.2.17",
26
26
  "@ai-sdk/openai": "^1.3.16",
27
- "@astrojs/markdown-remark": "^6.3.2",
28
- "@astrojs/mdx": "^4.3.0",
29
- "@astrojs/node": "^9.2.2",
27
+ "@astrojs/markdown-remark": "^6.3.3",
28
+ "@astrojs/mdx": "^4.3.1",
29
+ "@astrojs/node": "^9.3.0",
30
30
  "@astrojs/react": "^4.3.0",
31
31
  "@astrojs/rss": "^4.0.12",
32
32
  "@astrojs/tailwind": "^6.0.2",
@@ -56,7 +56,7 @@
56
56
  "@tanstack/react-table": "^8.17.3",
57
57
  "@xyflow/react": "^12.3.6",
58
58
  "ai": "^4.3.9",
59
- "astro": "^5.9.3",
59
+ "astro": "^5.12.0",
60
60
  "astro-compress": "^2.3.8",
61
61
  "astro-expressive-code": "^0.40.1",
62
62
  "astro-pagefind": "^1.6.0",