@backstage/plugin-search 1.6.2-next.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @backstage/plugin-search
2
2
 
3
+ ## 1.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 0be2541: Promoted the plugin's translation ref to the stable package entry point. It was previously only available through the alpha entry point.
8
+
9
+ ### Patch Changes
10
+
11
+ - d5eb954: Fixes the search component not registering the first search on navigate to the search page.
12
+ - aa29b50: New frontend system pages now use the default plugin header together with `HeaderPage` instead of the legacy core page header pattern.
13
+ - 3f36ce1: Updated alpha plugin icons to follow the new frontend icon sizing rules when rendered in plugin and navigation surfaces.
14
+ - Updated dependencies
15
+ - @backstage/plugin-catalog-react@2.1.0
16
+ - @backstage/ui@0.13.0
17
+ - @backstage/core-plugin-api@1.12.4
18
+ - @backstage/core-components@0.18.8
19
+ - @backstage/frontend-plugin-api@0.15.0
20
+ - @backstage/plugin-search-react@1.11.0
21
+
22
+ ## 1.6.2-next.2
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies
27
+ - @backstage/frontend-plugin-api@0.15.0-next.1
28
+ - @backstage/core-plugin-api@1.12.4-next.1
29
+ - @backstage/plugin-catalog-react@2.1.0-next.2
30
+ - @backstage/core-components@0.18.8-next.1
31
+ - @backstage/plugin-search-react@1.10.5-next.1
32
+
3
33
  ## 1.6.2-next.1
4
34
 
5
35
  ### Patch Changes
package/dist/alpha.d.ts CHANGED
@@ -3,19 +3,6 @@ import * as _backstage_plugin_search_react_alpha from '@backstage/plugin-search-
3
3
  import * as react from 'react';
4
4
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
5
 
6
- /**
7
- * @alpha
8
- */
9
- declare const searchTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"search", {
10
- readonly "searchModal.viewFullResults": "View Full Results";
11
- readonly "searchType.tabs.allTitle": "All";
12
- readonly "searchType.allResults": "All Results";
13
- readonly "searchType.accordion.collapse": "Collapse";
14
- readonly "searchType.accordion.numberOfResults": "{{number}} results";
15
- readonly "searchType.accordion.allTitle": "All";
16
- readonly "sidebarSearchModal.title": "Search";
17
- }>;
18
-
19
6
  /** @alpha */
20
7
  declare const searchApi: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
21
8
  kind: "api";
@@ -86,7 +73,6 @@ declare const searchPage: _backstage_frontend_plugin_api.OverridableExtensionDef
86
73
  kind: "page";
87
74
  name: undefined;
88
75
  params: {
89
- defaultPath?: [Error: `Use the 'path' param instead`];
90
76
  path: string;
91
77
  title?: string;
92
78
  icon?: _backstage_frontend_plugin_api.IconElement;
@@ -202,7 +188,6 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
202
188
  kind: "page";
203
189
  name: undefined;
204
190
  params: {
205
- defaultPath?: [Error: `Use the 'path' param instead`];
206
191
  path: string;
207
192
  title?: string;
208
193
  icon?: _backstage_frontend_plugin_api.IconElement;
@@ -213,4 +198,18 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
213
198
  }>;
214
199
  }>;
215
200
 
201
+ /**
202
+ * @alpha
203
+ * @deprecated Import from `@backstage/plugin-search` instead.
204
+ */
205
+ declare const searchTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"search", {
206
+ readonly "searchModal.viewFullResults": "View Full Results";
207
+ readonly "searchType.tabs.allTitle": "All";
208
+ readonly "searchType.allResults": "All Results";
209
+ readonly "searchType.accordion.collapse": "Collapse";
210
+ readonly "searchType.accordion.numberOfResults": "{{number}} results";
211
+ readonly "searchType.accordion.allTitle": "All";
212
+ readonly "sidebarSearchModal.title": "Search";
213
+ }>;
214
+
216
215
  export { _default as default, searchApi, searchNavItem, searchPage, searchTranslationRef };
package/dist/alpha.esm.js CHANGED
@@ -4,7 +4,7 @@ import Grid from '@material-ui/core/Grid';
4
4
  import Paper from '@material-ui/core/Paper';
5
5
  import { makeStyles } from '@material-ui/core/styles';
6
6
  import SearchIcon from '@material-ui/icons/Search';
7
- import { useSidebarPinState, Page, Header, Content, CatalogIcon, DocsIcon } from '@backstage/core-components';
7
+ import { useSidebarPinState, Content, CatalogIcon, DocsIcon } from '@backstage/core-components';
8
8
  import { fetchApiRef, discoveryApiRef, useApi } from '@backstage/core-plugin-api';
9
9
  import { ApiBlueprint, PageBlueprint, createExtensionInput, NavItemBlueprint, createFrontendPlugin, configApiRef } from '@backstage/frontend-plugin-api';
10
10
  import { catalogApiRef, CATALOG_FILTER_EXISTS } from '@backstage/plugin-catalog-react';
@@ -14,7 +14,7 @@ import { rootRouteRef } from './plugin.esm.js';
14
14
  import { SearchClient } from './apis.esm.js';
15
15
  import { SearchType } from './components/SearchType/SearchType.esm.js';
16
16
  import { UrlUpdater } from './components/SearchPage/SearchPage.esm.js';
17
- export { searchTranslationRef } from './translation.esm.js';
17
+ import { searchTranslationRef as searchTranslationRef$1 } from './translation.esm.js';
18
18
 
