| from typing import List, Optional | |
| from h2o_wave import ui | |
| def header_zone() -> ui.Zone: | |
| """Returns the header zone""" | |
| zone = ui.zone( | |
| "header", | |
| size="80px", | |
| ) | |
| return zone | |
| def navigation_zone() -> ui.Zone: | |
| """Returns the navigation zone""" | |
| zone = ui.zone( | |
| "navigation", | |
| size="13%", | |
| zones=[ | |
| ui.zone(name="nav", size="99.5%"), | |
| ], | |
| ) | |
| return zone | |
| def card_zones(mode: Optional[str] = "full") -> List[ui.Zone]: | |
| """Specifies for certain modes the layout zones | |
| Args: | |
| mode: mode for layout zones | |
| Returns: | |
| List of zones | |
| """ | |
| if mode in ["full", "experiment_start"]: | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="1", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone( | |
| "content", | |
| size="calc(100vh - 160px)", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone("footer", size="80px"), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| elif mode == "error": | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="1", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone( | |
| "content", | |
| size="calc(100vh - 80px)", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| elif mode == "home": | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="calc(100vh - 80px)", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone( | |
| "content", | |
| size="370px", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "expander", | |
| size="0", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "tables", | |
| size="0", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| ui.zone(name="datasets", size="40%"), | |
| ui.zone(name="experiments", size="60%"), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| elif mode in [ | |
| "experiment/display/charts", | |
| "experiment/compare/charts", | |
| ]: | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="1", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone("nav2", size="60px"), | |
| ui.zone( | |
| "first", | |
| size="calc((100vh - 220px)*0.5)", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "second", | |
| size="calc((100vh - 220px)*0.5)", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone("footer", size="80px"), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| elif mode in [ | |
| "experiment/display/chat", | |
| ]: | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="1", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone("nav2", size="60px"), | |
| ui.zone( | |
| "first", | |
| size="calc((100vh - 220px)*0.65)", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "second", | |
| size="calc((100vh - 220px)*0.35)", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone("footer", size="80px"), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| elif mode in ["experiment/display/summary"]: | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="1", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone("nav2", size="60px"), | |
| ui.zone( | |
| "first", | |
| size="calc(0.25*(100vh - 220px))", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "second", | |
| size="calc(0.25*(100vh - 220px))", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "third", | |
| size="calc(0.5*(100vh - 220px))", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone("footer", size="80px"), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| elif mode in ["dataset/display/statistics"]: | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="1", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone("nav2", size="60px"), | |
| ui.zone( | |
| "first", | |
| size="calc(0.5*(100vh - 220px))", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "second", | |
| size="calc(0.5*(100vh - 220px))", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone( | |
| "third", | |
| size="calc(0.5*(100vh - 220px))", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone("footer", size="80px"), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| elif mode in [ | |
| "experiment/compare/config", | |
| "experiment/display/train_data_insights", | |
| "experiment/display/validation_prediction_insights", | |
| "experiment/display/config", | |
| "experiment/display/logs", | |
| "dataset/display/data", | |
| "dataset/display/visualization", | |
| "dataset/display/summary", | |
| ]: | |
| zones = [ | |
| header_zone(), | |
| ui.zone( | |
| "body", | |
| size="1", | |
| direction=ui.ZoneDirection.ROW, | |
| zones=[ | |
| navigation_zone(), | |
| ui.zone( | |
| "content_all", | |
| direction=ui.ZoneDirection.COLUMN, | |
| size="87.5%", | |
| zones=[ | |
| ui.zone("nav2", size="60px"), | |
| ui.zone( | |
| "first", | |
| size="calc(100vh - 220px)", | |
| direction=ui.ZoneDirection.ROW, | |
| ), | |
| ui.zone("footer", size="80px"), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ] | |
| else: | |
| raise ValueError(f"Unknown mode: {mode}") | |
| return zones | |
| def card_wait(msg: str, box: str) -> ui.FormCard: | |
| """Return a form card for displaying waiting status | |
| Args: | |
| msg: message to display | |
| box: box for card | |
| Returns: | |
| Form card | |
| """ | |
| card = ui.form_card(box=box, items=[ui.progress(label=msg)]) | |
| return card | |