Merge branch 'backstage:master' into milliehartnt123-create-ui-doc
This commit is contained in:
@@ -6,3 +6,58 @@ find the full documentation for it [in our repository](https://github.com/change
|
||||
|
||||
We have a quick list of common questions to get you started engaging with this project in
|
||||
[our documentation](https://github.com/changesets/changesets/blob/master/docs/common-questions.md)
|
||||
|
||||
---
|
||||
|
||||
## Backstage UI Changesets
|
||||
|
||||
For `@backstage/ui` changesets, use this format:
|
||||
|
||||
```markdown
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Brief summary
|
||||
|
||||
Optional description with code examples.
|
||||
|
||||
**Migration:**
|
||||
|
||||
Migration instructions (breaking changes only).
|
||||
|
||||
**Affected components:** button, card
|
||||
```
|
||||
|
||||
**Required:**
|
||||
|
||||
- End with `**Affected components:**` + comma-separated component names
|
||||
- For breaking changes: Add `**Migration:**` section
|
||||
- No headings (`##`, `###`) inside - use bold markers
|
||||
|
||||
**Examples:**
|
||||
|
||||
```markdown
|
||||
Fixed button hover state
|
||||
|
||||
**Affected components:** button
|
||||
```
|
||||
|
||||
````markdown
|
||||
**BREAKING**: New Table API
|
||||
|
||||
**Migration:**
|
||||
|
||||
Update imports:
|
||||
|
||||
```diff
|
||||
- import { Table } from '@backstage/ui';
|
||||
+ import { Table, type ColumnConfig } from '@backstage/ui';
|
||||
```
|
||||
````
|
||||
|
||||
**Affected components:** table
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-defaults': minor
|
||||
---
|
||||
|
||||
Added action filtering support with glob patterns and attribute constraints.
|
||||
|
||||
The `ActionsService` now supports filtering actions based on configuration. This allows controlling which actions are exposed to consumers like the MCP backend.
|
||||
|
||||
Configuration example:
|
||||
|
||||
```yaml
|
||||
backend:
|
||||
actions:
|
||||
pluginSources:
|
||||
- catalog
|
||||
- scaffolder
|
||||
filter:
|
||||
include:
|
||||
- id: 'catalog:*'
|
||||
attributes:
|
||||
destructive: false
|
||||
- id: 'scaffolder:*'
|
||||
exclude:
|
||||
- id: '*:delete-*'
|
||||
- attributes:
|
||||
readOnly: false
|
||||
```
|
||||
|
||||
Filtering logic:
|
||||
|
||||
- `include`: Rules for actions to include. Each rule can specify an `id` glob pattern and/or `attributes` constraints. An action must match at least one rule to be included. If no include rules are specified, all actions are included by default.
|
||||
- `exclude`: Rules for actions to exclude. Takes precedence over include rules.
|
||||
- Each rule combines `id` and `attributes` with AND logic (both must match if specified).
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Added a new `FullPage` component that fills the remaining viewport height below the `PluginHeader`.
|
||||
|
||||
```tsx
|
||||
<PluginHeader title="My Plugin" tabs={tabs} />
|
||||
<FullPage>
|
||||
{/* content fills remaining height */}
|
||||
</FullPage>
|
||||
```
|
||||
|
||||
**Affected components:** FullPage
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
'@backstage/ui': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Alert no longer accepts a `surface` prop
|
||||
|
||||
The Alert component's background is now driven entirely by its `status` prop. The `surface` prop has been removed.
|
||||
|
||||
```diff
|
||||
- <Alert surface="1" status="info" />
|
||||
+ <Alert status="info" />
|
||||
```
|
||||
|
||||
**Affected components:** Alert
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
'@backstage/ui': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Removed gray scale tokens and renamed background surface tokens to neutral tokens
|
||||
|
||||
The `--bui-gray-1` through `--bui-gray-8` tokens have been removed. The `--bui-bg-surface-*` and `--bui-bg-neutral-on-surface-*` tokens have been replaced by a unified `--bui-bg-neutral-*` scale.
|
||||
|
||||
**Migration:**
|
||||
|
||||
Replace surface tokens directly:
|
||||
|
||||
```diff
|
||||
- background: var(--bui-bg-surface-0);
|
||||
+ background: var(--bui-bg-neutral-0);
|
||||
```
|
||||
|
||||
Replace on-surface tokens shifted by +1:
|
||||
|
||||
```diff
|
||||
- background: var(--bui-bg-neutral-on-surface-0);
|
||||
+ background: var(--bui-bg-neutral-1);
|
||||
```
|
||||
|
||||
Replace gray tokens 1-4 with neutral equivalents (`--bui-gray-5` through `--bui-gray-8` have no direct replacement):
|
||||
|
||||
```diff
|
||||
- background: var(--bui-gray-1);
|
||||
+ background: var(--bui-bg-neutral-1);
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-defaults': minor
|
||||
---
|
||||
|
||||
**BREAKING**: The `API_FACTORY_CONFLICT` warning is now treated as an error and will prevent the app from starting.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-app-api': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Updated the behavior of the new API override logic to reject the override and block app startup instead of just logging a deprecation warning.
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': patch
|
||||
---
|
||||
|
||||
Added an `apis` option to `createExtensionTester`, `renderInTestApp`, and `renderTestApp` to override APIs when testing extensions. Use the `mockApis` helpers to create mock implementations:
|
||||
|
||||
```typescript
|
||||
import { identityApiRef } from '@backstage/frontend-plugin-api';
|
||||
import { mockApis } from '@backstage/frontend-test-utils';
|
||||
|
||||
// Override APIs in createExtensionTester
|
||||
const tester = createExtensionTester(myExtension, {
|
||||
apis: [
|
||||
[
|
||||
identityApiRef,
|
||||
mockApis.identity({ userEntityRef: 'user:default/guest' }),
|
||||
],
|
||||
],
|
||||
});
|
||||
|
||||
// Override APIs in renderInTestApp
|
||||
renderInTestApp(<MyComponent />, {
|
||||
apis: [
|
||||
[
|
||||
identityApiRef,
|
||||
mockApis.identity({ userEntityRef: 'user:default/guest' }),
|
||||
],
|
||||
],
|
||||
});
|
||||
|
||||
// Override APIs in renderTestApp
|
||||
renderTestApp({
|
||||
extensions: [myExtension],
|
||||
apis: [
|
||||
[
|
||||
identityApiRef,
|
||||
mockApis.identity({ userEntityRef: 'user:default/guest' }),
|
||||
],
|
||||
],
|
||||
});
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-app-visualizer': minor
|
||||
---
|
||||
|
||||
Migrated to use `SubPageBlueprint` for tabbed navigation and added a copy-tree-as-JSON plugin header action using `PluginHeaderActionBlueprint`. The plugin now specifies a `title` and `icon`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-app-api': patch
|
||||
---
|
||||
|
||||
Fixed memory leak by properly cleaning up process event listeners on backend shutdown.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-test-utils': minor
|
||||
---
|
||||
|
||||
Added `createServiceMock`, a public utility for creating `ServiceMock` instances for custom service refs. This allows plugin authors to define mock creators for their own services following the same pattern as the built-in `mockServices` mocks.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-test-utils': patch
|
||||
---
|
||||
|
||||
Updated `startTestBackend` to support factory-based extension points (v1.1 format) in addition to the existing direct implementation format.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Removed the `TestApiRegistry` class, use `TestApiProvider` directly instead, storing reused APIs in a variable, e.g. `const apis = [...] as const`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
Allow setting optional description on group creation
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixes app background color on dark mode.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
---
|
||||
|
||||
Fixes a bug where the `EntityListProvider` would not correctly hydrate query parameters if more than 20 were provided for the same key.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-plugin-api': patch
|
||||
'@backstage/cli-common': patch
|
||||
---
|
||||
|
||||
Move some of the symlink resolution to `isChildPath`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-app-visualizer': patch
|
||||
---
|
||||
|
||||
Bump react-aria-components to v1.14.0
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-app-backend': patch
|
||||
'@backstage/plugin-app-node': patch
|
||||
---
|
||||
|
||||
Updated plugin metadata.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend-module-auth0-provider': patch
|
||||
---
|
||||
|
||||
Add support for organizational invites in auth0 strategy
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Added indeterminate state support to the Checkbox component for handling partial selection scenarios like table header checkboxes.
|
||||
|
||||
Affected components: Checkbox
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Added missing `aria-label` attributes to `SearchField` components in `Select`, `MenuAutocomplete`, and `MenuAutocompleteListbox` to fix accessibility warnings.
|
||||
|
||||
Affected components: Select, MenuAutocomplete, MenuAutocompleteListbox
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/frontend-plugin-api': patch
|
||||
---
|
||||
|
||||
Updated documentation for `createApiRef` to clarify the role of the ID in specifying the owning plugin of an API.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/integration': patch
|
||||
'@backstage/plugin-catalog-backend-module-azure': patch
|
||||
---
|
||||
|
||||
Added support for `{org}.visualstudio.com` domains used by Azure DevOps
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-api-docs': patch
|
||||
'@backstage/plugin-catalog-graph': patch
|
||||
'@backstage/plugin-org': patch
|
||||
---
|
||||
|
||||
Added `@backstage/frontend-test-utils` dev dependency.
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
'@backstage/plugin-catalog-backend-module-aws': patch
|
||||
'@backstage/plugin-catalog-backend-module-azure': patch
|
||||
'@backstage/plugin-catalog-backend-module-backstage-openapi': patch
|
||||
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
|
||||
'@backstage/plugin-catalog-backend-module-bitbucket-server': patch
|
||||
'@backstage/plugin-catalog-backend-module-gcp': patch
|
||||
'@backstage/plugin-catalog-backend-module-gerrit': patch
|
||||
'@backstage/plugin-catalog-backend-module-gitea': patch
|
||||
'@backstage/plugin-catalog-backend-module-github': patch
|
||||
'@backstage/plugin-catalog-backend-module-github-org': patch
|
||||
'@backstage/plugin-catalog-backend-module-gitlab': patch
|
||||
'@backstage/plugin-catalog-backend-module-gitlab-org': patch
|
||||
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
|
||||
'@backstage/plugin-catalog-backend-module-ldap': patch
|
||||
'@backstage/plugin-catalog-backend-module-msgraph': patch
|
||||
'@backstage/plugin-catalog-backend-module-openapi': patch
|
||||
'@backstage/plugin-catalog-backend-module-puppetdb': patch
|
||||
'@backstage/plugin-catalog-backend-module-scaffolder-entity-model': patch
|
||||
---
|
||||
|
||||
Updated imports to use stable catalog extension points from `@backstage/plugin-catalog-node` instead of the deprecated alpha exports.
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-node': minor
|
||||
---
|
||||
|
||||
Promoted stable catalog extension points from alpha to main export. The following extension points are now exported from `@backstage/plugin-catalog-node` instead of `@backstage/plugin-catalog-node/alpha`:
|
||||
|
||||
- `catalogLocationsExtensionPoint` and `CatalogLocationsExtensionPoint`
|
||||
- `catalogProcessingExtensionPoint` and `CatalogProcessingExtensionPoint`
|
||||
- `catalogAnalysisExtensionPoint` and `CatalogAnalysisExtensionPoint`
|
||||
|
||||
The old alpha exports for these extension points are now deprecated with `@deprecated` markers pointing to the new stable exports. Please update your imports from `@backstage/plugin-catalog-node/alpha` to `@backstage/plugin-catalog-node`.
|
||||
|
||||
Note: The `catalogModelExtensionPoint`, `catalogPermissionExtensionPoint`, and related types remain in alpha.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-node': patch
|
||||
---
|
||||
|
||||
Updated `catalogServiceMock.mock` to use `createServiceMock` from `@backstage/backend-test-utils`, replacing the internal copy of `simpleMock`. Added `@backstage/backend-test-utils` as an optional peer dependency.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
---
|
||||
|
||||
Failures to connect catalog providers are now attributed to the module that provided the failing provider. This means that such failures will be reported as module startup failures rather than a failure to start the catalog plugin, and will therefore respect `onPluginModuleBootFailure` configuration instead.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
---
|
||||
|
||||
The `catalogApiMock` test utility now returns a `MockWithApiFactory`, allowing it to be passed directly to test utilities like `renderTestApp` and `TestApiProvider` without needing the `[catalogApiRef, catalogApiMock()]` tuple.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend-module-auth0-provider': minor
|
||||
---
|
||||
|
||||
feat: Added organization option to authorization params of the strategy
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-msgraph': patch
|
||||
---
|
||||
|
||||
Changed the logger level from 'warning' to 'debug' when we are unable to load the user's photo.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixes disabled state in primary and secondary buttons in Backstage UI.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed dark theme `--bui-fg-secondary` and `--bui-fg-disabled` tokens using black-based `oklch(0% ...)` instead of white-based `oklch(100% ...)`, making secondary and disabled text visible on dark backgrounds.
|
||||
@@ -0,0 +1,94 @@
|
||||
---
|
||||
'@backstage/ui': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Replaced `Surface` / `onSurface` system with new provider/consumer background system
|
||||
|
||||
The old `Surface` type (`'0'`–`'3'`, `'auto'`) and its associated props (`surface`, `onSurface`) have been replaced by a provider/consumer `bg` architecture.
|
||||
|
||||
**Types:**
|
||||
|
||||
- `ContainerBg` — `'neutral-1'` | `'neutral-2'` | `'neutral-3'` | `'danger'` | `'warning'` | `'success'`
|
||||
- `ProviderBg` — `ContainerBg | 'neutral-auto'`
|
||||
|
||||
Consumer components (e.g. Button) inherit the parent's `bg` via `data-on-bg`, and CSS handles the visual step-up. See "Neutral level capping" below for details on how levels are bounded.
|
||||
|
||||
**Hooks:**
|
||||
|
||||
- `useBgProvider(bg?)` — for provider components. Returns `{ bg: undefined }` when no `bg` is given (transparent). Supports `'neutral-auto'` to auto-increment from the parent context.
|
||||
- `useBgConsumer()` — for consumer components. Returns the parent container's `bg` unchanged.
|
||||
|
||||
**Component roles:**
|
||||
|
||||
- **Provider-only** (Box, Flex, Grid): set `data-bg`, wrap children in `BgProvider`. **Transparent by default** — they do _not_ auto-increment; pass `bg="neutral-auto"` explicitly if you want automatic neutral stepping.
|
||||
- **Consumer-only** (Button, ButtonIcon, ButtonLink): set `data-on-bg`, inherit the parent container's `bg` unchanged.
|
||||
- **Provider + Consumer** (Card): sets both `data-bg` and `data-on-bg`, wraps children. Card passes `bg="neutral-auto"` to its inner Box, so it auto-increments from the parent context.
|
||||
|
||||
**Neutral level capping:**
|
||||
|
||||
Provider components cap at `neutral-3`. There is no `neutral-4` prop value. The `neutral-4` level exists only in consumer component CSS — for example, a Button sitting on a `neutral-3` surface uses `neutral-4` tokens internally via `data-on-bg`.
|
||||
|
||||
**Migration:**
|
||||
|
||||
Rename the `surface` prop to `bg` on provider components and update values:
|
||||
|
||||
```diff
|
||||
- <Box surface="1">
|
||||
+ <Box bg="neutral-1">
|
||||
|
||||
- <Card surface="2">
|
||||
+ <Card bg="neutral-2">
|
||||
|
||||
- <Flex surface="0">
|
||||
+ <Flex bg="neutral-1">
|
||||
|
||||
- <Grid.Root surface="1">
|
||||
+ <Grid.Root bg="neutral-1">
|
||||
```
|
||||
|
||||
Remove `onSurface` from consumer components — they now always inherit from the parent container:
|
||||
|
||||
```diff
|
||||
- <Button onSurface="1" variant="secondary">
|
||||
+ <Button variant="secondary">
|
||||
|
||||
- <ButtonIcon onSurface="2" variant="secondary" />
|
||||
+ <ButtonIcon variant="secondary" />
|
||||
|
||||
- <ToggleButton onSurface="1">
|
||||
+ <ToggleButton>
|
||||
```
|
||||
|
||||
Update type imports:
|
||||
|
||||
```diff
|
||||
- import type { Surface, LeafSurfaceProps, ContainerSurfaceProps } from '@backstage/ui';
|
||||
+ import type { ContainerBg, ProviderBg } from '@backstage/ui';
|
||||
```
|
||||
|
||||
Replace hook usage in custom components:
|
||||
|
||||
```diff
|
||||
- import { useSurface, SurfaceProvider } from '@backstage/ui';
|
||||
+ import { useBgProvider, useBgConsumer, BgProvider } from '@backstage/ui';
|
||||
|
||||
- const { surface } = useSurface({ surface: props.surface });
|
||||
+ const { bg } = useBgProvider(props.bg);
|
||||
|
||||
- const { surface } = useSurface({ onSurface: props.onSurface });
|
||||
+ const { bg } = useBgConsumer();
|
||||
```
|
||||
|
||||
Update CSS selectors targeting surface data attributes:
|
||||
|
||||
```diff
|
||||
- [data-surface='1'] { ... }
|
||||
+ [data-bg='neutral-1'] { ... }
|
||||
|
||||
- [data-on-surface='1'] { ... }
|
||||
+ [data-on-bg='neutral-1'] { ... }
|
||||
```
|
||||
|
||||
Note: Provider components use `data-bg` (values: `neutral-1` through `neutral-3`, plus intent values). Consumer components use `data-on-bg`, which reflects the parent container's `bg` directly. The `neutral-4` level never appears as a prop or `data-bg` value — it is used only in consumer CSS.
|
||||
|
||||
**Affected components:** Box, Button, ButtonIcon, ButtonLink, ToggleButton, Card, Flex, Grid
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/repo-tools': patch
|
||||
---
|
||||
|
||||
Add newline to OpenAPI license template files.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-defaults': patch
|
||||
---
|
||||
|
||||
Implementing `readTree` for `GoogleGcsReader`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated catalog provider module template to use stable catalog extension points from `@backstage/plugin-catalog-node` instead of alpha exports.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs-backend': patch
|
||||
---
|
||||
|
||||
Some AWS `publisher` config options such as `region`, `endpoint`, `accountId` are now marked as `@visibility backend` instead of `secret`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Updated to include the missing core plugins in the template used with the `--next` flag. Also updated `react-router*` versions and added Jest 30-related dependencies. Finally, moved the order of `@playwright/test` so it won't trigger a file change during the creation process.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Bumped create-app version.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Updated the app template sidebar to use the new `NavContentBlueprint` API for page-based navigation.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Added support for CSS exports in package builds. When a package declares a CSS file in its `exports` field (e.g., `"./styles.css": "./src/styles.css"`), the CLI will automatically bundle it during `backstage-cli package build`, resolving any `@import` statements. The export path is rewritten from `src/` to `dist/` at publish time.
|
||||
|
||||
Fixed `backstage-cli repo fix` to not add `typesVersions` entries for non-script exports like CSS files.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-app-react': minor
|
||||
---
|
||||
|
||||
Initial release of this web library for `@backstage/plugin-app`.
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
'@backstage/e2e-test-utils': patch
|
||||
---
|
||||
|
||||
Added optional `channel` option to `generateProjects()` to allow customizing the Playwright browser channel for testing against different browsers variants. When not provided, the function defaults to 'chrome' to maintain backward compatibility.
|
||||
|
||||
Example usage:
|
||||
|
||||
```ts
|
||||
import { generateProjects } from '@backstage/e2e-test-utils';
|
||||
|
||||
export default defineConfig({
|
||||
projects: generateProjects({ channel: 'msedge' }),
|
||||
});
|
||||
```
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed Box component to forward HTML attributes to the underlying div element.
|
||||
|
||||
**Affected components:** Box
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-mcp-actions-backend': patch
|
||||
---
|
||||
|
||||
build(deps): bump `@modelcontextprotocol/sdk` from 1.24.3 to 1.25.2
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
build(deps-dev): bump `storybook` from 10.1.9 to 10.1.10
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': minor
|
||||
---
|
||||
|
||||
Migrated `UnregisterEntityDialog` from Material UI to Backstage UI components.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-app-api': patch
|
||||
---
|
||||
|
||||
Clean up process event listeners on backend stop to prevent leaks
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed disabled tertiary buttons incorrectly showing hover effects on surfaces.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Added new Popover component for Backstage UI with automatic overflow handling, and full placement support. Also introduced `--bui-shadow` token for consistent elevation styling across overlay components (Popover, Tooltip, Menu).
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-catalog': patch
|
||||
---
|
||||
|
||||
Header in EntityLayout should always be shown.
|
||||
Monitoring the loading status caused flickering when the refresh() method of the Async Entity was invoked.
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
---
|
||||
|
||||
Implemented handling of events from the newly introduced alpha
|
||||
`catalogScmEventsServiceRef` service, in the builtin entity providers. This
|
||||
allows entities to get refreshed, and locations updated or removed, as a
|
||||
response to incoming events. In its first iteration, only the GitHub module
|
||||
implements such event handling however.
|
||||
|
||||
This is not yet enabled by default, but this fact may change in a future
|
||||
release. To try it out, ensure that you have the latest catalog GitHub module
|
||||
installed, and set the following in your app-config:
|
||||
|
||||
```yaml
|
||||
catalog:
|
||||
scmEvents: true
|
||||
```
|
||||
|
||||
Or if you want to pick and choose from the various features:
|
||||
|
||||
```yaml
|
||||
catalog:
|
||||
scmEvents:
|
||||
# refresh (reprocess) upon events?
|
||||
refresh: true
|
||||
# automatically unregister locations based on events? (files deleted, repos archived, etc)
|
||||
unregister: true
|
||||
# automatically move locations based on events? (repo transferred, file renamed, etc)
|
||||
move: true
|
||||
```
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch
|
||||
'@backstage/plugin-search-backend-module-stack-overflow-collator': patch
|
||||
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
|
||||
'@backstage/plugin-auth-backend-module-azure-easyauth-provider': patch
|
||||
'@backstage/plugin-auth-backend-module-oauth2-proxy-provider': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
|
||||
'@backstage/plugin-auth-backend-module-pinniped-provider': patch
|
||||
'@backstage/plugin-auth-backend-module-aws-alb-provider': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket': patch
|
||||
'@backstage/plugin-search-backend-module-elasticsearch': patch
|
||||
'@backstage/plugin-auth-backend-module-oidc-provider': patch
|
||||
'@backstage/backend-dynamic-feature-service': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-gerrit': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-github': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-sentry': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-yeoman': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-gitea': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-rails': patch
|
||||
'@backstage/plugin-catalog-backend-module-openapi': patch
|
||||
'@backstage/plugin-search-backend-module-techdocs': patch
|
||||
'@backstage/plugin-catalog-backend-module-gerrit': patch
|
||||
'@backstage/plugin-catalog-backend-module-github': patch
|
||||
'@backstage/plugin-catalog-backend-module-gitlab': patch
|
||||
'@backstage/plugin-search-backend-module-catalog': patch
|
||||
'@backstage/plugin-search-backend-module-explore': patch
|
||||
'@backstage/plugin-catalog-backend-module-ldap': patch
|
||||
'@backstage/plugin-catalog-backend-module-aws': patch
|
||||
'@backstage/plugin-scaffolder-node-test-utils': patch
|
||||
'@backstage/plugin-techdocs-addons-test-utils': patch
|
||||
'@backstage/plugin-search-backend-module-pg': patch
|
||||
'@backstage/backend-openapi-utils': patch
|
||||
'@backstage/plugin-bitbucket-cloud-common': patch
|
||||
'@backstage/integration-aws-node': patch
|
||||
'@backstage/plugin-notifications-backend': patch
|
||||
'@backstage/backend-plugin-api': patch
|
||||
'@backstage/backend-test-utils': patch
|
||||
'@backstage/plugin-search-backend-node': patch
|
||||
'@backstage/backend-dev-utils': patch
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
'@backstage/plugin-permission-backend': patch
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
'@backstage/backend-defaults': patch
|
||||
'@backstage/core-components': patch
|
||||
'@backstage/plugin-devtools-backend': patch
|
||||
'@backstage/plugin-kubernetes-react': patch
|
||||
'@backstage/plugin-techdocs-backend': patch
|
||||
'@backstage/e2e-test-utils': patch
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
'@backstage/plugin-kubernetes-node': patch
|
||||
'@backstage/plugin-scaffolder-node': patch
|
||||
'@backstage/plugin-signals-backend': patch
|
||||
'@backstage/config-loader': patch
|
||||
'@backstage/eslint-plugin': patch
|
||||
'@backstage/plugin-events-backend': patch
|
||||
'@backstage/plugin-search-backend': patch
|
||||
'@techdocs/cli': patch
|
||||
'@backstage/plugin-proxy-backend': patch
|
||||
'@backstage/plugin-search-common': patch
|
||||
'@backstage/plugin-techdocs-node': patch
|
||||
'@backstage/integration': patch
|
||||
'@backstage/plugin-auth-backend': patch
|
||||
'@backstage/plugin-catalog-node': patch
|
||||
'@backstage/cli-common': patch
|
||||
'@backstage/create-app': patch
|
||||
'@backstage/repo-tools': patch
|
||||
'@backstage/plugin-app-backend': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
'@backstage/cli-node': patch
|
||||
'@backstage/codemods': patch
|
||||
'@backstage/plugin-auth-node': patch
|
||||
'@backstage/plugin-api-docs': patch
|
||||
'@backstage/plugin-app-node': patch
|
||||
'@backstage/cli': patch
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Use node prefix on native imports
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-notifications': patch
|
||||
---
|
||||
|
||||
Added `renderItem` prop to `NotificationsSidebarItem` component, allowing custom UI rendering while retaining all built-in notification logic (unread count, snackbar, signals, web notifications).
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
Changed `gitlab:group:ensureExists` action to use `Groups.show` API instead of `Groups.search` for checking if a group path exists. This is more efficient as it directly retrieves the group by path rather than searching and filtering results.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-home': minor
|
||||
---
|
||||
|
||||
Widget configurations are now only saved to storage when the Save button is explicitly clicked. Added a Cancel button that allows users to discard unsaved changes and revert to the last saved state.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed Table sorting indicator not being visible when a column is actively sorted.
|
||||
|
||||
Affected components: Table, Column
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Updated the browser tab title on the template wizard page to display the specific template title instead of the generic "Create a new component" text.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-search-backend-module-elasticsearch': minor
|
||||
---
|
||||
|
||||
Added `elasticsearchAuthExtensionPoint` to enable dynamic authentication mechanisms such as bearer tokens with automatic rotation.
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
'@backstage/plugin-catalog': patch
|
||||
---
|
||||
|
||||
Add missing translation entries for catalog UI text.
|
||||
|
||||
This change adds translation keys and updates relevant UI components to use the correct localized labels and text in the catalog plugin. It ensures that catalog screens such as entity layout, tabs, search result items, table labels, and other UI elements correctly reference the i18n system for translation.
|
||||
|
||||
No functional behavior is changed aside from the improved internationalization support.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Bump `@swc/core` to support `ES2023` and `ES2024`
|
||||
@@ -1,44 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Redesigned Table component with new `useTable` hook API.
|
||||
|
||||
- The `Table` component (React Aria wrapper) is renamed to `TableRoot`
|
||||
- New high-level `Table` component that handles data display, pagination, sorting, and selection
|
||||
- The `useTable` hook is completely redesigned with a new API supporting three pagination modes (complete, offset, cursor)
|
||||
- New types: `ColumnConfig`, `TableProps`, `TableItem`, `UseTableOptions`, `UseTableResult`
|
||||
|
||||
New features include unified pagination modes, debounced query changes, stale data preservation during reloads, and row selection with toggle/replace behaviors.
|
||||
|
||||
**Migration guide:**
|
||||
|
||||
1. Update imports and use the new `useTable` hook:
|
||||
|
||||
```diff
|
||||
-import { Table, useTable } from '@backstage/ui';
|
||||
-const { data, paginationProps } = useTable({ data: items, pagination: {...} });
|
||||
+import { Table, useTable, type ColumnConfig } from '@backstage/ui';
|
||||
+const { tableProps } = useTable({
|
||||
+ mode: 'complete',
|
||||
+ getData: () => items,
|
||||
+});
|
||||
```
|
||||
|
||||
2. Define columns and render with the new Table API:
|
||||
|
||||
```diff
|
||||
-<Table aria-label="My table">
|
||||
- <TableHeader>...</TableHeader>
|
||||
- <TableBody items={data}>...</TableBody>
|
||||
-</Table>
|
||||
-<TablePagination {...paginationProps} />
|
||||
+const columns: ColumnConfig<Item>[] = [
|
||||
+ { id: 'name', label: 'Name', isRowHeader: true, cell: item => <CellText title={item.name} /> },
|
||||
+ { id: 'type', label: 'Type', cell: item => <CellText title={item.type} /> },
|
||||
+];
|
||||
+
|
||||
+<Table columnConfig={columns} {...tableProps} />
|
||||
```
|
||||
|
||||
Affected components: Table, TableRoot, TablePagination
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': patch
|
||||
---
|
||||
|
||||
Added `snapshot()` method to `ExtensionTester`, which returns a tree-shaped representation of the resolved extension hierarchy. Convenient to use with `toMatchInlineSnapshot()`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-graph': patch
|
||||
---
|
||||
|
||||
Fix large icon rendering in catalog graph nodes
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
'@backstage/backend-defaults': patch
|
||||
'@backstage/plugin-scaffolder-node': patch
|
||||
---
|
||||
|
||||
Wrap some of the action logic with `resolveSafeChildPath` and improve symlink handling when fetching remote and local files
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Removed `/alpha` from `scaffolderActionsExtensionPoint` import
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
The MarkdownContent component now handles HTML content the same way as GitHub when rendering GitHub-flavored Markdown
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed Menu component trigger button not toggling correctly. Removed custom click-outside handler that was interfering with React Aria's built-in state management, allowing the menu to properly open and close when clicking the trigger button.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-org': patch
|
||||
---
|
||||
|
||||
Adds the Resource kind to the `useGetEntities` fallback so that Resources are included by default when no specific kinds are provided in the group ownership card.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-mui-to-bui': patch
|
||||
---
|
||||
|
||||
Updated CSS token references to use renamed `--bui-bg-app` and `--bui-border-2` tokens.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog': patch
|
||||
---
|
||||
|
||||
Fixed vertical spacing between tags in the catalog table.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed nested Accordion icon state issue where the inner accordion's arrow icon would incorrectly show as expanded when only the outer accordion was expanded. The CSS selector now uses a direct parent selector to ensure the icon only responds to its own accordion's expanded state.
|
||||
|
||||
Affected components: Accordion
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed CSS Module syntax to comply with Next.js 16 Turbopack validation by flattening nested dark theme selectors.
|
||||
|
||||
**Affected components:** Popover, Tooltip
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-search-backend-module-elasticsearch': patch
|
||||
---
|
||||
|
||||
Fixed bulk indexing to refresh only the target index instead of all indexes, improving performance in multi-index deployments.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Fixed bug in Table component where the toolbar layout would break when both a title and filters were present.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-app-api': patch
|
||||
---
|
||||
|
||||
Fixed memory leak caused by duplicate `AppThemeSelector` instances and missing cleanup in `AppThemeSelector` and `AppLanguageSelector`. Added `dispose()` method to both selectors for proper resource cleanup.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Added `destructive` prop to Button for dangerous actions like delete or remove. Works with all variants (primary, secondary, tertiary).
|
||||
|
||||
**Affected components:** Button
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
|
||||
---
|
||||
|
||||
Fully enable API token functionality for Bitbucket-Cloud.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-puppetdb': patch
|
||||
---
|
||||
|
||||
Fixed crash when `latest_report_status` is undefined
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': minor
|
||||
---
|
||||
|
||||
Added `MockAlertApi` and `MockFeatureFlagsApi` implementations to the `mockApis` namespace. The mock implementations include useful testing methods like `clearAlerts()`, `waitForAlert()`, `getState()`, `setState()`, and `clearState()` for better test ergonomics.
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': minor
|
||||
---
|
||||
|
||||
**BREAKING**: The `mockApis` namespace is no longer a re-export from `@backstage/test-utils`. It's now a standalone namespace with mock implementations of most core APIs. Mock API instances can be passed directly to `TestApiProvider`, `renderInTestApp`, and `renderTestApp` without needing `[apiRef, impl]` tuples. As part of this change, the `.factory()` method on some mocks has been removed, since it's now redundant.
|
||||
|
||||
```tsx
|
||||
// Before
|
||||
import { mockApis } from '@backstage/frontend-test-utils';
|
||||
|
||||
renderInTestApp(<MyComponent />, {
|
||||
apis: [[identityApiRef, mockApis.identity()]],
|
||||
});
|
||||
|
||||
// After - mock APIs can be passed directly
|
||||
renderInTestApp(<MyComponent />, {
|
||||
apis: [mockApis.identity()],
|
||||
});
|
||||
```
|
||||
|
||||
This change also adds `createApiMock`, a public utility for creating mock API factories, intended for plugin authors to create their own `.mock()` variants.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Added `--include` and `--format` options to `backstage-cli info` command for including additional packages via glob patterns and outputting as JSON or Text.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-defaults': minor
|
||||
---
|
||||
|
||||
**BREAKING**: The constructor for `FetchUrlReader` is now private. If you have to construct an instance of it, please use `FetchUrlReader.fromConfig` instead.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend': minor
|
||||
---
|
||||
|
||||
Added experimental support for refresh tokens via the `auth.experimentalRefreshToken.enabled` configuration option. When enabled, clients can request the `offline_access` scope to receive refresh tokens that can be used to obtain new access tokens without re-authentication.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-app-api': patch
|
||||
---
|
||||
|
||||
Implemented support for the `internal` extension input option.
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': minor
|
||||
---
|
||||
|
||||
Add two config values to the `page:techdocs/reader` extension that configure default layout, `withoutSearch` and `withoutHeader`. Default are unchanged to `false`.
|
||||
|
||||
E.g. to disable the search and header on the Techdocs Reader Page:
|
||||
|
||||
```yaml
|
||||
app:
|
||||
extensions:
|
||||
- page:techdocs/reader:
|
||||
config:
|
||||
withoutSearch: true
|
||||
withoutHeader: true
|
||||
```
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-graph': patch
|
||||
'@backstage/plugin-kubernetes': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
'@backstage/plugin-api-docs': patch
|
||||
'@backstage/plugin-techdocs': patch
|
||||
'@backstage/plugin-catalog': patch
|
||||
'@backstage/plugin-org': patch
|
||||
---
|
||||
|
||||
Adjusted to use the new `@backstage/filter-predicates` types for predicate expressions.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Fixed `useDefinition` hook adding literal "undefined" class name when no className prop was passed.
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
'@backstage/plugin-kubernetes-common': patch
|
||||
'@backstage/plugin-kubernetes-react': patch
|
||||
'@backstage/plugin-kubernetes-node': patch
|
||||
---
|
||||
|
||||
Add PersistentVolume and PersistentVolumeClaims Rendering
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Update colour token again in ItemCardHeader to respect theme definition.
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
'@backstage/frontend-app-api': patch
|
||||
---
|
||||
|
||||
Updated error reporting and app tree resolution logic to attribute errors to the correct extension and allow app startup to proceed more optimistically:
|
||||
|
||||
- If an attachment fails to provide the required input data, the error is now attributed to the attachment rather than the parent extension.
|
||||
- Singleton extension inputs will now only forward attachment errors if the input is required.
|
||||
- Array extension inputs will now filter out failed attachments instead of failing the entire app tree resolution.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-github': patch
|
||||
---
|
||||
|
||||
cleaned up repo creation to make the unique portions explicit
|
||||
@@ -2,4 +2,4 @@
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Remove unused abort controller in debug:wait action
|
||||
Removed unused dependency
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/core-compat-api': patch
|
||||
'@backstage/plugin-app-visualizer': patch
|
||||
---
|
||||
|
||||
Internal updates for blueprint moves to `@backstage/plugin-app-react`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/theme': patch
|
||||
---
|
||||
|
||||
add square shape
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/ui': patch
|
||||
---
|
||||
|
||||
Allow `ref` as a prop on the `Tag` component
|
||||
|
||||
Affected components: Tag
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user