% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/paintr-app.R
\name{ptr_app_grid}
\alias{ptr_app_grid}
\title{Grid App: Multiple \code{ggpaintr} Plots With Shared Controls}
\usage{
ptr_app_grid(
  plots,
  envir = parent.frame(),
  ui_text = NULL,
  draw_all_label = "Draw all",
  expr_check = TRUE,
  css = NULL,
  ncol = NULL,
  nrow = NULL,
  spec = NULL
)
}
\arguments{
\item{plots}{A list of formula strings, one per plot.}

\item{envir}{Environment used to resolve local data objects.}

\item{ui_text}{Optional named list of copy overrides. The page header
reads \code{ui_text$shell$title$label}; defaults to \code{"ggpaintr grid"}. See
\code{\link[=ptr_ui_text]{ptr_ui_text()}} for the full schema.}

\item{draw_all_label}{Label for the draw-all action button.}

\item{expr_check}{Controls formula-level \code{ppExpr} validation: \code{TRUE}
(default) applies the built-in denylist + AST walker; \code{FALSE} disables
formula-level validation; a \code{list} with \code{deny_list}/\code{allow_list} entries
customises the formula-level policy. Runtime-typed \code{ppExpr} input is
always screened against the built-in denylist regardless. See the
safety chapter of the ggpaintr book (development-version docs):
\url{https://willju-wangqian.github.io/ggpaintr-book/safety.html}.}

\item{css}{Optional character vector of paths to additional CSS files,
linked once at the page level after \code{ggpaintr}'s bundled stylesheet so
its rules win. See \code{\link[=ptr_app]{ptr_app()}} for the full semantics. Defaults to \code{NULL}.}

\item{ncol}{Number of plot columns. Default \code{NULL} auto-computes from \code{nrow} or places all plots in one row.}

\item{nrow}{Number of plot rows. Default \code{NULL} auto-computes from \code{ncol}.}

\item{spec}{An optional named list of fully-qualified Shiny input id ->
value, used to override widget defaults at session boot. The same flat
spec is passed to every per-plot engine; each instance filters by its
own namespace prefix.}
}
\value{
A \code{shiny.appobj}.
}
\description{
Builds a fluid layout of N plot modules with a top-level \code{wellPanel} for
shared input widgets and a "Draw all" button that triggers a redraw across
every plot. Each plot's \code{shared = "..."} placeholders collapse to one
widget in the top panel, rendered from the placeholder's own \code{build_ui}.
}
\details{
For the formula grammar (placeholder keywords, \code{shared = "<id>"}
annotation, empty-call cleanup), see \code{\link[=ptr_app]{ptr_app()}}.
}
\section{Removed \code{shared_ui}}{

The \code{shared_ui} argument is no longer supported (see \code{\link[=ptr_shared]{ptr_shared()}} for the
full rationale). To customise the widget a shared key renders, define a
custom placeholder with the \code{build_ui} you want
(\verb{ptr_define_placeholder_*}) and use it in the formula — the shared widget
auto-renders from that \code{build_ui}.
}

\seealso{
\code{\link[=ptr_css]{ptr_css()}} for the \verb{css =} argument and themable CSS custom properties.
}
\keyword{internal}
