@eventcatalog/core 2.54.0 → 2.54.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.
- package/dist/analytics/analytics.cjs +1 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +1 -1
- package/dist/analytics/log-build.js +3 -3
- package/dist/{chunk-TWNARJRZ.js → chunk-6BODD7KM.js} +1 -1
- package/dist/{chunk-EPCSIZTP.js → chunk-LC46PXQR.js} +1 -1
- package/dist/{chunk-E4632BOL.js → chunk-TFCOMD54.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog.cjs +6 -3
- package/dist/eventcatalog.js +8 -5
- package/eventcatalog/src/components/Search/SearchModal.tsx +79 -128
- package/eventcatalog/src/pages/auth/error.astro +47 -35
- package/eventcatalog/src/pages/chat/feature.astro +137 -125
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
log_build_default
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-6BODD7KM.js";
|
|
4
|
+
import "../chunk-LC46PXQR.js";
|
|
5
|
+
import "../chunk-TFCOMD54.js";
|
|
6
6
|
import "../chunk-E7TXTI7G.js";
|
|
7
7
|
export {
|
|
8
8
|
log_build_default as default
|
package/dist/constants.cjs
CHANGED
package/dist/constants.js
CHANGED
package/dist/eventcatalog.cjs
CHANGED
|
@@ -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.54.
|
|
160
|
+
var version = "2.54.2";
|
|
161
161
|
|
|
162
162
|
// src/constants.ts
|
|
163
163
|
var VERSION = version;
|
|
@@ -826,8 +826,8 @@ program.command("build").description("Run build of EventCatalog").action(async (
|
|
|
826
826
|
);
|
|
827
827
|
if (!isServerOutput) {
|
|
828
828
|
const outDir = await getProjectOutDir();
|
|
829
|
-
const windowsCommand2 = `npx -y pagefind --site ${outDir}
|
|
830
|
-
const unixCommand2 = `npx -y pagefind --site ${outDir}
|
|
829
|
+
const windowsCommand2 = `npx -y pagefind --site ${outDir}`;
|
|
830
|
+
const unixCommand2 = `npx -y pagefind --site ${outDir}`;
|
|
831
831
|
const pagefindCommand = process.platform === "win32" ? windowsCommand2 : unixCommand2;
|
|
832
832
|
(0, import_node_child_process.execSync)(
|
|
833
833
|
`cross-env PROJECT_DIR='${dir}' CATALOG_DIR='${core}' ENABLE_EMBED=${canEmbedPages} EVENTCATALOG_STARTER=${isEventCatalogStarter} EVENTCATALOG_SCALE=${isEventCatalogScale} ${pagefindCommand}`,
|
|
@@ -836,6 +836,9 @@ program.command("build").description("Run build of EventCatalog").action(async (
|
|
|
836
836
|
stdio: "inherit"
|
|
837
837
|
}
|
|
838
838
|
);
|
|
839
|
+
if (import_fs2.default.existsSync((0, import_node_path6.join)(dir, outDir, "pagefind"))) {
|
|
840
|
+
import_fs2.default.cpSync((0, import_node_path6.join)(dir, outDir, "pagefind"), (0, import_node_path6.join)(dir, "public", "pagefind"), { recursive: true });
|
|
841
|
+
}
|
|
839
842
|
}
|
|
840
843
|
});
|
|
841
844
|
var previewCatalog = ({
|
package/dist/eventcatalog.js
CHANGED
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
} from "./chunk-XE6PFSH5.js";
|
|
7
7
|
import {
|
|
8
8
|
log_build_default
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-6BODD7KM.js";
|
|
10
|
+
import "./chunk-LC46PXQR.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-
|
|
18
|
+
} from "./chunk-TFCOMD54.js";
|
|
19
19
|
import {
|
|
20
20
|
getProjectOutDir,
|
|
21
21
|
isAuthEnabled,
|
|
@@ -216,8 +216,8 @@ program.command("build").description("Run build of EventCatalog").action(async (
|
|
|
216
216
|
);
|
|
217
217
|
if (!isServerOutput) {
|
|
218
218
|
const outDir = await getProjectOutDir();
|
|
219
|
-
const windowsCommand2 = `npx -y pagefind --site ${outDir}
|
|
220
|
-
const unixCommand2 = `npx -y pagefind --site ${outDir}
|
|
219
|
+
const windowsCommand2 = `npx -y pagefind --site ${outDir}`;
|
|
220
|
+
const unixCommand2 = `npx -y pagefind --site ${outDir}`;
|
|
221
221
|
const pagefindCommand = process.platform === "win32" ? windowsCommand2 : unixCommand2;
|
|
222
222
|
execSync(
|
|
223
223
|
`cross-env PROJECT_DIR='${dir}' CATALOG_DIR='${core}' ENABLE_EMBED=${canEmbedPages} EVENTCATALOG_STARTER=${isEventCatalogStarter} EVENTCATALOG_SCALE=${isEventCatalogScale} ${pagefindCommand}`,
|
|
@@ -226,6 +226,9 @@ program.command("build").description("Run build of EventCatalog").action(async (
|
|
|
226
226
|
stdio: "inherit"
|
|
227
227
|
}
|
|
228
228
|
);
|
|
229
|
+
if (fs.existsSync(join(dir, outDir, "pagefind"))) {
|
|
230
|
+
fs.cpSync(join(dir, outDir, "pagefind"), join(dir, "public", "pagefind"), { recursive: true });
|
|
231
|
+
}
|
|
229
232
|
}
|
|
230
233
|
});
|
|
231
234
|
var previewCatalog = ({
|
|
@@ -34,6 +34,8 @@ const SearchResultItem = React.memo<{
|
|
|
34
34
|
if (type === 'asyncapi') return 'AsyncAPI';
|
|
35
35
|
if (type === 'openapi') return 'OpenAPI';
|
|
36
36
|
if (type === 'language') return 'Language';
|
|
37
|
+
if (type === 'entities') return 'Entity';
|
|
38
|
+
if (type === 'queries') return 'Query';
|
|
37
39
|
// For plurals, remove 's' at the end, otherwise just capitalize
|
|
38
40
|
if (type.endsWith('s')) {
|
|
39
41
|
return type.charAt(0).toUpperCase() + type.slice(1, -1);
|
|
@@ -112,8 +114,6 @@ const SearchModal: React.FC = () => {
|
|
|
112
114
|
useEffect(() => {
|
|
113
115
|
const handleModalToggle = (event: CustomEvent) => {
|
|
114
116
|
setIsOpen(event.detail.isOpen);
|
|
115
|
-
|
|
116
|
-
// Load all results when modal opens - will be handled by another effect
|
|
117
117
|
};
|
|
118
118
|
|
|
119
119
|
window.addEventListener('searchModalToggle', handleModalToggle as EventListener);
|
|
@@ -285,57 +285,6 @@ const SearchModal: React.FC = () => {
|
|
|
285
285
|
return 'other';
|
|
286
286
|
}, []);
|
|
287
287
|
|
|
288
|
-
// Load all results using a wildcard search
|
|
289
|
-
const loadAllResults = useCallback(async () => {
|
|
290
|
-
if (!pagefind) return;
|
|
291
|
-
|
|
292
|
-
setIsLoading(true);
|
|
293
|
-
try {
|
|
294
|
-
// Use a common word or wildcard to get all indexed content
|
|
295
|
-
const search = await pagefind.search('a');
|
|
296
|
-
if (!search || !search.results) {
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
const processedResults: SearchResult[] = [];
|
|
300
|
-
|
|
301
|
-
for (const result of search.results) {
|
|
302
|
-
const data = await result.data();
|
|
303
|
-
const type = getTypeFromUrl(data.url);
|
|
304
|
-
|
|
305
|
-
// Clean the title by removing any "Type | " prefix if it exists
|
|
306
|
-
let cleanTitle = data.meta?.title || 'Untitled';
|
|
307
|
-
|
|
308
|
-
// Use regex for more efficient prefix removal
|
|
309
|
-
cleanTitle = cleanTitle.replace(
|
|
310
|
-
/^(Domains?|Services?|Events?|Commands?|Queries?|Entities?|Channels?|Teams?|Users?|Language) \| /,
|
|
311
|
-
''
|
|
312
|
-
);
|
|
313
|
-
|
|
314
|
-
processedResults.push({
|
|
315
|
-
id: result.id,
|
|
316
|
-
name: cleanTitle,
|
|
317
|
-
type: type,
|
|
318
|
-
description: data.excerpt || '',
|
|
319
|
-
url: data.url,
|
|
320
|
-
tags: data.meta?.tags ? data.meta.tags.split(',').map((tag: string) => tag.trim()) : [],
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
setAllResults(processedResults);
|
|
325
|
-
} catch (error) {
|
|
326
|
-
console.error('Error loading all results:', error);
|
|
327
|
-
} finally {
|
|
328
|
-
setIsLoading(false);
|
|
329
|
-
}
|
|
330
|
-
}, [pagefind, getTypeFromUrl]);
|
|
331
|
-
|
|
332
|
-
// Load results when modal opens and pagefind is available
|
|
333
|
-
useEffect(() => {
|
|
334
|
-
if (isOpen && pagefind && !pagefindLoadError) {
|
|
335
|
-
loadAllResults();
|
|
336
|
-
}
|
|
337
|
-
}, [isOpen, pagefind, pagefindLoadError, loadAllResults]);
|
|
338
|
-
|
|
339
288
|
// Perform search
|
|
340
289
|
const performSearch = useCallback(
|
|
341
290
|
async (searchTerm: string): Promise<SearchResult[]> => {
|
|
@@ -406,7 +355,7 @@ const SearchModal: React.FC = () => {
|
|
|
406
355
|
[exactMatch, currentSearch]
|
|
407
356
|
);
|
|
408
357
|
|
|
409
|
-
// Update results
|
|
358
|
+
// Update results with debouncing
|
|
410
359
|
const updateResults = useCallback(async () => {
|
|
411
360
|
if (currentSearch.trim()) {
|
|
412
361
|
const results = await performSearch(currentSearch);
|
|
@@ -416,10 +365,19 @@ const SearchModal: React.FC = () => {
|
|
|
416
365
|
}
|
|
417
366
|
}, [currentSearch, performSearch]);
|
|
418
367
|
|
|
419
|
-
// Search on input change
|
|
368
|
+
// Search on input change with debouncing
|
|
420
369
|
useEffect(() => {
|
|
421
|
-
|
|
422
|
-
|
|
370
|
+
if (!currentSearch.trim()) {
|
|
371
|
+
setAllResults([]);
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
const debounceTimer = setTimeout(() => {
|
|
376
|
+
updateResults();
|
|
377
|
+
}, 300); // 300ms debounce
|
|
378
|
+
|
|
379
|
+
return () => clearTimeout(debounceTimer);
|
|
380
|
+
}, [currentSearch, updateResults]);
|
|
423
381
|
|
|
424
382
|
// Handle input change
|
|
425
383
|
const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
@@ -577,7 +535,7 @@ const SearchModal: React.FC = () => {
|
|
|
577
535
|
<div className="flex items-center gap-1.5">
|
|
578
536
|
<span>All Resources</span>
|
|
579
537
|
</div>
|
|
580
|
-
<span className="text-xs text-gray-
|
|
538
|
+
<span className="text-xs text-gray-700 font-thin">{counts.all}</span>
|
|
581
539
|
</div>
|
|
582
540
|
</button>
|
|
583
541
|
</div>
|
|
@@ -585,7 +543,7 @@ const SearchModal: React.FC = () => {
|
|
|
585
543
|
|
|
586
544
|
{/* Resources Section */}
|
|
587
545
|
<div className="mb-4">
|
|
588
|
-
<h3 className="text-xs font-
|
|
546
|
+
<h3 className="text-xs font-bold text-gray-600 mb-2">Resources</h3>
|
|
589
547
|
<div className="space-y-1">
|
|
590
548
|
{Object.entries({
|
|
591
549
|
domains: 'Domains',
|
|
@@ -609,9 +567,9 @@ const SearchModal: React.FC = () => {
|
|
|
609
567
|
<div className="flex items-center justify-between">
|
|
610
568
|
<div className="flex items-center gap-1.5">
|
|
611
569
|
{IconComponent && <IconComponent className="h-3 w-3" />}
|
|
612
|
-
<span>{label}</span>
|
|
570
|
+
<span className="font-thin">{label}</span>
|
|
613
571
|
</div>
|
|
614
|
-
<span className="text-xs text-gray-
|
|
572
|
+
<span className="text-xs text-gray-700 font-thin">{counts[key as keyof typeof counts]}</span>
|
|
615
573
|
</div>
|
|
616
574
|
</button>
|
|
617
575
|
);
|
|
@@ -621,7 +579,7 @@ const SearchModal: React.FC = () => {
|
|
|
621
579
|
|
|
622
580
|
{/* Messages Section */}
|
|
623
581
|
<div className="mb-4">
|
|
624
|
-
<h3 className="text-xs font-
|
|
582
|
+
<h3 className="text-xs font-bold text-gray-600 mb-2">Messages</h3>
|
|
625
583
|
<div className="space-y-1">
|
|
626
584
|
{Object.entries({
|
|
627
585
|
events: 'Events',
|
|
@@ -645,9 +603,9 @@ const SearchModal: React.FC = () => {
|
|
|
645
603
|
<div className="flex items-center justify-between">
|
|
646
604
|
<div className="flex items-center gap-1.5">
|
|
647
605
|
{IconComponent && <IconComponent className="h-3 w-3" />}
|
|
648
|
-
<span>{label}</span>
|
|
606
|
+
<span className="font-thin">{label}</span>
|
|
649
607
|
</div>
|
|
650
|
-
<span className="text-xs text-gray-
|
|
608
|
+
<span className="text-xs text-gray-700 font-thin">{counts[key as keyof typeof counts]}</span>
|
|
651
609
|
</div>
|
|
652
610
|
</button>
|
|
653
611
|
);
|
|
@@ -657,7 +615,7 @@ const SearchModal: React.FC = () => {
|
|
|
657
615
|
|
|
658
616
|
{/* Organization Section */}
|
|
659
617
|
<div className="mb-4">
|
|
660
|
-
<h3 className="text-xs font-
|
|
618
|
+
<h3 className="text-xs font-bold text-gray-600 mb-2">Organization</h3>
|
|
661
619
|
<div className="space-y-1">
|
|
662
620
|
{Object.entries({
|
|
663
621
|
teams: 'Teams',
|
|
@@ -679,9 +637,9 @@ const SearchModal: React.FC = () => {
|
|
|
679
637
|
<div className="flex items-center justify-between">
|
|
680
638
|
<div className="flex items-center gap-1.5">
|
|
681
639
|
{IconComponent && <IconComponent className="h-3 w-3" />}
|
|
682
|
-
<span>{label}</span>
|
|
640
|
+
<span className="font-thin">{label}</span>
|
|
683
641
|
</div>
|
|
684
|
-
<span className="text-xs text-gray-
|
|
642
|
+
<span className="text-xs text-gray-700 font-thin">{counts[key as keyof typeof counts]}</span>
|
|
685
643
|
</div>
|
|
686
644
|
</button>
|
|
687
645
|
);
|
|
@@ -691,7 +649,7 @@ const SearchModal: React.FC = () => {
|
|
|
691
649
|
|
|
692
650
|
{/* Specifications Section */}
|
|
693
651
|
<div className="mb-4">
|
|
694
|
-
<h3 className="text-xs font-
|
|
652
|
+
<h3 className="text-xs font-bold text-gray-600 mb-2">Specifications</h3>
|
|
695
653
|
<div className="space-y-1">
|
|
696
654
|
{Object.entries({
|
|
697
655
|
openapi: 'OpenAPI Specification',
|
|
@@ -713,9 +671,9 @@ const SearchModal: React.FC = () => {
|
|
|
713
671
|
<div className="flex items-center justify-between">
|
|
714
672
|
<div className="flex items-center gap-1.5">
|
|
715
673
|
<IconComponent className="h-3 w-3" />
|
|
716
|
-
<span>{label}</span>
|
|
674
|
+
<span className="font-thin">{label}</span>
|
|
717
675
|
</div>
|
|
718
|
-
<span className="text-xs text-gray-
|
|
676
|
+
<span className="text-xs text-gray-700 font-thin">{counts[key as keyof typeof counts]}</span>
|
|
719
677
|
</div>
|
|
720
678
|
</button>
|
|
721
679
|
);
|
|
@@ -725,25 +683,16 @@ const SearchModal: React.FC = () => {
|
|
|
725
683
|
</div>
|
|
726
684
|
|
|
727
685
|
{/* Right Results */}
|
|
728
|
-
<div className="flex-1
|
|
729
|
-
{/* Show stats and exact match toggle */}
|
|
730
|
-
|
|
731
|
-
<div className="
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
</>
|
|
737
|
-
) : (
|
|
738
|
-
<>
|
|
739
|
-
<span>{filteredResults.length} resources</span> in EventCatalog
|
|
740
|
-
{isLoading && <span className="ml-2">Loading...</span>}
|
|
741
|
-
</>
|
|
742
|
-
)}
|
|
743
|
-
</div>
|
|
686
|
+
<div className="flex-1 flex flex-col overflow-hidden">
|
|
687
|
+
{/* Show stats and exact match toggle - only when there are results or search term */}
|
|
688
|
+
{currentSearch.trim() && (filteredResults.length > 0 || isLoading) && (
|
|
689
|
+
<div className="p-4 pb-2 flex items-center justify-between border-b border-gray-100">
|
|
690
|
+
<div className="text-sm text-gray-500 font-thin">
|
|
691
|
+
<span>{filteredResults.length} results</span> for "{currentSearch}"
|
|
692
|
+
{isLoading && <span className="ml-2">Loading...</span>}
|
|
693
|
+
</div>
|
|
744
694
|
|
|
745
|
-
|
|
746
|
-
{currentSearch.trim() && (
|
|
695
|
+
{/* Exact Match Checkbox */}
|
|
747
696
|
<div className="flex items-center">
|
|
748
697
|
<input
|
|
749
698
|
id="exact-match-results"
|
|
@@ -756,49 +705,51 @@ const SearchModal: React.FC = () => {
|
|
|
756
705
|
Exact match in title
|
|
757
706
|
</label>
|
|
758
707
|
</div>
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
</
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
708
|
+
</div>
|
|
709
|
+
)}
|
|
710
|
+
|
|
711
|
+
{/* Main content area */}
|
|
712
|
+
<div className="flex-1 overflow-y-auto">
|
|
713
|
+
{!currentSearch.trim() ? (
|
|
714
|
+
// Show when no search term is entered - centered
|
|
715
|
+
<div className="h-full flex items-center justify-center">
|
|
716
|
+
<div className="text-center">
|
|
717
|
+
<MagnifyingGlassIcon className="mx-auto h-8 w-8 text-gray-300" />
|
|
718
|
+
<h3 className="mt-4 text-lg font-medium text-gray-900">Discover your EventCatalog</h3>
|
|
719
|
+
<p className="mt-2 text-sm text-gray-500 font-thin">
|
|
720
|
+
Start typing to search for domains, services, events, and more.
|
|
721
|
+
</p>
|
|
722
|
+
</div>
|
|
723
|
+
</div>
|
|
724
|
+
) : filteredResults.length === 0 && !isLoading ? (
|
|
725
|
+
// Show when search term exists but no results and not loading - centered
|
|
726
|
+
<div className="h-full flex items-center justify-center">
|
|
727
|
+
<div className="text-center">
|
|
728
|
+
<MagnifyingGlassIcon className="mx-auto h-8 w-8 text-gray-300" />
|
|
729
|
+
<h3 className="mt-2 text-sm font-bold text-gray-900">No results found</h3>
|
|
730
|
+
<p className="mt-1 text-sm text-gray-500 font-thin">
|
|
731
|
+
No results found for "<span className="font-medium">{currentSearch}</span>".
|
|
732
|
+
</p>
|
|
733
|
+
</div>
|
|
782
734
|
</div>
|
|
783
|
-
) :
|
|
784
|
-
// Show
|
|
785
|
-
<div className="
|
|
786
|
-
<
|
|
787
|
-
<
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
</svg>
|
|
794
|
-
<h3 className="mt-2 text-sm font-medium text-gray-900">No results found</h3>
|
|
795
|
-
<p className="mt-1 text-sm text-gray-500">
|
|
796
|
-
No results found for "<span className="font-medium">{currentSearch}</span>". Try different keywords or
|
|
797
|
-
check your spelling.
|
|
798
|
-
</p>
|
|
735
|
+
) : isLoading ? (
|
|
736
|
+
// Show loading state - centered
|
|
737
|
+
<div className="h-full flex items-center justify-center">
|
|
738
|
+
<div className="text-center">
|
|
739
|
+
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-purple-600 mx-auto"></div>
|
|
740
|
+
<h3 className="mt-4 text-sm font-medium text-gray-900">Searching...</h3>
|
|
741
|
+
<p className="mt-2 text-sm text-gray-500 font-thin">
|
|
742
|
+
Finding results for "<span className="font-medium">{currentSearch}</span>"
|
|
743
|
+
</p>
|
|
744
|
+
</div>
|
|
799
745
|
</div>
|
|
800
746
|
) : (
|
|
801
|
-
|
|
747
|
+
// Show results in a grid with padding
|
|
748
|
+
<div className="p-4">
|
|
749
|
+
<div className="search-results grid grid-cols-1 lg:grid-cols-2 gap-3">
|
|
750
|
+
<SearchResults results={filteredResults} typeConfig={typeConfig} currentSearch={currentSearch} />
|
|
751
|
+
</div>
|
|
752
|
+
</div>
|
|
802
753
|
)}
|
|
803
754
|
</div>
|
|
804
755
|
</div>
|
|
@@ -15,41 +15,53 @@ const errorMessages = {
|
|
|
15
15
|
const errorMessage = errorMessages[error] || errorMessages.Default;
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
<!doctype html>
|
|
19
|
+
<html lang="en">
|
|
20
|
+
<head>
|
|
21
|
+
<meta charset="UTF-8" />
|
|
22
|
+
<meta name="viewport" content="width=device-width" />
|
|
23
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
24
|
+
<meta name="generator" content={Astro.generator} />
|
|
25
|
+
<title>Authentication Error - EventCatalog</title>
|
|
26
|
+
</head>
|
|
27
|
+
<body>
|
|
28
|
+
<main title="Authentication Error - EventCatalog">
|
|
29
|
+
<div class="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
|
|
30
|
+
<div class="max-w-md w-full space-y-8 text-center">
|
|
31
|
+
<div>
|
|
32
|
+
<svg class="mx-auto h-12 w-12 text-red-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
33
|
+
<path
|
|
34
|
+
stroke-linecap="round"
|
|
35
|
+
stroke-linejoin="round"
|
|
36
|
+
stroke-width="2"
|
|
37
|
+
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"
|
|
38
|
+
></path>
|
|
39
|
+
</svg>
|
|
40
|
+
<h2 class="mt-6 text-3xl font-bold text-gray-900">Authentication Error</h2>
|
|
41
|
+
<p class="mt-2 text-sm text-gray-600">
|
|
42
|
+
{errorMessage}
|
|
43
|
+
</p>
|
|
44
|
+
</div>
|
|
35
45
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
<div class="space-y-4">
|
|
47
|
+
<a
|
|
48
|
+
href="/auth/login"
|
|
49
|
+
class="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
|
50
|
+
>
|
|
51
|
+
Try Again
|
|
52
|
+
</a>
|
|
43
53
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
<a
|
|
55
|
+
href="/"
|
|
56
|
+
class="w-full flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
|
57
|
+
>
|
|
58
|
+
Back to Home
|
|
59
|
+
</a>
|
|
60
|
+
</div>
|
|
51
61
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
</main>
|
|
62
|
+
{error && <div class="mt-8 text-xs text-gray-400">Error code: {error}</div>}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</main>
|
|
66
|
+
</body>
|
|
67
|
+
</html>
|
|
@@ -9,148 +9,160 @@ if (hasChatLicense) {
|
|
|
9
9
|
}
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
12
|
+
<!doctype html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="UTF-8" />
|
|
16
|
+
<meta name="viewport" content="width=device-width" />
|
|
17
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
18
|
+
<meta name="generator" content={Astro.generator} />
|
|
19
|
+
<title>EventCatalog chat?</title>
|
|
20
|
+
</head>
|
|
21
|
+
<body>
|
|
22
|
+
<VerticalSideBarLayout title="AI Chat">
|
|
23
|
+
<div class="min-h-[calc(100vh-60px)] bg-white">
|
|
24
|
+
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
|
|
25
|
+
{/* Hero Section */}
|
|
26
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center mb-16">
|
|
27
|
+
<div>
|
|
28
|
+
<div class="inline-flex items-center px-4 py-2 rounded-full bg-purple-100 text-purple-700 font-medium text-sm mb-6">
|
|
29
|
+
<BotMessageSquare className="w-4 h-4 mr-2" />
|
|
30
|
+
New: Ask your catalog anything
|
|
31
|
+
</div>
|
|
32
|
+
<h1 class="text-4xl font-bold text-gray-900 tracking-tight mb-4">Ask. Understand. Ship faster.</h1>
|
|
33
|
+
<p class="text-xl text-gray-600 mb-8">
|
|
34
|
+
Get answers about your events, services, and domains — instantly. Runs entirely in your browser — your data never
|
|
35
|
+
leaves your machine.
|
|
36
|
+
</p>
|
|
37
|
+
<div class="flex flex-col sm:flex-row gap-4 mb-8">
|
|
38
|
+
<a
|
|
39
|
+
href="https://demo.eventcatalog.dev/chat"
|
|
40
|
+
target="_blank"
|
|
41
|
+
class="inline-flex items-center juNot ready for AI chat? You castify-center px-6 py-3 border border-transparent text-base font-medium rounded-lg text-white bg-purple-600 hover:bg-purple-700 transition-colors duration-150"
|
|
42
|
+
>
|
|
43
|
+
Try the demo
|
|
44
|
+
<svg class="ml-2 w-4 h-4" viewBox="0 0 20 20" fill="currentColor">
|
|
45
|
+
<path
|
|
46
|
+
fill-rule="evenodd"
|
|
47
|
+
d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z"
|
|
48
|
+
clip-rule="evenodd"></path>
|
|
49
|
+
</svg>
|
|
50
|
+
</a>
|
|
51
|
+
<a
|
|
52
|
+
href="https://www.eventcatalog.cloud"
|
|
53
|
+
target="_blank"
|
|
54
|
+
class="inline-flex items-center justify-center px-6 py-3 border border-gray-300 text-base font-medium rounded-lg text-gray-700 bg-white hover:bg-gray-50 transition-colors duration-150"
|
|
55
|
+
>
|
|
56
|
+
Try for free
|
|
57
|
+
</a>
|
|
58
|
+
</div>
|
|
59
|
+
<p class="text-sm text-gray-500">
|
|
60
|
+
Available with EventCatalog Starter or Scale plans
|
|
61
|
+
<a href="https://www.eventcatalog.dev/pricing" class="text-purple-600 font-medium block"
|
|
62
|
+
>Try free for 14 days, no credit card required</a
|
|
63
|
+
>
|
|
64
|
+
</p>
|
|
63
65
|
</div>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
<div class="w-3 h-3 bg-green-400 rounded-full"></div>
|
|
66
|
+
|
|
67
|
+
<div class="relative">
|
|
68
|
+
<div class="absolute -inset-4">
|
|
69
|
+
<div
|
|
70
|
+
class="w-full h-full max-w-full mx-auto opacity-30 blur-lg filter"
|
|
71
|
+
style="background: linear-gradient(90deg, #C084FC 0%, #818CF8 100%);"
|
|
72
|
+
>
|
|
72
73
|
</div>
|
|
73
74
|
</div>
|
|
74
|
-
<div class="
|
|
75
|
-
<div class="
|
|
76
|
-
<div class="bg-
|
|
77
|
-
|
|
75
|
+
<div class="relative">
|
|
76
|
+
<div class="bg-white rounded-xl shadow-xl border border-gray-200 overflow-hidden">
|
|
77
|
+
<div class="bg-gray-50 px-4 py-3 border-b border-gray-200">
|
|
78
|
+
<div class="flex items-center space-x-2">
|
|
79
|
+
<div class="w-3 h-3 bg-red-400 rounded-full"></div>
|
|
80
|
+
<div class="w-3 h-3 bg-yellow-400 rounded-full"></div>
|
|
81
|
+
<div class="w-3 h-3 bg-green-400 rounded-full"></div>
|
|
82
|
+
</div>
|
|
78
83
|
</div>
|
|
79
|
-
|
|
84
|
+
<div class="p-4 space-y-4">
|
|
85
|
+
<div class="flex justify-end">
|
|
86
|
+
<div class="bg-purple-600 text-white rounded-2xl rounded-tr-sm px-4 py-2 max-w-md text-sm">
|
|
87
|
+
What services publish order.created?
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
80
90
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
<div class="flex justify-start">
|
|
92
|
+
<div class="bg-gray-50 rounded-2xl rounded-tl-sm px-4 py-3 max-w-md shadow-sm">
|
|
93
|
+
<p class="text-gray-700 text-sm">
|
|
94
|
+
The <span class="font-semibold">Order Service</span> publishes the order.created event.
|
|
95
|
+
</p>
|
|
96
|
+
<p class="text-gray-700 text-sm mt-2 mb-1">This event is consumed by:</p>
|
|
97
|
+
<ul class="space-y-1 text-gray-600 text-sm">
|
|
98
|
+
<li>• Payment Service - Initiates payment processing</li>
|
|
99
|
+
<li>• Inventory Service - Updates stock levels</li>
|
|
100
|
+
<li>• Notification Service - Sends order confirmations</li>
|
|
101
|
+
</ul>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
92
104
|
</div>
|
|
93
105
|
</div>
|
|
94
106
|
</div>
|
|
95
107
|
</div>
|
|
96
108
|
</div>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
109
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
110
|
+
{/* Features Section */}
|
|
111
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
112
|
+
<div class="bg-white rounded-xl p-6 shadow-sm border border-gray-200">
|
|
113
|
+
<div class="w-12 h-12 bg-purple-100 rounded-lg flex items-center justify-center mb-4">
|
|
114
|
+
<svg class="w-6 h-6 text-purple-600" viewBox="0 0 24 24" fill="currentColor">
|
|
115
|
+
<path
|
|
116
|
+
d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"
|
|
117
|
+
></path>
|
|
118
|
+
</svg>
|
|
119
|
+
</div>
|
|
120
|
+
<h3 class="text-lg font-semibold text-gray-900 mb-2">Instant Search</h3>
|
|
121
|
+
<p class="text-gray-600">
|
|
122
|
+
Search and understand complex service relationships in seconds with natural language queries.
|
|
123
|
+
</p>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<div class="bg-white rounded-xl p-6 shadow-sm border border-gray-200">
|
|
127
|
+
<div class="w-12 h-12 bg-purple-100 rounded-lg flex items-center justify-center mb-4">
|
|
128
|
+
<svg class="w-6 h-6 text-purple-600" viewBox="0 0 24 24" fill="currentColor">
|
|
129
|
+
<path
|
|
130
|
+
d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"
|
|
131
|
+
></path>
|
|
132
|
+
</svg>
|
|
133
|
+
</div>
|
|
134
|
+
<h3 class="text-lg font-semibold text-gray-900 mb-2">Smart Insights</h3>
|
|
135
|
+
<p class="text-gray-600">Get intelligent suggestions and insights about your architecture automatically.</p>
|
|
136
|
+
</div>
|
|
115
137
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
138
|
+
<div class="bg-white rounded-xl p-6 shadow-sm border border-gray-200">
|
|
139
|
+
<div class="w-12 h-12 bg-purple-100 rounded-lg flex items-center justify-center mb-4">
|
|
140
|
+
<svg class="w-6 h-6 text-purple-600" viewBox="0 0 24 24" fill="currentColor">
|
|
141
|
+
<path
|
|
142
|
+
d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"
|
|
143
|
+
></path>
|
|
144
|
+
</svg>
|
|
145
|
+
</div>
|
|
146
|
+
<h3 class="text-lg font-semibold text-gray-900 mb-2">Privacy First</h3>
|
|
147
|
+
<p class="text-gray-600">All processing happens locally in your browser. Your data never leaves your machine.</p>
|
|
148
|
+
</div>
|
|
123
149
|
</div>
|
|
124
|
-
<h3 class="text-lg font-semibold text-gray-900 mb-2">Smart Insights</h3>
|
|
125
|
-
<p class="text-gray-600">Get intelligent suggestions and insights about your architecture automatically.</p>
|
|
126
|
-
</div>
|
|
127
150
|
|
|
128
|
-
|
|
129
|
-
<div class="
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
151
|
+
{/* Bottom Link */}
|
|
152
|
+
<div class="mt-16 text-center">
|
|
153
|
+
<a
|
|
154
|
+
href="https://www.eventcatalog.dev/docs/development/guides/customize-sidebars/application-sidebar"
|
|
155
|
+
target="_blank"
|
|
156
|
+
class="text-sm text-gray-400 hover:text-gray-500 transition-colors duration-150"
|
|
157
|
+
>
|
|
158
|
+
Not ready for AI chat? You can hide this feature in settings
|
|
159
|
+
</a>
|
|
135
160
|
</div>
|
|
136
|
-
<h3 class="text-lg font-semibold text-gray-900 mb-2">Privacy First</h3>
|
|
137
|
-
<p class="text-gray-600">All processing happens locally in your browser. Your data never leaves your machine.</p>
|
|
138
161
|
</div>
|
|
139
162
|
</div>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
<a
|
|
144
|
-
href="https://www.eventcatalog.dev/docs/development/guides/customize-sidebars/application-sidebar"
|
|
145
|
-
target="_blank"
|
|
146
|
-
class="text-sm text-gray-400 hover:text-gray-500 transition-colors duration-150"
|
|
147
|
-
>
|
|
148
|
-
Not ready for AI chat? You can hide this feature in settings
|
|
149
|
-
</a>
|
|
150
|
-
</div>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
</VerticalSideBarLayout>
|
|
163
|
+
</VerticalSideBarLayout>
|
|
164
|
+
</body>
|
|
165
|
+
</html>
|
|
154
166
|
|
|
155
167
|
<style>
|
|
156
168
|
.scroll-smooth {
|