@grafana/ui
Version:
Grafana Components Library
1 lines • 14.7 kB
Source Map (JSON)
{"version":3,"file":"PageToolbar.cjs","sources":["../../../../src/components/PageLayout/PageToolbar.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { memo, Children, type ReactNode } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { type IconName } from '../../types/icon';\nimport { Icon } from '../Icon/Icon';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Link } from '../Link/Link';\nimport { ToolbarButtonRow } from '../ToolbarButton/ToolbarButtonRow';\n\nexport interface Props {\n pageIcon?: IconName;\n title?: string;\n section?: string;\n parent?: string;\n onGoBack?: () => void;\n titleHref?: string;\n parentHref?: string;\n leftItems?: ReactNode[];\n children?: ReactNode;\n className?: string;\n isFullscreen?: boolean;\n 'aria-label'?: string;\n buttonOverflowAlignment?: 'left' | 'right';\n /**\n * Forces left items to be visible on small screens.\n * By default left items are hidden on small screens.\n */\n forceShowLeftItems?: boolean;\n 'data-testid'?: string;\n}\n\n/**\n * @deprecated Use Page instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/navigation-deprecated-pagetoolbar--docs\n */\nexport const PageToolbar = memo(\n ({\n title,\n section,\n parent,\n pageIcon,\n onGoBack,\n children,\n titleHref,\n parentHref,\n leftItems,\n isFullscreen,\n className,\n /** main nav-container aria-label **/\n 'aria-label': ariaLabel,\n buttonOverflowAlignment = 'right',\n forceShowLeftItems = false,\n 'data-testid': testId,\n }: Props) => {\n const styles = useStyles2(getStyles);\n\n /**\n * .page-toolbar css class is used for some legacy css view modes (TV/Kiosk) and\n * media queries for mobile view when toolbar needs left padding to make room\n * for mobile menu icon. This logic hopefully can be changed when we move to a full react\n * app and change how the app side menu & mobile menu is rendered.\n */\n const mainStyle = cx(\n 'page-toolbar',\n styles.toolbar,\n {\n ['page-toolbar--fullscreen']: isFullscreen,\n [styles.noPageIcon]: !pageIcon,\n },\n className\n );\n\n const titleEl = (\n <>\n <span className={styles.truncateText}>{title}</span>\n {section && (\n <span className={styles.pre}>\n {' / '}\n {section}\n </span>\n )}\n </>\n );\n\n const goBackLabel = t('grafana-ui.page-toolbar.go-back', 'Go back (Esc)');\n const searchParentFolderLabel = t(\n 'grafana-ui.page-toolbar.search-parent-folder',\n 'Search dashboard in the {{parent}} folder',\n { parent }\n );\n const searchDashboardNameLabel = t('grafana-ui.page-toolbar.search-dashboard-name', 'Search dashboard by name');\n const searchLinksLabel = t('grafana-ui.page-toolbar.search-links', 'Search links');\n\n return (\n <nav className={mainStyle} aria-label={ariaLabel} data-testid={testId}>\n <div className={styles.leftWrapper}>\n {pageIcon && !onGoBack && (\n <div className={styles.pageIcon}>\n <Icon name={pageIcon} size=\"lg\" aria-hidden />\n </div>\n )}\n {onGoBack && (\n <div className={styles.pageIcon}>\n <IconButton\n name=\"arrow-left\"\n tooltip={goBackLabel}\n tooltipPlacement=\"bottom\"\n size=\"xxl\"\n data-testid={selectors.components.BackButton.backArrow}\n onClick={onGoBack}\n />\n </div>\n )}\n <nav aria-label={searchLinksLabel} className={styles.navElement}>\n {parent && parentHref && (\n <>\n <Link\n aria-label={searchParentFolderLabel}\n className={cx(styles.titleText, styles.parentLink, styles.titleLink, styles.truncateText)}\n href={parentHref}\n >\n {parent} <span className={styles.parentIcon}></span>\n </Link>\n {titleHref && (\n <span className={cx(styles.titleText, styles.titleDivider)} aria-hidden>\n {'/'}\n </span>\n )}\n </>\n )}\n\n {(title || Boolean(leftItems?.length)) && (\n <div className={styles.titleWrapper}>\n {title && (\n <h1 className={styles.h1Styles}>\n {titleHref ? (\n <Link\n aria-label={searchDashboardNameLabel}\n className={cx(styles.titleText, styles.titleLink)}\n href={titleHref}\n >\n {titleEl}\n </Link>\n ) : (\n <div className={styles.titleText}>{titleEl}</div>\n )}\n </h1>\n )}\n\n {leftItems?.map((child, index) => (\n <div\n className={cx(styles.leftActionItem, { [styles.forceShowLeftActionItems]: forceShowLeftItems })}\n key={index}\n >\n {child}\n </div>\n ))}\n </div>\n )}\n </nav>\n </div>\n <ToolbarButtonRow alignment={buttonOverflowAlignment}>\n {Children.toArray(children).filter(Boolean)}\n </ToolbarButtonRow>\n </nav>\n );\n }\n);\n\nPageToolbar.displayName = 'PageToolbar';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const { spacing, typography } = theme;\n\n const focusStyle = getFocusStyles(theme);\n\n return {\n pre: css({\n whiteSpace: 'pre',\n }),\n toolbar: css({\n alignItems: 'center',\n // TODO change to page background when visual refresh is enabled\n background: theme.colors.background.canvas,\n display: 'flex',\n gap: theme.spacing(2),\n justifyContent: 'space-between',\n padding: theme.spacing(2, 2),\n\n [theme.breakpoints.down('md')]: {\n paddingLeft: '53px',\n },\n }),\n noPageIcon: css({\n [theme.breakpoints.down('md')]: {\n paddingLeft: theme.spacing(2),\n },\n }),\n leftWrapper: css({\n display: 'flex',\n flexWrap: 'nowrap',\n maxWidth: '70%',\n }),\n pageIcon: css({\n display: 'none',\n [theme.breakpoints.up('sm')]: {\n display: 'flex',\n paddingRight: theme.spacing(1),\n alignItems: 'center',\n },\n }),\n truncateText: css({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }),\n titleWrapper: css({\n display: 'flex',\n margin: 0,\n minWidth: 0,\n }),\n navElement: css({\n display: 'flex',\n alignItems: 'center',\n minWidth: 0,\n }),\n h1Styles: css({\n margin: spacing(0, 1, 0, 0),\n lineHeight: 'inherit',\n flexGrow: 1,\n minWidth: 0,\n }),\n parentIcon: css({\n marginLeft: theme.spacing(0.5),\n }),\n titleText: css({\n display: 'flex',\n fontSize: typography.size.lg,\n margin: 0,\n borderRadius: theme.shape.radius.default,\n }),\n titleLink: css({\n '&:focus-visible': focusStyle,\n }),\n titleDivider: css({\n padding: spacing(0, 0.5, 0, 0.5),\n display: 'none',\n [theme.breakpoints.up('md')]: {\n display: 'unset',\n },\n }),\n parentLink: css({\n display: 'none',\n [theme.breakpoints.up('md')]: {\n display: 'unset',\n flex: 1,\n },\n }),\n leftActionItem: css({\n display: 'none',\n alignItems: 'center',\n paddingRight: spacing(0.5),\n [theme.breakpoints.up('md')]: {\n display: 'flex',\n },\n }),\n forceShowLeftActionItems: css({\n display: 'flex',\n }),\n };\n};\n"],"names":["memo","useStyles2","cx","jsxs","Fragment","jsx","t","Icon","IconButton","selectors","Link","ToolbarButtonRow","Children","getFocusStyles","css"],"mappings":"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"}