% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/paintr-app.R
\name{ptr_ui_page}
\alias{ptr_ui_page}
\title{Page shell for hand-composed ggpaintr UIs}
\usage{
ptr_ui_page(..., page = shiny::fluidPage, css = NULL)
}
\arguments{
\item{...}{UI children (pieces, layout, your own widgets).}

\item{page}{A Bootstrap-3 page builder whose \code{...} are tag children:
\code{shiny::fluidPage} (default), \code{fixedPage}, \code{fillPage},
\code{bootstrapPage}, \code{basicPage}. NOT \code{navbarPage} (needs a positional
\code{title} + \code{tabPanel} children) and NOT bslib/BS5 pages (the bundled
CSS is Bootstrap-3-scoped -- see \code{\link[=ptr_app_bslib]{ptr_app_bslib()}}). For those roots,
compose by hand: see
\code{vignette("ggpaintr-tutorial")}.}

\item{css}{Optional character vector of extra stylesheet paths,
linked after \code{ggpaintr.css}. See \code{\link[=ptr_css]{ptr_css()}}.}
}
\value{
A \code{shiny.tag} — the Bootstrap page node ready to pass to
\code{\link[shiny:shinyApp]{shiny::shinyApp()}} as \code{ui}.
}
\description{
Wraps composed L3 pieces in a Bootstrap page + the single \code{.ptr-app}
theme scope + the (deduped) asset bundle. The only thing an L3 user
must remember.
}
\examples{
f <- rlang::expr(ggplot(mtcars, aes(x = ppVar, y = ppVar)) + geom_point())
ptr_ui_page(
  shiny::sidebarLayout(
    shiny::sidebarPanel(ptr_ui_controls(id = "p", formula = !!f)),
    shiny::mainPanel(ptr_ui_plot("p"))
  )
)
}
\seealso{
\code{\link[=ptr_ui_plot]{ptr_ui_plot()}}, \code{\link[=ptr_ui_controls]{ptr_ui_controls()}}, \code{\link[=ptr_server]{ptr_server()}}, \code{\link[=ptr_css]{ptr_css()}}
}
