@backstage/core-components 0.8.5 → 0.8.7

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,41 @@
1
1
  # @backstage/core-components
2
2
 
3
+ ## 0.8.7
4
+
5
+ ### Patch Changes
6
+
7
+ - f7257dff6f: The `<Link />` component now accepts a `noTrack` prop, which prevents the `click` event from being captured by the Analytics API. This can be used if tracking is explicitly not warranted, or in order to use custom link tracking in specific situations.
8
+ - 4c773ed25c: Change subtitle of Header style to use palette.bursts.fontColor
9
+ - f465b63b7f: Fix an issue where changes related to the `MobileSidebar` prevented scrolling pages. Additionally improve the menu of the `MobileSidebar` to not overlay the `BottomNavigation`.
10
+ - 064e750a50: Adding hover message to the Gauge and an info icon to the GaugeCard.
11
+ - a681cb9c2f: Make linkTarget configurable for MarkdownContent component
12
+
13
+ ## 0.8.7-next.1
14
+
15
+ ### Patch Changes
16
+
17
+ - f7257dff6f: The `<Link />` component now accepts a `noTrack` prop, which prevents the `click` event from being captured by the Analytics API. This can be used if tracking is explicitly not warranted, or in order to use custom link tracking in specific situations.
18
+
19
+ ## 0.8.7-next.0
20
+
21
+ ### Patch Changes
22
+
23
+ - 4c773ed25c: Change subtitle of Header style to use palette.bursts.fontColor
24
+ - f465b63b7f: Fix an issue where changes related to the `MobileSidebar` prevented scrolling pages. Additionally improve the menu of the `MobileSidebar` to not overlay the `BottomNavigation`.
25
+ - a681cb9c2f: Make linkTarget configurable for MarkdownContent component
26
+
27
+ ## 0.8.6
28
+
29
+ ### Patch Changes
30
+
31
+ - b97a2460d5: Remove the `ignoreChildEvent` utility from the sidebar component to avoid conflicts with popovers
32
+ - bdc53553eb: chore(deps): bump `react-text-truncate` from 0.16.0 to 0.17.0
33
+ - 05f0f44180: chore(deps): bump `remark-gfm` from 2.0.0 to 3.0.1
34
+ - 15bac1d738: chore(deps): bump `react-markdown` from 7.1.2 to 8.0.0
35
+ - 7346b5fb96: chore(deps): bump `rc-progress` from 3.1.4 to 3.2.4
36
+ - 9abb28bb22: Fix issue where component types are not recognized causing the `MobileSidebar` to not render as intended.
37
+ - 1787694435: Updates styling of Header component by removing flex wrap and add max width of characters for subtitle
38
+
3
39
  ## 0.8.5
4
40
 
5
41
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ import { ButtonProps as ButtonProps$1 } from '@material-ui/core/Button';
5
5
  import { LinkProps as LinkProps$1 } from '@material-ui/core/Link';
6
6
  import { LinkProps as LinkProps$2, NavLinkProps } from 'react-router-dom';
7
7
  import CSS from 'csstype';
8
+ import { Options } from 'react-markdown';
8
9
  import { TooltipProps } from '@material-ui/core/Tooltip';
9
10
  import { TextTruncateProps } from 'react-text-truncate';
10
11
  import { LinearProgressProps } from '@material-ui/core/LinearProgress';
@@ -65,13 +66,14 @@ declare function Avatar(props: AvatarProps): JSX.Element;
65
66
 
66
67
  declare type LinkProps = LinkProps$1 & LinkProps$2 & {
67
68
  component?: ElementType<any>;
69
+ noTrack?: boolean;
68
70
  };
69
71
  /**
70
72
  * Thin wrapper on top of material-ui's Link component, which...
71
73
  * - Makes the Link use react-router
72
74
  * - Captures Link clicks as analytics events.
73
75
  */
