Merge branch 'master' into canon-merge-field-input
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend-module-bitbucket-provider': patch
|
||||
---
|
||||
|
||||
Enabled persistency of scopes for Bitbucket Cloud.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog': minor
|
||||
---
|
||||
|
||||
Added support of filtering based on system columns in catalog table
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Bumped create-app version.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Bump @module-federation/enhanced ^0.9.0 to fix GHSA-593f-38f6-jp5m
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/canon': patch
|
||||
---
|
||||
|
||||
Updated styles for the Menu component in Canon.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-unprocessed-entities': patch
|
||||
---
|
||||
|
||||
Added confirmation popup for delete entities in Catalog Unprocessed Entities plugin
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend-module-oidc-provider': patch
|
||||
---
|
||||
|
||||
Added custom timeout setting for oidc provider
|
||||
|
||||
Here is an example of how to use a custom timeout with the configuration:
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
oidc:
|
||||
production:
|
||||
clientId: ${AUTH_GOOGLE_CLIENT_ID}
|
||||
clientSecret: ${AUTH_GOOGLE_CLIENT_SECRET}
|
||||
timeout:
|
||||
seconds: 30
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
add filter for repos by membership and topics
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/canon': patch
|
||||
---
|
||||
|
||||
Add global CSS reset for anchor tags.
|
||||
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"mode": "pre",
|
||||
"tag": "next",
|
||||
"initialVersions": {
|
||||
"example-app": "0.2.107",
|
||||
"@backstage/app-defaults": "1.6.0",
|
||||
"example-app-next": "0.0.21",
|
||||
"app-next-example-plugin": "0.0.21",
|
||||
"example-backend": "0.0.36",
|
||||
"@backstage/backend-app-api": "1.2.1",
|
||||
"@backstage/backend-defaults": "0.8.2",
|
||||
"@backstage/backend-dev-utils": "0.1.5",
|
||||
"@backstage/backend-dynamic-feature-service": "0.6.1",
|
||||
"example-backend-legacy": "0.2.108",
|
||||
"@backstage/backend-openapi-utils": "0.5.1",
|
||||
"@backstage/backend-plugin-api": "1.2.1",
|
||||
"@backstage/backend-test-utils": "1.3.1",
|
||||
"@backstage/canon": "0.2.0",
|
||||
"@backstage/catalog-client": "1.9.1",
|
||||
"@backstage/catalog-model": "1.7.3",
|
||||
"@backstage/cli": "0.31.0",
|
||||
"@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.0",
|
||||
"@backstage/core-app-api": "1.16.0",
|
||||
"@backstage/core-compat-api": "0.4.0",
|
||||
"@backstage/core-components": "0.17.0",
|
||||
"@backstage/core-plugin-api": "1.10.5",
|
||||
"@backstage/create-app": "0.6.0",
|
||||
"@backstage/dev-utils": "1.1.8",
|
||||
"e2e-test": "0.2.26",
|
||||
"@backstage/e2e-test-utils": "0.1.1",
|
||||
"@backstage/errors": "1.2.7",
|
||||
"@backstage/eslint-plugin": "0.1.10",
|
||||
"@backstage/frontend-app-api": "0.11.0",
|
||||
"@backstage/frontend-defaults": "0.2.0",
|
||||
"@internal/frontend": "0.0.7",
|
||||
"@backstage/frontend-plugin-api": "0.10.0",
|
||||
"@backstage/frontend-test-utils": "0.3.0",
|
||||
"@backstage/integration": "1.16.2",
|
||||
"@backstage/integration-aws-node": "0.1.15",
|
||||
"@backstage/integration-react": "1.2.5",
|
||||
"@internal/opaque": "0.0.1",
|
||||
"@backstage/release-manifests": "0.0.12",
|
||||
"@backstage/repo-tools": "0.13.1",
|
||||
"@internal/scaffolder": "0.0.7",
|
||||
"@techdocs/cli": "1.9.1",
|
||||
"techdocs-cli-embedded-app": "0.2.106",
|
||||
"@backstage/test-utils": "1.7.6",
|
||||
"@backstage/theme": "0.6.4",
|
||||
"@backstage/types": "1.2.1",
|
||||
"@backstage/version-bridge": "1.0.11",
|
||||
"yarn-plugin-backstage": "0.0.4",
|
||||
"@backstage/plugin-api-docs": "0.12.5",
|
||||
"@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.9",
|
||||
"@backstage/plugin-app": "0.1.7",
|
||||
"@backstage/plugin-app-backend": "0.5.0",
|
||||
"@backstage/plugin-app-node": "0.1.31",
|
||||
"@backstage/plugin-app-visualizer": "0.1.17",
|
||||
"@backstage/plugin-auth-backend": "0.24.4",
|
||||
"@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.1",
|
||||
"@backstage/plugin-auth-backend-module-auth0-provider": "0.2.1",
|
||||
"@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.1",
|
||||
"@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.6",
|
||||
"@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.1",
|
||||
"@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.1",
|
||||
"@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.1",
|
||||
"@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.1",
|
||||
"@backstage/plugin-auth-backend-module-github-provider": "0.3.1",
|
||||
"@backstage/plugin-auth-backend-module-gitlab-provider": "0.3.1",
|
||||
"@backstage/plugin-auth-backend-module-google-provider": "0.3.1",
|
||||
"@backstage/plugin-auth-backend-module-guest-provider": "0.2.6",
|
||||
"@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.1",
|
||||
"@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.1",
|
||||
"@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.6",
|
||||
"@backstage/plugin-auth-backend-module-oidc-provider": "0.4.1",
|
||||
"@backstage/plugin-auth-backend-module-okta-provider": "0.2.1",
|
||||
"@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.1",
|
||||
"@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.1",
|
||||
"@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.1",
|
||||
"@backstage/plugin-auth-node": "0.6.1",
|
||||
"@backstage/plugin-auth-react": "0.1.13",
|
||||
"@backstage/plugin-bitbucket-cloud-common": "0.2.28",
|
||||
"@backstage/plugin-catalog": "1.28.0",
|
||||
"@backstage/plugin-catalog-backend": "1.32.0",
|
||||
"@backstage/plugin-catalog-backend-module-aws": "0.4.9",
|
||||
"@backstage/plugin-catalog-backend-module-azure": "0.3.3",
|
||||
"@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.0",
|
||||
"@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.4.6",
|
||||
"@backstage/plugin-catalog-backend-module-bitbucket-server": "0.3.3",
|
||||
"@backstage/plugin-catalog-backend-module-gcp": "0.3.6",
|
||||
"@backstage/plugin-catalog-backend-module-gerrit": "0.3.0",
|
||||
"@backstage/plugin-catalog-backend-module-github": "0.7.11",
|
||||
"@backstage/plugin-catalog-backend-module-github-org": "0.3.8",
|
||||
"@backstage/plugin-catalog-backend-module-gitlab": "0.6.4",
|
||||
"@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.7",
|
||||
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.6.4",
|
||||
"@backstage/plugin-catalog-backend-module-ldap": "0.11.3",
|
||||
"@backstage/plugin-catalog-backend-module-logs": "0.1.8",
|
||||
"@backstage/plugin-catalog-backend-module-msgraph": "0.6.8",
|
||||
"@backstage/plugin-catalog-backend-module-openapi": "0.2.8",
|
||||
"@backstage/plugin-catalog-backend-module-puppetdb": "0.2.8",
|
||||
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.6",
|
||||
"@backstage/plugin-catalog-backend-module-unprocessed": "0.5.6",
|
||||
"@backstage/plugin-catalog-common": "1.1.3",
|
||||
"@backstage/plugin-catalog-graph": "0.4.17",
|
||||
"@backstage/plugin-catalog-import": "0.12.11",
|
||||
"@backstage/plugin-catalog-node": "1.16.1",
|
||||
"@backstage/plugin-catalog-react": "1.16.0",
|
||||
"@backstage/plugin-catalog-unprocessed-entities": "0.2.15",
|
||||
"@backstage/plugin-catalog-unprocessed-entities-common": "0.0.7",
|
||||
"@backstage/plugin-config-schema": "0.1.66",
|
||||
"@backstage/plugin-devtools": "0.1.25",
|
||||
"@backstage/plugin-devtools-backend": "0.5.3",
|
||||
"@backstage/plugin-devtools-common": "0.1.15",
|
||||
"@backstage/plugin-events-backend": "0.5.0",
|
||||
"@backstage/plugin-events-backend-module-aws-sqs": "0.4.9",
|
||||
"@backstage/plugin-events-backend-module-azure": "0.2.18",
|
||||
"@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.18",
|
||||
"@backstage/plugin-events-backend-module-gerrit": "0.2.18",
|
||||
"@backstage/plugin-events-backend-module-github": "0.2.18",
|
||||
"@backstage/plugin-events-backend-module-gitlab": "0.2.18",
|
||||
"@backstage/plugin-events-backend-test-utils": "0.1.42",
|
||||
"@backstage/plugin-events-node": "0.4.9",
|
||||
"@internal/plugin-todo-list": "1.0.37",
|
||||
"@internal/plugin-todo-list-backend": "1.0.37",
|
||||
"@internal/plugin-todo-list-common": "1.0.24",
|
||||
"@backstage/plugin-home": "0.8.6",
|
||||
"@backstage/plugin-home-react": "0.1.24",
|
||||
"@backstage/plugin-kubernetes": "0.12.5",
|
||||
"@backstage/plugin-kubernetes-backend": "0.19.4",
|
||||
"@backstage/plugin-kubernetes-cluster": "0.0.23",
|
||||
"@backstage/plugin-kubernetes-common": "0.9.4",
|
||||
"@backstage/plugin-kubernetes-node": "0.2.4",
|
||||
"@backstage/plugin-kubernetes-react": "0.5.5",
|
||||
"@backstage/plugin-notifications": "0.5.3",
|
||||
"@backstage/plugin-notifications-backend": "0.5.4",
|
||||
"@backstage/plugin-notifications-backend-module-email": "0.3.7",
|
||||
"@backstage/plugin-notifications-common": "0.0.8",
|
||||
"@backstage/plugin-notifications-node": "0.2.13",
|
||||
"@backstage/plugin-org": "0.6.37",
|
||||
"@backstage/plugin-org-react": "0.1.36",
|
||||
"@backstage/plugin-permission-backend": "0.5.55",
|
||||
"@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.6",
|
||||
"@backstage/plugin-permission-common": "0.8.4",
|
||||
"@backstage/plugin-permission-node": "0.9.0",
|
||||
"@backstage/plugin-permission-react": "0.4.32",
|
||||
"@backstage/plugin-proxy-backend": "0.6.0",
|
||||
"@backstage/plugin-proxy-node": "0.1.2",
|
||||
"@backstage/plugin-scaffolder": "1.29.0",
|
||||
"@backstage/plugin-scaffolder-backend": "1.31.0",
|
||||
"@backstage/plugin-scaffolder-backend-module-azure": "0.2.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.8",
|
||||
"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.8",
|
||||
"@backstage/plugin-scaffolder-backend-module-gcp": "0.2.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-gitea": "0.2.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-github": "0.6.1",
|
||||
"@backstage/plugin-scaffolder-backend-module-gitlab": "0.8.1",
|
||||
"@backstage/plugin-scaffolder-backend-module-notifications": "0.1.8",
|
||||
"@backstage/plugin-scaffolder-backend-module-rails": "0.5.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-sentry": "0.2.7",
|
||||
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.8",
|
||||
"@backstage/plugin-scaffolder-common": "1.5.10",
|
||||
"@backstage/plugin-scaffolder-node": "0.8.0",
|
||||
"@backstage/plugin-scaffolder-node-test-utils": "0.2.0",
|
||||
"@backstage/plugin-scaffolder-react": "1.14.6",
|
||||
"@backstage/plugin-search": "1.4.24",
|
||||
"@backstage/plugin-search-backend": "2.0.0",
|
||||
"@backstage/plugin-search-backend-module-catalog": "0.3.2",
|
||||
"@backstage/plugin-search-backend-module-elasticsearch": "1.7.0",
|
||||
"@backstage/plugin-search-backend-module-explore": "0.3.0",
|
||||
"@backstage/plugin-search-backend-module-pg": "0.5.42",
|
||||
"@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.7",
|
||||
"@backstage/plugin-search-backend-module-techdocs": "0.4.0",
|
||||
"@backstage/plugin-search-backend-node": "1.3.9",
|
||||
"@backstage/plugin-search-common": "1.2.17",
|
||||
"@backstage/plugin-search-react": "1.8.7",
|
||||
"@backstage/plugin-signals": "0.0.17",
|
||||
"@backstage/plugin-signals-backend": "0.3.2",
|
||||
"@backstage/plugin-signals-node": "0.1.18",
|
||||
"@backstage/plugin-signals-react": "0.0.11",
|
||||
"@backstage/plugin-techdocs": "1.12.4",
|
||||
"@backstage/plugin-techdocs-addons-test-utils": "1.0.46",
|
||||
"@backstage/plugin-techdocs-backend": "2.0.0",
|
||||
"@backstage/plugin-techdocs-common": "0.1.0",
|
||||
"@backstage/plugin-techdocs-module-addons-contrib": "1.1.22",
|
||||
"@backstage/plugin-techdocs-node": "1.13.1",
|
||||
"@backstage/plugin-techdocs-react": "1.2.15",
|
||||
"@backstage/plugin-user-settings": "0.8.20",
|
||||
"@backstage/plugin-user-settings-backend": "0.3.0",
|
||||
"@backstage/plugin-user-settings-common": "0.0.1"
|
||||
},
|
||||
"changesets": [
|
||||
"chilly-sheep-scream",
|
||||
"clever-tomatoes-jump",
|
||||
"create-app-1742907012",
|
||||
"cuddly-dodos-allow",
|
||||
"cuddly-kids-sell",
|
||||
"cuddly-mirrors-ask",
|
||||
"deep-flies-vanish",
|
||||
"early-feet-lay",
|
||||
"every-ties-wink",
|
||||
"famous-dragons-bake",
|
||||
"funny-hotels-cut",
|
||||
"giant-donkeys-punch",
|
||||
"honest-ties-worry",
|
||||
"itchy-times-behave",
|
||||
"large-kings-protect",
|
||||
"lemon-shoes-enter",
|
||||
"metal-animals-notice",
|
||||
"odd-bobcats-hang",
|
||||
"orange-queens-grin",
|
||||
"sad-pots-try",
|
||||
"silver-rocks-invite",
|
||||
"spotty-towns-show",
|
||||
"strange-planes-kneel",
|
||||
"sweet-maps-invent",
|
||||
"swift-boats-add",
|
||||
"tame-sloths-brake",
|
||||
"thin-snails-judge",
|
||||
"tiny-swans-warn",
|
||||
"twenty-forks-cheat",
|
||||
"twenty-walls-join",
|
||||
"wet-penguins-beg",
|
||||
"wide-planets-camp",
|
||||
"witty-planets-sing"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/canon': patch
|
||||
---
|
||||
|
||||
Fix types on the Icon component.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/integration-react': patch
|
||||
---
|
||||
|
||||
Added scope `project` for Bitbucket Cloud.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/integration': patch
|
||||
---
|
||||
|
||||
Mark GitHub `webhookSecret` config property as optional. A `webhookSecret` is not required when creating a GitHub App.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-react': minor
|
||||
'@backstage/plugin-scaffolder': minor
|
||||
---
|
||||
|
||||
add api to retrieve template extensions info from scaffolder-backend
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-unprocessed-entities': patch
|
||||
---
|
||||
|
||||
Fixed the `convertTimeToLocalTimezone` function in the FailedEntities component to correctly parse ISO 8601 date strings and set the timezone to the current local timezone.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
|
||||
---
|
||||
|
||||
Fixed bug in event-based discovery that caused unnecessary API calls to Bitbucket Cloud
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs-module-addons-contrib': patch
|
||||
---
|
||||
|
||||
Fixed rendering issues in `ReportIssue` addon for unsupported repository types and improved shadow DOM event handling. The addon now properly prevents initialization when encountering unsupported repository types and correctly handles selection events within the shadow DOM.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
|
||||
---
|
||||
|
||||
fixed misleading example location annotations in docs
|
||||
@@ -74,7 +74,7 @@ jobs:
|
||||
|
||||
- name: Cache Comment
|
||||
if: ${{ steps.event.outputs.ACTION != 'closed' }}
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
with:
|
||||
path: comment.md
|
||||
key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }}
|
||||
@@ -103,7 +103,7 @@ jobs:
|
||||
|
||||
- name: Fetch cached Manifests File
|
||||
id: cache
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
|
||||
with:
|
||||
path: comment.md
|
||||
key: ${{ needs.setup.outputs.comment-cache-key }}
|
||||
|
||||
@@ -239,7 +239,7 @@ jobs:
|
||||
|
||||
# Use the lower-level cache actions for the success cache, so that we can store the cache even on failed builds
|
||||
- name: restore backstage-cli cache
|
||||
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4
|
||||
with:
|
||||
path: .cache/backstage-cli
|
||||
key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }}
|
||||
@@ -260,7 +260,7 @@ jobs:
|
||||
|
||||
# Always save success cache even if there were failures, that way it can be used in re-triggered builds
|
||||
- name: save backstage-cli cache
|
||||
uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4
|
||||
if: always()
|
||||
with:
|
||||
path: .cache/backstage-cli
|
||||
|
||||
@@ -92,7 +92,7 @@ jobs:
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: stable-openapi-docs
|
||||
path: docs/**/*.api.mdx
|
||||
path: docs/**/api/**/*
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
|
||||
@@ -165,7 +165,7 @@ jobs:
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: next-openapi-docs
|
||||
path: docs/**/*.api.mdx
|
||||
path: docs/**/api/**/*
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
|
||||
@@ -220,7 +220,7 @@ jobs:
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
name: stable-openapi-docs
|
||||
path: docs/**/*.api.mdx
|
||||
path: docs
|
||||
|
||||
- name: grab lastest releases docs
|
||||
run: |
|
||||
@@ -235,7 +235,7 @@ jobs:
|
||||
run: rm -r docs/reference
|
||||
|
||||
- name: clear OpenAPI reference
|
||||
run: find . -name '*.api.mdx' -type f -delete
|
||||
run: find ./docs -name '*.api.mdx' -type f -delete
|
||||
|
||||
# Next docs
|
||||
- name: checkout master
|
||||
@@ -257,7 +257,7 @@ jobs:
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
name: next-openapi-docs
|
||||
path: docs/**/*.api.mdx
|
||||
path: docs
|
||||
|
||||
- name: build microsite
|
||||
run: yarn build
|
||||
|
||||
@@ -94,7 +94,7 @@ jobs:
|
||||
run: yarn backstage-cli config:check --lax
|
||||
|
||||
- name: backstage-cli cache
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
|
||||
with:
|
||||
path: .cache/backstage-cli
|
||||
key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }}
|
||||
|
||||
@@ -13,14 +13,178 @@ permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
stable:
|
||||
runs-on: ubuntu-latest
|
||||
concurrency:
|
||||
group: stable-reference-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: --max-old-space-size=8192
|
||||
|
||||
outputs:
|
||||
release: ${{ steps.find-release.outputs.result }}
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: find latest release
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
||||
id: find-release
|
||||
with:
|
||||
script: |
|
||||
const { data } = await github.rest.repos.listTags({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
per_page: 100,
|
||||
})
|
||||
|
||||
const [{tag}] = data
|
||||
.map(i => i.name)
|
||||
.filter(tag => tag.match(/^v\d+\.\d+\.\d+$/))
|
||||
.map(tag => ({
|
||||
tag,
|
||||
val: tag
|
||||
.slice(1)
|
||||
.split('.')
|
||||
.reduce((val, part) => Number(val) * 1000 + Number(part))
|
||||
}))
|
||||
.sort((a, b) => b.val - a.val)
|
||||
|
||||
return tag
|
||||
result-encoding: string
|
||||
|
||||
- name: checkout latest release
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: refs/tags/${{ steps.find-release.outputs.result }}
|
||||
|
||||
- name: Use Node.js 20.x
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: 20.x
|
||||
registry-url: https://registry.npmjs.org/ # Needed for auth
|
||||
|
||||
- name: yarn install
|
||||
uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17
|
||||
with:
|
||||
cache-prefix: ${{ runner.os }}-v20.x
|
||||
|
||||
- name: build API reference
|
||||
run: yarn build:api-docs
|
||||
|
||||
- name: upload API reference
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: stable-reference
|
||||
path: docs/reference/
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
|
||||
- name: microsite yarn install
|
||||
run: yarn install --immutable
|
||||
working-directory: microsite
|
||||
|
||||
- name: build OpenAPI API docs
|
||||
working-directory: microsite
|
||||
run: yarn docusaurus gen-api-docs all
|
||||
|
||||
- name: upload OpenAPI API docs
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: stable-openapi-docs
|
||||
path: docs/**/api/**/*
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
next:
|
||||
runs-on: ubuntu-latest
|
||||
concurrency:
|
||||
group: next-reference-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: --max-old-space-size=8192
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: checkout master
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Use Node.js 20.x
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: 20.x
|
||||
registry-url: https://registry.npmjs.org/ # Needed for auth
|
||||
|
||||
- name: yarn install
|
||||
uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17
|
||||
with:
|
||||
cache-prefix: ${{ runner.os }}-v20.x
|
||||
|
||||
- name: build API reference
|
||||
run: yarn build:api-docs
|
||||
|
||||
- name: upload API reference
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: next-reference
|
||||
path: docs/reference/
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
|
||||
# Also build and upload storybook
|
||||
- name: storybook yarn install
|
||||
run: yarn install --immutable
|
||||
working-directory: storybook
|
||||
|
||||
- name: storybook build
|
||||
run: yarn build-storybook
|
||||
working-directory: storybook
|
||||
|
||||
- name: storybook upload
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: storybook
|
||||
path: storybook/dist/
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
|
||||
- name: microsite yarn install
|
||||
run: yarn install --immutable
|
||||
working-directory: microsite
|
||||
|
||||
- name: build OpenAPI API docs
|
||||
working-directory: microsite
|
||||
run: yarn docusaurus gen-api-docs all
|
||||
|
||||
- name: upload OpenAPI API docs
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: next-openapi-docs
|
||||
path: docs/**/api/**/*
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
|
||||
build-microsite:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: --max-old-space-size=8192
|
||||
NODE_OPTIONS: --max-old-space-size=16384
|
||||
DOCUSAURUS_SSR_CONCURRENCY: 5
|
||||
|
||||
needs:
|
||||
- stable
|
||||
- next
|
||||
|
||||
name: Microsite
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
@@ -50,19 +214,63 @@ jobs:
|
||||
run: yarn install --immutable
|
||||
working-directory: microsite
|
||||
|
||||
- name: build API reference
|
||||
run: yarn build:api-docs
|
||||
|
||||
- name: Build MkDocs for TechDocs
|
||||
run: mkdocs build --strict
|
||||
|
||||
- name: verify yarn dependency duplicates
|
||||
run: node scripts/verify-lockfile-duplicates.js
|
||||
|
||||
- name: prettier
|
||||
run: yarn prettier:check
|
||||
working-directory: microsite
|
||||
|
||||
- name: verify yarn dependency duplicates
|
||||
run: node scripts/verify-lockfile-duplicates.js
|
||||
|
||||
- name: download stable reference
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
name: stable-reference
|
||||
path: docs/reference
|
||||
|
||||
- name: download stable OpenAPI API docs
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
name: stable-openapi-docs
|
||||
path: docs
|
||||
|
||||
- name: grab lastest releases docs
|
||||
run: |
|
||||
git fetch origin master --depth 1
|
||||
git checkout FETCH_HEAD -- docs/releases
|
||||
|
||||
- name: generate stable docs
|
||||
run: yarn docusaurus docs:version stable
|
||||
working-directory: microsite
|
||||
|
||||
- name: clear API reference
|
||||
run: rm -r docs/reference
|
||||
|
||||
- name: clear OpenAPI reference
|
||||
run: find ./docs -name '*.api.mdx' -type f -delete
|
||||
|
||||
- name: build API reference
|
||||
run: yarn build:api-docs
|
||||
|
||||
- name: checkout master
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
clean: false
|
||||
|
||||
- name: Build MkDocs for TechDocs
|
||||
run: mkdocs build --strict
|
||||
|
||||
- name: download next reference
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
name: next-reference
|
||||
path: docs/reference
|
||||
|
||||
- name: download next OpenAPI API docs
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
name: next-openapi-docs
|
||||
path: docs
|
||||
|
||||
- name: build microsite
|
||||
run: yarn build
|
||||
working-directory: microsite
|
||||
|
||||
@@ -14,16 +14,16 @@
|
||||
"@mdx-js/loader": "^3.1.0",
|
||||
"@mdx-js/react": "^3.1.0",
|
||||
"@next/mdx": "^15.1.4",
|
||||
"@storybook/react": "^8.4.7",
|
||||
"@storybook/react": "^8.6.8",
|
||||
"@uiw/codemirror-themes": "^4.23.7",
|
||||
"@uiw/react-codemirror": "^4.23.7",
|
||||
"motion": "^12.4.1",
|
||||
"next": "14.2.23",
|
||||
"next": "14.2.25",
|
||||
"react": "^18.0.2",
|
||||
"react-dom": "^18.0.2",
|
||||
"react-frame-component": "^5.2.7",
|
||||
"shiki": "^1.26.1",
|
||||
"storybook": "^8.4.7"
|
||||
"storybook": "^8.6.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/mdx": "^2.0.13",
|
||||
|
||||
@@ -2,7 +2,7 @@ import { CodeBlock } from '@/components/CodeBlock';
|
||||
import { PropsTable } from '@/components/PropsTable';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { BoxPreview } from '@/snippets/box';
|
||||
import { BoxSnippet } from '@/snippets/stories-snippets';
|
||||
import { boxPropDefs } from './props';
|
||||
import { spacingPropDefs } from '../../../../utils/propDefs';
|
||||
|
||||
@@ -12,7 +12,7 @@ Box is the lowest-level component in Canon. It provides a consistent API for sty
|
||||
|
||||
<Snippet
|
||||
py={4}
|
||||
preview={<BoxPreview />}
|
||||
preview={<BoxSnippet story="Preview" />}
|
||||
code={`<Box>
|
||||
<DecorativeBox />
|
||||
</Box>`}
|
||||
|
||||
@@ -2,15 +2,8 @@ import { PropsTable } from '@/components/PropsTable';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
import {
|
||||
ButtonPreview,
|
||||
ButtonSizes,
|
||||
ButtonWithIcons,
|
||||
ButtonFullWidth,
|
||||
ButtonDisabled,
|
||||
ButtonResponsive,
|
||||
} from '@/snippets/button';
|
||||
import { buttonVariants } from '@/snippets/_snippets';
|
||||
import { ButtonSnippet } from '@/snippets/stories-snippets';
|
||||
import { buttonVariants } from '@/snippets/code-snippets';
|
||||
import { buttonPropDefs } from './props';
|
||||
|
||||
# Button
|
||||
@@ -20,7 +13,7 @@ A button component that can be used to trigger actions.
|
||||
<Snippet
|
||||
align="center"
|
||||
py={4}
|
||||
preview={<ButtonPreview />}
|
||||
preview={<ButtonSnippet story="Variants" />}
|
||||
code={`<Inline alignY="center">
|
||||
<Button iconStart="cloud" variant="primary">
|
||||
Button
|
||||
@@ -71,7 +64,7 @@ Here's a view when buttons have different variants.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<ButtonPreview />}
|
||||
preview={<ButtonSnippet story="Variants" />}
|
||||
code={buttonVariants}
|
||||
/>
|
||||
|
||||
@@ -83,7 +76,7 @@ Here's a view when buttons have different sizes.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<ButtonSizes />}
|
||||
preview={<ButtonSnippet story="Sizes" />}
|
||||
code={`<Inline alignY="center">
|
||||
<Button size="small">Small</Button>
|
||||
<Button size="medium">Medium</Button>
|
||||
@@ -98,7 +91,7 @@ Here's a view when buttons have icons.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<ButtonWithIcons />}
|
||||
preview={<ButtonSnippet story="WithIcons" />}
|
||||
code={`<Inline alignY="center">
|
||||
<Button iconStart="cloud">Button</Button>
|
||||
<Button iconEnd="chevronRight">Button</Button>
|
||||
@@ -114,7 +107,7 @@ Here's a view when buttons are full width.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<ButtonFullWidth />}
|
||||
preview={<ButtonSnippet story="FullWidth" />}
|
||||
code={`<Flex style={{ width: '300px' }}>
|
||||
<Button fullWidth>Full width</Button>
|
||||
</Flex>`}
|
||||
@@ -128,7 +121,7 @@ Here's a view when buttons are disabled.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<ButtonDisabled />}
|
||||
preview={<ButtonSnippet story="Disabled" />}
|
||||
code={`<Button disabled>Button</Button>`}
|
||||
/>
|
||||
|
||||
@@ -136,11 +129,7 @@ Here's a view when buttons are disabled.
|
||||
|
||||
Here's a view when buttons are responsive.
|
||||
|
||||
<Snippet
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<ButtonResponsive />}
|
||||
<CodeBlock
|
||||
code={`<Button variant={{ initial: 'primary', lg: 'secondary' }}>
|
||||
Responsive Button
|
||||
</Button>`}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { PropsTable } from '@/components/PropsTable';
|
||||
import { CheckboxPreview, CheckboxAllVariants } from '@/snippets/checkbox';
|
||||
import { CheckboxSnippet } from '@/snippets/stories-snippets';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
@@ -11,8 +11,9 @@ import { checkboxPropDefs } from './props';
|
||||
A checkbox component that can be used to trigger actions.
|
||||
|
||||
<Snippet
|
||||
align="center"
|
||||
py={4}
|
||||
preview={<CheckboxPreview />}
|
||||
preview={<CheckboxSnippet story="Default" />}
|
||||
code={`<Checkbox label="Accept terms and conditions" />`}
|
||||
/>
|
||||
|
||||
@@ -55,7 +56,7 @@ Here's a view when checkboxes have different variants.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<CheckboxAllVariants />}
|
||||
preview={<CheckboxSnippet story="AllVariants" />}
|
||||
code={`<Inline alignY="center">
|
||||
<Checkbox />
|
||||
<Checkbox checked />
|
||||
|
||||
@@ -2,7 +2,7 @@ import { CodeBlock } from '@/components/CodeBlock';
|
||||
import { PropsTable } from '@/components/PropsTable';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { ContainerPreview } from '@/snippets/container';
|
||||
import { ContainerSnippet } from '@/snippets/stories-snippets';
|
||||
import { containerPropDefs } from './props';
|
||||
|
||||
# Container
|
||||
@@ -12,7 +12,7 @@ content on the page.
|
||||
|
||||
<Snippet
|
||||
py={4}
|
||||
preview={<ContainerPreview />}
|
||||
preview={<ContainerSnippet story="Preview" />}
|
||||
code={`<Container>
|
||||
<DecorativeBox />
|
||||
</Container>`}
|
||||
|
||||
@@ -2,7 +2,7 @@ import { PropsTable } from '@/components/PropsTable';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
import { FieldPreview } from '@/snippets/field';
|
||||
import { FieldSnippet } from '@/snippets/stories-snippets';
|
||||
import { BaseUI } from '@/components/HeadlessBanners/BaseUI';
|
||||
import {
|
||||
fieldRootPropDefs,
|
||||
@@ -15,7 +15,12 @@ import {
|
||||
|
||||
A wrapper around `Input` or `Select` component to add label, description and error messages..
|
||||
|
||||
<Snippet align="center" py={4} preview={<FieldPreview />} code={`<Field />`} />
|
||||
<Snippet
|
||||
align="center"
|
||||
py={4}
|
||||
preview={<FieldSnippet story="Default" />}
|
||||
code={`<Field />`}
|
||||
/>
|
||||
|
||||
<Tabs.Root>
|
||||
<Tabs.List>
|
||||
@@ -85,7 +90,7 @@ Here's a simple input with a label and description.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<FieldPreview />}
|
||||
preview={<FieldSnippet story="WithLabelAndDescription" />}
|
||||
code={`<Field>
|
||||
<Field.Label>Name</Field.Label>
|
||||
<Field.Description>Visible on your profile</Field.Description>
|
||||
|
||||
@@ -6,9 +6,9 @@ import {
|
||||
flexSimple,
|
||||
flexResponsive,
|
||||
flexAlign,
|
||||
} from '@/snippets/_snippets';
|
||||
} from '@/snippets/code-snippets';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { FlexPreview } from '@/snippets/flex';
|
||||
import { FlexSnippet } from '@/snippets/stories-snippets';
|
||||
import { flexPropDefs } from './props';
|
||||
import { spacingPropDefs } from '../../../../utils/propDefs';
|
||||
|
||||
@@ -21,7 +21,7 @@ columns. All values are responsive.
|
||||
<Snippet
|
||||
py={4}
|
||||
align="center"
|
||||
preview={<FlexPreview />}
|
||||
preview={<FlexSnippet story="Default" />}
|
||||
code={`<Flex>
|
||||
<DecorativeBox />
|
||||
<DecorativeBox />
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
import { PropsTable } from '@/components/PropsTable';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { grid } from '@/snippets/_snippets';
|
||||
import { grid } from '@/snippets/code-snippets';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { GridPreview } from '@/snippets/grid';
|
||||
import { GridSnippet } from '@/snippets/stories-snippets';
|
||||
import { spacingPropDefs } from '../../../../utils/propDefs';
|
||||
import { gridPropDefs, gridItemPropDefs } from './props';
|
||||
|
||||
@@ -14,7 +14,7 @@ more complex ones.
|
||||
|
||||
<Snippet
|
||||
py={4}
|
||||
preview={<GridPreview />}
|
||||
preview={<GridSnippet story="Default" />}
|
||||
code={`<Grid>
|
||||
<DecorativeBox />
|
||||
<DecorativeBox />
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
import { PropsTable } from '@/components/PropsTable';
|
||||
import {
|
||||
HeadingPreview,
|
||||
HeadingAllVariants,
|
||||
HeadingResponsive,
|
||||
} from '@/snippets/heading';
|
||||
import { HeadingSnippet } from '@/snippets/stories-snippets';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
@@ -15,7 +11,7 @@ Headings are used to structure the content of your page.
|
||||
|
||||
<Snippet
|
||||
py={4}
|
||||
preview={<HeadingPreview />}
|
||||
preview={<HeadingSnippet story="Title1" />}
|
||||
code={`<Heading variant="title1">Hello World!</Heading>`}
|
||||
/>
|
||||
|
||||
@@ -56,7 +52,7 @@ appearance of the heading.
|
||||
<Snippet
|
||||
py={2}
|
||||
open
|
||||
preview={<HeadingAllVariants />}
|
||||
preview={<HeadingSnippet story="AllVariants" />}
|
||||
code={`<Flex direction="column" gap="4">
|
||||
<Heading variant="display">Display</Heading>
|
||||
<Heading variant="title1">Title 1</Heading>
|
||||
@@ -71,10 +67,7 @@ appearance of the heading.
|
||||
You can also use the `variant` prop to change the appearance of the text based
|
||||
on the screen size.
|
||||
|
||||
<Snippet
|
||||
py={4}
|
||||
open
|
||||
preview={<HeadingResponsive />}
|
||||
<CodeBlock
|
||||
code={`<Heading variant={{ initial: 'title2', lg: 'title1' }}>
|
||||
Responsive heading
|
||||
</Heading>`}
|
||||
|
||||
@@ -2,13 +2,8 @@ import { PropsTable } from '@/components/PropsTable';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
import {
|
||||
IconButtonPreview,
|
||||
IconButtonSizes,
|
||||
IconButtonDisabled,
|
||||
IconButtonResponsive,
|
||||
} from '@/snippets/icon-button';
|
||||
import { iconButtonVariants } from '@/snippets/_snippets';
|
||||
import { IconButtonSnippet } from '@/snippets/stories-snippets';
|
||||
import { iconButtonVariants } from '@/snippets/code-snippets';
|
||||
import { iconButtonPropDefs } from './props';
|
||||
|
||||
# Icon Button
|
||||
@@ -18,11 +13,11 @@ A button component with a single icon that can be used to trigger actions.
|
||||
<Snippet
|
||||
align="center"
|
||||
py={4}
|
||||
preview={<IconButtonPreview />}
|
||||
preview={<IconButtonSnippet story="Variants" />}
|
||||
code={`<Flex align="center">
|
||||
<IconButton icon="cloud" variant="primary" />
|
||||
<IconButton icon="cloud" variant="secondary" />
|
||||
</Flex>`}
|
||||
</Flex>`}
|
||||
/>
|
||||
|
||||
<Tabs.Root>
|
||||
@@ -62,7 +57,7 @@ Here's a view when buttons have different variants.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<IconButtonPreview />}
|
||||
preview={<IconButtonSnippet story="Variants" />}
|
||||
code={iconButtonVariants}
|
||||
/>
|
||||
|
||||
@@ -74,7 +69,7 @@ Here's a view when buttons have different sizes.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<IconButtonSizes />}
|
||||
preview={<IconButtonSnippet story="Sizes" />}
|
||||
code={`<Flex align="center">
|
||||
<IconButton icon="cloud" size="small" />
|
||||
<IconButton icon="cloud" size="medium" />
|
||||
@@ -89,7 +84,7 @@ Here's a view when buttons are disabled.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<IconButtonDisabled />}
|
||||
preview={<IconButtonSnippet story="Disabled" />}
|
||||
code={`<IconButton icon="cloud" disabled />`}
|
||||
/>
|
||||
|
||||
@@ -97,10 +92,6 @@ Here's a view when buttons are disabled.
|
||||
|
||||
Here's a view when buttons are responsive.
|
||||
|
||||
<Snippet
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<IconButtonResponsive />}
|
||||
<CodeBlock
|
||||
code={`<IconButton icon="cloud" variant={{ initial: 'primary', lg: 'secondary' }} />`}
|
||||
/>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { PropsTable } from '@/components/PropsTable';
|
||||
import { IconPreview } from '@/snippets/icon';
|
||||
import { IconSnippet } from '@/snippets/stories-snippets';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
@@ -12,7 +12,7 @@ Icons are used to represent an action or a state.
|
||||
<Snippet
|
||||
py={4}
|
||||
align="center"
|
||||
preview={<IconPreview />}
|
||||
preview={<IconSnippet story="Default" />}
|
||||
code={`<Icon name="heart" />`}
|
||||
/>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { PropsTable } from '@/components/PropsTable';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
import { InputPreview, InputSizes } from '@/snippets/input';
|
||||
import { InputSnippet } from '@/snippets/stories-snippets';
|
||||
import { BaseUI } from '@/components/HeadlessBanners/BaseUI';
|
||||
import { inputPropDefs } from './props';
|
||||
|
||||
@@ -13,7 +13,7 @@ A input component tfor your forms.
|
||||
<Snippet
|
||||
align="center"
|
||||
py={4}
|
||||
preview={<InputPreview />}
|
||||
preview={<InputSnippet story="Primary" />}
|
||||
code={`<Input label="Name" placeholder="Enter your name" />`}
|
||||
/>
|
||||
|
||||
@@ -55,7 +55,7 @@ Here's a simple input with a label and description.
|
||||
align="center"
|
||||
py={4}
|
||||
open
|
||||
preview={<InputSizes />}
|
||||
preview={<InputSnippet story="Sizes" />}
|
||||
code={`<Grid>
|
||||
<Input size="sm" placeholder="Small" />
|
||||
<Input size="md" placeholder="Medium" />
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
import { PropsTable } from '@/components/PropsTable';
|
||||
import {
|
||||
TextPreview,
|
||||
TextAllVariants,
|
||||
TextResponsive,
|
||||
TextAllWeights,
|
||||
} from '@/snippets/text';
|
||||
import { TextSnippet } from '@/snippets/stories-snippets';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
import { Tabs } from '@/components/Tabs';
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
@@ -16,7 +11,7 @@ The `Text` component is used to display content on your page.
|
||||
|
||||
<Snippet
|
||||
py={4}
|
||||
preview={<TextPreview />}
|
||||
preview={<TextSnippet story="Default" />}
|
||||
code={`<Text style={{ maxWidth: '600px' }}>
|
||||
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
|
||||
@@ -60,7 +55,7 @@ appearance of the text.
|
||||
|
||||
<Snippet
|
||||
open
|
||||
preview={<TextAllVariants />}
|
||||
preview={<TextSnippet story="AllVariants" />}
|
||||
code={`<Flex direction="column" gap="4">
|
||||
<Text variant="subtitle" style={{ maxWidth: '600px' }}>
|
||||
A man looks at a painting in a museum and says, “Brothers and sisters I
|
||||
@@ -92,7 +87,7 @@ appearance of the text.
|
||||
|
||||
<Snippet
|
||||
open
|
||||
preview={<TextAllWeights />}
|
||||
preview={<TextSnippet story="AllWeights" />}
|
||||
code={`<Flex direction="column" gap="4">
|
||||
<Text weight="regular" style={{ maxWidth: '600px' }}>
|
||||
A man looks at a painting in a museum and says, “Brothers and sisters I
|
||||
@@ -112,9 +107,7 @@ appearance of the text.
|
||||
You can also use the `variant` prop to change the appearance of the text based
|
||||
on the screen size.
|
||||
|
||||
<Snippet
|
||||
open
|
||||
preview={<TextResponsive />}
|
||||
<CodeBlock
|
||||
code={`<Text variant={{ initial: 'body', lg: 'subtitle' }}>
|
||||
Responsive text
|
||||
</Text>`}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { CodeBlock } from '@/components/CodeBlock';
|
||||
import * as Table from '@/components/Table';
|
||||
import { Chip } from '@/components/Chip';
|
||||
import { customTheme } from '@/snippets/_snippets';
|
||||
import { customTheme } from '@/snippets/code-snippets';
|
||||
|
||||
# Theming
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { HeadingAllVariants } from '@/snippets/heading';
|
||||
import { TextAllVariants } from '@/snippets/text';
|
||||
import { HeadingSnippet, TextSnippet } from '@/snippets/stories-snippets';
|
||||
import { Snippet } from '@/components/Snippet';
|
||||
|
||||
# Typography
|
||||
@@ -20,7 +19,7 @@ component](?path=/docs/components-heading--docs).
|
||||
<Snippet
|
||||
py={2}
|
||||
open
|
||||
preview={<HeadingAllVariants />}
|
||||
preview={<HeadingSnippet story="AllVariants" />}
|
||||
code={`<Flex direction="column" gap="4">
|
||||
<Heading variant="display">Display</Heading>
|
||||
<Heading variant="title1">Title 1</Heading>
|
||||
@@ -40,7 +39,7 @@ page.
|
||||
|
||||
<Snippet
|
||||
open
|
||||
preview={<TextAllVariants />}
|
||||
preview={<TextSnippet story="AllVariants" />}
|
||||
code={`<Flex direction="column" gap="4">
|
||||
<Text variant="subtitle" style={{ maxWidth: '600px' }}>
|
||||
A man looks at a painting in a museum and says, “Brothers and sisters I
|
||||
|
||||
@@ -5,10 +5,12 @@ import { Grid, Flex, Text } from '../../../../../packages/canon';
|
||||
import { screenSizes } from '@/utils/data';
|
||||
import { Frame } from '@/components/Frame';
|
||||
import { usePlayground } from '@/utils/playground-context';
|
||||
import { ButtonPlayground } from '@/snippets/button';
|
||||
import { CheckboxPlayground } from '@/snippets/checkbox';
|
||||
import { HeadingPlayground } from '@/snippets/heading';
|
||||
import { TextPlayground } from '@/snippets/text';
|
||||
import {
|
||||
ButtonSnippet,
|
||||
CheckboxSnippet,
|
||||
HeadingSnippet,
|
||||
TextSnippet,
|
||||
} from '@/snippets/stories-snippets';
|
||||
|
||||
import styles from './styles.module.css';
|
||||
|
||||
@@ -55,16 +57,19 @@ const Content = () => {
|
||||
return (
|
||||
<Flex direction="column" gap="4">
|
||||
{selectedComponents.find(c => c === 'button') && (
|
||||
<Line content={<ButtonPlayground />} title="Button" />
|
||||
<Line content={<ButtonSnippet story="Playground" />} title="Button" />
|
||||
)}
|
||||
{selectedComponents.find(c => c === 'checkbox') && (
|
||||
<Line content={<CheckboxPlayground />} title="Checkbox" />
|
||||
<Line
|
||||
content={<CheckboxSnippet story="Playground" />}
|
||||
title="Checkbox"
|
||||
/>
|
||||
)}
|
||||
{selectedComponents.find(c => c === 'heading') && (
|
||||
<Line content={<HeadingPlayground />} title="Heading" />
|
||||
<Line content={<HeadingSnippet story="Playground" />} title="Heading" />
|
||||
)}
|
||||
{selectedComponents.find(c => c === 'text') && (
|
||||
<Line content={<TextPlayground />} title="Text" />
|
||||
<Line content={<TextSnippet story="Playground" />} title="Text" />
|
||||
)}
|
||||
{/* {selectedComponents.find(c => c === 'input') && (
|
||||
<Line content={<InputPlayground />} title="Input" />
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Box } from '../../../packages/canon';
|
||||
|
||||
export const BoxPreview = () => {
|
||||
return (
|
||||
<Box
|
||||
style={{
|
||||
width: '64px',
|
||||
height: '64px',
|
||||
background: '#eaf2fd',
|
||||
borderRadius: '4px',
|
||||
border: '1px solid #2563eb',
|
||||
color: '#2563eb',
|
||||
backgroundImage:
|
||||
'url("data:image/svg+xml,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20fill%3D%22%232563eb%22%20fill-opacity%3D%220.3%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M5%200h1L0%206V5zM6%205v1H5z%22/%3E%3C/g%3E%3C/svg%3E")',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -1,102 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Button, Flex, ButtonProps, Text } from '../../../packages/canon';
|
||||
|
||||
export const ButtonPreview = () => {
|
||||
return (
|
||||
<Flex align="center">
|
||||
<Button iconStart="cloud" variant="primary">
|
||||
Button
|
||||
</Button>
|
||||
<Button iconStart="cloud" variant="secondary">
|
||||
Button
|
||||
</Button>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const ButtonSizes = () => {
|
||||
return (
|
||||
<Flex align="center">
|
||||
<Button size="medium">Medium</Button>
|
||||
<Button size="small">Small</Button>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const ButtonWithIcons = () => {
|
||||
return (
|
||||
<Flex align="center">
|
||||
<Button iconStart="cloud">Button</Button>
|
||||
<Button iconEnd="chevron-right">Button</Button>
|
||||
<Button iconStart="cloud" iconEnd="chevron-right">
|
||||
Button
|
||||
</Button>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const ButtonFullWidth = () => {
|
||||
return (
|
||||
<Flex direction="column" style={{ width: '300px' }}>
|
||||
<Button iconStart="cloud">Button</Button>
|
||||
<Button iconEnd="chevron-right">Button</Button>
|
||||
<Button iconStart="cloud" iconEnd="chevron-right">
|
||||
Button
|
||||
</Button>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const ButtonDisabled = () => {
|
||||
return <Button disabled>Button</Button>;
|
||||
};
|
||||
|
||||
export const ButtonResponsive = () => {
|
||||
return (
|
||||
<Button variant={{ initial: 'primary', lg: 'secondary' }}>
|
||||
Responsive Button
|
||||
</Button>
|
||||
);
|
||||
};
|
||||
|
||||
export const ButtonPlayground = () => {
|
||||
const variants: string[] = ['primary', 'secondary', 'tertiary'];
|
||||
|
||||
return (
|
||||
<Flex direction="column">
|
||||
{variants.map(variant => (
|
||||
<Flex direction="column" key={variant}>
|
||||
<Text>{variant}</Text>
|
||||
{['small', 'medium'].map(size => (
|
||||
<Flex align="center" key={size}>
|
||||
<Button
|
||||
iconStart="cloud"
|
||||
variant={variant as ButtonProps['variant']}
|
||||
size={size as ButtonProps['size']}
|
||||
>
|
||||
Button
|
||||
</Button>
|
||||
<Button
|
||||
iconEnd="chevron-right"
|
||||
variant={variant as ButtonProps['variant']}
|
||||
size={size as ButtonProps['size']}
|
||||
>
|
||||
Button
|
||||
</Button>
|
||||
<Button
|
||||
iconStart="cloud"
|
||||
iconEnd="chevron-right"
|
||||
style={{ width: '200px' }}
|
||||
variant={variant as ButtonProps['variant']}
|
||||
size={size as ButtonProps['size']}
|
||||
>
|
||||
Button
|
||||
</Button>
|
||||
</Flex>
|
||||
))}
|
||||
</Flex>
|
||||
))}
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
@@ -1,32 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Checkbox, Flex, Text } from '../../../packages/canon';
|
||||
|
||||
export const CheckboxPreview = () => {
|
||||
return <Checkbox label="Accept terms and conditions" />;
|
||||
};
|
||||
|
||||
export const CheckboxAllVariants = () => {
|
||||
return (
|
||||
<Flex align="center">
|
||||
<Checkbox />
|
||||
<Checkbox checked />
|
||||
<Checkbox label="Checkbox" />
|
||||
<Checkbox label="Checkbox" checked />
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const CheckboxPlayground = () => {
|
||||
return (
|
||||
<Flex direction="column">
|
||||
<Text>All variants</Text>
|
||||
<Flex align="center">
|
||||
<Checkbox />
|
||||
<Checkbox checked />
|
||||
<Checkbox label="Checkbox" />
|
||||
<Checkbox label="Checkbox" checked />
|
||||
</Flex>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
@@ -1,24 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Box, Container } from '../../../packages/canon';
|
||||
|
||||
const DecorativeBox = () => (
|
||||
<Box
|
||||
style={{
|
||||
height: '64px',
|
||||
background: '#eaf2fd',
|
||||
borderRadius: '4px',
|
||||
border: '1px solid #2563eb',
|
||||
backgroundImage:
|
||||
'url("data:image/svg+xml,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20fill%3D%22%232563eb%22%20fill-opacity%3D%220.3%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M5%200h1L0%206V5zM6%205v1H5z%22/%3E%3C/g%3E%3C/svg%3E")',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
export const ContainerPreview = () => {
|
||||
return (
|
||||
<Container>
|
||||
<DecorativeBox />
|
||||
</Container>
|
||||
);
|
||||
};
|
||||
@@ -1,23 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Input, Field } from '../../../packages/canon';
|
||||
|
||||
export const FieldPreview = () => {
|
||||
return (
|
||||
<div style={{ width: '300px' }}>
|
||||
<Field.Root>
|
||||
<Field.Label>Name</Field.Label>
|
||||
<Input placeholder="Enter your name" />
|
||||
<Field.Description>Visible on your profile</Field.Description>
|
||||
</Field.Root>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const InputPlayground = () => {
|
||||
return (
|
||||
<div style={{ maxWidth: '300px' }}>
|
||||
<Input placeholder="Enter your name" />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,31 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Flex } from '../../../packages/canon';
|
||||
|
||||
const DecorativeBox = () => {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
background: '#eaf2fd',
|
||||
borderRadius: '4px',
|
||||
boxShadow: '0 0 0 1px #2563eb',
|
||||
height: '32px',
|
||||
minWidth: '100px',
|
||||
backgroundImage:
|
||||
'url("data:image/svg+xml,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20fill%3D%22%232563eb%22%20fill-opacity%3D%220.3%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M5%200h1L0%206V5zM6%205v1H5z%22/%3E%3C/g%3E%3C/svg%3E")',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export const FlexPreview = () => {
|
||||
return (
|
||||
<div style={{ width: '320px' }}>
|
||||
<Flex>
|
||||
<DecorativeBox />
|
||||
<DecorativeBox />
|
||||
<DecorativeBox />
|
||||
</Flex>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,26 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Box, Grid } from '../../../packages/canon';
|
||||
|
||||
const FakeBox = () => (
|
||||
<Box
|
||||
style={{
|
||||
background: '#eaf2fd',
|
||||
borderRadius: '4px',
|
||||
boxShadow: '0 0 0 1px #2563eb',
|
||||
height: '64px',
|
||||
backgroundImage:
|
||||
'url("data:image/svg+xml,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20fill%3D%22%232563eb%22%20fill-opacity%3D%220.3%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M5%200h1L0%206V5zM6%205v1H5z%22/%3E%3C/g%3E%3C/svg%3E")',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
export const GridPreview = () => {
|
||||
return (
|
||||
<Grid>
|
||||
<FakeBox />
|
||||
<FakeBox />
|
||||
<FakeBox />
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
@@ -1,42 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Heading, Flex, Text } from '../../../packages/canon';
|
||||
|
||||
export const HeadingPreview = () => {
|
||||
return <Heading>Look mum, no hands!</Heading>;
|
||||
};
|
||||
|
||||
export const HeadingAllVariants = () => {
|
||||
return (
|
||||
<Flex direction="column">
|
||||
<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 HeadingResponsive = () => {
|
||||
return (
|
||||
<Flex direction="column">
|
||||
<Heading variant={{ initial: 'title2', lg: 'title1' }}>
|
||||
Responsive heading
|
||||
</Heading>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const HeadingPlayground = () => {
|
||||
return (
|
||||
<Flex direction="column">
|
||||
<Text>All variants</Text>
|
||||
<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>
|
||||
);
|
||||
};
|
||||
@@ -1,57 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { IconButton, Flex, ButtonProps, Text } from '../../../packages/canon';
|
||||
|
||||
export const IconButtonPreview = () => {
|
||||
return (
|
||||
<Flex align="center">
|
||||
<IconButton icon="cloud" variant="primary" />
|
||||
<IconButton icon="cloud" variant="secondary" />
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const IconButtonSizes = () => {
|
||||
return (
|
||||
<Flex align="center">
|
||||
<IconButton icon="cloud" size="medium" />
|
||||
<IconButton icon="cloud" size="small" />
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const IconButtonDisabled = () => {
|
||||
return <IconButton icon="cloud" disabled />;
|
||||
};
|
||||
|
||||
export const IconButtonResponsive = () => {
|
||||
return (
|
||||
<IconButton
|
||||
icon="cloud"
|
||||
variant={{ initial: 'primary', lg: 'secondary' }}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export const IconButtonPlayground = () => {
|
||||
const variants: string[] = ['primary', 'secondary'];
|
||||
|
||||
return (
|
||||
<Flex direction="column">
|
||||
{variants.map(variant => (
|
||||
<Flex direction="column" key={variant}>
|
||||
<Text>{variant}</Text>
|
||||
{['small', 'medium'].map(size => (
|
||||
<Flex align="center" key={size}>
|
||||
<IconButton
|
||||
icon="cloud"
|
||||
variant={variant as ButtonProps['variant']}
|
||||
size={size as ButtonProps['size']}
|
||||
/>
|
||||
</Flex>
|
||||
))}
|
||||
</Flex>
|
||||
))}
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
@@ -1,7 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Icon } from '../../../packages/canon';
|
||||
|
||||
export const IconPreview = () => {
|
||||
return <Icon name="heart" />;
|
||||
};
|
||||
@@ -1,47 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Box, Flex } from '../../../packages/canon';
|
||||
|
||||
const fakeBlockList = [
|
||||
{ width: 45, height: 60 },
|
||||
{ width: 150, height: 75 },
|
||||
{ width: 80, height: 50 },
|
||||
{ width: 120, height: 70 },
|
||||
{ width: 95, height: 65 },
|
||||
{ width: 80, height: 32 },
|
||||
{ width: 130, height: 60 },
|
||||
{ width: 100, height: 80 },
|
||||
{ width: 140, height: 45 },
|
||||
{ width: 85, height: 70 },
|
||||
{ width: 125, height: 50 },
|
||||
];
|
||||
|
||||
const FakeBox = ({
|
||||
width = 120,
|
||||
height = 80,
|
||||
}: {
|
||||
width?: number;
|
||||
height?: number;
|
||||
}) => (
|
||||
<Box
|
||||
style={{
|
||||
background: '#eaf2fd',
|
||||
borderRadius: '4px',
|
||||
boxShadow: '0 0 0 1px #2563eb',
|
||||
width,
|
||||
height,
|
||||
backgroundImage:
|
||||
'url("data:image/svg+xml,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20fill%3D%22%232563eb%22%20fill-opacity%3D%220.3%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M5%200h1L0%206V5zM6%205v1H5z%22/%3E%3C/g%3E%3C/svg%3E")',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
export const InlinePreview = () => {
|
||||
return (
|
||||
<Flex>
|
||||
{fakeBlockList.map((block, index) => (
|
||||
<FakeBox key={index} width={block.width} height={block.height} />
|
||||
))}
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Input, Grid } from '../../../packages/canon';
|
||||
|
||||
export const InputPreview = () => {
|
||||
return (
|
||||
<div style={{ width: '300px' }}>
|
||||
<Input placeholder="Enter your name" />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const InputSizes = () => {
|
||||
return (
|
||||
<Grid style={{ width: '300px' }}>
|
||||
<Input size="sm" placeholder="Small" />
|
||||
<Input size="md" placeholder="Medium" />
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
|
||||
export const InputError = () => {
|
||||
return (
|
||||
<div style={{ width: '300px' }}>
|
||||
<Input required />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const InputPlayground = () => {
|
||||
return (
|
||||
<div style={{ maxWidth: '300px' }}>
|
||||
<Input placeholder="Enter your name" />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,127 @@
|
||||
'use client';
|
||||
|
||||
import { composeStories } from '@storybook/react';
|
||||
import * as BoxStories from '../../../packages/canon/src/components/Box/Box.stories';
|
||||
import * as ButtonStories from '../../../packages/canon/src/components/Button/Button.stories';
|
||||
import * as CheckboxStories from '../../../packages/canon/src/components/Checkbox/Checkbox.stories';
|
||||
import * as ContainerStories from '../../../packages/canon/src/components/Container/Container.stories';
|
||||
import * as FieldStories from '../../../packages/canon/src/components/Field/Field.stories';
|
||||
import * as GridStories from '../../../packages/canon/src/components/Grid/Grid.stories';
|
||||
import * as HeadingStories from '../../../packages/canon/src/components/Heading/Heading.stories';
|
||||
import * as IconButtonStories from '../../../packages/canon/src/components/IconButton/IconButton.stories';
|
||||
import * as IconStories from '../../../packages/canon/src/components/Icon/Icon.stories';
|
||||
import * as InputStories from '../../../packages/canon/src/components/Input/Input.stories';
|
||||
import * as TextStories from '../../../packages/canon/src/components/Text/Text.stories';
|
||||
import * as FlexStories from '../../../packages/canon/src/components/Flex/Flex.stories';
|
||||
|
||||
export const BoxSnippet = ({ story }: { story: keyof typeof BoxStories }) => {
|
||||
const stories = composeStories(BoxStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const ButtonSnippet = ({
|
||||
story,
|
||||
}: {
|
||||
story: keyof typeof ButtonStories;
|
||||
}) => {
|
||||
const stories = composeStories(ButtonStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const CheckboxSnippet = ({
|
||||
story,
|
||||
}: {
|
||||
story: keyof typeof CheckboxStories;
|
||||
}) => {
|
||||
const stories = composeStories(CheckboxStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const ContainerSnippet = ({
|
||||
story,
|
||||
}: {
|
||||
story: keyof typeof ContainerStories;
|
||||
}) => {
|
||||
const stories = composeStories(ContainerStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const FlexSnippet = ({ story }: { story: keyof typeof FlexStories }) => {
|
||||
const stories = composeStories(FlexStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const FieldSnippet = ({
|
||||
story,
|
||||
}: {
|
||||
story: keyof typeof FieldStories;
|
||||
}) => {
|
||||
const stories = composeStories(FieldStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const GridSnippet = ({ story }: { story: keyof typeof GridStories }) => {
|
||||
const stories = composeStories(GridStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const HeadingSnippet = ({
|
||||
story,
|
||||
}: {
|
||||
story: keyof typeof HeadingStories;
|
||||
}) => {
|
||||
const stories = composeStories(HeadingStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const IconButtonSnippet = ({
|
||||
story,
|
||||
}: {
|
||||
story: keyof typeof IconButtonStories;
|
||||
}) => {
|
||||
const stories = composeStories(IconButtonStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const IconSnippet = ({ story }: { story: keyof typeof IconStories }) => {
|
||||
const stories = composeStories(IconStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const InputSnippet = ({
|
||||
story,
|
||||
}: {
|
||||
story: keyof typeof InputStories;
|
||||
}) => {
|
||||
const stories = composeStories(InputStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
|
||||
export const TextSnippet = ({ story }: { story: keyof typeof TextStories }) => {
|
||||
const stories = composeStories(TextStories);
|
||||
const StoryComponent = stories[story as keyof typeof stories];
|
||||
|
||||
return StoryComponent ? <StoryComponent /> : null;
|
||||
};
|
||||
@@ -1,94 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { Flex, Text } from '../../../packages/canon';
|
||||
|
||||
export const TextPreview = () => {
|
||||
return (
|
||||
<Text style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
);
|
||||
};
|
||||
|
||||
export const TextAllVariants = () => {
|
||||
return (
|
||||
<Flex direction="column">
|
||||
<Text variant="subtitle" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
<Text variant="body" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
<Text variant="caption" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
<Text variant="label" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const TextAllWeights = () => {
|
||||
return (
|
||||
<Flex direction="column">
|
||||
<Text weight="regular" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
<Text weight="bold" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export const TextResponsive = () => {
|
||||
return (
|
||||
<Text variant={{ initial: 'body', lg: 'subtitle' }}>Responsive text</Text>
|
||||
);
|
||||
};
|
||||
|
||||
export const TextPlayground = () => {
|
||||
return (
|
||||
<Flex direction="column">
|
||||
<Text>Subtitle</Text>
|
||||
<Text variant="subtitle" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
<Text>Body</Text>
|
||||
<Text variant="body" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
<Text>Caption</Text>
|
||||
<Text variant="caption" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
<Text>Label</Text>
|
||||
<Text variant="label" style={{ maxWidth: '600px' }}>
|
||||
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?
|
||||
</Text>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
+129
-128
@@ -6,11 +6,11 @@ __metadata:
|
||||
cacheKey: 8
|
||||
|
||||
"@babel/runtime@npm:^7.18.6":
|
||||
version: 7.26.0
|
||||
resolution: "@babel/runtime@npm:7.26.0"
|
||||
version: 7.26.10
|
||||
resolution: "@babel/runtime@npm:7.26.10"
|
||||
dependencies:
|
||||
regenerator-runtime: ^0.14.0
|
||||
checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a
|
||||
checksum: 22d2e0abb86e90de489ab16bb578db6fe2b63a88696db431198b24963749820c723f1982298cdbbea187f7b2b80fb4d98a514faf114ddb2fdc14a4b96277b955
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -501,10 +501,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/env@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/env@npm:14.2.23"
|
||||
checksum: dad74ff7de68992a0753f728a5b926ed6eb0af8a62deece6bbb32ba254b1f7d870e256b61db8d4c40fa811695cfc5e69ba964339f3cb8b40237cf9c28dfe747f
|
||||
"@next/env@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/env@npm:14.2.25"
|
||||
checksum: c937d4e8b62c7ae9c74bd607888e791b78445e93d523d22d0838e816c3fbeb7b1b62766d110ef235229e4c4ca8587f493e6ec761eb0a2c774dabaee2b58f581b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -534,65 +534,65 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-darwin-arm64@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-darwin-arm64@npm:14.2.23"
|
||||
"@next/swc-darwin-arm64@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-darwin-arm64@npm:14.2.25"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-darwin-x64@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-darwin-x64@npm:14.2.23"
|
||||
"@next/swc-darwin-x64@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-darwin-x64@npm:14.2.25"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-arm64-gnu@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-linux-arm64-gnu@npm:14.2.23"
|
||||
"@next/swc-linux-arm64-gnu@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-linux-arm64-gnu@npm:14.2.25"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-arm64-musl@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-linux-arm64-musl@npm:14.2.23"
|
||||
"@next/swc-linux-arm64-musl@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-linux-arm64-musl@npm:14.2.25"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-x64-gnu@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-linux-x64-gnu@npm:14.2.23"
|
||||
"@next/swc-linux-x64-gnu@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-linux-x64-gnu@npm:14.2.25"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-x64-musl@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-linux-x64-musl@npm:14.2.23"
|
||||
"@next/swc-linux-x64-musl@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-linux-x64-musl@npm:14.2.25"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-arm64-msvc@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-win32-arm64-msvc@npm:14.2.23"
|
||||
"@next/swc-win32-arm64-msvc@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-win32-arm64-msvc@npm:14.2.25"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-ia32-msvc@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-win32-ia32-msvc@npm:14.2.23"
|
||||
"@next/swc-win32-ia32-msvc@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-win32-ia32-msvc@npm:14.2.25"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-x64-msvc@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "@next/swc-win32-x64-msvc@npm:14.2.23"
|
||||
"@next/swc-win32-x64-msvc@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "@next/swc-win32-x64-msvc@npm:14.2.25"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
@@ -722,20 +722,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@storybook/components@npm:8.6.7":
|
||||
version: 8.6.7
|
||||
resolution: "@storybook/components@npm:8.6.7"
|
||||
"@storybook/components@npm:8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "@storybook/components@npm:8.6.8"
|
||||
peerDependencies:
|
||||
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
|
||||
checksum: cb20f8baa76deef1af1739d6c1b1a9f57eb22d158fa046d9919a91840e7a00f1b48e96b7ffe7994365b60808f864c963a3476ee98b4c8b63968a3a877068da3a
|
||||
checksum: fb69c6d7804f91fffd3fc7d42ba5b144c7b808af6e6b764c14cdef11263897e551e5cc8a0fa379b9ed73f5c0438ed32d355c7ed63801046e1cb078c479d4cecf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@storybook/core@npm:8.6.7":
|
||||
version: 8.6.7
|
||||
resolution: "@storybook/core@npm:8.6.7"
|
||||
"@storybook/core@npm:8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "@storybook/core@npm:8.6.8"
|
||||
dependencies:
|
||||
"@storybook/theming": 8.6.7
|
||||
"@storybook/theming": 8.6.8
|
||||
better-opn: ^3.0.2
|
||||
browser-assert: ^1.2.1
|
||||
esbuild: ^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0
|
||||
@@ -751,7 +751,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
prettier:
|
||||
optional: true
|
||||
checksum: b150b7472766fccbbc1dec74cba3c16e009a9f24c13f01198923f553d12e2a2070ee2a35f5514f9af350b79e34577946ea65a4a495fd1fa18a27655f897c013a
|
||||
checksum: d67dea27c021b51f17a0d5807b72a29ea174bb8c945fb41092fbf3698002810da0a510aa7e0e23e1682634362f9b52590ba1a09ef6dd40a2ad5653988b0b0e14
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -762,66 +762,66 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@storybook/manager-api@npm:8.6.7":
|
||||
version: 8.6.7
|
||||
resolution: "@storybook/manager-api@npm:8.6.7"
|
||||
"@storybook/manager-api@npm:8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "@storybook/manager-api@npm:8.6.8"
|
||||
peerDependencies:
|
||||
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
|
||||
checksum: 6bb0860c3795945189832613da5866e5159b2adb376478a2b596c113928c64f5962efc325f927a6bcb7a48d7257f42cf6489b0c44397876129626ac68c44aa28
|
||||
checksum: ee575781572898fc2fa734750ccb4bad09fc021bd0878ca9a05d9668cb336610d53e8110f4ff3c2c180573a64e9caba8f50f59d0bd3f0398a5c98e2eafdd91ae
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@storybook/preview-api@npm:8.6.7":
|
||||
version: 8.6.7
|
||||
resolution: "@storybook/preview-api@npm:8.6.7"
|
||||
"@storybook/preview-api@npm:8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "@storybook/preview-api@npm:8.6.8"
|
||||
peerDependencies:
|
||||
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
|
||||
checksum: 0d24d62444b7b153bde89d3949ab6539a163e15bc80c5bfcc73b7d49bbb34fb02eb74a99434793b8a6446aeec491e07f006c0f4e404f98486c6d1d614d01defa
|
||||
checksum: ac923a342d09c9e51f67734acaea19a41dc87cfc6cb22aea262591396d41cd4b69896417b618c55f17a9d64660b659813475c30d338c9bb6aa45391cfe8328f0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@storybook/react-dom-shim@npm:8.6.7":
|
||||
version: 8.6.7
|
||||
resolution: "@storybook/react-dom-shim@npm:8.6.7"
|
||||
"@storybook/react-dom-shim@npm:8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "@storybook/react-dom-shim@npm:8.6.8"
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
|
||||
storybook: ^8.6.7
|
||||
checksum: 51c20259ac4485d9a996266341a4d9898c949049e2a9af9a08bec58c2ace3a40be1a534005c52fc2db2c81bb010dbd36030bb70581b36c05cf4b34d58f140d3a
|
||||
storybook: ^8.6.8
|
||||
checksum: d48ba28fefe0bbe0bde02de6a99629d84ba9436fb539ffc6d779173f7b8f6ec466e26018e943d95fa079d73ace2d96d5911def0221754262782e8a5e8b20882d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@storybook/react@npm:^8.4.7":
|
||||
version: 8.6.7
|
||||
resolution: "@storybook/react@npm:8.6.7"
|
||||
"@storybook/react@npm:^8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "@storybook/react@npm:8.6.8"
|
||||
dependencies:
|
||||
"@storybook/components": 8.6.7
|
||||
"@storybook/components": 8.6.8
|
||||
"@storybook/global": ^5.0.0
|
||||
"@storybook/manager-api": 8.6.7
|
||||
"@storybook/preview-api": 8.6.7
|
||||
"@storybook/react-dom-shim": 8.6.7
|
||||
"@storybook/theming": 8.6.7
|
||||
"@storybook/manager-api": 8.6.8
|
||||
"@storybook/preview-api": 8.6.8
|
||||
"@storybook/react-dom-shim": 8.6.8
|
||||
"@storybook/theming": 8.6.8
|
||||
peerDependencies:
|
||||
"@storybook/test": 8.6.7
|
||||
"@storybook/test": 8.6.8
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
|
||||
storybook: ^8.6.7
|
||||
storybook: ^8.6.8
|
||||
typescript: ">= 4.2.x"
|
||||
peerDependenciesMeta:
|
||||
"@storybook/test":
|
||||
optional: true
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: c98438ddfd764300e1a805623fab976f9ef94a2d939984d6caf98ce92ed29d8a7307389b98e2df2d1302b302dc549c7c95050464731d9c588347cd154c360834
|
||||
checksum: ebbfb2bed68d4ca8c8777769e5b752b1becf9cc1c3fd6f051df9a8eb012d209526b9e188812f3bf8ecf337a331c5049afa2236d2b073fbcafafd35e79cc3ed78
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@storybook/theming@npm:8.6.7":
|
||||
version: 8.6.7
|
||||
resolution: "@storybook/theming@npm:8.6.7"
|
||||
"@storybook/theming@npm:8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "@storybook/theming@npm:8.6.8"
|
||||
peerDependencies:
|
||||
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
|
||||
checksum: 747a2377df65d5f0962dc8606d06247ad89fb7ecabab0bd9611055d599b5bd0fa15769e4c76e948ae34ae232ba756bf6795ccb3467b1adf35ff961db7350f4de
|
||||
checksum: 1be0dea23178af562133f1047165e170f7e90bec4c3cedbdcb59df22685f314273a06a4677835ab84e6dbc682b803590adad6963217971c8136b076ce69800aa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1436,13 +1436,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "call-bind-apply-helpers@npm:1.0.1"
|
||||
"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "call-bind-apply-helpers@npm:1.0.2"
|
||||
dependencies:
|
||||
es-errors: ^1.3.0
|
||||
function-bind: ^1.1.2
|
||||
checksum: 3c55343261bb387c58a4762d15ad9d42053659a62681ec5eb50690c6b52a4a666302a01d557133ce6533e8bd04530ee3b209f23dd06c9577a1925556f8fcccdf
|
||||
checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1458,13 +1458,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3":
|
||||
version: 1.0.3
|
||||
resolution: "call-bound@npm:1.0.3"
|
||||
"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4":
|
||||
version: 1.0.4
|
||||
resolution: "call-bound@npm:1.0.4"
|
||||
dependencies:
|
||||
call-bind-apply-helpers: ^1.0.1
|
||||
get-intrinsic: ^1.2.6
|
||||
checksum: a93bbe0f2d0a2d6c144a4349ccd0593d5d0d5d9309b69101710644af8964286420062f2cc3114dca120b9bc8cc07507952d4b1b3ea7672e0d7f6f1675efedb32
|
||||
call-bind-apply-helpers: ^1.0.2
|
||||
get-intrinsic: ^1.3.0
|
||||
checksum: 2f6399488d1c272f56306ca60ff696575e2b7f31daf23bc11574798c84d9f2759dceb0cb1f471a85b77f28962a7ac6411f51d283ea2e45319009a19b6ccab3b2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1491,7 +1491,7 @@ __metadata:
|
||||
"@mdx-js/loader": ^3.1.0
|
||||
"@mdx-js/react": ^3.1.0
|
||||
"@next/mdx": ^15.1.4
|
||||
"@storybook/react": ^8.4.7
|
||||
"@storybook/react": ^8.6.8
|
||||
"@types/mdx": ^2.0.13
|
||||
"@types/node": ^20
|
||||
"@types/react": ^18.0.0
|
||||
@@ -1502,12 +1502,12 @@ __metadata:
|
||||
eslint-config-next: 14.2.23
|
||||
lightningcss: ^1.28.2
|
||||
motion: ^12.4.1
|
||||
next: 14.2.23
|
||||
next: 14.2.25
|
||||
react: ^18.0.2
|
||||
react-dom: ^18.0.2
|
||||
react-frame-component: ^5.2.7
|
||||
shiki: ^1.26.1
|
||||
storybook: ^8.4.7
|
||||
storybook: ^8.6.8
|
||||
typescript: ^5
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
@@ -1934,12 +1934,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"es-object-atoms@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "es-object-atoms@npm:1.0.0"
|
||||
"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1":
|
||||
version: 1.1.1
|
||||
resolution: "es-object-atoms@npm:1.1.1"
|
||||
dependencies:
|
||||
es-errors: ^1.3.0
|
||||
checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c
|
||||
checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2555,12 +2555,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"for-each@npm:^0.3.3":
|
||||
version: 0.3.3
|
||||
resolution: "for-each@npm:0.3.3"
|
||||
"for-each@npm:^0.3.3, for-each@npm:^0.3.5":
|
||||
version: 0.3.5
|
||||
resolution: "for-each@npm:0.3.5"
|
||||
dependencies:
|
||||
is-callable: ^1.1.3
|
||||
checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28
|
||||
is-callable: ^1.2.7
|
||||
checksum: 3c986d7e11f4381237cc98baa0a2f87eabe74719eee65ed7bed275163082b940ede19268c61d04c6260e0215983b12f8d885e3c8f9aa8c2113bf07c37051745c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2631,21 +2631,21 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7":
|
||||
version: 1.2.7
|
||||
resolution: "get-intrinsic@npm:1.2.7"
|
||||
"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0":
|
||||
version: 1.3.0
|
||||
resolution: "get-intrinsic@npm:1.3.0"
|
||||
dependencies:
|
||||
call-bind-apply-helpers: ^1.0.1
|
||||
call-bind-apply-helpers: ^1.0.2
|
||||
es-define-property: ^1.0.1
|
||||
es-errors: ^1.3.0
|
||||
es-object-atoms: ^1.0.0
|
||||
es-object-atoms: ^1.1.1
|
||||
function-bind: ^1.1.2
|
||||
get-proto: ^1.0.0
|
||||
get-proto: ^1.0.1
|
||||
gopd: ^1.2.0
|
||||
has-symbols: ^1.1.0
|
||||
hasown: ^2.0.2
|
||||
math-intrinsics: ^1.1.0
|
||||
checksum: a1597b3b432074f805b6a0ba1182130dd6517c0ea0c4eecc4b8834c803913e1ea62dfc412865be795b3dacb1555a21775b70cf9af7a18b1454ff3414e5442d4a
|
||||
checksum: 301008e4482bb9a9cb49e132b88fee093bff373b4e6def8ba219b1e96b60158a6084f273ef5cafe832e42cd93462f4accb46a618d35fe59a2b507f2388c5b79d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3042,7 +3042,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7":
|
||||
"is-callable@npm:^1.2.7":
|
||||
version: 1.2.7
|
||||
resolution: "is-callable@npm:1.2.7"
|
||||
checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac
|
||||
@@ -4176,20 +4176,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"next@npm:14.2.23":
|
||||
version: 14.2.23
|
||||
resolution: "next@npm:14.2.23"
|
||||
"next@npm:14.2.25":
|
||||
version: 14.2.25
|
||||
resolution: "next@npm:14.2.25"
|
||||
dependencies:
|
||||
"@next/env": 14.2.23
|
||||
"@next/swc-darwin-arm64": 14.2.23
|
||||
"@next/swc-darwin-x64": 14.2.23
|
||||
"@next/swc-linux-arm64-gnu": 14.2.23
|
||||
"@next/swc-linux-arm64-musl": 14.2.23
|
||||
"@next/swc-linux-x64-gnu": 14.2.23
|
||||
"@next/swc-linux-x64-musl": 14.2.23
|
||||
"@next/swc-win32-arm64-msvc": 14.2.23
|
||||
"@next/swc-win32-ia32-msvc": 14.2.23
|
||||
"@next/swc-win32-x64-msvc": 14.2.23
|
||||
"@next/env": 14.2.25
|
||||
"@next/swc-darwin-arm64": 14.2.25
|
||||
"@next/swc-darwin-x64": 14.2.25
|
||||
"@next/swc-linux-arm64-gnu": 14.2.25
|
||||
"@next/swc-linux-arm64-musl": 14.2.25
|
||||
"@next/swc-linux-x64-gnu": 14.2.25
|
||||
"@next/swc-linux-x64-musl": 14.2.25
|
||||
"@next/swc-win32-arm64-msvc": 14.2.25
|
||||
"@next/swc-win32-ia32-msvc": 14.2.25
|
||||
"@next/swc-win32-x64-msvc": 14.2.25
|
||||
"@swc/helpers": 0.5.5
|
||||
busboy: 1.6.0
|
||||
caniuse-lite: ^1.0.30001579
|
||||
@@ -4230,7 +4230,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
next: dist/bin/next
|
||||
checksum: 4f9f744439fb860ba7c64ae1c61bc361bdd36e41d56760c52eabb404f4143c854b78ba9a79b7aefc322d93edbbd66d966cbdaf86772a88a8bf2e6b289987f14f
|
||||
checksum: ca47d0f1d41351adaf75a37c8e8ce39dd76ebc62b054266ef84b5fc1ea41241ad5f16ab7a1ca47b6613b2c3e4c6f48b179f8cd3b0f087912ec7164c4e72981f0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5051,11 +5051,11 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"storybook@npm:^8.4.7":
|
||||
version: 8.6.7
|
||||
resolution: "storybook@npm:8.6.7"
|
||||
"storybook@npm:^8.6.8":
|
||||
version: 8.6.8
|
||||
resolution: "storybook@npm:8.6.8"
|
||||
dependencies:
|
||||
"@storybook/core": 8.6.7
|
||||
"@storybook/core": 8.6.8
|
||||
peerDependencies:
|
||||
prettier: ^2 || ^3
|
||||
peerDependenciesMeta:
|
||||
@@ -5065,7 +5065,7 @@ __metadata:
|
||||
getstorybook: ./bin/index.cjs
|
||||
sb: ./bin/index.cjs
|
||||
storybook: ./bin/index.cjs
|
||||
checksum: fe21ce4d9cd17069a5b409ed518603f97ec6ec421b7f41cff3e43b409820fcbc2c8dbcb3aed99dd7d0a99a0c6138c7576ddf72f78186b6f86085d503b3c8b32f
|
||||
checksum: 93b92e53c00ff29b4864932c26c52dd4a45e76b3d46811a2bcdc0271ef37c96e2f8d1833982569ab6a6348d6e84d8348aecf74ee72164744459de4c78d0f6759
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5616,16 +5616,17 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.2":
|
||||
version: 1.1.18
|
||||
resolution: "which-typed-array@npm:1.1.18"
|
||||
version: 1.1.19
|
||||
resolution: "which-typed-array@npm:1.1.19"
|
||||
dependencies:
|
||||
available-typed-arrays: ^1.0.7
|
||||
call-bind: ^1.0.8
|
||||
call-bound: ^1.0.3
|
||||
for-each: ^0.3.3
|
||||
call-bound: ^1.0.4
|
||||
for-each: ^0.3.5
|
||||
get-proto: ^1.0.1
|
||||
gopd: ^1.2.0
|
||||
has-tostringtag: ^1.0.2
|
||||
checksum: d2feea7f51af66b3a240397aa41c796585033e1069f18e5b6d4cd3878538a1e7780596fd3ea9bf347c43d9e98e13be09b37d9ea3887cef29b11bc291fd47bb52
|
||||
checksum: 162d2a07f68ea323f88ed9419861487ce5d02cb876f2cf9dd1e428d04a63133f93a54f89308f337b27cabd312ee3d027cae4a79002b2f0a85b79b9ef4c190670
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5677,8 +5678,8 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"ws@npm:^8.2.3":
|
||||
version: 8.18.0
|
||||
resolution: "ws@npm:8.18.0"
|
||||
version: 8.18.1
|
||||
resolution: "ws@npm:8.18.1"
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
utf-8-validate: ">=5.0.2"
|
||||
@@ -5687,7 +5688,7 @@ __metadata:
|
||||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975
|
||||
checksum: 4658357185d891bc45cc2d42a84f9e192d047e8476fb5cba25b604f7d75ca87ca0dd54cd0b2cc49aeee57c79045a741cb7d0b14501953ac60c790cd105c42f23
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -1157,13 +1157,21 @@ export class MyIncrementalEntityProvider
|
||||
The last step is to implement the actual `next` method that will accept the cursor, call the API, process the result and return the result.
|
||||
|
||||
```ts
|
||||
import {
|
||||
ANNOTATION_LOCATION,
|
||||
ANNOTATION_ORIGIN_LOCATION,
|
||||
} from '@backstage/catalog-model';
|
||||
import { IncrementalEntityProvider } from '@backstage/plugin-catalog-backend-module-incremental-ingestion';
|
||||
|
||||
export class MyIncrementalEntityProvider
|
||||
implements IncrementalEntityProvider<Cursor, Context>
|
||||
{
|
||||
private readonly token: string;
|
||||
private readonly mySource: string;
|
||||
|
||||
constructor(token: string) {
|
||||
constructor(token: string, mySource: string) {
|
||||
this.token = token;
|
||||
this.mySource = mySource;
|
||||
}
|
||||
|
||||
getProviderName() {
|
||||
@@ -1181,6 +1189,7 @@ export class MyIncrementalEntityProvider
|
||||
cursor: Cursor = { page: 1 },
|
||||
): Promise<EntityIteratorResult<Cursor>> {
|
||||
const { apiClient } = context;
|
||||
const location = `${this.getProviderName()}:${this.mySource}`;
|
||||
|
||||
// call your API with the current cursor
|
||||
const data = await apiClient.getServices(cursor);
|
||||
@@ -1200,8 +1209,8 @@ export class MyIncrementalEntityProvider
|
||||
name: item.name,
|
||||
annotations: {
|
||||
// You need to define these, otherwise they'll fail validation
|
||||
[ANNOTATION_LOCATION]: this.getProviderName(),
|
||||
[ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),
|
||||
[ANNOTATION_LOCATION]: location,
|
||||
[ANNOTATION_ORIGIN_LOCATION]: location,
|
||||
},
|
||||
},
|
||||
spec: {
|
||||
|
||||
@@ -86,13 +86,14 @@ catalog:
|
||||
|
||||
These config blocks have a lot of options in them, so we will describe each "root" key within the block separately.
|
||||
|
||||
> NOTE:
|
||||
>
|
||||
> If you want to import users and groups from different LDAP servers, you can define multiple providers with different names.
|
||||
> If they should come from the same server, you can define multiple users and groups blocks within the same provider using an array of users / groups.
|
||||
> Entries coming from the same block will be able to detect group memberships based on the `memberOf` attribute.
|
||||
>
|
||||
> If you want only to import users or groups, you can omit the groups or users block.
|
||||
:::note Note
|
||||
|
||||
If you want to import users and groups from different LDAP servers, you can define multiple providers with different names.
|
||||
If they should come from the same server, you can define multiple users and groups blocks within the same provider using an array of users / groups.
|
||||
Entries coming from the same block will be able to detect group memberships based on the `memberOf` attribute.
|
||||
If you want only to import users or groups, you can omit the groups or users block.
|
||||
|
||||
:::
|
||||
|
||||
### target
|
||||
|
||||
|
||||
+17
-17
@@ -8,7 +8,7 @@ The Backstage Notifications System provides a way for plugins and external servi
|
||||
These notifications are displayed in the dedicated page of the Backstage frontend UI or by frontend plugins per specific scenarios.
|
||||
Additionally, notifications can be sent to external channels (like email) via "processors" implemented within plugins.
|
||||
|
||||
Notifications can be optionally integrated with the signals (a push mechanism) to ensure users receive them immediately.
|
||||
Notifications can be optionally extended with the signals plugin, which provides a push mechanism to ensure users receive notifications immediately.
|
||||
|
||||
### Upgrade to the latest version of Backstage
|
||||
|
||||
@@ -27,8 +27,8 @@ There are two basic types of notifications:
|
||||
Example of use-cases:
|
||||
|
||||
- System-wide announcements or alerts
|
||||
- Notifications for component owners: e.g., build failures, successful deployments, new vulnerabilities
|
||||
- Notifications for individuals: e.g., updates you have subscribed to, new required training courses
|
||||
- Notifications for component owners, e.g. build failures, successful deployments, new vulnerabilities
|
||||
- Notifications for individuals, e.g. updates you have subscribed to, new required training courses
|
||||
- Notifications pertaining to a particular entity in the catalog: A notification might apply to an entity and the owning team.
|
||||
|
||||
## Installation
|
||||
@@ -87,17 +87,17 @@ import { NotificationsPage } from '@backstage/plugin-notifications';
|
||||
|
||||
### Optional: Add Signals
|
||||
|
||||
The use of signals is optional but improves user experience.
|
||||
The use of signals is optional but improves the user experience.
|
||||
|
||||
#### Optional: Add Signals Backend
|
||||
|
||||
Add Signals to your backend by first adding the backend package:
|
||||
Add signals to your backend by first adding the backend package:
|
||||
|
||||
```bash title="From your Backstage root directory"
|
||||
yarn --cwd packages/backend add @backstage/plugin-signals-backend
|
||||
```
|
||||
|
||||
The add the signals to your backend:
|
||||
Then add the signals plugin to your backend:
|
||||
|
||||
```ts title="packages/backend/src/index.ts"
|
||||
const backend = createBackend();
|
||||
@@ -156,19 +156,19 @@ add the `UserNotificationSettingsCard` to your frontend.
|
||||
|
||||
You can customize the origin names shown in the UI by passing an object where the keys are the origins and the values are the names you want to show in the UI.
|
||||
|
||||
Each notification processor will receive its own column in the settings page, where the user can enable or disable notifications from that processor.
|
||||
Each notification processor will receive its own row in the settings page, where the user can enable or disable notifications from that processor.
|
||||
|
||||
## Additional info
|
||||
|
||||
An example of a backend plugin sending notifications can be found in https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-notifications.
|
||||
An example of a backend plugin sending notifications can be found in the [`@backstage/plugin-scaffolder-backend-module-notifications` package](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-notifications).
|
||||
|
||||
Sources of the notifications and signal plugins:
|
||||
Sources of the notifications and signals plugins:
|
||||
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/notifications
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/notifications-backend
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/notifications-common
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/notifications-node
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/signals-backend
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/signals
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/signals-node
|
||||
- https://github.com/backstage/backstage/blob/master/plugins/signals-react
|
||||
- [notifications](https://github.com/backstage/backstage/blob/master/plugins/notifications)
|
||||
- [notifications-backend](https://github.com/backstage/backstage/blob/master/plugins/notifications-backend)
|
||||
- [notifications-common](https://github.com/backstage/backstage/blob/master/plugins/notifications-common)
|
||||
- [notifications-node](https://github.com/backstage/backstage/blob/master/plugins/notifications-node)
|
||||
- [signals-backend](https://github.com/backstage/backstage/blob/master/plugins/signals-backend)
|
||||
- [signals](https://github.com/backstage/backstage/blob/master/plugins/signals)
|
||||
- [signals-node](https://github.com/backstage/backstage/blob/master/plugins/signals-node)
|
||||
- [signals-react](https://github.com/backstage/backstage/blob/master/plugins/signals-react)
|
||||
|
||||
@@ -6,7 +6,7 @@ description: How to use the notifications and signals
|
||||
|
||||
## Notifications Backend
|
||||
|
||||
The Notifications backend plugin provides an API to create notifications, list notifications per logged-in user, and search based on parameters.
|
||||
The notifications backend plugin provides an API to create notifications, list notifications per logged-in user, and search based on parameters.
|
||||
|
||||
The plugin uses a relational [database](https://backstage.io/docs/getting-started/config/database) for persistence; no specifics are introduced in this context.
|
||||
|
||||
@@ -26,7 +26,7 @@ In the `packages/app/src/components/Root/Root.tsx`, tweak the [properties](https
|
||||
|
||||
## Usage
|
||||
|
||||
New notifications can be sent either by a backend plugin or an external service through the REST API.
|
||||
New notifications can be sent either by a backend plugin or by an external service through the REST API.
|
||||
|
||||
## Backend
|
||||
|
||||
@@ -71,7 +71,7 @@ await notificationService.send({
|
||||
});
|
||||
```
|
||||
|
||||
Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/report.api.md) for further details.
|
||||
Consult the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/report.api.md) for further details.
|
||||
|
||||
### External Services
|
||||
|
||||
|
||||
@@ -11,23 +11,9 @@ public roadmap. This not a complete list of all work happening in and around the
|
||||
project, it only highlights the highest priority initiatives worked on by the
|
||||
core maintainers.
|
||||
|
||||
## 2024 Fall Roadmap
|
||||
## 2025 Spring Roadmap
|
||||
|
||||
The initiatives listed below are planned for release within the next half-year, starting in May 2024. The roadmap is updated every 6 months, and the next update is planned for November 2024.
|
||||
|
||||
### Backend System 1.0
|
||||
|
||||
The goal of this initiative is the stable 1.0 release of the [new backend system](../backend-system/index.md).
|
||||
This includes ensuring that all documentation is up to date, and includes API
|
||||
reviews and refactoring efforts to ensure that what is released is both stable
|
||||
and evolvable. You can follow along with this work in the [meta issue](https://github.com/backstage/backstage/issues/24493).
|
||||
|
||||
As part of this initiative, there will also be an exploration on how to
|
||||
simplify extension of backend services. It is not currently possible to augment
|
||||
backend services through declarative integration, they are instead only
|
||||
customizable through complete replacement. This also limits the ability to
|
||||
modularize services and scale ownership of the implementations. The goal is to
|
||||
provide a more flexible and scalable way to extend backend services.
|
||||
The initiatives listed below are planned for release within the next half-year, starting in November 2024. The roadmap is updated every 6 months, and the next update is planned for April 2024.
|
||||
|
||||
### New Frontend System - Ready for Adoption
|
||||
|
||||
@@ -40,53 +26,17 @@ This milestone also includes reaching and executing [rollout phase 2](https://gi
|
||||
Once the initial milestone is reached, the goal is to also build out broader
|
||||
support for the new frontend system in the core plugins.
|
||||
|
||||
### Backstage Security Audit
|
||||
|
||||
This is the second security audit of the Backstage project. It is done together,
|
||||
and with the support of the [Cloud Native Computing Foundation (CNCF)](https://www.cncf.io/).
|
||||
This time the audit will in particular focus on the recently introduced
|
||||
[authentication system](https://github.com/backstage/backstage/tree/master/beps/0003-auth-architecture-evolution),
|
||||
but also cover other parts of the project.
|
||||
|
||||
### Plugin Metadata
|
||||
|
||||
The goal of this initiative is to provide better machine readable metadata for
|
||||
Backstage packages, available both at runtime, at build-time and as part of
|
||||
package registries. We want to surface information such as what packages make up
|
||||
a particular plugin, what features it provides, and more generally laying the
|
||||
foundation for an evolvable plugin metadata system.
|
||||
|
||||
### MUI v5 Green-light
|
||||
|
||||
Material-UI v4 is still the officially supported version of MUI in Backstage.
|
||||
While we have heard that adopters have had success using MUI 5, this is still an
|
||||
untested path with known bugs. The goal of this initiative is to iron out any
|
||||
remaining issues or gaps, and then provide a green light for migration to MUI 5.
|
||||
|
||||
### Configuration Improvements
|
||||
|
||||
This initiative aims to improve the configuration experience and reliability in
|
||||
Backstage. Areas for improvement include the way that configuration schema is
|
||||
loaded, the way that plugins access configuration that is not owned by them, how
|
||||
plugins read configuration, and how configuration visibility is handled.
|
||||
|
||||
### Versioned Documentation
|
||||
|
||||
The goal of this initiative is to provide versioned documentation at
|
||||
[backstage.io](https://backstage.io). This lets us provide documentation that is
|
||||
both up-to-date while at the same time not ahead of the latest release.
|
||||
|
||||
### Rework Pull Request & Issue Process
|
||||
|
||||
Our current review and issue triage process is centered around either core- or
|
||||
project area maintainers. The goal of this initiative is to make it simpler for
|
||||
more members of the community to be involved and contribute to this process.
|
||||
|
||||
### Catalog Observability
|
||||
### Catalog Performance
|
||||
|
||||
The goal of this initiative is to provide better tools for debugging catalog
|
||||
ingestion issues and to more generally reduce friction for setting up and
|
||||
maintaining the software catalog.
|
||||
The goal of this initiative is to improve the performance of the Software
|
||||
Catalog, both in terms of speeding up the read API and improving the ingestion
|
||||
process.
|
||||
|
||||
## How to influence the roadmap
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ The backend supplies a central logging service,
|
||||
[`rootLogger`](../backend-system/core-services/root-logger.md), as well as a plugin
|
||||
based logger, [`logger`](../backend-system/core-services/logger.md) from `coreServices`.
|
||||
To add additional granularity to your logs, you can create children from the plugin
|
||||
based logger, using the `.child()` method and provide is with JSON data. For example,
|
||||
based logger, using the `.child()` method and provide it with JSON data. For example,
|
||||
if you wanted to log items for a specific span in your plugin, you could do
|
||||
|
||||
```ts
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,8 @@ authorURL: https://www.linkedin.com/in/emmamckeewhite/
|
||||
|
||||
What an action-packed and memorable week for the Backstage community meeting up IRL at KubeCon North America 2022 in (unseasonably warm and sunny) Detroit. Let’s see what the community was up to:
|
||||
|
||||
{/* truncate */}
|
||||
|
||||
### BackstageCon: A full day of nothing but Backstage
|
||||
|
||||

|
||||
|
||||
@@ -10,7 +10,7 @@ author: Taylor Webber, Staff Engineer, Stash
|
||||
|
||||
{/* truncate */}
|
||||
|
||||
At [Stash](stash.com), our mission is to give people the confidence to invest for a better life. Our app simplifies investing for the middle class who may be less experienced with traditional investing and retirement planning. Our customers trust us with their money, and with that, rely on us to provide a responsive and quality experience that works every time.
|
||||
At [Stash](https://www.stash.com), our mission is to give people the confidence to invest for a better life. Our app simplifies investing for the middle class who may be less experienced with traditional investing and retirement planning. Our customers trust us with their money, and with that, rely on us to provide a responsive and quality experience that works every time.
|
||||
|
||||
It isn't revolutionary to say that monitoring the health of a software application is critical for ensuring its reliability and performance in service of customers' needs. However, in a distributed architecture like microservices, tracking ownership and monitoring application health across the system quickly becomes complex. The difficulties are further compounded when leveraging multiple SaaS products, which is common in modern development but specifically so for fintechs like Stash that integrate best-of-breed software in novel ways, as we do across our platform.
|
||||
|
||||
|
||||
@@ -123,6 +123,11 @@ const config: Config = {
|
||||
},
|
||||
blog: {
|
||||
path: 'blog',
|
||||
// Gets rid of the following:
|
||||
// Warning: Some blog authors used in "2024-12-18-backstage-wrapped-2024.mdx" are not defined in "authors.yml":
|
||||
// - {"name":"Patrik Oldsberg, Spotify & Ben Lambert, Spotify","key":null,"page":null}
|
||||
// Note that we recommend to declare authors once in a "authors.yml" file and reference them by key in blog posts front matter to avoid author info duplication.
|
||||
onInlineAuthors: 'ignore',
|
||||
},
|
||||
theme: {
|
||||
customCss: 'src/theme/customTheme.scss',
|
||||
@@ -299,11 +304,6 @@ const config: Config = {
|
||||
themes: ['docusaurus-theme-openapi-docs'],
|
||||
themeConfig: {
|
||||
languageTabs: [
|
||||
{
|
||||
highlight: 'javascript',
|
||||
language: 'nodejs',
|
||||
logoClass: 'nodejs',
|
||||
},
|
||||
{
|
||||
highlight: 'javascript',
|
||||
language: 'javascript',
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "root",
|
||||
"version": "1.37.0",
|
||||
"version": "1.38.0-next.0",
|
||||
"backstage": {
|
||||
"cli": {
|
||||
"new": {
|
||||
|
||||
@@ -1,5 +1,51 @@
|
||||
# example-app-next
|
||||
|
||||
## 0.0.22-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog@1.29.0-next.0
|
||||
- @backstage/cli@0.32.0-next.0
|
||||
- @backstage/canon@0.2.1-next.0
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.16-next.0
|
||||
- @backstage/plugin-scaffolder-react@1.15.0-next.0
|
||||
- @backstage/plugin-catalog-react@1.16.1-next.0
|
||||
- @backstage/plugin-scaffolder@1.30.0-next.0
|
||||
- @backstage/core-compat-api@0.4.1-next.0
|
||||
- @backstage/plugin-api-docs@0.12.6-next.0
|
||||
- @backstage/plugin-catalog-graph@0.4.18-next.0
|
||||
- @backstage/plugin-catalog-import@0.12.12-next.0
|
||||
- @backstage/plugin-org@0.6.38-next.0
|
||||
- @backstage/plugin-techdocs@1.12.5-next.0
|
||||
- @backstage/plugin-user-settings@0.8.21-next.0
|
||||
- @backstage/app-defaults@1.6.0
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/core-app-api@1.16.0
|
||||
- @backstage/core-components@0.17.0
|
||||
- @backstage/core-plugin-api@1.10.5
|
||||
- @backstage/frontend-app-api@0.11.0
|
||||
- @backstage/frontend-defaults@0.2.0
|
||||
- @backstage/frontend-plugin-api@0.10.0
|
||||
- @backstage/integration-react@1.2.5
|
||||
- @backstage/theme@0.6.4
|
||||
- @backstage/plugin-app@0.1.7
|
||||
- @backstage/plugin-app-visualizer@0.1.17
|
||||
- @backstage/plugin-auth-react@0.1.13
|
||||
- @backstage/plugin-catalog-common@1.1.3
|
||||
- @backstage/plugin-home@0.8.7-next.0
|
||||
- @backstage/plugin-kubernetes@0.12.6-next.0
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.24-next.0
|
||||
- @backstage/plugin-notifications@0.5.4-next.0
|
||||
- @backstage/plugin-permission-react@0.4.32
|
||||
- @backstage/plugin-search@1.4.25-next.0
|
||||
- @backstage/plugin-search-common@1.2.17
|
||||
- @backstage/plugin-search-react@1.8.7
|
||||
- @backstage/plugin-signals@0.0.17
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.22
|
||||
- @backstage/plugin-techdocs-react@1.2.15
|
||||
|
||||
## 0.0.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app-next",
|
||||
"version": "0.0.21",
|
||||
"version": "0.0.22-next.0",
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,47 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.108-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog@1.29.0-next.0
|
||||
- @backstage/cli@0.32.0-next.0
|
||||
- @backstage/canon@0.2.1-next.0
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.16-next.0
|
||||
- @backstage/plugin-scaffolder-react@1.15.0-next.0
|
||||
- @backstage/plugin-catalog-react@1.16.1-next.0
|
||||
- @backstage/plugin-scaffolder@1.30.0-next.0
|
||||
- @backstage/plugin-api-docs@0.12.6-next.0
|
||||
- @backstage/plugin-catalog-graph@0.4.18-next.0
|
||||
- @backstage/plugin-catalog-import@0.12.12-next.0
|
||||
- @backstage/plugin-org@0.6.38-next.0
|
||||
- @backstage/plugin-techdocs@1.12.5-next.0
|
||||
- @backstage/plugin-user-settings@0.8.21-next.0
|
||||
- @backstage/app-defaults@1.6.0
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/core-app-api@1.16.0
|
||||
- @backstage/core-components@0.17.0
|
||||
- @backstage/core-plugin-api@1.10.5
|
||||
- @backstage/frontend-app-api@0.11.0
|
||||
- @backstage/integration-react@1.2.5
|
||||
- @backstage/theme@0.6.4
|
||||
- @backstage/plugin-auth-react@0.1.13
|
||||
- @backstage/plugin-catalog-common@1.1.3
|
||||
- @backstage/plugin-devtools@0.1.26-next.0
|
||||
- @backstage/plugin-home@0.8.7-next.0
|
||||
- @backstage/plugin-kubernetes@0.12.6-next.0
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.24-next.0
|
||||
- @backstage/plugin-notifications@0.5.4-next.0
|
||||
- @backstage/plugin-permission-react@0.4.32
|
||||
- @backstage/plugin-search@1.4.25-next.0
|
||||
- @backstage/plugin-search-common@1.2.17
|
||||
- @backstage/plugin-search-react@1.8.7
|
||||
- @backstage/plugin-signals@0.0.17
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.22
|
||||
- @backstage/plugin-techdocs-react@1.2.15
|
||||
|
||||
## 0.2.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.107",
|
||||
"version": "0.2.108-next.0",
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
# @backstage/backend-defaults
|
||||
|
||||
## 0.9.0-next.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 01edf6e: Allow pass through of redis client and cluster options to Cache core service
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-app-api@1.2.1
|
||||
- @backstage/plugin-auth-node@0.6.1
|
||||
- @backstage/plugin-permission-node@0.9.0
|
||||
- @backstage/backend-dev-utils@0.1.5
|
||||
- @backstage/backend-plugin-api@1.2.1
|
||||
- @backstage/cli-node@0.2.13
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/config-loader@1.10.0
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/integration@1.16.2
|
||||
- @backstage/integration-aws-node@0.1.15
|
||||
- @backstage/types@1.2.1
|
||||
- @backstage/plugin-events-node@0.4.9
|
||||
|
||||
## 0.8.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-defaults",
|
||||
"version": "0.8.2",
|
||||
"version": "0.9.0-next.0",
|
||||
"description": "Backend defaults used by Backstage backend apps",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
# @backstage/backend-dynamic-feature-service
|
||||
|
||||
## 0.6.2-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-defaults@0.9.0-next.0
|
||||
- @backstage/plugin-scaffolder-node@0.8.1-next.0
|
||||
- @backstage/plugin-auth-node@0.6.1
|
||||
- @backstage/plugin-catalog-backend@1.32.0
|
||||
- @backstage/plugin-events-backend@0.5.0
|
||||
- @backstage/plugin-permission-node@0.9.0
|
||||
- @backstage/plugin-search-backend-node@1.3.9
|
||||
- @backstage/backend-plugin-api@1.2.1
|
||||
- @backstage/cli-common@0.1.15
|
||||
- @backstage/cli-node@0.2.13
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/config-loader@1.10.0
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/types@1.2.1
|
||||
- @backstage/plugin-app-node@0.1.31
|
||||
- @backstage/plugin-events-node@0.4.9
|
||||
- @backstage/plugin-permission-common@0.8.4
|
||||
- @backstage/plugin-search-common@1.2.17
|
||||
|
||||
## 0.6.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-dynamic-feature-service",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.2-next.0",
|
||||
"description": "Backstage dynamic feature service",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# example-backend-legacy
|
||||
|
||||
## 0.2.109-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-defaults@0.9.0-next.0
|
||||
- @backstage/plugin-scaffolder-backend@1.32.0-next.0
|
||||
- @backstage/plugin-auth-backend@0.24.5-next.0
|
||||
- @backstage/plugin-auth-node@0.6.1
|
||||
- @backstage/plugin-catalog-backend@1.32.0
|
||||
- @backstage/plugin-events-backend@0.5.0
|
||||
- @backstage/plugin-kubernetes-backend@0.19.4
|
||||
- @backstage/plugin-permission-backend@0.5.55
|
||||
- @backstage/plugin-permission-node@0.9.0
|
||||
- @backstage/plugin-search-backend@2.0.1-next.0
|
||||
- @backstage/plugin-search-backend-node@1.3.9
|
||||
- @backstage/plugin-signals-backend@0.3.2
|
||||
- @backstage/plugin-techdocs-backend@2.0.1-next.0
|
||||
- @backstage/plugin-search-backend-module-techdocs@0.4.1-next.0
|
||||
- @backstage/backend-plugin-api@1.2.1
|
||||
- @backstage/catalog-client@1.9.1
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/integration@1.16.2
|
||||
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6
|
||||
- @backstage/plugin-catalog-backend-module-unprocessed@0.5.6
|
||||
- @backstage/plugin-catalog-node@1.16.1
|
||||
- @backstage/plugin-events-node@0.4.9
|
||||
- @backstage/plugin-permission-common@0.8.4
|
||||
- @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.8-next.0
|
||||
- @backstage/plugin-scaffolder-backend-module-gitlab@0.8.2-next.0
|
||||
- @backstage/plugin-scaffolder-backend-module-rails@0.5.8-next.0
|
||||
- @backstage/plugin-search-backend-module-catalog@0.3.2
|
||||
- @backstage/plugin-search-backend-module-elasticsearch@1.7.0
|
||||
- @backstage/plugin-search-backend-module-explore@0.3.0
|
||||
- @backstage/plugin-search-backend-module-pg@0.5.42
|
||||
- @backstage/plugin-signals-node@0.1.18
|
||||
|
||||
## 0.2.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend-legacy",
|
||||
"version": "0.2.108",
|
||||
"version": "0.2.109-next.0",
|
||||
"backstage": {
|
||||
"role": "backend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/backend-test-utils
|
||||
|
||||
## 1.3.2-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-defaults@0.9.0-next.0
|
||||
- @backstage/backend-app-api@1.2.1
|
||||
- @backstage/plugin-auth-node@0.6.1
|
||||
- @backstage/backend-plugin-api@1.2.1
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/types@1.2.1
|
||||
- @backstage/plugin-events-node@0.4.9
|
||||
|
||||
## 1.3.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-test-utils",
|
||||
"version": "1.3.1",
|
||||
"version": "1.3.2-next.0",
|
||||
"description": "Test helpers library for Backstage backends",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# example-backend
|
||||
|
||||
## 0.0.37-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-defaults@0.9.0-next.0
|
||||
- @backstage/plugin-scaffolder-backend-module-github@0.6.2-next.0
|
||||
- @backstage/plugin-scaffolder-backend@1.32.0-next.0
|
||||
- @backstage/plugin-scaffolder-backend-module-notifications@0.1.9-next.0
|
||||
- @backstage/plugin-app-backend@0.5.0
|
||||
- @backstage/plugin-auth-backend@0.24.5-next.0
|
||||
- @backstage/plugin-auth-backend-module-github-provider@0.3.1
|
||||
- @backstage/plugin-auth-node@0.6.1
|
||||
- @backstage/plugin-catalog-backend@1.32.0
|
||||
- @backstage/plugin-devtools-backend@0.5.4-next.0
|
||||
- @backstage/plugin-events-backend@0.5.0
|
||||
- @backstage/plugin-kubernetes-backend@0.19.4
|
||||
- @backstage/plugin-notifications-backend@0.5.4
|
||||
- @backstage/plugin-permission-backend@0.5.55
|
||||
- @backstage/plugin-permission-node@0.9.0
|
||||
- @backstage/plugin-proxy-backend@0.6.0
|
||||
- @backstage/plugin-search-backend@2.0.1-next.0
|
||||
- @backstage/plugin-search-backend-node@1.3.9
|
||||
- @backstage/plugin-signals-backend@0.3.2
|
||||
- @backstage/plugin-techdocs-backend@2.0.1-next.0
|
||||
- @backstage/plugin-search-backend-module-techdocs@0.4.1-next.0
|
||||
- @backstage/backend-plugin-api@1.2.1
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/plugin-auth-backend-module-guest-provider@0.2.6
|
||||
- @backstage/plugin-catalog-backend-module-backstage-openapi@0.5.0
|
||||
- @backstage/plugin-catalog-backend-module-openapi@0.2.8
|
||||
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6
|
||||
- @backstage/plugin-catalog-backend-module-unprocessed@0.5.6
|
||||
- @backstage/plugin-permission-backend-module-allow-all-policy@0.2.6
|
||||
- @backstage/plugin-permission-common@0.8.4
|
||||
- @backstage/plugin-search-backend-module-catalog@0.3.2
|
||||
- @backstage/plugin-search-backend-module-explore@0.3.0
|
||||
|
||||
## 0.0.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend",
|
||||
"version": "0.0.36",
|
||||
"version": "0.0.37-next.0",
|
||||
"backstage": {
|
||||
"role": "backend"
|
||||
},
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
import { addons } from '@storybook/manager-api';
|
||||
import { create } from '@storybook/theming';
|
||||
|
||||
const theme = create({
|
||||
base: 'light',
|
||||
brandTitle: 'Canon',
|
||||
brandImage: 'logo.svg',
|
||||
});
|
||||
|
||||
addons.setConfig({
|
||||
theme,
|
||||
});
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/canon
|
||||
|
||||
## 0.2.1-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6af7b16: Updated styles for the Menu component in Canon.
|
||||
- 513477f: Add global CSS reset for anchor tags.
|
||||
- 05a5003: Fix the Icon component when the name is not found to return null instead of an empty SVG.
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -404,36 +404,6 @@
|
||||
height: 1.5rem;
|
||||
}
|
||||
|
||||
.canon-FieldRoot {
|
||||
font-family: var(--canon-font-regular);
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.canon-FieldLabel {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-primary);
|
||||
margin-bottom: var(--canon-space-1_5);
|
||||
}
|
||||
|
||||
.canon-FieldDescription {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-secondary);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-FieldError {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-danger);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-Input {
|
||||
border-radius: var(--canon-radius-3);
|
||||
border: 1px solid var(--canon-border);
|
||||
@@ -465,54 +435,50 @@
|
||||
border-color: var(--canon-fg-danger);
|
||||
}
|
||||
|
||||
.canon-Input[data-disabled] {
|
||||
opacity: .5;
|
||||
cursor: not-allowed;
|
||||
border: 1px solid var(--canon-border-disabled);
|
||||
}
|
||||
|
||||
.canon-Input--size-small {
|
||||
.canon-Input--size-sm {
|
||||
height: 2rem;
|
||||
}
|
||||
|
||||
.canon-Input--size-medium {
|
||||
.canon-Input--size-md {
|
||||
height: 2.5rem;
|
||||
}
|
||||
|
||||
.canon-MenuTrigger {
|
||||
box-sizing: border-box;
|
||||
border: 1px solid var(--color-gray-200);
|
||||
background-color: var(--color-gray-50);
|
||||
height: 2.5rem;
|
||||
color: var(--color-gray-900);
|
||||
user-select: none;
|
||||
border-radius: .375rem;
|
||||
outline: 0;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: .375rem;
|
||||
margin: 0;
|
||||
padding: 0 .875rem;
|
||||
font-family: inherit;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.5rem;
|
||||
.canon-FieldRoot {
|
||||
font-family: var(--canon-font-regular);
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@media (hover: hover) {
|
||||
&:hover {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
}
|
||||
.canon-FieldLabel {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-primary);
|
||||
margin-bottom: var(--canon-space-1_5);
|
||||
}
|
||||
|
||||
&:active, &[data-popup-open] {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
.canon-FieldDescription {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-secondary);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--color-blue);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
.canon-FieldError {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-danger);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-FieldValidity {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-secondary);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-MenuPositioner {
|
||||
@@ -520,60 +486,45 @@
|
||||
}
|
||||
|
||||
.canon-MenuPopup {
|
||||
box-sizing: border-box;
|
||||
background-color: var(--canon-bg-elevated);
|
||||
color: var(--color-fg-primary);
|
||||
padding: var(--canon-space-2);
|
||||
background-color: var(--canon-bg-surface-1);
|
||||
border: 1px solid var(--canon-border);
|
||||
color: var(--canon-fg-primary);
|
||||
transform-origin: var(--transform-origin);
|
||||
border-radius: .375rem;
|
||||
padding-block: .25rem;
|
||||
outline: none;
|
||||
max-width: 340px;
|
||||
transition: transform .15s, opacity .15s;
|
||||
overflow: hidden;
|
||||
|
||||
&[data-starting-style], &[data-ending-style] {
|
||||
opacity: 0;
|
||||
transform: scale(.9);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
& {
|
||||
outline: 1px solid var(--color-gray-200);
|
||||
box-shadow: 0px 10px 15px -3px var(--color-gray-200), 0px 4px 6px -4px var(--color-gray-200);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
& {
|
||||
outline: 1px solid var(--color-gray-300);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuItem {
|
||||
cursor: default;
|
||||
user-select: none;
|
||||
padding-block: .5rem;
|
||||
gap: var(--canon-space-2);
|
||||
color: var(--canon-fg-primary);
|
||||
border-radius: var(--canon-radius-2);
|
||||
padding: var(--canon-space-2) var(--canon-space-2);
|
||||
padding-right: var(--canon-space-4);
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
padding-left: 1rem;
|
||||
padding-right: 2rem;
|
||||
font-size: .875rem;
|
||||
line-height: 1rem;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&[data-highlighted] {
|
||||
z-index: 0;
|
||||
color: var(--color-gray-50);
|
||||
background-color: var(--canon-bg-tint-hover);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&[data-highlighted]:before {
|
||||
content: "";
|
||||
z-index: -1;
|
||||
background-color: var(--color-gray-900);
|
||||
border-radius: .25rem;
|
||||
position: absolute;
|
||||
inset-block: 0;
|
||||
inset-inline: .25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuSeparator {
|
||||
|
||||
@@ -9083,6 +9083,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
:where(a) {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
:root {
|
||||
--canon-font-regular: system-ui;
|
||||
--canon-font-monospace: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;
|
||||
|
||||
+19
-70
@@ -1,98 +1,47 @@
|
||||
.canon-MenuTrigger {
|
||||
box-sizing: border-box;
|
||||
border: 1px solid var(--color-gray-200);
|
||||
background-color: var(--color-gray-50);
|
||||
height: 2.5rem;
|
||||
color: var(--color-gray-900);
|
||||
user-select: none;
|
||||
border-radius: .375rem;
|
||||
outline: 0;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: .375rem;
|
||||
margin: 0;
|
||||
padding: 0 .875rem;
|
||||
font-family: inherit;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.5rem;
|
||||
display: flex;
|
||||
|
||||
@media (hover: hover) {
|
||||
&:hover {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
}
|
||||
|
||||
&:active, &[data-popup-open] {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--color-blue);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuPositioner {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.canon-MenuPopup {
|
||||
box-sizing: border-box;
|
||||
background-color: var(--canon-bg-elevated);
|
||||
color: var(--color-fg-primary);
|
||||
padding: var(--canon-space-2);
|
||||
background-color: var(--canon-bg-surface-1);
|
||||
border: 1px solid var(--canon-border);
|
||||
color: var(--canon-fg-primary);
|
||||
transform-origin: var(--transform-origin);
|
||||
border-radius: .375rem;
|
||||
padding-block: .25rem;
|
||||
outline: none;
|
||||
max-width: 340px;
|
||||
transition: transform .15s, opacity .15s;
|
||||
overflow: hidden;
|
||||
|
||||
&[data-starting-style], &[data-ending-style] {
|
||||
opacity: 0;
|
||||
transform: scale(.9);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
& {
|
||||
outline: 1px solid var(--color-gray-200);
|
||||
box-shadow: 0px 10px 15px -3px var(--color-gray-200), 0px 4px 6px -4px var(--color-gray-200);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
& {
|
||||
outline: 1px solid var(--color-gray-300);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuItem {
|
||||
cursor: default;
|
||||
user-select: none;
|
||||
padding-block: .5rem;
|
||||
gap: var(--canon-space-2);
|
||||
color: var(--canon-fg-primary);
|
||||
border-radius: var(--canon-radius-2);
|
||||
padding: var(--canon-space-2) var(--canon-space-2);
|
||||
padding-right: var(--canon-space-4);
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
padding-left: 1rem;
|
||||
padding-right: 2rem;
|
||||
font-size: .875rem;
|
||||
line-height: 1rem;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&[data-highlighted] {
|
||||
z-index: 0;
|
||||
color: var(--color-gray-50);
|
||||
background-color: var(--canon-bg-tint-hover);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&[data-highlighted]:before {
|
||||
content: "";
|
||||
z-index: -1;
|
||||
background-color: var(--color-gray-900);
|
||||
border-radius: .25rem;
|
||||
position: absolute;
|
||||
inset-block: 0;
|
||||
inset-inline: .25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuSeparator {
|
||||
|
||||
+58
-102
@@ -9083,6 +9083,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
:where(a) {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
:root {
|
||||
--canon-font-regular: system-ui;
|
||||
--canon-font-monospace: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;
|
||||
@@ -9605,36 +9610,6 @@
|
||||
height: 1.5rem;
|
||||
}
|
||||
|
||||
.canon-FieldRoot {
|
||||
font-family: var(--canon-font-regular);
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.canon-FieldLabel {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-primary);
|
||||
margin-bottom: var(--canon-space-1_5);
|
||||
}
|
||||
|
||||
.canon-FieldDescription {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-secondary);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-FieldError {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-danger);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-Input {
|
||||
border-radius: var(--canon-radius-3);
|
||||
border: 1px solid var(--canon-border);
|
||||
@@ -9666,54 +9641,50 @@
|
||||
border-color: var(--canon-fg-danger);
|
||||
}
|
||||
|
||||
.canon-Input[data-disabled] {
|
||||
opacity: .5;
|
||||
cursor: not-allowed;
|
||||
border: 1px solid var(--canon-border-disabled);
|
||||
}
|
||||
|
||||
.canon-Input--size-small {
|
||||
.canon-Input--size-sm {
|
||||
height: 2rem;
|
||||
}
|
||||
|
||||
.canon-Input--size-medium {
|
||||
.canon-Input--size-md {
|
||||
height: 2.5rem;
|
||||
}
|
||||
|
||||
.canon-MenuTrigger {
|
||||
box-sizing: border-box;
|
||||
border: 1px solid var(--color-gray-200);
|
||||
background-color: var(--color-gray-50);
|
||||
height: 2.5rem;
|
||||
color: var(--color-gray-900);
|
||||
user-select: none;
|
||||
border-radius: .375rem;
|
||||
outline: 0;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: .375rem;
|
||||
margin: 0;
|
||||
padding: 0 .875rem;
|
||||
font-family: inherit;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.5rem;
|
||||
.canon-FieldRoot {
|
||||
font-family: var(--canon-font-regular);
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@media (hover: hover) {
|
||||
&:hover {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
}
|
||||
.canon-FieldLabel {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-primary);
|
||||
margin-bottom: var(--canon-space-1_5);
|
||||
}
|
||||
|
||||
&:active, &[data-popup-open] {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
.canon-FieldDescription {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-secondary);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--color-blue);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
.canon-FieldError {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-danger);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-FieldValidity {
|
||||
font-size: var(--canon-font-size-2);
|
||||
font-weight: var(--canon-font-weight-regular);
|
||||
color: var(--canon-fg-secondary);
|
||||
padding-top: var(--canon-space-1_5);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.canon-MenuPositioner {
|
||||
@@ -9721,60 +9692,45 @@
|
||||
}
|
||||
|
||||
.canon-MenuPopup {
|
||||
box-sizing: border-box;
|
||||
background-color: var(--canon-bg-elevated);
|
||||
color: var(--color-fg-primary);
|
||||
padding: var(--canon-space-2);
|
||||
background-color: var(--canon-bg-surface-1);
|
||||
border: 1px solid var(--canon-border);
|
||||
color: var(--canon-fg-primary);
|
||||
transform-origin: var(--transform-origin);
|
||||
border-radius: .375rem;
|
||||
padding-block: .25rem;
|
||||
outline: none;
|
||||
max-width: 340px;
|
||||
transition: transform .15s, opacity .15s;
|
||||
overflow: hidden;
|
||||
|
||||
&[data-starting-style], &[data-ending-style] {
|
||||
opacity: 0;
|
||||
transform: scale(.9);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
& {
|
||||
outline: 1px solid var(--color-gray-200);
|
||||
box-shadow: 0px 10px 15px -3px var(--color-gray-200), 0px 4px 6px -4px var(--color-gray-200);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
& {
|
||||
outline: 1px solid var(--color-gray-300);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuItem {
|
||||
cursor: default;
|
||||
user-select: none;
|
||||
padding-block: .5rem;
|
||||
gap: var(--canon-space-2);
|
||||
color: var(--canon-fg-primary);
|
||||
border-radius: var(--canon-radius-2);
|
||||
padding: var(--canon-space-2) var(--canon-space-2);
|
||||
padding-right: var(--canon-space-4);
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
padding-left: 1rem;
|
||||
padding-right: 2rem;
|
||||
font-size: .875rem;
|
||||
line-height: 1rem;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&[data-highlighted] {
|
||||
z-index: 0;
|
||||
color: var(--color-gray-50);
|
||||
background-color: var(--canon-bg-tint-hover);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&[data-highlighted]:before {
|
||||
content: "";
|
||||
z-index: -1;
|
||||
background-color: var(--color-gray-900);
|
||||
border-radius: .25rem;
|
||||
position: absolute;
|
||||
inset-block: 0;
|
||||
inset-inline: .25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuSeparator {
|
||||
|
||||
+11
-11
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/canon",
|
||||
"version": "0.2.0",
|
||||
"version": "0.2.1-next.0",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
},
|
||||
@@ -36,7 +36,7 @@
|
||||
"lint": "backstage-cli package lint",
|
||||
"prepack": "backstage-cli package prepack",
|
||||
"postpack": "backstage-cli package postpack",
|
||||
"start": "yarn build:css:watch && yarn storybook",
|
||||
"start": "concurrently \"yarn build:css:watch\" \"yarn storybook\"",
|
||||
"storybook": "storybook dev -p 6006",
|
||||
"test": "backstage-cli package test"
|
||||
},
|
||||
@@ -47,15 +47,15 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "workspace:^",
|
||||
"@storybook/addon-essentials": "^8.6.4",
|
||||
"@storybook/addon-interactions": "^8.6.4",
|
||||
"@storybook/addon-essentials": "^8.6.8",
|
||||
"@storybook/addon-interactions": "^8.6.8",
|
||||
"@storybook/addon-styling-webpack": "^1.0.1",
|
||||
"@storybook/addon-themes": "^8.6.4",
|
||||
"@storybook/addon-webpack5-compiler-swc": "^2.1.0",
|
||||
"@storybook/blocks": "^8.6.4",
|
||||
"@storybook/react": "^8.6.4",
|
||||
"@storybook/react-webpack5": "^8.6.4",
|
||||
"@storybook/test": "^8.6.4",
|
||||
"@storybook/addon-themes": "^8.6.8",
|
||||
"@storybook/addon-webpack5-compiler-swc": "^3.0.0",
|
||||
"@storybook/blocks": "^8.6.8",
|
||||
"@storybook/react": "^8.6.8",
|
||||
"@storybook/react-webpack5": "^8.6.8",
|
||||
"@storybook/test": "^8.6.8",
|
||||
"@testing-library/jest-dom": "^6.0.0",
|
||||
"@types/react": "^18.0.0",
|
||||
"@types/react-dom": "^18.0.0",
|
||||
@@ -68,7 +68,7 @@
|
||||
"react": "^18.0.2",
|
||||
"react-dom": "^18.0.2",
|
||||
"react-router-dom": "^6.3.0",
|
||||
"storybook": "^8.6.4"
|
||||
"storybook": "^8.6.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "^17.0.0 || ^18.0.0",
|
||||
|
||||
@@ -11,6 +11,7 @@ import { default as React_2 } from 'react';
|
||||
import * as React_3 from 'react';
|
||||
import { ReactNode } from 'react';
|
||||
import { RefAttributes } from 'react';
|
||||
import type { RemixiconComponentType } from '@remixicon/react';
|
||||
import { ScrollArea as ScrollArea_2 } from '@base-ui-components/react/scroll-area';
|
||||
import { Tooltip as Tooltip_2 } from '@base-ui-components/react/tooltip';
|
||||
|
||||
@@ -604,7 +605,7 @@ export interface IconContextProps {
|
||||
}
|
||||
|
||||
// @public (undocumented)
|
||||
export type IconMap = Partial<Record<IconNames, React.ComponentType>>;
|
||||
export type IconMap = Partial<Record<IconNames, RemixiconComponentType>>;
|
||||
|
||||
// @public (undocumented)
|
||||
export type IconNames =
|
||||
@@ -679,7 +680,7 @@ export interface IconProviderProps {
|
||||
// (undocumented)
|
||||
children?: ReactNode;
|
||||
// (undocumented)
|
||||
overrides?: Partial<Record<IconNames, React.ComponentType>>;
|
||||
overrides?: Partial<Record<IconNames, RemixiconComponentType>>;
|
||||
}
|
||||
|
||||
// @public (undocumented)
|
||||
|
||||
@@ -61,21 +61,33 @@ const DecorativeBox = () => {
|
||||
|
||||
export const Default: Story = {
|
||||
args: {
|
||||
children: [<DecorativeBox />, <DecorativeBox />, <DecorativeBox />],
|
||||
children: (
|
||||
<>
|
||||
<DecorativeBox />, <DecorativeBox />, <DecorativeBox />
|
||||
</>
|
||||
),
|
||||
},
|
||||
};
|
||||
|
||||
export const ColumnDirection: Story = {
|
||||
args: {
|
||||
direction: 'column',
|
||||
children: [<DecorativeBox />, <DecorativeBox />, <DecorativeBox />],
|
||||
children: (
|
||||
<>
|
||||
<DecorativeBox />, <DecorativeBox />, <DecorativeBox />
|
||||
</>
|
||||
),
|
||||
},
|
||||
};
|
||||
|
||||
export const RowDirection: Story = {
|
||||
args: {
|
||||
direction: 'row',
|
||||
children: [<DecorativeBox />, <DecorativeBox />, <DecorativeBox />],
|
||||
children: (
|
||||
<>
|
||||
<DecorativeBox />, <DecorativeBox />, <DecorativeBox />
|
||||
</>
|
||||
),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import React from 'react';
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { Heading } from './Heading';
|
||||
import { Flex } from '../Flex';
|
||||
import { Text } from '../Text';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Heading',
|
||||
@@ -42,7 +41,7 @@ export const Title1: Story = {
|
||||
|
||||
export const AllVariants: Story = {
|
||||
render: () => (
|
||||
<Flex>
|
||||
<Flex direction="column" gap="4">
|
||||
<Heading variant="display">Display</Heading>
|
||||
<Heading variant="title1">Title 1</Heading>
|
||||
<Heading variant="title2">Title 2</Heading>
|
||||
@@ -68,10 +67,22 @@ export const CustomTag: Story = {
|
||||
},
|
||||
};
|
||||
|
||||
export const WrappedInLink: Story = {
|
||||
args: {
|
||||
...Default.args,
|
||||
},
|
||||
decorators: [
|
||||
Story => (
|
||||
<a href="/">
|
||||
<Story />
|
||||
</a>
|
||||
),
|
||||
],
|
||||
};
|
||||
|
||||
export const Playground: Story = {
|
||||
render: () => (
|
||||
<Flex>
|
||||
<Text>All variants</Text>
|
||||
<Flex direction="column" gap="4">
|
||||
<Heading variant="display">Display</Heading>
|
||||
<Heading variant="title1">Title 1</Heading>
|
||||
<Heading variant="title2">Title 2</Heading>
|
||||
|
||||
@@ -130,4 +130,4 @@ export const icons: IconMap = {
|
||||
youtube: RiYoutubeLine,
|
||||
'zoom-in': RiZoomInLine,
|
||||
'zoom-out': RiZoomOutLine,
|
||||
};
|
||||
} as const;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
import { ReactNode } from 'react';
|
||||
import type { RemixiconComponentType } from '@remixicon/react';
|
||||
|
||||
/** @public */
|
||||
export type IconNames =
|
||||
@@ -74,7 +75,7 @@ export type IconNames =
|
||||
| 'zoom-out';
|
||||
|
||||
/** @public */
|
||||
export type IconMap = Partial<Record<IconNames, React.ComponentType>>;
|
||||
export type IconMap = Partial<Record<IconNames, RemixiconComponentType>>;
|
||||
|
||||
/** @public */
|
||||
export type IconProps = {
|
||||
@@ -92,5 +93,5 @@ export interface IconContextProps {
|
||||
/** @public */
|
||||
export interface IconProviderProps {
|
||||
children?: ReactNode;
|
||||
overrides?: Partial<Record<IconNames, React.ComponentType>>;
|
||||
overrides?: Partial<Record<IconNames, RemixiconComponentType>>;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
import React from 'react';
|
||||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { Menu } from './Menu';
|
||||
import { Button } from '../Button';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/Menu',
|
||||
@@ -30,9 +31,15 @@ export const Default: Story = {
|
||||
args: {
|
||||
children: (
|
||||
<>
|
||||
<Menu.Trigger>Menu</Menu.Trigger>
|
||||
<Menu.Trigger
|
||||
render={props => (
|
||||
<Button {...props} size="small">
|
||||
Menu
|
||||
</Button>
|
||||
)}
|
||||
/>
|
||||
<Menu.Portal>
|
||||
<Menu.Positioner>
|
||||
<Menu.Positioner sideOffset={8} align="start">
|
||||
<Menu.Popup>
|
||||
<Menu.Item>Item 1</Menu.Item>
|
||||
<Menu.Item>Item 2</Menu.Item>
|
||||
@@ -44,3 +51,10 @@ export const Default: Story = {
|
||||
),
|
||||
},
|
||||
};
|
||||
|
||||
export const Open: Story = {
|
||||
args: {
|
||||
...Default.args,
|
||||
open: true,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,54 +1,17 @@
|
||||
.canon-MenuTrigger {
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.375rem;
|
||||
height: 2.5rem;
|
||||
padding: 0 0.875rem;
|
||||
margin: 0;
|
||||
outline: 0;
|
||||
border: 1px solid var(--color-gray-200);
|
||||
border-radius: 0.375rem;
|
||||
background-color: var(--color-gray-50);
|
||||
font-family: inherit;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.5rem;
|
||||
color: var(--color-gray-900);
|
||||
user-select: none;
|
||||
|
||||
@media (hover: hover) {
|
||||
&:hover {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
|
||||
&[data-popup-open] {
|
||||
background-color: var(--color-gray-100);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--color-blue);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuPositioner {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.canon-MenuPopup {
|
||||
box-sizing: border-box;
|
||||
padding-block: 0.25rem;
|
||||
padding: var(--canon-space-2);
|
||||
border-radius: 0.375rem;
|
||||
background-color: var(--canon-bg-elevated);
|
||||
color: var(--color-fg-primary);
|
||||
background-color: var(--canon-bg-surface-1);
|
||||
border: 1px solid var(--canon-border);
|
||||
color: var(--canon-fg-primary);
|
||||
outline: none;
|
||||
overflow: hidden;
|
||||
transform-origin: var(--transform-origin);
|
||||
max-width: 340px;
|
||||
transition: transform 150ms, opacity 150ms;
|
||||
|
||||
&[data-starting-style],
|
||||
@@ -56,44 +19,29 @@
|
||||
opacity: 0;
|
||||
transform: scale(0.9);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
outline: 1px solid var(--color-gray-200);
|
||||
box-shadow: 0px 10px 15px -3px var(--color-gray-200),
|
||||
0px 4px 6px -4px var(--color-gray-200);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
outline: 1px solid var(--color-gray-300);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
.canon-MenuItem {
|
||||
outline: 0;
|
||||
cursor: default;
|
||||
user-select: none;
|
||||
padding-block: 0.5rem;
|
||||
padding-left: 1rem;
|
||||
padding-right: 2rem;
|
||||
display: flex;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1rem;
|
||||
gap: var(--canon-space-2);
|
||||
color: var(--canon-fg-primary);
|
||||
text-decoration: none;
|
||||
border-radius: var(--canon-radius-2);
|
||||
padding: var(--canon-space-2) var(--canon-space-2);
|
||||
padding-right: var(--canon-space-4);
|
||||
cursor: pointer;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&[data-highlighted] {
|
||||
z-index: 0;
|
||||
position: relative;
|
||||
color: var(--color-gray-50);
|
||||
}
|
||||
|
||||
&[data-highlighted]::before {
|
||||
content: '';
|
||||
z-index: -1;
|
||||
position: absolute;
|
||||
inset-block: 0;
|
||||
inset-inline: 0.25rem;
|
||||
border-radius: 0.25rem;
|
||||
background-color: var(--color-gray-900);
|
||||
background-color: var(--canon-bg-tint-hover);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -89,6 +89,19 @@ export const Responsive: Story = {
|
||||
},
|
||||
};
|
||||
|
||||
export const WrappedInLink: Story = {
|
||||
args: {
|
||||
...Default.args,
|
||||
},
|
||||
decorators: [
|
||||
Story => (
|
||||
<a href="/">
|
||||
<Story />
|
||||
</a>
|
||||
),
|
||||
],
|
||||
};
|
||||
|
||||
export const Playground: Story = {
|
||||
render: () => (
|
||||
<Flex gap="4" direction="column">
|
||||
|
||||
@@ -18,8 +18,13 @@
|
||||
@import './normalize.css';
|
||||
@import './utilities.css';
|
||||
|
||||
/* Light theme tokens */
|
||||
/* Global reset */
|
||||
:where(a) {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Light theme tokens */
|
||||
:root {
|
||||
/* Font families */
|
||||
--canon-font-regular: system-ui;
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
# @backstage/cli
|
||||
|
||||
## 0.32.0-next.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- c7254ae: Internal update to move the `clean`, `pre/postpack` and `fix` commands into their own separate module.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 4ea76f7: Bump @module-federation/enhanced ^0.9.0 to fix GHSA-593f-38f6-jp5m
|
||||
- 87a5cb4: Fixed an issue causing the `repo lint` command to fail when the `--max-warnings` option was used.
|
||||
- d83f3f4: Resolved a problem where the `start` command did not correctly handle multiple `--require` flags, ensuring all specified modules are now properly loaded.
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/cli-common@0.1.15
|
||||
- @backstage/cli-node@0.2.13
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/config-loader@1.10.0
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/eslint-plugin@0.1.10
|
||||
- @backstage/integration@1.16.2
|
||||
- @backstage/release-manifests@0.0.12
|
||||
- @backstage/types@1.2.1
|
||||
|
||||
## 0.31.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/cli",
|
||||
"version": "0.31.0",
|
||||
"version": "0.32.0-next.0",
|
||||
"description": "CLI for developing Backstage plugins and apps",
|
||||
"backstage": {
|
||||
"role": "cli"
|
||||
@@ -58,7 +58,7 @@
|
||||
"@backstage/release-manifests": "workspace:^",
|
||||
"@backstage/types": "workspace:^",
|
||||
"@manypkg/get-packages": "^1.1.3",
|
||||
"@module-federation/enhanced": "^0.8.0",
|
||||
"@module-federation/enhanced": "^0.9.0",
|
||||
"@octokit/graphql": "^5.0.0",
|
||||
"@octokit/graphql-schema": "^13.7.0",
|
||||
"@octokit/oauth-app": "^4.2.0",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/core-compat-api
|
||||
|
||||
## 0.4.1-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-react@1.16.1-next.0
|
||||
- @backstage/core-plugin-api@1.10.5
|
||||
- @backstage/frontend-plugin-api@0.10.0
|
||||
- @backstage/version-bridge@1.0.11
|
||||
|
||||
## 0.4.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/core-compat-api",
|
||||
"version": "0.4.0",
|
||||
"version": "0.4.1-next.0",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user