# 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
*