19
19
  const searchApi = ApiBlueprint.make({
20
20
  params: (defineParams) => defineParams({
@@ -72,106 +72,103 @@ const searchPage = PageBlueprint.makeWithOverrides({
72
72
  const { types } = useSearch();
73
73
  const catalogApi = useApi(catalogApiRef);
74
74
  const configApi = useApi(configApiRef);
75
- return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
76
- !isMobile && /* @__PURE__ */ jsx(Header, { title: "Search" }),
77
- /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsxs(Grid, { container: true, direction: "row", children: [
78
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(SearchBar, { debounceTime: 100 }) }),
79
- !isMobile && /* @__PURE__ */ jsxs(Grid, { item: true, xs: 3, children: [
80
- /* @__PURE__ */ jsx(
81
- SearchType.Accordion,
82
- {
83
- name: "Result Type",
84
- defaultValue: configApi.getOptionalString(
85
- "search.defaultType"
86
- ),
87
- showCounts: true,
88
- types: [
89
- {
90
- value: "software-catalog",
91
- name: "Software Catalog",
92
- icon: /* @__PURE__ */ jsx(CatalogIcon, {})
93
- },
94
- {
95
- value: "techdocs",
96
- name: "Documentation",
97
- icon: /* @__PURE__ */ jsx(DocsIcon, {})
98
- }
99
- ].concat(resultTypes)
100
- }
101
- ),
102
- /* @__PURE__ */ jsxs(Paper, { className: classes.filters, children: [
103
- types.includes("techdocs") && /* @__PURE__ */ jsx(
104
- SearchFilter.Select,
105
- {
106
- className: classes.filter,
107
- label: "Entity",
108
- name: "name",
109
- values: async () => {
110
- const { items } = await catalogApi.getEntities({
111
- fields: ["metadata.name"],
112
- filter: {
113
- "metadata.annotations.backstage.io/techdocs-ref": CATALOG_FILTER_EXISTS
114
- }
115
- });
116
- const names = items.map(
117
- (entity) => entity.metadata.name
118
- );
119
- names.sort();
120
- return names;
121
- }
122
- }
75
+ return /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsxs(Grid, { container: true, direction: "row", children: [
76
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(SearchBar, { debounceTime: 100 }) }),
77
+ !isMobile && /* @__PURE__ */ jsxs(Grid, { item: true, xs: 3, children: [
78
+ /* @__PURE__ */ jsx(
79
+ SearchType.Accordion,
80
+ {
81
+ name: "Result Type",
82
+ defaultValue: configApi.getOptionalString(
83
+ "search.defaultType"
123
84
  ),
124
- /* @__PURE__ */ jsx(
125
- SearchFilter.Select,
85
+ showCounts: true,
86
+ types: [
126
87
  {
127
- className: classes.filter,
128
- label: "Kind",
129
- name: "kind",
130
- values: [
131
- "API",
132
- "Component",
133
- "Domain",
134
- "Group",
135
- "Location",
136
- "Resource",
137
- "System",
138
- "Template",
139
- "User"
140
- ]
141
- }
142
- ),
143
- /* @__PURE__ */ jsx(
144
- SearchFilter.Checkbox,
88
+ value: "software-catalog",
89
+ name: "Software Catalog",
90
+ icon: /* @__PURE__ */ jsx(CatalogIcon, {})
91
+ },
145
92
  {
146
- className: classes.filter,
147
- label: "Lifecycle",
148
- name: "lifecycle",
149
- values: ["experimental", "production"]
93
+ value: "techdocs",
94
+ name: "Documentation",
95
+ icon: /* @__PURE__ */ jsx(DocsIcon, {})
150
96
  }
151
- ),
152
- additionalSearchFilters.map((SearchFilterComponent) => /* @__PURE__ */ jsx(SearchFilterComponent, { className: classes.filter }))
153
- ] })
154
- ] }),
155
- /* @__PURE__ */ jsxs(Grid, { item: true, xs: true, children: [
156
- /* @__PURE__ */ jsx(SearchPagination, {}),
157
- /* @__PURE__ */ jsx(SearchResult, { children: ({ results }) => /* @__PURE__ */ jsx(Fragment, { children: results.map((result, index) => {
158
- const { noTrack } = config;
159
- const { document, ...rest } = result;
160
- const SearchResultListItem = getResultItemComponent(result);
161
- return /* @__PURE__ */ createElement(
162
- SearchResultListItem,
163
- {
164
- ...rest,
165
- key: index,
166
- result: document,
167
- noTrack
97
+ ].concat(resultTypes)
98
+ }
99
+ ),
100
+ /* @__PURE__ */ jsxs(Paper, { className: classes.filters, children: [
101
+ types.includes("techdocs") && /* @__PURE__ */ jsx(
102
+ SearchFilter.Select,
103
+ {
104
+ className: classes.filter,
105
+ label: "Entity",
106
+ name: "name",
107
+ values: async () => {
108
+ const { items } = await catalogApi.getEntities({
109
+ fields: ["metadata.name"],
110
+ filter: {
111
+ "metadata.annotations.backstage.io/techdocs-ref": CATALOG_FILTER_EXISTS
112
+ }
113
+ });
114
+ const names = items.map(
115
+ (entity) => entity.metadata.name
116
+ );
117
+ names.sort();
118
+ return names;
168
119
  }
169
- );
170
- }) }) }),
171
- /* @__PURE__ */ jsx(SearchResultPager, {})
120
+ }
121
+ ),
122
+ /* @__PURE__ */ jsx(
123
+ SearchFilter.Select,
124
+ {
125
+ className: classes.filter,
126
+ label: "Kind",
127
+ name: "kind",
128
+ values: [
129
+ "API",
130
+ "Component",
131
+ "Domain",
132
+ "Group",
133
+ "Location",
134
+ "Resource",
135
+ "System",
136
+ "Template",
137
+ "User"
138
+ ]
139
+ }
140
+ ),
141
+ /* @__PURE__ */ jsx(
142
+ SearchFilter.Checkbox,
143
+ {
144
+ className: classes.filter,
145
+ label: "Lifecycle",
146
+ name: "lifecycle",
147
+ values: ["experimental", "production"]
148
+ }
149
+ ),
150
+ additionalSearchFilters.map((SearchFilterComponent) => /* @__PURE__ */ jsx(SearchFilterComponent, { className: classes.filter }))
172
151
  ] })
173
- ] }) })
174
- ] });
152
+ ] }),
153
+ /* @__PURE__ */ jsxs(Grid, { item: true, xs: true, children: [
154
+ /* @__PURE__ */ jsx(SearchPagination, {}),
155
+ /* @__PURE__ */ jsx(SearchResult, { children: ({ results }) => /* @__PURE__ */ jsx(Fragment, { children: results.map((result, index) => {
156
+ const { noTrack } = config;
157
+ const { document, ...rest } = result;
158
+ const SearchResultListItem = getResultItemComponent(result);
159
+ return /* @__PURE__ */ createElement(
160
+ SearchResultListItem,
161
+ {
162
+ ...rest,
163
+ key: index,
164
+ result: document,
165
+ noTrack
166
+ }
167
+ );
168
+ }) }) }),
169
+ /* @__PURE__ */ jsx(SearchResultPager, {})
170
+ ] })
171
+ ] }) });
175
172
  };
