from shared import app_dir
from utils import create_nav_button
from shiny import App, ui
import shinyswatch
from server import create_server, q1, q2, q3, q4 #QUESTION_TO_SHEET
import numpy as np
from shinywidgets import output_widget, render_widget
app_ui = ui.page_fluid(
ui.tags.style("""
.big-table {
font-size: 22px; /* Increase font size */
padding: 25px; /* Add padding for spacing */
width: 100%; /* Make the card take full width */
overflow-x: auto; /* Enable horizontal scrolling if needed */
}
.big-table table {
width: 100%; /* Make table take full width within card */
}
.title-logo-container {
display: flex;
align-items: center;
gap: 15px; /* Add some space between the logo and title */
}
.title-logo-container img {
max-height: 50px; /* Adjust logo size */
height: auto;
}
.title-logo-container h1 {
margin: 0;
font-size: 28px; /* Adjust title font size */
font-weight: bold; /* Make it bold */
}
"""),
ui.page_fillable(
ui.page_sidebar(
ui.sidebar(
ui.div(
ui.output_image("clientlogo"),
style="display: inline-block; overflow: hidden; max-height: 75px; width: 90%;"
),
ui.card(
create_nav_button(
button_icon="house",
button_label_text="Homepage",
button_link="https://rsginc-nvtbs.hf.space",
#button_cls="btn btn-secondary"
),
create_nav_button(
button_icon = "route",
button_label_text = "Origin-Destination",
button_link = "https://rsginc-nvtbsod.hf.space",
button_cls="btn btn-secondary"
),
# create_nav_button(
# button_icon = "car",
# button_label_text = "Auto Travel",
# button_link = "https://www.rsginc.com"
# ),
#create_nav_button(
# button_icon = "road",
# button_label_text = "VMT",
# button_link = "https://rsginc-nvtbsvmt.hf.space"
#),
create_nav_button(
button_icon = "house-laptop",
button_label_text = "Home-Work Location",
button_link = "https://rsginc-nvtbsdwell.hf.space",
#button_cls="btn btn-secondary"
),
#create_nav_button(
# button_icon = "truck",
# button_label_text = "Truck",
# button_link = "https://rsginc-nvtbstruck.hf.space"
#),
create_nav_button(
button_icon = "clipboard-question",
button_label_text = "Survey",
button_link = "https://rsginc-nvtbssurvey.hf.space"
)
),
ui.div(
ui.output_image("rsglogo"),
style="display: inline-block; overflow: hidden; max-height: 40px; width: 50%;"
),
open="desktop",
),
ui.include_css(app_dir / "styles.css"),
ui.div(
ui.tags.div(
ui.h1("NAPA Valley Travels", style="margin: 0; font-size: 28px; font-weight: bold;"),
class_="title-logo-container"
),
style="padding-bottom: 20px;"
),
# Tabs inside a card
ui.card(
ui.tags.h5("Travel Trends in NAPA Valley", style="text-align: center; font-weight: bold; margin-bottom: 15px;"), # Add card title
ui.navset_card_underline(
ui.nav_panel(
"OD Map",
ui.tags.div(
ui.HTML("""
"""
),
)
),
ui.nav_panel(
"Trip distribution",
ui.tags.div(
ui.HTML("""
"""
),
),
),
ui.nav_panel(
"School Trips",
ui.tags.div(
ui.HTML("""
"""
),
),
),
ui.nav_panel(
"Winery Trips",
ui.tags.div(
ui.HTML("""
"""
),
),
),
ui.nav_panel(
"Travel Patterns",
ui.tags.h3("Select a Question to View Travel Patterns", style="text-align: center;"),
# Add radio button for date and data table selection
ui.input_radio_buttons(
"data_year_selector1",
label="Select Data Year:",
choices=["Fall 2014", "Fall 2018", "Fall 2024"],
selected="Fall 2024", # Preselect a default year
inline=True
),
ui.tags.br(),
# Add dropdown for question selection
ui.input_select(
"question_selector1",
label="Select a Question:",
choices=list(q1.keys()),
selected="What types of trips are occurring within Napa County?", # Preselect a valid question
),
ui.tags.br(),
#ui.input_radio_buttons(
# "data_year_selector",
# label="Select Data Year:",
# choices=["Fall 2014", "Fall 2018", "Fall 2024"],
# selected="Fall 2024" # Preselect a default year
#),
# Output table for the selected sheet
ui.output_table("table_title1"),
ui.output_table("trip_table1"),
),
ui.nav_panel(
"Travel Characteristics",
ui.tags.h3("Select a Question to View Travel Characteristics", style="text-align: center;"),
# Add radio button for date and data table selection
ui.input_radio_buttons(
"data_year_selector2",
label="Select Data Year:",
choices=["Fall 2014", "Fall 2018", "Fall 2024"],
selected="Fall 2024", # Preselect a default year
inline=True
),
ui.tags.br(),
# Add dropdown for question selection
ui.input_select(
"question_selector2",
label="Select a Question:",
choices=list(q2.keys()),
selected="What types of trips are occurring within Napa County?", # Preselect a valid question
),
ui.tags.br(),
#ui.input_radio_buttons(
# "data_year_selector",
# label="Select Data Year:",
# choices=["Fall 2014", "Fall 2018", "Fall 2024"],
# selected="Fall 2024" # Preselect a default year
#),
# Output table for the selected sheet
ui.output_table("table_title2"),
ui.output_table("trip_table2"),
),
ui.nav_panel(
"Roadway Segments",
ui.tags.h3("Select a Question to View Travel Characteristics for Roadway Segments", style="text-align: center;"),
# Add radio button for date and data table selection
ui.input_radio_buttons(
"data_year_selector3",
label="Select Data Year:",
choices=["Fall 2014", "Fall 2018", "Fall 2024"],
selected="Fall 2024", # Preselect a default year
inline=True
),
ui.tags.br(),
# Add dropdown for question selection
ui.input_select(
"question_selector3",
label="Select a Question:",
choices=list(q3.keys()),
selected="What types of trips are occurring within Napa County?", # Preselect a valid question
),
ui.tags.br(),
#ui.input_radio_buttons(
# "data_year_selector",
# label="Select Data Year:",
# choices=["Fall 2014", "Fall 2018", "Fall 2024"],
# selected="Fall 2024" # Preselect a default year
#),
# Output table for the selected sheet
ui.output_table("table_title3"),
ui.output_table("trip_table3"),
),
ui.nav_panel(
"Commercial Vehicle Travel Characteristics",
ui.tags.h3("Select a Question to View Travel Characteristics for Commercial Vehicle", style="text-align: center;"),
# Add radio button for date and data table selection
ui.input_radio_buttons(
"data_year_selector4",
label="Select Data Year:",
choices=["Fall 2014", "Fall 2018", "Fall 2024"],
selected="Fall 2024", # Preselect a default year
inline=True
),
ui.tags.br(),
# Add dropdown for question selection
ui.input_select(
"question_selector4",
label="Select a Question:",
choices=list(q4.keys()),
selected="What types of trips are occurring within Napa County?", # Preselect a valid question
),
ui.tags.br(),
#ui.input_radio_buttons(
# "data_year_selector",
# label="Select Data Year:",
# choices=["Fall 2014", "Fall 2018", "Fall 2024"],
# selected="Fall 2024" # Preselect a default year
#),
# Output table for the selected sheet
ui.output_table("table_title4"),
ui.output_table("trip_table4"),
),
#ui.nav_panel(
# "Mode",
# ui.tags.div(
# ui.HTML("""
# Mode
# """
# ),
# ),
#),
#ui.nav_panel(
# "VMT",
# ui.tags.div(
# ui.HTML("""
# VMT
# """
# ),
# ),
#),
),
style="padding: 10px; margin-top: 20px;",
class_="tabbed-card",
),
)
),
theme=shinyswatch.theme.spacelab,
)
app = App(app_ui, create_server(app_dir))
if __name__ == "__main__":
import asyncio
try:
app.run() # Use this for environments without a running event loop
except RuntimeError as e:
if "asyncio.run()" in str(e):
asyncio.run(app.start()) # Fallback for environments with an active event loop