diff --git a/plugins/catalog-react/api-report-alpha.md b/plugins/catalog-react/api-report-alpha.md
index edfa183903..f3d251dd0e 100644
--- a/plugins/catalog-react/api-report-alpha.md
+++ b/plugins/catalog-react/api-report-alpha.md
@@ -6,16 +6,19 @@
///
import { AnyExtensionInputMap } from '@backstage/frontend-plugin-api';
+import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
import { Entity } from '@backstage/catalog-model';
+import { ExtensionBlueprint } from '@backstage/frontend-plugin-api';
import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
import { PortableSchema } from '@backstage/frontend-plugin-api';
+import { default as React_2 } from 'react';
import { ResolvedExtensionInputs } from '@backstage/frontend-plugin-api';
import { ResourcePermission } from '@backstage/plugin-permission-common';
import { RouteRef } from '@backstage/frontend-plugin-api';
import { TranslationRef } from '@backstage/core-plugin-api/alpha';
-// @alpha (undocumented)
+// @alpha @deprecated (undocumented)
export const catalogExtensionData: {
entityContentTitle: ConfigurableExtensionDataRef<
string,
@@ -92,7 +95,7 @@ export const catalogReactTranslationRef: TranslationRef<
}
>;
-// @alpha (undocumented)
+// @alpha @deprecated (undocumented)
export function createEntityCardExtension<
TConfig extends {
filter?: string;
@@ -125,7 +128,7 @@ export function createEntityCardExtension<
string | undefined
>;
-// @alpha (undocumented)
+// @alpha @deprecated (undocumented)
export function createEntityContentExtension<
TInputs extends AnyExtensionInputMap,
>(options: {
@@ -164,6 +167,117 @@ export function createEntityContentExtension<
string | undefined
>;
+// @alpha
+export const EntityCardBlueprint: ExtensionBlueprint<
+ 'entity-card',
+ undefined,
+ undefined,
+ {
+ loader: () => Promise;
+ filter?: string | ((entity: Entity) => boolean) | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ {
+ filterFunction: ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ {}
+ >;
+ filterExpression: ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ {}
+ >;
+ }
+>;
+
+// @alpha
+export const EntityContentBlueprint: ExtensionBlueprint<
+ 'entity-content',
+ undefined,
+ undefined,
+ {
+ loader: () => Promise;
+ defaultPath: string;
+ defaultTitle: string;
+ routeRef?: RouteRef | undefined;
+ filter?: string | ((entity: Entity) => boolean) | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ RouteRef,
+ 'core.routing.ref',
+ RouteRef & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ {
+ path: string | undefined;
+ title: string | undefined;
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ title?: string | undefined;
+ path?: string | undefined;
+ },
+ {
+ title: ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-content-title',
+ {}
+ >;
+ filterFunction: ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ {}
+ >;
+ filterExpression: ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ {}
+ >;
+ }
+>;
+
// @alpha
export function isOwnerOf(owner: Entity, entity: Entity): boolean;
diff --git a/plugins/catalog/api-report-alpha.md b/plugins/catalog/api-report-alpha.md
index 5019fc25ea..7c2f490939 100644
--- a/plugins/catalog/api-report-alpha.md
+++ b/plugins/catalog/api-report-alpha.md
@@ -6,13 +6,35 @@
///
import { AnyExtensionInputMap } from '@backstage/frontend-plugin-api';
+import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
import { BackstagePlugin } from '@backstage/frontend-plugin-api';
+import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
+import { Entity } from '@backstage/catalog-model';
+import { ExtensionBlueprint } from '@backstage/frontend-plugin-api';
import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
+import { ExtensionInput } from '@backstage/frontend-plugin-api';
import { ExternalRouteRef } from '@backstage/frontend-plugin-api';
+import { JSX as JSX_2 } from 'react';
import { PortableSchema } from '@backstage/frontend-plugin-api';
+import { default as React_2 } from 'react';
import { RouteRef } from '@backstage/frontend-plugin-api';
import { TranslationRef } from '@backstage/core-plugin-api/alpha';
+// @alpha
+export const CatalogFilterBlueprint: ExtensionBlueprint<
+ 'catalog-filter',
+ undefined,
+ undefined,
+ {
+ loader: () => Promise;
+ },
+ ConfigurableExtensionDataRef,
+ {},
+ {},
+ {},
+ never
+>;
+
// @alpha (undocumented)
export const catalogTranslationRef: TranslationRef<
'catalog',
@@ -98,7 +120,9 @@ export const catalogTranslationRef: TranslationRef<
}
>;
-// @alpha (undocumented)
+// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/plugin-catalog" does not have an export "CatalogFilterExtensionBlueprint"
+//
+// @alpha @deprecated (undocumented)
export function createCatalogFilterExtension<
TInputs extends AnyExtensionInputMap,
TConfig,
@@ -141,7 +165,344 @@ const _default: BackstagePlugin<
}>;
unregisterRedirect: ExternalRouteRef;
},
- {}
+ {
+ 'entity-card:catalog/about': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'about'
+ >;
+ 'entity-card:catalog/links': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'links'
+ >;
+ 'entity-card:catalog/labels': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'labels'
+ >;
+ 'entity-card:catalog/depends-on-components': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'depends-on-components'
+ >;
+ 'entity-card:catalog/depends-on-resources': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'depends-on-resources'
+ >;
+ 'entity-card:catalog/has-components': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'has-components'
+ >;
+ 'entity-card:catalog/has-resources': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'has-resources'
+ >;
+ 'entity-card:catalog/has-subcomponents': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'has-subcomponents'
+ >;
+ 'entity-card:catalog/has-subdomains': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'has-subdomains'
+ >;
+ 'entity-card:catalog/has-systems': ExtensionDefinition<
+ {
+ filter: string | undefined;
+ },
+ {
+ filter?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {},
+ 'entity-card',
+ undefined,
+ 'has-systems'
+ >;
+ 'entity-content:catalog/overview': ExtensionDefinition<
+ {
+ [x: string]: any;
+ } & {
+ path: string | undefined;
+ title: string | undefined;
+ filter: string | undefined;
+ },
+ {
+ [x: string]: any;
+ } & {
+ filter?: string | undefined;
+ title?: string | undefined;
+ path?: string | undefined;
+ },
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ RouteRef,
+ 'core.routing.ref',
+ RouteRef & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {
+ cards: ExtensionInput<
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ (entity: Entity) => boolean,
+ 'catalog.entity-filter-function',
+ ((entity: Entity) => boolean) & {
+ optional: true;
+ }
+ >
+ | ConfigurableExtensionDataRef<
+ string,
+ 'catalog.entity-filter-expression',
+ string & {
+ optional: true;
+ }
+ >,
+ {
+ singleton: false;
+ optional: false;
+ }
+ >;
+ },
+ 'entity-content',
+ undefined,
+ 'overview'
+ >;
+ }
>;
export default _default;
diff --git a/plugins/search-react/api-report-alpha.md b/plugins/search-react/api-report-alpha.md
index 4bcdbb3f78..0126fdc590 100644
--- a/plugins/search-react/api-report-alpha.md
+++ b/plugins/search-react/api-report-alpha.md
@@ -6,6 +6,7 @@
///
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
+import { ExtensionBlueprint } from '@backstage/frontend-plugin-api';
import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
import { ListItemProps } from '@material-ui/core/ListItem';
import { PortableSchema } from '@backstage/frontend-plugin-api';
@@ -18,7 +19,7 @@ export type BaseSearchResultListItemProps = T & {
result?: SearchDocument;
} & Omit;
-// @alpha (undocumented)
+// @alpha @deprecated
export function createSearchResultListItemExtension<
TConfig extends {
noTrack?: boolean;
@@ -35,9 +36,9 @@ export function createSearchResultListItemExtension<
string | undefined
>;
-// @alpha (undocumented)
+// @alpha @deprecated (undocumented)
export namespace createSearchResultListItemExtension {
- const // (undocumented)
+ const // @deprecated (undocumented)
itemDataRef: ConfigurableExtensionDataRef<
{
predicate?: SearchResultItemExtensionPredicate | undefined;
@@ -55,7 +56,7 @@ export type SearchResultItemExtensionComponent = <
props: P,
) => JSX.Element | null;
-// @alpha (undocumented)
+// @alpha @deprecated (undocumented)
export type SearchResultItemExtensionOptions<
TConfig extends {
noTrack?: boolean;
@@ -79,5 +80,48 @@ export type SearchResultItemExtensionPredicate = (
result: SearchResult,
) => boolean;
+// @alpha
+export const SearchResultListItemBlueprint: ExtensionBlueprint<
+ 'search-result-list-item',
+ undefined,
+ undefined,
+ SearchResultListItemBlueprintParams,
+ ConfigurableExtensionDataRef<
+ {
+ predicate?: SearchResultItemExtensionPredicate | undefined;
+ component: SearchResultItemExtensionComponent;
+ },
+ 'search.search-result-list-item.item',
+ {}
+ >,
+ {},
+ {
+ noTrack: boolean;
+ },
+ {
+ noTrack?: boolean | undefined;
+ },
+ {
+ item: ConfigurableExtensionDataRef<
+ {
+ predicate?: SearchResultItemExtensionPredicate | undefined;
+ component: SearchResultItemExtensionComponent;
+ },
+ 'search.search-result-list-item.item',
+ {}
+ >;
+ }
+>;
+
+// @alpha (undocumented)
+export interface SearchResultListItemBlueprintParams {
+ component: (options: {
+ config: {
+ noTrack?: boolean;
+ };
+ }) => Promise;
+ predicate?: SearchResultItemExtensionPredicate;
+}
+
// (No @packageDocumentation comment for this package)
```
diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json
index e16430c55b..887b41cb83 100644
--- a/plugins/search-react/package.json
+++ b/plugins/search-react/package.json
@@ -28,7 +28,7 @@
"sideEffects": false,
"exports": {
".": "./src/index.ts",
- "./alpha": "./src/alpha.tsx",
+ "./alpha": "./src/alpha/index.ts",
"./package.json": "./package.json"
},
"main": "src/index.ts",
@@ -36,7 +36,7 @@
"typesVersions": {
"*": {
"alpha": [
- "src/alpha.tsx"
+ "src/alpha/index.ts"
],
"package.json": [
"package.json"
diff --git a/plugins/search-react/src/blueprints/SearchResultListItemBlueprint.test.tsx b/plugins/search-react/src/alpha/blueprints/SearchResultListItemBlueprint.test.tsx
similarity index 100%
rename from plugins/search-react/src/blueprints/SearchResultListItemBlueprint.test.tsx
rename to plugins/search-react/src/alpha/blueprints/SearchResultListItemBlueprint.test.tsx
diff --git a/plugins/search-react/src/blueprints/SearchResultListItemBlueprint.tsx b/plugins/search-react/src/alpha/blueprints/SearchResultListItemBlueprint.tsx
similarity index 96%
rename from plugins/search-react/src/blueprints/SearchResultListItemBlueprint.tsx
rename to plugins/search-react/src/alpha/blueprints/SearchResultListItemBlueprint.tsx
index bea52b7f45..b9a7b71719 100644
--- a/plugins/search-react/src/blueprints/SearchResultListItemBlueprint.tsx
+++ b/plugins/search-react/src/alpha/blueprints/SearchResultListItemBlueprint.tsx
@@ -27,8 +27,9 @@ import {
import {
SearchResultListItemExtension,
SearchResultListItemExtensionProps,
-} from '../extensions';
+} from '../../extensions';
+/** @alpha */
export interface SearchResultListItemBlueprintParams {
/**
* The extension component.
@@ -43,6 +44,10 @@ export interface SearchResultListItemBlueprintParams {
predicate?: SearchResultItemExtensionPredicate;
}
+/**
+ * @alpha
+ * Creates SearchResultListItem extensions
+ */
export const SearchResultListItemBlueprint = createExtensionBlueprint({
kind: 'search-result-list-item',
attachTo: {
diff --git a/plugins/search-react/src/blueprints/index.ts b/plugins/search-react/src/alpha/blueprints/index.ts
similarity index 100%
rename from plugins/search-react/src/blueprints/index.ts
rename to plugins/search-react/src/alpha/blueprints/index.ts
diff --git a/plugins/search-react/src/blueprints/types.ts b/plugins/search-react/src/alpha/blueprints/types.ts
similarity index 100%
rename from plugins/search-react/src/blueprints/types.ts
rename to plugins/search-react/src/alpha/blueprints/types.ts
diff --git a/plugins/search-react/src/alpha.test.tsx b/plugins/search-react/src/alpha/extensions.test.tsx
similarity index 97%
rename from plugins/search-react/src/alpha.test.tsx
rename to plugins/search-react/src/alpha/extensions.test.tsx
index 6d77b5af97..5194fadd1c 100644
--- a/plugins/search-react/src/alpha.test.tsx
+++ b/plugins/search-react/src/alpha/extensions.test.tsx
@@ -23,10 +23,8 @@ import { createExtensionTester } from '@backstage/frontend-test-utils';
import { SearchResult } from '@backstage/plugin-search-common';
import { screen } from '@testing-library/react';
import React from 'react';
-import {
- BaseSearchResultListItemProps,
- createSearchResultListItemExtension,
-} from './alpha';
+import { createSearchResultListItemExtension } from './extensions';
+import { BaseSearchResultListItemProps } from './blueprints';
describe('createSearchResultListItemExtension', () => {
it('Should use the correct result component', async () => {
diff --git a/plugins/search-react/src/alpha.tsx b/plugins/search-react/src/alpha/extensions.tsx
similarity index 93%
rename from plugins/search-react/src/alpha.tsx
rename to plugins/search-react/src/alpha/extensions.tsx
index 53bf76f775..db09510a1e 100644
--- a/plugins/search-react/src/alpha.tsx
+++ b/plugins/search-react/src/alpha/extensions.tsx
@@ -21,14 +21,12 @@ import {
createExtension,
createSchemaFromZod,
} from '@backstage/frontend-plugin-api';
-import { SearchResultListItemExtension } from './extensions';
import {
SearchResultItemExtensionComponent,
SearchResultItemExtensionPredicate,
- searchResultListItemDataRef,
-} from './blueprints/types';
-
-export * from './blueprints';
+} from './blueprints';
+import { SearchResultListItemExtension } from '../extensions';
+import { searchResultListItemDataRef } from './blueprints/types';
/**
* @alpha
@@ -128,5 +126,8 @@ export function createSearchResultListItemExtension<
* @deprecated Use {@link SearchResultListItemBlueprint} instead
*/
export namespace createSearchResultListItemExtension {
+ /**
+ * @deprecated Use {@link SearchResultListItemBlueprint#dataRefs.item} instead
+ */
export const itemDataRef = searchResultListItemDataRef;
}
diff --git a/plugins/search-react/src/alpha/index.ts b/plugins/search-react/src/alpha/index.ts
new file mode 100644
index 0000000000..04026d629d
--- /dev/null
+++ b/plugins/search-react/src/alpha/index.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2024 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export * from './extensions';
+export * from './blueprints';