from reactpy import component, html, svg, hooks from reactpy.core.hooks import use_ref @component def Header(demo_name: str, short_description: str, extra_info: str, start_over): more_info, set_more_info = hooks.use_state(False) def toggle_header(event=None): set_more_info(not more_info) logo_section_ref = use_ref(None) start_over_ref = use_ref(None) if logo_section_ref.current is None: logo_section_ref.current = html.div( { "style": { "display": "flex", "alignItems": "center", "flex": 2, "textAlign": "left", "padding": "10px", } }, html.img( { "src": "https://avatars.githubusercontent.com/u/108304503?s=200&v=4", "style": { "height": "30px", "marginRight": "15px", "marginLeft": "5px", "transform": "translateY(-2px)", } } ), html.p( { "style": { "fontSize": "25px", "fontFamily": "Georgia, 'Times New Roman', Times, serif", } }, f"{demo_name}" ), ) if start_over_ref.current is None: start_over_ref.current = html.div( { "style": { "flex": 2, "textAlign": "right", "padding": "10px", } }, html.button( { "style": { "backgroundColor": "#FFFFFF", "color": "#757575", "fontSize": "14px", "cursor": "pointer", "border": "1px solid #e2dfdf", "borderRadius": "5px", "padding": "6px 20px", "marginRight": "15px", }, "type": "button", "onClick": start_over, }, "Start Over?" ) ) return html.header( { "style": { "backgroundColor": "#FFFFFF", "display": "flex", "justifyContent": "space-between", "alignItems": "center", } }, logo_section_ref.current, html.div( { "style": { "flex": 5, "textAlign": "center", "padding": "10px 0px 15px 0px", "fontFamily": "Lato", "position": "relative", } }, html.h3(f"Welcome to the {demo_name} Demo"), html.p( short_description, html.button( { "style": { "display": "inline" if not more_info else "none", "backgroundColor": "#FFFFFF", "color": "#757575", "fontSize": "13px", "cursor": "pointer", "border": "none", "padding": "0px 0px 0px 5px", }, "type": "button", "onClick": toggle_header, }, html.u( { "style": { "flex": 2, "textAlign": "right", "padding": "10px", } }, "Learn More" ) ), f" {extra_info}" if more_info else "" ), html.button( { "style": { "display": "block" if more_info else "none", "background": "none", "border": "none", "color": "#757575", "cursor": "pointer", "position": "absolute", "left": "50%", "transform": "translateX(-50%)", "bottom": "1px", }, "type": "button", "on_click": toggle_header, }, svg.svg( { "width": "20", "height": "20", "viewBox": "0 0 20 20", "fill": "none", "stroke": "black", "strokeWidth": "2", "strokeLinecap": "round", "strokeLinejoin": "round", }, svg.path( { "d": "M12 19V5M5 12l7-7 7 7", "stroke": "currentColor", } ) ) ) ), start_over_ref.current )