@backstage/core-components 0.15.1 → 0.16.0-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 +33 -0
- package/alpha/package.json +1 -1
- package/dist/components/SupportButton/SupportButton.esm.js +5 -1
- package/dist/components/SupportButton/SupportButton.esm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/testUtils.d.ts +48 -0
- package/dist/testUtils.esm.js +55 -12
- package/dist/testUtils.esm.js.map +1 -1
- package/package.json +11 -11
- package/testUtils/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @backstage/core-components
|
|
2
2
|
|
|
3
|
+
## 0.16.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- dc409c5: The SupportButton component will now be hidden if no support config is specified in app-config
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- af9097e: Adds the ability to mock a media query per break point and to change the active break point during a test. Usage example:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
const { set } = mockBreakpoint({
|
|
15
|
+
initialBreakpoint: 'md',
|
|
16
|
+
queryBreakpointMap: {
|
|
17
|
+
'(min-width:1500px)': 'xl',
|
|
18
|
+
'(min-width:1000px)': 'lg',
|
|
19
|
+
'(min-width:700px)': 'md',
|
|
20
|
+
'(min-width:400px)': 'sm',
|
|
21
|
+
'(min-width:0px)': 'xs',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
// assertions for when the active break point is "md"
|
|
25
|
+
set('lg');
|
|
26
|
+
// assertions for when the active break point is "lg"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- Updated dependencies
|
|
30
|
+
- @backstage/config@1.2.0
|
|
31
|
+
- @backstage/core-plugin-api@1.10.0
|
|
32
|
+
- @backstage/errors@1.2.4
|
|
33
|
+
- @backstage/theme@0.6.0
|
|
34
|
+
- @backstage/version-bridge@1.0.10
|
|
35
|
+
|
|
3
36
|
## 0.15.1
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
package/alpha/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useApp } from '@backstage/core-plugin-api';
|
|
1
|
+
import { useApi, configApiRef, useApp } from '@backstage/core-plugin-api';
|
|
2
2
|
import Box from '@material-ui/core/Box';
|
|
3
3
|
import Button from '@material-ui/core/Button';
|
|
4
4
|
import DialogActions from '@material-ui/core/DialogActions';
|
|
@@ -63,6 +63,7 @@ function SupportButton(props) {
|
|
|
63
63
|
const [popoverOpen, setPopoverOpen] = useState(false);
|
|
64
64
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
65
65
|
const classes = useStyles();
|
|
66
|
+
const supportConfig = useApi(configApiRef).getOptionalConfig("app.support");
|
|
66
67
|
const isSmallScreen = useMediaQuery(
|
|
67
68
|
(theme) => theme.breakpoints.down("sm")
|
|
68
69
|
);
|
|
@@ -73,6 +74,9 @@ function SupportButton(props) {
|
|
|
73
74
|
const popoverCloseHandler = () => {
|
|
74
75
|
setPopoverOpen(false);
|
|
75
76
|
};
|
|
77
|
+
if (!supportConfig) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
76
80
|
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(Box, { display: "flex", ml: 1 }, isSmallScreen ? /* @__PURE__ */ React__default.createElement(
|
|
77
81
|
IconButton,
|
|
78
82
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupportButton.esm.js","sources":["../../../src/components/SupportButton/SupportButton.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 { useApp } from '@backstage/core-plugin-api';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { Theme, makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport React, { MouseEventHandler, useState } from 'react';\nimport { SupportItem, SupportItemLink, useSupportConfig } from '../../hooks';\nimport { HelpIcon } from '../../icons';\nimport { Link } from '../Link';\nimport { coreComponentsTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\ntype SupportButtonProps = {\n title?: string;\n items?: SupportItem[];\n children?: React.ReactNode;\n};\n\nexport type SupportButtonClassKey = 'popoverList';\n\nconst useStyles = makeStyles(\n {\n popoverList: {\n minWidth: 260,\n maxWidth: 400,\n },\n menuItem: {\n whiteSpace: 'normal',\n },\n },\n { name: 'BackstageSupportButton' },\n);\n\nconst SupportIcon = ({ icon }: { icon: string | undefined }) => {\n const app = useApp();\n const Icon = icon ? app.getSystemIcon(icon) ?? HelpIcon : HelpIcon;\n return <Icon />;\n};\n\nconst SupportLink = ({ link }: { link: SupportItemLink }) => (\n <Link to={link.url}>{link.title ?? link.url}</Link>\n);\n\nconst SupportListItem = ({ item }: { item: SupportItem }) => {\n return (\n <MenuItem button={false}>\n <ListItemIcon>\n <SupportIcon icon={item.icon} />\n </ListItemIcon>\n <ListItemText\n primary={item.title}\n secondary={item.links?.reduce<React.ReactNode[]>(\n (prev, link, idx) => [\n ...prev,\n idx > 0 && <br key={idx} />,\n <SupportLink link={link} key={link.url} />,\n ],\n [],\n )}\n />\n </MenuItem>\n );\n};\n\nexport function SupportButton(props: SupportButtonProps) {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n const { title, items, children } = props;\n const { items: configItems } = useSupportConfig();\n\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [anchorEl, setAnchorEl] = useState<Element | null>(null);\n const classes = useStyles();\n const isSmallScreen = useMediaQuery<Theme>(theme =>\n theme.breakpoints.down('sm'),\n );\n\n const onClickHandler: MouseEventHandler = event => {\n setAnchorEl(event.currentTarget);\n setPopoverOpen(true);\n };\n\n const popoverCloseHandler = () => {\n setPopoverOpen(false);\n };\n\n return (\n <>\n <Box display=\"flex\" ml={1}>\n {isSmallScreen ? (\n <IconButton\n color=\"primary\"\n size=\"small\"\n onClick={onClickHandler}\n data-testid=\"support-button\"\n aria-label=\"Support\"\n >\n <HelpIcon />\n </IconButton>\n ) : (\n <Button\n data-testid=\"support-button\"\n aria-label=\"Support\"\n color=\"primary\"\n onClick={onClickHandler}\n startIcon={<HelpIcon />}\n >\n {t('supportButton.title')}\n </Button>\n )}\n </Box>\n <Popover\n data-testid=\"support-button-popover\"\n open={popoverOpen}\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n onClose={popoverCloseHandler}\n >\n <MenuList\n className={classes.popoverList}\n autoFocusItem={Boolean(anchorEl)}\n >\n {title && (\n <MenuItem\n button={false}\n alignItems=\"flex-start\"\n className={classes.menuItem}\n >\n <Typography variant=\"subtitle1\">{title}</Typography>\n </MenuItem>\n )}\n {React.Children.map(children, (child, i) => (\n <MenuItem\n button={false}\n alignItems=\"flex-start\"\n key={`child-${i}`}\n className={classes.menuItem}\n >\n {child}\n </MenuItem>\n ))}\n {(items ?? configItems).map((item, i) => (\n <SupportListItem item={item} key={`item-${i}`} />\n ))}\n </MenuList>\n <DialogActions>\n <Button\n color=\"primary\"\n onClick={popoverCloseHandler}\n aria-label=\"Close\"\n >\n {t('supportButton.close')}\n </Button>\n </DialogActions>\n </Popover>\n </>\n );\n}\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SupportButton.esm.js","sources":["../../../src/components/SupportButton/SupportButton.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 { configApiRef, useApi, useApp } from '@backstage/core-plugin-api';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { Theme, makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport React, { MouseEventHandler, useState } from 'react';\nimport { SupportItem, SupportItemLink, useSupportConfig } from '../../hooks';\nimport { HelpIcon } from '../../icons';\nimport { Link } from '../Link';\nimport { coreComponentsTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\ntype SupportButtonProps = {\n title?: string;\n items?: SupportItem[];\n children?: React.ReactNode;\n};\n\nexport type SupportButtonClassKey = 'popoverList';\n\nconst useStyles = makeStyles(\n {\n popoverList: {\n minWidth: 260,\n maxWidth: 400,\n },\n menuItem: {\n whiteSpace: 'normal',\n },\n },\n { name: 'BackstageSupportButton' },\n);\n\nconst SupportIcon = ({ icon }: { icon: string | undefined }) => {\n const app = useApp();\n const Icon = icon ? app.getSystemIcon(icon) ?? HelpIcon : HelpIcon;\n return <Icon />;\n};\n\nconst SupportLink = ({ link }: { link: SupportItemLink }) => (\n <Link to={link.url}>{link.title ?? link.url}</Link>\n);\n\nconst SupportListItem = ({ item }: { item: SupportItem }) => {\n return (\n <MenuItem button={false}>\n <ListItemIcon>\n <SupportIcon icon={item.icon} />\n </ListItemIcon>\n <ListItemText\n primary={item.title}\n secondary={item.links?.reduce<React.ReactNode[]>(\n (prev, link, idx) => [\n ...prev,\n idx > 0 && <br key={idx} />,\n <SupportLink link={link} key={link.url} />,\n ],\n [],\n )}\n />\n </MenuItem>\n );\n};\n\nexport function SupportButton(props: SupportButtonProps) {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n const { title, items, children } = props;\n const { items: configItems } = useSupportConfig();\n\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [anchorEl, setAnchorEl] = useState<Element | null>(null);\n const classes = useStyles();\n const supportConfig = useApi(configApiRef).getOptionalConfig('app.support');\n const isSmallScreen = useMediaQuery<Theme>(theme =>\n theme.breakpoints.down('sm'),\n );\n\n const onClickHandler: MouseEventHandler = event => {\n setAnchorEl(event.currentTarget);\n setPopoverOpen(true);\n };\n\n const popoverCloseHandler = () => {\n setPopoverOpen(false);\n };\n\n if (!supportConfig) {\n return null;\n }\n\n return (\n <>\n <Box display=\"flex\" ml={1}>\n {isSmallScreen ? (\n <IconButton\n color=\"primary\"\n size=\"small\"\n onClick={onClickHandler}\n data-testid=\"support-button\"\n aria-label=\"Support\"\n >\n <HelpIcon />\n </IconButton>\n ) : (\n <Button\n data-testid=\"support-button\"\n aria-label=\"Support\"\n color=\"primary\"\n onClick={onClickHandler}\n startIcon={<HelpIcon />}\n >\n {t('supportButton.title')}\n </Button>\n )}\n </Box>\n <Popover\n data-testid=\"support-button-popover\"\n open={popoverOpen}\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n onClose={popoverCloseHandler}\n >\n <MenuList\n className={classes.popoverList}\n autoFocusItem={Boolean(anchorEl)}\n >\n {title && (\n <MenuItem\n button={false}\n alignItems=\"flex-start\"\n className={classes.menuItem}\n >\n <Typography variant=\"subtitle1\">{title}</Typography>\n </MenuItem>\n )}\n {React.Children.map(children, (child, i) => (\n <MenuItem\n button={false}\n alignItems=\"flex-start\"\n key={`child-${i}`}\n className={classes.menuItem}\n >\n {child}\n </MenuItem>\n ))}\n {(items ?? configItems).map((item, i) => (\n <SupportListItem item={item} key={`item-${i}`} />\n ))}\n </MenuList>\n <DialogActions>\n <Button\n color=\"primary\"\n onClick={popoverCloseHandler}\n aria-label=\"Close\"\n >\n {t('supportButton.close')}\n </Button>\n </DialogActions>\n </Popover>\n </>\n );\n}\n"],"names":["React"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1144,7 +1144,7 @@ type SupportButtonProps = {
|
|
|
1144
1144
|
children?: React__default.ReactNode;
|
|
1145
1145
|
};
|
|
1146
1146
|
type SupportButtonClassKey = 'popoverList';
|
|
1147
|
-
declare function SupportButton(props: SupportButtonProps): React__default.JSX.Element;
|
|
1147
|
+
declare function SupportButton(props: SupportButtonProps): React__default.JSX.Element | null;
|
|
1148
1148
|
|
|
1149
1149
|
type SubRoute$1 = {
|
|
1150
1150
|
path: string;
|
package/dist/testUtils.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Breakpoint } from '@material-ui/core/styles/createBreakpoints';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* This is a mocking method suggested in the Jest docs, as it is not implemented in JSDOM yet.
|
|
3
5
|
* It can be used to mock values for the Material UI `useMediaQuery` hook if it is used in a tested component.
|
|
@@ -9,9 +11,55 @@
|
|
|
9
11
|
* https://mui.com/material-ui/react-use-media-query/#testing
|
|
10
12
|
*
|
|
11
13
|
* @public
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* Match with any media query:
|
|
17
|
+
* ```ts
|
|
18
|
+
* mockBreakpoint({ matches: true });
|
|
19
|
+
* ```
|
|
12
20
|
*/
|
|
13
21
|
declare function mockBreakpoint(options: {
|
|
14
22
|
matches: boolean;
|
|
15
23
|
}): void;
|
|
24
|
+
/**
|
|
25
|
+
* This is a mocking method suggested in the Jest docs, as it is not implemented in JSDOM yet.
|
|
26
|
+
* It can be used to mock values for the Material UI `useMediaQuery` hook if it is used in a tested component.
|
|
27
|
+
*
|
|
28
|
+
* For issues checkout the documentation:
|
|
29
|
+
* https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom
|
|
30
|
+
*
|
|
31
|
+
* If there are any updates from Material UI React on testing `useMediaQuery` this mock should be replaced
|
|
32
|
+
* https://mui.com/material-ui/react-use-media-query/#testing
|
|
33
|
+
*
|
|
34
|
+
* @public
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* Set the initial breakpoint:
|
|
38
|
+
* ```ts
|
|
39
|
+
* mockBreakpoint({ initialBreakpoint: 'md' });
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* Map media queries to breakpoints:
|
|
44
|
+
* ```ts
|
|
45
|
+
* mockBreakpoint({ queryBreakpointMap: { '(min-width:1500px)': 'xl', '(min-width:1000px)': 'lg', '(min-width:700px)': 'md', '(min-width:400px)': 'sm', '(min-width:0px)': 'xs', } });
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* Change the breakpoint during the test:
|
|
50
|
+
* ```ts
|
|
51
|
+
* const { set } = mockBreakpoint({ initialBreakpoint: 'md' });
|
|
52
|
+
* set('lg');
|
|
53
|
+
* ```
|
|
54
|
+
**/
|
|
55
|
+
declare function mockBreakpoint(options: {
|
|
56
|
+
/** Defaults to 'lg' */
|
|
57
|
+
initialBreakpoint?: Breakpoint;
|
|
58
|
+
/** Defaults to \{ '(min-width:1920px)': 'xl', '(min-width:1280px)': 'lg', '(min-width:960px)': 'md', '(min-width:600px)': 'sm', '(min-width:0px)': 'xs' \} */
|
|
59
|
+
queryBreakpointMap?: Record<string, Breakpoint>;
|
|
60
|
+
}): {
|
|
61
|
+
set(value: string): void;
|
|
62
|
+
remove(): void;
|
|
63
|
+
};
|
|
16
64
|
|
|
17
65
|
export { mockBreakpoint };
|
package/dist/testUtils.esm.js
CHANGED
|
@@ -1,19 +1,62 @@
|
|
|
1
|
+
import { act } from '@testing-library/react';
|
|
2
|
+
|
|
3
|
+
const originalMatchMedia = window.matchMedia;
|
|
1
4
|
function mockBreakpoint(options) {
|
|
5
|
+
const mediaQueries = [];
|
|
6
|
+
let breakpoint = "lg";
|
|
7
|
+
if ("initialBreakpoint" in options && options.initialBreakpoint) {
|
|
8
|
+
breakpoint = options.initialBreakpoint;
|
|
9
|
+
}
|
|
10
|
+
const breakpoints = "queryBreakpointMap" in options && typeof options.queryBreakpointMap === "object" ? options.queryBreakpointMap : {
|
|
11
|
+
"(min-width:1920px)": "xl",
|
|
12
|
+
"(min-width:1280px)": "lg",
|
|
13
|
+
"(min-width:960px)": "md",
|
|
14
|
+
"(min-width:600px)": "sm",
|
|
15
|
+
"(min-width:0px)": "xs"
|
|
16
|
+
};
|
|
2
17
|
Object.defineProperty(window, "matchMedia", {
|
|
3
18
|
writable: true,
|
|
4
|
-
value: jest.fn().mockImplementation((
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
value: jest.fn().mockImplementation((mediaQueryString) => {
|
|
20
|
+
const mediaQueryListeners = /* @__PURE__ */ new Set();
|
|
21
|
+
const mediaQueryList = {
|
|
22
|
+
matches: "matches" in options ? options.matches : breakpoints[mediaQueryString] === breakpoint,
|
|
23
|
+
media: mediaQueryString,
|
|
24
|
+
onchange: null,
|
|
25
|
+
addListener: jest.fn((listener) => {
|
|
26
|
+
mediaQueryListeners.add(listener);
|
|
27
|
+
}),
|
|
28
|
+
removeListener: jest.fn((listener) => {
|
|
29
|
+
mediaQueryListeners.delete(listener);
|
|
30
|
+
}),
|
|
31
|
+
addEventListener: jest.fn(),
|
|
32
|
+
removeEventListener: jest.fn(),
|
|
33
|
+
dispatchEvent: jest.fn()
|
|
34
|
+
};
|
|
35
|
+
mediaQueries.push({
|
|
36
|
+
mediaQueryString,
|
|
37
|
+
mediaQueryList,
|
|
38
|
+
mediaQueryListeners
|
|
39
|
+
});
|
|
40
|
+
return mediaQueryList;
|
|
41
|
+
})
|
|
16
42
|
});
|
|
43
|
+
return {
|
|
44
|
+
set(newBreakpoint) {
|
|
45
|
+
breakpoint = newBreakpoint;
|
|
46
|
+
mediaQueries.forEach(
|
|
47
|
+
({ mediaQueryString, mediaQueryList, mediaQueryListeners }) => {
|
|
48
|
+
act(() => {
|
|
49
|
+
const matches = "matches" in options ? options.matches : breakpoints[mediaQueryString] === breakpoint;
|
|
50
|
+
mediaQueryList.matches = matches;
|
|
51
|
+
mediaQueryListeners.forEach((listener) => listener({ matches }));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
},
|
|
56
|
+
remove() {
|
|
57
|
+
window.matchMedia = originalMatchMedia;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
17
60
|
}
|
|
18
61
|
|
|
19
62
|
export { mockBreakpoint };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.esm.js","sources":["../src/testUtils.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * This is a mocking method suggested in the Jest docs, as it is not implemented in JSDOM yet.\n * It can be used to mock values for the Material UI `useMediaQuery` hook if it is used in a tested component.\n *\n * For issues checkout the documentation:\n * https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom\n *\n * If there are any updates from Material UI React on testing `useMediaQuery` this mock should be replaced\n * https://mui.com/material-ui/react-use-media-query/#testing\n *\n * @public\n */\nexport function mockBreakpoint(options: { matches: boolean }) {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(
|
|
1
|
+
{"version":3,"file":"testUtils.esm.js","sources":["../src/testUtils.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Breakpoint } from '@material-ui/core/styles/createBreakpoints';\nimport { act } from '@testing-library/react';\n\nconst originalMatchMedia = window.matchMedia;\n\n/**\n * This is a mocking method suggested in the Jest docs, as it is not implemented in JSDOM yet.\n * It can be used to mock values for the Material UI `useMediaQuery` hook if it is used in a tested component.\n *\n * For issues checkout the documentation:\n * https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom\n *\n * If there are any updates from Material UI React on testing `useMediaQuery` this mock should be replaced\n * https://mui.com/material-ui/react-use-media-query/#testing\n *\n * @public\n *\n * @example\n * Match with any media query:\n * ```ts\n * mockBreakpoint({ matches: true });\n * ```\n */\nexport function mockBreakpoint(options: { matches: boolean }): void;\n/**\n * This is a mocking method suggested in the Jest docs, as it is not implemented in JSDOM yet.\n * It can be used to mock values for the Material UI `useMediaQuery` hook if it is used in a tested component.\n *\n * For issues checkout the documentation:\n * https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom\n *\n * If there are any updates from Material UI React on testing `useMediaQuery` this mock should be replaced\n * https://mui.com/material-ui/react-use-media-query/#testing\n *\n * @public\n *\n * @example\n * Set the initial breakpoint:\n * ```ts\n * mockBreakpoint({ initialBreakpoint: 'md' });\n * ```\n *\n * @example\n * Map media queries to breakpoints:\n * ```ts\n * mockBreakpoint({ queryBreakpointMap: { '(min-width:1500px)': 'xl', '(min-width:1000px)': 'lg', '(min-width:700px)': 'md', '(min-width:400px)': 'sm', '(min-width:0px)': 'xs', } });\n * ```\n *\n * @example\n * Change the breakpoint during the test:\n * ```ts\n * const { set } = mockBreakpoint({ initialBreakpoint: 'md' });\n * set('lg');\n * ```\n **/\nexport function mockBreakpoint(options: {\n /** Defaults to 'lg' */\n initialBreakpoint?: Breakpoint;\n /** Defaults to \\{ '(min-width:1920px)': 'xl', '(min-width:1280px)': 'lg', '(min-width:960px)': 'md', '(min-width:600px)': 'sm', '(min-width:0px)': 'xs' \\} */\n queryBreakpointMap?: Record<string, Breakpoint>;\n}): {\n set(value: string): void;\n remove(): void;\n};\nexport function mockBreakpoint(\n options:\n | {\n matches: boolean;\n }\n | {\n initialBreakpoint?: Breakpoint;\n queryBreakpointMap?: Record<string, Breakpoint>;\n },\n): {\n set(value: string): void;\n remove(): void;\n} {\n const mediaQueries: {\n mediaQueryString: string;\n mediaQueryList: { matches: boolean };\n mediaQueryListeners: Set<(event: { matches: boolean }) => void>;\n }[] = [];\n let breakpoint: Breakpoint = 'lg';\n if ('initialBreakpoint' in options && options.initialBreakpoint) {\n breakpoint = options.initialBreakpoint;\n }\n const breakpoints: Record<string, Breakpoint> =\n 'queryBreakpointMap' in options &&\n typeof options.queryBreakpointMap === 'object'\n ? options.queryBreakpointMap\n : {\n '(min-width:1920px)': 'xl',\n '(min-width:1280px)': 'lg',\n '(min-width:960px)': 'md',\n '(min-width:600px)': 'sm',\n '(min-width:0px)': 'xs',\n };\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(mediaQueryString => {\n const mediaQueryListeners = new Set<\n (event: { matches: boolean }) => void\n >();\n const mediaQueryList = {\n matches:\n 'matches' in options\n ? options.matches\n : breakpoints[mediaQueryString] === breakpoint,\n media: mediaQueryString,\n onchange: null,\n addListener: jest.fn(listener => {\n mediaQueryListeners.add(listener);\n }),\n removeListener: jest.fn(listener => {\n mediaQueryListeners.delete(listener);\n }),\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n };\n mediaQueries.push({\n mediaQueryString,\n mediaQueryList,\n mediaQueryListeners,\n });\n return mediaQueryList;\n }),\n });\n\n return {\n set(newBreakpoint: Breakpoint) {\n breakpoint = newBreakpoint;\n mediaQueries.forEach(\n ({ mediaQueryString, mediaQueryList, mediaQueryListeners }) => {\n act(() => {\n const matches =\n 'matches' in options\n ? options.matches\n : breakpoints[mediaQueryString] === breakpoint;\n mediaQueryList.matches = matches;\n mediaQueryListeners.forEach(listener => listener({ matches }));\n });\n },\n );\n },\n remove() {\n window.matchMedia = originalMatchMedia;\n },\n };\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,qBAAqB,MAAO,CAAA,UAAA,CAAA;AA6D3B,SAAS,eACd,OAWA,EAAA;AACA,EAAA,MAAM,eAIA,EAAC,CAAA;AACP,EAAA,IAAI,UAAyB,GAAA,IAAA,CAAA;AAC7B,EAAI,IAAA,mBAAA,IAAuB,OAAW,IAAA,OAAA,CAAQ,iBAAmB,EAAA;AAC/D,IAAA,UAAA,GAAa,OAAQ,CAAA,iBAAA,CAAA;AAAA,GACvB;AACA,EAAM,MAAA,WAAA,GACJ,wBAAwB,OACxB,IAAA,OAAO,QAAQ,kBAAuB,KAAA,QAAA,GAClC,QAAQ,kBACR,GAAA;AAAA,IACE,oBAAsB,EAAA,IAAA;AAAA,IACtB,oBAAsB,EAAA,IAAA;AAAA,IACtB,mBAAqB,EAAA,IAAA;AAAA,IACrB,mBAAqB,EAAA,IAAA;AAAA,IACrB,iBAAmB,EAAA,IAAA;AAAA,GACrB,CAAA;AACN,EAAO,MAAA,CAAA,cAAA,CAAe,QAAQ,YAAc,EAAA;AAAA,IAC1C,QAAU,EAAA,IAAA;AAAA,IACV,KAAO,EAAA,IAAA,CAAK,EAAG,EAAA,CAAE,mBAAmB,CAAoB,gBAAA,KAAA;AACtD,MAAM,MAAA,mBAAA,uBAA0B,GAE9B,EAAA,CAAA;AACF,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,SACE,SAAa,IAAA,OAAA,GACT,QAAQ,OACR,GAAA,WAAA,CAAY,gBAAgB,CAAM,KAAA,UAAA;AAAA,QACxC,KAAO,EAAA,gBAAA;AAAA,QACP,QAAU,EAAA,IAAA;AAAA,QACV,WAAA,EAAa,IAAK,CAAA,EAAA,CAAG,CAAY,QAAA,KAAA;AAC/B,UAAA,mBAAA,CAAoB,IAAI,QAAQ,CAAA,CAAA;AAAA,SACjC,CAAA;AAAA,QACD,cAAA,EAAgB,IAAK,CAAA,EAAA,CAAG,CAAY,QAAA,KAAA;AAClC,UAAA,mBAAA,CAAoB,OAAO,QAAQ,CAAA,CAAA;AAAA,SACpC,CAAA;AAAA,QACD,gBAAA,EAAkB,KAAK,EAAG,EAAA;AAAA,QAC1B,mBAAA,EAAqB,KAAK,EAAG,EAAA;AAAA,QAC7B,aAAA,EAAe,KAAK,EAAG,EAAA;AAAA,OACzB,CAAA;AACA,MAAA,YAAA,CAAa,IAAK,CAAA;AAAA,QAChB,gBAAA;AAAA,QACA,cAAA;AAAA,QACA,mBAAA;AAAA,OACD,CAAA,CAAA;AACD,MAAO,OAAA,cAAA,CAAA;AAAA,KACR,CAAA;AAAA,GACF,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,IAAI,aAA2B,EAAA;AAC7B,MAAa,UAAA,GAAA,aAAA,CAAA;AACb,MAAa,YAAA,CAAA,OAAA;AAAA,QACX,CAAC,EAAE,gBAAkB,EAAA,cAAA,EAAgB,qBAA0B,KAAA;AAC7D,UAAA,GAAA,CAAI,MAAM;AACR,YAAA,MAAM,UACJ,SAAa,IAAA,OAAA,GACT,QAAQ,OACR,GAAA,WAAA,CAAY,gBAAgB,CAAM,KAAA,UAAA,CAAA;AACxC,YAAA,cAAA,CAAe,OAAU,GAAA,OAAA,CAAA;AACzB,YAAA,mBAAA,CAAoB,QAAQ,CAAY,QAAA,KAAA,QAAA,CAAS,EAAE,OAAA,EAAS,CAAC,CAAA,CAAA;AAAA,WAC9D,CAAA,CAAA;AAAA,SACH;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,MAAS,GAAA;AACP,MAAA,MAAA,CAAO,UAAa,GAAA,kBAAA,CAAA;AAAA,KACtB;AAAA,GACF,CAAA;AACF;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/core-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0-next.0",
|
|
4
4
|
"description": "Core components used by Backstage plugins and apps",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "web-library"
|
|
@@ -55,17 +55,18 @@
|
|
|
55
55
|
"test": "backstage-cli package test"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@backstage/config": "
|
|
59
|
-
"@backstage/core-plugin-api": "
|
|
60
|
-
"@backstage/errors": "
|
|
61
|
-
"@backstage/theme": "
|
|
62
|
-
"@backstage/version-bridge": "
|
|
58
|
+
"@backstage/config": "1.2.0",
|
|
59
|
+
"@backstage/core-plugin-api": "1.10.0",
|
|
60
|
+
"@backstage/errors": "1.2.4",
|
|
61
|
+
"@backstage/theme": "0.6.0",
|
|
62
|
+
"@backstage/version-bridge": "1.0.10",
|
|
63
63
|
"@date-io/core": "^1.3.13",
|
|
64
64
|
"@material-table/core": "^3.1.0",
|
|
65
65
|
"@material-ui/core": "^4.12.2",
|
|
66
66
|
"@material-ui/icons": "^4.9.1",
|
|
67
67
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
68
68
|
"@react-hookz/web": "^24.0.0",
|
|
69
|
+
"@testing-library/react": "^16.0.0",
|
|
69
70
|
"@types/react-sparklines": "^1.7.0",
|
|
70
71
|
"ansi-regex": "^6.0.1",
|
|
71
72
|
"classnames": "^2.2.6",
|
|
@@ -93,13 +94,12 @@
|
|
|
93
94
|
"zod": "^3.22.4"
|
|
94
95
|
},
|
|
95
96
|
"devDependencies": {
|
|
96
|
-
"@backstage/app-defaults": "
|
|
97
|
-
"@backstage/cli": "
|
|
98
|
-
"@backstage/core-app-api": "
|
|
99
|
-
"@backstage/test-utils": "
|
|
97
|
+
"@backstage/app-defaults": "1.5.13-next.0",
|
|
98
|
+
"@backstage/cli": "0.29.0-next.0",
|
|
99
|
+
"@backstage/core-app-api": "1.15.1",
|
|
100
|
+
"@backstage/test-utils": "1.7.0",
|
|
100
101
|
"@testing-library/dom": "^10.0.0",
|
|
101
102
|
"@testing-library/jest-dom": "^6.0.0",
|
|
102
|
-
"@testing-library/react": "^16.0.0",
|
|
103
103
|
"@testing-library/user-event": "^14.0.0",
|
|
104
104
|
"@types/ansi-regex": "^5.0.0",
|
|
105
105
|
"@types/classnames": "^2.2.9",
|