@backstage/core-components 0.14.11-next.1 → 0.15.1-next.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,43 @@
1
1
  # @backstage/core-components
2
2
 
3
+ ## 0.15.1-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 46b5a20: `Link` component now accepts `externalLinkIcon` prop
8
+ - Updated dependencies
9
+ - @backstage/core-plugin-api@1.10.0-next.0
10
+ - @backstage/config@1.2.0
11
+ - @backstage/errors@1.2.4
12
+ - @backstage/theme@0.5.7
13
+ - @backstage/version-bridge@1.0.9
14
+
15
+ ## 0.15.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 9adc552: Added missing items to `overridableComponents`
20
+
21
+ **BREAKING** Overridable component name for styling `OAuthRequestDialog` changed to `BackstageOAuthRequestDialog`. Overridable component name `BackstageMissingAnnotationEmptyState` that was previously deprecated has been removed.
22
+
23
+ ### Patch Changes
24
+
25
+ - c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
26
+ - 0944334: Removed default title set to Unknown page on `ContentHeaderTitle` component to support usage of component without title prop.
27
+ - f325258: Use getOptionalString for optional app.support.items[].links[].title
28
+ - af4c146: Support menu items should not be buttons in favour of links
29
+ - 107a147: Fixed `Table` width being overridden by custom `style` prop.
30
+ - b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
31
+ - 06b8206: Added `titleComponent` prop to `SignInPage` component to allow further customization of the title using `ReactNode`
32
+ - dbbd93e: Internal update to match recent React types
33
+ - 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
34
+ - Updated dependencies
35
+ - @backstage/core-plugin-api@1.9.4
36
+ - @backstage/theme@0.5.7
37
+ - @backstage/version-bridge@1.0.9
38
+ - @backstage/config@1.2.0
39
+ - @backstage/errors@1.2.4
40
+
3
41
  ## 0.14.11-next.1
4
42
 
