From d94d6d71fcbc1bb4e73946c723fe32b25df85f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Mon, 19 Oct 2026 14:59:55 +0100 Subject: [PATCH 1/8] feat: adds support for function argument in TealAppDriver --- NEWS.md | 1 + R/TealAppDriver.R | 24 +++++++++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/NEWS.md b/NEWS.md index ce42c65d97..1577814ede 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,7 @@ ### Enhancements * Exported `select_decorators()` to help module developers resolve the decorators applied to a specific output (#1733). +* Add support for function argument in `TealAppDriver$new(app)`. ### Bug fixes diff --git a/R/TealAppDriver.R b/R/TealAppDriver.R index d1c1a3fde2..dc2ca08715 100644 --- a/R/TealAppDriver.R +++ b/R/TealAppDriver.R @@ -51,7 +51,12 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. timeout = rlang::missing_arg(), load_timeout = rlang::missing_arg(), ...) { - checkmate::assert_class(app, "teal_app") + checkmate::assert( + combine = "or", + .var.name = "app", + checkmate::check_function(app), + checkmate::check_class(app, "teal_app") + ) checkmate::assert_list(teal_options, names = "named") # Default timeout is hardcoded to 4s in shinytest2:::resolve_timeout # New default is set with environment variables if not already set by user @@ -61,16 +66,7 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. extra_envvar$SHINYTEST2_TIMEOUT <- "20000" } if (Sys.getenv("SHINYTEST2_LOAD_TIMEOUT") == "") { - extra_envvar$SHINYTEST2_TIMEOUT <- "100000" - } - - if (length(teal_options)) { - orig_server <- app$server - opts <- teal_options - app$server <- function(input, output, session) { - do.call(base::options, opts) - orig_server(input, output, session) - } + extra_envvar$SHINYTEST2_LOAD_TIMEOUT <- "100000" } rlang::check_installed("withr") @@ -78,11 +74,13 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. withr::with_envvar( new = extra_envvar, code = super$initialize( - shiny::shinyApp(ui = app$ui, server = app$server, options = options), + if (is.function(app)) app else shiny::shinyApp(ui = app$ui, server = app$server), name = "teal", variant = shinytest2::platform_variant(), timeout = timeout, - load_timeout = load_timeout + load_timeout = load_timeout, + shiny_args = options, + options = teal_options ) ) ) From 85753c669a6b246ee8e612de6f3a3362f16a16a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 23 Oct 2026 12:58:26 +0100 Subject: [PATCH 2/8] docs: update --- R/TealAppDriver.R | 9 +++++++-- man/TealAppDriver.Rd | 11 +++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/R/TealAppDriver.R b/R/TealAppDriver.R index dc2ca08715..f149c6f383 100644 --- a/R/TealAppDriver.R +++ b/R/TealAppDriver.R @@ -25,7 +25,12 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. #' @description #' Initialize a `TealAppDriver` object for testing a `teal` application. #' - #' @param app (`teal_app`) + #' @param app (`teal_app` or `function`) The `teal` application to be tested. + #' This value can be 2 different things: + #' - A `teal_app` object, which is the result of calling `teal::init()`. + #' - A function that returns a `teal_app` object. + #' + #' Other values that [`shinytest2::AppDriver`] `new()` functions accepts are not yet supported. #' @param options (`list`) passed to `shinyApp(options)`. See [shiny::shinyApp()]. #' @param timeout (`numeric`) Default number of milliseconds for any timeout or #' timeout_ parameter in the `TealAppDriver` class. @@ -126,7 +131,7 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. super$stop(...) }, #' @description - #' Append parent [`shinytest2::AppDriver`] `click` method with a call to `waif_for_idle()` method. + #' Append parent [`shinytest2::AppDriver`] `click` method with a call to `wait_for_idle()` method. #' @param ... arguments passed to parent [`shinytest2::AppDriver`] `click()` method. click = function(...) { super$click(...) diff --git a/man/TealAppDriver.Rd b/man/TealAppDriver.Rd index ae28654951..266faffc03 100644 --- a/man/TealAppDriver.Rd +++ b/man/TealAppDriver.Rd @@ -96,7 +96,14 @@ driving a teal application for performing interactions for \code{shinytest2} tes \subsection{Arguments}{ \if{html}{\out{
}} \describe{ - \item{\code{app}}{(\code{teal_app})} + \item{\code{app}}{(\code{teal_app} or \code{function}) The \code{teal} application to be tested. +This value can be 2 different things: +\itemize{ +\item A \code{teal_app} object, which is the result of calling \code{teal::init()}. +\item A function that returns a \code{teal_app} object. +} + +Other values that \code{\link[shinytest2:AppDriver]{shinytest2::AppDriver}} \code{new()} functions accepts are not yet supported.} \item{\code{options}}{(\code{list}) passed to \code{shinyApp(options)}. See \code{\link[shiny:shinyApp]{shiny::shinyApp()}}.} \item{\code{teal_options}}{(\code{list}) named list of R options to set inside the spawned Shiny process (e.g. \code{list(teal.enable_deep_linking = TRUE)}). Applied at session @@ -145,7 +152,7 @@ if the \code{ACTIONS_STEP_DEBUG} environment variable is set to \code{true} (cas \if{html}{\out{}} \if{latex}{\out{\hypertarget{method-TealAppDriver-click}{}}} \subsection{\code{TealAppDriver$click()}}{ - Append parent \code{\link[shinytest2:AppDriver]{shinytest2::AppDriver}} \code{click} method with a call to \code{waif_for_idle()} method. + Append parent \code{\link[shinytest2:AppDriver]{shinytest2::AppDriver}} \code{click} method with a call to \code{wait_for_idle()} method. \subsection{Usage}{ \if{html}{\out{
}} \preformatted{TealAppDriver$click(...)} From e7ac4ae49bc57212f91a6ff8a36cced73fdcb0f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 23 Oct 2026 13:06:14 +0100 Subject: [PATCH 3/8] docs: update news --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index a8afc630aa..a9b99257fe 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,7 +3,7 @@ ### Enhancements * Exported `select_decorators()` to help module developers resolve the decorators applied to a specific output (#1733). -* Add support for function argument in `TealAppDriver$new(app)`. +* Add support for function argument in `TealAppDriver$new(app)` (#1753). ### Bug fixes From 9a54bf8ebf50360b6caab07640607b3256d171a3 Mon Sep 17 00:00:00 2001 From: "Bingjun (Benjamin) Wang" Date: Mon, 26 Oct 2026 22:45:10 -0700 Subject: [PATCH 4/8] fix: start function apps in TealAppDriver and use the dev package --- R/TealAppDriver.R | 32 +++++++++++++++++++++++++++----- man/TealAppDriver.Rd | 9 ++++++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/R/TealAppDriver.R b/R/TealAppDriver.R index f149c6f383..2722ca70ae 100644 --- a/R/TealAppDriver.R +++ b/R/TealAppDriver.R @@ -28,7 +28,10 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. #' @param app (`teal_app` or `function`) The `teal` application to be tested. #' This value can be 2 different things: #' - A `teal_app` object, which is the result of calling `teal::init()`. - #' - A function that returns a `teal_app` object. + #' - A function that returns a `teal_app` (or a `shiny.appobj`) object. + #' The function is executed in the background R process, so it must be self-contained: + #' call `library()` first and do not use objects defined outside of the function + #' (see [`shinytest2::AppDriver`] `new` method). #' #' Other values that [`shinytest2::AppDriver`] `new()` functions accepts are not yet supported. #' @param options (`list`) passed to `shinyApp(options)`. See [shiny::shinyApp()]. @@ -44,8 +47,8 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. #' See [`shinytest2::AppDriver`] `new` method for more details on how to change it #' via options or environment variables #' @param teal_options (`list`) named list of R options to set inside the spawned - #' Shiny process (e.g. `list(teal.enable_deep_linking = TRUE)`). Applied at session - #' start so option-gated server logic sees them. + #' Shiny process (e.g. `list(teal.enable_deep_linking = TRUE)`). Applied before the app + #' is created, so option-gated logic in `init()` and in the server sees them. #' @param ... Additional arguments to be passed to `shinytest2::AppDriver$new` #' #' @@ -74,17 +77,36 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. extra_envvar$SHINYTEST2_LOAD_TIMEOUT <- "100000" } + app <- if (is.function(app)) { + # The function is serialized to the background process. Detach it from the calling + # environment so that it doesn't reference (and load) the installed package namespace + # before `library()` is called inside the function. + environment(app) <- globalenv() + wrapper <- function() NULL + # shinytest2 only runs the result of the function if it is a `shiny.appobj`. + body(wrapper) <- rlang::expr({ + x <- (!!app)() + if (inherits(x, "teal_app")) { + x <- shiny::shinyApp(ui = x$ui, server = x$server, options = !!options) + } + x + }) + environment(wrapper) <- globalenv() + wrapper + } else { + shiny::shinyApp(ui = app$ui, server = app$server, options = options) + } + rlang::check_installed("withr") suppressWarnings( withr::with_envvar( new = extra_envvar, code = super$initialize( - if (is.function(app)) app else shiny::shinyApp(ui = app$ui, server = app$server), + app, name = "teal", variant = shinytest2::platform_variant(), timeout = timeout, load_timeout = load_timeout, - shiny_args = options, options = teal_options ) ) diff --git a/man/TealAppDriver.Rd b/man/TealAppDriver.Rd index 266faffc03..e3f6d305ac 100644 --- a/man/TealAppDriver.Rd +++ b/man/TealAppDriver.Rd @@ -100,14 +100,17 @@ driving a teal application for performing interactions for \code{shinytest2} tes This value can be 2 different things: \itemize{ \item A \code{teal_app} object, which is the result of calling \code{teal::init()}. -\item A function that returns a \code{teal_app} object. +\item A function that returns a \code{teal_app} (or a \code{shiny.appobj}) object. +The function is executed in the background R process, so it must be self-contained: +call \verb{library()} first and do not use objects defined outside of the function +(see \code{\link[shinytest2:AppDriver]{shinytest2::AppDriver}} \code{new} method). } Other values that \code{\link[shinytest2:AppDriver]{shinytest2::AppDriver}} \code{new()} functions accepts are not yet supported.} \item{\code{options}}{(\code{list}) passed to \code{shinyApp(options)}. See \code{\link[shiny:shinyApp]{shiny::shinyApp()}}.} \item{\code{teal_options}}{(\code{list}) named list of R options to set inside the spawned -Shiny process (e.g. \code{list(teal.enable_deep_linking = TRUE)}). Applied at session -start so option-gated server logic sees them.} +Shiny process (e.g. \code{list(teal.enable_deep_linking = TRUE)}). Applied before the app +is created, so option-gated logic in \code{init()} and in the server sees them.} \item{\code{timeout}}{(\code{numeric}) Default number of milliseconds for any timeout or timeout_ parameter in the \code{TealAppDriver} class. Defaults to 20s. From d4983973ae400bac0d5d3fc6ea561f45559f10e6 Mon Sep 17 00:00:00 2001 From: "Bingjun (Benjamin) Wang" Date: Tue, 27 Oct 2026 20:56:03 -0700 Subject: [PATCH 5/8] add test cases --- R/TealAppDriver.R | 13 ++---- man/TealAppDriver.Rd | 10 ++--- tests/testthat/test-shinytest2-init.R | 58 +++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 15 deletions(-) diff --git a/R/TealAppDriver.R b/R/TealAppDriver.R index 2722ca70ae..c6c0304feb 100644 --- a/R/TealAppDriver.R +++ b/R/TealAppDriver.R @@ -28,10 +28,8 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. #' @param app (`teal_app` or `function`) The `teal` application to be tested. #' This value can be 2 different things: #' - A `teal_app` object, which is the result of calling `teal::init()`. - #' - A function that returns a `teal_app` (or a `shiny.appobj`) object. - #' The function is executed in the background R process, so it must be self-contained: - #' call `library()` first and do not use objects defined outside of the function - #' (see [`shinytest2::AppDriver`] `new` method). + #' - A function that returns a `teal_app` object. The function runs in a separate R process, + #' so it must call `library(teal)` and not use objects defined outside of it. #' #' Other values that [`shinytest2::AppDriver`] `new()` functions accepts are not yet supported. #' @param options (`list`) passed to `shinyApp(options)`. See [shiny::shinyApp()]. @@ -47,8 +45,8 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. #' See [`shinytest2::AppDriver`] `new` method for more details on how to change it #' via options or environment variables #' @param teal_options (`list`) named list of R options to set inside the spawned - #' Shiny process (e.g. `list(teal.enable_deep_linking = TRUE)`). Applied before the app - #' is created, so option-gated logic in `init()` and in the server sees them. + #' Shiny process (e.g. `list(teal.enable_deep_linking = TRUE)`). Applied at session + #' start so option-gated server logic sees them. #' @param ... Additional arguments to be passed to `shinytest2::AppDriver$new` #' #' @@ -78,9 +76,6 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. } app <- if (is.function(app)) { - # The function is serialized to the background process. Detach it from the calling - # environment so that it doesn't reference (and load) the installed package namespace - # before `library()` is called inside the function. environment(app) <- globalenv() wrapper <- function() NULL # shinytest2 only runs the result of the function if it is a `shiny.appobj`. diff --git a/man/TealAppDriver.Rd b/man/TealAppDriver.Rd index e3f6d305ac..fef247e1f1 100644 --- a/man/TealAppDriver.Rd +++ b/man/TealAppDriver.Rd @@ -100,17 +100,15 @@ driving a teal application for performing interactions for \code{shinytest2} tes This value can be 2 different things: \itemize{ \item A \code{teal_app} object, which is the result of calling \code{teal::init()}. -\item A function that returns a \code{teal_app} (or a \code{shiny.appobj}) object. -The function is executed in the background R process, so it must be self-contained: -call \verb{library()} first and do not use objects defined outside of the function -(see \code{\link[shinytest2:AppDriver]{shinytest2::AppDriver}} \code{new} method). +\item A function that returns a \code{teal_app} object. The function runs in a separate R process, +so it must call \code{library(teal)} and not use objects defined outside of it. } Other values that \code{\link[shinytest2:AppDriver]{shinytest2::AppDriver}} \code{new()} functions accepts are not yet supported.} \item{\code{options}}{(\code{list}) passed to \code{shinyApp(options)}. See \code{\link[shiny:shinyApp]{shiny::shinyApp()}}.} \item{\code{teal_options}}{(\code{list}) named list of R options to set inside the spawned -Shiny process (e.g. \code{list(teal.enable_deep_linking = TRUE)}). Applied before the app -is created, so option-gated logic in \code{init()} and in the server sees them.} +Shiny process (e.g. \code{list(teal.enable_deep_linking = TRUE)}). Applied at session +start so option-gated server logic sees them.} \item{\code{timeout}}{(\code{numeric}) Default number of milliseconds for any timeout or timeout_ parameter in the \code{TealAppDriver} class. Defaults to 20s. diff --git a/tests/testthat/test-shinytest2-init.R b/tests/testthat/test-shinytest2-init.R index ffa56bcc23..f30cae90b0 100644 --- a/tests/testthat/test-shinytest2-init.R +++ b/tests/testthat/test-shinytest2-init.R @@ -147,3 +147,61 @@ testthat::describe("e2e: init reporter buttons", { testthat::expect_length(app_driver$get_text(".report_add_wrapper .teal-reporter.action-button"), 0) }) }) + +testthat::describe("e2e: TealAppDriver accepts a function that creates the app", { + it("initializes a teal_app returned by the function", { + skip_if_too_deep(5) + app_driver <- TealAppDriver$new( + function() { + library(teal) + init( + data = teal_data(iris = iris), + modules = modules(example_module(label = "mod1"), example_module(label = "mod2")) + ) + } + ) + withr::defer(app_driver$stop()) + + app_driver$expect_no_shiny_error() + testthat::expect_equal(app_driver$get_value(input = "teal-teal_modules-active_module_id"), "mod1") + testthat::expect_identical(app_driver$get_active_filter_vars(), "iris") + }) + + it("initializes a shiny.appobj returned by the function", { + skip_if_too_deep(5) + app_driver <- TealAppDriver$new( + function() { + library(teal) + app <- init(data = teal_data(iris = iris), modules = example_module(label = "mod1")) + shiny::shinyApp(ui = app$ui, server = app$server) + } + ) + withr::defer(app_driver$stop()) + + app_driver$expect_no_shiny_error() + testthat::expect_equal(app_driver$get_value(input = "teal-teal_modules-active_module_id"), "mod1") + }) + + it("applies teal_options in the app process", { + skip_if_too_deep(5) + app_driver <- TealAppDriver$new( + function() { + library(teal) + init( + data = teal_data(iris = iris), + modules = modules(example_module(label = "mod1"), example_module(label = "mod2")) + ) + }, + teal_options = list(teal.enable_deep_linking = TRUE) + ) + withr::defer(app_driver$stop()) + + app_driver$navigate_teal_tab("mod2") + + testthat::expect_match(app_driver$get_js("window.location.href"), "active_module=mod2") + }) +}) + +testthat::test_that("TealAppDriver throws an error when app is neither a teal_app nor a function", { + testthat::expect_error(TealAppDriver$new("path/to/app"), "app") +}) From 125c47a1119719ae6da78b6c28b1c9e92326ed83 Mon Sep 17 00:00:00 2001 From: "Bingjun (Benjamin) Wang" Date: Wed, 28 Oct 2026 18:05:35 -0700 Subject: [PATCH 6/8] resolve comments --- R/TealAppDriver.R | 24 +++++++++++++----------- tests/testthat/test-shinytest2-init.R | 27 +++++++++++---------------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/R/TealAppDriver.R b/R/TealAppDriver.R index c6c0304feb..3eaea2c636 100644 --- a/R/TealAppDriver.R +++ b/R/TealAppDriver.R @@ -76,18 +76,20 @@ TealAppDriver <- R6::R6Class( # nolint: object_name. } app <- if (is.function(app)) { + # Avoid serializing the teal namespace, so the background process loads the dev package. environment(app) <- globalenv() - wrapper <- function() NULL - # shinytest2 only runs the result of the function if it is a `shiny.appobj`. - body(wrapper) <- rlang::expr({ - x <- (!!app)() - if (inherits(x, "teal_app")) { - x <- shiny::shinyApp(ui = x$ui, server = x$server, options = !!options) - } - x - }) - environment(wrapper) <- globalenv() - wrapper + # shinytest2 only runs the function's result if it is a `shiny.appobj`; + # `init()` returns a `teal_app`, so convert it in the background process. + local( + function() { + x <- app_fun() + if (inherits(x, "teal_app")) { + x <- shiny::shinyApp(ui = x$ui, server = x$server, options = shiny_options) + } + x + }, + envir = list2env(list(app_fun = app, shiny_options = options), parent = globalenv()) + ) } else { shiny::shinyApp(ui = app$ui, server = app$server, options = options) } diff --git a/tests/testthat/test-shinytest2-init.R b/tests/testthat/test-shinytest2-init.R index f30cae90b0..7a7fa0fad1 100644 --- a/tests/testthat/test-shinytest2-init.R +++ b/tests/testthat/test-shinytest2-init.R @@ -148,16 +148,13 @@ testthat::describe("e2e: init reporter buttons", { }) }) -testthat::describe("e2e: TealAppDriver accepts a function that creates the app", { - it("initializes a teal_app returned by the function", { +testthat::describe("e2e: TealAppDriver with a function as `app`", { + it("starts the app when the function returns a teal_app", { skip_if_too_deep(5) app_driver <- TealAppDriver$new( function() { library(teal) - init( - data = teal_data(iris = iris), - modules = modules(example_module(label = "mod1"), example_module(label = "mod2")) - ) + init(data = teal_data(iris = iris), modules = example_module(label = "mod1")) } ) withr::defer(app_driver$stop()) @@ -167,7 +164,7 @@ testthat::describe("e2e: TealAppDriver accepts a function that creates the app", testthat::expect_identical(app_driver$get_active_filter_vars(), "iris") }) - it("initializes a shiny.appobj returned by the function", { + it("starts the app when the function returns a shiny.appobj", { skip_if_too_deep(5) app_driver <- TealAppDriver$new( function() { @@ -182,26 +179,24 @@ testthat::describe("e2e: TealAppDriver accepts a function that creates the app", testthat::expect_equal(app_driver$get_value(input = "teal-teal_modules-active_module_id"), "mod1") }) - it("applies teal_options in the app process", { + it("sets teal_options in the app process", { skip_if_too_deep(5) app_driver <- TealAppDriver$new( function() { library(teal) - init( - data = teal_data(iris = iris), - modules = modules(example_module(label = "mod1"), example_module(label = "mod2")) - ) + init(data = teal_data(iris = iris), modules = example_module(label = "mod1")) }, teal_options = list(teal.enable_deep_linking = TRUE) ) withr::defer(app_driver$stop()) - app_driver$navigate_teal_tab("mod2") - - testthat::expect_match(app_driver$get_js("window.location.href"), "active_module=mod2") + testthat::expect_match(app_driver$get_js("window.location.href"), "active_module=mod1") }) }) testthat::test_that("TealAppDriver throws an error when app is neither a teal_app nor a function", { - testthat::expect_error(TealAppDriver$new("path/to/app"), "app") + testthat::expect_error( + TealAppDriver$new("path/to/app"), + "Must be a function.*Must inherit from class 'teal_app'" + ) }) From 51b9b71c276a88be6183bd00b99783cfb139d240 Mon Sep 17 00:00:00 2001 From: "Bingjun (Benjamin) Wang" Date: Thu, 29 Oct 2026 15:01:43 -0700 Subject: [PATCH 7/8] Update teal.slice URL in teal_slices docs Co-Authored-By: Claude Opus 5.5 --- man/teal_slices.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/teal_slices.Rd b/man/teal_slices.Rd index 1ef8b0b452..4e46b6c458 100644 --- a/man/teal_slices.Rd +++ b/man/teal_slices.Rd @@ -29,7 +29,7 @@ match names of data sets and vector elements match variable names in respective specify which variables are allowed to be filtered; see \code{Details}.} \item{count_type}{\emph{This is a new feature. Do kindly share your opinions on -\href{https://github.com/insightsengineering/teal.slice/}{\code{teal.slice}'s GitHub repository}.} +\href{https://github.com/pharmaverse/teal.slice/}{\code{teal.slice}'s GitHub repository}.} (\code{character(1)}) string specifying how observations are tallied by these filter states. Possible options: From 82fee4d651024d083c260588183e1064a6c5c5e6 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 29 Oct 2026 22:05:02 +0000 Subject: [PATCH 8/8] [skip roxygen] [skip vbump] Roxygen Man Pages Auto Update --- man/teal_slices.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/teal_slices.Rd b/man/teal_slices.Rd index 4e46b6c458..1ef8b0b452 100644 --- a/man/teal_slices.Rd +++ b/man/teal_slices.Rd @@ -29,7 +29,7 @@ match names of data sets and vector elements match variable names in respective specify which variables are allowed to be filtered; see \code{Details}.} \item{count_type}{\emph{This is a new feature. Do kindly share your opinions on -\href{https://github.com/pharmaverse/teal.slice/}{\code{teal.slice}'s GitHub repository}.} +\href{https://github.com/insightsengineering/teal.slice/}{\code{teal.slice}'s GitHub repository}.} (\code{character(1)}) string specifying how observations are tallied by these filter states. Possible options: