Merge branch 'master' of github.com:backstage/backstage into kurtaking/bep-telemetry-service

This commit is contained in:
Kurt King
2025-07-22 09:45:56 -06:00
1145 changed files with 51256 additions and 27572 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-org': patch
---
Added OwnershipCard, ComponentsGrid and UserProfileCard components to the `overridableComponents`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-techdocs': patch
---
Fixed an issue causing TechDocs to not properly handle initial redirect.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-graph': patch
---
Catalog graph plugin support i18n
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/canon': patch
---
We are consolidating all css files into a single styles.css in Canon.
-14
View File
@@ -1,14 +0,0 @@
---
'@backstage/plugin-catalog-backend': major
'@backstage/create-app': patch
---
**BREAKING:** The experimental `catalog.useUrlReadersSearch` configuration flag (introduced in v1.36) has been removed.
The `UrlReaderProcessor` now always uses the `search` method of `UrlReaders`. Built-in `UrlReaderService` implementations have been updated accordingly.
If you use custom `UrlReaderService` implementations, you need to adapt their `search` method to correctly handle both specific URLs and potential
search patterns (see changes on built-in readers [in the original PR](https://github.com/backstage/backstage/pull/28379/files#diff-68b0452f173ee54bdd40f7b5e047a9cb8bb59200425622c212c217b76dac1d1b)).
Previous behavior was to call the `search` method only if the parsed Git URL's filename contained a wildcard and use `readUrl` otherwise. Each `UrlReaderService` must implement this logic in the `search` method instead.
This allows each `UrlReaderService` implementation to check whether it's a search URL (that contains a wildcard pattern) or not using logic that is specific to each provider.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/canon': patch
---
Add new `RadioGroup` + `Radio` component to Canon
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Support `filter` parameter on the `EntityHeaderBlueprint`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/ui': patch
---
Update styling of Tooltip element
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/backend-defaults': patch
'@backstage/backend-test-utils': minor
---
Add a standard `toString` on credentials objects
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Adding `type` as an override to the `convertLegacyEntityCardExtension`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-azure': patch
---
`host` should be optional in `config` schema
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': patch
---
Adding a more sensible default order to the default filters
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': patch
---
Support multiple headers in new frontend system, and don't render a header until the entity has finished loading
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/plugin-scaffolder-node-test-utils': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-scaffolder-node': patch
---
An internal refactor which adds additional types to experimental checkpoints
+200 -187
View File
@@ -2,206 +2,219 @@
"mode": "pre",
"tag": "next",
"initialVersions": {
"example-app": "0.2.110",
"@backstage/app-defaults": "1.6.3",
"example-app-next": "0.0.24",
"app-next-example-plugin": "0.0.24",
"example-backend": "0.0.39",
"@backstage/backend-app-api": "1.2.4",
"@backstage/backend-defaults": "0.11.0",
"example-app": "0.2.111",
"@backstage/app-defaults": "1.6.4",
"example-app-next": "0.0.25",
"app-next-example-plugin": "0.0.25",
"example-backend": "0.0.40",
"@backstage/backend-app-api": "1.2.5",
"@backstage/backend-defaults": "0.11.1",
"@backstage/backend-dev-utils": "0.1.5",
"@backstage/backend-dynamic-feature-service": "0.7.1",
"@backstage/backend-openapi-utils": "0.5.4",
"@backstage/backend-plugin-api": "1.4.0",
"@backstage/backend-test-utils": "1.6.0",
"@backstage/canon": "0.5.0",
"@backstage/catalog-client": "1.10.1",
"@backstage/catalog-model": "1.7.4",
"@backstage/cli": "0.33.0",
"@backstage/backend-dynamic-feature-service": "0.7.2",
"@backstage/backend-openapi-utils": "0.5.5",
"@backstage/backend-plugin-api": "1.4.1",
"@backstage/backend-test-utils": "1.7.0",
"@backstage/canon": "0.6.0",
"@backstage/catalog-client": "1.10.2",
"@backstage/catalog-model": "1.7.5",
"@backstage/cli": "0.33.1",
"@backstage/cli-common": "0.1.15",
"@backstage/cli-node": "0.2.13",
"@backstage/codemods": "0.1.52",
"@backstage/config": "1.3.2",
"@backstage/config-loader": "1.10.1",
"@backstage/core-app-api": "1.17.1",
"@backstage/core-compat-api": "0.4.3",
"@backstage/core-components": "0.17.3",
"@backstage/core-plugin-api": "1.10.8",
"@backstage/create-app": "0.7.0",
"@backstage/dev-utils": "1.1.11",
"e2e-test": "0.2.29",
"@backstage/config": "1.3.3",
"@backstage/config-loader": "1.10.2",
"@backstage/core-app-api": "1.18.0",
"@backstage/core-compat-api": "0.4.4",
"@backstage/core-components": "0.17.4",
"@backstage/core-plugin-api": "1.10.9",
"@backstage/create-app": "0.7.1",
"@backstage/dev-utils": "1.1.12",
"e2e-test": "0.2.30",
"@backstage/e2e-test-utils": "0.1.1",
"@backstage/errors": "1.2.7",
"@backstage/eslint-plugin": "0.1.11",
"@backstage/frontend-app-api": "0.11.3",
"@backstage/frontend-defaults": "0.2.3",
"@backstage/frontend-dynamic-feature-loader": "0.1.2",
"@internal/frontend": "0.0.10",
"@backstage/frontend-plugin-api": "0.10.3",
"@backstage/frontend-test-utils": "0.3.3",
"@backstage/integration": "1.17.0",
"@backstage/integration-aws-node": "0.1.16",
"@backstage/integration-react": "1.2.8",
"@backstage/frontend-app-api": "0.11.4",
"@backstage/frontend-defaults": "0.2.4",
"@backstage/frontend-dynamic-feature-loader": "0.1.3",
"@internal/frontend": "0.0.11",
"@backstage/frontend-plugin-api": "0.10.4",
"@backstage/frontend-test-utils": "0.3.4",
"@backstage/integration": "1.17.1",
"@backstage/integration-aws-node": "0.1.17",
"@backstage/integration-react": "1.2.9",
"@internal/opaque": "0.0.1",
"@backstage/release-manifests": "0.0.13",
"@backstage/repo-tools": "0.14.0",
"@internal/scaffolder": "0.0.10",
"@techdocs/cli": "1.9.4",
"techdocs-cli-embedded-app": "0.2.109",
"@backstage/test-utils": "1.7.9",
"@backstage/theme": "0.6.6",
"@backstage/repo-tools": "0.15.0",
"@internal/scaffolder": "0.0.11",
"@techdocs/cli": "1.9.5",
"techdocs-cli-embedded-app": "0.2.110",
"@backstage/test-utils": "1.7.10",
"@backstage/theme": "0.6.7",
"@backstage/types": "1.2.1",
"@backstage/ui": "0.6.0",
"@backstage/version-bridge": "1.0.11",
"yarn-plugin-backstage": "0.0.6",
"@backstage/plugin-api-docs": "0.12.8",
"yarn-plugin-backstage": "0.0.7",
"@backstage/plugin-api-docs": "0.12.9",
"@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.10",
"@backstage/plugin-app": "0.1.10",
"@backstage/plugin-app-backend": "0.5.3",
"@backstage/plugin-app-node": "0.1.34",
"@backstage/plugin-app-visualizer": "0.1.20",
"@backstage/plugin-auth-backend": "0.25.1",
"@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.4",
"@backstage/plugin-auth-backend-module-auth0-provider": "0.2.4",
"@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.4",
"@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.9",
"@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.4",
"@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.4",
"@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.4",
"@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.4",
"@backstage/plugin-auth-backend-module-github-provider": "0.3.4",
"@backstage/plugin-auth-backend-module-gitlab-provider": "0.3.4",
"@backstage/plugin-auth-backend-module-google-provider": "0.3.4",
"@backstage/plugin-auth-backend-module-guest-provider": "0.2.9",
"@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.4",
"@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.4",
"@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.9",
"@backstage/plugin-auth-backend-module-oidc-provider": "0.4.4",
"@backstage/plugin-auth-backend-module-okta-provider": "0.2.4",
"@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.4",
"@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.4",
"@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.4",
"@backstage/plugin-auth-node": "0.6.4",
"@backstage/plugin-auth-react": "0.1.16",
"@backstage/plugin-bitbucket-cloud-common": "0.3.0",
"@backstage/plugin-catalog": "1.31.0",
"@backstage/plugin-catalog-backend": "2.1.0",
"@backstage/plugin-catalog-backend-module-aws": "0.4.12",
"@backstage/plugin-catalog-backend-module-azure": "0.3.6",
"@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.3",
"@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.5.0",
"@backstage/plugin-catalog-backend-module-bitbucket-server": "0.5.0",
"@backstage/plugin-catalog-backend-module-gcp": "0.3.9",
"@backstage/plugin-catalog-backend-module-gerrit": "0.3.3",
"@backstage/plugin-catalog-backend-module-gitea": "0.1.1",
"@backstage/plugin-catalog-backend-module-github": "0.10.0",
"@backstage/plugin-catalog-backend-module-github-org": "0.3.11",
"@backstage/plugin-catalog-backend-module-gitlab": "0.7.0",
"@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.10",
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.7.1",
"@backstage/plugin-catalog-backend-module-ldap": "0.11.6",
"@backstage/plugin-catalog-backend-module-logs": "0.1.11",
"@backstage/plugin-catalog-backend-module-msgraph": "0.7.1",
"@backstage/plugin-catalog-backend-module-openapi": "0.2.11",
"@backstage/plugin-catalog-backend-module-puppetdb": "0.2.11",
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.9",
"@backstage/plugin-catalog-backend-module-unprocessed": "0.6.1",
"@backstage/plugin-catalog-common": "1.1.4",
"@backstage/plugin-catalog-graph": "0.4.20",
"@backstage/plugin-catalog-import": "0.13.1",
"@backstage/plugin-catalog-node": "1.17.1",
"@backstage/plugin-catalog-react": "1.19.0",
"@backstage/plugin-catalog-unprocessed-entities": "0.2.18",
"@backstage/plugin-catalog-unprocessed-entities-common": "0.0.8",
"@backstage/plugin-config-schema": "0.1.69",
"@backstage/plugin-devtools": "0.1.28",
"@backstage/plugin-devtools-backend": "0.5.6",
"@backstage/plugin-devtools-common": "0.1.16",
"@backstage/plugin-events-backend": "0.5.3",
"@backstage/plugin-events-backend-module-aws-sqs": "0.4.12",
"@backstage/plugin-events-backend-module-azure": "0.2.21",
"@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.21",
"@backstage/plugin-events-backend-module-bitbucket-server": "0.1.2",
"@backstage/plugin-events-backend-module-gerrit": "0.2.21",
"@backstage/plugin-events-backend-module-github": "0.4.1",
"@backstage/plugin-events-backend-module-gitlab": "0.3.2",
"@backstage/plugin-events-backend-module-google-pubsub": "0.1.1",
"@backstage/plugin-events-backend-module-kafka": "0.1.0",
"@backstage/plugin-events-backend-test-utils": "0.1.45",
"@backstage/plugin-events-node": "0.4.12",
"@internal/plugin-todo-list": "1.0.40",
"@internal/plugin-todo-list-backend": "1.0.40",
"@internal/plugin-todo-list-common": "1.0.25",
"@backstage/plugin-gateway-backend": "1.0.2",
"@backstage/plugin-home": "0.8.9",
"@backstage/plugin-home-react": "0.1.27",
"@backstage/plugin-kubernetes": "0.12.8",
"@backstage/plugin-kubernetes-backend": "0.19.7",
"@backstage/plugin-kubernetes-cluster": "0.0.26",
"@backstage/plugin-kubernetes-common": "0.9.5",
"@backstage/plugin-kubernetes-node": "0.3.1",
"@backstage/plugin-kubernetes-react": "0.5.8",
"@backstage/plugin-mcp-actions-backend": "0.1.0",
"@backstage/plugin-notifications": "0.5.6",
"@backstage/plugin-notifications-backend": "0.5.7",
"@backstage/plugin-notifications-backend-module-email": "0.3.10",
"@backstage/plugin-notifications-backend-module-slack": "0.1.2",
"@backstage/plugin-notifications-common": "0.0.9",
"@backstage/plugin-notifications-node": "0.2.16",
"@backstage/plugin-org": "0.6.40",
"@backstage/plugin-org-react": "0.1.39",
"@backstage/plugin-permission-backend": "0.7.1",
"@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.9",
"@backstage/plugin-permission-common": "0.9.0",
"@backstage/plugin-permission-node": "0.10.1",
"@backstage/plugin-permission-react": "0.4.35",
"@backstage/plugin-proxy-backend": "0.6.3",
"@backstage/plugin-proxy-node": "0.1.5",
"@backstage/plugin-scaffolder": "1.32.0",
"@backstage/plugin-scaffolder-backend": "2.0.0",
"@backstage/plugin-scaffolder-backend-module-azure": "0.2.10",
"@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.11",
"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.10",
"@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.10",
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.10",
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.11",
"@backstage/plugin-scaffolder-backend-module-gcp": "0.2.10",
"@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.10",
"@backstage/plugin-scaffolder-backend-module-gitea": "0.2.10",
"@backstage/plugin-scaffolder-backend-module-github": "0.8.0",
"@backstage/plugin-scaffolder-backend-module-gitlab": "0.9.2",
"@backstage/plugin-scaffolder-backend-module-notifications": "0.1.11",
"@backstage/plugin-scaffolder-backend-module-rails": "0.5.10",
"@backstage/plugin-scaffolder-backend-module-sentry": "0.2.10",
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.11",
"@backstage/plugin-scaffolder-common": "1.5.11",
"@backstage/plugin-scaffolder-node": "0.9.0",
"@backstage/plugin-scaffolder-node-test-utils": "0.3.0",
"@backstage/plugin-scaffolder-react": "1.17.0",
"@backstage/plugin-search": "1.4.27",
"@backstage/plugin-search-backend": "2.0.3",
"@backstage/plugin-search-backend-module-catalog": "0.3.5",
"@backstage/plugin-search-backend-module-elasticsearch": "1.7.3",
"@backstage/plugin-search-backend-module-explore": "0.3.3",
"@backstage/plugin-search-backend-module-pg": "0.5.45",
"@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.10",
"@backstage/plugin-search-backend-module-techdocs": "0.4.3",
"@backstage/plugin-search-backend-node": "1.3.12",
"@backstage/plugin-search-common": "1.2.18",
"@backstage/plugin-search-react": "1.9.1",
"@backstage/plugin-signals": "0.0.20",
"@backstage/plugin-signals-backend": "0.3.5",
"@backstage/plugin-signals-node": "0.1.21",
"@backstage/plugin-signals-react": "0.0.14",
"@backstage/plugin-techdocs": "1.13.0",
"@backstage/plugin-techdocs-addons-test-utils": "1.0.49",
"@backstage/plugin-techdocs-backend": "2.0.3",
"@backstage/plugin-app": "0.1.11",
"@backstage/plugin-app-backend": "0.5.4",
"@backstage/plugin-app-node": "0.1.35",
"@backstage/plugin-app-visualizer": "0.1.21",
"@backstage/plugin-auth-backend": "0.25.2",
"@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.5",
"@backstage/plugin-auth-backend-module-auth0-provider": "0.2.5",
"@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.5",
"@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.10",
"@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.5",
"@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.5",
"@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.5",
"@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.5",
"@backstage/plugin-auth-backend-module-github-provider": "0.3.5",
"@backstage/plugin-auth-backend-module-gitlab-provider": "0.3.5",
"@backstage/plugin-auth-backend-module-google-provider": "0.3.5",
"@backstage/plugin-auth-backend-module-guest-provider": "0.2.10",
"@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.5",
"@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.5",
"@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.10",
"@backstage/plugin-auth-backend-module-oidc-provider": "0.4.5",
"@backstage/plugin-auth-backend-module-okta-provider": "0.2.5",
"@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.5",
"@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.5",
"@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.5",
"@backstage/plugin-auth-node": "0.6.5",
"@backstage/plugin-auth-react": "0.1.17",
"@backstage/plugin-bitbucket-cloud-common": "0.3.1",
"@backstage/plugin-catalog": "1.31.1",
"@backstage/plugin-catalog-backend": "3.0.0",
"@backstage/plugin-catalog-backend-module-aws": "0.4.13",
"@backstage/plugin-catalog-backend-module-azure": "0.3.7",
"@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.4",
"@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.5.1",
"@backstage/plugin-catalog-backend-module-bitbucket-server": "0.5.1",
"@backstage/plugin-catalog-backend-module-gcp": "0.3.10",
"@backstage/plugin-catalog-backend-module-gerrit": "0.3.4",
"@backstage/plugin-catalog-backend-module-gitea": "0.1.2",
"@backstage/plugin-catalog-backend-module-github": "0.10.1",
"@backstage/plugin-catalog-backend-module-github-org": "0.3.12",
"@backstage/plugin-catalog-backend-module-gitlab": "0.7.1",
"@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.11",
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.7.2",
"@backstage/plugin-catalog-backend-module-ldap": "0.11.7",
"@backstage/plugin-catalog-backend-module-logs": "0.1.12",
"@backstage/plugin-catalog-backend-module-msgraph": "0.7.2",
"@backstage/plugin-catalog-backend-module-openapi": "0.2.12",
"@backstage/plugin-catalog-backend-module-puppetdb": "0.2.12",
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.10",
"@backstage/plugin-catalog-backend-module-unprocessed": "0.6.2",
"@backstage/plugin-catalog-common": "1.1.5",
"@backstage/plugin-catalog-graph": "0.4.21",
"@backstage/plugin-catalog-import": "0.13.3",
"@backstage/plugin-catalog-node": "1.17.2",
"@backstage/plugin-catalog-react": "1.19.1",
"@backstage/plugin-catalog-unprocessed-entities": "0.2.19",
"@backstage/plugin-catalog-unprocessed-entities-common": "0.0.9",
"@backstage/plugin-config-schema": "0.1.70",
"@backstage/plugin-devtools": "0.1.29",
"@backstage/plugin-devtools-backend": "0.5.7",
"@backstage/plugin-devtools-common": "0.1.17",
"@backstage/plugin-events-backend": "0.5.4",
"@backstage/plugin-events-backend-module-aws-sqs": "0.4.13",
"@backstage/plugin-events-backend-module-azure": "0.2.22",
"@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.22",
"@backstage/plugin-events-backend-module-bitbucket-server": "0.1.3",
"@backstage/plugin-events-backend-module-gerrit": "0.2.22",
"@backstage/plugin-events-backend-module-github": "0.4.2",
"@backstage/plugin-events-backend-module-gitlab": "0.3.3",
"@backstage/plugin-events-backend-module-google-pubsub": "0.1.2",
"@backstage/plugin-events-backend-module-kafka": "0.1.1",
"@backstage/plugin-events-backend-test-utils": "0.1.46",
"@backstage/plugin-events-node": "0.4.13",
"@internal/plugin-todo-list": "1.0.41",
"@internal/plugin-todo-list-backend": "1.0.41",
"@internal/plugin-todo-list-common": "1.0.26",
"@backstage/plugin-gateway-backend": "1.0.3",
"@backstage/plugin-home": "0.8.10",
"@backstage/plugin-home-react": "0.1.28",
"@backstage/plugin-kubernetes": "0.12.9",
"@backstage/plugin-kubernetes-backend": "0.19.8",
"@backstage/plugin-kubernetes-cluster": "0.0.27",
"@backstage/plugin-kubernetes-common": "0.9.6",
"@backstage/plugin-kubernetes-node": "0.3.2",
"@backstage/plugin-kubernetes-react": "0.5.9",
"@backstage/plugin-mcp-actions-backend": "0.1.1",
"@backstage/plugin-notifications": "0.5.7",
"@backstage/plugin-notifications-backend": "0.5.8",
"@backstage/plugin-notifications-backend-module-email": "0.3.11",
"@backstage/plugin-notifications-backend-module-slack": "0.1.3",
"@backstage/plugin-notifications-common": "0.0.10",
"@backstage/plugin-notifications-node": "0.2.17",
"@backstage/plugin-org": "0.6.41",
"@backstage/plugin-org-react": "0.1.40",
"@backstage/plugin-permission-backend": "0.7.2",
"@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.10",
"@backstage/plugin-permission-common": "0.9.1",
"@backstage/plugin-permission-node": "0.10.2",
"@backstage/plugin-permission-react": "0.4.36",
"@backstage/plugin-proxy-backend": "0.6.4",
"@backstage/plugin-proxy-node": "0.1.6",
"@backstage/plugin-scaffolder": "1.33.0",
"@backstage/plugin-scaffolder-backend": "2.1.0",
"@backstage/plugin-scaffolder-backend-module-azure": "0.2.11",
"@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.12",
"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.11",
"@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.11",
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.11",
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.13",
"@backstage/plugin-scaffolder-backend-module-gcp": "0.2.11",
"@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.11",
"@backstage/plugin-scaffolder-backend-module-gitea": "0.2.11",
"@backstage/plugin-scaffolder-backend-module-github": "0.8.1",
"@backstage/plugin-scaffolder-backend-module-gitlab": "0.9.3",
"@backstage/plugin-scaffolder-backend-module-notifications": "0.1.12",
"@backstage/plugin-scaffolder-backend-module-rails": "0.5.11",
"@backstage/plugin-scaffolder-backend-module-sentry": "0.2.11",
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.12",
"@backstage/plugin-scaffolder-common": "1.6.0",
"@backstage/plugin-scaffolder-node": "0.10.0",
"@backstage/plugin-scaffolder-node-test-utils": "0.3.1",
"@backstage/plugin-scaffolder-react": "1.18.0",
"@backstage/plugin-search": "1.4.28",
"@backstage/plugin-search-backend": "2.0.4",
"@backstage/plugin-search-backend-module-catalog": "0.3.6",
"@backstage/plugin-search-backend-module-elasticsearch": "1.7.4",
"@backstage/plugin-search-backend-module-explore": "0.3.4",
"@backstage/plugin-search-backend-module-pg": "0.5.46",
"@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.11",
"@backstage/plugin-search-backend-module-techdocs": "0.4.4",
"@backstage/plugin-search-backend-node": "1.3.13",
"@backstage/plugin-search-common": "1.2.19",
"@backstage/plugin-search-react": "1.9.2",
"@backstage/plugin-signals": "0.0.21",
"@backstage/plugin-signals-backend": "0.3.6",
"@backstage/plugin-signals-node": "0.1.22",
"@backstage/plugin-signals-react": "0.0.15",
"@backstage/plugin-techdocs": "1.13.2",
"@backstage/plugin-techdocs-addons-test-utils": "1.0.51",
"@backstage/plugin-techdocs-backend": "2.0.4",
"@backstage/plugin-techdocs-common": "0.1.1",
"@backstage/plugin-techdocs-module-addons-contrib": "1.1.25",
"@backstage/plugin-techdocs-node": "1.13.4",
"@backstage/plugin-techdocs-react": "1.3.0",
"@backstage/plugin-user-settings": "0.8.23",
"@backstage/plugin-user-settings-backend": "0.3.3",
"@backstage/plugin-techdocs-module-addons-contrib": "1.1.26",
"@backstage/plugin-techdocs-node": "1.13.5",
"@backstage/plugin-techdocs-react": "1.3.1",
"@backstage/plugin-user-settings": "0.8.24",
"@backstage/plugin-user-settings-backend": "0.3.4",
"@backstage/plugin-user-settings-common": "0.0.1"
},
"changesets": []
"changesets": [
"blue-apples-pump",
"create-app-1753196727",
"evil-phones-unite",
"funny-dancers-start",
"hot-clowns-behave",
"huge-heads-occur",
"nice-actors-cheer",
"nice-crabs-clean",
"spotty-icons-shake",
"tender-crabs-stay",
"twenty-pumas-brush"
]
}
-13
View File
@@ -1,13 +0,0 @@
---
'@backstage/canon': minor
---
**BREAKING CHANGES**
Were updating our Button component to provide better support for button links.
- Were introducing a new `ButtonLink` component, which replaces the previous render prop pattern.
- To maintain naming consistency across components, `IconButton` is being renamed to `ButtonIcon`.
- Additionally, the render prop will be removed from all button-related components.
These changes aim to simplify usage and improve clarity in our component API.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-mcp-actions-backend': patch
---
Fixed the example in the README for generating a static token by adding a subject field
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Replaced deprecated uses of `@backstage/backend-common` with the equivalents in `@backstage/backend-defaults` and `@backstage/backend-plugin-api`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/canon': patch
---
Added placeholder prop to TextField component.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
---
Fixing the typescript issue with using `z.unknown()`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-defaults': patch
---
Added support for passing through `allowUnknownExtensionConfig` as a flag
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-import': patch
---
Fixed bug with error message since ResponseError is now thrown from CatalogClient
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/ui': minor
---
**Breaking** We are upgrading our `Text` component to support all font sizes making the `Heading` component redundant. The new `Text` component introduces 4 sizes for title and 4 sizes for body text. All of these work in multiple colors and font weights. We improved the `as` prop to include all possible values. The `Link` component has also been updated to match the new `Text` component.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/canon': patch
---
adding export for ButtonLink so it's importable
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/integration-react': patch
---
Separated gitlab `write_repository` and `api` scope to pass checks in `RefreshingAuthSessionManager`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/ui': patch
---
Adds onTabSelectionChange to ui header component.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-search-backend': patch
---
Error messages should not contain backend SQL query strings in the API response, this change will ensure that messages are logged and empty response is returned to the user
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/backend-defaults': patch
'@backstage/integration': patch
---
Fixed bug where the GitLab user token and GitLab integration token were being merged together
+1 -1
View File
@@ -7,7 +7,7 @@
**/.git/**
**/public/**
**/microsite/**
**/canon-docs/**
**/docs-ui/**
**/templates/**
**/sample-templates/**
playwright.config.ts
+1
View File
@@ -40,6 +40,7 @@ yarn.lock @backstage/maintainers @backst
/packages/repo-tools @backstage/tooling-maintainers
/packages/techdocs-cli @backstage/techdocs-maintainers
/packages/techdocs-cli-embedded-app @backstage/techdocs-maintainers
/packages/ui @backstage/design-system-maintainers
/packages/yarn-plugin @backstage/tooling-maintainers
/plugins/app @backstage/framework-maintainers
/plugins/app-* @backstage/framework-maintainers
+31
View File
@@ -0,0 +1,31 @@
This is a TypeScript project structured as a monorepo using Yarn workspaces.
## Code Standards
The following files contain guidelines for the project:
- `/STYLE.md`: guidelines for code style.
- `/REVIEWING.md`: guidelines for pull requests.
- `/SECURITY.md`: guidelines for security.
- `/docs/architecture-decisions/`: contains the architecture decisions for the project.
## Development Flow
Before any of these commands can be run, you need to run `yarn install` in the project root.
- Build: There is no need to build the project during development, and it is verified automatically in the CI pipeline.
- Test: Use `yarn test <path>` in the project root to run tests. The path can be either a single file or a directory, and be omitted to run tests for all changed files.
- Type checking: Use `yarn tsc` in the project root to run the type checker.
- Code formatting: Use `yarn prettier --write <path>` to format code.
- Lint: Use `yarn lint --fix` in the project root to run the linter.
- API reports: Before submitting a pull request with changes to any package in the workspace, run `yarn build:api-reports` in the project root to generate API reports for all packages.
You MUST NOT create a release by running `yarn changesets version` or `yarn release` as part of any changes. Releases are created by separate workflows.
All changes that affect the published version of packages in the `/packages` and `/plugins` directories must be accompanied by a changeset. See the guidelines in `/REVIEWING.md` for information on how to write good changesets. Changesets are stored in the `/.changeset` directory. Breaking changes must be accompanied by a `minor` version bump for packages that below version `1.0.0`, or a `major` version bump for packages that are at version `1.0.0` or higher.
Never update ESLint, Prettier, or TypeScript configuration files unless specifically requested.
## Repository Structure
See `/docs/contribute/project-structure.md` for a detailed description of the repository structure.
@@ -10,6 +10,7 @@ Airbrakes
ajv
Alaria
Alef
allowedHosts
allowlisted
Anddddd
Apdex
@@ -43,6 +44,7 @@ bugfixes
builtins
bundler
bundlers
bursty
callout
CDNs
Chai
@@ -102,6 +104,8 @@ deliverables
denormalized
dependabot
deps
dequeue
dequeueing
deserialization
destructured
destructuring
@@ -111,8 +115,6 @@ devcontainer
devcontainers
devops
devs
dequeue
dequeueing
dialogs
disambiguator
discoverability
@@ -150,8 +152,8 @@ FireHydrant
Firekube
Firestore
Fiverr
Flightcontrol
flightcontrol
Flightcontrol
Francesco
Frontside
Gaurav
@@ -175,8 +177,8 @@ Hackathons
haproxy
hardcoded
hardcoding
Harness
harness
Harness
Helidon
Henneke
Heroku
@@ -199,9 +201,10 @@ Indal
indexable
ingestors
inlined
inlining
inlinehilite
inlining
integrator's
intellij
interop
interoperate
iterable
@@ -312,8 +315,8 @@ OpenSearch
OpenShift
openssl
orgs
Overridable
overridable
Overridable
padding
paddings
pagerduty
@@ -380,10 +383,10 @@ retryable
reusability
Reusability
roadmaps
rollbar
rollout
Roboto
rollbar
Rollbar
rollout
Rollup
routable
Routable
@@ -399,9 +402,10 @@ sanitization
scaffolded
scaffolder
Scaffolder
scrollbar
SCM
SCMs
scrollable
scrollbar
sdks
seb
semlas
@@ -409,14 +413,15 @@ semver
sendmail
serializable
Serverless
severities
shoutout
SIG
signoff
SIGs
siloed
Sinon
snackbars
snackbar
snackbars
Snyk
Sonarqube
sourcemaps
@@ -487,6 +492,7 @@ transpiled
transpiler
transpilers
truthy
tsconfig
TSDoc
typeahead
ui
@@ -537,7 +543,3 @@ zod
Zolotusky
zoomable
zsh
scrollable
severities
intellij
tsconfig
@@ -23,7 +23,7 @@ jobs:
comment-cache-key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
disable-sudo: true
egress-policy: block
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -40,7 +40,7 @@ jobs:
name: Test ${{ matrix.node-version }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+6 -2
View File
@@ -28,7 +28,7 @@ jobs:
name: Install ${{ matrix.node-version }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -64,7 +64,7 @@ jobs:
name: Verify ${{ matrix.node-version }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -131,6 +131,10 @@ jobs:
- name: build canon
run: yarn --cwd packages/canon build
# For now BUI has a custom build script and needs to be built separately
- name: build BUI
run: yarn --cwd packages/ui build
- name: verify type dependencies
run: yarn lint:type-deps
+1 -1
View File
@@ -10,7 +10,7 @@ jobs:
timeout-minutes: 10
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+3 -3
View File
@@ -23,7 +23,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -135,7 +135,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -246,7 +246,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+5 -1
View File
@@ -114,6 +114,10 @@ jobs:
- name: build canon
run: yarn --cwd packages/canon build
# For now BUI has a custom build script and needs to be built separately
- name: build BUI
run: yarn --cwd packages/ui build
- name: verify type dependencies
run: yarn lint:type-deps
@@ -151,7 +155,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -16,7 +16,7 @@ jobs:
if: github.repository == 'backstage/backstage'
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
steps:
# Inspired by https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request )
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+12 -12
View File
@@ -4,11 +4,11 @@ on:
branches: [master]
jobs:
sync-canon-docs:
sync-docs-ui:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -26,11 +26,11 @@ jobs:
with:
cache-prefix: ${{ runner.os }}-v20.x
- name: Checkout backstage/canon-docs
- name: Checkout backstage/docs-ui
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: backstage/canon-docs
path: canon-external-docs
repository: backstage/docs-ui
path: bui-external-docs
token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
- name: Configure Git
@@ -39,22 +39,22 @@ jobs:
git config --global user.name 'Github Canon Docs workflow'
- name: Install dependencies
working-directory: canon-docs
working-directory: docs-ui
run: yarn install
- name: Build Canon Docs
working-directory: canon-docs
- name: Build Docs UI
working-directory: docs-ui
run: |
yarn build
- name: Replace contents of canon-external-docs repo with docs build output
working-directory: canon-external-docs
- name: Replace contents of bui-external-docs repo with docs build output
working-directory: bui-external-docs
run: |
git rm -rf .
cp -R ../canon-docs/dist/. .
cp -R ../docs-ui/dist/. .
- name: Commit to canon-storybook repo
working-directory: canon-external-docs
working-directory: bui-external-docs
run: |
git add .
git commit -am "Canon Docs build for backstage/backstage@${{ github.sha }}"
+1 -1
View File
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -11,7 +11,7 @@ jobs:
if: github.actor == 'dependabot[bot]' && github.repository == 'backstage/backstage'
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -11,7 +11,7 @@ jobs:
if: github.actor == 'renovate[bot]' && github.repository == 'backstage/backstage'
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -26,7 +26,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -42,7 +42,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
name: E2E Linux ${{ matrix.node-version }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -43,7 +43,7 @@ jobs:
name: E2E Linux ${{ matrix.node-version }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -32,7 +32,7 @@ jobs:
name: Techdocs
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -25,7 +25,7 @@ jobs:
name: E2E Windows ${{ matrix.node-version }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -33,7 +33,7 @@ jobs:
name: E2E Windows ${{ matrix.node-version }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -21,7 +21,7 @@ jobs:
name: Microsite
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+3 -3
View File
@@ -28,7 +28,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -137,7 +137,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -240,7 +240,7 @@ jobs:
name: Microsite
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+1 -1
View File
@@ -28,7 +28,7 @@ jobs:
name: Storybook
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+4 -4
View File
@@ -28,7 +28,7 @@ jobs:
name: Storybook
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
@@ -49,10 +49,10 @@ jobs:
run: yarn install --immutable
working-directory: storybook
# Only for verification, the canon one is what we upload to Chromatic
# Only for verification, the BUI one is what we upload to Chromatic
- run: yarn build-storybook
- run: yarn --cwd packages/canon build-storybook
- run: yarn --cwd packages/ui build-storybook
- uses: chromaui/action@1cfa065cbdab28f6ca3afaeb3d761383076a35aa # v11
with:
@@ -60,5 +60,5 @@ jobs:
# projectToken intentionally shared to allow collaborators to run Chromatic on forks
# https://www.chromatic.com/docs/custom-ci-provider#run-chromatic-on-external-forks-of-open-source-projects
projectToken: chpt_dab72dc0f97d55b
workingDir: packages/canon
workingDir: packages/ui
storybookBuildDir: storybook-static
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
+4 -4
View File
@@ -1,10 +1,10 @@
.yarn
dist
microsite
canon-docs/.next
canon-docs/public
canon-docs/out
packages/canon/css
docs-ui/.next
docs-ui/public
docs-ui/out
packages/ui/css
coverage
*.hbs
templates
-1
View File
@@ -1 +0,0 @@
canon.backstage.io
Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long
-34
View File
@@ -1,34 +0,0 @@
const fs = require('fs');
const path = require('path');
const { bundle } = require('lightningcss');
const source = '../../packages/canon/src/css';
const destination = '../public';
const source1 = path.join(__dirname, `${source}/styles.css`);
const destination1 = path.join(__dirname, `${destination}/styles.css`);
// Function to bundle and copy the CSS file
const bundleAndCopyFile = async (source, destination) => {
try {
const result = await bundle({
filename: source,
minify: true,
});
fs.writeFileSync(destination, result.code);
console.log('File bundled and copied successfully!');
} catch (err) {
console.error('Error bundling file:', err);
}
};
// Initial bundle and copy
Promise.all([bundleAndCopyFile(source1, destination1)])
.then(() => {
// Add an empty line after all operations are complete - It looks better in the terminal :)
console.log('');
})
.catch(err => {
console.error('Error in processing files:', err);
});
@@ -1,6 +0,0 @@
.pageContainer {
width: 100%;
max-width: 960px;
margin: 0 auto;
padding: 0 24px 64px;
}
-16
View File
@@ -1,16 +0,0 @@
import type { Metadata } from 'next';
import styles from './layout.module.css';
export const metadata: Metadata = {
title: 'Canon',
description: 'UI library for Backstage',
};
export default function DocsLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return <div className={styles.pageContainer}>{children}</div>;
}
@@ -1,87 +0,0 @@
'use client';
import { ReactNode } from 'react';
import { Grid, Flex, Text } from '../../../../../packages/canon';
import { screenSizes } from '@/utils/data';
import { Frame } from '@/components/Frame';
import { usePlayground } from '@/utils/playground-context';
import {
ButtonSnippet,
CheckboxSnippet,
HeadingSnippet,
TextSnippet,
} from '@/snippets/stories-snippets';
import styles from './styles.module.css';
export default function PlaygroundPage() {
const { selectedScreenSizes } = usePlayground();
const filteredScreenSizes = screenSizes.filter(item =>
selectedScreenSizes.includes(item.slug),
);
if (filteredScreenSizes.length === 0) {
return (
<div className={styles.containerEmpty}>
<Content />
</div>
);
}
return (
<div className={styles.container}>
{filteredScreenSizes.map(screenSize => (
<div
className={styles.breakpointContainer}
style={{ width: screenSize.width }}
key={screenSize.slug}
>
<Text>
{screenSize.title} - {screenSize.width}px
</Text>
<div className={styles.breakpointContent}>
<Frame>
<Content />
</Frame>
</div>
</div>
))}
</div>
);
}
const Content = () => {
const { selectedComponents } = usePlayground();
return (
<Flex direction="column" gap="4">
{selectedComponents.find(c => c === 'button') && (
<Line content={<ButtonSnippet story="Playground" />} title="Button" />
)}
{selectedComponents.find(c => c === 'checkbox') && (
<Line
content={<CheckboxSnippet story="Playground" />}
title="Checkbox"
/>
)}
{selectedComponents.find(c => c === 'heading') && (
<Line content={<HeadingSnippet story="Playground" />} title="Heading" />
)}
{selectedComponents.find(c => c === 'text') && (
<Line content={<TextSnippet story="Playground" />} title="Text" />
)}
</Flex>
);
};
const Line = ({ content, title }: { content: ReactNode; title: string }) => {
return (
<Grid.Root gap={{ xs: '2', md: '4' }}>
<Grid.Item colSpan="2">
<Text>{title}</Text>
</Grid.Item>
<Grid.Item colSpan="10">{content}</Grid.Item>
</Grid.Root>
);
};
@@ -1,36 +0,0 @@
.container {
height: 100vh;
display: flex;
flex-direction: row;
gap: 24px;
overflow-x: scroll;
}
.containerEmpty {
padding: 78px 40px;
}
.breakpointContainer {
flex-shrink: 0;
margin-top: 40px;
height: calc(100vh - 86px);
display: flex;
flex-direction: column;
gap: 8px;
&:first-child {
margin-left: 48px;
}
&:last-child {
margin-right: 48px;
}
}
.breakpointContent {
height: 100%;
border-radius: 4px;
border: 1px solid var(--border);
background-color: var(--bg);
padding: 16px;
}
-44
View File
@@ -1,44 +0,0 @@
import type { Metadata } from 'next';
import { Sidebar } from '../components/Sidebar';
import { Toolbar } from '@/components/Toolbar';
import { Providers } from './providers';
import { CustomTheme } from '@/components/CustomTheme';
import styles from '../css/page.module.css';
import '../css/globals.css';
import '/public/core.css';
import '/public/components.css';
export const metadata: Metadata = {
title: 'Canon',
description: 'UI library for Backstage',
metadataBase: new URL('https://canon.backstage.io'),
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html
lang="en"
data-theme="light"
data-theme-name="default"
suppressHydrationWarning
>
<body>
<Providers>
<div className={styles.global}>
<Sidebar />
<div className={styles.container}>
<Toolbar />
{children}
</div>
<CustomTheme />
</div>
</Providers>
</body>
</html>
);
}
@@ -1,43 +0,0 @@
import { changelog } from '@/utils/changelog';
import { MDXRemote } from 'next-mdx-remote-client/rsc';
import { formattedMDXComponents } from '@/mdx-components';
export function Changelog() {
// Group changelog entries by version
const groupedChangelog = changelog.reduce((acc, entry) => {
if (!acc[entry.version]) {
acc[entry.version] = [];
}
acc[entry.version].push(entry);
return acc;
}, {} as Record<string, typeof changelog>);
// Sort versions in descending order
const sortedVersions = Object.keys(groupedChangelog).sort((a, b) =>
b.localeCompare(a),
);
const content = sortedVersions
.map(version => {
const entries = groupedChangelog[version];
return `## Version ${version}
${entries
.map(e => {
const prs =
e.prs.length > 0 &&
e.prs
.map(
pr =>
`[#${pr}](https://github.com/backstage/backstage/pull/${pr})`,
)
.join(', ');
return `- ${e.description} ${prs}`;
})
.join('\n')}`;
})
.join('\n');
return <MDXRemote components={formattedMDXComponents} source={content} />;
}
@@ -1,68 +0,0 @@
import { Tabs } from '@/components/Tabs';
import { CodeBlock } from '@/components/CodeBlock';
import type { ComponentInfosProps } from './types';
import styles from '@/css/mdx.module.css';
import Link from 'next/link';
import { changelog } from '@/utils/changelog';
import { MDXRemote } from 'next-mdx-remote-client/rsc';
import { formattedMDXComponents } from '@/mdx-components';
export const ComponentInfos = ({
usageCode,
component,
classNames,
}: ComponentInfosProps) => {
const componentChangelog = changelog.filter(c =>
c.components.includes(component),
);
return (
<Tabs.Root>
<Tabs.List>
<Tabs.Tab>Usage</Tabs.Tab>
{classNames && classNames.length > 0 && <Tabs.Tab>Theming</Tabs.Tab>}
<Tabs.Tab>Changelog</Tabs.Tab>
</Tabs.List>
<Tabs.Panel>
<CodeBlock code={usageCode} />
</Tabs.Panel>
{classNames && classNames.length > 0 && (
<Tabs.Panel>
<p className={styles.p}>
We recommend starting with our{' '}
<Link className={styles.a} href="/theme/theming">
global tokens
</Link>{' '}
to customize the library and align it with your brand. For
additional flexibility, you can use the provided class names for
each element listed below.
</p>
<MDXRemote
components={formattedMDXComponents}
source={`${classNames
?.map(className => `- \`${className}\``)
.join('\n')}`}
/>
</Tabs.Panel>
)}
<Tabs.Panel>
<MDXRemote
components={formattedMDXComponents}
source={`${componentChangelog
?.map(change => {
const prs =
change.prs.length > 0 &&
change.prs
.map(
pr =>
`[#${pr}](https://github.com/backstage/backstage/pull/${pr})`,
)
.join(', ');
return `- \`${change.version}\` - ${change.description} ${prs}`;
})
.join('\n')}`}
/>
</Tabs.Panel>
</Tabs.Root>
);
};
@@ -1 +0,0 @@
export { ComponentInfos } from './ComponentInfos';
@@ -1,9 +0,0 @@
import type { Component } from '@/utils/changelog';
import { ReactNode } from 'react';
export interface ComponentInfosProps {
usageCode?: string;
classNames?: string[];
component: Component;
children: ReactNode;
}
-32
View File
@@ -1,32 +0,0 @@
'use client';
import { useEffect, useState } from 'react';
import ReactFrame from 'react-frame-component';
export const Frame = ({ children }: { children: React.ReactNode }) => {
const [show, setShow] = useState(false);
useEffect(() => {
setShow(true);
}, []);
if (!show) return null;
return (
<ReactFrame
loading="lazy"
style={{ width: '100%', height: '100%' }}
initialContent={`<!DOCTYPE html><html data-theme="light"><head></head><body><div class="frame-root"></div></body></html>`}
mountTarget=".frame-root"
head={
<>
<link rel="stylesheet" href="/core.css" />
<link rel="stylesheet" href="/components.css" />
<link rel="stylesheet" href="/backstage.css" />
</>
}
>
{children}
</ReactFrame>
);
};
@@ -1,82 +0,0 @@
'use client';
import Link from 'next/link';
import { components, overview, layoutComponents, theme } from '@/utils/data';
import { motion } from 'motion/react';
import styles from './Sidebar.module.css';
import { usePathname } from 'next/navigation';
import { Fragment } from 'react';
const data = [
{
title: 'Overview',
content: overview,
url: '',
},
{
title: 'Theme',
content: theme,
url: '/theme',
},
{
title: 'Layout Components',
content: layoutComponents,
url: '/components',
},
{
title: 'Components',
content: components,
url: '/components',
},
];
export const Docs = () => {
const pathname = usePathname();
const isPlayground = pathname.includes('/playground');
return (
<motion.div
className={styles.section}
animate={{
x: isPlayground ? -10 : 0,
opacity: isPlayground ? 0 : 1,
visibility: isPlayground ? 'hidden' : 'visible',
}}
initial={{
x: isPlayground ? -10 : 0,
opacity: isPlayground ? 0 : 1,
visibility: isPlayground ? 'hidden' : 'visible',
}}
transition={{ duration: 0.2 }}
>
{data.map(section => {
return (
<Fragment key={section.title}>
<div className={styles.sectionTitle}>{section.title}</div>
{section.content.map(item => {
const isActive = pathname === `${section.url}/${item.slug}`;
return (
<Link
href={`${section.url}/${item.slug}`}
key={item.slug}
className={`${styles.line} ${isActive ? styles.active : ''}`}
>
<div className={styles.lineTitle}>{item.title}</div>
<div className={styles.lineStatus}>
{item.status === 'alpha' && 'Alpha'}
{item.status === 'beta' && 'Beta'}
{item.status === 'inProgress' && 'In Progress'}
{item.status === 'stable' && 'Stable'}
{item.status === 'deprecated' && 'Deprecated'}
</div>
</Link>
);
})}
</Fragment>
);
})}
</motion.div>
);
};
@@ -1,39 +0,0 @@
import styles from './Sidebar.module.css';
import { Docs } from './docs';
import { Playground } from './playground';
import Link from 'next/link';
import { ScrollArea } from '@base-ui-components/react/scroll-area';
export const Sidebar = () => {
return (
<div className={styles.sidebar}>
<ScrollArea.Root className={styles.root}>
<ScrollArea.Viewport className={styles.viewport}>
<div className={styles.content}>
<div className={styles.logoContainer}>
<Link href="/">
<svg
width="89"
height="27"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={styles.logo}
>
<path d="M77.414 9.71h3.036v2.992l-.264-.022c.279-.88.748-1.65 1.408-2.31.675-.66 1.533-.99 2.574-.99 1.086 0 1.9.352 2.442 1.056.558.689.836 1.598.836 2.728v7.502H84.41v-6.6c0-.66-.117-1.159-.352-1.496-.234-.338-.623-.506-1.166-.506-.601 0-1.122.271-1.562.814a4.321 4.321 0 0 0-.88 1.848v5.94h-3.036V9.71ZM69.868 21.04c-1.13 0-2.142-.257-3.036-.77a5.547 5.547 0 0 1-2.068-2.09c-.484-.895-.726-1.892-.726-2.992 0-1.115.242-2.112.726-2.992a5.503 5.503 0 0 1 2.068-2.112c.88-.514 1.892-.77 3.036-.77 1.144 0 2.156.256 3.036.77a5.347 5.347 0 0 1 2.046 2.112c.498.88.748 1.87.748 2.97 0 1.114-.25 2.12-.748 3.014a5.343 5.343 0 0 1-2.068 2.09c-.88.513-1.885.77-3.014.77Zm0-2.618c.557 0 1.048-.132 1.474-.396a2.79 2.79 0 0 0 .99-1.144c.234-.499.352-1.064.352-1.694 0-.63-.118-1.188-.352-1.672a2.764 2.764 0 0 0-.99-1.166c-.426-.279-.917-.418-1.474-.418-.558 0-1.05.14-1.474.418a2.764 2.764 0 0 0-.99 1.166c-.22.484-.33 1.041-.33 1.672 0 .63.11 1.195.33 1.694.234.484.564.865.99 1.144.425.264.916.396 1.474.396ZM52.385 9.71h3.036v2.992l-.264-.022c.279-.88.748-1.65 1.408-2.31.675-.66 1.533-.99 2.574-.99 1.085 0 1.9.352 2.442 1.056.557.689.836 1.598.836 2.728v7.502h-3.036v-6.6c0-.66-.117-1.159-.352-1.496-.235-.338-.623-.506-1.166-.506-.601 0-1.122.271-1.562.814a4.321 4.321 0 0 0-.88 1.848v5.94h-3.036V9.71ZM43.904 20.952c-1.026 0-1.87-.308-2.53-.924-.66-.616-.99-1.416-.99-2.398 0-1.115.418-2.01 1.254-2.684.85-.69 2.105-1.034 3.762-1.034h2.75l-.924.352v-.462c0-.572-.176-1.02-.528-1.342-.352-.338-.931-.506-1.738-.506-.69 0-1.386.154-2.09.462-.704.308-1.29.69-1.76 1.144v-2.882c.47-.352 1.1-.66 1.892-.924a7.942 7.942 0 0 1 2.486-.396c1.599 0 2.78.41 3.542 1.232.778.806 1.166 1.914 1.166 3.322v5.742c0 .176.008.352.022.528.03.161.066.322.11.484h-3.014v-3.3l.044 1.386a4.044 4.044 0 0 1-1.32 1.606c-.572.396-1.283.594-2.134.594Zm.858-2.156c.558 0 1.049-.206 1.474-.616.44-.426.77-.954.99-1.584v-.792h-1.562c-.762 0-1.334.146-1.716.44-.381.278-.572.674-.572 1.188 0 .41.125.74.374.99.264.25.602.374 1.012.374ZM34.66 21.04c-1.525 0-2.874-.345-4.047-1.034-1.174-.704-2.09-1.68-2.75-2.926-.646-1.247-.968-2.662-.968-4.246 0-1.584.322-2.992.968-4.224.66-1.232 1.576-2.193 2.75-2.882 1.173-.704 2.522-1.056 4.048-1.056.968 0 1.818.11 2.552.33.748.22 1.356.506 1.826.858v3.498c-.396-.484-.96-.895-1.694-1.232-.719-.338-1.51-.506-2.376-.506-.939 0-1.775.22-2.508.66-.719.44-1.284 1.056-1.694 1.848-.396.792-.594 1.694-.594 2.706 0 1.026.198 1.943.594 2.75.41.792.975 1.408 1.694 1.848.733.44 1.57.66 2.508.66.88 0 1.68-.162 2.398-.484.718-.323 1.276-.726 1.672-1.21v3.41a5.686 5.686 0 0 1-1.87.902c-.704.22-1.54.33-2.508.33ZM11.275 6.271c.276.526.019 1.152-.464 1.498a5.846 5.846 0 0 0 1.004 10.082c.454.205.789.632.789 1.13v6.206a.837.837 0 0 1-.838.837C5.33 26.024.112 20.804.112 14.366V.862C.112.399.487.024.95.024c4.483 0 8.376 2.533 10.325 6.247Z" />
<path d="M14.037 16.729a4.237 4.237 0 0 0 4.234-4.24 4.237 4.237 0 0 0-4.234-4.242 4.237 4.237 0 0 0-4.234 4.241 4.237 4.237 0 0 0 4.234 4.24Z" />
</svg>
</Link>
</div>
<div className={styles.menu}>
<Docs />
<Playground />
</div>
</div>
</ScrollArea.Viewport>
<ScrollArea.Scrollbar className={styles.scrollbar}>
<ScrollArea.Thumb className={styles.thumb} />
</ScrollArea.Scrollbar>
</ScrollArea.Root>
</div>
);
};
@@ -1,77 +0,0 @@
'use client';
import { components } from '@/utils/data';
import { Checkbox } from '@backstage/canon';
import { motion } from 'motion/react';
import styles from './Sidebar.module.css';
import { usePathname } from 'next/navigation';
import { screenSizes } from '@/utils/data';
import { usePlayground } from '@/utils/playground-context';
export const Playground = () => {
const pathname = usePathname();
const isPlayground = pathname.includes('/playground');
const {
selectedScreenSizes,
setSelectedScreenSizes,
selectedComponents,
setSelectedComponents,
} = usePlayground();
const handleComponentCheckboxChange = (slug: string) => {
if (selectedComponents.find(item => item === slug)) {
const res = selectedComponents.filter(item => item !== slug);
setSelectedComponents(res);
} else {
setSelectedComponents([...selectedComponents, slug]);
}
};
const handleCheckboxChange = (slug: string) => {
if (selectedScreenSizes.find(item => item === slug)) {
const res = selectedScreenSizes.filter(item => item !== slug);
setSelectedScreenSizes(res);
} else {
setSelectedScreenSizes([...selectedScreenSizes, slug]);
}
};
return (
<motion.div
className={styles.section}
animate={{
opacity: isPlayground ? 1 : 0,
x: isPlayground ? 0 : 20,
visibility: isPlayground ? 'visible' : 'hidden',
}}
initial={{
opacity: isPlayground ? 1 : 0,
x: isPlayground ? 0 : 20,
visibility: isPlayground ? 'visible' : 'hidden',
}}
transition={{ duration: 0.2 }}
style={{ position: 'absolute' }}
>
<div className={styles.sectionTitle}>Components</div>
{components.map(({ slug, title }) => (
<div className={styles.line} key={slug}>
<div className={styles.lineTitle}>{title}</div>
<Checkbox
checked={selectedComponents.includes(slug)}
onChange={() => handleComponentCheckboxChange(slug)}
/>
</div>
))}
<div className={styles.sectionTitle}> Screen sizes</div>
{screenSizes.map(({ slug, title }) => (
<div className={styles.line} key={slug}>
<div className={styles.lineTitle}>{title}</div>
<Checkbox
checked={selectedScreenSizes.includes(slug)}
onChange={() => handleCheckboxChange(slug)}
/>
</div>
))}
</motion.div>
);
};
@@ -1,27 +0,0 @@
.root {
margin-top: 40px;
}
.list {
display: flex;
gap: var(--canon-space-6);
border-bottom: 1px solid var(--border);
position: relative;
margin-bottom: var(--canon-space-6);
}
.tab {
all: unset;
cursor: pointer;
padding-bottom: 8px;
}
.indicator {
position: absolute;
bottom: -1px;
left: var(--active-tab-left);
width: var(--active-tab-width);
height: 1px;
background-color: var(--primary);
transition: all 0.2s ease-in-out;
}
@@ -1,18 +0,0 @@
import { ThemeSelector } from './theme';
import { ThemeNameSelector } from './theme-name';
import styles from './styles.module.css';
import { Nav } from './nav';
export const Toolbar = () => {
return (
<div className={styles.toolbar}>
<div>
<Nav />
</div>
<div className={styles.actions}>
<ThemeNameSelector />
<ThemeSelector />
</div>
</div>
);
};
@@ -1,78 +0,0 @@
.tabs {
display: none;
}
@media (min-width: 768px) {
.tabs {
display: block;
height: 60px;
}
}
.tabsTheme {
width: 142px;
border-radius: 0.375rem;
background-color: var(--bg);
transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
}
.list {
display: flex;
position: relative;
z-index: 0;
gap: var(--canon-space-8);
}
.tab {
all: unset;
height: 60px;
color: var(--secondary);
font-size: var(--canon-font-size-3);
font-weight: var(--canon-font-weight-bold);
cursor: pointer;
transition: color 0.2s ease-in-out;
&:hover {
color: var(--primary);
}
&[data-selected] {
color: var(--primary);
& p {
color: var(--primary);
}
}
&:focus-visible {
position: relative;
&::before {
content: '';
position: absolute;
inset: 0.25rem 0;
border-radius: 0.25rem;
outline: 2px solid var(--panel);
outline-offset: -1px;
}
}
}
.tab p {
color: var(--secondary) !important;
}
.indicator {
position: absolute;
z-index: -1;
left: 0;
bottom: -1px;
translate: var(--active-tab-left) -50%;
width: var(--active-tab-width);
height: 1px;
border-radius: 0.25rem;
background-color: var(--primary);
transition-property: translate, width, background-color;
transition-duration: 200ms;
transition-timing-function: ease-in-out;
}
-49
View File
@@ -1,49 +0,0 @@
'use client';
import { Tabs } from '@base-ui-components/react/tabs';
import { usePathname } from 'next/navigation';
import { useRouter } from 'next/navigation';
import styles from './nav.module.css';
export const Nav = () => {
const pathname = usePathname();
const router = useRouter();
const onValueChange = (value: string) => {
if (value === 'docs') {
router.push('/');
} else {
router.push('/playground');
}
};
return (
<Tabs.Root
className={styles.tabs}
value={pathname.includes('playground') ? 'playground' : 'docs'}
onValueChange={onValueChange}
>
<Tabs.List className={styles.list}>
<Tabs.Tab
className={styles.tab}
value="docs"
onClick={() => {
router.push('/');
}}
>
Documentation
</Tabs.Tab>
<Tabs.Tab
className={styles.tab}
value="playground"
onClick={() => {
router.push('/playground');
}}
>
Playground
</Tabs.Tab>
<Tabs.Indicator className={styles.indicator} />
</Tabs.List>
</Tabs.Root>
);
};
@@ -1,23 +0,0 @@
.toolbar {
position: sticky;
top: 16px;
left: 0;
right: 0;
border-radius: 8px;
z-index: 10;
background-color: var(--panel);
height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 var(--canon-space-6);
transition: background-color 0.2s ease-in-out;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.025);
border: 1px solid var(--border);
}
.actions {
display: flex;
align-items: center;
gap: var(--canon-space-4);
}
@@ -1,66 +0,0 @@
import { PropsTable } from '@/components/PropsTable';
import { HeadingSnippet } from '@/snippets/stories-snippets';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
import {
headingPropDefs,
headingUsageSnippet,
headingDefaultSnippet,
headingVariantsSnippet,
headingTruncateSnippet,
headingResponsiveSnippet,
} from './heading.props';
import { ComponentInfos } from '@/components/ComponentInfos';
# Heading
Headings are used to structure the content of your page.
<Snippet
py={4}
preview={<HeadingSnippet story="Title1" />}
code={headingDefaultSnippet}
/>
<ComponentInfos
component="heading"
classNames={['canon-Heading']}
usageCode={headingUsageSnippet}
/>
## API reference
<PropsTable data={headingPropDefs} />
## Examples
### All variants
The `Heading` component has a `variant` prop that can be used to change the
appearance of the heading.
<Snippet
py={2}
open
preview={<HeadingSnippet story="AllVariants" />}
code={headingVariantsSnippet}
/>
### Truncate
The `Heading` component has a `truncate` prop that can be used to truncate the
heading.
<Snippet
py={2}
open
preview={<HeadingSnippet story="Truncate" />}
code={headingTruncateSnippet}
/>
### Responsive
You can also use the `variant` prop to change the appearance of the text based
on the screen size.
<CodeBlock code={headingResponsiveSnippet} />
@@ -1,48 +0,0 @@
import {
classNamePropDefs,
stylePropDefs,
type PropDef,
} from '@/utils/propDefs';
export const headingPropDefs: Record<string, PropDef> = {
variant: {
type: 'enum',
values: ['display', 'title1', 'title2', 'title3', 'title4', 'title5'],
responsive: true,
},
children: {
type: 'enum',
values: ['ReactNode'],
responsive: false,
},
truncate: {
type: 'boolean',
default: 'false',
},
...classNamePropDefs,
...stylePropDefs,
};
export const headingUsageSnippet = `import { Heading } from '@backstage/canon';
<Heading />`;
export const headingDefaultSnippet = `<Heading variant="title1">Hello World!</Heading>`;
export const headingVariantsSnippet = `<Flex direction="column" gap="4">
<Heading variant="display">Display</Heading>
<Heading variant="title1">Title 1</Heading>
<Heading variant="title2">Title 2</Heading>
<Heading variant="title3">Title 3</Heading>
<Heading variant="title4">Title 4</Heading>
</Flex>`;
export const headingTruncateSnippet = `<Heading style={{ maxWidth: '400px' }} truncate>
A man looks at a painting in a museum and says, "Brothers and sisters I
have none, but that man's father is my father's son." Who is
in the painting?
</Heading>`;
export const headingResponsiveSnippet = `<Heading variant={{ initial: 'title2', lg: 'title1' }}>
Responsive heading
</Heading>`;

Some files were not shown because too many files have changed in this diff Show More