Richard
Update with dark theme / light theme
2b894e4
from components.helpers import merge_styles
import mesop as me
@me.content_component
def header(
*,
style: me.Style | None = None,
is_mobile: bool = False,
max_width: int | None = 1000,
):
"""Creates a simple header component.
Args:
style: Override the default styles, such as background color, etc.
is_mobile: Use mobile layout. Arranges each section vertically.
max_width: Sets the maximum width of the header. Use None for fluid header.
"""
default_flex_style = _DEFAULT_MOBILE_FLEX_STYLE if is_mobile else _DEFAULT_FLEX_STYLE
if max_width and me.viewport_size().width >= max_width:
default_flex_style = merge_styles(
default_flex_style,
me.Style(width=max_width, margin=me.Margin.symmetric(horizontal="auto")),
)
# The style override is a bit hacky here since we apply the override styles to both
# boxes here which could cause problems depending on what styles are added.
with me.box(style=merge_styles(_DEFAULT_STYLE, style)):
with me.box(style=merge_styles(default_flex_style, style)):
me.slot()
@me.content_component
def header_section():
"""Adds a section to the header."""
with me.box(style=me.Style(display="flex", gap=5)):
me.slot()
_DEFAULT_STYLE = me.Style(
background=me.theme_var("surface-container"),
border=me.Border.symmetric(
vertical=me.BorderSide(
width=1,
style="solid",
color=me.theme_var("outline-variant"),
)
),
padding=me.Padding.all(10),
)
_DEFAULT_FLEX_STYLE = me.Style(
align_items="center",
display="flex",
gap=5,
justify_content="space-between",
)
_DEFAULT_MOBILE_FLEX_STYLE = me.Style(
align_items="center",
display="flex",
flex_direction="column",
gap=12,
justify_content="center",
)