5
43
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/core-components__alpha",
3
- "version": "0.14.11-next.1",
3
+ "version": "0.15.1-next.0",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
@@ -1 +1 @@
1
- {"version":3,"file":"MissingAnnotationEmptyState.esm.js","sources":["../../../src/components/EmptyState/MissingAnnotationEmptyState.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport React from 'react';\n\nimport { CodeSnippet } from '../CodeSnippet';\nimport { Link } from '../Link';\nimport { EmptyState } from './EmptyState';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { coreComponentsTranslationRef } from '../../translation';\n\nconst COMPONENT_YAML_TEMPLATE = `apiVersion: backstage.io/v1alpha1\nkind: Component\nmetadata:\n name: example\n description: example.com\n annotations:\n ANNOTATION: value\nspec:\n type: website\n lifecycle: production\n owner: user:guest`;\n\nconst ANNOTATION_REGEXP = /^.*ANNOTATION.*$/m;\nconst ANNOTATION_YAML = COMPONENT_YAML_TEMPLATE.match(ANNOTATION_REGEXP)![0];\nconst ANNOTATION_LINE = COMPONENT_YAML_TEMPLATE.split('\\n').findIndex(line =>\n ANNOTATION_REGEXP.test(line),\n);\n\ntype Props = {\n annotation: string | string[];\n readMoreUrl?: string;\n};\n\n/**\n * @public\n * @deprecated This component is deprecated, please use {@link @backstage/plugin-catalog-react#MissingAnnotationEmptyStateClassKey} instead\n */\nexport type MissingAnnotationEmptyStateClassKey = 'code';\n\nconst useStyles = makeStyles(\n theme => ({\n code: {\n borderRadius: 6,\n margin: theme.spacing(2, 0),\n background:\n theme.palette.type === 'dark' ? '#444' : theme.palette.common.white,\n },\n }),\n { name: 'BackstageMissingAnnotationEmptyState' },\n);\n\nfunction generateLineNumbers(lineCount: number) {\n return Array.from(Array(lineCount + 1).keys(), i => i + ANNOTATION_LINE);\n}\n\nfunction generateComponentYaml(annotations: string[]) {\n const annotationYaml = annotations\n .map(ann => ANNOTATION_YAML.replace('ANNOTATION', ann))\n .join('\\n');\n return COMPONENT_YAML_TEMPLATE.replace(ANNOTATION_YAML, annotationYaml);\n}\n\nfunction useGenerateDescription(annotations: string[]) {\n const isSingular = annotations.length <= 1;\n return (\n <>\n The {isSingular ? 'annotation' : 'annotations'}{' '}\n {annotations\n .map(ann => <code>{ann}</code>)\n .reduce((prev, curr) => (\n <>\n {prev}, {curr}\n </>\n ))}{' '}\n {isSingular ? 'is' : 'are'} missing. You need to add the{' '}\n {isSingular ? 'annotation' : 'annotations'} to your component if you want\n to enable this tool.\n </>\n );\n}\n\n/**\n * @public\n * @deprecated This component is deprecated, please use {@link @backstage/plugin-catalog-react#MissingAnnotationEmptyState} instead\n */\nexport function MissingAnnotationEmptyState(props: Props) {\n const { annotation, readMoreUrl } = props;\n const annotations = Array.isArray(annotation) ? annotation : [annotation];\n const url =\n readMoreUrl ||\n 'https://backstage.io/docs/features/software-catalog/well-known-annotations';\n const classes = useStyles();\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n\n return (\n <EmptyState\n missing=\"field\"\n title={t('emptyState.missingAnnotation.title')}\n description={useGenerateDescription(annotations)}\n action={\n <>\n <Typography variant=\"body1\">\n {t('emptyState.missingAnnotation.actionTitle')}\n </Typography>\n <Box className={classes.code}>\n <CodeSnippet\n text={generateComponentYaml(annotations)}\n language=\"yaml\"\n showLineNumbers\n highlightedNumbers={generateLineNumbers(annotations.length)}\n customStyle={{ background: 'inherit', fontSize: '115%' }}\n />\n </Box>\n <Button color=\"primary\" component={Link} to={url}>\n {t('emptyState.missingAnnotation.readMore')}\n </Button>\n </>\n }\n />\n );\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"MissingAnnotationEmptyState.esm.js","sources":["../../../src/components/EmptyState/MissingAnnotationEmptyState.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport React from 'react';\n\nimport { CodeSnippet } from '../CodeSnippet';\nimport { Link } from '../Link';\nimport { EmptyState } from './EmptyState';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { coreComponentsTranslationRef } from '../../translation';\n\nconst COMPONENT_YAML_TEMPLATE = `apiVersion: backstage.io/v1alpha1\nkind: Component\nmetadata:\n name: example\n description: example.com\n annotations:\n ANNOTATION: value\nspec:\n type: website\n lifecycle: production\n owner: user:guest`;\n\nconst ANNOTATION_REGEXP = /^.*ANNOTATION.*$/m;\nconst ANNOTATION_YAML = COMPONENT_YAML_TEMPLATE.match(ANNOTATION_REGEXP)![0];\nconst ANNOTATION_LINE = COMPONENT_YAML_TEMPLATE.split('\\n').findIndex(line =>\n ANNOTATION_REGEXP.test(line),\n);\n\ntype Props = {\n annotation: string | string[];\n readMoreUrl?: string;\n};\n\nconst useStyles = makeStyles(\n theme => ({\n code: {\n borderRadius: 6,\n margin: theme.spacing(2, 0),\n background:\n theme.palette.type === 'dark' ? '#444' : theme.palette.common.white,\n },\n }),\n { name: 'BackstageMissingAnnotationEmptyState' },\n);\n\nfunction generateLineNumbers(lineCount: number) {\n return Array.from(Array(lineCount + 1).keys(), i => i + ANNOTATION_LINE);\n}\n\nfunction generateComponentYaml(annotations: string[]) {\n const annotationYaml = annotations\n .map(ann => ANNOTATION_YAML.replace('ANNOTATION', ann))\n .join('\\n');\n return COMPONENT_YAML_TEMPLATE.replace(ANNOTATION_YAML, annotationYaml);\n}\n\nfunction useGenerateDescription(annotations: string[]) {\n const isSingular = annotations.length <= 1;\n return (\n <>\n The {isSingular ? 'annotation' : 'annotations'}{' '}\n {annotations\n .map(ann => <code>{ann}</code>)\n .reduce((prev, curr) => (\n <>\n {prev}, {curr}\n </>\n ))}{' '}\n {isSingular ? 'is' : 'are'} missing. You need to add the{' '}\n {isSingular ? 'annotation' : 'annotations'} to your component if you want\n to enable this tool.\n </>\n );\n}\n\n/**\n * @public\n * @deprecated This component is deprecated, please use {@link @backstage/plugin-catalog-react#MissingAnnotationEmptyState} instead\n */\nexport function MissingAnnotationEmptyState(props: Props) {\n const { annotation, readMoreUrl } = props;\n const annotations = Array.isArray(annotation) ? annotation : [annotation];\n const url =\n readMoreUrl ||\n 'https://backstage.io/docs/features/software-catalog/well-known-annotations';\n const classes = useStyles();\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n\n return (\n <EmptyState\n missing=\"field\"\n title={t('emptyState.missingAnnotation.title')}\n description={useGenerateDescription(annotations)}\n action={\n <>\n <Typography variant=\"body1\">\n {t('emptyState.missingAnnotation.actionTitle')}\n </Typography>\n <Box className={classes.code}>\n <CodeSnippet\n text={generateComponentYaml(annotations)}\n language=\"yaml\"\n showLineNumbers\n highlightedNumbers={generateLineNumbers(annotations.length)}\n customStyle={{ background: 'inherit', fontSize: '115%' }}\n />\n </Box>\n <Button color=\"primary\" component={Link} to={url}>\n {t('emptyState.missingAnnotation.readMore')}\n </Button>\n </>\n }\n />\n );\n}\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { useAnalytics, useApi, configApiRef } from '@backstage/core-plugin-api';
1
+ import { useAnalytics, useApp, useApi, configApiRef } from '@backstage/core-plugin-api';
2
2
  import MaterialLink from '@material-ui/core/Link';
3
3
  import { makeStyles } from '@material-ui/core/styles';
4
4
  import Typography from '@material-ui/core/Typography';
@@ -6,13 +6,14 @@ import classNames from 'classnames';
6
6
  import { trimEnd } from 'lodash';
7
7
  import React__default from 'react';
8
8
  import { Link as Link$1, createRoutesFromChildren, Route } from 'react-router-dom';
9
+ import OpenInNew from '@material-ui/icons/OpenInNew';
9
10
 
10
11
  function isReactRouterBeta() {
11
12
  const [obj] = createRoutesFromChildren(/* @__PURE__ */ React__default.createElement(Route, { index: true, element: /* @__PURE__ */ React__default.createElement("div", null) }));
12
13
  return !obj.index;
13
14
  }
14
15
  const useStyles = makeStyles(
15
- {
16
+ (theme) => ({
16
17
  visuallyHidden: {
17
18
  clip: "rect(0 0 0 0)",
18
19
  clipPath: "inset(50%)",
@@ -25,10 +26,20 @@ const useStyles = makeStyles(
25
26
  },
26
27
  externalLink: {
27
28
  position: "relative"
29
+ },
30
+ externalLinkIcon: {
31
+ verticalAlign: "bottom",
32
+ marginLeft: theme.spacing(0.5)
28
33
  }
29
- },
34
+ }),
30
35
  { name: "Link" }
31
36
  );
37
+ const ExternalLinkIcon = () => {
38
+ const app = useApp();
39
+ const Icon = app.getSystemIcon("externalLink") || OpenInNew;
40
+ const classes = useStyles();
41
+ return /* @__PURE__ */ React__default.createElement(Icon, { className: classes.externalLinkIcon });
42
+ };
32
43
  const isExternalUri = (uri) => /^([a-z+.-]+):/.test(uri);
33
44
  const scriptProtocolPattern = (
34
45
  // eslint-disable-next-line no-control-regex
@@ -85,7 +96,7 @@ const getNodeText = (node) => {
85
96
  return "";
86
97
  };
87
98
  const Link = React__default.forwardRef(
88
- ({ onClick, noTrack, ...props }, ref) => {
99
+ ({ onClick, noTrack, externalLinkIcon, ...props }, ref) => {
89
100
  const classes = useStyles();
90
101
  const analytics = useAnalytics();
91
102
  const to = isReactRouterBeta() ? useResolvedPath(props.to) : props.to;
@@ -117,6 +128,7 @@ const Link = React__default.forwardRef(
117
128
  className: classNames(classes.externalLink, props.className)
118
129
  },
119
130
  props.children,
131
+ externalLinkIcon && /* @__PURE__ */ React__default.createElement(ExternalLinkIcon, null),
120
132
  /* @__PURE__ */ React__default.createElement(Typography, { component: "span", className: classes.visuallyHidden }, ", Opens in a new window")
121
133
  )
122
134
  ) : (
@@ -1 +1 @@
1
- {"version":3,"file":"Link.esm.js","sources":["../../../src/components/Link/Link.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 */\nimport { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api';\n// eslint-disable-next-line no-restricted-imports\nimport MaterialLink, {\n LinkProps as MaterialLinkProps,\n} from '@material-ui/core/Link';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport classnames from 'classnames';\nimport { trimEnd } from 'lodash';\nimport React, { ElementType } from 'react';\nimport {\n createRoutesFromChildren,\n Link as RouterLink,\n LinkProps as RouterLinkProps,\n Route,\n} from 'react-router-dom';\n\nexport function isReactRouterBeta(): boolean {\n const [obj] = createRoutesFromChildren(<Route index element={<div />} />);\n return !obj.index;\n}\n\nconst useStyles = makeStyles(\n {\n visuallyHidden: {\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n overflow: 'hidden',\n position: 'absolute',\n userSelect: 'none',\n whiteSpace: 'nowrap',\n height: 1,\n width: 1,\n },\n externalLink: {\n position: 'relative',\n },\n },\n { name: 'Link' },\n);\n\nexport const isExternalUri = (uri: string) => /^([a-z+.-]+):/.test(uri);\n\n// See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js\nconst scriptProtocolPattern =\n // eslint-disable-next-line no-control-regex\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\n\n// We install this globally in order to prevent javascript: URL XSS attacks via window.open\nconst originalWindowOpen = window.open as typeof window.open & {\n __backstage?: true;\n};\nif (originalWindowOpen && !originalWindowOpen.__backstage) {\n const newOpen = function open(\n this: Window,\n ...args: Parameters<typeof window.open>\n ) {\n const url = String(args[0]);\n if (scriptProtocolPattern.test(url)) {\n throw new Error(\n 'Rejected window.open() with a javascript: URL as a security precaution',\n );\n }\n return originalWindowOpen.apply(this, args);\n };\n newOpen.__backstage = true;\n window.open = newOpen;\n}\n\nexport type LinkProps = Omit<MaterialLinkProps, 'to'> &\n Omit<RouterLinkProps, 'to'> & {\n to: string;\n component?: ElementType<any>;\n noTrack?: boolean;\n };\n\n/**\n * Returns the app base url that could be empty if the Config API is not properly implemented.\n * The only cases there would be no Config API are in tests and in storybook stories, and in those cases, it's unlikely that callers would rely on this subpath behavior.\n */\nconst useBaseUrl = () => {\n try {\n const config = useApi(configApiRef);\n return config.getOptionalString('app.baseUrl');\n } catch {\n return undefined;\n }\n};\n\n/**\n * Get the app base path from the configured app baseUrl.\n * The returned path does not have a trailing slash.\n */\nconst useBasePath = () => {\n // baseUrl can be specified as just a path\n const base = 'http://sample.dev';\n const url = useBaseUrl() ?? '/';\n const { pathname } = new URL(url, base);\n return trimEnd(pathname, '/');\n};\n\n/** @deprecated Remove once we no longer support React Router v6 beta */\nexport const useResolvedPath = (uri: LinkProps['to']) => {\n let resolvedPath = String(uri);\n\n const basePath = useBasePath();\n const external = isExternalUri(resolvedPath);\n const startsWithBasePath = resolvedPath.startsWith(basePath);\n\n if (!external && !startsWithBasePath) {\n resolvedPath = basePath.concat(resolvedPath);\n }\n\n return resolvedPath;\n};\n\n/**\n * Given a react node, try to retrieve its text content.\n */\nconst getNodeText = (node: React.ReactNode): string => {\n // If the node is an array of children, recurse and join.\n if (node instanceof Array) {\n return node.map(getNodeText).join(' ').trim();\n }\n\n // If the node is a react element, recurse on its children.\n if (typeof node === 'object' && node) {\n return getNodeText((node as React.ReactElement)?.props?.children);\n }\n\n // Base case: the node is just text. Return it.\n if (['string', 'number'].includes(typeof node)) {\n return String(node);\n }\n\n // Base case: just return an empty string.\n return '';\n};\n\n/**\n * Thin wrapper on top of material-ui's Link component, which...\n * - Makes the Link use react-router\n * - Captures Link clicks as analytics events.\n */\nexport const Link = React.forwardRef<any, LinkProps>(\n ({ onClick, noTrack, ...props }, ref) => {\n const classes = useStyles();\n const analytics = useAnalytics();\n\n // Adding the base path to URLs breaks react-router v6 stable, so we only\n // do it for beta. The react router version won't change at runtime so it is\n // fine to ignore the rules of hooks.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const to = isReactRouterBeta() ? useResolvedPath(props.to) : props.to;\n const linkText = getNodeText(props.children) || to;\n const external = isExternalUri(to);\n const newWindow = external && !!/^https?:/.exec(to);\n\n if (scriptProtocolPattern.test(to)) {\n throw new Error(\n 'Link component rejected javascript: URL as a security precaution',\n );\n }\n\n const handleClick = (event: React.MouseEvent<any, MouseEvent>) => {\n onClick?.(event);\n if (!noTrack) {\n analytics.captureEvent('click', linkText, { attributes: { to } });\n }\n };\n\n return external ? (\n // External links\n <MaterialLink\n {...(newWindow ? { target: '_blank', rel: 'noopener' } : {})}\n {...props}\n {...(props['aria-label']\n ? { 'aria-label': `${props['aria-label']}, Opens in a new window` }\n : {})}\n ref={ref}\n href={to}\n onClick={handleClick}\n className={classnames(classes.externalLink, props.className)}\n >\n {props.children}\n <Typography component=\"span\" className={classes.visuallyHidden}>\n , Opens in a new window\n </Typography>\n </MaterialLink>\n ) : (\n // Interact with React Router for internal links\n <MaterialLink\n {...props}\n ref={ref}\n component={RouterLink}\n to={to}\n onClick={handleClick}\n />\n );\n },\n) as (props: LinkProps) => JSX.Element;\n"],"names":["React","classnames","RouterLink"],"mappings":"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"}
1
+ {"version":3,"file":"Link.esm.js","sources":["../../../src/components/Link/Link.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 */\nimport { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api';\n// eslint-disable-next-line no-restricted-imports\nimport MaterialLink, {\n LinkProps as MaterialLinkProps,\n} from '@material-ui/core/Link';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport classnames from 'classnames';\nimport { trimEnd } from 'lodash';\nimport React, { ElementType } from 'react';\nimport {\n createRoutesFromChildren,\n Link as RouterLink,\n LinkProps as RouterLinkProps,\n Route,\n} from 'react-router-dom';\nimport OpenInNew from '@material-ui/icons/OpenInNew';\nimport { useApp } from '@backstage/core-plugin-api';\n\nexport function isReactRouterBeta(): boolean {\n const [obj] = createRoutesFromChildren(<Route index element={<div />} />);\n return !obj.index;\n}\n\n/** @public */\nexport type LinkClassKey = 'visuallyHidden' | 'externalLink';\n\nconst useStyles = makeStyles(\n theme => ({\n visuallyHidden: {\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n overflow: 'hidden',\n position: 'absolute',\n userSelect: 'none',\n whiteSpace: 'nowrap',\n height: 1,\n width: 1,\n },\n externalLink: {\n position: 'relative',\n },\n externalLinkIcon: {\n verticalAlign: 'bottom',\n marginLeft: theme.spacing(0.5),\n },\n }),\n { name: 'Link' },\n);\n\nconst ExternalLinkIcon = () => {\n const app = useApp();\n const Icon = app.getSystemIcon('externalLink') || OpenInNew;\n const classes = useStyles();\n return <Icon className={classes.externalLinkIcon} />;\n};\n\nexport const isExternalUri = (uri: string) => /^([a-z+.-]+):/.test(uri);\n\n// See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js\nconst scriptProtocolPattern =\n // eslint-disable-next-line no-control-regex\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\n\n// We install this globally in order to prevent javascript: URL XSS attacks via window.open\nconst originalWindowOpen = window.open as typeof window.open & {\n __backstage?: true;\n};\nif (originalWindowOpen && !originalWindowOpen.__backstage) {\n const newOpen = function open(\n this: Window,\n ...args: Parameters<typeof window.open>\n ) {\n const url = String(args[0]);\n if (scriptProtocolPattern.test(url)) {\n throw new Error(\n 'Rejected window.open() with a javascript: URL as a security precaution',\n );\n }\n return originalWindowOpen.apply(this, args);\n };\n newOpen.__backstage = true;\n window.open = newOpen;\n}\n\nexport type LinkProps = Omit<MaterialLinkProps, 'to'> &\n Omit<RouterLinkProps, 'to'> & {\n to: string;\n component?: ElementType<any>;\n noTrack?: boolean;\n externalLinkIcon?: boolean;\n };\n\n/**\n * Returns the app base url that could be empty if the Config API is not properly implemented.\n * The only cases there would be no Config API are in tests and in storybook stories, and in those cases, it's unlikely that callers would rely on this subpath behavior.\n */\nconst useBaseUrl = () => {\n try {\n const config = useApi(configApiRef);\n return config.getOptionalString('app.baseUrl');\n } catch {\n return undefined;\n }\n};\n\n/**\n * Get the app base path from the configured app baseUrl.\n * The returned path does not have a trailing slash.\n */\nconst useBasePath = () => {\n // baseUrl can be specified as just a path\n const base = 'http://sample.dev';\n const url = useBaseUrl() ?? '/';\n const { pathname } = new URL(url, base);\n return trimEnd(pathname, '/');\n};\n\n/** @deprecated Remove once we no longer support React Router v6 beta */\nexport const useResolvedPath = (uri: LinkProps['to']) => {\n let resolvedPath = String(uri);\n\n const basePath = useBasePath();\n const external = isExternalUri(resolvedPath);\n const startsWithBasePath = resolvedPath.startsWith(basePath);\n\n if (!external && !startsWithBasePath) {\n resolvedPath = basePath.concat(resolvedPath);\n }\n\n return resolvedPath;\n};\n\n/**\n * Given a react node, try to retrieve its text content.\n */\nconst getNodeText = (node: React.ReactNode): string => {\n // If the node is an array of children, recurse and join.\n if (node instanceof Array) {\n return node.map(getNodeText).join(' ').trim();\n }\n\n // If the node is a react element, recurse on its children.\n if (typeof node === 'object' && node) {\n return getNodeText((node as React.ReactElement)?.props?.children);\n }\n\n // Base case: the node is just text. Return it.\n if (['string', 'number'].includes(typeof node)) {\n return String(node);\n }\n\n // Base case: just return an empty string.\n return '';\n};\n\n/**\n * Thin wrapper on top of material-ui's Link component, which...\n * - Makes the Link use react-router\n * - Captures Link clicks as analytics events.\n */\nexport const Link = React.forwardRef<any, LinkProps>(\n ({ onClick, noTrack, externalLinkIcon, ...props }, ref) => {\n const classes = useStyles();\n const analytics = useAnalytics();\n\n // Adding the base path to URLs breaks react-router v6 stable, so we only\n // do it for beta. The react router version won't change at runtime so it is\n // fine to ignore the rules of hooks.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const to = isReactRouterBeta() ? useResolvedPath(props.to) : props.to;\n const linkText = getNodeText(props.children) || to;\n const external = isExternalUri(to);\n const newWindow = external && !!/^https?:/.exec(to);\n\n if (scriptProtocolPattern.test(to)) {\n throw new Error(\n 'Link component rejected javascript: URL as a security precaution',\n );\n }\n\n const handleClick = (event: React.MouseEvent<any, MouseEvent>) => {\n onClick?.(event);\n if (!noTrack) {\n analytics.captureEvent('click', linkText, { attributes: { to } });\n }\n };\n\n return external ? (\n // External links\n <MaterialLink\n {...(newWindow ? { target: '_blank', rel: 'noopener' } : {})}\n {...props}\n {...(props['aria-label']\n ? { 'aria-label': `${props['aria-label']}, Opens in a new window` }\n : {})}\n ref={ref}\n href={to}\n onClick={handleClick}\n className={classnames(classes.externalLink, props.className)}\n >\n {props.children}\n {externalLinkIcon && <ExternalLinkIcon />}\n <Typography component=\"span\" className={classes.visuallyHidden}>\n , Opens in a new window\n </Typography>\n </MaterialLink>\n ) : (\n // Interact with React Router for internal links\n <MaterialLink\n {...props}\n ref={ref}\n component={RouterLink}\n to={to}\n onClick={handleClick}\n />\n );\n },\n) as (props: LinkProps) => JSX.Element;\n"],"names":["React","classnames","RouterLink"],"mappings":"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"}
@@ -192,6 +192,7 @@ function Table(props) {
192
192
  onStateChange,
193
193
  components,
194
194
  isLoading: loading,
195
+ style,
195
196
  ...restProps
196
197
  } = props;
197
198
  const tableClasses = useTableStyles();
@@ -295,7 +296,7 @@ function Table(props) {
295
296
  icons: tableIcons,
296
297
  title: /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(Typography, { variant: "h5", component: "h2" }, title), subtitle && /* @__PURE__ */ React__default.createElement(Typography, { color: "textSecondary", variant: "body1" }, subtitle)),
297
298
  data: tableData,
298
- style: { width: "100%" },
299
+ style: { width: "100%", ...style },
299
300
  localization: {
300
301
  toolbar: { searchPlaceholder: "Filter", searchTooltip: "Filter" },
301
302
  ...localization
@@ -1 +1 @@
1
- {"version":3,"file":"Table.esm.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 MTable, {\n Column,\n Icons,\n MaterialTableProps,\n MTableBody,\n MTableHeader,\n MTableToolbar,\n Options,\n} from '@material-table/core';\nimport Box from '@material-ui/core/Box';\nimport IconButton from '@material-ui/core/IconButton';\nimport {\n makeStyles,\n Theme,\n useTheme,\n withStyles,\n} from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport AddBox from '@material-ui/icons/AddBox';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\nimport ChevronRight from '@material-ui/icons/ChevronRight';\nimport Clear from '@material-ui/icons/Clear';\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\nimport Edit from '@material-ui/icons/Edit';\nimport FilterList from '@material-ui/icons/FilterList';\nimport FirstPage from '@material-ui/icons/FirstPage';\nimport LastPage from '@material-ui/icons/LastPage';\nimport Remove from '@material-ui/icons/Remove';\nimport SaveAlt from '@material-ui/icons/SaveAlt';\nimport ViewColumn from '@material-ui/icons/ViewColumn';\nimport { isEqual, transform } from 'lodash';\nimport React, {\n forwardRef,\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { SelectProps } from '../Select/Select';\nimport { Filter, Filters, SelectedFilters, Without } from './Filters';\nimport { TableLoadingBody } from './TableLoadingBody';\n\n// Material-table is not using the standard icons available in in material-ui. https://github.com/mbrn/material-table/issues/51\nconst tableIcons: Icons = {\n Add: forwardRef<SVGSVGElement>((props, ref) => (\n <AddBox {...props} ref={ref} />\n )),\n Check: forwardRef<SVGSVGElement>((props, ref) => (\n <Check {...props} ref={ref} />\n )),\n Clear: forwardRef<SVGSVGElement>((props, ref) => (\n <Clear {...props} ref={ref} />\n )),\n Delete: forwardRef<SVGSVGElement>((props, ref) => (\n <DeleteOutline {...props} ref={ref} />\n )),\n DetailPanel: forwardRef<SVGSVGElement>((props, ref) => (\n <ChevronRight {...props} ref={ref} />\n )),\n Edit: forwardRef<SVGSVGElement>((props, ref) => (\n <Edit {...props} ref={ref} />\n )),\n Export: forwardRef<SVGSVGElement>((props, ref) => (\n <SaveAlt {...props} ref={ref} />\n )),\n Filter: forwardRef<SVGSVGElement>((props, ref) => (\n <FilterList {...props} ref={ref} />\n )),\n FirstPage: forwardRef<SVGSVGElement>((props, ref) => (\n <FirstPage {...props} ref={ref} />\n )),\n LastPage: forwardRef<SVGSVGElement>((props, ref) => (\n <LastPage {...props} ref={ref} />\n )),\n NextPage: forwardRef<SVGSVGElement>((props, ref) => (\n <ChevronRight {...props} ref={ref} />\n )),\n PreviousPage: forwardRef<SVGSVGElement>((props, ref) => (\n <ChevronLeft {...props} ref={ref} />\n )),\n ResetSearch: forwardRef<SVGSVGElement>((props, ref) => (\n <Clear {...props} ref={ref} />\n )),\n Search: forwardRef<SVGSVGElement>((props, ref) => (\n <FilterList {...props} ref={ref} />\n )),\n SortArrow: forwardRef<SVGSVGElement>((props, ref) => (\n <ArrowUpward {...props} ref={ref} />\n )),\n ThirdStateCheck: forwardRef<SVGSVGElement>((props, ref) => (\n <Remove {...props} ref={ref} />\n )),\n ViewColumn: forwardRef<SVGSVGElement>((props, ref) => (\n <ViewColumn {...props} ref={ref} />\n )),\n};\n\n// TODO: Material table might already have such a function internally that we can use?\nfunction extractValueByField(data: any, field: string): any | undefined {\n const path = field.split('.');\n let value = data[path[0]];\n\n for (let i = 1; i < path.length; ++i) {\n if (value === undefined) {\n return value;\n }\n\n const f = path[i];\n value = value[f];\n }\n\n return value;\n}\n\nexport type TableHeaderClassKey = 'header';\n\nconst StyledMTableHeader = withStyles(\n theme => ({\n header: {\n padding: theme.spacing(1, 2, 1, 2.5),\n borderTop: `1px solid ${theme.palette.grey.A100}`,\n borderBottom: `1px solid ${theme.palette.grey.A100}`,\n // withStyles hasn't a generic overload for theme\n fontWeight: theme.typography.fontWeightBold,\n position: 'static',\n wordBreak: 'normal',\n textTransform: 'uppercase',\n },\n }),\n { name: 'BackstageTableHeader' },\n)(MTableHeader);\n\nexport type TableToolbarClassKey = 'root' | 'title' | 'searchField';\n\nconst StyledMTableToolbar = withStyles(\n theme => ({\n root: {\n padding: theme.spacing(3, 0, 2.5, 2.5),\n },\n title: {\n '& > h6': {\n fontWeight: theme.typography.fontWeightBold,\n },\n },\n searchField: {\n paddingRight: theme.spacing(2),\n },\n }),\n { name: 'BackstageTableToolbar' },\n)(MTableToolbar);\n\n/** @public */\nexport type FiltersContainerClassKey = 'root' | 'title';\n\nconst useFilterStyles = makeStyles(\n theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n title: {\n fontWeight: theme.typography.fontWeightBold,\n fontSize: 18,\n whiteSpace: 'nowrap',\n },\n }),\n { name: 'BackstageTableFiltersContainer' },\n);\n\nexport type TableClassKey = 'root';\n\nconst useTableStyles = makeStyles(\n () => ({\n root: {\n display: 'flex',\n alignItems: 'start',\n },\n }),\n { name: 'BackstageTable' },\n);\n\nfunction convertColumns<T extends object>(\n columns: TableColumn<T>[],\n theme: Theme,\n): TableColumn<T>[] {\n return columns.map(column => {\n const headerStyle: React.CSSProperties = column.headerStyle ?? {};\n\n let cellStyle = column.cellStyle || {};\n\n if (column.highlight) {\n headerStyle.color = theme.palette.textContrast;\n\n if (typeof cellStyle === 'object') {\n (cellStyle as React.CSSProperties).fontWeight =\n theme.typography.fontWeightBold;\n } else {\n const cellStyleFn = cellStyle as (\n data: any,\n rowData: T,\n column?: Column<T>,\n ) => React.CSSProperties;\n cellStyle = (data, rowData, rowColumn) => {\n const style = cellStyleFn(data, rowData, rowColumn);\n return { ...style, fontWeight: theme.typography.fontWeightBold };\n };\n }\n }\n\n return {\n ...column,\n headerStyle,\n cellStyle,\n };\n });\n}\n\nfunction removeDefaultValues(state: any, defaultState: any): any {\n return transform(state, (result, value, key) => {\n if (!isEqual(value, defaultState[key])) {\n result[key] = value;\n }\n });\n}\n\nconst defaultInitialState = {\n search: '',\n filtersOpen: false,\n filters: {},\n};\n\nexport interface TableColumn<T extends object = {}> extends Column<T> {\n highlight?: boolean;\n width?: string;\n}\n\nexport type TableFilter = {\n column: string;\n type: 'select' | 'multiple-select';\n};\n\nexport type TableState = {\n search?: string;\n filtersOpen?: boolean;\n filters?: SelectedFilters;\n};\n\nexport interface TableProps<T extends object = {}>\n extends MaterialTableProps<T> {\n columns: TableColumn<T>[];\n subtitle?: string;\n filters?: TableFilter[];\n initialState?: TableState;\n emptyContent?: ReactNode;\n isLoading?: boolean;\n onStateChange?: (state: TableState) => any;\n}\n\nexport interface TableOptions<T extends object = {}> extends Options<T> {}\n\nexport function TableToolbar(toolbarProps: {\n toolbarRef: MutableRefObject<any>;\n setSearch: (value: string) => void;\n onSearchChanged: (value: string) => void;\n toggleFilters: () => void;\n hasFilters: boolean;\n selectedFiltersLength: number;\n}) {\n const {\n toolbarRef,\n setSearch,\n hasFilters,\n selectedFiltersLength,\n toggleFilters,\n } = toolbarProps;\n const filtersClasses = useFilterStyles();\n const onSearchChanged = useCallback(\n (searchText: string) => {\n toolbarProps.onSearchChanged(searchText);\n setSearch(searchText);\n },\n [toolbarProps, setSearch],\n );\n\n if (hasFilters) {\n return (\n <Box className={filtersClasses.root}>\n <Box className={filtersClasses.root}>\n <IconButton onClick={toggleFilters} aria-label=\"filter list\">\n <FilterList />\n </IconButton>\n <Typography className={filtersClasses.title}>\n Filters ({selectedFiltersLength})\n </Typography>\n </Box>\n <StyledMTableToolbar\n {...toolbarProps}\n ref={toolbarRef}\n onSearchChanged={onSearchChanged}\n />\n </Box>\n );\n }\n\n return (\n <StyledMTableToolbar\n {...toolbarProps}\n ref={toolbarRef}\n onSearchChanged={onSearchChanged}\n />\n );\n}\n\n/**\n * @public\n */\nexport function Table<T extends object = {}>(props: TableProps<T>) {\n const {\n data,\n columns,\n emptyContent,\n options,\n title,\n subtitle,\n localization,\n filters,\n initialState,\n onStateChange,\n components,\n isLoading: loading,\n ...restProps\n } = props;\n const tableClasses = useTableStyles();\n\n const theme = useTheme();\n\n const calculatedInitialState = { ...defaultInitialState, ...initialState };\n\n const [filtersOpen, setFiltersOpen] = useState(\n calculatedInitialState.filtersOpen,\n );\n const toggleFilters = useCallback(\n () => setFiltersOpen(v => !v),\n [setFiltersOpen],\n );\n\n const [selectedFilters, setSelectedFilters] = useState(\n calculatedInitialState.filters,\n );\n\n const [search, setSearch] = useState(calculatedInitialState.search);\n\n useEffect(() => {\n if (onStateChange) {\n const state = removeDefaultValues(\n {\n search,\n filtersOpen,\n filters: selectedFilters,\n },\n defaultInitialState,\n );\n\n onStateChange(state);\n }\n }, [search, filtersOpen, selectedFilters, onStateChange]);\n\n const getFieldByTitle = useCallback(\n (titleValue: string | keyof T) =>\n columns.find(el => el.title === titleValue)?.field,\n [columns],\n );\n\n const tableData = useMemo(() => {\n if (typeof data === 'function' || !selectedFilters) {\n return data;\n }\n\n const selectedFiltersArray = Object.values(selectedFilters);\n if (data && selectedFiltersArray.flat().length) {\n const newData = (data as any[]).filter(\n el =>\n !!Object.entries(selectedFilters)\n .filter(([, value]) => !!(value as { length?: number }).length)\n .every(([key, filterValue]) => {\n const fieldValue = extractValueByField(\n el,\n getFieldByTitle(key) as string,\n );\n\n if (Array.isArray(fieldValue) && Array.isArray(filterValue)) {\n return fieldValue.some(v => filterValue.includes(v));\n } else if (Array.isArray(fieldValue)) {\n return fieldValue.includes(filterValue);\n } else if (Array.isArray(filterValue)) {\n return filterValue.includes(fieldValue);\n }\n\n return fieldValue === filterValue;\n }),\n );\n return newData;\n }\n return data;\n }, [data, selectedFilters, getFieldByTitle]);\n\n const selectedFiltersLength = Object.values(selectedFilters).flat().length;\n\n const hasFilters = !!filters?.length;\n const Toolbar = useCallback(\n (toolbarProps: any /* no type for this in material-table */) => {\n return (\n <TableToolbar\n setSearch={setSearch}\n hasFilters={hasFilters}\n selectedFiltersLength={selectedFiltersLength}\n toggleFilters={toggleFilters}\n {...toolbarProps}\n />\n );\n },\n [toggleFilters, hasFilters, selectedFiltersLength, setSearch],\n );\n\n const hasNoRows = typeof data !== 'function' && data.length === 0;\n const columnCount = columns.length;\n const Body = useMemo(\n () => makeBody({ hasNoRows, emptyContent, columnCount, loading }),\n [hasNoRows, emptyContent, columnCount, loading],\n );\n\n return (\n <Box className={tableClasses.root}>\n {filtersOpen && data && typeof data !== 'function' && filters?.length && (\n <Filters\n filters={constructFilters(filters, data as any[], columns)}\n selectedFilters={selectedFilters}\n onChangeFilters={setSelectedFilters}\n />\n )}\n <MTable<T>\n components={{\n Header: StyledMTableHeader,\n Body,\n Toolbar,\n ...components,\n }}\n options={options}\n columns={convertColumns(columns, theme)}\n icons={tableIcons}\n title={\n <>\n <Typography variant=\"h5\" component=\"h2\">\n {title}\n </Typography>\n {subtitle && (\n <Typography color=\"textSecondary\" variant=\"body1\">\n {subtitle}\n </Typography>\n )}\n </>\n }\n data={tableData}\n style={{ width: '100%' }}\n localization={{\n toolbar: { searchPlaceholder: 'Filter', searchTooltip: 'Filter' },\n ...localization,\n }}\n {...restProps}\n />\n </Box>\n );\n}\n\nTable.icons = Object.freeze(tableIcons);\n\nfunction makeBody({\n columnCount,\n emptyContent,\n hasNoRows,\n loading,\n}: {\n hasNoRows: boolean;\n emptyContent: ReactNode;\n columnCount: number;\n loading?: boolean;\n}) {\n return (bodyProps: any /* no type for this in material-table */) => {\n if (loading) {\n return <TableLoadingBody colSpan={columnCount} />;\n }\n\n if (emptyContent && hasNoRows) {\n return (\n <tbody>\n <tr>\n <td colSpan={columnCount}>{emptyContent}</td>\n </tr>\n </tbody>\n );\n }\n\n return <MTableBody {...bodyProps} />;\n };\n}\n\nfunction constructFilters<T extends object>(\n filterConfig: TableFilter[],\n dataValue: any[] | undefined,\n columns: TableColumn<T>[],\n): Filter[] {\n const extractDistinctValues = (field: string | keyof T): Set<any> => {\n const distinctValues = new Set<any>();\n const addValue = (value: any) => {\n if (value !== undefined && value !== null) {\n distinctValues.add(value);\n }\n };\n\n if (dataValue) {\n dataValue.forEach(el => {\n const value = extractValueByField(\n el,\n columns.find(c => c.title === field)?.field as string,\n );\n\n if (Array.isArray(value)) {\n (value as []).forEach(addValue);\n } else {\n addValue(value);\n }\n });\n }\n\n return distinctValues;\n };\n\n const constructSelect = (\n filter: TableFilter,\n ): Without<SelectProps, 'onChange'> => {\n return {\n placeholder: 'All results',\n label: filter.column,\n multiple: filter.type === 'multiple-select',\n items: [...extractDistinctValues(filter.column)].sort().map(value => ({\n label: value,\n value,\n })),\n };\n };\n\n return filterConfig.map(filter => ({\n type: filter.type,\n element: constructSelect(filter),\n }));\n}\n"],"names":["ChevronLeft","React"],"mappings":"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"}
1
+ {"version":3,"file":"Table.esm.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 MTable, {\n Column,\n Icons,\n MaterialTableProps,\n MTableBody,\n MTableHeader,\n MTableToolbar,\n Options,\n} from '@material-table/core';\nimport Box from '@material-ui/core/Box';\nimport IconButton from '@material-ui/core/IconButton';\nimport {\n makeStyles,\n Theme,\n useTheme,\n withStyles,\n} from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport AddBox from '@material-ui/icons/AddBox';\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\nimport Check from '@material-ui/icons/Check';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\nimport ChevronRight from '@material-ui/icons/ChevronRight';\nimport Clear from '@material-ui/icons/Clear';\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\nimport Edit from '@material-ui/icons/Edit';\nimport FilterList from '@material-ui/icons/FilterList';\nimport FirstPage from '@material-ui/icons/FirstPage';\nimport LastPage from '@material-ui/icons/LastPage';\nimport Remove from '@material-ui/icons/Remove';\nimport SaveAlt from '@material-ui/icons/SaveAlt';\nimport ViewColumn from '@material-ui/icons/ViewColumn';\nimport { isEqual, transform } from 'lodash';\nimport React, {\n forwardRef,\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { SelectProps } from '../Select/Select';\nimport { Filter, Filters, SelectedFilters, Without } from './Filters';\nimport { TableLoadingBody } from './TableLoadingBody';\n\n// Material-table is not using the standard icons available in in material-ui. https://github.com/mbrn/material-table/issues/51\nconst tableIcons: Icons = {\n Add: forwardRef<SVGSVGElement>((props, ref) => (\n <AddBox {...props} ref={ref} />\n )),\n Check: forwardRef<SVGSVGElement>((props, ref) => (\n <Check {...props} ref={ref} />\n )),\n Clear: forwardRef<SVGSVGElement>((props, ref) => (\n <Clear {...props} ref={ref} />\n )),\n Delete: forwardRef<SVGSVGElement>((props, ref) => (\n <DeleteOutline {...props} ref={ref} />\n )),\n DetailPanel: forwardRef<SVGSVGElement>((props, ref) => (\n <ChevronRight {...props} ref={ref} />\n )),\n Edit: forwardRef<SVGSVGElement>((props, ref) => (\n <Edit {...props} ref={ref} />\n )),\n Export: forwardRef<SVGSVGElement>((props, ref) => (\n <SaveAlt {...props} ref={ref} />\n )),\n Filter: forwardRef<SVGSVGElement>((props, ref) => (\n <FilterList {...props} ref={ref} />\n )),\n FirstPage: forwardRef<SVGSVGElement>((props, ref) => (\n <FirstPage {...props} ref={ref} />\n )),\n LastPage: forwardRef<SVGSVGElement>((props, ref) => (\n <LastPage {...props} ref={ref} />\n )),\n NextPage: forwardRef<SVGSVGElement>((props, ref) => (\n <ChevronRight {...props} ref={ref} />\n )),\n PreviousPage: forwardRef<SVGSVGElement>((props, ref) => (\n <ChevronLeft {...props} ref={ref} />\n )),\n ResetSearch: forwardRef<SVGSVGElement>((props, ref) => (\n <Clear {...props} ref={ref} />\n )),\n Search: forwardRef<SVGSVGElement>((props, ref) => (\n <FilterList {...props} ref={ref} />\n )),\n SortArrow: forwardRef<SVGSVGElement>((props, ref) => (\n <ArrowUpward {...props} ref={ref} />\n )),\n ThirdStateCheck: forwardRef<SVGSVGElement>((props, ref) => (\n <Remove {...props} ref={ref} />\n )),\n ViewColumn: forwardRef<SVGSVGElement>((props, ref) => (\n <ViewColumn {...props} ref={ref} />\n )),\n};\n\n// TODO: Material table might already have such a function internally that we can use?\nfunction extractValueByField(data: any, field: string): any | undefined {\n const path = field.split('.');\n let value = data[path[0]];\n\n for (let i = 1; i < path.length; ++i) {\n if (value === undefined) {\n return value;\n }\n\n const f = path[i];\n value = value[f];\n }\n\n return value;\n}\n\nexport type TableHeaderClassKey = 'header';\n\nconst StyledMTableHeader = withStyles(\n theme => ({\n header: {\n padding: theme.spacing(1, 2, 1, 2.5),\n borderTop: `1px solid ${theme.palette.grey.A100}`,\n borderBottom: `1px solid ${theme.palette.grey.A100}`,\n // withStyles hasn't a generic overload for theme\n fontWeight: theme.typography.fontWeightBold,\n position: 'static',\n wordBreak: 'normal',\n textTransform: 'uppercase',\n },\n }),\n { name: 'BackstageTableHeader' },\n)(MTableHeader);\n\nexport type TableToolbarClassKey = 'root' | 'title' | 'searchField';\n\nconst StyledMTableToolbar = withStyles(\n theme => ({\n root: {\n padding: theme.spacing(3, 0, 2.5, 2.5),\n },\n title: {\n '& > h6': {\n fontWeight: theme.typography.fontWeightBold,\n },\n },\n searchField: {\n paddingRight: theme.spacing(2),\n },\n }),\n { name: 'BackstageTableToolbar' },\n)(MTableToolbar);\n\n/** @public */\nexport type FiltersContainerClassKey = 'root' | 'title';\n\nconst useFilterStyles = makeStyles(\n theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n title: {\n fontWeight: theme.typography.fontWeightBold,\n fontSize: 18,\n whiteSpace: 'nowrap',\n },\n }),\n { name: 'BackstageTableFiltersContainer' },\n);\n\nexport type TableClassKey = 'root';\n\nconst useTableStyles = makeStyles(\n () => ({\n root: {\n display: 'flex',\n alignItems: 'start',\n },\n }),\n { name: 'BackstageTable' },\n);\n\nfunction convertColumns<T extends object>(\n columns: TableColumn<T>[],\n theme: Theme,\n): TableColumn<T>[] {\n return columns.map(column => {\n const headerStyle: React.CSSProperties = column.headerStyle ?? {};\n\n let cellStyle = column.cellStyle || {};\n\n if (column.highlight) {\n headerStyle.color = theme.palette.textContrast;\n\n if (typeof cellStyle === 'object') {\n (cellStyle as React.CSSProperties).fontWeight =\n theme.typography.fontWeightBold;\n } else {\n const cellStyleFn = cellStyle as (\n data: any,\n rowData: T,\n column?: Column<T>,\n ) => React.CSSProperties;\n cellStyle = (data, rowData, rowColumn) => {\n const style = cellStyleFn(data, rowData, rowColumn);\n return { ...style, fontWeight: theme.typography.fontWeightBold };\n };\n }\n }\n\n return {\n ...column,\n headerStyle,\n cellStyle,\n };\n });\n}\n\nfunction removeDefaultValues(state: any, defaultState: any): any {\n return transform(state, (result, value, key) => {\n if (!isEqual(value, defaultState[key])) {\n result[key] = value;\n }\n });\n}\n\nconst defaultInitialState = {\n search: '',\n filtersOpen: false,\n filters: {},\n};\n\nexport interface TableColumn<T extends object = {}> extends Column<T> {\n highlight?: boolean;\n width?: string;\n}\n\nexport type TableFilter = {\n column: string;\n type: 'select' | 'multiple-select';\n};\n\nexport type TableState = {\n search?: string;\n filtersOpen?: boolean;\n filters?: SelectedFilters;\n};\n\nexport interface TableProps<T extends object = {}>\n extends MaterialTableProps<T> {\n columns: TableColumn<T>[];\n subtitle?: string;\n filters?: TableFilter[];\n initialState?: TableState;\n emptyContent?: ReactNode;\n isLoading?: boolean;\n onStateChange?: (state: TableState) => any;\n}\n\nexport interface TableOptions<T extends object = {}> extends Options<T> {}\n\nexport function TableToolbar(toolbarProps: {\n toolbarRef: MutableRefObject<any>;\n setSearch: (value: string) => void;\n onSearchChanged: (value: string) => void;\n toggleFilters: () => void;\n hasFilters: boolean;\n selectedFiltersLength: number;\n}) {\n const {\n toolbarRef,\n setSearch,\n hasFilters,\n selectedFiltersLength,\n toggleFilters,\n } = toolbarProps;\n const filtersClasses = useFilterStyles();\n const onSearchChanged = useCallback(\n (searchText: string) => {\n toolbarProps.onSearchChanged(searchText);\n setSearch(searchText);\n },\n [toolbarProps, setSearch],\n );\n\n if (hasFilters) {\n return (\n <Box className={filtersClasses.root}>\n <Box className={filtersClasses.root}>\n <IconButton onClick={toggleFilters} aria-label=\"filter list\">\n <FilterList />\n </IconButton>\n <Typography className={filtersClasses.title}>\n Filters ({selectedFiltersLength})\n </Typography>\n </Box>\n <StyledMTableToolbar\n {...toolbarProps}\n ref={toolbarRef}\n onSearchChanged={onSearchChanged}\n />\n </Box>\n );\n }\n\n return (\n <StyledMTableToolbar\n {...toolbarProps}\n ref={toolbarRef}\n onSearchChanged={onSearchChanged}\n />\n );\n}\n\n/**\n * @public\n */\nexport function Table<T extends object = {}>(props: TableProps<T>) {\n const {\n data,\n columns,\n emptyContent,\n options,\n title,\n subtitle,\n localization,\n filters,\n initialState,\n onStateChange,\n components,\n isLoading: loading,\n style,\n ...restProps\n } = props;\n const tableClasses = useTableStyles();\n\n const theme = useTheme();\n\n const calculatedInitialState = { ...defaultInitialState, ...initialState };\n\n const [filtersOpen, setFiltersOpen] = useState(\n calculatedInitialState.filtersOpen,\n );\n const toggleFilters = useCallback(\n () => setFiltersOpen(v => !v),\n [setFiltersOpen],\n );\n\n const [selectedFilters, setSelectedFilters] = useState(\n calculatedInitialState.filters,\n );\n\n const [search, setSearch] = useState(calculatedInitialState.search);\n\n useEffect(() => {\n if (onStateChange) {\n const state = removeDefaultValues(\n {\n search,\n filtersOpen,\n filters: selectedFilters,\n },\n defaultInitialState,\n );\n\n onStateChange(state);\n }\n }, [search, filtersOpen, selectedFilters, onStateChange]);\n\n const getFieldByTitle = useCallback(\n (titleValue: string | keyof T) =>\n columns.find(el => el.title === titleValue)?.field,\n [columns],\n );\n\n const tableData = useMemo(() => {\n if (typeof data === 'function' || !selectedFilters) {\n return data;\n }\n\n const selectedFiltersArray = Object.values(selectedFilters);\n if (data && selectedFiltersArray.flat().length) {\n const newData = (data as any[]).filter(\n el =>\n !!Object.entries(selectedFilters)\n .filter(([, value]) => !!(value as { length?: number }).length)\n .every(([key, filterValue]) => {\n const fieldValue = extractValueByField(\n el,\n getFieldByTitle(key) as string,\n );\n\n if (Array.isArray(fieldValue) && Array.isArray(filterValue)) {\n return fieldValue.some(v => filterValue.includes(v));\n } else if (Array.isArray(fieldValue)) {\n return fieldValue.includes(filterValue);\n } else if (Array.isArray(filterValue)) {\n return filterValue.includes(fieldValue);\n }\n\n return fieldValue === filterValue;\n }),\n );\n return newData;\n }\n return data;\n }, [data, selectedFilters, getFieldByTitle]);\n\n const selectedFiltersLength = Object.values(selectedFilters).flat().length;\n\n const hasFilters = !!filters?.length;\n const Toolbar = useCallback(\n (toolbarProps: any /* no type for this in material-table */) => {\n return (\n <TableToolbar\n setSearch={setSearch}\n hasFilters={hasFilters}\n selectedFiltersLength={selectedFiltersLength}\n toggleFilters={toggleFilters}\n {...toolbarProps}\n />\n );\n },\n [toggleFilters, hasFilters, selectedFiltersLength, setSearch],\n );\n\n const hasNoRows = typeof data !== 'function' && data.length === 0;\n const columnCount = columns.length;\n const Body = useMemo(\n () => makeBody({ hasNoRows, emptyContent, columnCount, loading }),\n [hasNoRows, emptyContent, columnCount, loading],\n );\n\n return (\n <Box className={tableClasses.root}>\n {filtersOpen && data && typeof data !== 'function' && filters?.length && (\n <Filters\n filters={constructFilters(filters, data as any[], columns)}\n selectedFilters={selectedFilters}\n onChangeFilters={setSelectedFilters}\n />\n )}\n <MTable<T>\n components={{\n Header: StyledMTableHeader,\n Body,\n Toolbar,\n ...components,\n }}\n options={options}\n columns={convertColumns(columns, theme)}\n icons={tableIcons}\n title={\n <>\n <Typography variant=\"h5\" component=\"h2\">\n {title}\n </Typography>\n {subtitle && (\n <Typography color=\"textSecondary\" variant=\"body1\">\n {subtitle}\n </Typography>\n )}\n </>\n }\n data={tableData}\n style={{ width: '100%', ...style }}\n localization={{\n toolbar: { searchPlaceholder: 'Filter', searchTooltip: 'Filter' },\n ...localization,\n }}\n {...restProps}\n />\n </Box>\n );\n}\n\nTable.icons = Object.freeze(tableIcons);\n\nfunction makeBody({\n columnCount,\n emptyContent,\n hasNoRows,\n loading,\n}: {\n hasNoRows: boolean;\n emptyContent: ReactNode;\n columnCount: number;\n loading?: boolean;\n}) {\n return (bodyProps: any /* no type for this in material-table */) => {\n if (loading) {\n return <TableLoadingBody colSpan={columnCount} />;\n }\n\n if (emptyContent && hasNoRows) {\n return (\n <tbody>\n <tr>\n <td colSpan={columnCount}>{emptyContent}</td>\n </tr>\n </tbody>\n );\n }\n\n return <MTableBody {...bodyProps} />;\n };\n}\n\nfunction constructFilters<T extends object>(\n filterConfig: TableFilter[],\n dataValue: any[] | undefined,\n columns: TableColumn<T>[],\n): Filter[] {\n const extractDistinctValues = (field: string | keyof T): Set<any> => {\n const distinctValues = new Set<any>();\n const addValue = (value: any) => {\n if (value !== undefined && value !== null) {\n distinctValues.add(value);\n }\n };\n\n if (dataValue) {\n dataValue.forEach(el => {\n const value = extractValueByField(\n el,\n columns.find(c => c.title === field)?.field as string,\n );\n\n if (Array.isArray(value)) {\n (value as []).forEach(addValue);\n } else {\n addValue(value);\n }\n });\n }\n\n return distinctValues;\n };\n\n const constructSelect = (\n filter: TableFilter,\n ): Without<SelectProps, 'onChange'> => {\n return {\n placeholder: 'All results',\n label: filter.column,\n multiple: filter.type === 'multiple-select',\n items: [...extractDistinctValues(filter.column)].sort().map(value => ({\n label: value,\n value,\n })),\n };\n };\n\n return filterConfig.map(filter => ({\n type: filter.type,\n element: constructSelect(filter),\n }));\n}\n"],"names":["ChevronLeft","React"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -144,10 +144,13 @@ interface AvatarProps {
144
144
  */
145
145
  declare function Avatar(props: AvatarProps): React__default.JSX.Element;
146
146
 
147
+ /** @public */
148
+ type LinkClassKey = 'visuallyHidden' | 'externalLink';
147
149
  type LinkProps = Omit<LinkProps$1, 'to'> & Omit<LinkProps$2, 'to'> & {
148
150
  to: string;
149
151
  component?: ElementType<any>;
150
152
  noTrack?: boolean;
153
+ externalLinkIcon?: boolean;
151
154
  };
152
155
  /**
153
156
  * Thin wrapper on top of material-ui's Link component, which...
@@ -662,11 +665,6 @@ type Props$f = {
662
665
  annotation: string | string[];
663
666
  readMoreUrl?: string;
664
667
  };
665
- /**
666
- * @public
667
- * @deprecated This component is deprecated, please use {@link @backstage/plugin-catalog-react#MissingAnnotationEmptyStateClassKey} instead
668
- */
669
- type MissingAnnotationEmptyStateClassKey = 'code';
670
668
  /**
671
669
  * @public
672
670
  * @deprecated This component is deprecated, please use {@link @backstage/plugin-catalog-react#MissingAnnotationEmptyState} instead
@@ -1373,6 +1371,9 @@ declare function ErrorPage(props: IErrorPageProps): React__default.JSX.Element;
1373
1371
 
1374
1372
  type MicDropClassKey = 'micDrop';
1375
1373
 
1374
+ /** @public */
1375
+ type StackDetailsClassKey = 'title';
1376
+
1376
1377
  /** @public */
1377
1378
  type HeaderClassKey = 'header' | 'leftItemsBox' | 'rightItemsBox' | 'title' | 'subtitle' | 'type' | 'breadcrumb' | 'breadcrumbType' | 'breadcrumbTitle';
1378
1379
  type Props$4 = {
@@ -1706,6 +1707,8 @@ interface SidebarGroupProps extends BottomNavigationActionProps {
1706
1707
  */
1707
1708
  declare const SidebarGroup: (props: SidebarGroupProps) => React__default.JSX.Element;
1708
1709
 
1710
+ /** @public */
1711
+ type SidebarSubmenuItemClassKey = 'item' | 'itemContainer' | 'selected' | 'label' | 'subtitle' | 'dropdownArrow' | 'dropdown' | 'dropdownItem' | 'textContent';
1709
1712
  /**
1710
1713
  * Clickable item displayed when submenu item is clicked.
1711
1714
  * title: Text content of item
@@ -1745,6 +1748,8 @@ type SidebarSubmenuItemProps = {
1745
1748
  */
1746
1749
  declare const SidebarSubmenuItem: (props: SidebarSubmenuItemProps) => React__default.JSX.Element;
1747
1750
 
1751
+ /** @public */
1752
+ type SidebarSubmenuClassKey = 'root' | 'drawer' | 'drawerOpen' | 'title';
1748
1753
  /**
1749
1754
  * Holds a title for text Header of a sidebar submenu and children
1750
1755
  * components to be rendered inside SidebarSubmenu
@@ -2124,7 +2129,6 @@ type BackstageComponentsNameToClassKey = {
2124
2129
  BackstageDismissableBanner: DismissableBannerClassKey;
2125
2130
  BackstageEmptyState: EmptyStateClassKey;
2126
2131
  BackstageEmptyStateImage: EmptyStateImageClassKey;
2127
- BackstageMissingAnnotationEmptyState: MissingAnnotationEmptyStateClassKey;
2128
2132
  BackstageErrorPanel: ErrorPanelClassKey;
2129
2133
  BackstageFeatureCalloutCircular: FeatureCalloutCircleClassKey;
2130
2134
  BackstageHeaderIconLinkRow: HeaderIconLinkRowClassKey;
@@ -2134,7 +2138,7 @@ type BackstageComponentsNameToClassKey = {
2134
2138
  BackstageMarkdownContent: MarkdownContentClassKey;
2135
2139
  BackstageLoginRequestListItem: LoginRequestListItemClassKey;
2136
2140
  BackstageLogViewer: LogViewerClassKey;
2137
- OAuthRequestDialog: OAuthRequestDialogClassKey;
2141
+ BackstageOAuthRequestDialog: OAuthRequestDialogClassKey;
2138
2142
  BackstageOverflowTooltip: OverflowTooltipClassKey;
2139
2143
  BackstageGauge: GaugeClassKey;
2140
2144
  BackstageGaugeCard: GaugeCardClassKey;
@@ -2163,10 +2167,12 @@ type BackstageComponentsNameToClassKey = {
2163
2167
  BackstageBottomLink: BottomLinkClassKey;
2164
2168
  BackstageBreadcrumbsClickableText: BreadcrumbsClickableTextClassKey;
2165
2169
  BackstageBreadcrumbsStyledBox: BreadcrumbsStyledBoxClassKey;
2170
+ BreadcrumbsCurrentPage: BreadcrumbsCurrentPageClassKey;
2166
2171
  BackstageContent: BackstageContentClassKey;
2167
2172
  BackstageContentHeader: ContentHeaderClassKey;
2168
2173
  BackstageErrorPage: ErrorPageClassKey;
2169
2174
  BackstageErrorPageMicDrop: MicDropClassKey;
2175
+ BackstageErrorPageStackDetails: StackDetailsClassKey;
2170
2176
  BackstageHeader: HeaderClassKey;
2171
2177
  BackstageHeaderLabel: HeaderLabelClassKey;
2172
2178
  BackstageHeaderTabs: HeaderTabsClassKey;
@@ -2180,12 +2186,15 @@ type BackstageComponentsNameToClassKey = {
2180
2186
  BackstageSidebarSpacer: SidebarSpacerClassKey;
2181
2187
  BackstageSidebarDivider: SidebarDividerClassKey;
2182
2188
  BackstageSidebarItem: SidebarItemClassKey;
2189
+ BackstageSidebarSubmenu: SidebarSubmenuClassKey;
2190
+ BackstageSidebarSubmenuItem: SidebarSubmenuItemClassKey;
2183
2191
  BackstageSidebarPage: SidebarPageClassKey;
2184
2192
  BackstageCustomProvider: CustomProviderClassKey;
2185
2193
  BackstageSignInPage: SignInPageClassKey;
2186
2194
  BackstageTabbedCard: TabbedCardClassKey;
2187
2195
  BackstageTabbedCardBoldHeader: BoldHeaderClassKey;
2188
2196
  BackstageCardTab: CardTabClassKey;
2197
+ BackstageLink: LinkClassKey;
2189
2198
  BackstageFavoriteToggleIcon: FavoriteToggleIconClassKey;
2190
2199
  };
2191
2200
  /** @public */
@@ -2197,4 +2206,4 @@ declare module '@backstage/theme' {
2197
2206
  }
2198
2207
  }
2199
2208
 
2200
- export { AlertDisplay, type AlertDisplayProps, AppIcon, type AppIconProps, AutoLogout, type AutoLogoutProps, Avatar, type AvatarClassKey, type AvatarProps, type BackstageContentClassKey, type BackstageOverrides, type BoldHeaderClassKey, BottomLink, type BottomLinkClassKey, type BottomLinkProps, Breadcrumbs, type BreadcrumbsClickableTextClassKey, type BreadcrumbsCurrentPageClassKey, type BreadcrumbsStyledBoxClassKey, BrokenImageIcon, Button, type ButtonProps, type CardActionsTopRightClassKey, CardTab, type CardTabClassKey, CatalogIcon, ChatIcon, type ClosedDropdownClassKey, CodeSnippet, type CodeSnippetProps, Content, ContentHeader, type ContentHeaderClassKey, CopyTextButton, type CopyTextButtonProps, CreateButton, type CreateButtonProps, type CustomProviderClassKey, DashboardIcon, DependencyGraph, type DependencyGraphDefaultLabelClassKey, type DependencyGraphDefaultNodeClassKey, type DependencyGraphEdgeClassKey, type DependencyGraphNodeClassKey, type DependencyGraphProps, DependencyGraphTypes, DismissableBanner, type DismissableBannerClassKey, type DismissbleBannerClassKey, DocsIcon, EmailIcon, EmptyState, type EmptyStateClassKey, type EmptyStateImageClassKey, ErrorBoundary, type ErrorBoundaryProps, ErrorPage, type ErrorPageClassKey, ErrorPanel, type ErrorPanelClassKey, type ErrorPanelProps, FavoriteToggle, FavoriteToggleIcon, type FavoriteToggleIconClassKey, type FeatureCalloutCircleClassKey, FeatureCalloutCircular, type FiltersContainerClassKey, Gauge, GaugeCard, type GaugeCardClassKey, type GaugeClassKey, type GaugeProps, type GaugePropsGetColor, type GaugePropsGetColorOptions, GitHubIcon, GroupIcon, Header, HeaderActionMenu, type HeaderActionMenuItem, type HeaderActionMenuProps, type HeaderClassKey, HeaderIconLinkRow, type HeaderIconLinkRowClassKey, HeaderLabel, type HeaderLabelClassKey, HeaderTabs, type HeaderTabsClassKey, HelpIcon, HorizontalScrollGrid, type HorizontalScrollGridClassKey, type IconComponentProps, IconLinkVertical, type IconLinkVerticalClassKey, type IconLinkVerticalProps, type IdentityProviders, InfoCard, type InfoCardClassKey, type InfoCardVariants, ItemCard, ItemCardGrid, type ItemCardGridClassKey, type ItemCardGridProps, ItemCardHeader, type ItemCardHeaderClassKey, type ItemCardHeaderProps, Lifecycle, type LifecycleClassKey, LinearGauge, Link, LinkButton, type LinkButtonProps, type LinkProps, LogViewer, type LogViewerClassKey, type LogViewerProps, type LoginRequestListItemClassKey, MarkdownContent, type MarkdownContentClassKey, type MetadataTableCellClassKey, type MetadataTableListClassKey, type MetadataTableListItemClassKey, type MetadataTableTitleCellClassKey, type MicDropClassKey, MissingAnnotationEmptyState, type MissingAnnotationEmptyStateClassKey, MobileSidebar, type MobileSidebarProps, OAuthRequestDialog, type OAuthRequestDialogClassKey, type OpenedDropdownClassKey, OverflowTooltip, type OverflowTooltipClassKey, Page, type PageClassKey, PageWithHeader, Progress, ProxiedSignInPage, type ProxiedSignInPageProps, ResponseErrorPanel, type ResponseErrorPanelClassKey, RoutedTabs, SIDEBAR_INTRO_LOCAL_STORAGE, SelectComponent as Select, type SelectClassKey, type SelectInputBaseClassKey, type SelectItem, type SelectedItems, Sidebar, type SidebarClassKey, LegacySidebarContext as SidebarContext, type SidebarContextType, SidebarDivider, type SidebarDividerClassKey, SidebarExpandButton, SidebarGroup, type SidebarGroupProps, SidebarItem, type SidebarItemClassKey, type SidebarOpenState, SidebarOpenStateProvider, type SidebarOptions, SidebarPage, type SidebarPageClassKey, type SidebarPageProps, type SidebarPinState, LegacySidebarPinStateContext as SidebarPinStateContext, type SidebarPinStateContextType, SidebarPinStateProvider, type SidebarProps, SidebarScrollWrapper, SidebarSearchField, SidebarSpace, type SidebarSpaceClassKey, SidebarSpacer, type SidebarSpacerClassKey, SidebarSubmenu, SidebarSubmenuItem, type SidebarSubmenuItemDropdownItem, type SidebarSubmenuItemProps, type SidebarSubmenuProps, SignInPage, type SignInPageClassKey, type SignInProviderConfig, SimpleStepper, type SimpleStepperFooterClassKey, SimpleStepperStep, type SimpleStepperStepClassKey, StarIcon, StatusAborted, type StatusClassKey, StatusError, StatusOK, StatusPending, StatusRunning, StatusWarning, StructuredMetadataTable, type StructuredMetadataTableListClassKey, type StructuredMetadataTableNestedListClassKey, type StructuredMetadataTableProps, type SubmenuOptions, SubvalueCell, type SubvalueCellClassKey, SupportButton, type SupportButtonClassKey, type SupportConfig, type SupportItem, type SupportItemLink, type Tab, TabbedCard, type TabbedCardClassKey, TabbedLayout, Table, type TableClassKey, type TableColumn, type TableFilter, type TableFiltersClassKey, type TableHeaderClassKey, type TableOptions, type TableProps, type TableState, type TableToolbarClassKey, TrendLine, UnstarredIcon, UserIcon, UserIdentity, WarningIcon, WarningPanel, type WarningPanelClassKey, sidebarConfig, useContent, useQueryParamState, useSidebarOpenState, useSidebarPinState, useSupportConfig };
2209
+ export { AlertDisplay, type AlertDisplayProps, AppIcon, type AppIconProps, AutoLogout, type AutoLogoutProps, Avatar, type AvatarClassKey, type AvatarProps, type BackstageContentClassKey, type BackstageOverrides, type BoldHeaderClassKey, BottomLink, type BottomLinkClassKey, type BottomLinkProps, Breadcrumbs, type BreadcrumbsClickableTextClassKey, type BreadcrumbsCurrentPageClassKey, type BreadcrumbsStyledBoxClassKey, BrokenImageIcon, Button, type ButtonProps, type CardActionsTopRightClassKey, CardTab, type CardTabClassKey, CatalogIcon, ChatIcon, type ClosedDropdownClassKey, CodeSnippet, type CodeSnippetProps, Content, ContentHeader, type ContentHeaderClassKey, CopyTextButton, type CopyTextButtonProps, CreateButton, type CreateButtonProps, type CustomProviderClassKey, DashboardIcon, DependencyGraph, type DependencyGraphDefaultLabelClassKey, type DependencyGraphDefaultNodeClassKey, type DependencyGraphEdgeClassKey, type DependencyGraphNodeClassKey, type DependencyGraphProps, DependencyGraphTypes, DismissableBanner, type DismissableBannerClassKey, type DismissbleBannerClassKey, DocsIcon, EmailIcon, EmptyState, type EmptyStateClassKey, type EmptyStateImageClassKey, ErrorBoundary, type ErrorBoundaryProps, ErrorPage, type ErrorPageClassKey, ErrorPanel, type ErrorPanelClassKey, type ErrorPanelProps, FavoriteToggle, FavoriteToggleIcon, type FavoriteToggleIconClassKey, type FeatureCalloutCircleClassKey, FeatureCalloutCircular, type FiltersContainerClassKey, Gauge, GaugeCard, type GaugeCardClassKey, type GaugeClassKey, type GaugeProps, type GaugePropsGetColor, type GaugePropsGetColorOptions, GitHubIcon, GroupIcon, Header, HeaderActionMenu, type HeaderActionMenuItem, type HeaderActionMenuProps, type HeaderClassKey, HeaderIconLinkRow, type HeaderIconLinkRowClassKey, HeaderLabel, type HeaderLabelClassKey, HeaderTabs, type HeaderTabsClassKey, HelpIcon, HorizontalScrollGrid, type HorizontalScrollGridClassKey, type IconComponentProps, IconLinkVertical, type IconLinkVerticalClassKey, type IconLinkVerticalProps, type IdentityProviders, InfoCard, type InfoCardClassKey, type InfoCardVariants, ItemCard, ItemCardGrid, type ItemCardGridClassKey, type ItemCardGridProps, ItemCardHeader, type ItemCardHeaderClassKey, type ItemCardHeaderProps, Lifecycle, type LifecycleClassKey, LinearGauge, Link, LinkButton, type LinkButtonProps, type LinkClassKey, type LinkProps, LogViewer, type LogViewerClassKey, type LogViewerProps, type LoginRequestListItemClassKey, MarkdownContent, type MarkdownContentClassKey, type MetadataTableCellClassKey, type MetadataTableListClassKey, type MetadataTableListItemClassKey, type MetadataTableTitleCellClassKey, type MicDropClassKey, MissingAnnotationEmptyState, MobileSidebar, type MobileSidebarProps, OAuthRequestDialog, type OAuthRequestDialogClassKey, type OpenedDropdownClassKey, OverflowTooltip, type OverflowTooltipClassKey, Page, type PageClassKey, PageWithHeader, Progress, ProxiedSignInPage, type ProxiedSignInPageProps, ResponseErrorPanel, type ResponseErrorPanelClassKey, RoutedTabs, SIDEBAR_INTRO_LOCAL_STORAGE, SelectComponent as Select, type SelectClassKey, type SelectInputBaseClassKey, type SelectItem, type SelectedItems, Sidebar, type SidebarClassKey, LegacySidebarContext as SidebarContext, type SidebarContextType, SidebarDivider, type SidebarDividerClassKey, SidebarExpandButton, SidebarGroup, type SidebarGroupProps, SidebarItem, type SidebarItemClassKey, type SidebarOpenState, SidebarOpenStateProvider, type SidebarOptions, SidebarPage, type SidebarPageClassKey, type SidebarPageProps, type SidebarPinState, LegacySidebarPinStateContext as SidebarPinStateContext, type SidebarPinStateContextType, SidebarPinStateProvider, type SidebarProps, SidebarScrollWrapper, SidebarSearchField, SidebarSpace, type SidebarSpaceClassKey, SidebarSpacer, type SidebarSpacerClassKey, SidebarSubmenu, type SidebarSubmenuClassKey, SidebarSubmenuItem, type SidebarSubmenuItemClassKey, type SidebarSubmenuItemDropdownItem, type SidebarSubmenuItemProps, type SidebarSubmenuProps, SignInPage, type SignInPageClassKey, type SignInProviderConfig, SimpleStepper, type SimpleStepperFooterClassKey, SimpleStepperStep, type SimpleStepperStepClassKey, type StackDetailsClassKey, StarIcon, StatusAborted, type StatusClassKey, StatusError, StatusOK, StatusPending, StatusRunning, StatusWarning, StructuredMetadataTable, type StructuredMetadataTableListClassKey, type StructuredMetadataTableNestedListClassKey, type StructuredMetadataTableProps, type SubmenuOptions, SubvalueCell, type SubvalueCellClassKey, SupportButton, type SupportButtonClassKey, type SupportConfig, type SupportItem, type SupportItemLink, type Tab, TabbedCard, type TabbedCardClassKey, TabbedLayout, Table, type TableClassKey, type TableColumn, type TableFilter, type TableFiltersClassKey, type TableHeaderClassKey, type TableOptions, type TableProps, type TableState, type TableToolbarClassKey, TrendLine, UnstarredIcon, UserIcon, UserIdentity, WarningIcon, WarningPanel, type WarningPanelClassKey, sidebarConfig, useContent, useQueryParamState, useSidebarOpenState, useSidebarPinState, useSupportConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"StackDetails.esm.js","sources":["../../../src/layout/ErrorPage/StackDetails.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 */\nimport Typography from '@material-ui/core/Typography';\nimport React from 'react';\nimport { useState } from 'react';\nimport { Link } from '../../components/Link';\nimport { CodeSnippet } from '../../components';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { coreComponentsTranslationRef } from '../../translation';\n\ninterface IStackDetailsProps {\n stack: string;\n}\n\nconst useStyles = makeStyles(\n theme => ({\n title: {\n paddingBottom: theme.spacing(5),\n [theme.breakpoints.down('xs')]: {\n paddingBottom: theme.spacing(4),\n fontSize: theme.typography.h3.fontSize,\n },\n },\n }),\n { name: 'BackstageErrorPageStackDetails' },\n);\n\n/**\n * Error page details with stack trace\n *\n * @public\n *\n */\nexport function StackDetails(props: IStackDetailsProps) {\n const { stack } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n\n const [detailsOpen, setDetailsOpen] = useState<boolean>(false);\n\n if (!detailsOpen) {\n return (\n <Typography variant=\"h6\" className={classes.title}>\n <Link to=\"#\" onClick={() => setDetailsOpen(true)}>\n {t('errorPage.showMoreDetails')}\n </Link>\n </Typography>\n );\n }\n\n return (\n <>\n <Typography variant=\"h6\" className={classes.title}>\n <Link to=\"#\" onClick={() => setDetailsOpen(false)}>\n {t('errorPage.showLessDetails')}\n </Link>\n </Typography>\n <CodeSnippet\n text={stack}\n language=\"text\"\n showCopyCodeButton\n showLineNumbers\n />\n </>\n );\n}\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,SAAY,GAAA,UAAA;AAAA,EAChB,CAAU,KAAA,MAAA;AAAA,IACR,KAAO,EAAA;AAAA,MACL,aAAA,EAAe,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MAC9B,CAAC,KAAM,CAAA,WAAA,CAAY,IAAK,CAAA,IAAI,CAAC,GAAG;AAAA,QAC9B,aAAA,EAAe,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,QAC9B,QAAA,EAAU,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA,QAAA;AAAA,OAChC;AAAA,KACF;AAAA,GACF,CAAA;AAAA,EACA,EAAE,MAAM,gCAAiC,EAAA;AAC3C,CAAA,CAAA;AAQO,SAAS,aAAa,KAA2B,EAAA;AACtD,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAClB,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,4BAA4B,CAAA,CAAA;AAE5D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAE7D,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAA,oDACG,UAAW,EAAA,EAAA,OAAA,EAAQ,MAAK,SAAW,EAAA,OAAA,CAAQ,yBACzCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAG,GAAI,EAAA,OAAA,EAAS,MAAM,cAAe,CAAA,IAAI,KAC5C,CAAE,CAAA,2BAA2B,CAChC,CACF,CAAA,CAAA;AAAA,GAEJ;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,+CACG,UAAW,EAAA,EAAA,OAAA,EAAQ,MAAK,SAAW,EAAA,OAAA,CAAQ,yBACzCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAG,GAAI,EAAA,OAAA,EAAS,MAAM,cAAe,CAAA,KAAK,KAC7C,CAAE,CAAA,2BAA2B,CAChC,CACF,CACA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,IAAM,EAAA,KAAA;AAAA,MACN,QAAS,EAAA,MAAA;AAAA,MACT,kBAAkB,EAAA,IAAA;AAAA,MAClB,eAAe,EAAA,IAAA;AAAA,KAAA;AAAA,GAEnB,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"StackDetails.esm.js","sources":["../../../src/layout/ErrorPage/StackDetails.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 */\nimport Typography from '@material-ui/core/Typography';\nimport React from 'react';\nimport { useState } from 'react';\nimport { Link } from '../../components/Link';\nimport { CodeSnippet } from '../../components';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { coreComponentsTranslationRef } from '../../translation';\n\ninterface IStackDetailsProps {\n stack: string;\n}\n\n/** @public */\nexport type StackDetailsClassKey = 'title';\n\nconst useStyles = makeStyles(\n theme => ({\n title: {\n paddingBottom: theme.spacing(5),\n [theme.breakpoints.down('xs')]: {\n paddingBottom: theme.spacing(4),\n fontSize: theme.typography.h3.fontSize,\n },\n },\n }),\n { name: 'BackstageErrorPageStackDetails' },\n);\n\n/**\n * Error page details with stack trace\n *\n * @public\n *\n */\nexport function StackDetails(props: IStackDetailsProps) {\n const { stack } = props;\n const classes = useStyles();\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n\n const [detailsOpen, setDetailsOpen] = useState<boolean>(false);\n\n if (!detailsOpen) {\n return (\n <Typography variant=\"h6\" className={classes.title}>\n <Link to=\"#\" onClick={() => setDetailsOpen(true)}>\n {t('errorPage.showMoreDetails')}\n </Link>\n </Typography>\n );\n }\n\n return (\n <>\n <Typography variant=\"h6\" className={classes.title}>\n <Link to=\"#\" onClick={() => setDetailsOpen(false)}>\n {t('errorPage.showLessDetails')}\n </Link>\n </Typography>\n <CodeSnippet\n text={stack}\n language=\"text\"\n showCopyCodeButton\n showLineNumbers\n />\n </>\n );\n}\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,SAAY,GAAA,UAAA;AAAA,EAChB,CAAU,KAAA,MAAA;AAAA,IACR,KAAO,EAAA;AAAA,MACL,aAAA,EAAe,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MAC9B,CAAC,KAAM,CAAA,WAAA,CAAY,IAAK,CAAA,IAAI,CAAC,GAAG;AAAA,QAC9B,aAAA,EAAe,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,QAC9B,QAAA,EAAU,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA,QAAA;AAAA,OAChC;AAAA,KACF;AAAA,GACF,CAAA;AAAA,EACA,EAAE,MAAM,gCAAiC,EAAA;AAC3C,CAAA,CAAA;AAQO,SAAS,aAAa,KAA2B,EAAA;AACtD,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAClB,EAAA,MAAM,UAAU,SAAU,EAAA,CAAA;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,4BAA4B,CAAA,CAAA;AAE5D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAE7D,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAA,oDACG,UAAW,EAAA,EAAA,OAAA,EAAQ,MAAK,SAAW,EAAA,OAAA,CAAQ,yBACzCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAG,GAAI,EAAA,OAAA,EAAS,MAAM,cAAe,CAAA,IAAI,KAC5C,CAAE,CAAA,2BAA2B,CAChC,CACF,CAAA,CAAA;AAAA,GAEJ;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,+CACG,UAAW,EAAA,EAAA,OAAA,EAAQ,MAAK,SAAW,EAAA,OAAA,CAAQ,yBACzCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAG,GAAI,EAAA,OAAA,EAAS,MAAM,cAAe,CAAA,KAAK,KAC7C,CAAE,CAAA,2BAA2B,CAChC,CACF,CACA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,IAAM,EAAA,KAAA;AAAA,MACN,QAAS,EAAA,MAAA;AAAA,MACT,kBAAkB,EAAA,IAAA;AAAA,MAClB,eAAe,EAAA,IAAA;AAAA,KAAA;AAAA,GAEnB,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarSubmenu.esm.js","sources":["../../../src/layout/Sidebar/SidebarSubmenu.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 Box from '@material-ui/core/Box';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport classnames from 'classnames';\nimport React, { ReactNode, useContext, useEffect, useState } from 'react';\n\nimport {\n SidebarConfigContext,\n SidebarItemWithSubmenuContext,\n SubmenuConfig,\n} from './config';\nimport { useSidebarOpenState } from './SidebarOpenStateContext';\n\nconst useStyles = makeStyles<\n Theme,\n { submenuConfig: SubmenuConfig; left: number }\n>(\n theme => ({\n root: {\n zIndex: 1000,\n position: 'relative',\n overflow: 'visible',\n width: theme.spacing(7) + 1,\n },\n drawer: props => ({\n display: 'flex',\n flexFlow: 'column nowrap',\n alignItems: 'flex-start',\n position: 'fixed',\n [theme.breakpoints.up('sm')]: {\n marginLeft: props.left,\n transition: theme.transitions.create('margin-left', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.shortest,\n }),\n },\n top: 0,\n bottom: 0,\n padding: 0,\n background: theme.palette.navigation.submenu?.background ?? '#404040',\n overflowX: 'hidden',\n msOverflowStyle: 'none',\n scrollbarWidth: 'none',\n cursor: 'default',\n width: props.submenuConfig.drawerWidthClosed,\n transitionDelay: `${props.submenuConfig.defaultOpenDelayMs}ms`,\n '& > *': {\n flexShrink: 0,\n },\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }),\n drawerOpen: props => ({\n width: props.submenuConfig.drawerWidthOpen,\n [theme.breakpoints.down('xs')]: {\n width: '100%',\n position: 'relative',\n paddingLeft: theme.spacing(3),\n left: 0,\n top: 0,\n },\n }),\n title: {\n fontSize: theme.typography.h5.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.navigation.color,\n padding: theme.spacing(2.5),\n [theme.breakpoints.down('xs')]: {\n display: 'none',\n },\n },\n }),\n { name: 'BackstageSidebarSubmenu' },\n);\n\n/**\n * Holds a title for text Header of a sidebar submenu and children\n * components to be rendered inside SidebarSubmenu\n *\n * @public\n */\nexport type SidebarSubmenuProps = {\n title?: string;\n children: ReactNode;\n};\n\n/**\n * Used inside SidebarItem to display an expandable Submenu\n *\n * @public\n */\nexport const SidebarSubmenu = (props: SidebarSubmenuProps) => {\n const { isOpen } = useSidebarOpenState();\n const { sidebarConfig, submenuConfig } = useContext(SidebarConfigContext);\n const left = isOpen\n ? sidebarConfig.drawerWidthOpen\n : sidebarConfig.drawerWidthClosed;\n const classes = useStyles({ left, submenuConfig });\n\n const { isHoveredOn } = useContext(SidebarItemWithSubmenuContext);\n const [isSubmenuOpen, setIsSubmenuOpen] = useState(false);\n\n useEffect(() => {\n setIsSubmenuOpen(isHoveredOn);\n }, [isHoveredOn]);\n\n return (\n <Box\n className={classnames(classes.drawer, {\n [classes.drawerOpen]: isSubmenuOpen,\n })}\n >\n <Typography variant=\"h5\" component=\"span\" className={classes.title}>\n {props.title}\n </Typography>\n {props.children}\n </Box>\n );\n};\n"],"names":["React","classnames"],"mappings":"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"}
1
+ {"version":3,"file":"SidebarSubmenu.esm.js","sources":["../../../src/layout/Sidebar/SidebarSubmenu.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 Box from '@material-ui/core/Box';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport classnames from 'classnames';\nimport React, { ReactNode, useContext, useEffect, useState } from 'react';\n\nimport {\n SidebarConfigContext,\n SidebarItemWithSubmenuContext,\n SubmenuConfig,\n} from './config';\nimport { useSidebarOpenState } from './SidebarOpenStateContext';\n\n/** @public */\nexport type SidebarSubmenuClassKey = 'root' | 'drawer' | 'drawerOpen' | 'title';\n\nconst useStyles = makeStyles<\n Theme,\n { submenuConfig: SubmenuConfig; left: number }\n>(\n theme => ({\n root: {\n zIndex: 1000,\n position: 'relative',\n overflow: 'visible',\n width: theme.spacing(7) + 1,\n },\n drawer: props => ({\n display: 'flex',\n flexFlow: 'column nowrap',\n alignItems: 'flex-start',\n position: 'fixed',\n [theme.breakpoints.up('sm')]: {\n marginLeft: props.left,\n transition: theme.transitions.create('margin-left', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.shortest,\n }),\n },\n top: 0,\n bottom: 0,\n padding: 0,\n background: theme.palette.navigation.submenu?.background ?? '#404040',\n overflowX: 'hidden',\n msOverflowStyle: 'none',\n scrollbarWidth: 'none',\n cursor: 'default',\n width: props.submenuConfig.drawerWidthClosed,\n transitionDelay: `${props.submenuConfig.defaultOpenDelayMs}ms`,\n '& > *': {\n flexShrink: 0,\n },\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }),\n drawerOpen: props => ({\n width: props.submenuConfig.drawerWidthOpen,\n [theme.breakpoints.down('xs')]: {\n width: '100%',\n position: 'relative',\n paddingLeft: theme.spacing(3),\n left: 0,\n top: 0,\n },\n }),\n title: {\n fontSize: theme.typography.h5.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.navigation.color,\n padding: theme.spacing(2.5),\n [theme.breakpoints.down('xs')]: {\n display: 'none',\n },\n },\n }),\n { name: 'BackstageSidebarSubmenu' },\n);\n\n/**\n * Holds a title for text Header of a sidebar submenu and children\n * components to be rendered inside SidebarSubmenu\n *\n * @public\n */\nexport type SidebarSubmenuProps = {\n title?: string;\n children: ReactNode;\n};\n\n/**\n * Used inside SidebarItem to display an expandable Submenu\n *\n * @public\n */\nexport const SidebarSubmenu = (props: SidebarSubmenuProps) => {\n const { isOpen } = useSidebarOpenState();\n const { sidebarConfig, submenuConfig } = useContext(SidebarConfigContext);\n const left = isOpen\n ? sidebarConfig.drawerWidthOpen\n : sidebarConfig.drawerWidthClosed;\n const classes = useStyles({ left, submenuConfig });\n\n const { isHoveredOn } = useContext(SidebarItemWithSubmenuContext);\n const [isSubmenuOpen, setIsSubmenuOpen] = useState(false);\n\n useEffect(() => {\n setIsSubmenuOpen(isHoveredOn);\n }, [isHoveredOn]);\n\n return (\n <Box\n className={classnames(classes.drawer, {\n [classes.drawerOpen]: isSubmenuOpen,\n })}\n >\n <Typography variant=\"h5\" component=\"span\" className={classes.title}>\n {props.title}\n </Typography>\n {props.children}\n </Box>\n );\n};\n"],"names":["React","classnames"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarSubmenuItem.esm.js","sources":["../../../src/layout/Sidebar/SidebarSubmenuItem.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 React, { useContext, useState } from 'react';\nimport { resolvePath, useLocation, useResolvedPath } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport { Link } from '../../components/Link';\nimport { IconComponent } from '@backstage/core-plugin-api';\nimport classnames from 'classnames';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport ArrowDropUpIcon from '@material-ui/icons/ArrowDropUp';\nimport { SidebarItemWithSubmenuContext } from './config';\nimport { isLocationMatch } from './utils';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\n\nconst useStyles = makeStyles(\n theme => ({\n item: {\n height: 48,\n width: '100%',\n '&:hover': {\n background:\n theme.palette.navigation.navItem?.hoverBackground || '#6f6f6f',\n color: theme.palette.navigation.selectedColor,\n },\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.navigation.color,\n padding: theme.spacing(2.5),\n cursor: 'pointer',\n position: 'relative',\n background: 'none',\n border: 'none',\n },\n itemContainer: {\n width: '100%',\n },\n selected: {\n background: '#6f6f6f',\n color: theme.palette.common.white,\n },\n label: {\n margin: theme.spacing(1.75),\n marginLeft: theme.spacing(1),\n fontSize: theme.typography.body2.fontSize,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis',\n lineHeight: 1,\n },\n subtitle: {\n fontSize: 10,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis',\n },\n dropdownArrow: {\n position: 'absolute',\n right: 21,\n },\n dropdown: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'end',\n },\n dropdownItem: {\n width: '100%',\n padding: '10px 0 10px 0',\n '&:hover': {\n background:\n theme.palette.navigation.navItem?.hoverBackground || '#6f6f6f',\n color: theme.palette.navigation.selectedColor,\n },\n },\n textContent: {\n color: theme.palette.navigation.color,\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(1),\n fontSize: theme.typography.body2.fontSize,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis',\n },\n }),\n { name: 'BackstageSidebarSubmenuItem' },\n);\n\n/**\n * Clickable item displayed when submenu item is clicked.\n * title: Text content of item\n * to: Path to navigate to when item is clicked\n *\n * @public\n */\nexport type SidebarSubmenuItemDropdownItem = {\n title: string;\n to: string;\n};\n/**\n * Holds submenu item content.\n *\n * @remarks\n * title: Text content of submenu item\n * subtitle: A subtitle displayed under the main title\n * to: Path to navigate to when item is clicked\n * icon: Icon displayed on the left of text content\n * dropdownItems: Optional array of dropdown items displayed when submenu item is clicked.\n *\n * @public\n */\nexport type SidebarSubmenuItemProps = {\n title: string;\n subtitle?: string;\n to?: string;\n icon?: IconComponent;\n dropdownItems?: SidebarSubmenuItemDropdownItem[];\n exact?: boolean;\n initialShowDropdown?: boolean;\n};\n\n/**\n * Item used inside a submenu within the sidebar.\n *\n * @public\n */\nexport const SidebarSubmenuItem = (props: SidebarSubmenuItemProps) => {\n const { title, subtitle, to, icon: Icon, dropdownItems, exact } = props;\n const classes = useStyles();\n const { setIsHoveredOn } = useContext(SidebarItemWithSubmenuContext);\n const closeSubmenu = () => {\n setIsHoveredOn(false);\n };\n const toLocation = useResolvedPath(to ?? '');\n const currentLocation = useLocation();\n let isActive = isLocationMatch(currentLocation, toLocation, exact);\n\n const [showDropDown, setShowDropDown] = useState(\n props.initialShowDropdown ?? false,\n );\n const handleClickDropdown = () => {\n setShowDropDown(!showDropDown);\n };\n if (dropdownItems !== undefined) {\n dropdownItems.some(item => {\n const resolvedPath = resolvePath(item.to);\n isActive = isLocationMatch(currentLocation, resolvedPath, exact);\n return isActive;\n });\n return (\n <Box className={classes.itemContainer}>\n <Tooltip title={title} enterDelay={500} enterNextDelay={500}>\n <Button\n role=\"button\"\n onClick={handleClickDropdown}\n onTouchStart={e => e.stopPropagation()}\n className={classnames(\n classes.item,\n isActive ? classes.selected : undefined,\n )}\n >\n {Icon && <Icon fontSize=\"small\" />}\n <Typography\n variant=\"subtitle1\"\n component=\"span\"\n className={classes.label}\n >\n {title}\n <br />\n {subtitle && (\n <Typography\n variant=\"caption\"\n component=\"span\"\n className={classes.subtitle}\n >\n {subtitle}\n </Typography>\n )}\n </Typography>\n {showDropDown ? (\n <ArrowDropUpIcon className={classes.dropdownArrow} />\n ) : (\n <ArrowDropDownIcon className={classes.dropdownArrow} />\n )}\n </Button>\n </Tooltip>\n {dropdownItems && showDropDown && (\n <Box className={classes.dropdown}>\n {dropdownItems.map((object, key) => (\n <Tooltip\n key={key}\n title={object.title}\n enterDelay={500}\n enterNextDelay={500}\n >\n <Link\n to={object.to}\n underline=\"none\"\n className={classes.dropdownItem}\n onClick={closeSubmenu}\n onTouchStart={e => e.stopPropagation()}\n >\n <Typography component=\"span\" className={classes.textContent}>\n {object.title}\n </Typography>\n </Link>\n </Tooltip>\n ))}\n </Box>\n )}\n </Box>\n );\n }\n\n return (\n <Box className={classes.itemContainer}>\n <Tooltip title={title} enterDelay={500} enterNextDelay={500}>\n <Link\n to={to!}\n underline=\"none\"\n className={classnames(\n classes.item,\n isActive ? classes.selected : undefined,\n )}\n onClick={closeSubmenu}\n onTouchStart={e => e.stopPropagation()}\n >\n {Icon && <Icon fontSize=\"small\" />}\n <Typography\n variant=\"subtitle1\"\n component=\"span\"\n className={classes.label}\n >\n {title}\n <br />\n {subtitle && (\n <Typography\n variant=\"caption\"\n component=\"span\"\n className={classes.subtitle}\n >\n {subtitle}\n </Typography>\n )}\n </Typography>\n </Link>\n </Tooltip>\n </Box>\n );\n};\n"],"names":["React","classnames"],"mappings":"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"}
1
+ {"version":3,"file":"SidebarSubmenuItem.esm.js","sources":["../../../src/layout/Sidebar/SidebarSubmenuItem.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 React, { useContext, useState } from 'react';\nimport { resolvePath, useLocation, useResolvedPath } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport { Link } from '../../components/Link';\nimport { IconComponent } from '@backstage/core-plugin-api';\nimport classnames from 'classnames';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport ArrowDropUpIcon from '@material-ui/icons/ArrowDropUp';\nimport { SidebarItemWithSubmenuContext } from './config';\nimport { isLocationMatch } from './utils';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\n\n/** @public */\nexport type SidebarSubmenuItemClassKey =\n | 'item'\n | 'itemContainer'\n | 'selected'\n | 'label'\n | 'subtitle'\n | 'dropdownArrow'\n | 'dropdown'\n | 'dropdownItem'\n | 'textContent';\n\nconst useStyles = makeStyles(\n theme => ({\n item: {\n height: 48,\n width: '100%',\n '&:hover': {\n background:\n theme.palette.navigation.navItem?.hoverBackground || '#6f6f6f',\n color: theme.palette.navigation.selectedColor,\n },\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.navigation.color,\n padding: theme.spacing(2.5),\n cursor: 'pointer',\n position: 'relative',\n background: 'none',\n border: 'none',\n },\n itemContainer: {\n width: '100%',\n },\n selected: {\n background: '#6f6f6f',\n color: theme.palette.common.white,\n },\n label: {\n margin: theme.spacing(1.75),\n marginLeft: theme.spacing(1),\n fontSize: theme.typography.body2.fontSize,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis',\n lineHeight: 1,\n },\n subtitle: {\n fontSize: 10,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis',\n },\n dropdownArrow: {\n position: 'absolute',\n right: 21,\n },\n dropdown: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'end',\n },\n dropdownItem: {\n width: '100%',\n padding: '10px 0 10px 0',\n '&:hover': {\n background:\n theme.palette.navigation.navItem?.hoverBackground || '#6f6f6f',\n color: theme.palette.navigation.selectedColor,\n },\n },\n textContent: {\n color: theme.palette.navigation.color,\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(1),\n fontSize: theme.typography.body2.fontSize,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n 'text-overflow': 'ellipsis',\n },\n }),\n { name: 'BackstageSidebarSubmenuItem' },\n);\n\n/**\n * Clickable item displayed when submenu item is clicked.\n * title: Text content of item\n * to: Path to navigate to when item is clicked\n *\n * @public\n */\nexport type SidebarSubmenuItemDropdownItem = {\n title: string;\n to: string;\n};\n/**\n * Holds submenu item content.\n *\n * @remarks\n * title: Text content of submenu item\n * subtitle: A subtitle displayed under the main title\n * to: Path to navigate to when item is clicked\n * icon: Icon displayed on the left of text content\n * dropdownItems: Optional array of dropdown items displayed when submenu item is clicked.\n *\n * @public\n */\nexport type SidebarSubmenuItemProps = {\n title: string;\n subtitle?: string;\n to?: string;\n icon?: IconComponent;\n dropdownItems?: SidebarSubmenuItemDropdownItem[];\n exact?: boolean;\n initialShowDropdown?: boolean;\n};\n\n/**\n * Item used inside a submenu within the sidebar.\n *\n * @public\n */\nexport const SidebarSubmenuItem = (props: SidebarSubmenuItemProps) => {\n const { title, subtitle, to, icon: Icon, dropdownItems, exact } = props;\n const classes = useStyles();\n const { setIsHoveredOn } = useContext(SidebarItemWithSubmenuContext);\n const closeSubmenu = () => {\n setIsHoveredOn(false);\n };\n const toLocation = useResolvedPath(to ?? '');\n const currentLocation = useLocation();\n let isActive = isLocationMatch(currentLocation, toLocation, exact);\n\n const [showDropDown, setShowDropDown] = useState(\n props.initialShowDropdown ?? false,\n );\n const handleClickDropdown = () => {\n setShowDropDown(!showDropDown);\n };\n if (dropdownItems !== undefined) {\n dropdownItems.some(item => {\n const resolvedPath = resolvePath(item.to);\n isActive = isLocationMatch(currentLocation, resolvedPath, exact);\n return isActive;\n });\n return (\n <Box className={classes.itemContainer}>\n <Tooltip title={title} enterDelay={500} enterNextDelay={500}>\n <Button\n role=\"button\"\n onClick={handleClickDropdown}\n onTouchStart={e => e.stopPropagation()}\n className={classnames(\n classes.item,\n isActive ? classes.selected : undefined,\n )}\n >\n {Icon && <Icon fontSize=\"small\" />}\n <Typography\n variant=\"subtitle1\"\n component=\"span\"\n className={classes.label}\n >\n {title}\n <br />\n {subtitle && (\n <Typography\n variant=\"caption\"\n component=\"span\"\n className={classes.subtitle}\n >\n {subtitle}\n </Typography>\n )}\n </Typography>\n {showDropDown ? (\n <ArrowDropUpIcon className={classes.dropdownArrow} />\n ) : (\n <ArrowDropDownIcon className={classes.dropdownArrow} />\n )}\n </Button>\n </Tooltip>\n {dropdownItems && showDropDown && (\n <Box className={classes.dropdown}>\n {dropdownItems.map((object, key) => (\n <Tooltip\n key={key}\n title={object.title}\n enterDelay={500}\n enterNextDelay={500}\n >\n <Link\n to={object.to}\n underline=\"none\"\n className={classes.dropdownItem}\n onClick={closeSubmenu}\n onTouchStart={e => e.stopPropagation()}\n >\n <Typography component=\"span\" className={classes.textContent}>\n {object.title}\n </Typography>\n </Link>\n </Tooltip>\n ))}\n </Box>\n )}\n </Box>\n );\n }\n\n return (\n <Box className={classes.itemContainer}>\n <Tooltip title={title} enterDelay={500} enterNextDelay={500}>\n <Link\n to={to!}\n underline=\"none\"\n className={classnames(\n classes.item,\n isActive ? classes.selected : undefined,\n )}\n onClick={closeSubmenu}\n onTouchStart={e => e.stopPropagation()}\n >\n {Icon && <Icon fontSize=\"small\" />}\n <Typography\n variant=\"subtitle1\"\n component=\"span\"\n className={classes.label}\n >\n {title}\n <br />\n {subtitle && (\n <Typography\n variant=\"caption\"\n component=\"span\"\n className={classes.subtitle}\n >\n {subtitle}\n </Typography>\n )}\n </Typography>\n </Link>\n </Tooltip>\n </Box>\n );\n};\n"],"names":["React","classnames"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@backstage/core-components",
3
+ "version": "0.15.1-next.0",
3
4
  "description": "Core components used by Backstage plugins and apps",
4
- "version": "0.14.11-next.1",
5
- "publishConfig": {
6
- "access": "public"
7
- },
8
5
  "backstage": {
9
6
  "role": "web-library"
10
7
  },
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
11
  "keywords": [
12
12
  "backstage"
13
13
  ],
@@ -56,10 +56,10 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@backstage/config": "^1.2.0",
59
- "@backstage/core-plugin-api": "^1.9.4-next.0",
59
+ "@backstage/core-plugin-api": "^1.10.0-next.0",
60
60
  "@backstage/errors": "^1.2.4",
61
- "@backstage/theme": "^0.5.7-next.0",
62
- "@backstage/version-bridge": "^1.0.9-next.0",
61
+ "@backstage/theme": "^0.5.7",
62
+ "@backstage/version-bridge": "^1.0.9",
63
63
  "@date-io/core": "^1.3.13",
64
64
  "@material-table/core": "^3.1.0",
65
65
  "@material-ui/core": "^4.12.2",
@@ -94,10 +94,10 @@
94
94
  "zod": "^3.22.4"
95
95
  },
96
96
  "devDependencies": {
97
- "@backstage/app-defaults": "^1.5.11-next.1",
98
- "@backstage/cli": "^0.27.1-next.2",
99
- "@backstage/core-app-api": "^1.14.3-next.0",
100
- "@backstage/test-utils": "^1.6.0-next.1",
97
+ "@backstage/app-defaults": "^1.5.12-next.0",
98
+ "@backstage/cli": "^0.28.0-next.0",
99
+ "@backstage/core-app-api": "^1.15.1-next.0",
100
+ "@backstage/test-utils": "^1.6.1-next.0",
101
101
  "@testing-library/dom": "^10.0.0",
102
102
  "@testing-library/jest-dom": "^6.0.0",
103
103
  "@testing-library/react": "^16.0.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/core-components__testutils",
3
- "version": "0.14.11-next.1",
3
+ "version": "0.15.1-next.0",
4
4
  "main": "../dist/testUtils.esm.js",
5
5
  "module": "../dist/testUtils.esm.js",
6
6
  "types": "../dist/testUtils.d.ts"