74
- declare const ActualLink: React__default.ForwardRefExoticComponent<Pick<LinkProps, "replace" | "type" | "key" | "id" | "media" | "state" | "color" | "display" | "translate" | "hidden" | "dir" | "slot" | "style" | "title" | "target" | "accessKey" | "draggable" | "lang" | "className" | "prefix" | "children" | "contentEditable" | "inputMode" | "tabIndex" | "underline" | "download" | "href" | "hrefLang" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "contextMenu" | "placeholder" | "spellCheck" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "to" | "rel" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "ping" | "referrerPolicy" | "align" | "variant" | "component" | "classes" | "innerRef" | "noWrap" | "gutterBottom" | "paragraph" | "variantMapping" | "TypographyClasses"> & React__default.RefAttributes<any>>;
76
+ declare const ActualLink: React__default.ForwardRefExoticComponent<Pick<LinkProps, "replace" | "type" | "key" | "id" | "media" | "state" | "color" | "display" | "translate" | "hidden" | "dir" | "slot" | "style" | "title" | "target" | "accessKey" | "draggable" | "lang" | "className" | "prefix" | "children" | "contentEditable" | "inputMode" | "tabIndex" | "underline" | "download" | "href" | "hrefLang" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "contextMenu" | "placeholder" | "spellCheck" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "to" | "rel" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "ping" | "referrerPolicy" | "align" | "variant" | "component" | "classes" | "innerRef" | "noWrap" | "gutterBottom" | "paragraph" | "variantMapping" | "noTrack" | "TypographyClasses"> & React__default.RefAttributes<any>>;
75
77
 
76
78
  /**
77
79
  * Properties for {@link Button}
@@ -669,6 +671,7 @@ declare type MarkdownContentClassKey = 'markdown';
669
671
  declare type Props$b = {
670
672
  content: string;
671
673
  dialect?: 'gfm' | 'common-mark';
674
+ linkTarget?: Options['linkTarget'];
672
675
  };
673
676
  /**
674
677
  * MarkdownContent
@@ -763,6 +766,7 @@ declare type Props$9 = {
763
766
  children?: ReactNode;
764
767
  headerStyle?: object;
765
768
  headerProps?: CardHeaderProps;
769
+ icon?: ReactNode;
766
770
  action?: ReactNode;
767
771
  actionsClassName?: string;
768
772
  actions?: ReactNode;
@@ -781,7 +785,7 @@ declare type Props$9 = {
781
785
  declare function InfoCard(props: Props$9): JSX.Element;
782
786
 
783
787
  /** @public */
784
- declare type GaugeClassKey = 'root' | 'overlay' | 'circle' | 'colorUnknown';
788
+ declare type GaugeClassKey = 'root' | 'overlay' | 'description' | 'circle' | 'colorUnknown';
785
789
  /** @public */
