@eventcatalog/core 3.0.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-VO5WYA44.js → chunk-AA47DJ43.js} +1 -1
- package/dist/{chunk-EKGR533N.js → chunk-GGRXP5WM.js} +1 -1
- package/dist/{chunk-E5Q7TZYT.js → chunk-L3QRQT7U.js} +1 -1
- package/dist/{chunk-BYP43AAT.js → chunk-RWYEP5SD.js} +1 -1
- package/dist/{chunk-KF5PARQK.js → chunk-VPQCMMRM.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog.cjs +1 -1
- package/dist/eventcatalog.config.d.cts +7 -0
- package/dist/eventcatalog.config.d.ts +7 -0
- package/dist/eventcatalog.js +5 -5
- package/dist/generate.cjs +1 -1
- package/dist/generate.js +3 -3
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +520 -247
- package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +3 -3
- package/eventcatalog/src/components/Checkbox.astro +7 -4
- package/eventcatalog/src/components/CopyAsMarkdown.tsx +15 -15
- package/eventcatalog/src/components/EnvironmentDropdown.tsx +15 -7
- package/eventcatalog/src/components/FavoriteButton.tsx +1 -1
- package/eventcatalog/src/components/Grids/DomainGrid.tsx +72 -60
- package/eventcatalog/src/components/Grids/MessageGrid.tsx +68 -48
- package/eventcatalog/src/components/Header.astro +15 -10
- package/eventcatalog/src/components/Lists/OwnersList.tsx +17 -10
- package/eventcatalog/src/components/Lists/PillListFlat.styles.css +12 -0
- package/eventcatalog/src/components/Lists/PillListFlat.tsx +15 -15
- package/eventcatalog/src/components/Lists/VersionList.astro +15 -5
- package/eventcatalog/src/components/MDX/Accordion/Accordion.tsx +3 -3
- package/eventcatalog/src/components/MDX/Admonition.tsx +49 -9
- package/eventcatalog/src/components/MDX/Attachments.astro +15 -11
- package/eventcatalog/src/components/MDX/ChannelInformation/ChannelInformation.tsx +29 -15
- package/eventcatalog/src/components/MDX/EntityPropertiesTable/EntityPropertiesTable.astro +20 -13
- package/eventcatalog/src/components/MDX/Link/Link.astro +1 -1
- package/eventcatalog/src/components/MDX/MessageTable/MessageTable.client.tsx +50 -29
- package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.tsx +14 -12
- package/eventcatalog/src/components/MDX/NodeGraph/StepWalkthrough.tsx +4 -4
- package/eventcatalog/src/components/MDX/NodeGraph/StudioModal.tsx +4 -4
- package/eventcatalog/src/components/MDX/NodeGraph/VisualiserSearch.tsx +2 -2
- package/eventcatalog/src/components/MDX/ResourceGroupTable/ResourceGroupTable.client.tsx +54 -33
- package/eventcatalog/src/components/MDX/ResourceLink/ResourceLink.astro +1 -1
- package/eventcatalog/src/components/MDX/Steps/Step.astro +2 -2
- package/eventcatalog/src/components/MDX/Steps/Steps.astro +3 -3
- package/eventcatalog/src/components/MDX/Tabs/Tabs.astro +13 -9
- package/eventcatalog/src/components/MDX/Tiles/Tile.astro +25 -13
- package/eventcatalog/src/components/MDX/Tiles/Tiles.astro +1 -1
- package/eventcatalog/src/components/SchemaExplorer/ApiAccessSection.tsx +3 -3
- package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +3 -3
- package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +29 -25
- package/eventcatalog/src/components/SchemaExplorer/DiffViewer.tsx +3 -3
- package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +61 -42
- package/eventcatalog/src/components/SchemaExplorer/OwnersSection.tsx +13 -9
- package/eventcatalog/src/components/SchemaExplorer/Pagination.tsx +6 -4
- package/eventcatalog/src/components/SchemaExplorer/ProducersConsumersSection.tsx +17 -13
- package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +35 -8
- package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsHeader.tsx +33 -21
- package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +1 -1
- package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +41 -33
- package/eventcatalog/src/components/SchemaExplorer/SchemaListItem.tsx +19 -7
- package/eventcatalog/src/components/SchemaExplorer/SchemaViewerModal.tsx +8 -8
- package/eventcatalog/src/components/Search/Search.astro +3 -3
- package/eventcatalog/src/components/Search/SearchModal.tsx +65 -36
- package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +31 -21
- package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +92 -59
- package/eventcatalog/src/components/Tables/Table.tsx +25 -24
- package/eventcatalog/src/components/Tables/columns/ContainersTableColumns.tsx +22 -16
- package/eventcatalog/src/components/Tables/columns/DomainTableColumns.tsx +14 -11
- package/eventcatalog/src/components/Tables/columns/FlowTableColumns.tsx +6 -6
- package/eventcatalog/src/components/Tables/columns/MessageTableColumns.tsx +22 -16
- package/eventcatalog/src/components/Tables/columns/ServiceTableColumns.tsx +22 -16
- package/eventcatalog/src/components/Tables/columns/SharedColumns.tsx +4 -4
- package/eventcatalog/src/components/Tables/columns/TeamsTableColumns.tsx +21 -13
- package/eventcatalog/src/components/Tables/columns/UserTableColumns.tsx +30 -19
- package/eventcatalog/src/components/ThemeToggle.tsx +18 -0
- package/eventcatalog/src/enterprise/ai/chat-api.ts +24 -3
- package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NestedItem.tsx +15 -7
- package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NoResultsFound.tsx +2 -2
- package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/index.tsx +19 -15
- package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +50 -17
- package/eventcatalog/src/layouts/DirectoryLayout.astro +11 -6
- package/eventcatalog/src/layouts/DiscoverLayout.astro +13 -8
- package/eventcatalog/src/layouts/Footer.astro +6 -6
- package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +62 -14
- package/eventcatalog/src/pages/_index.astro +135 -179
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +2 -2
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +4 -4
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +77 -63
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +23 -24
- package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +66 -50
- package/eventcatalog/src/pages/docs/custom/index.astro +2 -2
- package/eventcatalog/src/pages/docs/teams/[id]/index.astro +25 -21
- package/eventcatalog/src/pages/docs/users/[id]/index.astro +25 -21
- package/eventcatalog/src/pages/schemas/explorer/index.astro +1 -1
- package/eventcatalog/src/pages/studio.astro +59 -31
- package/eventcatalog/src/remark-plugins/directives.ts +6 -6
- package/eventcatalog/src/remark-plugins/mermaid.ts +2 -2
- package/eventcatalog/src/stores/theme-store.ts +93 -0
- package/eventcatalog/src/styles/theme.css +255 -0
- package/eventcatalog/src/styles/themes/forest.css +230 -0
- package/eventcatalog/src/styles/themes/ocean.css +235 -0
- package/eventcatalog/src/styles/themes/sapphire.css +230 -0
- package/eventcatalog/src/styles/themes/sunset.css +230 -0
- package/eventcatalog/src/utils/feature.ts +4 -0
- package/eventcatalog/tailwind.config.mjs +6 -3
- package/package.json +7 -6
|
@@ -1,15 +1,55 @@
|
|
|
1
1
|
import { InformationCircleIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
type AdmonitionType = 'danger' | 'alert' | 'warning' | 'info' | 'note';
|
|
4
|
+
|
|
5
|
+
interface AdmonitionConfig {
|
|
6
|
+
icon: typeof InformationCircleIcon;
|
|
7
|
+
title: string;
|
|
8
|
+
containerClasses: string;
|
|
9
|
+
iconClasses: string;
|
|
10
|
+
titleClasses: string;
|
|
11
|
+
contentClasses: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const getConfigurationByType = (type: string): AdmonitionConfig => {
|
|
4
15
|
switch (type) {
|
|
5
16
|
case 'danger':
|
|
6
|
-
return { color: 'red', icon: ExclamationTriangleIcon, title: 'Danger' };
|
|
7
17
|
case 'alert':
|
|
8
|
-
return {
|
|
18
|
+
return {
|
|
19
|
+
icon: ExclamationTriangleIcon,
|
|
20
|
+
title: type === 'danger' ? 'Danger' : 'Alert',
|
|
21
|
+
containerClasses: 'bg-red-50 dark:bg-red-950/50 border-red-500',
|
|
22
|
+
iconClasses: 'text-red-500 dark:text-red-400',
|
|
23
|
+
titleClasses: 'text-red-600 dark:text-red-300',
|
|
24
|
+
contentClasses: 'text-red-700 dark:text-red-200',
|
|
25
|
+
};
|
|
9
26
|
case 'warning':
|
|
10
|
-
return {
|
|
27
|
+
return {
|
|
28
|
+
icon: ExclamationTriangleIcon,
|
|
29
|
+
title: 'Warning',
|
|
30
|
+
containerClasses: 'bg-yellow-50 dark:bg-yellow-950/50 border-yellow-500',
|
|
31
|
+
iconClasses: 'text-yellow-500 dark:text-yellow-400',
|
|
32
|
+
titleClasses: 'text-yellow-600 dark:text-yellow-300',
|
|
33
|
+
contentClasses: 'text-yellow-700 dark:text-yellow-200',
|
|
34
|
+
};
|
|
35
|
+
case 'note':
|
|
36
|
+
return {
|
|
37
|
+
icon: InformationCircleIcon,
|
|
38
|
+
title: 'Note',
|
|
39
|
+
containerClasses: 'bg-blue-50 dark:bg-blue-950/50 border-blue-500',
|
|
40
|
+
iconClasses: 'text-blue-500 dark:text-blue-400',
|
|
41
|
+
titleClasses: 'text-blue-600 dark:text-blue-300',
|
|
42
|
+
contentClasses: 'text-blue-700 dark:text-blue-200',
|
|
43
|
+
};
|
|
11
44
|
default:
|
|
12
|
-
return {
|
|
45
|
+
return {
|
|
46
|
+
icon: InformationCircleIcon,
|
|
47
|
+
title: 'Info',
|
|
48
|
+
containerClasses: 'bg-indigo-50 dark:bg-indigo-950/50 border-indigo-500',
|
|
49
|
+
iconClasses: 'text-indigo-500 dark:text-indigo-400',
|
|
50
|
+
titleClasses: 'text-indigo-600 dark:text-indigo-300',
|
|
51
|
+
contentClasses: 'text-indigo-700 dark:text-indigo-200',
|
|
52
|
+
};
|
|
13
53
|
}
|
|
14
54
|
};
|
|
15
55
|
|
|
@@ -25,13 +65,13 @@ export default function Admonition({ children, type = 'info', className = '', ti
|
|
|
25
65
|
const Icon = config.icon;
|
|
26
66
|
|
|
27
67
|
return (
|
|
28
|
-
<div className={
|
|
68
|
+
<div className={`${config.containerClasses} border-l-4 p-4 my-4 ${className} rounded-md not-prose`}>
|
|
29
69
|
<div className="flex flex-col">
|
|
30
70
|
<div className="flex items-center justify-start">
|
|
31
|
-
<Icon className={`h-6 w-6
|
|
32
|
-
<h3 className={`ml-2
|
|
71
|
+
<Icon className={`h-6 w-6 ${config.iconClasses} stroke-2`} aria-hidden="true" />
|
|
72
|
+
<h3 className={`ml-2 ${config.titleClasses} font-bold text-md`}>{title || config.title}</h3>
|
|
33
73
|
</div>
|
|
34
|
-
<div className={`mt-2
|
|
74
|
+
<div className={`mt-2 ${config.contentClasses} text-md`}>{children}</div>
|
|
35
75
|
</div>
|
|
36
76
|
</div>
|
|
37
77
|
);
|
|
@@ -83,16 +83,16 @@ const sortedGroups = Object.entries(groupedAttachments).sort(([a], [b]) => {
|
|
|
83
83
|
<section class="not-prose my-8">
|
|
84
84
|
{title && <h3 class="flex items-center gap-2 text-3xl font-bold mb-4">{title}</h3>}
|
|
85
85
|
|
|
86
|
-
{description && <p class="text-
|
|
86
|
+
{description && <p class="text-[rgb(var(--ec-page-text-muted))] mb-6 prose prose-md">{description}</p>}
|
|
87
87
|
|
|
88
88
|
{
|
|
89
89
|
normalizedAttachments.length === 0 ? (
|
|
90
|
-
<div class="text-
|
|
90
|
+
<div class="text-[rgb(var(--ec-page-text-muted))] text-sm italic">No attachments available.</div>
|
|
91
91
|
) : (
|
|
92
92
|
<div class="space-y-6">
|
|
93
93
|
{sortedGroups.map(([groupType, groupAttachments], index) => (
|
|
94
94
|
<div>
|
|
95
|
-
<h4 class="text-sm font-medium text-
|
|
95
|
+
<h4 class="text-sm font-medium text-[rgb(var(--ec-page-text))] mb-3 uppercase tracking-wider">
|
|
96
96
|
{groupType} ({groupAttachments.length})
|
|
97
97
|
</h4>
|
|
98
98
|
<div class={`grid grid-cols-1 ${columns === 1 ? '' : `md:grid-cols-${Math.min(columns, 3)}`} gap-4`}>
|
|
@@ -105,34 +105,38 @@ const sortedGroups = Object.entries(groupedAttachments).sort(([a], [b]) => {
|
|
|
105
105
|
href={attachment.url}
|
|
106
106
|
target={isExternal ? '_blank' : '_self'}
|
|
107
107
|
rel={isExternal ? 'noopener noreferrer' : undefined}
|
|
108
|
-
class="group block bg-
|
|
108
|
+
class="group block bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-lg p-4 transition-all duration-200 hover:shadow-md hover:border-[rgb(var(--ec-accent)/0.5)] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2"
|
|
109
109
|
>
|
|
110
110
|
<div class="flex items-start gap-3">
|
|
111
|
-
<div class="flex-shrink-0 p-2 bg-
|
|
112
|
-
{IconComponent &&
|
|
111
|
+
<div class="flex-shrink-0 p-2 bg-[rgb(var(--ec-content-hover))] rounded-lg group-hover:bg-[rgb(var(--ec-accent-subtle))] transition-colors duration-200">
|
|
112
|
+
{IconComponent && (
|
|
113
|
+
<IconComponent className="w-5 h-5 text-[rgb(var(--ec-icon-color))] group-hover:text-[rgb(var(--ec-accent))]" />
|
|
114
|
+
)}
|
|
113
115
|
</div>
|
|
114
116
|
|
|
115
117
|
<div class="flex-grow min-w-0">
|
|
116
118
|
<div class="flex items-center gap-2">
|
|
117
|
-
<h5 class="text-sm font-medium text-
|
|
119
|
+
<h5 class="text-sm font-medium text-[rgb(var(--ec-page-text))] group-hover:text-[rgb(var(--ec-accent))] truncate">
|
|
118
120
|
{attachment.title || 'Attachment'}
|
|
119
121
|
</h5>
|
|
120
122
|
{isExternal && (
|
|
121
|
-
<Icons.ArrowTopRightOnSquareIcon className="w-3 h-3 text-
|
|
123
|
+
<Icons.ArrowTopRightOnSquareIcon className="w-3 h-3 text-[rgb(var(--ec-icon-color))] group-hover:text-[rgb(var(--ec-accent))] flex-shrink-0" />
|
|
122
124
|
)}
|
|
123
125
|
</div>
|
|
124
126
|
|
|
125
127
|
{attachment.summary && (
|
|
126
|
-
<p class="mt-1 text-xs text-
|
|
128
|
+
<p class="mt-1 text-xs text-[rgb(var(--ec-page-text-muted))] group-hover:text-[rgb(var(--ec-accent-text))] line-clamp-2">
|
|
129
|
+
{attachment.summary}
|
|
130
|
+
</p>
|
|
127
131
|
)}
|
|
128
132
|
|
|
129
133
|
{attachment.description && (
|
|
130
|
-
<p class="mt-1 text-xs text-
|
|
134
|
+
<p class="mt-1 text-xs text-[rgb(var(--ec-page-text-muted))] group-hover:text-[rgb(var(--ec-accent-text))] line-clamp-2">
|
|
131
135
|
{attachment.description}
|
|
132
136
|
</p>
|
|
133
137
|
)}
|
|
134
138
|
|
|
135
|
-
<div class="mt-2 text-xs text-
|
|
139
|
+
<div class="mt-2 text-xs text-[rgb(var(--ec-icon-color))] group-hover:text-[rgb(var(--ec-accent))] truncate">
|
|
136
140
|
{attachment.url.replace(/^https?:\/\//, '')}
|
|
137
141
|
</div>
|
|
138
142
|
</div>
|
|
@@ -5,14 +5,17 @@ const ChannelParameters = (data: CollectionEntry<'channels'>['data']) => {
|
|
|
5
5
|
return (
|
|
6
6
|
<div className="container mx-auto py-4 not-prose space-y-4">
|
|
7
7
|
<div>
|
|
8
|
-
<h4 className="text-2xl font-bold">Channel information</h4>
|
|
8
|
+
<h4 className="text-2xl font-bold text-[rgb(var(--ec-page-text))]">Channel information</h4>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
<div>
|
|
12
|
-
<p className="text-md">
|
|
12
|
+
<p className="text-md text-[rgb(var(--ec-page-text))]">
|
|
13
13
|
{data.address && (
|
|
14
14
|
<div>
|
|
15
|
-
<span className="font-semibold">Address:</span>
|
|
15
|
+
<span className="font-semibold">Address:</span>{' '}
|
|
16
|
+
<code className="bg-[rgb(var(--ec-content-hover))] p-1 rounded text-[rgb(var(--ec-page-text))]">
|
|
17
|
+
{data.address}
|
|
18
|
+
</code>
|
|
16
19
|
</div>
|
|
17
20
|
)}
|
|
18
21
|
{data.protocols && data.protocols.length > 0 && (
|
|
@@ -22,7 +25,10 @@ const ChannelParameters = (data: CollectionEntry<'channels'>['data']) => {
|
|
|
22
25
|
{data.protocols.map((protocol) => {
|
|
23
26
|
const IconComponent = getIconForProtocol(protocol.toLowerCase());
|
|
24
27
|
return (
|
|
25
|
-
<li
|
|
28
|
+
<li
|
|
29
|
+
key={protocol}
|
|
30
|
+
className="text-sm flex items-center space-x-1 bg-[rgb(var(--ec-content-hover))] rounded-md px-1"
|
|
31
|
+
>
|
|
26
32
|
{IconComponent && <IconComponent className="w-4 h-4" />}
|
|
27
33
|
<span>{protocol}</span>
|
|
28
34
|
</li>
|
|
@@ -36,22 +42,30 @@ const ChannelParameters = (data: CollectionEntry<'channels'>['data']) => {
|
|
|
36
42
|
|
|
37
43
|
{data.parameters && Object.keys(data.parameters).length > 0 && (
|
|
38
44
|
<div className="overflow-x-auto">
|
|
39
|
-
<table className="min-w-full bg-
|
|
45
|
+
<table className="min-w-full bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))]">
|
|
40
46
|
<thead>
|
|
41
|
-
<tr className="bg-
|
|
42
|
-
<th className="py-2 px-4 border-b text-left">Parameter</th>
|
|
43
|
-
<th className="py-2 px-4 border-b text-left">Description</th>
|
|
44
|
-
<th className="py-2 px-4 border-b text-left">Options</th>
|
|
45
|
-
<th className="py-2 px-4 border-b text-left">Default</th>
|
|
47
|
+
<tr className="bg-[rgb(var(--ec-accent))] text-white">
|
|
48
|
+
<th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Parameter</th>
|
|
49
|
+
<th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Description</th>
|
|
50
|
+
<th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Options</th>
|
|
51
|
+
<th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Default</th>
|
|
46
52
|
</tr>
|
|
47
53
|
</thead>
|
|
48
54
|
<tbody>
|
|
49
55
|
{Object.entries(data.parameters).map(([param, details]) => (
|
|
50
|
-
<tr className="hover:bg-
|
|
51
|
-
<td className="py-2 px-4 border-b">
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
<td className="py-2 px-4 border-b
|
|
56
|
+
<tr className="hover:bg-[rgb(var(--ec-content-hover))]" key={param}>
|
|
57
|
+
<td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text))]">
|
|
58
|
+
{param}
|
|
59
|
+
</td>
|
|
60
|
+
<td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text-muted))]">
|
|
61
|
+
{details.description}
|
|
62
|
+
</td>
|
|
63
|
+
<td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text-muted))]">
|
|
64
|
+
{details.enum ? details.enum.join(', ') : 'N/A'}
|
|
65
|
+
</td>
|
|
66
|
+
<td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text-muted))]">
|
|
67
|
+
{details.default || 'N/A'}
|
|
68
|
+
</td>
|
|
55
69
|
</tr>
|
|
56
70
|
))}
|
|
57
71
|
</tbody>
|
|
@@ -41,8 +41,8 @@ const isComponentEnabled = collection === 'entities';
|
|
|
41
41
|
{
|
|
42
42
|
isComponentEnabled && properties && properties.length > 0 ? (
|
|
43
43
|
<div class="overflow-x-auto relative not-prose">
|
|
44
|
-
<table class="w-full text-sm text-left text-
|
|
45
|
-
<thead class="text-xs text-
|
|
44
|
+
<table class="w-full text-sm text-left text-[rgb(var(--ec-page-text-muted))] border border-[rgb(var(--ec-page-border))] rounded-lg shadow-sm">
|
|
45
|
+
<thead class="text-xs text-[rgb(var(--ec-page-text))] uppercase bg-[rgb(var(--ec-content-hover))]">
|
|
46
46
|
<tr>
|
|
47
47
|
<th scope="col" class="py-3 px-6">
|
|
48
48
|
Name
|
|
@@ -60,25 +60,26 @@ const isComponentEnabled = collection === 'entities';
|
|
|
60
60
|
</thead>
|
|
61
61
|
<tbody>
|
|
62
62
|
{properties.map((prop) => (
|
|
63
|
-
<tr class="bg-
|
|
64
|
-
<td class="py-4 px-6 font-medium text-
|
|
65
|
-
<code class="text-sm bg-
|
|
63
|
+
<tr class="bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border-b border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))] align-top">
|
|
64
|
+
<td class="py-4 px-6 font-medium text-[rgb(var(--ec-page-text))] whitespace-nowrap">
|
|
65
|
+
<code class="text-sm bg-[rgb(var(--ec-content-hover))] rounded px-1 py-0.5">{prop.name}</code>
|
|
66
66
|
</td>
|
|
67
|
-
<td class="py-4 px-6">
|
|
67
|
+
<td class="py-4 px-6 text-[rgb(var(--ec-page-text-muted))]">
|
|
68
68
|
{prop.type === 'array' && prop.items ? (
|
|
69
69
|
<span>
|
|
70
|
-
array<<code class="text-sm bg-
|
|
70
|
+
array<<code class="text-sm bg-[rgb(var(--ec-content-hover))] rounded px-1 py-0.5">{prop.items.type}</code>
|
|
71
|
+
>
|
|
71
72
|
</span>
|
|
72
73
|
) : (
|
|
73
|
-
<code class="text-sm bg-
|
|
74
|
+
<code class="text-sm bg-[rgb(var(--ec-content-hover))] rounded px-1 py-0.5">{prop.type}</code>
|
|
74
75
|
)}
|
|
75
76
|
{prop.enum && (
|
|
76
|
-
<div class="text-xs text-
|
|
77
|
+
<div class="text-xs text-[rgb(var(--ec-page-text-muted))] mt-2">
|
|
77
78
|
<span class="font-semibold block mb-1">Enum:</span>
|
|
78
79
|
<ul class="list-disc list-inside ml-2 space-y-1">
|
|
79
80
|
{prop.enum.map((enumValue: string) => (
|
|
80
81
|
<li>
|
|
81
|
-
<code class="text-xs bg-
|
|
82
|
+
<code class="text-xs bg-[rgb(var(--ec-content-hover))] rounded px-1 py-0.5">{enumValue}</code>
|
|
82
83
|
</li>
|
|
83
84
|
))}
|
|
84
85
|
</ul>
|
|
@@ -87,12 +88,18 @@ const isComponentEnabled = collection === 'entities';
|
|
|
87
88
|
</td>
|
|
88
89
|
<td class="py-4 px-6">
|
|
89
90
|
{prop.required ? (
|
|
90
|
-
<span class="bg-
|
|
91
|
+
<span class="bg-[rgb(var(--ec-accent-subtle))] text-[rgb(var(--ec-accent-text))] text-xs font-semibold mr-2 px-2.5 py-0.5 rounded">
|
|
92
|
+
Required
|
|
93
|
+
</span>
|
|
91
94
|
) : (
|
|
92
|
-
<span class="bg-
|
|
95
|
+
<span class="bg-[rgb(var(--ec-content-hover))] text-[rgb(var(--ec-page-text-muted))] text-xs font-semibold mr-2 px-2.5 py-0.5 rounded">
|
|
96
|
+
Optional
|
|
97
|
+
</span>
|
|
93
98
|
)}
|
|
94
99
|
</td>
|
|
95
|
-
<td class="py-4 px-6
|
|
100
|
+
<td class="py-4 px-6 text-[rgb(var(--ec-page-text-muted))]">
|
|
101
|
+
{prop.description || <span class="text-[rgb(var(--ec-icon-color))] italic">No description provided.</span>}
|
|
102
|
+
</td>
|
|
96
103
|
</tr>
|
|
97
104
|
))}
|
|
98
105
|
</tbody>
|
|
@@ -4,4 +4,4 @@ import { buildUrl } from '@utils/url-builder';
|
|
|
4
4
|
const { href } = Astro.props;
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<a href={buildUrl(href)} class="text-
|
|
7
|
+
<a href={buildUrl(href)} class="text-[rgb(var(--ec-accent))] hover:text-[rgb(var(--ec-accent-hover))]"><slot /></a>
|
|
@@ -33,35 +33,35 @@ const MessageRow = memo(
|
|
|
33
33
|
const channels = message.channels || [];
|
|
34
34
|
|
|
35
35
|
return (
|
|
36
|
-
<tr className="group hover:bg-
|
|
37
|
-
<td className="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-
|
|
36
|
+
<tr className="group hover:bg-[rgb(var(--ec-content-hover))]">
|
|
37
|
+
<td className="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-[rgb(var(--ec-page-text))] sm:pl-6 relative">
|
|
38
38
|
<a href={url} className="absolute inset-0 z-10" aria-label={`View details for ${message.name}`} />
|
|
39
39
|
<div className="flex items-center gap-2 relative">
|
|
40
40
|
<Icon className={`h-5 w-5 text-${color}-500`} />
|
|
41
41
|
<span className="group-hover:text-blue-600 break-all">{message.name}</span>
|
|
42
42
|
</div>
|
|
43
43
|
</td>
|
|
44
|
-
<td className="whitespace-nowrap px-3 py-4 text-sm text-
|
|
44
|
+
<td className="whitespace-nowrap px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
|
|
45
45
|
<a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
|
|
46
46
|
<span>v{message.version}</span>
|
|
47
47
|
</td>
|
|
48
|
-
<td className="whitespace-nowrap px-3 py-4 text-sm text-
|
|
48
|
+
<td className="whitespace-nowrap px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
|
|
49
49
|
<a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
|
|
50
50
|
<span>{type}</span>
|
|
51
51
|
</td>
|
|
52
|
-
<td className="px-3 py-4 text-sm text-
|
|
52
|
+
<td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
|
|
53
53
|
<a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
|
|
54
54
|
<span className="line-clamp-2 break-words">{message.summary || '-'}</span>
|
|
55
55
|
</td>
|
|
56
56
|
{showChannels && (
|
|
57
|
-
<td className="px-3 py-4 text-sm text-
|
|
57
|
+
<td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
|
|
58
58
|
<a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
|
|
59
59
|
<div className="flex flex-wrap gap-1">
|
|
60
60
|
{channels.length > 0
|
|
61
61
|
? channels.map((channel, index) => (
|
|
62
62
|
<span
|
|
63
63
|
key={`${channel.id}-${index}`}
|
|
64
|
-
className="inline-flex items-center rounded-md bg-
|
|
64
|
+
className="inline-flex items-center rounded-md bg-[rgb(var(--ec-content-hover))] px-2 py-1 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] ring-1 ring-inset ring-[rgb(var(--ec-page-border))]"
|
|
65
65
|
>
|
|
66
66
|
{channel.id}
|
|
67
67
|
</span>
|
|
@@ -98,8 +98,8 @@ const FilterButton = memo(
|
|
|
98
98
|
}}
|
|
99
99
|
className={`px-3 py-1 rounded-md text-sm font-medium ${
|
|
100
100
|
typeFilter === type
|
|
101
|
-
? 'bg-
|
|
102
|
-
: 'bg-
|
|
101
|
+
? 'bg-[rgb(var(--ec-button-bg))] text-[rgb(var(--ec-button-text))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-button-bg-hover))]'
|
|
102
|
+
: 'bg-[rgb(var(--ec-page-bg))] text-[rgb(var(--ec-page-text))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))]'
|
|
103
103
|
}`}
|
|
104
104
|
>
|
|
105
105
|
{label} ({count})
|
|
@@ -210,12 +210,12 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
210
210
|
);
|
|
211
211
|
|
|
212
212
|
return (
|
|
213
|
-
<div className="flow-root bg-
|
|
213
|
+
<div className="flow-root bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border-[rgb(var(--ec-page-border))] border p-4 pb-2 rounded-lg text-[rgb(var(--ec-page-text))]">
|
|
214
214
|
<div className="space-y-4">
|
|
215
215
|
<h2 className="text-xl font-semibold">
|
|
216
216
|
{title} ({searchTerm || typeFilter ? `${filteredMessages.length}/${messages.length}` : messages.length})
|
|
217
217
|
</h2>
|
|
218
|
-
<span className="text-sm text-
|
|
218
|
+
<span className="text-sm text-[rgb(var(--ec-page-text-muted))]">
|
|
219
219
|
Quickly find the message you need by searching for the name, type, or summary.
|
|
220
220
|
</span>
|
|
221
221
|
|
|
@@ -238,7 +238,12 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
238
238
|
|
|
239
239
|
<div className="relative">
|
|
240
240
|
<div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
|
|
241
|
-
<svg
|
|
241
|
+
<svg
|
|
242
|
+
className="h-5 w-5 text-[rgb(var(--ec-icon-color))]"
|
|
243
|
+
viewBox="0 0 20 20"
|
|
244
|
+
fill="currentColor"
|
|
245
|
+
aria-hidden="true"
|
|
246
|
+
>
|
|
242
247
|
<path
|
|
243
248
|
fillRule="evenodd"
|
|
244
249
|
d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
|
|
@@ -254,7 +259,7 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
254
259
|
setCurrentPage(1); // Reset to first page when searching
|
|
255
260
|
}}
|
|
256
261
|
placeholder={`Search by name, type, or summary...`}
|
|
257
|
-
className="block w-full rounded-md border-0 py-1.5 pl-10 pr-10 text-
|
|
262
|
+
className="block w-full rounded-md border-0 py-1.5 pl-10 pr-10 text-[rgb(var(--ec-page-text))] bg-[rgb(var(--ec-input-bg))] ring-1 ring-inset ring-[rgb(var(--ec-input-border))] placeholder:text-[rgb(var(--ec-input-placeholder))] focus:ring-2 focus:ring-inset focus:ring-[rgb(var(--ec-accent))] sm:text-sm sm:leading-6"
|
|
258
263
|
/>
|
|
259
264
|
{searchTerm && (
|
|
260
265
|
<button
|
|
@@ -265,7 +270,11 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
265
270
|
className="absolute inset-y-0 right-0 flex items-center pr-3"
|
|
266
271
|
aria-label="Clear search"
|
|
267
272
|
>
|
|
268
|
-
<svg
|
|
273
|
+
<svg
|
|
274
|
+
className="h-5 w-5 text-[rgb(var(--ec-icon-color))] hover:text-[rgb(var(--ec-icon-hover))]"
|
|
275
|
+
viewBox="0 0 20 20"
|
|
276
|
+
fill="currentColor"
|
|
277
|
+
>
|
|
269
278
|
<path d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" />
|
|
270
279
|
</svg>
|
|
271
280
|
</button>
|
|
@@ -275,35 +284,44 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
275
284
|
<div className="overflow-x-auto">
|
|
276
285
|
<div className="inline-block min-w-full py-2 align-middle">
|
|
277
286
|
<div className="max-w-full overflow-hidden">
|
|
278
|
-
<table className="min-w-full table-fixed divide-y divide-
|
|
287
|
+
<table className="min-w-full table-fixed divide-y divide-[rgb(var(--ec-page-border))] rounded-sm bg-[rgb(var(--ec-page-bg))]">
|
|
279
288
|
<thead>
|
|
280
289
|
<tr>
|
|
281
290
|
<th
|
|
282
291
|
scope="col"
|
|
283
|
-
className={`${showChannels ? 'w-1/4' : 'w-1/3'} py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-
|
|
292
|
+
className={`${showChannels ? 'w-1/4' : 'w-1/3'} py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))] sm:pl-6`}
|
|
284
293
|
>
|
|
285
294
|
Name
|
|
286
295
|
</th>
|
|
287
|
-
<th
|
|
296
|
+
<th
|
|
297
|
+
scope="col"
|
|
298
|
+
className="w-[100px] px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
|
|
299
|
+
>
|
|
288
300
|
Version
|
|
289
301
|
</th>
|
|
290
|
-
<th
|
|
302
|
+
<th
|
|
303
|
+
scope="col"
|
|
304
|
+
className="w-[100px] py-3.5 pl-3.5 pr-3 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
|
|
305
|
+
>
|
|
291
306
|
Type
|
|
292
307
|
</th>
|
|
293
308
|
<th
|
|
294
309
|
scope="col"
|
|
295
|
-
className={`${showChannels ? 'w-1/3' : 'w-1/2'} px-3 py-3.5 text-left text-sm font-semibold text-
|
|
310
|
+
className={`${showChannels ? 'w-1/3' : 'w-1/2'} px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]`}
|
|
296
311
|
>
|
|
297
312
|
Summary
|
|
298
313
|
</th>
|
|
299
314
|
{showChannels && (
|
|
300
|
-
<th
|
|
315
|
+
<th
|
|
316
|
+
scope="col"
|
|
317
|
+
className="w-1/4 px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
|
|
318
|
+
>
|
|
301
319
|
Channels
|
|
302
320
|
</th>
|
|
303
321
|
)}
|
|
304
322
|
</tr>
|
|
305
323
|
</thead>
|
|
306
|
-
<tbody className="divide-y divide-
|
|
324
|
+
<tbody className="divide-y divide-[rgb(var(--ec-page-border))]">
|
|
307
325
|
{paginatedMessages.length > 0 ? (
|
|
308
326
|
paginatedMessages.map((message) => (
|
|
309
327
|
<MessageRow
|
|
@@ -315,7 +333,10 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
315
333
|
))
|
|
316
334
|
) : (
|
|
317
335
|
<tr>
|
|
318
|
-
<td
|
|
336
|
+
<td
|
|
337
|
+
colSpan={showChannels ? 5 : 4}
|
|
338
|
+
className="text-center py-4 text-sm text-[rgb(var(--ec-page-text-muted))]"
|
|
339
|
+
>
|
|
319
340
|
No messages found
|
|
320
341
|
</td>
|
|
321
342
|
</tr>
|
|
@@ -326,26 +347,26 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
326
347
|
</div>
|
|
327
348
|
</div>
|
|
328
349
|
{totalPages > 1 && (
|
|
329
|
-
<div className="flex items-center justify-between border-t border-
|
|
350
|
+
<div className="flex items-center justify-between border-t border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-bg))] px-4 py-3 sm:px-6 -mt-2">
|
|
330
351
|
<div className="flex flex-1 justify-between sm:hidden">
|
|
331
352
|
<button
|
|
332
353
|
onClick={() => setCurrentPage(currentPage - 1)}
|
|
333
354
|
disabled={currentPage === 1}
|
|
334
|
-
className={`relative inline-flex items-center rounded-md border border-
|
|
355
|
+
className={`relative inline-flex items-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-bg))] px-4 py-2 text-sm font-medium ${currentPage === 1 ? 'text-[rgb(var(--ec-page-text-muted))] opacity-50' : 'text-[rgb(var(--ec-page-text))] hover:bg-[rgb(var(--ec-content-hover))]'}`}
|
|
335
356
|
>
|
|
336
357
|
Previous
|
|
337
358
|
</button>
|
|
338
359
|
<button
|
|
339
360
|
onClick={() => setCurrentPage(currentPage + 1)}
|
|
340
361
|
disabled={currentPage === totalPages}
|
|
341
|
-
className={`relative ml-3 inline-flex items-center rounded-md border border-
|
|
362
|
+
className={`relative ml-3 inline-flex items-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-bg))] px-4 py-2 text-sm font-medium ${currentPage === totalPages ? 'text-[rgb(var(--ec-page-text-muted))] opacity-50' : 'text-[rgb(var(--ec-page-text))] hover:bg-[rgb(var(--ec-content-hover))]'}`}
|
|
342
363
|
>
|
|
343
364
|
Next
|
|
344
365
|
</button>
|
|
345
366
|
</div>
|
|
346
367
|
<div className="hidden sm:flex sm:flex-1 sm:items-center sm:justify-between">
|
|
347
368
|
<div>
|
|
348
|
-
<p className="text-sm text-
|
|
369
|
+
<p className="text-sm text-[rgb(var(--ec-page-text-muted))]">
|
|
349
370
|
Showing <span className="font-medium">{startIndex + 1}</span> to{' '}
|
|
350
371
|
<span className="font-medium">{Math.min(startIndex + itemsPerPage, filteredMessages.length)}</span> of{' '}
|
|
351
372
|
<span className="font-medium">{filteredMessages.length}</span> results
|
|
@@ -356,7 +377,7 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
356
377
|
<button
|
|
357
378
|
onClick={() => setCurrentPage(currentPage - 1)}
|
|
358
379
|
disabled={currentPage === 1}
|
|
359
|
-
className={`relative inline-flex items-center rounded-l-md px-2 py-2 ${currentPage === 1 ? 'text-
|
|
380
|
+
className={`relative inline-flex items-center rounded-l-md px-2 py-2 ${currentPage === 1 ? 'text-[rgb(var(--ec-page-text-muted))] opacity-50' : 'text-[rgb(var(--ec-icon-color))] hover:bg-[rgb(var(--ec-content-hover))]'} ring-1 ring-inset ring-[rgb(var(--ec-page-border))]`}
|
|
360
381
|
>
|
|
361
382
|
<span className="sr-only">Previous</span>
|
|
362
383
|
<svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
@@ -370,7 +391,7 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
370
391
|
<button
|
|
371
392
|
onClick={() => setCurrentPage(currentPage + 1)}
|
|
372
393
|
disabled={currentPage === totalPages}
|
|
373
|
-
className={`relative inline-flex items-center rounded-r-md px-2 py-2 ${currentPage === totalPages ? 'text-
|
|
394
|
+
className={`relative inline-flex items-center rounded-r-md px-2 py-2 ${currentPage === totalPages ? 'text-[rgb(var(--ec-page-text-muted))] opacity-50' : 'text-[rgb(var(--ec-icon-color))] hover:bg-[rgb(var(--ec-content-hover))]'} ring-1 ring-inset ring-[rgb(var(--ec-page-border))]`}
|
|
374
395
|
>
|
|
375
396
|
<span className="sr-only">Next</span>
|
|
376
397
|
<svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
@@ -392,7 +413,7 @@ const MessageTable = (props: MessageTableProps) => {
|
|
|
392
413
|
|
|
393
414
|
return (
|
|
394
415
|
<div className={`mx-auto not-prose py-4 space-y-4 my-4`}>
|
|
395
|
-
<h2 className="text-2xl font-semibold">Messages for this {collection.slice(0, -1)}</h2>
|
|
416
|
+
<h2 className="text-2xl font-semibold text-[rgb(var(--ec-page-text))]">Messages for this {collection.slice(0, -1)}</h2>
|
|
396
417
|
<div>
|
|
397
418
|
{shouldRenderSends && (
|
|
398
419
|
<div>
|
|
@@ -622,7 +622,7 @@ const NodeGraphBuilder = ({
|
|
|
622
622
|
<div className="relative group">
|
|
623
623
|
<button
|
|
624
624
|
onClick={() => setIsSettingsOpen(!isSettingsOpen)}
|
|
625
|
-
className="py-2.5 px-3 bg-white rounded-md shadow-md hover:bg-
|
|
625
|
+
className="py-2.5 px-3 bg-white rounded-md shadow-md hover:bg-[rgb(var(--ec-accent-subtle))] focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[rgb(var(--ec-accent))]"
|
|
626
626
|
aria-label="Open settings"
|
|
627
627
|
>
|
|
628
628
|
<CogIcon className="h-5 w-5 text-gray-600" />
|
|
@@ -634,12 +634,14 @@ const NodeGraphBuilder = ({
|
|
|
634
634
|
<div className="relative group">
|
|
635
635
|
<button
|
|
636
636
|
onClick={toggleFullScreen}
|
|
637
|
-
className={`py-2.5 px-3 bg-white rounded-md shadow-md hover:bg-
|
|
638
|
-
isFullscreen ? 'bg-
|
|
637
|
+
className={`py-2.5 px-3 bg-white rounded-md shadow-md hover:bg-[rgb(var(--ec-accent-subtle))] focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[rgb(var(--ec-accent))] ${
|
|
638
|
+
isFullscreen ? 'bg-[rgb(var(--ec-accent-subtle))] text-[rgb(var(--ec-accent))]' : ''
|
|
639
639
|
}`}
|
|
640
640
|
aria-label={isFullscreen ? 'Exit presentation mode' : 'Enter presentation mode'}
|
|
641
641
|
>
|
|
642
|
-
<PresentationChartLineIcon
|
|
642
|
+
<PresentationChartLineIcon
|
|
643
|
+
className={`h-5 w-5 ${isFullscreen ? 'text-[rgb(var(--ec-accent))]' : 'text-gray-600'}`}
|
|
644
|
+
/>
|
|
643
645
|
</button>
|
|
644
646
|
<div className="absolute top-full left-1/2 -translate-x-1/2 mt-2 px-2 py-1 bg-gray-900 text-white text-xs rounded shadow-lg opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap pointer-events-none z-50">
|
|
645
647
|
{isFullscreen ? 'Exit Presentation Mode' : 'Presentation Mode'}
|
|
@@ -667,7 +669,7 @@ const NodeGraphBuilder = ({
|
|
|
667
669
|
<select
|
|
668
670
|
value={links.find((link) => window.location.href.includes(link.url))?.url || links[0].url}
|
|
669
671
|
onChange={(e) => navigate(e.target.value)}
|
|
670
|
-
className="appearance-none pl-7 pr-6 py-0 text-[14px] bg-white rounded-md border border-gray-200 hover:bg-gray-100/50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-
|
|
672
|
+
className="appearance-none pl-7 pr-6 py-0 text-[14px] bg-white rounded-md border border-gray-200 hover:bg-gray-100/50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[rgb(var(--ec-accent))]"
|
|
671
673
|
style={{ minWidth: 120, height: '26px' }}
|
|
672
674
|
>
|
|
673
675
|
{links.map((link) => (
|
|
@@ -699,8 +701,8 @@ const NodeGraphBuilder = ({
|
|
|
699
701
|
id="message-animation-toggle"
|
|
700
702
|
onClick={toggleAnimateMessages}
|
|
701
703
|
className={`${
|
|
702
|
-
animateMessages ? 'bg-
|
|
703
|
-
} relative inline-flex h-6 w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-
|
|
704
|
+
animateMessages ? 'bg-[rgb(var(--ec-accent))]' : 'bg-gray-200'
|
|
705
|
+
} relative inline-flex h-6 w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2`}
|
|
704
706
|
>
|
|
705
707
|
<span
|
|
706
708
|
className={`${
|
|
@@ -721,8 +723,8 @@ const NodeGraphBuilder = ({
|
|
|
721
723
|
id="hide-channels-toggle"
|
|
722
724
|
onClick={toggleChannelsVisibility}
|
|
723
725
|
className={`${
|
|
724
|
-
hideChannels ? 'bg-
|
|
725
|
-
} relative inline-flex h-6 w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-
|
|
726
|
+
hideChannels ? 'bg-[rgb(var(--ec-accent))]' : 'bg-gray-200'
|
|
727
|
+
} relative inline-flex h-6 w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2`}
|
|
726
728
|
>
|
|
727
729
|
<span
|
|
728
730
|
className={`${
|
|
@@ -737,7 +739,7 @@ const NodeGraphBuilder = ({
|
|
|
737
739
|
<div className="pt-4 border-t border-gray-200 space-y-2">
|
|
738
740
|
<button
|
|
739
741
|
onClick={openStudioModal}
|
|
740
|
-
className="w-full flex items-center justify-center space-x-2 px-4 py-2 bg-black hover:bg-gray-800 text-white text-sm font-medium rounded-md focus:outline-none focus:ring-2 focus:ring-
|
|
742
|
+
className="w-full flex items-center justify-center space-x-2 px-4 py-2 bg-black hover:bg-gray-800 text-white text-sm font-medium rounded-md focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2 transition-colors"
|
|
741
743
|
>
|
|
742
744
|
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
743
745
|
<path
|
|
@@ -751,7 +753,7 @@ const NodeGraphBuilder = ({
|
|
|
751
753
|
</button>
|
|
752
754
|
<button
|
|
753
755
|
onClick={handleExportVisual}
|
|
754
|
-
className="w-full flex items-center justify-center border border-gray-200 space-x-2 px-4 py-2 bg-white text-gray-800 text-sm font-medium rounded-md hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-
|
|
756
|
+
className="w-full flex items-center justify-center border border-gray-200 space-x-2 px-4 py-2 bg-white text-gray-800 text-sm font-medium rounded-md hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2"
|
|
755
757
|
>
|
|
756
758
|
<DocumentArrowDownIcon className="w-4 h-4" />
|
|
757
759
|
<span>Export as png</span>
|
|
@@ -780,7 +782,7 @@ const NodeGraphBuilder = ({
|
|
|
780
782
|
{Object.entries(legend).map(([key, { count, colorClass, groupId }]) => (
|
|
781
783
|
<li
|
|
782
784
|
key={key}
|
|
783
|
-
className="flex space-x-2 items-center text-[10px] cursor-pointer hover:text-
|
|
785
|
+
className="flex space-x-2 items-center text-[10px] cursor-pointer hover:text-[rgb(var(--ec-accent))] hover:underline"
|
|
784
786
|
onClick={() => handleLegendClick(key, groupId)}
|
|
785
787
|
>
|
|
786
788
|
<span className={`w-2 h-2 block ${colorClass}`} />
|