# Meeting Notes - Templating ## Attendees * Philipp Rudidger (Anaconda Inc.) * James A. Bednar (Anaconda Inc.) * Marc Skov Madsen * Scott Christensen (ERDC) * Marvin Brown (ERDC) * Chris Ball (JP Morgan) ## Prior work https://panel.holoviz.org/user_guide/Templates.html ### Panel PRs - https://github.com/holoviz/panel/pull/813 - https://github.com/holoviz/panel/pull/1157 ### Other examples - https://www.linkedin.com/posts/rami-krispin_covid19-italy-r-activity-6650403631709466624-cAgu - https://rigorousthemes.com/blog/15-best-tableau-dashboard-examples/ - https://www.google.dk/amp/s/www.pinterest.com/amp/nixonatu/tableau-dashboard/ - https://dash-gallery.plotly.host/Portal/ - https://shiny.rstudio.com/gallery/ - https://material-ui.com/discover-more/showcase/ - https://material-ui.com/getting-started/templates/ ## Agenda * Introductions * Templating frameworks * Comparison to other frameworks * Structuring of templates * ## Templating frameworks * Vanilla CSS * Bootstrap * Materialize * ... ## Comparison * Streamlit * Tableau * R Shiny * Javascript frameworks Angular/React * Native toolkits: Qt ## Structuring of templates * Different types of templates: * Simple app controls in sidebar some plots in main area * Multiple pages with menu system to navigate between them * Pipeline with multiple stages * Totally custom vs. default templates * Customization important for ERDC * But default templates important for advertising Panel within ERDC * Want to be easy for someone to get started right away with something that looks nice and works well * Also need templating for embedding into a larger site * And need templating for filling in features not otherwise available (cards, draggable panes, etc.) * Nice Index page, gallery-like? * Standard organization: * Header * Sidebar (Responsive?) * Body * Footer * Menu System * Be able to click and route between different apps * Switching between endpoints or swap out components? * Problems to solve: syncing state, transferring state? * Templating frameworks with custom capabilities ## API * Options: * sidebar.write()? * Template().add_panel? * some_panel_component.servable(component='sidebar') * CustomTemplate().body.append() * In Marc's example each component is a Panel layout (column): * This affords the ability to add/remove components * In the simple case each area should be a single Panel layout: * Performance issues? * Easy to manipulate but does not afford the same capabilities as templating the internals of that area * Building app in notebook: * Cannot display custom CSS inside notebook * Open in new tab * Could support theming inside notebook * Maybe add serve button to notebook UI? ## Other goals & Questions * Building nice default apps using templates * How do templates interact with pipelines? * Integrate with menu system? * Embedding templates within layouts and the reverse * Theming: * Coordinate theming between plots, template, components *