786
790
  declare type GaugeProps = {
787
791
  value: number;
@@ -789,6 +793,7 @@ declare type GaugeProps = {
789
793
  inverse?: boolean;
790
794
  unit?: string;
791
795
  max?: number;
796
+ description?: ReactNode;
792
797
  getColor?: GaugePropsGetColor;
793
798
  };
794
799
  /** @public */
@@ -814,6 +819,8 @@ declare type Props$8 = {
814
819
  variant?: InfoCardVariants;
815
820
  /** Progress in % specified as decimal, e.g. "0.23" */
816
821
  progress: number;
822
+ description?: ReactNode;
823
+ icon?: ReactNode;
817
824
  inverse?: boolean;
818
825
  deepLink?: BottomLinkProps;
819
826
  getColor?: GaugePropsGetColor;
@@ -1332,8 +1339,9 @@ declare function ItemCardHeader(props: ItemCardHeaderProps): JSX.Element;
1332
1339
  declare type PageClassKey = 'root';
1333
1340
  declare type Props$3 = {
1334
1341
  themeId: string;
1342
+ children?: React__default.ReactNode;
1335
1343
  };
1336
- declare function Page(props: PropsWithChildren<Props$3>): JSX.Element;
1344
+ declare function Page(props: Props$3): JSX.Element;
1337
1345
 
1338
1346
  declare type PageWithHeaderProps = ComponentProps<typeof Header> & {
1339
1347
  themeId: string;
package/dist/index.esm.js CHANGED
@@ -220,7 +220,7 @@ const getNodeText = (node) => {
220
220
  }
221
221
  return "";
222
222
  };
223
- const ActualLink = React.forwardRef(({ onClick, ...props }, ref) => {
223
+ const ActualLink = React.forwardRef(({ onClick, noTrack, ...props }, ref) => {
224
224
  const analytics = useAnalytics();
225
225
  const to = String(props.to);
226
226
  const linkText = getNodeText(props.children) || to;
@@ -228,7 +228,9 @@ const ActualLink = React.forwardRef(({ onClick, ...props }, ref) => {
228
228
  const newWindow = external && !!/^https?:/.exec(to);
229
229
  const handleClick = (event) => {
230
230
  onClick == null ? void 0 : onClick(event);
231
- analytics.captureEvent("click", linkText, { attributes: { to } });
231
+ if (!noTrack) {
232
+ analytics.captureEvent("click", linkText, { attributes: { to } });
233
+ }
232
234
  };
233
235
  return external ? /* @__PURE__ */ React.createElement(Link, {
234
236
  ref,
@@ -1673,13 +1675,14 @@ const components = {
1673
1675
  }
1674
1676
  };
1675
1677
  function MarkdownContent(props) {
1676
- const { content, dialect = "gfm" } = props;
1678
+ const { content, dialect = "gfm", linkTarget } = props;
1677
1679
  const classes = useStyles$C();
1678
1680
  return /* @__PURE__ */ React.createElement(ReactMarkdown, {
1679
1681
  remarkPlugins: dialect === "gfm" ? [gfm] : [],
1680
1682
  className: classes.markdown,
1681
1683
  children: content,
1682
- components
1684
+ components,
1685
+ linkTarget
1683
1686
  });
1684
1687
  }
1685
1688
 
@@ -1897,7 +1900,10 @@ const useStyles$y = makeStyles((theme) => ({
1897
1900
  },
1898
1901
  headerAvatar: {},
1899
1902
  headerAction: {},
1900
- headerContent: {}
1903
+ headerContent: {},
1904
+ subheader: {
1905
+ display: "flex"
1906
+ }
1901
1907
  }), { name: "BackstageInfoCard" });
1902
1908
  const CardActionsTopRight = withStyles((theme) => ({
1903
1909
  root: {
@@ -1945,6 +1951,7 @@ function InfoCard(props) {
1945
1951
  children,
1946
1952
  headerStyle,
1947
1953
  headerProps,
1954
+ icon,
1948
1955
  action,
1949
1956
  actionsClassName,
1950
1957
  actions,
@@ -1970,6 +1977,13 @@ function InfoCard(props) {
1970
1977
  };
1971
1978
  });
1972
1979
  }
1980
+ const cardSubTitle = () => {
1981
+ return /* @__PURE__ */ React.createElement("div", {
1982
+ className: classes.headerSubheader
1983
+ }, subheader && /* @__PURE__ */ React.createElement("div", {
1984
+ className: classes.subheader
1985
+ }, subheader), icon);
1986
+ };
1973
1987
  const errProps = errorBoundaryProps || (slackChannel ? { slackChannel } : {});
1974
1988
  return /* @__PURE__ */ React.createElement(Card, {
1975
1989
  style: calculatedStyle,
@@ -1986,7 +2000,7 @@ function InfoCard(props) {
1986
2000
  content: classes.headerContent
1987
2001
  },
1988
2002
  title,
1989
- subheader,
2003
+ subheader: cardSubTitle(),
1990
2004
  action,
1991
2005
  style: { ...headerStyle },
1992
2006
  titleTypographyProps,
@@ -2017,6 +2031,15 @@ const useStyles$x = makeStyles((theme) => ({
2017
2031
  fontWeight: "bold",
2018
2032
  color: theme.palette.textContrast
2019
2033
  },
2034
+ description: {
2035
+ fontSize: "100%",
2036
+ top: "50%",
2037
+ left: "50%",
2038
+ transform: "translate(-50%, -50%)",
2039
+ position: "absolute",
2040
+ wordBreak: "break-all",
2041
+ display: "inline-block"
2042
+ },
2020
2043
  circle: {
2021
2044
  width: "80%",
2022
2045
  transform: "translate(10%, 0)"
@@ -2048,16 +2071,35 @@ const getProgressColor = ({
2048
2071
  return palette.status.ok;
2049
2072
  };
2050
2073
  function Gauge(props) {
2074
+ const [hoverRef, setHoverRef] = useState(null);
2051
2075
  const { getColor = getProgressColor } = props;
2052
2076
  const classes = useStyles$x(props);
2053
2077
  const { palette } = useTheme();
2054
- const { value, fractional, inverse, unit, max } = {
2078
+ const { value, fractional, inverse, unit, max, description } = {
2055
2079
  ...defaultGaugeProps,
2056
2080
  ...props
2057
2081
  };
2058
2082
  const asPercentage = fractional ? Math.round(value * max) : value;
2059
2083
  const asActual = max !== 100 ? Math.round(value) : asPercentage;
2084
+ const [isHovering, setIsHovering] = useState(false);
2085
+ useEffect(() => {
2086
+ const node = hoverRef;
2087
+ const handleMouseOver = () => setIsHovering(true);
2088
+ const handleMouseOut = () => setIsHovering(false);
2089
+ if (node && description) {
2090
+ node.addEventListener("mouseenter", handleMouseOver);
2091
+ node.addEventListener("mouseleave", handleMouseOut);
2092
+ return () => {
2093
+ node.removeEventListener("mouseenter", handleMouseOver);
2094
+ node.removeEventListener("mouseleave", handleMouseOut);
2095
+ };
2096
+ }
2097
+ return () => {
2098
+ setIsHovering(false);
2099
+ };
2100
+ }, [description, hoverRef]);
2060
2101
  return /* @__PURE__ */ React.createElement("div", {
2102
+ ref: setHoverRef,
2061
2103
  className: classes.root
2062
2104
  }, /* @__PURE__ */ React.createElement(Circle, {
2063
2105
  strokeLinecap: "butt",
@@ -2066,7 +2108,9 @@ function Gauge(props) {
2066
2108
  trailWidth: 12,
2067
2109
  strokeColor: getColor({ palette, value: asActual, inverse, max }),
2068
2110
  className: classes.circle
2069
- }), /* @__PURE__ */ React.createElement("div", {
2111
+ }), description && isHovering ? /* @__PURE__ */ React.createElement("div", {
2112
+ className: classes.description
2113
+ }, description) : /* @__PURE__ */ React.createElement("div", {
2070
2114
  className: classes.overlay
2071
2115
  }, isNaN(value) ? "N/A" : `${asActual}${unit}`));
2072
2116
  }
@@ -2079,9 +2123,20 @@ const useStyles$w = makeStyles({
2079
2123
  }, { name: "BackstageGaugeCard" });
2080
2124
  function GaugeCard(props) {
2081
2125
  const classes = useStyles$w(props);
2082
- const { title, subheader, progress, inverse, deepLink, variant, getColor } = props;
2126
+ const {
2127
+ title,
2128
+ subheader,
2129
+ progress,
2130
+ inverse,
2131
+ deepLink,
2132
+ description,
2133
+ icon,
2134
+ variant,
2135
+ getColor
2136
+ } = props;
2083
2137
  const gaugeProps = {
2084
2138
  inverse,
2139
+ description,
2085
2140
  getColor,
2086
2141
  value: progress
2087
2142
  };
@@ -2091,7 +2146,8 @@ function GaugeCard(props) {
2091
2146
  title,
2092
2147
  subheader,
2093
2148
  deepLink,
2094
- variant
2149
+ variant,
2150
+ icon
2095
2151
  }, /* @__PURE__ */ React.createElement(Gauge, {
2096
2152
  ...gaugeProps
2097
2153
  })));
@@ -3115,9 +3171,13 @@ const useStyles$m = makeStyles((theme) => ({
3115
3171
  },
3116
3172
  overlayHeaderClose: {
3117
3173
  color: theme.palette.bursts.fontColor
3174
+ },
3175
+ marginMobileSidebar: {
3176
+ marginBottom: `${sidebarConfig.mobileSidebarHeight}px`
3118
3177
  }
3119
3178
  }));
3120
3179
  const sortSidebarGroupsForPriority = (children) => orderBy(children, ({ props: { priority } }) => Number.isInteger(priority) ? priority : -1, "desc");
3180
+ const sidebarGroupType = React.createElement(SidebarGroup).type;
3121
3181
  const OverlayMenu = ({
3122
3182
  children,
3123
3183
  label = "Menu",
@@ -3129,7 +3189,13 @@ const OverlayMenu = ({
3129
3189
  anchor: "bottom",
3130
3190
  open,
3131
3191
  onClose,
3132
- classes: { paperAnchorBottom: classes.overlay }
3192
+ ModalProps: {
3193
+ BackdropProps: { classes: { root: classes.marginMobileSidebar } }
3194
+ },
3195
+ classes: {
3196
+ root: classes.marginMobileSidebar,
3197
+ paperAnchorBottom: classes.overlay
3198
+ }
3133
3199
  }, /* @__PURE__ */ React.createElement(Box, {
3134
3200
  className: classes.overlayHeader
3135
3201
  }, /* @__PURE__ */ React.createElement(Typography, {
@@ -3152,7 +3218,7 @@ const MobileSidebar = (props) => {
3152
3218
  useEffect(() => {
3153
3219
  setSelectedMenuItemIndex(-1);
3154
3220
  }, [location.pathname]);
3155
- let sidebarGroups = useElementFilter(children, (elements) => elements.getElements().filter((child) => child.type === SidebarGroup));
3221
+ let sidebarGroups = useElementFilter(children, (elements) => elements.getElements().filter((child) => child.type === sidebarGroupType));
3156
3222
  if (!children) {
3157
3223
  return null;
3158
3224
  } else if (!sidebarGroups.length) {
@@ -3290,11 +3356,11 @@ const DesktopSidebar = (props) => {
3290
3356
  onMouseEnter: disableExpandOnHover ? () => {
3291
3357
  } : handleOpen,
3292
3358
  onFocus: disableExpandOnHover ? () => {
3293
- } : ignoreChildEvent(handleOpen),
3359
+ } : handleOpen,
3294
3360
  onMouseLeave: disableExpandOnHover ? () => {
3295
3361
  } : handleClose,
3296
3362
  onBlur: disableExpandOnHover ? () => {
3297
- } : ignoreChildEvent(handleClose)
3363
+ } : handleClose
3298
3364
  }, /* @__PURE__ */ React.createElement("div", {
3299
3365
  className: classNames(classes.drawer, {
3300
3366
  [classes.drawerOpen]: isOpen
@@ -3322,14 +3388,6 @@ function A11ySkipSidebar() {
3322
3388
  className: classNames(classes.visuallyHidden)
3323
3389
  }, "Skip to content");
3324
3390
  }
3325
- function ignoreChildEvent(handlerFn) {
3326
- return (event) => {
3327
- const currentTarget = event == null ? void 0 : event.currentTarget;
3328
- if (!(currentTarget == null ? void 0 : currentTarget.contains(event.relatedTarget))) {
3329
- handlerFn(event);
3330
- }
3331
- };
3332
- }
3333
3391
 
3334
3392
  function isLocationMatch(currentLocation, toLocation) {
3335
3393
  const toDecodedSearch = new URLSearchParams(toLocation.search).toString();
@@ -3722,6 +3780,7 @@ const useLocationMatch = (submenu, location) => useElementFilter(submenu.props.c
3722
3780
  function isButtonItem(props) {
3723
3781
  return props.to === void 0;
3724
3782
  }
3783
+ const sidebarSubmenuType = React.createElement(SidebarSubmenu).type;
3725
3784
  const WorkaroundNavLink = React.forwardRef(function WorkaroundNavLinkWithRef({
3726
3785
  to,
3727
3786
  end,
@@ -3855,7 +3914,7 @@ const SidebarItemWithSubmenu = ({
3855
3914
  }, arrowIcon()), isHoveredOn && children));
3856
3915
  };
3857
3916
  const SidebarItem = forwardRef((props, ref) => {
3858
- const [submenu] = useElementFilter(props.children, (elements) => elements.getElements().filter((child) => child.type === SidebarSubmenu));
3917
+ const [submenu] = useElementFilter(props.children, (elements) => elements.getElements().filter((child) => child.type === sidebarSubmenuType));
3859
3918
  if (submenu) {
3860
3919
  return /* @__PURE__ */ React.createElement(SidebarItemWithSubmenu, {
3861
3920
  ...props
@@ -5117,11 +5176,13 @@ const useStyles$5 = makeStyles((theme) => ({
5117
5176
  zIndex: 100,
5118
5177
  display: "flex",
5119
5178
  flexDirection: "row",
5120
- flexWrap: "wrap",
5121
5179
  alignItems: "center",
5122
5180
  backgroundImage: theme.page.backgroundImage,
5123
5181
  backgroundPosition: "center",
5124
- backgroundSize: "cover"
5182
+ backgroundSize: "cover",
5183
+ [theme.breakpoints.down("sm")]: {
5184
+ flexWrap: "wrap"
5185
+ }
5125
5186
  },
5126
5187
  leftItemsBox: {
5127
5188
  maxWidth: "100%",
@@ -5137,10 +5198,11 @@ const useStyles$5 = makeStyles((theme) => ({
5137
5198
  marginBottom: 0
5138
5199
  },
5139
5200
  subtitle: {
5140
- color: theme.palette.common.white,
5201
+ color: theme.palette.bursts.fontColor,
5141
5202
  opacity: 0.8,
5142
5203
  display: "inline-block",
5143
- marginTop: theme.spacing(1)
5204
+ marginTop: theme.spacing(1),
5205
+ maxWidth: "75ch"
5144
5206
  },
5145
5207
  type: {
5146
5208
  textTransform: "uppercase",
@@ -5411,18 +5473,19 @@ function ItemCardGrid(props) {
5411
5473
  }
5412
5474
 
5413
5475
  const useStyles$1 = makeStyles(() => ({
5414
- root: {
5476
+ root: ({ isMobile }) => ({
5415
5477
  display: "grid",
5416
5478
  gridTemplateAreas: "'pageHeader pageHeader pageHeader' 'pageSubheader pageSubheader pageSubheader' 'pageNav pageContent pageSidebar'",
5417
5479
  gridTemplateRows: "max-content auto 1fr",
5418
5480
  gridTemplateColumns: "auto 1fr auto",
5419
- height: "100%",
5481
+ height: isMobile ? "100%" : "100vh",
5420
5482
  overflowY: "auto"
5421
- }
5483
+ })
5422
5484
  }), { name: "BackstagePage" });
5423
5485
  function Page(props) {
5424
5486
  const { themeId, children } = props;
5425
- const classes = useStyles$1();
5487
+ const { isMobile } = useContext(SidebarPinStateContext);
5488
+ const classes = useStyles$1({ isMobile });
5426
5489
  return /* @__PURE__ */ React.createElement(ThemeProvider, {
5427
5490
  theme: (baseTheme) => ({
5428
5491
  ...baseTheme,