@eventcatalog/core 3.0.0-beta.9 → 3.1.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/README.md +41 -98
- package/dist/__mocks__/astro-content.cjs +32 -0
- package/dist/__mocks__/astro-content.d.cts +13 -0
- package/dist/__mocks__/astro-content.d.ts +13 -0
- package/dist/__mocks__/astro-content.js +7 -0
- 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/catalog-to-astro-content-directory.cjs +2 -19
- package/dist/catalog-to-astro-content-directory.d.cts +1 -2
- package/dist/catalog-to-astro-content-directory.d.ts +1 -2
- package/dist/catalog-to-astro-content-directory.js +3 -5
- package/dist/{chunk-RAJ7TGWN.js → chunk-2WGZFERB.js} +1 -1
- package/dist/{chunk-R2BJ7MJG.js → chunk-6Z6ARMQS.js} +1 -17
- package/dist/{chunk-TC3R47V6.js → chunk-ESUL7UE6.js} +1 -1
- package/dist/{chunk-2VPX4WIJ.js → chunk-I3CW5KQI.js} +1 -1
- package/dist/{chunk-TT4LZO2Q.js → chunk-KBO4IL2D.js} +1 -1
- package/dist/{chunk-A4MGWK5T.js → chunk-URR33SNK.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog.cjs +20 -64
- package/dist/eventcatalog.config.d.cts +11 -0
- package/dist/eventcatalog.config.d.ts +11 -0
- package/dist/eventcatalog.js +26 -52
- 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/astro.config.mjs +4 -1
- package/eventcatalog/integrations/eventcatalog-features.ts +69 -0
- package/eventcatalog/public/icons/asyncapi-black.svg +2 -0
- package/eventcatalog/public/icons/graphql-black.svg +1 -0
- package/eventcatalog/public/icons/openapi-black.svg +1 -0
- package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +1010 -0
- package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +24 -0
- 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 +322 -173
- package/eventcatalog/src/components/Grids/MessageGrid.tsx +317 -178
- package/eventcatalog/src/components/Grids/specification-utils.ts +106 -0
- package/eventcatalog/src/components/Header.astro +40 -15
- 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 +28 -15
- 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 +95 -90
- package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +144 -0
- 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 +36 -8
- package/eventcatalog/src/components/SchemaExplorer/ProducersConsumersSection.tsx +17 -13
- package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +37 -10
- package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsHeader.tsx +152 -109
- package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +6 -15
- package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +257 -61
- package/eventcatalog/src/components/SchemaExplorer/SchemaFilters.tsx +64 -126
- package/eventcatalog/src/components/SchemaExplorer/SchemaListItem.tsx +53 -43
- package/eventcatalog/src/components/SchemaExplorer/SchemaViewerModal.tsx +8 -8
- package/eventcatalog/src/components/Search/Search.astro +5 -5
- package/eventcatalog/src/components/Search/SearchDataLoader.astro +25 -0
- package/eventcatalog/src/components/Search/SearchModal.tsx +65 -36
- package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +37 -24
- package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +117 -56
- package/eventcatalog/src/components/SideNav/SideNav.astro +0 -15
- package/eventcatalog/src/components/Tables/Table.tsx +97 -77
- package/eventcatalog/src/components/Tables/columns/ContainersTableColumns.tsx +114 -74
- package/eventcatalog/src/components/Tables/columns/DomainTableColumns.tsx +77 -55
- package/eventcatalog/src/components/Tables/columns/FlowTableColumns.tsx +36 -36
- package/eventcatalog/src/components/Tables/columns/MessageTableColumns.tsx +116 -77
- package/eventcatalog/src/components/Tables/columns/ServiceTableColumns.tsx +111 -94
- package/eventcatalog/src/components/Tables/columns/SharedColumns.tsx +31 -26
- package/eventcatalog/src/components/Tables/columns/TeamsTableColumns.tsx +123 -215
- package/eventcatalog/src/components/Tables/columns/UserTableColumns.tsx +156 -243
- package/eventcatalog/src/components/ThemeToggle.tsx +18 -0
- package/eventcatalog/src/content.config.ts +1 -13
- package/eventcatalog/src/enterprise/ai/chat-api.ts +360 -0
- package/eventcatalog/src/enterprise/auth/[...auth].ts +3 -0
- package/eventcatalog/src/enterprise/auth/login.astro +420 -0
- package/eventcatalog/src/enterprise/collections/index.ts +0 -1
- 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 +14 -11
- package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +187 -123
- package/eventcatalog/src/pages/_index.astro +213 -573
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +8 -2
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +9 -5
- package/eventcatalog/src/pages/directory/[type]/index.astro +6 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +19 -3
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +7 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +5 -5
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +81 -64
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +23 -24
- package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +214 -125
- package/eventcatalog/src/pages/docs/custom/index.astro +2 -2
- package/eventcatalog/src/pages/docs/teams/[id]/index.astro +98 -70
- package/eventcatalog/src/pages/docs/teams/[id].mdx.ts +36 -0
- package/eventcatalog/src/pages/docs/users/[id]/index.astro +60 -45
- package/eventcatalog/src/pages/docs/users/[id].mdx.ts +36 -0
- package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +178 -0
- package/eventcatalog/src/pages/schemas/explorer/index.astro +7 -157
- package/eventcatalog/src/pages/studio.astro +155 -75
- package/eventcatalog/src/remark-plugins/directives.ts +36 -15
- package/eventcatalog/src/remark-plugins/mermaid.ts +2 -2
- package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/container.ts +10 -1
- package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/domain.ts +17 -7
- package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/message.ts +10 -1
- package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/service.ts +11 -4
- package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/shared.ts +14 -0
- package/eventcatalog/src/stores/{sidebar-store.ts → sidebar-store/index.ts} +1 -1
- 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/collections/channels.ts +0 -2
- package/eventcatalog/src/utils/collections/commands.ts +0 -2
- package/eventcatalog/src/utils/collections/containers.ts +0 -2
- package/eventcatalog/src/utils/collections/domains.ts +0 -2
- package/eventcatalog/src/utils/collections/entities.ts +0 -2
- package/eventcatalog/src/utils/collections/events.ts +0 -2
- package/eventcatalog/src/utils/collections/flows.ts +0 -2
- package/eventcatalog/src/utils/collections/queries.ts +0 -2
- package/eventcatalog/src/utils/collections/schemas.ts +45 -7
- package/eventcatalog/src/utils/collections/services.ts +0 -2
- package/eventcatalog/src/utils/feature.ts +13 -5
- package/eventcatalog/src/utils/node-graphs/services-node-graph.ts +1 -1
- package/eventcatalog/src/utils/resource-files.ts +86 -0
- package/eventcatalog/tailwind.config.mjs +6 -3
- package/package.json +12 -15
- package/default-files-for-collections/changelogs.md +0 -5
- package/default-files-for-collections/channels.md +0 -8
- package/default-files-for-collections/commands.md +0 -8
- package/default-files-for-collections/domains.md +0 -8
- package/default-files-for-collections/events.md +0 -8
- package/default-files-for-collections/flows.md +0 -11
- package/default-files-for-collections/queries.md +0 -8
- package/default-files-for-collections/services.md +0 -8
- package/default-files-for-collections/ubiquitousLanguages.md +0 -7
- package/eventcatalog/src/enterprise/collections/chat-prompts.ts +0 -32
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/Chat.tsx +0 -60
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/ChatMessage.tsx +0 -414
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/ChatSidebar.tsx +0 -169
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/InputModal.tsx +0 -244
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/MentionInput.tsx +0 -211
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/WelcomePromptArea.tsx +0 -176
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/default-prompts.ts +0 -93
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/hooks/ChatProvider.tsx +0 -143
- package/eventcatalog/src/enterprise/eventcatalog-chat/components/windows/ChatWindow.server.tsx +0 -387
- package/eventcatalog/src/enterprise/eventcatalog-chat/pages/api/chat.ts +0 -59
- package/eventcatalog/src/enterprise/eventcatalog-chat/pages/chat/index.astro +0 -104
- package/eventcatalog/src/enterprise/eventcatalog-chat/providers/ai-provider.ts +0 -140
- package/eventcatalog/src/enterprise/eventcatalog-chat/providers/anthropic.ts +0 -28
- package/eventcatalog/src/enterprise/eventcatalog-chat/providers/google.ts +0 -41
- package/eventcatalog/src/enterprise/eventcatalog-chat/providers/index.ts +0 -26
- package/eventcatalog/src/enterprise/eventcatalog-chat/providers/openai.ts +0 -61
- package/eventcatalog/src/enterprise/eventcatalog-chat/utils/chat-prompts.ts +0 -50
- package/eventcatalog/src/pages/auth/login.astro +0 -280
- package/eventcatalog/src/pages/chat/feature.astro +0 -179
- package/eventcatalog/src/pages/chat/index.astro +0 -10
- package/eventcatalog/src/pages/docs/_default-docs.mdx +0 -25
- package/eventcatalog/src/pages/docs/index.astro +0 -33
- package/eventcatalog/src/pages/nav-index.json.ts +0 -30
- /package/eventcatalog/src/{pages → enterprise}/auth/error.astro +0 -0
- /package/eventcatalog/src/{middleware-auth.ts → enterprise/auth/middleware/middleware-auth.ts} +0 -0
- /package/eventcatalog/src/{middleware.ts → enterprise/auth/middleware/middleware.ts} +0 -0
- /package/eventcatalog/src/{pages/unauthorized/index.astro → enterprise/auth/unauthorized.astro} +0 -0
- /package/eventcatalog/src/{pages → enterprise}/plans/index.astro +0 -0
- /package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/flow.ts +0 -0
- /package/eventcatalog/src/{components/SideNav/NestedSideBar/sidebar-builder.ts → stores/sidebar-store/state.ts} +0 -0
|
@@ -37,35 +37,35 @@ const ResourceRow = memo(
|
|
|
37
37
|
const owners = resource.owners || [];
|
|
38
38
|
|
|
39
39
|
return (
|
|
40
|
-
<tr className="group hover:bg-
|
|
41
|
-
<td className="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-
|
|
40
|
+
<tr className="group hover:bg-[rgb(var(--ec-content-hover))]">
|
|
41
|
+
<td className="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-[rgb(var(--ec-page-text))] sm:pl-6 relative">
|
|
42
42
|
<a href={url} className="absolute inset-0 z-10" aria-label={`View details for ${resource.name}`} />
|
|
43
43
|
<div className="flex items-center gap-2 relative">
|
|
44
44
|
<Icon className={`h-5 w-5 text-${color}-500`} />
|
|
45
|
-
<span className="group-hover:text-
|
|
45
|
+
<span className="group-hover:text-[rgb(var(--ec-accent))] break-all">{resource.name}</span>
|
|
46
46
|
</div>
|
|
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>v{resource.version}</span>
|
|
51
51
|
</td>
|
|
52
|
-
<td className="whitespace-nowrap px-3 py-4 text-sm text-
|
|
52
|
+
<td className="whitespace-nowrap 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>{type}</span>
|
|
55
55
|
</td>
|
|
56
|
-
<td className="px-3 py-4 text-sm text-
|
|
56
|
+
<td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
|
|
57
57
|
<a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
|
|
58
58
|
<span className="line-clamp-2 break-words">{resource.summary || resource.description || '-'}</span>
|
|
59
59
|
</td>
|
|
60
60
|
{showTags && (
|
|
61
|
-
<td className="px-3 py-4 text-sm text-
|
|
61
|
+
<td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
|
|
62
62
|
<a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
|
|
63
63
|
<div className="flex flex-wrap gap-1">
|
|
64
64
|
{tags.length > 0
|
|
65
65
|
? tags.map((tag, index) => (
|
|
66
66
|
<span
|
|
67
67
|
key={`${tag}-${index}`}
|
|
68
|
-
className="inline-flex items-center rounded-md bg-
|
|
68
|
+
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))]"
|
|
69
69
|
>
|
|
70
70
|
{tag}
|
|
71
71
|
</span>
|
|
@@ -75,14 +75,14 @@ const ResourceRow = memo(
|
|
|
75
75
|
</td>
|
|
76
76
|
)}
|
|
77
77
|
{showOwners && (
|
|
78
|
-
<td className="px-3 py-4 text-sm text-
|
|
78
|
+
<td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
|
|
79
79
|
<a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
|
|
80
80
|
<div className="flex flex-wrap gap-1">
|
|
81
81
|
{owners.length > 0
|
|
82
82
|
? owners.map((owner, index) => (
|
|
83
83
|
<span
|
|
84
84
|
key={`${owner.id || owner.name}-${index}`}
|
|
85
|
-
className="inline-flex items-center rounded-md bg-
|
|
85
|
+
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))]"
|
|
86
86
|
>
|
|
87
87
|
{owner.name || owner.id}
|
|
88
88
|
</span>
|
|
@@ -119,8 +119,8 @@ const FilterButton = memo(
|
|
|
119
119
|
}}
|
|
120
120
|
className={`px-3 py-1 rounded-md text-sm font-medium ${
|
|
121
121
|
typeFilter === type
|
|
122
|
-
? 'bg-
|
|
123
|
-
: 'bg-
|
|
122
|
+
? '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))]'
|
|
123
|
+
: 'bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))]'
|
|
124
124
|
}`}
|
|
125
125
|
>
|
|
126
126
|
{label} ({count})
|
|
@@ -217,13 +217,13 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
217
217
|
|
|
218
218
|
return (
|
|
219
219
|
<div className="mx-auto not-prose py-4 space-y-4 my-4">
|
|
220
|
-
{title && <h2 className="text-2xl font-semibold">{title}</h2>}
|
|
221
|
-
<div className="flow-root bg-
|
|
220
|
+
{title && <h2 className="text-2xl font-semibold text-[rgb(var(--ec-page-text))]">{title}</h2>}
|
|
221
|
+
<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))]">
|
|
222
222
|
<div className="space-y-4">
|
|
223
223
|
<h2 className="text-xl font-semibold">
|
|
224
224
|
{subtitle} ({searchTerm || typeFilter ? `${filteredResources.length}/${resources.length}` : resources.length})
|
|
225
225
|
</h2>
|
|
226
|
-
<span className="text-sm text-
|
|
226
|
+
<span className="text-sm text-[rgb(var(--ec-page-text-muted))]">{description}</span>
|
|
227
227
|
|
|
228
228
|
{/* Type filter buttons - only shown if there are filter options */}
|
|
229
229
|
{filterButtons.length > 0 && (
|
|
@@ -244,7 +244,12 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
244
244
|
|
|
245
245
|
<div className="relative">
|
|
246
246
|
<div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
|
|
247
|
-
<svg
|
|
247
|
+
<svg
|
|
248
|
+
className="h-5 w-5 text-[rgb(var(--ec-icon-color))]"
|
|
249
|
+
viewBox="0 0 20 20"
|
|
250
|
+
fill="currentColor"
|
|
251
|
+
aria-hidden="true"
|
|
252
|
+
>
|
|
248
253
|
<path
|
|
249
254
|
fillRule="evenodd"
|
|
250
255
|
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"
|
|
@@ -260,7 +265,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
260
265
|
setCurrentPage(1); // Reset to first page when searching
|
|
261
266
|
}}
|
|
262
267
|
placeholder="Search by name, type, description, or tags..."
|
|
263
|
-
className="block w-full rounded-md border-0 py-1.5 pl-10 pr-10 text-
|
|
268
|
+
className="block w-full rounded-md border-0 py-1.5 pl-10 pr-10 bg-[rgb(var(--ec-input-bg))] text-[rgb(var(--ec-input-text))] 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"
|
|
264
269
|
/>
|
|
265
270
|
{searchTerm && (
|
|
266
271
|
<button
|
|
@@ -271,7 +276,11 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
271
276
|
className="absolute inset-y-0 right-0 flex items-center pr-3"
|
|
272
277
|
aria-label="Clear search"
|
|
273
278
|
>
|
|
274
|
-
<svg
|
|
279
|
+
<svg
|
|
280
|
+
className="h-5 w-5 text-[rgb(var(--ec-icon-color))] hover:text-[rgb(var(--ec-icon-hover))]"
|
|
281
|
+
viewBox="0 0 20 20"
|
|
282
|
+
fill="currentColor"
|
|
283
|
+
>
|
|
275
284
|
<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" />
|
|
276
285
|
</svg>
|
|
277
286
|
</button>
|
|
@@ -281,40 +290,52 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
281
290
|
<div className="overflow-x-auto">
|
|
282
291
|
<div className="inline-block min-w-full py-2 align-middle">
|
|
283
292
|
<div className="max-w-full overflow-hidden">
|
|
284
|
-
<table className="min-w-full table-fixed divide-y divide-
|
|
293
|
+
<table className="min-w-full table-fixed divide-y divide-[rgb(var(--ec-page-border))] rounded-sm bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))]">
|
|
285
294
|
<thead>
|
|
286
295
|
<tr>
|
|
287
296
|
<th
|
|
288
297
|
scope="col"
|
|
289
|
-
className={`${showTags || showOwners ? 'w-1/5' : 'w-1/4'} py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-
|
|
298
|
+
className={`${showTags || showOwners ? 'w-1/5' : 'w-1/4'} py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))] sm:pl-6`}
|
|
290
299
|
>
|
|
291
300
|
Name
|
|
292
301
|
</th>
|
|
293
|
-
<th
|
|
302
|
+
<th
|
|
303
|
+
scope="col"
|
|
304
|
+
className="w-[100px] px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
|
|
305
|
+
>
|
|
294
306
|
Version
|
|
295
307
|
</th>
|
|
296
|
-
<th
|
|
308
|
+
<th
|
|
309
|
+
scope="col"
|
|
310
|
+
className="w-[100px] py-3.5 pl-3.5 pr-3 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
|
|
311
|
+
>
|
|
297
312
|
Type
|
|
298
313
|
</th>
|
|
299
314
|
<th
|
|
300
315
|
scope="col"
|
|
301
|
-
className={`${showTags && showOwners ? 'w-1/4' : showTags || showOwners ? 'w-1/3' : 'w-1/2'} px-3 py-3.5 text-left text-sm font-semibold text-
|
|
316
|
+
className={`${showTags && showOwners ? 'w-1/4' : showTags || showOwners ? 'w-1/3' : 'w-1/2'} px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]`}
|
|
302
317
|
>
|
|
303
318
|
Description
|
|
304
319
|
</th>
|
|
305
320
|
{showTags && (
|
|
306
|
-
<th
|
|
321
|
+
<th
|
|
322
|
+
scope="col"
|
|
323
|
+
className="w-1/6 px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
|
|
324
|
+
>
|
|
307
325
|
Tags
|
|
308
326
|
</th>
|
|
309
327
|
)}
|
|
310
328
|
{showOwners && (
|
|
311
|
-
<th
|
|
329
|
+
<th
|
|
330
|
+
scope="col"
|
|
331
|
+
className="w-1/6 px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
|
|
332
|
+
>
|
|
312
333
|
Owners
|
|
313
334
|
</th>
|
|
314
335
|
)}
|
|
315
336
|
</tr>
|
|
316
337
|
</thead>
|
|
317
|
-
<tbody className="divide-y divide-
|
|
338
|
+
<tbody className="divide-y divide-[rgb(var(--ec-page-border))]">
|
|
318
339
|
{paginatedResources.length > 0 ? (
|
|
319
340
|
paginatedResources.map((resource) => (
|
|
320
341
|
<ResourceRow
|
|
@@ -328,7 +349,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
328
349
|
<tr>
|
|
329
350
|
<td
|
|
330
351
|
colSpan={showTags && showOwners ? 6 : showTags || showOwners ? 5 : 4}
|
|
331
|
-
className="text-center py-4 text-sm text-
|
|
352
|
+
className="text-center py-4 text-sm text-[rgb(var(--ec-page-text-muted))]"
|
|
332
353
|
>
|
|
333
354
|
No resources found
|
|
334
355
|
</td>
|
|
@@ -340,26 +361,26 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
340
361
|
</div>
|
|
341
362
|
</div>
|
|
342
363
|
{totalPages > 1 && (
|
|
343
|
-
<div className="flex items-center justify-between border-t border-
|
|
364
|
+
<div className="flex items-center justify-between border-t border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] px-4 py-3 sm:px-6 -mt-2">
|
|
344
365
|
<div className="flex flex-1 justify-between sm:hidden">
|
|
345
366
|
<button
|
|
346
367
|
onClick={() => setCurrentPage(currentPage - 1)}
|
|
347
368
|
disabled={currentPage === 1}
|
|
348
|
-
className={`relative inline-flex items-center rounded-md border border-
|
|
369
|
+
className={`relative inline-flex items-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] px-4 py-2 text-sm font-medium ${currentPage === 1 ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text))] hover:bg-[rgb(var(--ec-content-hover))]'}`}
|
|
349
370
|
>
|
|
350
371
|
Previous
|
|
351
372
|
</button>
|
|
352
373
|
<button
|
|
353
374
|
onClick={() => setCurrentPage(currentPage + 1)}
|
|
354
375
|
disabled={currentPage === totalPages}
|
|
355
|
-
className={`relative ml-3 inline-flex items-center rounded-md border border-
|
|
376
|
+
className={`relative ml-3 inline-flex items-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] px-4 py-2 text-sm font-medium ${currentPage === totalPages ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text))] hover:bg-[rgb(var(--ec-content-hover))]'}`}
|
|
356
377
|
>
|
|
357
378
|
Next
|
|
358
379
|
</button>
|
|
359
380
|
</div>
|
|
360
381
|
<div className="hidden sm:flex sm:flex-1 sm:items-center sm:justify-between">
|
|
361
382
|
<div>
|
|
362
|
-
<p className="text-sm text-
|
|
383
|
+
<p className="text-sm text-[rgb(var(--ec-page-text-muted))]">
|
|
363
384
|
Showing <span className="font-medium">{startIndex + 1}</span> to{' '}
|
|
364
385
|
<span className="font-medium">{Math.min(startIndex + itemsPerPage, filteredResources.length)}</span> of{' '}
|
|
365
386
|
<span className="font-medium">{filteredResources.length}</span> results
|
|
@@ -370,7 +391,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
370
391
|
<button
|
|
371
392
|
onClick={() => setCurrentPage(currentPage - 1)}
|
|
372
393
|
disabled={currentPage === 1}
|
|
373
|
-
className={`relative inline-flex items-center rounded-l-md px-2 py-2 ${currentPage === 1 ? 'text-
|
|
394
|
+
className={`relative inline-flex items-center rounded-l-md px-2 py-2 ${currentPage === 1 ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text-muted))] 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">Previous</span>
|
|
376
397
|
<svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
@@ -384,7 +405,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
|
|
|
384
405
|
<button
|
|
385
406
|
onClick={() => setCurrentPage(currentPage + 1)}
|
|
386
407
|
disabled={currentPage === totalPages}
|
|
387
|
-
className={`relative inline-flex items-center rounded-r-md px-2 py-2 ${currentPage === totalPages ? 'text-
|
|
408
|
+
className={`relative inline-flex items-center rounded-r-md px-2 py-2 ${currentPage === totalPages ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text-muted))] hover:bg-[rgb(var(--ec-content-hover))]'} ring-1 ring-inset ring-[rgb(var(--ec-page-border))]`}
|
|
388
409
|
>
|
|
389
410
|
<span className="sr-only">Next</span>
|
|
390
411
|
<svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
@@ -9,7 +9,7 @@ const { title } = Astro.props;
|
|
|
9
9
|
</span>
|
|
10
10
|
<h3 class="font-semibold text-lg ml-0">{title}</h3>
|
|
11
11
|
</div>
|
|
12
|
-
<p class="text-
|
|
12
|
+
<p class="text-[rgb(var(--ec-page-text-muted))] text-sm ml-4"><slot /></p>
|
|
13
13
|
</li>
|
|
14
14
|
|
|
15
15
|
<script>
|
|
@@ -26,7 +26,7 @@ const { title } = Astro.props;
|
|
|
26
26
|
|
|
27
27
|
<style is:global>
|
|
28
28
|
.step a {
|
|
29
|
-
color:
|
|
29
|
+
color: rgb(var(--ec-page-text-muted));
|
|
30
30
|
text-decoration: underline;
|
|
31
31
|
&:hover {
|
|
32
32
|
color: #b977f9;
|
|
@@ -19,9 +19,9 @@ function splitByLi(html: string) {
|
|
|
19
19
|
const data = splitByLi(html);
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
-
<div class="bg-
|
|
23
|
-
{title && <h2 class="text-2xl font-bold text-
|
|
24
|
-
<ol class="relative border-l border-
|
|
22
|
+
<div class="bg-[rgb(var(--ec-page-bg))] text-[rgb(var(--ec-page-text))] py-10 pb-0 font-sans not-prose">
|
|
23
|
+
{title && <h2 class="text-2xl font-bold text-[rgb(var(--ec-page-text))] mb-6">{title}</h2>}
|
|
24
|
+
<ol class="relative border-l border-[rgb(var(--ec-page-border))] ml-3">
|
|
25
25
|
{data.map((item: any) => <Fragment set:html={item} />)}
|
|
26
26
|
</ol>
|
|
27
27
|
</div>
|
|
@@ -32,8 +32,8 @@ const tabItems: TabItem[] = await Promise.all(
|
|
|
32
32
|
const tabsId = Math.random().toString(36).substring(2, 9);
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
-
<div class="bg-
|
|
36
|
-
{title && <h2 class="text-2xl font-bold text-
|
|
35
|
+
<div class="bg-[rgb(var(--ec-page-bg))] text-[rgb(var(--ec-page-text))] pb-10 not-prose" data-tabs-container={tabsId}>
|
|
36
|
+
{title && <h2 class="text-2xl font-bold text-[rgb(var(--ec-page-text))] mb-6">{title}</h2>}
|
|
37
37
|
|
|
38
38
|
{/* Tab List */}
|
|
39
39
|
<div class="">
|
|
@@ -41,7 +41,7 @@ const tabsId = Math.random().toString(36).substring(2, 9);
|
|
|
41
41
|
{
|
|
42
42
|
tabItems.map((item) => (
|
|
43
43
|
<button
|
|
44
|
-
class="whitespace-nowrap py-4 px-1 border-b-2 px-6 font-bold text-sm border-transparent text-
|
|
44
|
+
class="whitespace-nowrap py-4 px-1 border-b-2 px-6 font-bold text-sm border-transparent text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] hover:border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))] focus:outline-none tab-button"
|
|
45
45
|
data-tab={item.id}
|
|
46
46
|
aria-selected="false"
|
|
47
47
|
>
|
|
@@ -70,22 +70,19 @@ const tabsId = Math.random().toString(36).substring(2, 9);
|
|
|
70
70
|
const panels: NodeListOf<HTMLElement> = container.querySelectorAll('[data-tab-content]');
|
|
71
71
|
|
|
72
72
|
// Show first tab by default
|
|
73
|
-
tabs[0]?.classList.add('
|
|
74
|
-
tabs[0]?.classList.remove('text-gray-500', 'border-transparent');
|
|
73
|
+
tabs[0]?.classList.add('tab-active');
|
|
75
74
|
panels[0]?.classList.remove('hidden');
|
|
76
75
|
|
|
77
76
|
tabs.forEach((tab: HTMLButtonElement) => {
|
|
78
77
|
tab.addEventListener('click', () => {
|
|
79
78
|
// Remove active states
|
|
80
79
|
tabs.forEach((t: HTMLButtonElement) => {
|
|
81
|
-
t.classList.remove('
|
|
82
|
-
t.classList.add('text-gray-500', 'border-transparent');
|
|
80
|
+
t.classList.remove('tab-active');
|
|
83
81
|
});
|
|
84
82
|
panels.forEach((p: HTMLElement) => p.classList.add('hidden'));
|
|
85
83
|
|
|
86
84
|
// Set active states
|
|
87
|
-
tab.classList.
|
|
88
|
-
tab.classList.add('text-purple-600', 'border-purple-600');
|
|
85
|
+
tab.classList.add('tab-active');
|
|
89
86
|
|
|
90
87
|
// Show corresponding panel
|
|
91
88
|
const tabId = tab.getAttribute('data-tab');
|
|
@@ -103,3 +100,10 @@ const tabsId = Math.random().toString(36).substring(2, 9);
|
|
|
103
100
|
});
|
|
104
101
|
});
|
|
105
102
|
</script>
|
|
103
|
+
|
|
104
|
+
<style is:global>
|
|
105
|
+
.tab-button.tab-active {
|
|
106
|
+
color: rgb(var(--ec-accent));
|
|
107
|
+
border-color: rgb(var(--ec-accent));
|
|
108
|
+
}
|
|
109
|
+
</style>
|
|
@@ -28,31 +28,43 @@ function startsWithProtocol(str: string) {
|
|
|
28
28
|
<a
|
|
29
29
|
href={startsWithProtocol(href) ? href : buildUrl(href)}
|
|
30
30
|
target={openWindow ? '_blank' : '_self'}
|
|
31
|
-
class="block relative bg-
|
|
31
|
+
class="tile-card block relative bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-xl p-8 h-48 transition-all duration-300 ease-out hover:border-[rgb(var(--ec-accent)/0.5)] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2 overflow-hidden"
|
|
32
32
|
>
|
|
33
33
|
<!-- Icon centered in card with grid background -->
|
|
34
34
|
<div class="relative h-full flex items-center justify-center">
|
|
35
35
|
<!-- Squared paper grid behind icon -->
|
|
36
|
-
<div
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
linear-gradient(rgba(147, 51, 234, 0.2) 1px, transparent 1px),
|
|
40
|
-
linear-gradient(90deg, rgba(147, 51, 234, 0.2) 1px, transparent 1px);
|
|
41
|
-
background-size: 16px 16px;"
|
|
42
|
-
>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
{IconComponent && <IconComponent className="relative w-16 h-16 text-purple-600 stroke-1" />}
|
|
36
|
+
<div class="tile-grid absolute inset-0 opacity-15"></div>
|
|
37
|
+
|
|
38
|
+
{IconComponent && <IconComponent className="tile-icon relative w-16 h-16 stroke-1" />}
|
|
46
39
|
</div>
|
|
47
40
|
</a>
|
|
48
41
|
|
|
49
42
|
<!-- Title and description outside card -->
|
|
50
43
|
<div class="mt-4 space-y-0">
|
|
51
|
-
<h2 class="text-
|
|
44
|
+
<h2 class="text-[rgb(var(--ec-page-text))] text-lg font-semibold">
|
|
52
45
|
{title}
|
|
53
46
|
</h2>
|
|
54
|
-
<p class="text-
|
|
47
|
+
<p class="text-[rgb(var(--ec-page-text-muted))] text-sm leading-relaxed">
|
|
55
48
|
{description}
|
|
56
49
|
</p>
|
|
57
50
|
</div>
|
|
58
51
|
</div>
|
|
52
|
+
|
|
53
|
+
<style>
|
|
54
|
+
.tile-card:hover {
|
|
55
|
+
box-shadow:
|
|
56
|
+
0 10px 15px -3px rgb(var(--ec-accent) / 0.1),
|
|
57
|
+
0 4px 6px -4px rgb(var(--ec-accent) / 0.1);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.tile-grid {
|
|
61
|
+
background-image:
|
|
62
|
+
linear-gradient(rgb(var(--ec-accent) / 0.2) 1px, transparent 1px),
|
|
63
|
+
linear-gradient(90deg, rgb(var(--ec-accent) / 0.2) 1px, transparent 1px);
|
|
64
|
+
background-size: 16px 16px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.tile-icon {
|
|
68
|
+
color: rgb(var(--ec-accent));
|
|
69
|
+
}
|
|
70
|
+
</style>
|
|
@@ -3,7 +3,7 @@ const { title, columns = 2 } = Astro.props;
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
<section class="not-prose my-8">
|
|
6
|
-
{title && <h2 class="text-2xl font-bold text-
|
|
6
|
+
{title && <h2 class="text-2xl font-bold text-[rgb(var(--ec-page-text))] mb-6">{title}</h2>}
|
|
7
7
|
<div class={`grid grid-cols-1 md:grid-cols-${columns} gap-6 w-full not-prose`}>
|
|
8
8
|
<slot />
|
|
9
9
|
</div>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ChevronUpIcon, ChevronDownIcon, ClipboardDocumentIcon } from '@heroicons/react/24/outline';
|
|
1
|
+
import { ChevronUpIcon, ChevronDownIcon, ClipboardDocumentIcon, CheckIcon } from '@heroicons/react/24/outline';
|
|
2
|
+
import { CommandLineIcon, LockClosedIcon } from '@heroicons/react/24/solid';
|
|
2
3
|
import type { SchemaItem } from './types';
|
|
3
4
|
|
|
4
5
|
interface ApiAccessSectionProps {
|
|
@@ -27,109 +28,113 @@ export default function ApiAccessSection({
|
|
|
27
28
|
apiPath = `/api/schemas/${message.collection}/${message.data.id}/${message.data.version}`;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
const
|
|
31
|
+
const fullUrl = typeof window !== 'undefined' ? `${window.location.origin}${apiPath}` : apiPath;
|
|
32
|
+
const curlCommand = `curl ${fullUrl}`;
|
|
33
|
+
const isCopied = copiedId === `${message.data.id}-api`;
|
|
31
34
|
|
|
32
35
|
return (
|
|
33
|
-
<div className="flex-shrink-0 border-b border-gray-
|
|
36
|
+
<div className="flex-shrink-0 border-b border-gray-100">
|
|
34
37
|
<button
|
|
35
38
|
onClick={onToggle}
|
|
36
|
-
className="w-full flex items-center justify-between px-4 py-
|
|
39
|
+
className="w-full flex items-center justify-between px-4 py-2 text-left hover:bg-gray-50/50 transition-colors"
|
|
37
40
|
>
|
|
38
41
|
<div className="flex items-center gap-2">
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
strokeLinecap="round"
|
|
48
|
-
strokeLinejoin="round"
|
|
49
|
-
strokeWidth={2}
|
|
50
|
-
d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
|
|
51
|
-
/>
|
|
52
|
-
</svg>
|
|
53
|
-
<span className="text-xs font-semibold text-gray-900">API Access</span>
|
|
54
|
-
<span className="inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800">
|
|
55
|
-
Scale
|
|
56
|
-
</span>
|
|
42
|
+
<CommandLineIcon className="h-3.5 w-3.5 text-gray-700" />
|
|
43
|
+
<span className="text-xs font-medium text-gray-700">API</span>
|
|
44
|
+
{!apiAccessEnabled && (
|
|
45
|
+
<span className="inline-flex items-center gap-1 rounded bg-[rgb(var(--ec-accent-subtle))] px-1.5 py-0.5 text-[10px] font-medium text-[rgb(var(--ec-accent-text))] border border-[rgb(var(--ec-accent)/0.2)]">
|
|
46
|
+
<LockClosedIcon className="h-2.5 w-2.5" />
|
|
47
|
+
Scale
|
|
48
|
+
</span>
|
|
49
|
+
)}
|
|
57
50
|
</div>
|
|
58
|
-
{isExpanded ?
|
|
51
|
+
{isExpanded ? (
|
|
52
|
+
<ChevronUpIcon className="h-3.5 w-3.5 text-gray-400" />
|
|
53
|
+
) : (
|
|
54
|
+
<ChevronDownIcon className="h-3.5 w-3.5 text-gray-400" />
|
|
55
|
+
)}
|
|
59
56
|
</button>
|
|
60
57
|
|
|
61
58
|
{isExpanded && (
|
|
62
|
-
<div className="px-4 pb-
|
|
59
|
+
<div className="px-4 pb-3">
|
|
63
60
|
{apiAccessEnabled ? (
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
<div className="bg-gray-900 rounded-md
|
|
67
|
-
<
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
</
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
61
|
+
<div className="space-y-2">
|
|
62
|
+
{/* Endpoint */}
|
|
63
|
+
<div className="flex items-center gap-2 bg-gray-900 rounded-md px-3 py-2">
|
|
64
|
+
<span className="text-[10px] font-semibold text-emerald-400 uppercase tracking-wide">GET</span>
|
|
65
|
+
<code className="flex-1 text-[11px] text-gray-300 font-mono truncate">{apiPath}</code>
|
|
66
|
+
<button
|
|
67
|
+
onClick={() => onCopy(fullUrl, `${message.data.id}-api`)}
|
|
68
|
+
className={`flex-shrink-0 p-1 rounded transition-colors ${
|
|
69
|
+
isCopied ? 'text-emerald-400' : 'text-gray-500 hover:text-gray-300'
|
|
70
|
+
}`}
|
|
71
|
+
title="Copy URL"
|
|
72
|
+
>
|
|
73
|
+
{isCopied ? <CheckIcon className="h-3.5 w-3.5" /> : <ClipboardDocumentIcon className="h-3.5 w-3.5" />}
|
|
74
|
+
</button>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
{/* Quick copy buttons */}
|
|
78
|
+
<div className="flex items-center gap-2">
|
|
79
|
+
<button
|
|
80
|
+
onClick={() => onCopy(curlCommand, `${message.data.id}-curl`)}
|
|
81
|
+
className={`inline-flex items-center gap-1.5 px-2 py-1 text-[10px] font-medium rounded border transition-colors ${
|
|
82
|
+
copiedId === `${message.data.id}-curl`
|
|
83
|
+
? 'bg-emerald-50 text-emerald-600 border-emerald-200'
|
|
84
|
+
: 'text-gray-500 border-gray-200 hover:bg-gray-50 hover:text-gray-700'
|
|
85
|
+
}`}
|
|
86
|
+
>
|
|
87
|
+
{copiedId === `${message.data.id}-curl` ? (
|
|
88
|
+
<>
|
|
89
|
+
<CheckIcon className="h-3 w-3" />
|
|
90
|
+
Copied
|
|
91
|
+
</>
|
|
92
|
+
) : (
|
|
93
|
+
<>
|
|
94
|
+
<ClipboardDocumentIcon className="h-3 w-3" />
|
|
95
|
+
Copy cURL
|
|
96
|
+
</>
|
|
97
|
+
)}
|
|
98
|
+
</button>
|
|
99
|
+
<button
|
|
100
|
+
onClick={() => onCopy(fullUrl, `${message.data.id}-url`)}
|
|
101
|
+
className={`inline-flex items-center gap-1.5 px-2 py-1 text-[10px] font-medium rounded border transition-colors ${
|
|
102
|
+
copiedId === `${message.data.id}-url`
|
|
103
|
+
? 'bg-emerald-50 text-emerald-600 border-emerald-200'
|
|
104
|
+
: 'text-gray-500 border-gray-200 hover:bg-gray-50 hover:text-gray-700'
|
|
105
|
+
}`}
|
|
106
|
+
>
|
|
107
|
+
{copiedId === `${message.data.id}-url` ? (
|
|
108
|
+
<>
|
|
109
|
+
<CheckIcon className="h-3 w-3" />
|
|
110
|
+
Copied
|
|
111
|
+
</>
|
|
112
|
+
) : (
|
|
113
|
+
<>
|
|
114
|
+
<ClipboardDocumentIcon className="h-3 w-3" />
|
|
115
|
+
Copy URL
|
|
116
|
+
</>
|
|
117
|
+
)}
|
|
118
|
+
</button>
|
|
83
119
|
</div>
|
|
84
|
-
|
|
120
|
+
</div>
|
|
85
121
|
) : (
|
|
86
|
-
<div className="bg-
|
|
87
|
-
<div className="flex
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
91
|
-
className="h-5 w-5 text-purple-600"
|
|
92
|
-
fill="none"
|
|
93
|
-
viewBox="0 0 24 24"
|
|
94
|
-
stroke="currentColor"
|
|
95
|
-
>
|
|
96
|
-
<path
|
|
97
|
-
strokeLinecap="round"
|
|
98
|
-
strokeLinejoin="round"
|
|
99
|
-
strokeWidth={2}
|
|
100
|
-
d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
|
|
101
|
-
/>
|
|
102
|
-
</svg>
|
|
103
|
-
</div>
|
|
104
|
-
<div className="flex-1">
|
|
105
|
-
<h4 className="text-sm font-semibold text-gray-900 mb-1">Upgrade to Scale</h4>
|
|
106
|
-
<p className="text-xs text-gray-600 mb-3">
|
|
107
|
-
Access your schemas programmatically via API. Perfect for CI/CD pipelines, automation, and integrations.
|
|
108
|
-
</p>
|
|
109
|
-
<a
|
|
110
|
-
href="https://eventcatalog.cloud"
|
|
111
|
-
target="_blank"
|
|
112
|
-
rel="noopener noreferrer"
|
|
113
|
-
className="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-white bg-purple-600 rounded-md hover:bg-purple-700 transition-colors"
|
|
114
|
-
>
|
|
115
|
-
Start 14-day free trial
|
|
116
|
-
<svg
|
|
117
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
118
|
-
className="h-3.5 w-3.5"
|
|
119
|
-
fill="none"
|
|
120
|
-
viewBox="0 0 24 24"
|
|
121
|
-
stroke="currentColor"
|
|
122
|
-
>
|
|
123
|
-
<path
|
|
124
|
-
strokeLinecap="round"
|
|
125
|
-
strokeLinejoin="round"
|
|
126
|
-
strokeWidth={2}
|
|
127
|
-
d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
|
|
128
|
-
/>
|
|
129
|
-
</svg>
|
|
130
|
-
</a>
|
|
131
|
-
</div>
|
|
122
|
+
<div className="flex items-center justify-between gap-3 bg-[rgb(var(--ec-accent-subtle))] border border-[rgb(var(--ec-accent)/0.2)] rounded-md px-3 py-2.5">
|
|
123
|
+
<div className="flex-1 min-w-0">
|
|
124
|
+
<p className="text-xs font-medium text-gray-700">Access schemas via API</p>
|
|
125
|
+
<p className="text-[10px] text-gray-500 mt-0.5">CI/CD, automation & integrations</p>
|
|
132
126
|
</div>
|
|
127
|
+
<a
|
|
128
|
+
href="https://eventcatalog.cloud"
|
|
129
|
+
target="_blank"
|
|
130
|
+
rel="noopener noreferrer"
|
|
131
|
+
className="flex-shrink-0 inline-flex items-center gap-1 px-2.5 py-1.5 text-[11px] font-medium text-white bg-[rgb(var(--ec-accent))] rounded-md hover:bg-[rgb(var(--ec-accent-hover))] transition-colors"
|
|
132
|
+
>
|
|
133
|
+
Try Scale
|
|
134
|
+
<svg xmlns="http://www.w3.org/2000/svg" className="h-3 w-3" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
135
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
|
136
|
+
</svg>
|
|
137
|
+
</a>
|
|
133
138
|
</div>
|
|
134
139
|
)}
|
|
135
140
|
</div>
|