@eventcatalog/core 2.31.1 → 2.31.3
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-GHBJ372G.js → chunk-34ONBQTK.js} +1 -1
- package/dist/{chunk-YUINCBLT.js → chunk-4EXYGKM6.js} +1 -1
- package/dist/{chunk-QR5UTYCE.js → chunk-KYLVZEB2.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog.cjs +1 -1
- package/dist/eventcatalog.js +3 -3
- package/eventcatalog/src/enterprise/custom-documentation/collection.ts +1 -1
- package/eventcatalog/src/enterprise/custom-documentation/pages/index.astro +12 -17
- package/eventcatalog/src/enterprise/custom-documentation/utils/custom-docs.ts +76 -0
- package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +0 -4
- package/eventcatalog/src/pages/docs/custom/index.astro +237 -0
- 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-KYLVZEB2.js";
|
|
4
|
+
import "../chunk-34ONBQTK.js";
|
|
5
|
+
import "../chunk-4EXYGKM6.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
package/dist/eventcatalog.js
CHANGED
|
@@ -6,15 +6,15 @@ import {
|
|
|
6
6
|
} from "./chunk-UKJ7F5WR.js";
|
|
7
7
|
import {
|
|
8
8
|
log_build_default
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-KYLVZEB2.js";
|
|
10
|
+
import "./chunk-34ONBQTK.js";
|
|
11
11
|
import {
|
|
12
12
|
catalogToAstro,
|
|
13
13
|
checkAndConvertMdToMdx
|
|
14
14
|
} from "./chunk-7SI5EVOX.js";
|
|
15
15
|
import {
|
|
16
16
|
VERSION
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-4EXYGKM6.js";
|
|
18
18
|
import {
|
|
19
19
|
isBackstagePluginEnabled,
|
|
20
20
|
isEventCatalogProEnabled
|
|
@@ -8,6 +8,7 @@ import mdxComponents from '@components/MDX/components';
|
|
|
8
8
|
import OwnersList from '@components/Lists/OwnersList';
|
|
9
9
|
import { getOwner } from '@utils/collections/owners';
|
|
10
10
|
import CustomDocsNav from '@components/SideNav/CustomDocsNav.astro';
|
|
11
|
+
import { getAdjacentPages } from '../utils/custom-docs';
|
|
11
12
|
|
|
12
13
|
const props = Astro.props;
|
|
13
14
|
const doc = props.data;
|
|
@@ -53,12 +54,7 @@ sidebar.forEach((section: SidebarSection) => {
|
|
|
53
54
|
}
|
|
54
55
|
});
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
const currentIndex = flattenedItems.findIndex((item) => currentSlug === item.slug);
|
|
58
|
-
|
|
59
|
-
// Get previous and next items
|
|
60
|
-
const prevItem = currentIndex > 0 ? flattenedItems[currentIndex - 1] : null;
|
|
61
|
-
const nextItem = currentIndex < flattenedItems.length - 1 ? flattenedItems[currentIndex + 1] : null;
|
|
57
|
+
const { prev, next } = await getAdjacentPages(currentSlug.replace());
|
|
62
58
|
|
|
63
59
|
const ownersRaw = doc?.owners || [];
|
|
64
60
|
const owners = await Promise.all<ReturnType<typeof getOwner>>(ownersRaw.map(getOwner));
|
|
@@ -83,11 +79,12 @@ const badges = doc?.badges || [];
|
|
|
83
79
|
</aside>
|
|
84
80
|
|
|
85
81
|
<!-- Main Content Area - Independent scrolling -->
|
|
86
|
-
<main class="sidebar-transition w-full max-h-content ml-[22em] 2xl:ml-[24em] mr-80 lg:mr-[
|
|
82
|
+
<main class="sidebar-transition w-full max-h-content ml-[22em] 2xl:ml-[24em] mr-80 lg:mr-[20em] max-w-5xl mx-auto">
|
|
87
83
|
<div class="max-w-7xl mx-auto px-6 py-10">
|
|
88
84
|
<div class="border-b border-gray-200 flex justify-between items-start md:pb-6">
|
|
89
85
|
<div>
|
|
90
86
|
<h2 id="doc-page-header" class="text-2xl md:text-4xl font-bold text-black">{doc.title}</h2>
|
|
87
|
+
<p class="text-lg pt-2 text-gray-500 font-light">{doc.summary}</p>
|
|
91
88
|
{
|
|
92
89
|
badges && (
|
|
93
90
|
<div class="flex flex-wrap pt-4">
|
|
@@ -118,27 +115,27 @@ const badges = doc?.badges || [];
|
|
|
118
115
|
<div class="py-8 border-t border-gray-200 mt-8">
|
|
119
116
|
<div class="flex flex-col sm:flex-row justify-between w-full gap-4">
|
|
120
117
|
{
|
|
121
|
-
|
|
118
|
+
prev && (
|
|
122
119
|
<a
|
|
123
|
-
href={buildUrl(`/docs/custom/${
|
|
120
|
+
href={buildUrl(`/docs/custom/${prev.slug}`)}
|
|
124
121
|
class="group flex flex-col border border-gray-200 rounded-lg p-4 hover:border-gray-300 hover:bg-gray-50 transition-colors w-full sm:w-1/2"
|
|
125
122
|
>
|
|
126
123
|
<span class="text-sm text-gray-500 mb-1">Previous</span>
|
|
127
|
-
<span class="font-medium group-hover:text-primary-600 transition-colors">{
|
|
124
|
+
<span class="font-medium group-hover:text-primary-600 transition-colors">{prev.label}</span>
|
|
128
125
|
</a>
|
|
129
126
|
)
|
|
130
127
|
}
|
|
131
128
|
|
|
132
|
-
{!
|
|
129
|
+
{!prev && <div class="w-full sm:w-1/2" />}
|
|
133
130
|
|
|
134
131
|
{
|
|
135
|
-
|
|
132
|
+
next && (
|
|
136
133
|
<a
|
|
137
|
-
href={buildUrl(`/docs/custom/${
|
|
134
|
+
href={buildUrl(`/docs/custom/${next.slug}`)}
|
|
138
135
|
class="group flex flex-col items-end text-right border border-gray-200 rounded-lg p-4 hover:border-gray-300 hover:bg-gray-50 transition-colors w-full sm:w-1/2"
|
|
139
136
|
>
|
|
140
137
|
<span class="text-sm text-gray-500 mb-1">Next</span>
|
|
141
|
-
<span class="font-medium group-hover:text-primary-600 transition-colors">{
|
|
138
|
+
<span class="font-medium group-hover:text-primary-600 transition-colors">{next.label}</span>
|
|
142
139
|
</a>
|
|
143
140
|
)
|
|
144
141
|
}
|
|
@@ -149,7 +146,7 @@ const badges = doc?.badges || [];
|
|
|
149
146
|
|
|
150
147
|
<!-- Right Sidebar TOC -->
|
|
151
148
|
<aside
|
|
152
|
-
class="fixed right-0 top-16 bottom-0 w-96 overflow-y-auto border-l border-gray-100 bg-white p-6 flex-shrink-0 hidden lg:block z-10"
|
|
149
|
+
class="fixed right-0 top-16 bottom-0 w-80 2xl:w-96 overflow-y-auto border-l border-gray-100 bg-white p-6 flex-shrink-0 hidden lg:block z-10"
|
|
153
150
|
>
|
|
154
151
|
<div>
|
|
155
152
|
<div>
|
|
@@ -272,7 +269,6 @@ const badges = doc?.badges || [];
|
|
|
272
269
|
|
|
273
270
|
// First try to find headings with IDs
|
|
274
271
|
const headings = prose.querySelectorAll('h1[id], h2[id], h3[id]');
|
|
275
|
-
console.log('Headings with IDs found:', headings.length);
|
|
276
272
|
|
|
277
273
|
if (headings.length > 0) {
|
|
278
274
|
headings.forEach((heading) => {
|
|
@@ -281,7 +277,6 @@ const badges = doc?.badges || [];
|
|
|
281
277
|
} else {
|
|
282
278
|
// Fallback: If no headings with IDs found, attach IDs to them
|
|
283
279
|
const allHeadings = prose.querySelectorAll('h1, h2, h3');
|
|
284
|
-
console.log('Total headings found:', allHeadings.length);
|
|
285
280
|
|
|
286
281
|
allHeadings.forEach((heading) => {
|
|
287
282
|
// Only add ID if it doesn't exist
|
|
@@ -29,6 +29,16 @@ type SideBarConfigurationItem = {
|
|
|
29
29
|
collapsed?: boolean;
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
+
type AdjacentPage = {
|
|
33
|
+
label: string;
|
|
34
|
+
slug: string;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
type AdjacentPages = {
|
|
38
|
+
prev: AdjacentPage | null;
|
|
39
|
+
next: AdjacentPage | null;
|
|
40
|
+
};
|
|
41
|
+
|
|
32
42
|
const DOCS_DIR = 'docs';
|
|
33
43
|
|
|
34
44
|
/**
|
|
@@ -112,6 +122,72 @@ const processSidebarItems = async (items: SideBarConfigurationItem[]): Promise<S
|
|
|
112
122
|
return processedItems;
|
|
113
123
|
};
|
|
114
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Flatten all navigation items into a single array of pages with slugs
|
|
127
|
+
* This is used to find previous and next pages for navigation
|
|
128
|
+
*/
|
|
129
|
+
const flattenNavigationItems = (items: SidebarItem[]): AdjacentPage[] => {
|
|
130
|
+
const flatPages: AdjacentPage[] = [];
|
|
131
|
+
|
|
132
|
+
const processItem = (item: SidebarItem) => {
|
|
133
|
+
// Add the current item if it has a slug
|
|
134
|
+
if (item.slug) {
|
|
135
|
+
flatPages.push({
|
|
136
|
+
label: item.label,
|
|
137
|
+
slug: item.slug,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Process nested items if they exist
|
|
142
|
+
if (item.items && item.items.length > 0) {
|
|
143
|
+
item.items.forEach(processItem);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
items.forEach(processItem);
|
|
148
|
+
return flatPages;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Get the previous and next pages for a given slug
|
|
153
|
+
* Returns null for prev if it's the first page, and null for next if it's the last page
|
|
154
|
+
*/
|
|
155
|
+
export const getAdjacentPages = async (slug: string): Promise<AdjacentPages> => {
|
|
156
|
+
const navigationItems = await getNavigationItems();
|
|
157
|
+
const flatPages = flattenNavigationItems(navigationItems);
|
|
158
|
+
|
|
159
|
+
// Normalize the slug by removing 'docs/' prefix if it exists
|
|
160
|
+
// and ensure consistent formatting with or without leading slash
|
|
161
|
+
let normalizedSlug = slug;
|
|
162
|
+
if (normalizedSlug.startsWith('docs/')) {
|
|
163
|
+
normalizedSlug = normalizedSlug.substring(5); // Remove 'docs/' prefix
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Find the current page by comparing normalized slugs
|
|
167
|
+
const currentIndex = flatPages.findIndex((page) => {
|
|
168
|
+
// Normalize page slug for comparison
|
|
169
|
+
let pageSlug = page.slug;
|
|
170
|
+
if (pageSlug.startsWith('/')) {
|
|
171
|
+
pageSlug = pageSlug.substring(1);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return pageSlug === normalizedSlug;
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// If page not found, return null for both prev and next
|
|
178
|
+
if (currentIndex === -1) {
|
|
179
|
+
return { prev: null, next: null };
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Get previous page if it exists
|
|
183
|
+
const prev = currentIndex > 0 ? flatPages[currentIndex - 1] : null;
|
|
184
|
+
|
|
185
|
+
// Get next page if it exists
|
|
186
|
+
const next = currentIndex < flatPages.length - 1 ? flatPages[currentIndex + 1] : null;
|
|
187
|
+
|
|
188
|
+
return { prev, next };
|
|
189
|
+
};
|
|
190
|
+
|
|
115
191
|
export const getNavigationItems = async (): Promise<SidebarItem[]> => {
|
|
116
192
|
const configuredSidebar = config.customDocs.sidebar;
|
|
117
193
|
return processSidebarItems(configuredSidebar as SideBarConfigurationItem[]);
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
import VerticalSideBarLayout from '@layouts/VerticalSideBarLayout.astro';
|
|
3
|
+
import { Code } from 'astro-expressive-code/components';
|
|
4
|
+
import { isEventCatalogProEnabled } from '@utils/feature';
|
|
5
|
+
|
|
6
|
+
// Example for folder structure
|
|
7
|
+
const folderStructureExample = `my-catalog/
|
|
8
|
+
└── docs/
|
|
9
|
+
├── getting-started/
|
|
10
|
+
│ ├── 01-introduction.mdx
|
|
11
|
+
│ └── 02-quick-start.mdx
|
|
12
|
+
├── architecture-decisions/
|
|
13
|
+
│ ├── 01-what-are-architecture-decisions.mdx
|
|
14
|
+
│ ├── 02-how-to-create-architecture-decisions.mdx
|
|
15
|
+
│ ├── published/
|
|
16
|
+
│ │ ├── 01-adr-001-event-driven.mdx
|
|
17
|
+
│ │ └── 02-adr-002-api-first.mdx
|
|
18
|
+
│ └── drafts/
|
|
19
|
+
│ ├── 01-adr-003-microservices.mdx
|
|
20
|
+
│ └── 02-adr-004-monolith.mdx
|
|
21
|
+
└`;
|
|
22
|
+
// Example MDX file content
|
|
23
|
+
const mdxFileExample = `---
|
|
24
|
+
title: Getting Started
|
|
25
|
+
summary: How to get started with our event-driven architecture
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Getting Started with our Event-Driven Architecture
|
|
29
|
+
|
|
30
|
+
This guide will help you understand how our services communicate using events.
|
|
31
|
+
|
|
32
|
+
## Prerequisites
|
|
33
|
+
|
|
34
|
+
- Understanding of basic messaging patterns
|
|
35
|
+
- Node.js installed on your machine
|
|
36
|
+
|
|
37
|
+
## Key Concepts
|
|
38
|
+
|
|
39
|
+
Events are the backbone of our architecture. They represent facts that have happened in our system.
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
// Example config file
|
|
43
|
+
const configExample = `// eventcatalog.config.js
|
|
44
|
+
|
|
45
|
+
module.exports = {
|
|
46
|
+
// Your existing config...
|
|
47
|
+
|
|
48
|
+
customDocs: {
|
|
49
|
+
sidebar: [
|
|
50
|
+
{
|
|
51
|
+
label: 'Getting Started',
|
|
52
|
+
badge: {
|
|
53
|
+
text: 'New', color: 'green'
|
|
54
|
+
},
|
|
55
|
+
collapsed: false,
|
|
56
|
+
items: [
|
|
57
|
+
{ label: 'Introduction', slug: 'getting-started/01-introduction' },
|
|
58
|
+
{ label: 'Quick Start', slug: 'getting-started/02-quick-start' }
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
label: 'Architecture Decisions',
|
|
63
|
+
badge: {
|
|
64
|
+
text: 'New', color: 'green'
|
|
65
|
+
},
|
|
66
|
+
collapsed: true,
|
|
67
|
+
items: [
|
|
68
|
+
{
|
|
69
|
+
label: 'What are Architecture Decisions?',
|
|
70
|
+
slug: 'architecture-decisions/01-what-are-architecture-decisions'
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
label: 'How to Create Architecture Decisions',
|
|
74
|
+
slug: 'architecture-decisions/02-how-to-create-architecture-decisions'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: 'Published ADRs',
|
|
78
|
+
autogenerated: {
|
|
79
|
+
directory: 'architecture-decisions/published',
|
|
80
|
+
collapsed: true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
label: 'Draft ADRs',
|
|
85
|
+
autogenerated: {
|
|
86
|
+
directory: 'architecture-decisions/drafts',
|
|
87
|
+
collapsed: true
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}`;
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
<VerticalSideBarLayout title="Custom Documentation">
|
|
98
|
+
<body class="min-h-screen font-inter">
|
|
99
|
+
<main class="container px-8 lg:px-8 mx-auto py-8 max-w-[80em]">
|
|
100
|
+
<div class="mb-12">
|
|
101
|
+
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-6">
|
|
102
|
+
<div>
|
|
103
|
+
<div class="flex flex-wrap items-center gap-3 mb-3">
|
|
104
|
+
<h1 class="text-4xl font-semibold text-gray-900 font-inter">Custom Documentation</h1>
|
|
105
|
+
<div
|
|
106
|
+
class="inline-flex items-center px-3 py-1.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800 border border-purple-200 shadow-sm"
|
|
107
|
+
>
|
|
108
|
+
Pro feature
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
<p class="text-base mb-0 text-gray-600 max-w-3xl">
|
|
112
|
+
Add custom documentation to EventCatalog to create a unified source of truth for your team. Document your
|
|
113
|
+
architecture decisions, patterns, and guidelines.
|
|
114
|
+
</p>
|
|
115
|
+
</div>
|
|
116
|
+
<div class="flex space-x-4 shrink-0">
|
|
117
|
+
<a
|
|
118
|
+
href="https://www.eventcatalog.dev/docs/custom-documentation"
|
|
119
|
+
class="inline-flex items-center justify-center px-5 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50"
|
|
120
|
+
>
|
|
121
|
+
Read documentation →
|
|
122
|
+
</a>
|
|
123
|
+
{
|
|
124
|
+
!isEventCatalogProEnabled() && (
|
|
125
|
+
<a
|
|
126
|
+
href="https://www.eventcatalog.dev/pro/trial"
|
|
127
|
+
class="inline-flex items-center justify-center px-5 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-gradient-to-r from-purple-500 to-purple-700 hover:from-purple-600 hover:to-purple-800 shadow-sm"
|
|
128
|
+
>
|
|
129
|
+
Start 14-day trial
|
|
130
|
+
</a>
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<h2 class="text-2xl font-semibold mb-2 text-gray-900">Setup Guide</h2>
|
|
138
|
+
<p class="text-gray-600 mb-8 max-w-3xl">
|
|
139
|
+
Custom documentation let's you bring any documentation into EventCatalog. This is useful for documenting your architecture
|
|
140
|
+
decisions, patterns, and guidelines. Follow these steps to get started:
|
|
141
|
+
</p>
|
|
142
|
+
|
|
143
|
+
<div class="space-y-10 mb-12">
|
|
144
|
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
145
|
+
<div class="flex items-start gap-4">
|
|
146
|
+
<div
|
|
147
|
+
class="inline-flex items-center justify-center w-8 h-8 rounded-full bg-blue-100 text-blue-600 text-lg font-medium shrink-0 mt-1"
|
|
148
|
+
>
|
|
149
|
+
1
|
|
150
|
+
</div>
|
|
151
|
+
<div class="w-full">
|
|
152
|
+
<h3 class="text-xl font-semibold text-gray-900 mb-3">Create the content structure</h3>
|
|
153
|
+
<p class="text-gray-600 mb-4">Create a folder structure in your directory to organize your documentation.</p>
|
|
154
|
+
<Code code={folderStructureExample} lang="bash" frame="terminal" />
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
160
|
+
<div class="flex items-start gap-4">
|
|
161
|
+
<div
|
|
162
|
+
class="inline-flex items-center justify-center w-8 h-8 rounded-full bg-blue-100 text-blue-600 text-lg font-medium shrink-0 mt-1"
|
|
163
|
+
>
|
|
164
|
+
2
|
|
165
|
+
</div>
|
|
166
|
+
<div class="w-full">
|
|
167
|
+
<h3 class="text-xl font-semibold text-gray-900 mb-3">Add MDX files</h3>
|
|
168
|
+
<p class="text-gray-600 mb-4">Create MDX files with frontmatter and markdown content.</p>
|
|
169
|
+
<Code code={mdxFileExample} lang="mdx" frame="terminal" />
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
175
|
+
<div class="flex items-start gap-4">
|
|
176
|
+
<div
|
|
177
|
+
class="inline-flex items-center justify-center w-8 h-8 rounded-full bg-blue-100 text-blue-600 text-lg font-medium shrink-0 mt-1"
|
|
178
|
+
>
|
|
179
|
+
3
|
|
180
|
+
</div>
|
|
181
|
+
<div class="w-full">
|
|
182
|
+
<h3 class="text-xl font-semibold text-gray-900 mb-3">Update your eventcatalog.config.js file</h3>
|
|
183
|
+
<p class="text-gray-600 mb-4">
|
|
184
|
+
Add the customDocs configuration to your eventcatalog.config.js file to define your sidebar structure.
|
|
185
|
+
</p>
|
|
186
|
+
<Code code={configExample} lang="js" frame="terminal" />
|
|
187
|
+
<p class="text-gray-600 mt-4">This configuration defines the sidebar structure for your custom documentation:</p>
|
|
188
|
+
<ul class="list-disc list-inside text-gray-600 mt-2 ml-2 space-y-1">
|
|
189
|
+
<li>
|
|
190
|
+
<strong>label</strong>: The display name for each sidebar section
|
|
191
|
+
</li>
|
|
192
|
+
<li>
|
|
193
|
+
<strong>badge</strong>: Optional badge to highlight new sections
|
|
194
|
+
</li>
|
|
195
|
+
<li>
|
|
196
|
+
<strong>collapsed</strong>: Whether the section is collapsed by default
|
|
197
|
+
</li>
|
|
198
|
+
<li>
|
|
199
|
+
<strong>autogenerated</strong>: Automatically generate sidebar items from a directory
|
|
200
|
+
</li>
|
|
201
|
+
<li>
|
|
202
|
+
<strong>slug</strong>: Direct link to a specific page
|
|
203
|
+
</li>
|
|
204
|
+
</ul>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
|
|
209
|
+
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
210
|
+
<div class="flex items-start gap-4">
|
|
211
|
+
<div
|
|
212
|
+
class="inline-flex items-center justify-center w-8 h-8 rounded-full bg-blue-100 text-blue-600 text-lg font-medium shrink-0 mt-1"
|
|
213
|
+
>
|
|
214
|
+
4
|
|
215
|
+
</div>
|
|
216
|
+
<div class="w-full">
|
|
217
|
+
<h3 class="text-xl font-semibold text-gray-900 mb-3">Restart EventCatalog</h3>
|
|
218
|
+
<p class="text-gray-600 mb-4">
|
|
219
|
+
After configuring your documentation, restart EventCatalog to see your custom documentation.
|
|
220
|
+
</p>
|
|
221
|
+
<div class="mb-4">
|
|
222
|
+
<Code code="npm run dev" lang="bash" frame="terminal" />
|
|
223
|
+
</div>
|
|
224
|
+
<p class="text-gray-600 mb-4">
|
|
225
|
+
Once restarted, you'll see your custom documentation displayed with the sidebar structure you defined:
|
|
226
|
+
</p>
|
|
227
|
+
<div class="border border-gray-200 rounded-lg overflow-hidden">
|
|
228
|
+
<img src="/images/custom-docs-placeholder.png" alt="Example of custom documentation interface" class="w-full" />
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
</div>
|
|
234
|
+
</main>
|
|
235
|
+
</body>
|
|
236
|
+
</VerticalSideBarLayout>
|
|
237
|
+
)
|