@eventcatalog/core 5.0.0-beta.9 → 5.0.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/LICENSE +13 -12
- package/README.md +5 -5
- package/dist/analytics/analytics.cjs +1 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +91 -44
- package/dist/analytics/log-build.d.cts +2 -2
- package/dist/analytics/log-build.d.ts +2 -2
- package/dist/analytics/log-build.js +6 -5
- package/dist/analytics/studio-usage.cjs +90 -0
- package/dist/analytics/studio-usage.d.cts +5 -0
- package/dist/analytics/studio-usage.d.ts +5 -0
- package/dist/analytics/studio-usage.js +10 -0
- package/dist/catalog-runtime.cjs +1 -1
- package/dist/{chunk-RFIXKATC.js → chunk-4G7FSRPN.js} +35 -42
- package/dist/{chunk-AWOO63ME.js → chunk-AD7CL772.js} +11 -4
- package/dist/chunk-CA6WCQ2T.js +54 -0
- package/dist/{chunk-GAHKCOQM.js → chunk-JZN4RSMF.js} +1 -1
- package/dist/{chunk-JQMYHZWI.js → chunk-NEAVAFSJ.js} +16 -8
- package/dist/{chunk-4CFZUHGG.js → chunk-NIVST4WY.js} +1 -1
- package/dist/{chunk-ENAG6UH7.js → chunk-NKNOXQ62.js} +1 -6
- package/dist/{chunk-ZEY2XUJN.js → chunk-OX6TSVHY.js} +6 -6
- package/dist/{chunk-36RYTYT5.js → chunk-PD7KTSYN.js} +1 -1
- package/dist/{chunk-EUNQJO3J.js → chunk-RE7UTPWH.js} +1 -1
- package/dist/chunk-S5GWAUG5.js +29 -0
- package/dist/{chunk-TZVDMWQX.js → chunk-YQGRMDRB.js} +4 -2
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/docs/api/02-config.md +57 -7
- package/dist/docs/development/00-why-eventcatalog.md +11 -11
- package/dist/docs/development/01-fundamentals.md +20 -13
- package/dist/docs/development/01-getting-started/configuration-overview.md +2 -2
- package/dist/docs/development/01-getting-started/installation.md +9 -1
- package/dist/docs/development/_getting-started.mdx +1 -1
- package/dist/docs/development/ask-your-architecture/01-intro.md +5 -5
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/01-what-is-eventcatalog-assistant.md +0 -4
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/02-configuration.md +15 -3
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/03-bring-your-own-tools.md +0 -3
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/_category_.json +1 -1
- package/dist/docs/development/ask-your-architecture/02-llms.txt.md +1 -1
- package/dist/docs/development/ask-your-architecture/{05-skills/01-introduction.md → 03-install-skills.md} +57 -7
- package/dist/docs/development/ask-your-architecture/03-mcp-server/_category_.json +1 -1
- package/dist/docs/development/ask-your-architecture/03-mcp-server/getting-started.md +86 -33
- package/dist/docs/development/ask-your-architecture/03-mcp-server/introduction.md +14 -4
- package/dist/docs/development/ask-your-architecture/03-schemas.txt.md +1 -1
- package/dist/docs/development/ask-your-architecture/04-agents/_category_.json +1 -1
- package/dist/docs/development/authentication/01-introduction.md +2 -23
- package/dist/docs/development/authentication/02-enabling-authentication.md +0 -20
- package/dist/docs/development/authentication/07-rbac-middleware.md +0 -2
- package/dist/docs/development/authentication/providers/03-setting-up-github.md +0 -2
- package/dist/docs/development/authentication/providers/03a-setting-up-google.md +0 -2
- package/dist/docs/development/authentication/providers/04-setting-up-azure-ad.md +0 -2
- package/dist/docs/development/authentication/providers/05-setting-up-okta.md +0 -3
- package/dist/docs/development/authentication/providers/06-setting-up-auth0.md +0 -2
- package/dist/docs/development/bring-your-own-documentation/01-introduction.md +0 -4
- package/dist/docs/development/bring-your-own-documentation/custom-pages/01-introduction.md +0 -3
- package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +0 -17
- package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +0 -4
- package/dist/docs/development/bring-your-own-documentation/custom-pages/04-owners.md +0 -2
- package/dist/docs/development/bring-your-own-documentation/resource-docs/01-introduction.md +1 -3
- package/dist/docs/development/bring-your-own-documentation/resource-docs/02-adding-resource-docs.md +1 -4
- package/dist/docs/development/bring-your-own-documentation/resource-docs/03-categories.md +0 -2
- package/dist/docs/development/bring-your-own-documentation/resource-docs/04-versioning.md +1 -3
- package/dist/docs/development/components/components/11-flow.md +17 -0
- package/dist/docs/development/components/components/15-nodegraph.md +43 -10
- package/dist/docs/development/components/components/18-remote-schema.md +1 -4
- package/dist/docs/development/components/custom-components/07-reference.md +14 -0
- package/dist/docs/development/customization/02-themes.md +0 -5
- package/dist/docs/development/customization/03-search.md +1 -1
- package/dist/docs/development/customization/05-custom-pages-and-api-routes/01-introduction.md +0 -2
- package/dist/docs/development/customization/05-custom-pages-and-api-routes/04-reference.md +7 -1
- package/dist/docs/development/customization/05-resource-sidebar.md +1 -1
- package/dist/docs/development/customization/09-embed-eventcatalog.md +20 -25
- package/dist/docs/development/deployment/hosting-options.md +7 -2
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +16 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +31 -1
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +1 -1
- package/dist/docs/development/governance/architecture-change-detection/01-introduction.md +0 -10
- package/dist/docs/development/governance/architecture-change-detection/06-pipeline-gates.md +0 -4
- package/dist/docs/development/guides/97-architecture-graph.md +1 -1
- package/dist/docs/development/guides/99-adding-analytics.md +0 -7
- package/dist/docs/development/guides/domains/03-model-subdomains.md +2 -2
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/01-add-systems-to-domains.md +3 -1
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/02-add-services-to-domains.md +5 -1
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/03-add-messages-to-domains.md +2 -2
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/05-add-entities-to-domains.md +1 -1
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/06-domain-resources-page.md +40 -0
- package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-diagram.md +89 -0
- package/dist/docs/development/guides/domains/06-visualize-domains/_category_.json +1 -2
- package/dist/docs/development/guides/domains/09-reference.md +4 -4
- package/dist/docs/development/guides/owners/automated-teams-and-users/create-your-own-connector.md +0 -2
- package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-github.md +0 -3
- package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-microsoft-entra.md +0 -2
- package/dist/docs/development/guides/resources/adrs/03-linking-resources.md +8 -0
- package/dist/docs/development/guides/resources/adrs/06-reference.md +4 -4
- package/dist/docs/development/guides/resources/agents/11-reference.md +1 -1
- package/dist/docs/development/guides/resources/data/04-reference.md +1 -1
- package/dist/docs/development/guides/resources/data-products/07-reference.md +1 -1
- package/dist/docs/development/guides/resources/entities/05-entity-maps.md +1 -1
- package/dist/docs/development/guides/resources/entities/06-reference.md +2 -2
- package/dist/docs/development/guides/resources/flows/01-introduction.md +11 -1
- package/dist/docs/development/guides/resources/flows/03-model-flow-steps.md +65 -6
- package/dist/docs/development/guides/resources/flows/05-explore-flows.md +112 -0
- package/dist/docs/development/guides/resources/flows/06-reference.md +25 -4
- package/dist/docs/development/guides/resources/messages/01-what-are-messages.md +19 -0
- package/dist/docs/development/guides/resources/messages/04-message-channels/01-introduction.md +16 -0
- package/dist/docs/development/guides/resources/messages/04-message-channels/05-reference.md +2 -1
- package/dist/docs/development/guides/resources/messages/10-reference.md +6 -3
- package/dist/docs/development/guides/resources/schemas/04-explore-schemas/01-schema-explorer.md +2 -2
- package/dist/docs/development/guides/resources/schemas/04-explore-schemas/02-fields-explorer.md +0 -9
- package/dist/docs/development/guides/resources/schemas/05-schema-api.md +0 -3
- package/dist/docs/development/guides/resources/schemas/06-schema-mcp.md +11 -3
- package/dist/docs/development/guides/resources/services/04-add-resources-to-services/03-add-entities-to-services.md +1 -1
- package/dist/docs/development/guides/resources/services/05-resources-page.md +50 -0
- package/dist/docs/development/guides/resources/services/08-reference.md +2 -1
- package/dist/docs/development/guides/systems/01-introduction.md +1 -1
- package/dist/docs/development/guides/systems/02-create-system.md +2 -2
- package/dist/docs/development/guides/systems/03-add-resources-to-systems.md +35 -9
- package/dist/docs/development/guides/systems/04-model-relationships-and-actors.md +5 -3
- package/dist/docs/development/guides/systems/05-system-context-maps.md +39 -22
- package/dist/docs/development/guides/systems/06-reference.md +4 -4
- package/dist/docs/development/license/01-license-file.md +151 -0
- package/dist/docs/development/license/_category_.json +12 -0
- package/dist/docs/development/license-keys/_category_.json +3 -3
- package/dist/docs/development/license-keys/integrations.md +7 -37
- package/dist/docs/development/license-keys/license-validation.md +4 -0
- package/dist/docs/development/license-keys/overview.md +5 -1
- package/dist/docs/development/license-keys/plans.md +4 -2
- package/dist/docs/development/studio/01-introduction.md +60 -0
- package/dist/docs/development/studio/02-create-a-canvas.md +103 -0
- package/dist/docs/development/studio/03-set-up-persistent-storage.md +59 -0
- package/dist/docs/development/studio/04-collaborate-on-a-canvas.md +78 -0
- package/dist/docs/development/studio/05-connect-your-agent.md +102 -0
- package/dist/docs/development/studio/06-run-studio-in-production.md +54 -0
- package/dist/docs/development/studio/07-reference.md +294 -0
- package/dist/docs/development/studio/_category_.json +12 -0
- package/dist/docs/development/upgrading/v5.md +345 -0
- package/dist/docs/federation/00-overview.md +2 -8
- package/dist/docs/federation/01-first-federation.md +6 -18
- package/dist/docs/federation/explanation/how-it-works.md +0 -4
- package/dist/docs/federation/explanation/lockfile-and-cache.md +0 -4
- package/dist/docs/federation/explanation/mvp-status-and-feedback.md +0 -4
- package/dist/docs/federation/explanation/ownership-and-references.md +0 -4
- package/dist/docs/federation/how-to/configure-github-sources.md +6 -5
- package/dist/docs/federation/how-to/configure-validation-rules.md +0 -4
- package/dist/docs/federation/how-to/run-in-ci.md +2 -9
- package/dist/docs/federation/how-to/share-assets-and-components.md +0 -4
- package/dist/docs/federation/how-to/use-local-sources.md +0 -4
- package/dist/docs/federation/legacy-federation/00-introduction.md +4 -22
- package/dist/docs/federation/legacy-federation/01-installation.md +7 -58
- package/dist/docs/federation/legacy-federation/02-plugin-configuration.md +3 -21
- package/dist/docs/federation/legacy-federation/03-examples.md +3 -5
- package/dist/docs/federation/legacy-federation/04-configuration.md +3 -8
- package/dist/docs/federation/legacy-federation/05-setup-team-catalog.md +3 -6
- package/dist/docs/federation/reference/cli.md +2 -8
- package/dist/docs/federation/reference/configuration.md +0 -4
- package/dist/docs/federation/reference/diagnostic-rules.md +0 -5
- package/dist/docs/federation/reference/generated-output.md +0 -4
- package/dist/docs/federation/reference/supported-content.md +0 -4
- package/dist/docs/federation/reference/troubleshooting.md +0 -14
- package/dist/docs/plugins/02-generators.md +1 -1
- package/dist/docs/plugins/amazon-apigateway/00-intro.md +3 -28
- package/dist/docs/plugins/amazon-apigateway/01-installation.md +4 -56
- package/dist/docs/plugins/amazon-apigateway/02-plugin-configuration.md +1 -6
- package/dist/docs/plugins/apicurio/00-intro.md +2 -31
- package/dist/docs/plugins/apicurio/01-installation.md +2 -26
- package/dist/docs/plugins/apicurio/02-plugin-configuration.md +5 -13
- package/dist/docs/plugins/apicurio/03-features.md +1 -3
- package/dist/docs/plugins/asyncapi/00-intro.md +2 -28
- package/dist/docs/plugins/asyncapi/01-installation.md +3 -54
- package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +2 -1
- package/dist/docs/plugins/aws-glue-registry/00-intro.md +4 -32
- package/dist/docs/plugins/aws-glue-registry/00a-installation.md +3 -53
- package/dist/docs/plugins/azure-schema-registry/00-intro.md +4 -32
- package/dist/docs/plugins/azure-schema-registry/01-installation.md +6 -33
- package/dist/docs/plugins/azure-schema-registry/02-plugin-configuration.md +1 -14
- package/dist/docs/plugins/azure-schema-registry/04-examples.md +0 -2
- package/dist/docs/plugins/backstage/00-overview.md +1 -7
- package/dist/docs/plugins/backstage/01-get-started.md +6 -15
- package/dist/docs/plugins/backstage/06-configuration.md +2 -8
- package/dist/docs/plugins/confluent-schema-registry/00-intro.md +2 -29
- package/dist/docs/plugins/confluent-schema-registry/01-installation.md +2 -26
- package/dist/docs/plugins/eventbridge/00-intro.md +0 -4
- package/dist/docs/plugins/eventbridge/00a-installation.md +1 -87
- package/dist/docs/plugins/eventbridge/03-api.md +2 -20
- package/dist/docs/plugins/github/00-intro.md +0 -31
- package/dist/docs/plugins/github/01-installation.md +2 -34
- package/dist/docs/plugins/graphql/00-intro.md +0 -30
- package/dist/docs/plugins/graphql/01-installation.md +1 -53
- package/dist/docs/plugins/graphql/02-plugin-configuration.md +0 -1
- package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
- package/dist/docs/plugins/openapi/00-intro.md +0 -30
- package/dist/docs/plugins/openapi/01-installation.md +1 -57
- package/dist/docs/plugins/openapi/02-plugin-configuration.md +0 -5
- package/dist/docs/plugins/openapi/03-features.md +0 -4
- package/dist/eventcatalog-config-file-utils.cjs +34 -41
- package/dist/eventcatalog-config-file-utils.d.cts +56 -58
- package/dist/eventcatalog-config-file-utils.d.ts +56 -58
- package/dist/eventcatalog-config-file-utils.js +1 -1
- package/dist/eventcatalog.cjs +340 -249
- package/dist/eventcatalog.config.d.cts +18 -15
- package/dist/eventcatalog.config.d.ts +18 -15
- package/dist/eventcatalog.js +51 -33
- package/dist/features.cjs +36 -49
- package/dist/features.d.cts +1 -3
- package/dist/features.d.ts +1 -3
- package/dist/features.js +4 -6
- package/dist/federation/federate.cjs +37 -44
- package/dist/federation/federate.js +5 -5
- package/dist/federation/source-provider.js +2 -2
- package/dist/generate.cjs +37 -42
- package/dist/generate.js +4 -4
- package/dist/resolve-catalog-dependencies.cjs +34 -41
- package/dist/resolve-catalog-dependencies.js +2 -2
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio-fonts.css.mjs +3 -0
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.css.mjs +3 -0
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.mjs +3 -0
- package/dist/runtime-dependencies/htmlparser2.mjs +3 -0
- package/dist/runtime-dependencies/manifest.json +5 -1
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__cjs__create-element.js.mjs +3 -0
- package/dist/utils/child-process-signals.cjs +53 -0
- package/dist/utils/child-process-signals.d.cts +19 -0
- package/dist/utils/child-process-signals.d.ts +19 -0
- package/dist/utils/child-process-signals.js +6 -0
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/dist/utils/license-status.cjs +11 -4
- package/dist/utils/license-status.d.cts +3 -2
- package/dist/utils/license-status.d.ts +3 -2
- package/dist/utils/license-status.js +1 -1
- package/eventcatalog/astro.config.mjs +21 -1
- package/eventcatalog/integrations/config-loader.mjs +56 -58
- package/eventcatalog/integrations/skip-startup-reload.mjs +31 -0
- package/eventcatalog/integrations/stable-dependency-order.mjs +29 -0
- package/eventcatalog/integrations/storage.mjs +20 -0
- package/eventcatalog/integrations/studio-server.mjs +4 -1
- package/eventcatalog/src/components/CatalogGraph/CatalogForceGraph.tsx +39 -0
- package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +2 -0
- package/eventcatalog/src/components/Homepage/CatalogDashboard.astro +342 -0
- package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +60 -4
- package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +5 -1
- package/eventcatalog/src/components/NavigationProgress.astro +7 -0
- package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/ExamplesViewer.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/SchemaCodeModal.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -0
- package/eventcatalog/src/components/Search/SearchDataLoader.astro +16 -28
- package/eventcatalog/src/components/Search/SearchModal.tsx +2 -10
- package/eventcatalog/src/components/Search/search-utils.ts +26 -0
- package/eventcatalog/src/components/Seo.astro +5 -1
- package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +53 -48
- package/eventcatalog/src/components/Settings/GeneralSettingsForm.tsx +183 -178
- package/eventcatalog/src/components/Settings/LicenseSettings.tsx +140 -31
- package/eventcatalog/src/components/Settings/LlmAccessSettingsForm.tsx +40 -35
- package/eventcatalog/src/components/Settings/LogoUpload.tsx +1 -1
- package/eventcatalog/src/components/Settings/McpSettingsForm.tsx +9 -8
- package/eventcatalog/src/components/Settings/Row.tsx +7 -4
- package/eventcatalog/src/components/Settings/SettingsShared.tsx +3 -3
- package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +37 -76
- package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +2 -0
- package/eventcatalog/src/components/SideNav/NestedSideBar/utils.ts +122 -1
- package/eventcatalog/src/components/SideNav/SideNav.astro +9 -1
- package/eventcatalog/src/components/TrialBadge.astro +20 -9
- package/eventcatalog/src/content.config.ts +19 -2
- package/eventcatalog/src/features/auth/error.astro +4 -2
- package/eventcatalog/src/features/auth/login.astro +2 -1
- package/eventcatalog/src/features/auth/middleware/middleware-auth.ts +21 -1
- package/eventcatalog/src/features/auth/unauthorized.astro +1 -1
- package/eventcatalog/src/features/fields/pages/fields.astro +1 -1
- package/eventcatalog/src/features/integrations/eventcatalog-features.ts +13 -7
- package/eventcatalog/src/features/mcp/apps/architecture-diagram/node-chat.tsx +6 -45
- package/eventcatalog/src/features/mcp/apps/canvas/shared.ts +3 -3
- package/eventcatalog/src/features/mcp/apps/canvas/styles.css +3 -1
- package/eventcatalog/src/features/mcp/apps/canvas/view.tsx +7 -5
- package/eventcatalog/src/features/mcp/apps/generated/canvas.html +123 -98
- package/eventcatalog/src/features/mcp/apps/generated/viewer.html +118 -101
- package/eventcatalog/src/features/mcp/mcp-server.ts +20 -4
- package/eventcatalog/src/features/server/start.ts +25 -0
- package/eventcatalog/src/features/storage/database.ts +88 -0
- package/eventcatalog/src/features/storage/migrations.ts +85 -0
- package/eventcatalog/src/features/storage/sql/database.sql +5 -0
- package/eventcatalog/src/features/storage/sql/migrations/0001-studio-canvases.sql +12 -0
- package/eventcatalog/src/features/storage/sql/migrations.sql +15 -0
- package/eventcatalog/src/features/storage/sql.ts +28 -0
- package/eventcatalog/src/features/studio/agent-choreography.ts +13 -10
- package/eventcatalog/src/features/studio/agents.ts +28 -0
- package/eventcatalog/src/features/studio/api/canvases-api.ts +219 -0
- package/eventcatalog/src/features/studio/api/canvases.ts +25 -0
- package/eventcatalog/src/features/studio/api/client.ts +40 -0
- package/eventcatalog/src/features/studio/canvas-actions.ts +160 -34
- package/eventcatalog/src/features/studio/canvas-preview.ts +1 -2
- package/eventcatalog/src/features/studio/catalog.ts +16 -14
- package/eventcatalog/src/features/studio/components/CanvasHeader.tsx +274 -105
- package/eventcatalog/src/features/studio/components/CanvasStatusMenu.tsx +15 -14
- package/eventcatalog/src/features/studio/components/ConnectAgentDialog.tsx +272 -119
- package/eventcatalog/src/features/studio/components/ConnectionsChooser.tsx +1 -2
- package/eventcatalog/src/features/studio/components/DeleteCanvasDialog.tsx +65 -0
- package/eventcatalog/src/features/studio/components/Dialog.tsx +60 -0
- package/eventcatalog/src/features/studio/components/JoinForm.tsx +101 -26
- package/eventcatalog/src/features/studio/components/LeftPanel.tsx +122 -230
- package/eventcatalog/src/features/studio/components/NodeDetails.tsx +183 -0
- package/eventcatalog/src/features/studio/components/OpenInStudioDialog.tsx +79 -0
- package/eventcatalog/src/features/studio/components/Presence.tsx +52 -45
- package/eventcatalog/src/features/studio/components/ShareDialog.tsx +277 -141
- package/eventcatalog/src/features/studio/components/ShortcutsDialog.tsx +41 -0
- package/eventcatalog/src/features/studio/components/StudioDesigner.tsx +1314 -385
- package/eventcatalog/src/features/studio/components/StudioNotice.astro +24 -0
- package/eventcatalog/src/features/studio/document-name.ts +7 -0
- package/eventcatalog/src/features/studio/from-visualiser.ts +138 -0
- package/eventcatalog/src/features/studio/hooks/presence-sender.ts +19 -2
- package/eventcatalog/src/features/studio/hooks/use-canvas-webmcp.ts +9 -3
- package/eventcatalog/src/features/studio/hooks/use-comments.ts +2 -2
- package/eventcatalog/src/features/studio/hooks/use-follow-camera.ts +8 -3
- package/eventcatalog/src/features/studio/hooks/use-studio-flow.ts +244 -32
- package/eventcatalog/src/features/studio/identity.ts +25 -1
- package/eventcatalog/src/features/studio/limits.ts +2 -0
- package/eventcatalog/src/features/studio/pages/[id].astro +42 -16
- package/eventcatalog/src/features/studio/pages/index.astro +596 -373
- package/eventcatalog/src/features/studio/pages/webmcp-relay.ts +12 -15
- package/eventcatalog/src/features/studio/server/canvas-mcp.ts +8 -23
- package/eventcatalog/src/features/studio/server/runtime.ts +150 -46
- package/eventcatalog/src/features/studio/server/sql/storage.sql +18 -0
- package/eventcatalog/src/features/studio/server/storage.ts +53 -73
- package/eventcatalog/src/features/studio/webmcp-relay/LICENSE +21 -0
- package/eventcatalog/src/features/studio/webmcp-relay/README.md +5 -0
- package/eventcatalog/src/features/studio/webmcp-relay/embed.js +2 -0
- package/eventcatalog/src/features/studio/webmcp-relay/widget.html +10 -0
- package/eventcatalog/src/features/studio/webmcp-relay/widget.js +1 -0
- package/eventcatalog/src/features/tools/catalog-tools.ts +3 -1
- package/eventcatalog/src/layouts/BaseLayout.astro +4 -4
- package/eventcatalog/src/layouts/SettingsLayout.astro +2 -2
- package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +3 -2
- package/eventcatalog/src/pages/_index.astro +5 -342
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.spec.ts +2 -3
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +3 -1
- package/eventcatalog/src/pages/diagrams/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/diagrams/[id]/[version]/embed.astro +1 -0
- package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/directory/[type]/_index.data.ts +5 -7
- package/eventcatalog/src/pages/directory/[type]/index.astro +3 -1
- package/eventcatalog/src/pages/discover/[type]/_index.data.ts +5 -7
- package/eventcatalog/src/pages/discover/[type]/index.astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/[...filename].astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/_[...filename].data.ts +0 -4
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.spec.ts +2 -3
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +2 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +1 -0
- package/eventcatalog/src/pages/docs/custom/[...path]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/services/[id]/[docType]/[docId]/index.astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/[version]/resources/index.astro +1 -0
- package/eventcatalog/src/pages/docs/services/[id]/asyncapi/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/changelog/index.astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/graphql/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/spec/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/teams/[id]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/users/[id]/index.astro +1 -0
- package/eventcatalog/src/pages/index.astro +4 -2
- package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +9 -1
- package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +0 -7
- package/eventcatalog/src/pages/schemas/explorer/index.astro +4 -2
- package/eventcatalog/src/pages/settings/license.astro +9 -1
- package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/_index.data.ts +38 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +18 -41
- package/eventcatalog/src/pages/visualiser/designs/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -1
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/types/react-syntax-highlighter.d.ts +10 -0
- package/eventcatalog/src/utils/collections/flows.ts +20 -7
- package/eventcatalog/src/utils/collections/resource-owners.ts +8 -2
- package/eventcatalog/src/utils/collections/resources.ts +2 -0
- package/eventcatalog/src/utils/collections/util.ts +8 -4
- package/eventcatalog/src/utils/git.ts +11 -0
- package/eventcatalog/src/utils/homepage-dashboard.ts +143 -0
- package/eventcatalog/src/utils/license.ts +1 -1
- package/eventcatalog/src/utils/link-validation.ts +25 -19
- package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +3 -1
- package/eventcatalog/src/utils/node-graphs/domain-levels-node-graph.ts +3 -3
- package/eventcatalog/src/utils/node-graphs/field-node-graph.ts +4 -2
- package/eventcatalog/src/utils/node-graphs/layout-node-graph.ts +20 -1
- package/eventcatalog/src/utils/node-graphs/node-resource.ts +67 -0
- package/eventcatalog/src/utils/node-graphs/systems-node-graph.ts +1 -1
- package/eventcatalog/src/utils/page-loaders/hybrid-page.ts +4 -15
- package/eventcatalog/src/utils/page-title.ts +15 -0
- package/eventcatalog/src/utils/syntax-highlighter-renderer.ts +64 -0
- package/eventcatalog/src/utils/trial.ts +13 -0
- package/package.json +11 -11
- package/dist/docs/development/ask-your-architecture/05-skills/02-installation.md +0 -60
- package/dist/docs/development/ask-your-architecture/05-skills/_category_.json +0 -11
- package/dist/docs/development/ask-your-architecture/06-slack-integration/01-introduction.md +0 -63
- package/dist/docs/development/ask-your-architecture/06-slack-integration/02-slack-app-setup.md +0 -154
- package/dist/docs/development/ask-your-architecture/06-slack-integration/03-installation.md +0 -169
- package/dist/docs/development/ask-your-architecture/06-slack-integration/04-deployment.md +0 -236
- package/dist/docs/development/ask-your-architecture/06-slack-integration/05-usage.md +0 -140
- package/dist/docs/development/ask-your-architecture/06-slack-integration/06-troubleshooting.md +0 -268
- package/dist/docs/development/ask-your-architecture/06-slack-integration/_category_.json +0 -13
- package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-integration-map.md +0 -40
- package/dist/runtime-dependencies/@mcp-b__webmcp-local-relay.mjs +0 -3
- package/eventcatalog/src/features/studio/canvas-doc.ts +0 -409
- package/eventcatalog/src/features/studio/clipboard.ts +0 -97
- package/eventcatalog/src/features/studio/components/CanvasControls.tsx +0 -154
- package/eventcatalog/src/features/studio/components/Comments.tsx +0 -770
- package/eventcatalog/src/features/studio/components/ContainerChooser.tsx +0 -145
- package/eventcatalog/src/features/studio/components/DragGhost.tsx +0 -115
- package/eventcatalog/src/features/studio/components/Picture.tsx +0 -21
- package/eventcatalog/src/features/studio/components/PropertiesPanel.tsx +0 -212
- package/eventcatalog/src/features/studio/components/canvas-nodes.tsx +0 -255
- package/eventcatalog/src/features/studio/components/icons.ts +0 -53
- package/eventcatalog/src/features/studio/components/status.ts +0 -51
- package/eventcatalog/src/features/studio/edges.ts +0 -56
- package/eventcatalog/src/features/studio/flow-state.ts +0 -92
- package/eventcatalog/src/features/studio/grouping.ts +0 -226
- package/eventcatalog/src/features/studio/layout.ts +0 -42
- package/eventcatalog/src/features/studio/levels.ts +0 -282
- package/eventcatalog/src/features/studio/node-types.ts +0 -205
- package/eventcatalog/src/features/studio/pages/new.astro +0 -24
- package/eventcatalog/src/features/studio/pages/wake.ts +0 -15
- package/eventcatalog/src/features/studio/placement.ts +0 -197
- package/eventcatalog/src/features/studio/studio.css +0 -273
- package/dist/{chunk-A2RZR3U4.js → chunk-6K7XZAYI.js} +3 -3
|
@@ -12,15 +12,38 @@
|
|
|
12
12
|
* CSS ships in the page head and survives ClientRouter navigations (see NodeGraph.astro).
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { useCallback, lazy, Suspense } from 'react';
|
|
15
|
+
import { useCallback, useEffect, useState, lazy, Suspense } from 'react';
|
|
16
|
+
import { createPortal } from 'react-dom';
|
|
16
17
|
import type { Node, Edge } from '@xyflow/react';
|
|
17
|
-
import type { FlowGroupBy } from '@eventcatalog/visualiser';
|
|
18
|
+
import type { FlowGroupBy, OpenInStudioRequest } from '@eventcatalog/visualiser';
|
|
18
19
|
import { buildUrl } from '@utils/url-builder';
|
|
20
|
+
import { createCanvasThroughApi } from '@features/studio/api/client';
|
|
21
|
+
import { getStoredName } from '@features/studio/identity';
|
|
22
|
+
|
|
23
|
+
// Studio's canvas code (what turns a diagram into a canvas, and the dialog asking for its name) is only loaded when a
|
|
24
|
+
// diagram is opened in Studio: every page with a diagram would load it otherwise, with Studio on or not
|
|
25
|
+
const OpenInStudioDialog = lazy(() => import('@features/studio/components/OpenInStudioDialog'));
|
|
19
26
|
|
|
20
27
|
const NodeGraph = lazy(() =>
|
|
21
28
|
import('@eventcatalog/visualiser').then((module) => ({ default: module.NodeGraph }))
|
|
22
29
|
) as React.LazyExoticComponent<React.ComponentType<AstroNodeGraphProps & Record<string, unknown>>>;
|
|
23
30
|
|
|
31
|
+
/**
|
|
32
|
+
* "Loading graph..." in the box the graph is drawn into, while the visualiser loads. Not where this island sits: the
|
|
33
|
+
* graph is portalled from there, and on the homepage that's beside the page's content (top right).
|
|
34
|
+
*/
|
|
35
|
+
const LoadingGraph = ({ portalId }: { portalId: string }) => {
|
|
36
|
+
const [container, setContainer] = useState<HTMLElement | null>(null);
|
|
37
|
+
useEffect(() => setContainer(document.getElementById(portalId)), [portalId]);
|
|
38
|
+
if (!container) return null;
|
|
39
|
+
return createPortal(
|
|
40
|
+
<div className="flex h-full min-h-[8rem] items-center justify-center text-sm text-[rgb(var(--ec-page-text-muted))]">
|
|
41
|
+
Loading graph...
|
|
42
|
+
</div>,
|
|
43
|
+
container
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
|
|
24
47
|
interface AstroNodeGraphProps {
|
|
25
48
|
id: string;
|
|
26
49
|
nodes: Node[];
|
|
@@ -57,9 +80,11 @@ interface AstroNodeGraphProps {
|
|
|
57
80
|
preferenceScope?: string;
|
|
58
81
|
// Group a flow's steps into swimlanes to start with
|
|
59
82
|
swimlanes?: FlowGroupBy;
|
|
83
|
+
// The Studio API's address, when Studio is on: the menu can then start a canvas from the diagram
|
|
84
|
+
studioApiUrl?: string;
|
|
60
85
|
}
|
|
61
86
|
|
|
62
|
-
const AstroNodeGraph = ({ isDevMode = false, resourceKey, ...otherProps }: AstroNodeGraphProps) => {
|
|
87
|
+
const AstroNodeGraph = ({ isDevMode = false, resourceKey, studioApiUrl, ...otherProps }: AstroNodeGraphProps) => {
|
|
63
88
|
// Astro-specific navigation handler
|
|
64
89
|
const handleNavigate = useCallback((url: string) => {
|
|
65
90
|
// Use window.location for navigation since we can't import astro:transitions/client in a React component
|
|
@@ -108,8 +133,32 @@ const AstroNodeGraph = ({ isDevMode = false, resourceKey, ...otherProps }: Astro
|
|
|
108
133
|
}
|
|
109
134
|
}, []);
|
|
110
135
|
|
|
136
|
+
// Opening the diagram in Studio: asks what to call the canvas, then makes it with what the diagram shows and opens
|
|
137
|
+
// it (in this tab) at the level shown. What it shows is only taken once it's named (laying a level out can take a
|
|
138
|
+
// moment), and anything that goes wrong is shown in the dialog.
|
|
139
|
+
const [toOpen, setToOpen] = useState<OpenInStudioRequest | null>(null);
|
|
140
|
+
const closeOpenInStudio = useCallback(() => setToOpen(null), []);
|
|
141
|
+
const openInStudio = useCallback(
|
|
142
|
+
async (title: string | undefined) => {
|
|
143
|
+
if (!studioApiUrl || !toOpen) return;
|
|
144
|
+
const snapshot = await toOpen.getSnapshot();
|
|
145
|
+
const { canvasFromVisualiser } = await import('@features/studio/from-visualiser');
|
|
146
|
+
const { nodes, edges, levels } = canvasFromVisualiser(snapshot);
|
|
147
|
+
if (nodes.length === 0) throw new Error('Nothing on this diagram can go on a canvas yet');
|
|
148
|
+
const canvas = await createCanvasThroughApi(studioApiUrl, {
|
|
149
|
+
title,
|
|
150
|
+
createdBy: getStoredName() ?? undefined,
|
|
151
|
+
nodes,
|
|
152
|
+
edges,
|
|
153
|
+
levels,
|
|
154
|
+
});
|
|
155
|
+
window.location.assign(snapshot.level === 3 ? canvas.url : `${canvas.url}?level=${snapshot.level}`);
|
|
156
|
+
},
|
|
157
|
+
[studioApiUrl, toOpen]
|
|
158
|
+
);
|
|
159
|
+
|
|
111
160
|
return (
|
|
112
|
-
<Suspense fallback={<
|
|
161
|
+
<Suspense fallback={<LoadingGraph portalId={otherProps.portalId || `${otherProps.id}-portal`} />}>
|
|
113
162
|
<NodeGraph
|
|
114
163
|
{...otherProps}
|
|
115
164
|
resourceKey={resourceKey}
|
|
@@ -118,7 +167,14 @@ const AstroNodeGraph = ({ isDevMode = false, resourceKey, ...otherProps }: Astro
|
|
|
118
167
|
onBuildUrl={handleBuildUrl}
|
|
119
168
|
onSaveLayout={handleSaveLayout}
|
|
120
169
|
onResetLayout={handleResetLayout}
|
|
170
|
+
onOpenInStudio={studioApiUrl ? setToOpen : undefined}
|
|
121
171
|
/>
|
|
172
|
+
{toOpen && (
|
|
173
|
+
// Its own, so the diagram isn't swapped for "Loading graph..." while the dialog loads
|
|
174
|
+
<Suspense fallback={null}>
|
|
175
|
+
<OpenInStudioDialog title={toOpen.title} onOpen={openInStudio} onClose={closeOpenInStudio} />
|
|
176
|
+
</Suspense>
|
|
177
|
+
)}
|
|
122
178
|
</Suspense>
|
|
123
179
|
);
|
|
124
180
|
};
|
|
@@ -31,11 +31,14 @@ import { pageDataLoader } from '@utils/page-loaders/page-data-loader';
|
|
|
31
31
|
import { getNodesAndEdges as getNodesAndEdgesForContainer } from '@utils/node-graphs/container-node-graph';
|
|
32
32
|
import { getNodesAndEdges as getNodesAndEdgesForChannel } from '@utils/node-graphs/channel-node-graph';
|
|
33
33
|
import config from '@config';
|
|
34
|
-
import { isEventCatalogChatVisible, isDevMode } from '@utils/feature';
|
|
34
|
+
import { isEventCatalogChatVisible, isDevMode, isCanvasEnabled } from '@utils/feature';
|
|
35
|
+
import { CANVASES_API_PATH } from '@features/studio/api/canvases-api';
|
|
35
36
|
import { loadSavedLayout, applyLayoutToNodes, buildResourceKey } from '@utils/node-graphs/layout-persistence';
|
|
36
37
|
import { compactVisualiserGraph } from '@utils/node-graphs/compact-visualiser-graph';
|
|
37
38
|
|
|
38
39
|
const isChatEnabled = isEventCatalogChatVisible();
|
|
40
|
+
// With Studio on, the menu can start a canvas from the diagram
|
|
41
|
+
const studioApiUrl = isCanvasEnabled() ? buildUrl(CANVASES_API_PATH, true) : undefined;
|
|
39
42
|
|
|
40
43
|
interface Props {
|
|
41
44
|
id: string;
|
|
@@ -257,6 +260,7 @@ if (overview && levelsOverview) {
|
|
|
257
260
|
hiddenMessagesGraph={hiddenMessagesGraph}
|
|
258
261
|
preferenceScope={collection}
|
|
259
262
|
swimlanes={lanes}
|
|
263
|
+
studioApiUrl={studioApiUrl}
|
|
260
264
|
/>
|
|
261
265
|
</div>
|
|
262
266
|
|
|
@@ -22,12 +22,19 @@
|
|
|
22
22
|
opacity: 1;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/* On every page, hidden until a navigation takes a while: paused until then (a running animation costs a style
|
|
26
|
+
recalc and paint on every frame, even when it can't be seen) */
|
|
25
27
|
.navigation-progress__bar {
|
|
26
28
|
width: 35%;
|
|
27
29
|
height: 100%;
|
|
28
30
|
background: rgb(var(--ec-accent));
|
|
29
31
|
box-shadow: 0 0 10px rgb(var(--ec-accent) / 0.55);
|
|
30
32
|
animation: navigation-progress 1.1s ease-in-out infinite;
|
|
33
|
+
animation-play-state: paused;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
#navigation-progress[data-visible='true'] .navigation-progress__bar {
|
|
37
|
+
animation-play-state: running;
|
|
31
38
|
}
|
|
32
39
|
|
|
33
40
|
:global([data-navigation-pending='true']) {
|
|
@@ -4,6 +4,7 @@ import { oneDark } from 'react-syntax-highlighter/dist/cjs/styles/prism';
|
|
|
4
4
|
import { oneLight } from 'react-syntax-highlighter/dist/cjs/styles/prism';
|
|
5
5
|
import { getLanguageForHighlight, getSchemaTypeLabel } from './utils';
|
|
6
6
|
import { useDarkMode } from './useDarkMode';
|
|
7
|
+
import { renderHighlightedRows } from '@utils/syntax-highlighter-renderer';
|
|
7
8
|
import type { SchemaItem } from './types';
|
|
8
9
|
|
|
9
10
|
interface ApiContentViewerProps {
|
|
@@ -135,6 +136,7 @@ export default function ApiContentViewer({ message, onCopy, copiedId }: ApiConte
|
|
|
135
136
|
|
|
136
137
|
<div className="border-t" style={{ borderColor: dividerColor }}>
|
|
137
138
|
<SyntaxHighlighter
|
|
139
|
+
renderer={renderHighlightedRows}
|
|
138
140
|
language={getLanguageForHighlight(message.schemaExtension)}
|
|
139
141
|
style={isDarkMode ? oneDark : oneLight}
|
|
140
142
|
customStyle={{
|
|
@@ -13,6 +13,7 @@ import { MarkdownCodeGroup } from '../MDX/CodeGroup/MarkdownCodeGroup';
|
|
|
13
13
|
import { MarkdownColumns, MarkdownColumn } from '../MDX/Columns/MarkdownColumns';
|
|
14
14
|
import { remarkMarkdownColumns } from '../../remark-plugins/markdown-columns';
|
|
15
15
|
import { getLanguageForHighlight } from './utils';
|
|
16
|
+
import { renderHighlightedRows } from '@utils/syntax-highlighter-renderer';
|
|
16
17
|
|
|
17
18
|
interface ExamplesViewerProps {
|
|
18
19
|
examples: MessageExample[];
|
|
@@ -40,6 +41,7 @@ function CodeBlock({ language, code }: { language?: string; code: string }) {
|
|
|
40
41
|
const content = code.replace(/\s+$/, '');
|
|
41
42
|
const highlighter = (
|
|
42
43
|
<SyntaxHighlighter
|
|
44
|
+
renderer={renderHighlightedRows}
|
|
43
45
|
language={language || 'text'}
|
|
44
46
|
style={isDarkMode ? oneDark : oneLight}
|
|
45
47
|
customStyle={{
|
|
@@ -6,6 +6,7 @@ import { oneLight } from 'react-syntax-highlighter/dist/cjs/styles/prism';
|
|
|
6
6
|
import { getLanguageForHighlight } from './utils';
|
|
7
7
|
import type { SchemaItem } from './types';
|
|
8
8
|
import { useDarkMode } from './useDarkMode';
|
|
9
|
+
import { renderHighlightedRows } from '@utils/syntax-highlighter-renderer';
|
|
9
10
|
|
|
10
11
|
interface SchemaCodeModalProps {
|
|
11
12
|
isOpen: boolean;
|
|
@@ -60,6 +61,7 @@ export default function SchemaCodeModal({ isOpen, onOpenChange, message, onCopy,
|
|
|
60
61
|
{/* Content */}
|
|
61
62
|
<div className="flex-1 overflow-auto p-6">
|
|
62
63
|
<SyntaxHighlighter
|
|
64
|
+
renderer={renderHighlightedRows}
|
|
63
65
|
language={getLanguageForHighlight(message.schemaExtension)}
|
|
64
66
|
style={isDarkMode ? oneDark : oneLight}
|
|
65
67
|
customStyle={{
|
|
@@ -9,6 +9,7 @@ import ProtobufSchemaViewer from './ProtobufSchemaViewer';
|
|
|
9
9
|
import { getLanguageForHighlight, SCHEMA_CODE_STYLE } from './utils';
|
|
10
10
|
import type { SchemaItem } from './types';
|
|
11
11
|
import { useDarkMode } from './useDarkMode';
|
|
12
|
+
import { renderHighlightedRows } from '@utils/syntax-highlighter-renderer';
|
|
12
13
|
|
|
13
14
|
interface SchemaContentViewerProps {
|
|
14
15
|
message: SchemaItem;
|
|
@@ -112,6 +113,7 @@ export default function SchemaContentViewer({
|
|
|
112
113
|
|
|
113
114
|
<div className="min-h-0 flex-1 overflow-auto">
|
|
114
115
|
<SyntaxHighlighter
|
|
116
|
+
renderer={renderHighlightedRows}
|
|
115
117
|
language={getLanguageForHighlight(message.schemaExtension)}
|
|
116
118
|
style={isDarkMode ? oneDark : oneLight}
|
|
117
119
|
customStyle={{ ...SCHEMA_CODE_STYLE, height: '100%' }}
|
|
@@ -16,34 +16,22 @@
|
|
|
16
16
|
import { setSidebarData, sidebarStore } from '@stores/sidebar-store';
|
|
17
17
|
import { buildUrl } from '@utils/url-builder';
|
|
18
18
|
|
|
19
|
-
// Only fetch if we haven't already loaded the data
|
|
19
|
+
// Only fetch if we haven't already loaded the data. Fetched straight away rather than when
|
|
20
|
+
// the browser is idle: the sidebar's first paint comes from the server (see SideNav.astro),
|
|
21
|
+
// but drilling down and search wait on this data
|
|
20
22
|
if (!sidebarStore.get()) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
.then((data) => {
|
|
35
|
-
setSidebarData(data);
|
|
36
|
-
})
|
|
37
|
-
.catch((error) => {
|
|
38
|
-
console.error('Error loading sidebar data:', error);
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
// Defer non-critical sidebar payload fetch until browser is idle
|
|
43
|
-
if (typeof window.requestIdleCallback === 'function') {
|
|
44
|
-
window.requestIdleCallback(loadSidebarData, { timeout: 1200 });
|
|
45
|
-
} else {
|
|
46
|
-
setTimeout(loadSidebarData, 300);
|
|
47
|
-
}
|
|
23
|
+
fetch(buildUrl('/api/sidebar-data.json', true))
|
|
24
|
+
.then((response) => {
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
throw new Error(`Failed to fetch sidebar data: ${response.status}`);
|
|
27
|
+
}
|
|
28
|
+
return response.json();
|
|
29
|
+
})
|
|
30
|
+
.then((data) => {
|
|
31
|
+
setSidebarData(data);
|
|
32
|
+
})
|
|
33
|
+
.catch((error) => {
|
|
34
|
+
console.error('Error loading sidebar data:', error);
|
|
35
|
+
});
|
|
48
36
|
}
|
|
49
37
|
</script>
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
getUrlForSearchItem,
|
|
35
35
|
highlightQuery,
|
|
36
36
|
mapPagefindResultsToSearchItems,
|
|
37
|
+
rankResourceSearchItems,
|
|
37
38
|
type SearchItem,
|
|
38
39
|
type SearchNode,
|
|
39
40
|
} from './search-utils';
|
|
@@ -316,16 +317,7 @@ export default function SearchModal() {
|
|
|
316
317
|
return items;
|
|
317
318
|
}
|
|
318
319
|
|
|
319
|
-
|
|
320
|
-
return items.filter((item) => {
|
|
321
|
-
if (item.name.toLowerCase().includes(lowerQuery)) return true;
|
|
322
|
-
// Key format is "type:id:version" (e.g. "service:OrdersService:0.0.3").
|
|
323
|
-
// Match against the id so users can find resources by their raw id too.
|
|
324
|
-
const keyParts = item.key?.split(':') ?? [];
|
|
325
|
-
const id = keyParts[1];
|
|
326
|
-
if (id?.toLowerCase().includes(lowerQuery)) return true;
|
|
327
|
-
return !!item.rawNode.summary && item.rawNode.summary.toLowerCase().includes(lowerQuery);
|
|
328
|
-
});
|
|
320
|
+
return rankResourceSearchItems(items, query);
|
|
329
321
|
}, [indexedItems, isIndexedSearch, items, query]);
|
|
330
322
|
|
|
331
323
|
const filters = useMemo(() => {
|
|
@@ -168,6 +168,32 @@ export const getIndexedResultRank = ({
|
|
|
168
168
|
return 0;
|
|
169
169
|
};
|
|
170
170
|
|
|
171
|
+
/**
|
|
172
|
+
* How well a resource matches a resource search query: an exact name (5), a name starting with
|
|
173
|
+
* the query (4) or containing it (3), then the id (2), then the summary (1). 0 is no match.
|
|
174
|
+
*/
|
|
175
|
+
export const getResourceResultRank = (item: Pick<SearchItem, 'name' | 'key' | 'rawNode'>, query: string) => {
|
|
176
|
+
const lowerQuery = query.toLowerCase();
|
|
177
|
+
const name = item.name.toLowerCase();
|
|
178
|
+
if (name === lowerQuery) return 5;
|
|
179
|
+
if (name.startsWith(lowerQuery)) return 4;
|
|
180
|
+
if (name.includes(lowerQuery)) return 3;
|
|
181
|
+
// Key format is "type:id:version" (e.g. "service:OrdersService:0.0.3").
|
|
182
|
+
// Match against the id so users can find resources by their raw id too.
|
|
183
|
+
const id = item.key?.split(':')[1];
|
|
184
|
+
if (id?.toLowerCase().includes(lowerQuery)) return 2;
|
|
185
|
+
if (item.rawNode.summary?.toLowerCase().includes(lowerQuery)) return 1;
|
|
186
|
+
return 0;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
/** Resources that match a resource search query, best matches first (index order within a rank) */
|
|
190
|
+
export const rankResourceSearchItems = <T extends Pick<SearchItem, 'name' | 'key' | 'rawNode'>>(items: T[], query: string) =>
|
|
191
|
+
items
|
|
192
|
+
.map((item, index) => ({ item, index, rank: getResourceResultRank(item, query) }))
|
|
193
|
+
.filter(({ rank }) => rank > 0)
|
|
194
|
+
.sort((a, b) => b.rank - a.rank || a.index - b.index)
|
|
195
|
+
.map(({ item }) => item);
|
|
196
|
+
|
|
171
197
|
export const applyActiveFilter = <T extends { type: string }>(items: T[], activeFilter: string) => {
|
|
172
198
|
if (activeFilter === 'all') {
|
|
173
199
|
return items;
|
|
@@ -3,8 +3,12 @@ import { SEO } from 'astro-seo';
|
|
|
3
3
|
import config from '@config';
|
|
4
4
|
import defaultImageFile from '../../public/opengraph.png';
|
|
5
5
|
import { buildUrl } from '@utils/url-builder';
|
|
6
|
+
import { formatPageTitle } from '@utils/page-title';
|
|
6
7
|
|
|
7
|
-
const {
|
|
8
|
+
const { description = config.tagline, ogType = 'website' } = Astro.props;
|
|
9
|
+
// The page's own title (none for the homepage), followed by the catalog's
|
|
10
|
+
const title = formatPageTitle(Astro.props.title);
|
|
11
|
+
const ogTitle = title;
|
|
8
12
|
|
|
9
13
|
const siteBaseURL = new URL(Astro.url);
|
|
10
14
|
const defaultImage = new URL(defaultImageFile.src, siteBaseURL);
|
|
@@ -64,53 +64,58 @@ export const AssistantSettingsForm = ({ canEdit, initial, chatAvailable, inSSR,
|
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
return (
|
|
67
|
-
|
|
67
|
+
<>
|
|
68
68
|
<Toaster richColors closeButton position="bottom-right" theme="system" />
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
</div>
|
|
73
|
-
)}
|
|
74
|
-
|
|
75
|
-
<Row
|
|
76
|
-
title="Assistant Agent"
|
|
77
|
-
description="Assistant agent that answers questions about your architecture directly in your catalog."
|
|
78
|
-
canEdit={canEdit}
|
|
79
|
-
dirty={dirty}
|
|
80
|
-
saving={saving}
|
|
81
|
-
onSave={save}
|
|
69
|
+
<form
|
|
70
|
+
onSubmit={(e) => e.preventDefault()}
|
|
71
|
+
className="divide-y divide-[rgb(var(--ec-page-border))] border-t border-[rgb(var(--ec-page-border))]"
|
|
82
72
|
>
|
|
83
|
-
|
|
84
|
-
<
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
73
|
+
{!canEdit && (
|
|
74
|
+
<div className="pb-6">
|
|
75
|
+
<ReadOnlyBanner />
|
|
76
|
+
</div>
|
|
77
|
+
)}
|
|
78
|
+
|
|
79
|
+
<Row
|
|
80
|
+
title="Assistant Agent"
|
|
81
|
+
description="Assistant agent that answers questions about your architecture directly in your catalog."
|
|
82
|
+
canEdit={canEdit}
|
|
83
|
+
dirty={dirty}
|
|
84
|
+
saving={saving}
|
|
85
|
+
onSave={save}
|
|
86
|
+
>
|
|
87
|
+
<div className="space-y-3">
|
|
88
|
+
<ToggleRow
|
|
89
|
+
icon={<MessageSquare className="h-4 w-4" aria-hidden />}
|
|
90
|
+
label={chatEnabled ? 'Enabled' : 'Disabled'}
|
|
91
|
+
hint={
|
|
92
|
+
chatEnabled
|
|
93
|
+
? 'Event Catalog Assistant is visible in this catalog.'
|
|
94
|
+
: 'Event Catalog Assistant is hidden from this catalog.'
|
|
95
|
+
}
|
|
96
|
+
checked={chatEnabled}
|
|
97
|
+
disabled={!canEdit}
|
|
98
|
+
onChange={setChatEnabled}
|
|
99
|
+
/>
|
|
100
|
+
{chatEnabled &&
|
|
101
|
+
(chatAvailable ? (
|
|
102
|
+
<ConfigurationRequired />
|
|
103
|
+
) : !inSSR ? (
|
|
104
|
+
<AssistantNeedsSSR />
|
|
105
|
+
) : !hasChatConfigFile ? (
|
|
106
|
+
<AssistantNeedsConfigFile />
|
|
107
|
+
) : null)}
|
|
108
|
+
</div>
|
|
109
|
+
</Row>
|
|
110
|
+
</form>
|
|
111
|
+
</>
|
|
107
112
|
);
|
|
108
113
|
};
|
|
109
114
|
|
|
110
115
|
const ConfigurationRequired = () => (
|
|
111
|
-
<div className="rounded-lg border border-[rgb(var(--ec-
|
|
116
|
+
<div className="rounded-lg border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-text)/0.03)] px-4 py-3">
|
|
112
117
|
<div className="flex items-start gap-3">
|
|
113
|
-
<span className="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md border border-[rgb(var(--ec-
|
|
118
|
+
<span className="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-text)/0.05)] text-[rgb(var(--ec-page-text))]">
|
|
114
119
|
<Wrench className="h-3.5 w-3.5" aria-hidden />
|
|
115
120
|
</span>
|
|
116
121
|
<div className="flex-1 min-w-0">
|
|
@@ -125,7 +130,7 @@ const ConfigurationRequired = () => (
|
|
|
125
130
|
target="_blank"
|
|
126
131
|
rel="noreferrer"
|
|
127
132
|
className={cn(
|
|
128
|
-
'mt-2 inline-flex items-center gap-1 text-[12px] font-medium text-[rgb(var(--ec-
|
|
133
|
+
'mt-2 inline-flex items-center gap-1 text-[12px] font-medium text-[rgb(var(--ec-page-text))] hover:underline'
|
|
129
134
|
)}
|
|
130
135
|
>
|
|
131
136
|
Configure the Agent
|
|
@@ -137,15 +142,15 @@ const ConfigurationRequired = () => (
|
|
|
137
142
|
);
|
|
138
143
|
|
|
139
144
|
const AssistantNeedsSSR = () => (
|
|
140
|
-
<div className="overflow-hidden rounded-lg border border-[rgb(var(--ec-
|
|
145
|
+
<div className="overflow-hidden rounded-lg border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-text)/0.03)]">
|
|
141
146
|
<div className="flex items-start gap-3 px-4 py-3.5">
|
|
142
|
-
<span className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-[rgb(var(--ec-
|
|
147
|
+
<span className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-text)/0.05)] text-[rgb(var(--ec-page-text))]">
|
|
143
148
|
<ServerCog className="h-4 w-4" aria-hidden />
|
|
144
149
|
</span>
|
|
145
150
|
<div className="flex-1 min-w-0">
|
|
146
151
|
<div className="flex items-center gap-2">
|
|
147
152
|
<p className="text-[13px] font-semibold text-[rgb(var(--ec-page-text))]">Server output mode required</p>
|
|
148
|
-
<span className="inline-flex items-center gap-1 rounded-full border border-[rgb(var(--ec-
|
|
153
|
+
<span className="inline-flex items-center gap-1 rounded-full border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-text)/0.05)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-[rgb(var(--ec-page-text))]">
|
|
149
154
|
SSR
|
|
150
155
|
</span>
|
|
151
156
|
</div>
|
|
@@ -157,7 +162,7 @@ const AssistantNeedsSSR = () => (
|
|
|
157
162
|
href={ASSISTANT_CONFIGURATION_DOCS_URL}
|
|
158
163
|
target="_blank"
|
|
159
164
|
rel="noreferrer"
|
|
160
|
-
className="inline-flex items-center gap-1 rounded-md bg-[rgb(var(--ec-
|
|
165
|
+
className="inline-flex items-center gap-1 rounded-md bg-[rgb(var(--ec-page-text))] px-3 py-1.5 text-[12px] font-semibold text-[rgb(var(--ec-page-bg))] shadow-sm transition-colors hover:opacity-85"
|
|
161
166
|
>
|
|
162
167
|
Configuration guide
|
|
163
168
|
<ExternalLink className="h-3 w-3" aria-hidden />
|
|
@@ -178,9 +183,9 @@ const AssistantNeedsSSR = () => (
|
|
|
178
183
|
);
|
|
179
184
|
|
|
180
185
|
const AssistantNeedsConfigFile = () => (
|
|
181
|
-
<div className="overflow-hidden rounded-lg border border-[rgb(var(--ec-
|
|
186
|
+
<div className="overflow-hidden rounded-lg border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-text)/0.03)]">
|
|
182
187
|
<div className="flex items-start gap-3 px-4 py-3.5">
|
|
183
|
-
<span className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-[rgb(var(--ec-
|
|
188
|
+
<span className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-page-text)/0.05)] text-[rgb(var(--ec-page-text))]">
|
|
184
189
|
<Wrench className="h-4 w-4" aria-hidden />
|
|
185
190
|
</span>
|
|
186
191
|
<div className="flex-1 min-w-0">
|
|
@@ -195,7 +200,7 @@ const AssistantNeedsConfigFile = () => (
|
|
|
195
200
|
href={ASSISTANT_CONFIGURATION_DOCS_URL}
|
|
196
201
|
target="_blank"
|
|
197
202
|
rel="noreferrer"
|
|
198
|
-
className="inline-flex items-center gap-1 rounded-md bg-[rgb(var(--ec-
|
|
203
|
+
className="inline-flex items-center gap-1 rounded-md bg-[rgb(var(--ec-page-text))] px-3 py-1.5 text-[12px] font-semibold text-[rgb(var(--ec-page-bg))] shadow-sm transition-colors hover:opacity-85"
|
|
199
204
|
>
|
|
200
205
|
Configuration guide
|
|
201
206
|
<ExternalLink className="h-3 w-3" aria-hidden />
|