176
173
  return /* @__PURE__ */ jsxs(SearchContextProvider, { children: [
177
174
  /* @__PURE__ */ jsx(UrlUpdater, {}),
@@ -191,13 +188,14 @@ const searchNavItem = NavItemBlueprint.make({
191
188
  var alpha = createFrontendPlugin({
192
189
  pluginId: "search",
193
190
  title: "Search",
194
- icon: /* @__PURE__ */ jsx(SearchIcon, {}),
191
+ icon: /* @__PURE__ */ jsx(SearchIcon, { fontSize: "inherit" }),
195
192
  info: { packageJson: () => import('./package.json.esm.js') },
196
193
  extensions: [searchApi, searchPage, searchNavItem],
197
194
  routes: {
198
195
  root: rootRouteRef
199
196
  }
200
197
  });
198
+ const searchTranslationRef = searchTranslationRef$1;
201
199
 
202
- export { alpha as default, searchApi, searchNavItem, searchPage };
200
+ export { alpha as default, searchApi, searchNavItem, searchPage, searchTranslationRef };
203
201
  //# sourceMappingURL=alpha.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport SearchIcon from '@material-ui/icons/Search';\n\nimport {\n CatalogIcon,\n Content,\n DocsIcon,\n Header,\n Page,\n useSidebarPinState,\n} from '@backstage/core-components';\nimport {\n useApi,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\n\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n createExtensionInput,\n PageBlueprint,\n NavItemBlueprint,\n configApiRef,\n} from '@backstage/frontend-plugin-api';\n\nimport {\n catalogApiRef,\n CATALOG_FILTER_EXISTS,\n} from '@backstage/plugin-catalog-react';\n\nimport {\n DefaultResultListItem,\n SearchBar,\n SearchFilter,\n SearchPagination,\n SearchResult as SearchResults,\n SearchResultPager,\n useSearch,\n SearchContextProvider,\n} from '@backstage/plugin-search-react';\nimport { SearchResult } from '@backstage/plugin-search-common';\nimport { searchApiRef } from '@backstage/plugin-search-react';\nimport {\n SearchResultListItemBlueprint,\n SearchFilterResultTypeBlueprint,\n SearchFilterBlueprint,\n} from '@backstage/plugin-search-react/alpha';\n\nimport { rootRouteRef } from './plugin';\nimport { SearchClient } from './apis';\nimport { SearchType } from './components/SearchType';\nimport { UrlUpdater } from './components/SearchPage/SearchPage';\n\n/** @alpha */\nexport const searchApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: searchApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new SearchClient({ discoveryApi, fetchApi }),\n }),\n});\n\nconst useSearchPageStyles = makeStyles((theme: Theme) => ({\n filter: {\n '& + &': {\n marginTop: theme.spacing(2.5),\n },\n },\n filters: {\n padding: theme.spacing(2),\n marginTop: theme.spacing(2),\n },\n}));\n\n/** @alpha */\nexport const searchPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n noTrack: z => z.boolean().default(false),\n },\n },\n inputs: {\n items: createExtensionInput([SearchResultListItemBlueprint.dataRefs.item]),\n resultTypes: createExtensionInput([\n SearchFilterResultTypeBlueprint.dataRefs.resultType,\n ]),\n searchFilters: createExtensionInput([\n SearchFilterBlueprint.dataRefs.searchFilters,\n ]),\n },\n factory(originalFactory, { config, inputs }) {\n return originalFactory({\n path: '/search',\n routeRef: rootRouteRef,\n loader: async () => {\n const getResultItemComponent = (result: SearchResult) => {\n const value = inputs.items.find(item =>\n item\n ?.get(SearchResultListItemBlueprint.dataRefs.item)\n .predicate?.(result),\n );\n return (\n value?.get(SearchResultListItemBlueprint.dataRefs.item).component ??\n DefaultResultListItem\n );\n };\n\n const resultTypes = inputs.resultTypes.map(item =>\n item.get(SearchFilterResultTypeBlueprint.dataRefs.resultType),\n );\n\n const additionalSearchFilters = inputs.searchFilters.map(\n item =>\n item.get(SearchFilterBlueprint.dataRefs.searchFilters).component,\n );\n\n const Component = () => {\n const classes = useSearchPageStyles();\n const { isMobile } = useSidebarPinState();\n const { types } = useSearch();\n const catalogApi = useApi(catalogApiRef);\n const configApi = useApi(configApiRef);\n\n return (\n <Page themeId=\"home\">\n {!isMobile && <Header title=\"Search\" />}\n <Content>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchBar debounceTime={100} />\n </Grid>\n {!isMobile && (\n <Grid item xs={3}>\n <SearchType.Accordion\n name=\"Result Type\"\n defaultValue={configApi.getOptionalString(\n 'search.defaultType',\n )}\n showCounts\n types={[\n {\n value: 'software-catalog',\n name: 'Software Catalog',\n icon: <CatalogIcon />,\n },\n {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n ].concat(resultTypes)}\n />\n <Paper className={classes.filters}>\n {types.includes('techdocs') && (\n <SearchFilter.Select\n className={classes.filter}\n label=\"Entity\"\n name=\"name\"\n values={async () => {\n // Return a list of entities which are documented.\n const { items } = await catalogApi.getEntities({\n fields: ['metadata.name'],\n filter: {\n 'metadata.annotations.backstage.io/techdocs-ref':\n CATALOG_FILTER_EXISTS,\n },\n });\n\n const names = items.map(\n entity => entity.metadata.name,\n );\n names.sort();\n return names;\n }}\n />\n )}\n <SearchFilter.Select\n className={classes.filter}\n label=\"Kind\"\n name=\"kind\"\n values={[\n 'API',\n 'Component',\n 'Domain',\n 'Group',\n 'Location',\n 'Resource',\n 'System',\n 'Template',\n 'User',\n ]}\n />\n <SearchFilter.Checkbox\n className={classes.filter}\n label=\"Lifecycle\"\n name=\"lifecycle\"\n values={['experimental', 'production']}\n />\n {additionalSearchFilters.map(SearchFilterComponent => (\n <SearchFilterComponent className={classes.filter} />\n ))}\n </Paper>\n </Grid>\n )}\n <Grid item xs>\n <SearchPagination />\n <SearchResults>\n {({ results }) => (\n <>\n {results.map((result, index) => {\n const { noTrack } = config;\n const { document, ...rest } = result;\n const SearchResultListItem =\n getResultItemComponent(result);\n return (\n <SearchResultListItem\n {...rest}\n key={index}\n result={document}\n noTrack={noTrack}\n />\n );\n })}\n </>\n )}\n </SearchResults>\n <SearchResultPager />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n };\n\n return (\n <SearchContextProvider>\n <UrlUpdater />\n <Component />\n </SearchContextProvider>\n );\n },\n });\n },\n});\n\n/** @alpha */\nexport const searchNavItem = NavItemBlueprint.make({\n params: {\n routeRef: rootRouteRef,\n title: 'Search',\n icon: SearchIcon,\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'search',\n title: 'Search',\n icon: <SearchIcon />,\n info: { packageJson: () => import('../package.json') },\n extensions: [searchApi, searchPage, searchNavItem],\n routes: {\n root: rootRouteRef,\n },\n});\n\n/** @alpha */\nexport { searchTranslationRef } from './translation';\n"],"names":["SearchResults"],"mappings":"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"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport SearchIcon from '@material-ui/icons/Search';\n\nimport {\n CatalogIcon,\n Content,\n DocsIcon,\n useSidebarPinState,\n} from '@backstage/core-components';\nimport {\n useApi,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\n\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n createExtensionInput,\n PageBlueprint,\n NavItemBlueprint,\n configApiRef,\n} from '@backstage/frontend-plugin-api';\n\nimport {\n catalogApiRef,\n CATALOG_FILTER_EXISTS,\n} from '@backstage/plugin-catalog-react';\n\nimport {\n DefaultResultListItem,\n SearchBar,\n SearchFilter,\n SearchPagination,\n SearchResult as SearchResults,\n SearchResultPager,\n useSearch,\n SearchContextProvider,\n} from '@backstage/plugin-search-react';\nimport { SearchResult } from '@backstage/plugin-search-common';\nimport { searchApiRef } from '@backstage/plugin-search-react';\nimport {\n SearchResultListItemBlueprint,\n SearchFilterResultTypeBlueprint,\n SearchFilterBlueprint,\n} from '@backstage/plugin-search-react/alpha';\n\nimport { rootRouteRef } from './plugin';\nimport { SearchClient } from './apis';\nimport { SearchType } from './components/SearchType';\nimport { UrlUpdater } from './components/SearchPage/SearchPage';\n\n/** @alpha */\nexport const searchApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: searchApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new SearchClient({ discoveryApi, fetchApi }),\n }),\n});\n\nconst useSearchPageStyles = makeStyles((theme: Theme) => ({\n filter: {\n '& + &': {\n marginTop: theme.spacing(2.5),\n },\n },\n filters: {\n padding: theme.spacing(2),\n marginTop: theme.spacing(2),\n },\n}));\n\n/** @alpha */\nexport const searchPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n noTrack: z => z.boolean().default(false),\n },\n },\n inputs: {\n items: createExtensionInput([SearchResultListItemBlueprint.dataRefs.item]),\n resultTypes: createExtensionInput([\n SearchFilterResultTypeBlueprint.dataRefs.resultType,\n ]),\n searchFilters: createExtensionInput([\n SearchFilterBlueprint.dataRefs.searchFilters,\n ]),\n },\n factory(originalFactory, { config, inputs }) {\n return originalFactory({\n path: '/search',\n routeRef: rootRouteRef,\n loader: async () => {\n const getResultItemComponent = (result: SearchResult) => {\n const value = inputs.items.find(item =>\n item\n ?.get(SearchResultListItemBlueprint.dataRefs.item)\n .predicate?.(result),\n );\n return (\n value?.get(SearchResultListItemBlueprint.dataRefs.item).component ??\n DefaultResultListItem\n );\n };\n\n const resultTypes = inputs.resultTypes.map(item =>\n item.get(SearchFilterResultTypeBlueprint.dataRefs.resultType),\n );\n\n const additionalSearchFilters = inputs.searchFilters.map(\n item =>\n item.get(SearchFilterBlueprint.dataRefs.searchFilters).component,\n );\n\n const Component = () => {\n const classes = useSearchPageStyles();\n const { isMobile } = useSidebarPinState();\n const { types } = useSearch();\n const catalogApi = useApi(catalogApiRef);\n const configApi = useApi(configApiRef);\n\n return (\n <Content>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchBar debounceTime={100} />\n </Grid>\n {!isMobile && (\n <Grid item xs={3}>\n <SearchType.Accordion\n name=\"Result Type\"\n defaultValue={configApi.getOptionalString(\n 'search.defaultType',\n )}\n showCounts\n types={[\n {\n value: 'software-catalog',\n name: 'Software Catalog',\n icon: <CatalogIcon />,\n },\n {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n ].concat(resultTypes)}\n />\n <Paper className={classes.filters}>\n {types.includes('techdocs') && (\n <SearchFilter.Select\n className={classes.filter}\n label=\"Entity\"\n name=\"name\"\n values={async () => {\n // Return a list of entities which are documented.\n const { items } = await catalogApi.getEntities({\n fields: ['metadata.name'],\n filter: {\n 'metadata.annotations.backstage.io/techdocs-ref':\n CATALOG_FILTER_EXISTS,\n },\n });\n\n const names = items.map(\n entity => entity.metadata.name,\n );\n names.sort();\n return names;\n }}\n />\n )}\n <SearchFilter.Select\n className={classes.filter}\n label=\"Kind\"\n name=\"kind\"\n values={[\n 'API',\n 'Component',\n 'Domain',\n 'Group',\n 'Location',\n 'Resource',\n 'System',\n 'Template',\n 'User',\n ]}\n />\n <SearchFilter.Checkbox\n className={classes.filter}\n label=\"Lifecycle\"\n name=\"lifecycle\"\n values={['experimental', 'production']}\n />\n {additionalSearchFilters.map(SearchFilterComponent => (\n <SearchFilterComponent className={classes.filter} />\n ))}\n </Paper>\n </Grid>\n )}\n <Grid item xs>\n <SearchPagination />\n <SearchResults>\n {({ results }) => (\n <>\n {results.map((result, index) => {\n const { noTrack } = config;\n const { document, ...rest } = result;\n const SearchResultListItem =\n getResultItemComponent(result);\n return (\n <SearchResultListItem\n {...rest}\n key={index}\n result={document}\n noTrack={noTrack}\n />\n );\n })}\n </>\n )}\n </SearchResults>\n <SearchResultPager />\n </Grid>\n </Grid>\n </Content>\n );\n };\n\n return (\n <SearchContextProvider>\n <UrlUpdater />\n <Component />\n </SearchContextProvider>\n );\n },\n });\n },\n});\n\n/** @alpha */\nexport const searchNavItem = NavItemBlueprint.make({\n params: {\n routeRef: rootRouteRef,\n title: 'Search',\n icon: SearchIcon,\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'search',\n title: 'Search',\n icon: <SearchIcon fontSize=\"inherit\" />,\n info: { packageJson: () => import('../package.json') },\n extensions: [searchApi, searchPage, searchNavItem],\n routes: {\n root: rootRouteRef,\n },\n});\n\nimport { searchTranslationRef as _searchTranslationRef } from './translation';\n\n/**\n * @alpha\n * @deprecated Import from `@backstage/plugin-search` instead.\n */\nexport const searchTranslationRef = _searchTranslationRef;\n"],"names":["SearchResults","_searchTranslationRef"],"mappings":";;;;;;;;;;;;;;;;;;AAuEO,MAAM,SAAA,GAAY,aAAa,IAAA,CAAK;AAAA,EACzC,MAAA,EAAQ,kBACN,YAAA,CAAa;AAAA,IACX,GAAA,EAAK,YAAA;AAAA,IACL,IAAA,EAAM,EAAE,YAAA,EAAc,eAAA,EAAiB,UAAU,WAAA,EAAY;AAAA,IAC7D,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,QAAA,EAAS,KACjC,IAAI,YAAA,CAAa,EAAE,YAAA,EAAc,QAAA,EAAU;AAAA,GAC9C;AACL,CAAC;AAED,MAAM,mBAAA,GAAsB,UAAA,CAAW,CAAC,KAAA,MAAkB;AAAA,EACxD,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS;AAAA,MACP,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,GAAG;AAAA;AAC9B,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA;AAE9B,CAAA,CAAE,CAAA;AAGK,MAAM,UAAA,GAAa,cAAc,iBAAA,CAAkB;AAAA,EACxD,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,SAAS,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK;AAAA;AACzC,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAO,oBAAA,CAAqB,CAAC,6BAAA,CAA8B,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,IACzE,aAAa,oBAAA,CAAqB;AAAA,MAChC,gCAAgC,QAAA,CAAS;AAAA,KAC1C,CAAA;AAAA,IACD,eAAe,oBAAA,CAAqB;AAAA,MAClC,sBAAsB,QAAA,CAAS;AAAA,KAChC;AAAA,GACH;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAQ,QAAO,EAAG;AAC3C,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU,YAAA;AAAA,MACV,QAAQ,YAAY;AAClB,QAAA,MAAM,sBAAA,GAAyB,CAAC,MAAA,KAAyB;AACvD,UAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,IAAA;AAAA,YAAK,CAAA,IAAA,KAC9B,MACI,GAAA,CAAI,6BAAA,CAA8B,SAAS,IAAI,CAAA,CAChD,YAAY,MAAM;AAAA,WACvB;AACA,UAAA,OACE,OAAO,GAAA,CAAI,6BAAA,CAA8B,QAAA,CAAS,IAAI,EAAE,SAAA,IACxD,qBAAA;AAAA,QAEJ,CAAA;AAEA,QAAA,MAAM,WAAA,GAAc,OAAO,WAAA,CAAY,GAAA;AAAA,UAAI,CAAA,IAAA,KACzC,IAAA,CAAK,GAAA,CAAI,+BAAA,CAAgC,SAAS,UAAU;AAAA,SAC9D;AAEA,QAAA,MAAM,uBAAA,GAA0B,OAAO,aAAA,CAAc,GAAA;AAAA,UACnD,UACE,IAAA,CAAK,GAAA,CAAI,qBAAA,CAAsB,QAAA,CAAS,aAAa,CAAA,CAAE;AAAA,SAC3D;AAEA,QAAA,MAAM,YAAY,MAAM;AACtB,UAAA,MAAM,UAAU,mBAAA,EAAoB;AACpC,UAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,UAAA,MAAM,EAAE,KAAA,EAAM,GAAI,SAAA,EAAU;AAC5B,UAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AACvC,UAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AAErC,UAAA,2BACG,OAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,QAAK,SAAA,EAAS,IAAA,EAAC,WAAU,KAAA,EACxB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAI,IAAA,EAAC,EAAA,EAAI,IACb,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,YAAA,EAAc,GAAA,EAAK,CAAA,EAChC,CAAA;AAAA,YACC,CAAC,QAAA,oBACA,IAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,UAAA,CAAW,SAAA;AAAA,gBAAX;AAAA,kBACC,IAAA,EAAK,aAAA;AAAA,kBACL,cAAc,SAAA,CAAU,iBAAA;AAAA,oBACtB;AAAA,mBACF;AAAA,kBACA,UAAA,EAAU,IAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL;AAAA,sBACE,KAAA,EAAO,kBAAA;AAAA,sBACP,IAAA,EAAM,kBAAA;AAAA,sBACN,IAAA,sBAAO,WAAA,EAAA,EAAY;AAAA,qBACrB;AAAA,oBACA;AAAA,sBACE,KAAA,EAAO,UAAA;AAAA,sBACP,IAAA,EAAM,eAAA;AAAA,sBACN,IAAA,sBAAO,QAAA,EAAA,EAAS;AAAA;AAClB,mBACF,CAAE,OAAO,WAAW;AAAA;AAAA,eACtB;AAAA,8BACA,IAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,OAAA,CAAQ,OAAA,EACvB,QAAA,EAAA;AAAA,gBAAA,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,oBACxB,GAAA;AAAA,kBAAC,YAAA,CAAa,MAAA;AAAA,kBAAb;AAAA,oBACC,WAAW,OAAA,CAAQ,MAAA;AAAA,oBACnB,KAAA,EAAM,QAAA;AAAA,oBACN,IAAA,EAAK,MAAA;AAAA,oBACL,QAAQ,YAAY;AAElB,sBAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,WAAW,WAAA,CAAY;AAAA,wBAC7C,MAAA,EAAQ,CAAC,eAAe,CAAA;AAAA,wBACxB,MAAA,EAAQ;AAAA,0BACN,gDAAA,EACE;AAAA;AACJ,uBACD,CAAA;AAED,sBAAA,MAAM,QAAQ,KAAA,CAAM,GAAA;AAAA,wBAClB,CAAA,MAAA,KAAU,OAAO,QAAA,CAAS;AAAA,uBAC5B;AACA,sBAAA,KAAA,CAAM,IAAA,EAAK;AACX,sBAAA,OAAO,KAAA;AAAA,oBACT;AAAA;AAAA,iBACF;AAAA,gCAEF,GAAA;AAAA,kBAAC,YAAA,CAAa,MAAA;AAAA,kBAAb;AAAA,oBACC,WAAW,OAAA,CAAQ,MAAA;AAAA,oBACnB,KAAA,EAAM,MAAA;AAAA,oBACN,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAQ;AAAA,sBACN,KAAA;AAAA,sBACA,WAAA;AAAA,sBACA,QAAA;AAAA,sBACA,OAAA;AAAA,sBACA,UAAA;AAAA,sBACA,UAAA;AAAA,sBACA,QAAA;AAAA,sBACA,UAAA;AAAA,sBACA;AAAA;AACF;AAAA,iBACF;AAAA,gCACA,GAAA;AAAA,kBAAC,YAAA,CAAa,QAAA;AAAA,kBAAb;AAAA,oBACC,WAAW,OAAA,CAAQ,MAAA;AAAA,oBACnB,KAAA,EAAM,WAAA;AAAA,oBACN,IAAA,EAAK,WAAA;AAAA,oBACL,MAAA,EAAQ,CAAC,cAAA,EAAgB,YAAY;AAAA;AAAA,iBACvC;AAAA,gBACC,uBAAA,CAAwB,IAAI,CAAA,qBAAA,qBAC3B,GAAA,CAAC,yBAAsB,SAAA,EAAW,OAAA,CAAQ,QAAQ,CACnD;AAAA,eAAA,EACH;AAAA,aAAA,EACF,CAAA;AAAA,4BAEF,IAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAE,IAAA,EACX,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,8BAClB,GAAA,CAACA,YAAA,EAAA,EACE,QAAA,EAAA,CAAC,EAAE,OAAA,EAAQ,qBACV,GAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AAC9B,gBAAA,MAAM,EAAE,SAAQ,GAAI,MAAA;AACpB,gBAAA,MAAM,EAAE,QAAA,EAAU,GAAG,IAAA,EAAK,GAAI,MAAA;AAC9B,gBAAA,MAAM,oBAAA,GACJ,uBAAuB,MAAM,CAAA;AAC/B,gBAAA,uBACE,aAAA;AAAA,kBAAC,oBAAA;AAAA,kBAAA;AAAA,oBACE,GAAG,IAAA;AAAA,oBACJ,GAAA,EAAK,KAAA;AAAA,oBACL,MAAA,EAAQ,QAAA;AAAA,oBACR;AAAA;AAAA,iBACF;AAAA,cAEJ,CAAC,GACH,CAAA,EAEJ,CAAA;AAAA,kCACC,iBAAA,EAAA,EAAkB;AAAA,aAAA,EACrB;AAAA,WAAA,EACF,CAAA,EACF,CAAA;AAAA,QAEJ,CAAA;AAEA,QAAA,4BACG,qBAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,8BACX,SAAA,EAAA,EAAU;AAAA,SAAA,EACb,CAAA;AAAA,MAEJ;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;AAGM,MAAM,aAAA,GAAgB,iBAAiB,IAAA,CAAK;AAAA,EACjD,MAAA,EAAQ;AAAA,IACN,QAAA,EAAU,YAAA;AAAA,IACV,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAC;AAGD,YAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,kBAAM,GAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAS,SAAA,EAAU,CAAA;AAAA,EACrC,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,uBAAiB,CAAA,EAAE;AAAA,EACrD,UAAA,EAAY,CAAC,SAAA,EAAW,UAAA,EAAY,aAAa,CAAA;AAAA,EACjD,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAQM,MAAM,oBAAA,GAAuBC;;;;"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import { ReactNode } from 'react';
4
4
  import { SearchResultSet } from '@backstage/plugin-search-common';
5
5
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
6
6
  import { IconComponent } from '@backstage/core-plugin-api';
7
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
7
8
 
8
9
  /**
9
10
  * Props for {@link HomePageSearchBar}.
@@ -222,5 +223,18 @@ declare const SidebarSearchModal: (props: SidebarSearchModalProps) => JSX.Elemen
222
223
  */
223
224
  declare const HomePageSearchBar: (props: HomePageSearchBarProps) => react_jsx_runtime.JSX.Element;
224
225
 
225
- export { HomePageSearchBar, SearchPage$1 as Router, SearchModal, SearchModalProvider, SearchPage, SearchType, SidebarSearch, SidebarSearchModal, searchPlugin as plugin, searchPlugin, useSearchModal };
226
+ /**
227
+ * @public
228
+ */
229
+ declare const searchTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"search", {
230
+ readonly "searchModal.viewFullResults": "View Full Results";
231
+ readonly "searchType.tabs.allTitle": "All";
232
+ readonly "searchType.allResults": "All Results";
233
+ readonly "searchType.accordion.collapse": "Collapse";
234
+ readonly "searchType.accordion.numberOfResults": "{{number}} results";
235
+ readonly "searchType.accordion.allTitle": "All";
236
+ readonly "sidebarSearchModal.title": "Search";
237
+ }>;
238
+
239
+ export { HomePageSearchBar, SearchPage$1 as Router, SearchModal, SearchModalProvider, SearchPage, SearchType, SidebarSearch, SidebarSearchModal, searchPlugin as plugin, searchPlugin, searchTranslationRef, useSearchModal };
226
240
  export type { HomePageSearchBarProps, SearchModalChildrenProps, SearchModalProps, SearchModalProviderProps, SearchModalValue, SearchTypeAccordionProps, SearchTypeProps, SearchTypeTabsProps, SidebarSearchModalProps, SidebarSearchProps };
package/dist/index.esm.js CHANGED
@@ -4,4 +4,5 @@ export { SearchPage as Router } from './components/SearchPage/SearchPage.esm.js'
4
4
  export { SearchType } from './components/SearchType/SearchType.esm.js';
5
5
  export { SidebarSearch } from './components/SidebarSearch/SidebarSearch.esm.js';
6
6
  export { HomePageSearchBar, SearchPage, SidebarSearchModal, searchPlugin as plugin, searchPlugin } from './plugin.esm.js';
7
+ export { searchTranslationRef } from './translation.esm.js';
7
8
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-search";
2
- var version = "1.6.2-next.1";
2
+ var version = "1.7.0";
3
3
  var description = "The Backstage plugin that provides your backstage app with search";
4
4
  var backstage = {
5
5
  role: "frontend-plugin",
@@ -65,6 +65,7 @@ var dependencies = {
65
65
  "@backstage/plugin-search-common": "workspace:^",
66
66
  "@backstage/plugin-search-react": "workspace:^",
67
67
  "@backstage/types": "workspace:^",
68
+ "@backstage/ui": "workspace:^",
68
69
  "@backstage/version-bridge": "workspace:^",
69
70
  "@material-ui/core": "^4.12.2",
70
71
  "@material-ui/icons": "^4.9.1",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * @alpha\n */\nexport const searchTranslationRef = createTranslationRef({\n id: 'search',\n messages: {\n searchModal: {\n viewFullResults: 'View Full Results',\n },\n searchType: {\n allResults: 'All Results',\n tabs: {\n allTitle: 'All',\n },\n accordion: {\n allTitle: 'All',\n collapse: 'Collapse',\n numberOfResults: '{{number}} results',\n },\n },\n sidebarSearchModal: {\n title: 'Search',\n },\n },\n});\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,oBAAA,CAAqB;AAAA,EACvD,EAAA,EAAI,QAAA;AAAA,EACJ,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,aAAA;AAAA,MACZ,IAAA,EAAM;AAAA,QACJ,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,SAAA,EAAW;AAAA,QACT,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,UAAA;AAAA,QACV,eAAA,EAAiB;AAAA;AACnB,KACF;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,KAAA,EAAO;AAAA;AACT;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * @public\n */\nexport const searchTranslationRef = createTranslationRef({\n id: 'search',\n messages: {\n searchModal: {\n viewFullResults: 'View Full Results',\n },\n searchType: {\n allResults: 'All Results',\n tabs: {\n allTitle: 'All',\n },\n accordion: {\n allTitle: 'All',\n collapse: 'Collapse',\n numberOfResults: '{{number}} results',\n },\n },\n sidebarSearchModal: {\n title: 'Search',\n },\n },\n});\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,oBAAA,CAAqB;AAAA,EACvD,EAAA,EAAI,QAAA;AAAA,EACJ,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,aAAA;AAAA,MACZ,IAAA,EAAM;AAAA,QACJ,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,SAAA,EAAW;AAAA,QACT,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,UAAA;AAAA,QACV,eAAA,EAAiB;AAAA;AACnB,KACF;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,KAAA,EAAO;AAAA;AACT;AAEJ,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-search",
3
- "version": "1.6.2-next.1",
3
+ "version": "1.7.0",
4
4
  "description": "The Backstage plugin that provides your backstage app with search",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -70,25 +70,26 @@
70
70
  "test": "backstage-cli package test"
71
71
  },
72
72
  "dependencies": {
73
- "@backstage/core-components": "0.18.8-next.0",
74
- "@backstage/core-plugin-api": "1.12.4-next.0",
75
- "@backstage/errors": "1.2.7",
76
- "@backstage/frontend-plugin-api": "0.14.2-next.0",
77
- "@backstage/plugin-catalog-react": "2.1.0-next.1",
78
- "@backstage/plugin-search-common": "1.2.22",
79
- "@backstage/plugin-search-react": "1.10.5-next.0",
80
- "@backstage/types": "1.2.2",
81
- "@backstage/version-bridge": "1.0.12",
73
+ "@backstage/core-components": "^0.18.8",
74
+ "@backstage/core-plugin-api": "^1.12.4",
75
+ "@backstage/errors": "^1.2.7",
76
+ "@backstage/frontend-plugin-api": "^0.15.0",
77
+ "@backstage/plugin-catalog-react": "^2.1.0",
78
+ "@backstage/plugin-search-common": "^1.2.22",
79
+ "@backstage/plugin-search-react": "^1.11.0",
80
+ "@backstage/types": "^1.2.2",
81
+ "@backstage/ui": "^0.13.0",
82
+ "@backstage/version-bridge": "^1.0.12",
82
83
  "@material-ui/core": "^4.12.2",
83
84
  "@material-ui/icons": "^4.9.1",
84
85
  "qs": "^6.9.4",
85
86
  "react-use": "^17.2.4"
86
87
  },
87
88
  "devDependencies": {
88
- "@backstage/cli": "0.36.0-next.1",
89
- "@backstage/core-app-api": "1.19.6-next.0",
90
- "@backstage/dev-utils": "1.1.21-next.1",
91
- "@backstage/test-utils": "1.7.16-next.0",
89
+ "@backstage/cli": "^0.36.0",
90
+ "@backstage/core-app-api": "^1.19.6",
91
+ "@backstage/dev-utils": "^1.1.21",
92
+ "@backstage/test-utils": "^1.7.16",
92
93
  "@testing-library/dom": "^10.0.0",
93
94
  "@testing-library/jest-dom": "^6.0.0",
94
95
  "@testing-library/react": "^16.0.0",