import React, { ReactNode } from 'react' import { AppOrAuthSubAppName, convertAppNameToColor, } from '@monorail/helpers/appName' import { Colors, getColor } from '@monorail/helpers/color' import { flexFlow } from '@monorail/helpers/flex' import styled, { css, CSSProp } from '@monorail/helpers/styled-components' import { getThemeColor, ThemeColors } from '@monorail/helpers/theme' import { FontSizes, typographyFont } from '@monorail/helpers/typography' import { isNotNil } from '@monorail/sharedHelpers/typeGuards' import { AppIcon } from '@monorail/visualComponents/appIcon/AppIcon' import { IconButton, IconButtonProps, } from '@monorail/visualComponents/buttons/IconButton' import { Icon } from '@monorail/visualComponents/icon/Icon' import { IconType } from '@monorail/visualComponents/icon/IconType' const HeaderRow = styled.div` ${flexFlow('row')}; align-items: center; color: ${getThemeColor(ThemeColors.Text1000)}; flex-shrink: 0; height: 48px; padding: 0 16px; ` const HeaderContainer = styled.div`` export const HeaderTitle = styled.h1` ${typographyFont(500, FontSizes.Title3)}; ` const iconLeftCss = css` color: ${getThemeColor(ThemeColors.Text1000)}; flex-shrink: 0; margin-right: 12px; ` export type HeaderProps = { actions?: ReactNode appIcon?: AppOrAuthSubAppName children?: ReactNode cssHeaderRow?: CSSProp cssTitle?: CSSProp iconLeft?: IconType | React.ReactElement noBorder?: boolean title: ReactNode } export const Header = styled( ({ actions, appIcon, children, cssHeaderRow, cssTitle, iconLeft, noBorder = false, title, ...domProps }: HeaderProps) => ( {appIcon && } {iconLeft && (typeof iconLeft === 'string' ? ( ) : ( iconLeft ))} {title} {actions} {children} ), )( ({ noBorder, appIcon }) => css` ${!noBorder && css` &::after { content: ''; background: ${getColor( isNotNil(appIcon) ? convertAppNameToColor(appIcon) : Colors.Gray08, )}; bottom: 0; height: 1px; left: 0; position: absolute; right: 0; } `}; ${flexFlow()}; position: relative; flex-shrink: 0; `, )