Compare commits

..

1 Commits

Author SHA1 Message Date
Carson
fba4680734 Fix/update news 2022-06-14 09:16:57 -05:00
199 changed files with 18384 additions and 10992 deletions

View File

@@ -6,6 +6,7 @@ extends:
- 'eslint:recommended'
- 'plugin:@typescript-eslint/recommended'
- 'plugin:jest/recommended'
- 'prettier/@typescript-eslint'
- 'plugin:prettier/recommended'
- 'plugin:jest-dom/recommended'
globals:
@@ -44,6 +45,9 @@ rules:
semi:
- error
- always
newline-after-var:
- error
- always
dot-location:
- error
- property
@@ -60,7 +64,6 @@ rules:
- error
- default: array-simple
readonly: array-simple
"@typescript-eslint/consistent-indexed-object-style":
- error
- index-signature

View File

@@ -21,5 +21,3 @@ jobs:
node-version: "14.x"
R-CMD-check:
uses: rstudio/shiny-workflows/.github/workflows/R-CMD-check.yaml@v1
with:
cache-version: "2.1"

55
.yarn/releases/yarn-2.4.0.cjs vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -6,4 +6,4 @@ plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
yarnPath: .yarn/releases/yarn-3.2.3.cjs
yarnPath: .yarn/releases/yarn-2.4.0.cjs

View File

@@ -1,7 +1,7 @@
Package: shiny
Type: Package
Title: Web Application Framework for R
Version: 1.7.4.9001
Version: 1.7.1.9003
Authors@R: c(
person("Winston", "Chang", role = c("aut", "cre"), email = "winston@rstudio.com", comment = c(ORCID = "0000-0002-1576-2126")),
person("Joe", "Cheng", role = "aut", email = "joe@rstudio.com"),
@@ -78,8 +78,8 @@ Imports:
mime (>= 0.3),
jsonlite (>= 0.9.16),
xtable,
fontawesome (>= 0.4.0),
htmltools (>= 0.5.4),
fontawesome (>= 0.2.1),
htmltools (>= 0.5.2),
R6 (>= 2.0),
sourcetools,
later (>= 1.0.0),
@@ -198,14 +198,13 @@ Collate:
'version_bs_date_picker.R'
'version_ion_range_slider.R'
'version_jquery.R'
'version_jqueryui.R'
'version_selectize.R'
'version_strftime.R'
'viewer.R'
RoxygenNote: 7.2.3
RoxygenNote: 7.2.0
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RdMacros: lifecycle
Config/testthat/edition: 3
Config/Needs/check:
shinytest2
rstudio/shinytest2

302
NEWS.md
View File

@@ -1,94 +1,49 @@
# shiny 1.7.4.9001
shiny development
================
## Full changelog
### Breaking changes
### New features and improvements
* Closed #789: `<script>` loaded from dynamic UI are no longer loaded using synchronous `XMLHttpRequest` (via jQuery). (#3666)
### Bug fixes
# shiny 1.7.4
## Full changelog
### Breaking changes
* Closed #3719: Output container sizes, which are available via [`session$clientData` and `getCurrentOutputInfo()`](https://shiny.rstudio.com/articles/client-data.html), no longer round to the nearest pixel (i.e., they are now more exact, possibly fractional values). (#3720)
* Closed #3704, #3735, and #3740: `renderPlot()` no longer generates an error (or segfault) when it executes before the output is visible. Instead, it'll now use the graphics device's default size for it's initial size. Relatedly, `plotPNG()` now ignores `NULL` values for `width`/`height` (and uses the device's default `width`/`height` instead). (#3739)
### New features and improvements
* `plotOutput()`, `imageOutput()`, and `uiOutput()` gain a `fill` argument. If `TRUE` (the default for `plotOutput()`), the output container is allowed to grow/shrink to fit a fill container (created via `htmltools::bindFillRole()`) with an opinionated height. This means `plotOutput()` will grow/shrink by default [inside of `bslib::card_body_fill()`](https://rstudio.github.io/bslib/articles/cards.html#responsive-sizing), but `imageOutput()` and `uiOutput()` will have to opt-in to similar behavior with `fill = TRUE`. (#3715)
* Closed #3687: Updated jQuery-UI to v1.13.2. (#3697)
* Internal: Added clearer and strict TypeScript type definitions (#3644)
# shiny 1.7.3
### Bug fixes
* Shiny 1.7.0 changed the `icon(lib="fontawesome")` implementation from a bundled copy of fontawesome, to the {fontawesome} package. This led to issue #3688, where icons that were previously working, were now breaking. That's because {fontawesome} 0.3.0 and earlier did not have support for icon names used in Font Awesome 5 and earlier, only the newest icon names used in Font Awesome 6. Now, {fontawesome} 0.4.0 has restored support for those older icon names, and Shiny 1.7.2.1 has updated its {fontawesome} requirement to >=0.4.0.
# shiny 1.7.2
## Full changelog
### Breaking changes
* Closed #3626: `renderPlot()` (and `plotPNG()`) now uses `ragg::agg_png()` by default when the [`{ragg}` package](https://github.com/r-lib/ragg) is installed. To restore the previous behavior, set `options(shiny.useragg = FALSE)`. (#3654)
### New features and improvements
* Closed #1545: `insertUI()` now executes `<script>` tags. (#3630)
* `fileInput()` can set the `capture` attribute to facilitates user access to a device's media capture mechanism, such as a camera, or microphone, from within a file upload control ([W3C HTML Media Capture](https://www.w3.org/TR/html-media-capture/)). (Thanks to khaled-alshamaa, #3481)
* Closed tidyverse/dplyr#5552: Compatibility of dplyr 1.0 (and rlang chained errors in general) with `req()`, `validate()`, and friends.
* Closed tidyverse/dplyr#6154: Values from an `actionButton()` had S3 classes in the incorrect order.
* Closed #3346: Default for `ref` input in `runGithub()` changed from `"master"` to `"HEAD"`. (#3564)
* Closed #3619: In R 4.2, `splitLayout()` no longer raises warnings about incorrect length in an `if` statement. (Thanks to @dmenne, #3625)
### Bug fixes
* Closed #3250:`{rlang}`/`{tidyeval}` conditions (i.e., warnings and errors) are no longer filtered from stack traces. (#3602)
* Closed #3581: Errors in throttled/debounced reactive expressions no longer cause the session to exit. (#3624)
* Closed #3657: `throttle.ts` and the `Throttler` typescript objects it provides now function as intended. (Thanks gto @dvg-p4, #3659)
* The auto-reload feature (`options(shiny.autoreload=TRUE)`) was not being activated by `devmode(TRUE)`, despite a console message asserting that it was. (#3620)
* Closed #2297: If an error occurred in parsing a value in a bookmark query string, an error would be thrown and nothing would be restored. Now a message is displayed and that value is ignored. (Thanks to @daattali, #3385)
* Restored the previous behavior of automatically guessing the `Content-Type` header for `downloadHandler` functions when no explicit `contentType` argument is supplied. (#3393)
* Previously, updating an input value without a corresponding Input binding element did not trigger a JavaScript `shiny:inputchanged` event. Now, if no Input binding element is found, the `shiny:inputchanged` event is triggered on `window.document`. (#3584)
* Closed #2955: Input and output bindings previously attempted to use `el['data-input-id']`, but that never worked. They now use `el.getAttribute('data-input-id')` instead. (#3538)
### Minor improvements
* When taking a test snapshot, the sort order of the json keys of the `input`, `output`, and `export` fields is currently sorted using the locale of the machine. This can lead to inconsistent test snapshot results. To opt-in to a consistent ordering of snapshot fields with `{shinytest}`, please set the global option `options(shiny.snapshotsortc = TRUE)`. `{shinytest2}` users do not need to set this value. (#3515)
* Closed rstudio/shinytest2#222: When restoring a context (i.e., bookmarking) from a URL, Shiny now better handles a trailing `=` after `_inputs_` and `_values_`. (#3648)
### Minor new features and improvements
* Shiny's internal HTML dependencies are now mounted dynamically instead of statically. (#3537)
* HTML dependencies that are sent to dynamic UI now have better type checking, and no longer require a `dep.src.href` field. (#3537)
* Default for `ref` input in `runGithub()` changed from `"master"` to `"HEAD"`. (#3346)
# shiny 1.7.1
* When taking a test snapshot, the sort order of the json keys of the `input`, `output`, and `export` fields is currently sorted using the locale of the machine. This can lead to inconsistent test snapshot results. To opt-in to a consistent ordering of snapshot fields with `{shinytest}`, please set the global option `options(shiny.snapshotsortc = TRUE)`. `{shinytest2}` users do not need to set this value. (#3515)
* The auto-reload feature (`options(shiny.autoreload=TRUE)`) was not being activated by `devmode(TRUE)`, despite a console message asserting that it was. (#3620)
* Add `shiny.mathjax.url` and `shiny.mathjax.config` options for configuring the MathJax URL used by `withMathJax`. Thanks, @Neutron3529! (#3639)
### Bug fixes
* Closed tidyverse/dplyr#5552: Compatibility of dplyr 1.0 (and rlang chained errors in general) with `req()`, `validate()`, and friends.
* Closed #1545: `insertUI()` now executes `<script>` tags. (#3630)
* Closed #2955: Input and output bindings previously attempted to use `el['data-input-id']`, but that never worked. They now use `el.getAttribute('data-input-id')` instead. (#3538)
* Closed tidyverse/dplyr#6154: Values from an `actionButton()` had S3 classes in the incorrect order.
* Fixed a bug where updating an input value without a corresponding Input binding element did not trigger a JavaScript `shiny:inputchanged` event. Now, if no Input binding element is found, the `shiny:inputchanged` event is triggered on `window.document`. (#3584)
* Restored the previous behavior of automatically guessing the `Content-Type` header for `downloadHandler` functions when no explicit `contentType` argument is supplied. (#3393)
* Closed #3619: In R 4.2, `splitLayout()` raised warnings about incorrect length in an `if` statement. (Thanks to @dmenne, #3625)
* Closed #2297: If an error occurred in parsing a value in a bookmark query string, an error would be thrown and nothing would be restored. Now a message is displayed and that value is ignored. (Thanks to @daattali, #3385)
* `fileInput()` can set the `capture` attribute to facilitates user access to a device's media capture mechanism, such as a camera, or microphone, from within a file upload control ([W3C HTML Media Capture](https://www.w3.org/TR/html-media-capture/)). (Thanks to khaled-alshamaa, #3481)
* Fixed rstudio/shinytest2#222: When restoring a context (i.e., bookmarking) from a URL, Shiny now better handles a trailing `=` after `_inputs_` and `_values_`. (#3648)
shiny 1.7.1
===========
## Bug Fixes
@@ -97,7 +52,8 @@
* Re-arranged conditions for testthat 1.0.0 compatibility. (#3512)
# shiny 1.7.0
shiny 1.7.0
===========
## Full changelog
@@ -154,7 +110,8 @@
* Updated to jQuery 3.6.0. (#3311)
# shiny 1.6.0
shiny 1.6.0
===========
This release focuses on improvements in three main areas:
@@ -263,7 +220,8 @@ This release focuses on improvements in three main areas:
* Removed es5-shim library, which was internally used within `selectInput()` for ECMAScript 5 compatibility. (#2993)
# shiny 1.5.0
shiny 1.5.0
===========
## Full changelog
@@ -316,17 +274,20 @@ This release focuses on improvements in three main areas:
* Updated from Font-Awesome 5.3.1 to 5.13.0, which includes icons related to COVID-19. For upgrade notes, see https://github.com/FortAwesome/Font-Awesome/blob/master/UPGRADING.md. (#2891)
# shiny 1.4.0.2
shiny 1.4.0.2
===========
Minor patch release: fixed some timing-dependent tests failed intermittently on CRAN build machines.
# shiny 1.4.0.1
shiny 1.4.0.1
===========
Minor patch release to account for changes to the grid package that will be upcoming in the R 4.0 release (#2776).
# shiny 1.4.0
shiny 1.4.0
===========
## Full changelog
@@ -389,7 +350,8 @@ Minor patch release to account for changes to the grid package that will be upco
* Fixed #2329, #1817: These bugs were reported as fixed in Shiny 1.3.0 but were not actually fixed because some JavaScript changes were accidentally not included in the release. The fix resolves issues that occur when `withProgressBar()` or bookmarking are combined with the [networkD3](https://christophergandrud.github.io/networkD3/) package's Sankey plot.
# shiny 1.3.2
shiny 1.3.2
===========
### Bug fixes
@@ -398,7 +360,8 @@ Minor patch release to account for changes to the grid package that will be upco
* Fixed #2280: Shiny applications that used a www/index.html file did not serve up the index file. (#2382)
# shiny 1.3.1
shiny 1.3.1
===========
## Full changelog
@@ -407,7 +370,8 @@ Minor patch release to account for changes to the grid package that will be upco
* Fixed a performance issue introduced in v1.3.0 when using large nested lists within Shiny. (#2377)
# shiny 1.3.0
shiny 1.3.0
===========
## Full changelog
@@ -438,7 +402,8 @@ Minor patch release to account for changes to the grid package that will be upco
* Fixed #2247: `renderCachedPlot` now supports using promises for either `expr` or `cacheKeyExpr`. (Shiny v1.2.0 supported async `expr`, but only if `cacheKeyExpr` was async as well; now you can use any combination of sync/async for `expr` and `cacheKeyExpr`.) #2261
# shiny 1.2.0
shiny 1.2.0
===========
This release features plot caching, an important new tool for improving performance and scalability. Using `renderCachedPlot` in place of `renderPlot` can greatly improve responsiveness for apps that show the same plot many times (for example, a dashboard or report where all users view the same data). Shiny gives you a fair amount of control in where the cache is stored and how cached plots are invalidated, so be sure to read [this article](https://shiny.rstudio.com/articles/plot-caching.html) to get the most out of this feature.
@@ -503,7 +468,8 @@ This release features plot caching, an important new tool for improving performa
* Addressed #1864 by changing `optgroup` documentation to use `list` instead of `c`. (#2084)
# shiny 1.1.0
shiny 1.1.0
===========
This is a significant release for Shiny, with a major new feature that was nearly a year in the making: support for asynchronous operations! Until now, R's single-threaded nature meant that performing long-running calculations or tasks from Shiny would bring your app to a halt for other users of that process. This release of Shiny deeply integrates the [promises](https://rstudio.github.io/promises/) package to allow you to execute some tasks asynchronously, including as part of reactive expressions and outputs. See the [promises](https://rstudio.github.io/promises/) documentation to learn more.
@@ -539,7 +505,7 @@ This is a significant release for Shiny, with a major new feature that was nearl
* Removed the (ridiculously outdated) "experimental feature" tag from the reference documentation for `renderUI`. (#2036)
* Addressed #1907: the `ignoreInit` argument was first added only to `observeEvent`. Later, we also added it to `eventReactive`, but forgot to update the documentation. Now done, thanks @flo12392! (#2036)
* Addressed #1907: the `ignoreInit` argument was first added only to `observeEvent`. Later, we also added it to `eventReactive`, but forgot to update the documentation. Now done, thanks [@flo12392](https://github.com/flo12392)! (#2036)
### Bug fixes
@@ -553,7 +519,7 @@ This is a significant release for Shiny, with a major new feature that was nearl
* Fixed #1600: URL-encoded bookmarking did not work with sliders that had dates or date-times. (#1961)
* Fixed #1962: [File dragging and dropping](https://www.rstudio.com/blog/shiny-1-0-4/) broke in the presence of jQuery version 3.0 as introduced by the [rhandsontable](https://jrowen.github.io/rhandsontable/) [htmlwidget](https://www.htmlwidgets.org/). (#2005)
* Fixed #1962: [File dragging and dropping](https://blog.rstudio.com/2017/08/15/shiny-1-0-4/) broke in the presence of jQuery version 3.0 as introduced by the [rhandsontable](https://jrowen.github.io/rhandsontable/) [htmlwidget](https://www.htmlwidgets.org/). (#2005)
* Improved the error handling inside the `addResourcePath()` function, to give end users more informative error messages when the `directoryPath` argument cannot be normalized. This is especially useful for `runtime: shiny_prerendered` Rmd documents, like `learnr` tutorials. (#1968)
@@ -576,7 +542,8 @@ This is a significant release for Shiny, with a major new feature that was nearl
In some rare cases, interrupting an application (by pressing Ctrl-C or Esc) may result in the message `Error in execCallbacks(timeoutSecs) : c++ exception (unknown reason)`. Although this message sounds alarming, it is harmless, and will go away in a future version of the later package (more information [here](https://github.com/r-lib/later/issues/55)).
# shiny 1.0.5
shiny 1.0.5
===========
## Full changelog
@@ -589,7 +556,8 @@ In some rare cases, interrupting an application (by pressing Ctrl-C or Esc) may
* Fixed #1824: HTTP HEAD requests on static files caused the application to stop. (#1825)
# shiny 1.0.4
shiny 1.0.4
===========
There are three headlining features in this release of Shiny. It is now possible to add and remove tabs from a `tabPanel`; there is a new function, `onStop()`, which registers callbacks that execute when an application exits; and `fileInput`s now can have files dragged and dropped on them. In addition to these features, this release has a number of minor features and bug fixes. See the full changelog below for more details.
@@ -650,7 +618,8 @@ There are three headlining features in this release of Shiny. It is now possible
* Fixed #1474: A `browser()` call in an observer could cause an error in the RStudio IDE on Windows. (#1802)
# shiny 1.0.3
shiny 1.0.3
================
This is a hotfix release of Shiny. With previous versions of Shiny, when running an application on the newly-released version of R, 3.4.0, it would print a message: `Warning in body(fun) : argument is not a function`. This has no effect on the application, but because the message could be alarming to users, we are releasing a new version of Shiny that fixes this issue.
@@ -663,7 +632,8 @@ This is a hotfix release of Shiny. With previous versions of Shiny, when running
* Fixed #1676: On R 3.4.0, running a Shiny application gave a warning: `Warning in body(fun) : argument is not a function`. (#1677)
# shiny 1.0.2
shiny 1.0.2
================
This is a hotfix release of Shiny. The primary reason for this release is because the web host for MathJax JavaScript library is scheduled to be shut down in the next few weeks. After it is shut down, Shiny applications that use MathJax will no longer be able to load the MathJax library if they are run with Shiny 1.0.1 and below. (If you don't know whether your application uses MathJax, it probably does not.) For more information about why the MathJax CDN is shutting down, see https://www.mathjax.org/cdn-shutting-down/.
@@ -682,7 +652,8 @@ This is a hotfix release of Shiny. The primary reason for this release is becaus
* Fixed #1653: wrong code example in documentation. (#1658)
# shiny 1.0.1
shiny 1.0.1
================
This is a maintenance release of Shiny, mostly aimed at fixing bugs and introducing minor features. The most notable additions in this version of Shiny are the introduction of the `reactiveVal()` function (it's like `reactiveValues()`, but it only stores a single value), and that the choices of `radioButtons()` and `checkboxGroupInput()` can now contain HTML content instead of just plain text.
@@ -752,7 +723,8 @@ in shiny apps. For more info, see the documentation (`?updateQueryString` and `?
* Closed #1500: Updated ion.rangeSlider to 2.1.6. (#1540)
# shiny 1.0.0
shiny 1.0.0
===========
Shiny has reached a milestone: version 1.0.0! In the last year, we've added two major features that we considered essential for a 1.0.0 release: bookmarking, and support for testing Shiny applications. As usual, this version of Shiny also includes many minor features and bug fixes.
@@ -817,7 +789,8 @@ Now there's an official way to slow down reactive values and expressions that in
* Updated to Font Awesome 4.7.0.
# shiny 0.14.2
shiny 0.14.2
============
This is a maintenance release of Shiny, with some bug fixes and minor new features.
@@ -845,7 +818,8 @@ This is a maintenance release of Shiny, with some bug fixes and minor new featur
* Fixed a bug where, in versions of R before 3.2, Shiny applications could crash due to a bug in R's implementation of `list2env()`. (#1446)
# shiny 0.14.1
shiny 0.14.1
============
This is a maintenance release of Shiny, with some bug fixes and minor new features.
@@ -875,7 +849,8 @@ This is a maintenance release of Shiny, with some bug fixes and minor new featur
* Updated to jQuery UI 1.12.1. Previously, Shiny included a build of 1.11.4 which was missing the datepicker component due to a conflict with the bootstrap-datepicker used by Shiny's `dateInput()` and `dateRangeInput()`. (#1374)
# shiny 0.14
shiny 0.14
==========
A new Shiny release is upon us! There are many new exciting features, bug fixes, and library updates. We'll just highlight the most important changes here, but you can browse through the full changelog below for details. This will likely be the last release before shiny 1.0, so get out your party hats!
@@ -1074,12 +1049,14 @@ There are many more minor features, small improvements, and bug fixes than we ca
* Updated to jQuery 1.12.4.
# shiny 0.13.2
shiny 0.13.2
============
* Updated documentation for `htmlTemplate`.
# shiny 0.13.1
shiny 0.13.1
============
* `flexCol` did not work on RStudio for Windows or Linux.
@@ -1088,7 +1065,8 @@ There are many more minor features, small improvements, and bug fixes than we ca
* BREAKING CHANGE: The long-deprecated ability to pass functions (rather than expressions) to reactive() and observe() has finally been removed.
# shiny 0.13.0
shiny 0.13.0
============
* Fixed #962: plot interactions did not work with the development version of ggplot2 (after ggplot2 1.0.1).
@@ -1139,7 +1117,8 @@ There are many more minor features, small improvements, and bug fixes than we ca
* Added support for the new htmltools 0.3 feature `htmlTemplate`. It's now possible to use regular HTML markup to design your UI, but still use R expressions to define inputs, outputs, and HTML widgets.
# shiny 0.12.2
shiny 0.12.2
============
* GitHub changed URLs for gists from .tar.gz to .zip, so `runGist` was updated to work with the new URLs.
@@ -1162,14 +1141,16 @@ There are many more minor features, small improvements, and bug fixes than we ca
* Shiny now correctly handles HTTP HEAD requests. (#876)
# shiny 0.12.1
shiny 0.12.1
============
* Fixed an issue where unbindAll() causes subsequent bindAll() to be ignored for previously bound outputs. (#856)
* Undeprecate `dataTableOutput` and `renderDataTable`, which had been deprecated in favor of the new DT package. The DT package is a bit too new and has a slightly different API, we were too hasty in deprecating the existing Shiny functions.
# shiny 0.12.0
shiny 0.12.0
============
In addition to the changes listed below (in the *Full Changelog* section), there is an infrastructure change that could affect existing Shiny apps.
@@ -1225,7 +1206,8 @@ Shiny 0.12.0 deprecated Shiny's dataTableOutput and renderDataTable functions an
* renderDataTable() and dataTableOutput() have been deprecated in shiny and will be removed in future versions of shiny. Please use the DT package instead: http://rstudio.github.io/DT/ (#807)
# shiny 0.11.1
shiny 0.11.1
============
* Major client-side performance improvements for pages that have many conditionalPanels, tabPanels, and plotOutputs. (#693, #717, #723)
@@ -1252,7 +1234,8 @@ Shiny 0.12.0 deprecated Shiny's dataTableOutput and renderDataTable functions an
* downloadHandler content callback functions are now invoked with a temp file name that has the same extension as the final filename that will be used by the download. This is to deal with the fact that some file writing functions in R will auto-append the extension for their file type (pdf, zip).
# shiny 0.11
shiny 0.11
==========
Shiny 0.11 switches away from the Bootstrap 2 web framework to the next version, Bootstrap 3. This is in part because Bootstrap 2 is no longer being developed, and in part because it allows us to tap into the ecosystem of Bootstrap 3 themes.
@@ -1330,17 +1313,20 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Password input fields can now be used, with `passwordInput()`. (#672)
# shiny 0.10.2.2
shiny 0.10.2.2
==============
* Remove use of `rstudio::viewer` in a code example, for R CMD check.
# shiny 0.10.2.1
shiny 0.10.2.1
==============
* Changed some examples to use \donttest instead of \dontrun.
# shiny 0.10.2
shiny 0.10.2
============
* The minimal version of R required for the shiny package is 3.0.0 now.
@@ -1373,7 +1359,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Added `position` parameter to `navbarPage`.
# shiny 0.10.1
shiny 0.10.1
============
* Added Unicode support for Windows. Shiny apps running on Windows must use the UTF-8 encoding for ui.R and server.R (also the optional global.R) if they contain non-ASCII characters. See this article for details and examples: http://shiny.rstudio.com/gallery/unicode-characters.html (#516)
@@ -1386,7 +1373,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Added support for option groups in the select/selectize inputs. When the `choices` argument for `selectInput()`/`selectizeInput()` is a list of sub-lists and any sub-list is of length greater than 1, the HTML tag `<optgroup>` will be used. See an example at http://shiny.rstudio.com/gallery/option-groups-for-selectize-input.html (#542)
# shiny 0.10.0
shiny 0.10.0
============
* BREAKING CHANGE: By default, observers now terminate themselves if they were created during a session and that session ends. See ?domains for more details.
@@ -1423,12 +1411,14 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* `runGitHub()` can also take a value of the form "username/repo" in its first argument, e.g. both runGitHub("shiny_example", "rstudio") and runGitHub("rstudio/shiny_example") are valid ways to run the GitHub repo.
# shiny 0.9.1
shiny 0.9.1
===========
* Fixed warning 'Error in Context$new : could not find function "loadMethod"' that was happening to dependent packages on "R CMD check".
# shiny 0.9.0
shiny 0.9.0
===========
* BREAKING CHANGE: Added a `host` parameter to runApp() and runExample(), which defaults to the shiny.host option if it is non-NULL, or "127.0.0.1" otherwise. This means that by default, Shiny applications can only be accessed on the same machine from which they are served. To allow other clients to connect, as in previous versions of Shiny, use "0.0.0.0" (or the IP address of one of your network interfaces, if you care to be explicit about it).
@@ -1501,7 +1491,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Dots are now legal characters for inputId/outputId. (Thanks, Kevin Lindquist. #358)
# shiny 0.8.0
shiny 0.8.0
===========
* Debug hooks are registered on all user-provided functions and (reactive) expressions (e.g., in renderPlot()), which makes it possible to set breakpoints in these functions using the latest version of the RStudio IDE, and the RStudio visual debugging tools can be used to debug Shiny apps. Internally, the registration is done via installExprFunction(), which is a new function introduced in this version to replace exprToFunction() so that the registration can be automatically done.
@@ -1520,7 +1511,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* The minimal required version for the httpuv package was increased to 1.2 (on CRAN now).
# shiny 0.7.0
shiny 0.7.0
===========
* Stopped sending websocket subprotocol. This fixes a compatibility issue with Google Chrome 30.
@@ -1549,7 +1541,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Add shiny.sharedSecret option, to require the HTTP header Shiny-Shared-Secret to be set to the given value.
# shiny 0.6.0
shiny 0.6.0
===========
* `tabsetPanel()` can be directed to start with a specific tab selected.
@@ -1580,7 +1573,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Shiny apps can be run without a server.r and ui.r file.
# shiny 0.5.0
shiny 0.5.0
===========
* Switch from websockets package for handling websocket connections to httpuv.
@@ -1597,14 +1591,16 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Fix bug #55, where `renderTable()` would throw error with an empty data frame.
# shiny 0.4.1
shiny 0.4.1
===========
* Fix bug where width and height weren't passed along properly from `reactivePlot` to `renderPlot`.
* Fix bug where infinite recursion would happen when `reactivePlot` was passed a function for width or height.
# shiny 0.4.0
shiny 0.4.0
===========
* Added suspend/resume capability to observers.
@@ -1619,7 +1615,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Fixed a bug where empty values in a numericInput were sent to the R process as 0. They are now sent as NA.
# shiny 0.3.1
shiny 0.3.1
===========
* Fix issue #91: bug where downloading files did not work.
@@ -1628,7 +1625,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Reactive functions now preserve the visible/invisible state of their returned values.
# shiny 0.3.0
shiny 0.3.0
===========
* Reactive functions are now evaluated lazily.
@@ -1653,44 +1651,52 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Fix issue #64, where pressing Enter in a textbox would cause a form to submit.
# shiny 0.2.4
shiny 0.2.4
===========
* `runGist` has been updated to use the new download URLs from https://gist.github.com.
* Shiny now uses `CairoPNG()` for output, when the Cairo package is available. This provides better-looking output on Linux and Windows.
# shiny 0.2.3
shiny 0.2.3
===========
* Ignore request variables for routing purposes
# shiny 0.2.2
shiny 0.2.2
===========
* Fix CRAN warning (assigning to global environment)
# shiny 0.2.1
shiny 0.2.1
===========
* [BREAKING] Modify API of `downloadHandler`: The `content` function now takes a file path, not writable connection, as an argument. This makes it much easier to work with APIs that only write to file paths, not connections.
# shiny 0.2.0
shiny 0.2.0
===========
* Fix subtle name resolution bug--the usual symptom being S4 methods not being invoked correctly when called from inside of ui.R or server.R
# shiny 0.1.14
shiny 0.1.14
===========
* Fix slider animator, which broke in 0.1.10
# shiny 0.1.13
shiny 0.1.13
===========
* Fix temp file leak in reactivePlot
# shiny 0.1.12
shiny 0.1.12
===========
* Fix problems with runGist on Windows
@@ -1699,7 +1705,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Add CSS hooks for app-wide busy indicators
# shiny 0.1.11
shiny 0.1.11
===========
* Fix input binding with IE8 on Shiny Server
@@ -1708,7 +1715,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Allow dynamic sizing of reactivePlot (i.e. using a function instead of a fixed value)
# shiny 0.1.10
shiny 0.1.10
===========
* Support more MIME types when serving out of www
@@ -1721,7 +1729,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Fix plot rendering with IE8 on Shiny Server
# shiny 0.1.9
shiny 0.1.9
===========
* Much less flicker when updating plots
@@ -1730,7 +1739,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Add `includeText`, `includeHTML`, and `includeMarkdown` functions for putting text, HTML, and Markdown content from external files in the application's UI.
# shiny 0.1.8
shiny 0.1.8
===========
* Add `runGist` function for conveniently running a Shiny app that is published on gist.github.com.
@@ -1743,7 +1753,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Add `bootstrapPage` function for creating new Bootstrap based layouts from scratch.
# shiny 0.1.7
shiny 0.1.7
===========
* Fix issue #26: Shiny.OutputBindings not correctly exported.
@@ -1752,7 +1763,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Transcode JSON into UTF-8 (prevents non-ASCII reactivePrint values from causing errors on Windows).
# shiny 0.1.6
shiny 0.1.6
===========
* Import package dependencies, instead of attaching them (with the exception of websockets, which doesn't currently work unless attached).
@@ -1761,7 +1773,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* bindAll was not correctly sending initial values to the server; fixed.
# shiny 0.1.5
shiny 0.1.5
===========
* BREAKING CHANGE: JS APIs Shiny.bindInput and Shiny.bindOutput removed and replaced with Shiny.bindAll; Shiny.unbindInput and Shiny.unbindOutput removed and replaced with Shiny.unbindAll.
@@ -1776,7 +1789,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* htmlOutput (CSS class `shiny-html-output`) can contain inputs and outputs.
# shiny 0.1.4
shiny 0.1.4
===========
* Allow Bootstrap tabsets to act as reactive inputs; their value indicates which tab is active
@@ -1789,7 +1803,8 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Add Shiny.bindInputs(scope), .unbindInputs(scope), .bindOutputs(scope), and .unbindOutputs(scope) JS API calls to allow dynamic binding/unbinding of HTML elements
# shiny 0.1.3
shiny 0.1.3
===========
* Introduce Shiny.inputBindings.register JS API and InputBinding class, for creating custom input controls
@@ -1802,6 +1817,7 @@ Along with the release of Shiny 0.11, we've packaged up some Bootstrap 3 themes
* Fix issue #10: Plots in tabsets not rendered
# shiny 0.1.2
shiny 0.1.2
===========
* Initial private beta release!

View File

@@ -25,7 +25,6 @@
#' `- tests
#' |- testthat.R
#' `- testthat
#' |- setup-shinytest2.R
#' |- test-examplemodule.R
#' |- test-server.R
#' |- test-shinytest2.R
@@ -47,7 +46,6 @@
#' `tests/testthat/` directory using the
#' [shinytest2](https://rstudio.github.io/shinytest2/reference/test_app.html)
#' package.
#' * `tests/testthat/setup-shinytest2.R` is setup file to source your `./R` folder into the testing environment.
#' * `tests/testthat/test-examplemodule.R` is a test for an application's module server function.
#' * `tests/testthat/test-server.R` is a test for the application's server code
#' * `tests/testthat/test-shinytest2.R` is a test that uses the
@@ -128,7 +126,7 @@ shinyAppTemplate <- function(path = NULL, examples = "default", dryrun = FALSE)
}
if ("tests" %in% examples) {
rlang::check_installed("shinytest2", "for {testthat} tests to work as expected", version = "0.2.0")
rlang::check_installed("shinytest2", "for {testthat} tests to work as expected")
}
# =======================================================

View File

@@ -370,7 +370,7 @@ RestoreContext <- R6Class("RestoreContext",
safeFromJSON(value),
error = function(e) {
varsUnparsed <<- c(varsUnparsed, name)
warning("Failed to parse URL parameter \"", name, "\"")
message("Failed to parse URL parameter \"", name, "\"")
}
)
}

View File

@@ -794,7 +794,7 @@ verbatimTextOutput <- function(outputId, placeholder = FALSE) {
#' @export
imageOutput <- function(outputId, width = "100%", height="400px",
click = NULL, dblclick = NULL, hover = NULL, brush = NULL,
inline = FALSE, fill = FALSE) {
inline = FALSE) {
style <- if (!inline) {
# Using `css()` here instead of paste/sprintf so that NULL values will
@@ -850,8 +850,7 @@ imageOutput <- function(outputId, width = "100%", height="400px",
}
container <- if (inline) span else div
res <- do.call(container, args)
bindFillRole(res, item = fill)
do.call(container, args)
}
#' Create an plot or image output element
@@ -919,11 +918,6 @@ imageOutput <- function(outputId, width = "100%", height="400px",
#' `imageOutput`/`plotOutput` calls may share the same `id`
#' value; brushing one image or plot will cause any other brushes with the
#' same `id` to disappear.
#' @param fill Whether or not the returned tag should be treated as a fill item,
#' meaning that its `height` is allowed to grow/shrink to fit a fill container
#' with an opinionated height (see [htmltools::bindFillRole()]) with an
#' opinionated height. Examples of fill containers include `bslib::card()` and
#' `bslib::card_body_fill()`.
#' @inheritParams textOutput
#' @note The arguments `clickId` and `hoverId` only work for R base graphics
#' (see the \pkg{\link[graphics:graphics-package]{graphics}} package). They do
@@ -1094,11 +1088,11 @@ imageOutput <- function(outputId, width = "100%", height="400px",
#' @export
plotOutput <- function(outputId, width = "100%", height="400px",
click = NULL, dblclick = NULL, hover = NULL, brush = NULL,
inline = FALSE, fill = !inline) {
inline = FALSE) {
# Result is the same as imageOutput, except for HTML class
res <- imageOutput(outputId, width, height, click, dblclick,
hover, brush, inline, fill)
hover, brush, inline)
res$attribs$class <- "shiny-plot-output"
res
@@ -1141,21 +1135,15 @@ dataTableOutput <- function(outputId) {
#' Create an HTML output element
#'
#' Render a reactive output variable as HTML within an application page. The
#' text will be included within an HTML `div` tag, and is presumed to contain
#' HTML content which should not be escaped.
#' text will be included within an HTML `div` tag, and is presumed to
#' contain HTML content which should not be escaped.
#'
#' `uiOutput` is intended to be used with `renderUI` on the server side. It is
#' currently just an alias for `htmlOutput`.
#' `uiOutput` is intended to be used with `renderUI` on the server
#' side. It is currently just an alias for `htmlOutput`.
#'
#' @param outputId output variable to read the value from
#' @param ... Other arguments to pass to the container tag function. This is
#' useful for providing additional classes for the tag.
#' @param fill If `TRUE`, the result of `container` is treated as _both_ a fill
#' item and container (see [htmltools::bindFillRole()]), which means both the
#' `container` as well as its immediate children (i.e., the result of
#' `renderUI()`) are allowed to grow/shrink to fit a fill container with an
#' opinionated height. Set `fill = "item"` or `fill = "container"` to treat
#' `container` as just a fill item or a fill container.
#' @inheritParams textOutput
#' @return An HTML output element that can be included in a panel
#' @examples
@@ -1167,16 +1155,12 @@ dataTableOutput <- function(outputId) {
#' )
#' @export
htmlOutput <- function(outputId, inline = FALSE,
container = if (inline) span else div, fill = FALSE, ...)
container = if (inline) span else div, ...)
{
if (any_unnamed(list(...))) {
warning("Unnamed elements in ... will be replaced with dynamic UI.")
}
res <- container(id = outputId, class = "shiny-html-output", ...)
bindFillRole(
res, item = isTRUE(fill) || isTRUE("item" == fill),
container = isTRUE(fill) || isTRUE("container" == fill)
)
container(id = outputId, class="shiny-html-output", ...)
}
#' @rdname htmlOutput

View File

@@ -421,17 +421,8 @@ pruneStackTrace <- function(parents) {
# Loop over the parent indices. Anything that is not parented by current_node
# (a.k.a. last-known-good node), or is a dupe, can be discarded. Anything that
# is kept becomes the new current_node.
#
# jcheng 2022-03-18: Two more reasons a node can be kept:
# 1. parent is 0
# 2. parent is i
# Not sure why either of these situations happen, but they're common when
# interacting with rlang/dplyr errors. See issue rstudio/shiny#3250 for repro
# cases.
include <- vapply(seq_along(parents), function(i) {
if ((!is_dupe[[i]] && parents[[i]] == current_node) ||
parents[[i]] == 0 ||
parents[[i]] == i) {
if (!is_dupe[[i]] && parents[[i]] == current_node) {
current_node <<- i
TRUE
} else {

View File

@@ -1,6 +1,6 @@
#' Shiny Developer Mode
#'
#' @description `r lifecycle::badge("experimental")`
#' @description \lifecycle{experimental}
#'
#' Developer Mode enables a number of [options()] to make a developer's life
#' easier, like enabling non-minified JS and printing messages about

View File

@@ -1,23 +1,22 @@
startPNG <- function(filename, width, height, res, ...) {
pngfun <- if ((getOption('shiny.useragg') %||% TRUE) && is_installed("ragg")) {
ragg::agg_png
# shiny.useragg is an experimental option that isn't officially supported or
# documented. It's here in the off chance that someone really wants
# to use ragg (say, instead of showtext, for custom font rendering).
# In the next shiny release, this option will likely be superseded in
# favor of a fully customizable graphics device option
if ((getOption('shiny.useragg') %||% FALSE) && is_installed("ragg")) {
pngfun <- ragg::agg_png
} else if (capabilities("aqua")) {
# i.e., png(type = 'quartz')
grDevices::png
pngfun <- grDevices::png
} else if ((getOption('shiny.usecairo') %||% TRUE) && is_installed("Cairo")) {
Cairo::CairoPNG
pngfun <- Cairo::CairoPNG
} else {
# i.e., png(type = 'cairo')
grDevices::png
pngfun <- grDevices::png
}
args <- list2(filename = filename, width = width, height = height, res = res, ...)
# It's possible for width/height to be NULL/numeric(0) (e.g., when using
# suspendWhenHidden=F w/ tabsetPanel(), see rstudio/shiny#1409), so when
# this happens let the device determine what the default size should be.
if (length(args$width) == 0) args$width <- NULL
if (length(args$height) == 0) args$height <- NULL
args <- rlang::list2(filename=filename, width=width, height=height, res=res, ...)
# Set a smarter default for the device's bg argument (based on thematic's global state).
# Note that, technically, this is really only needed for CairoPNG, since the other
@@ -58,35 +57,33 @@ startPNG <- function(filename, width, height, res, ...) {
grDevices::dev.cur()
}
#' Capture a plot as a PNG file.
#' Run a plotting function and save the output as a PNG
#'
#' The PNG graphics device used is determined in the following order:
#' * If the ragg package is installed (and the `shiny.useragg` is not
#' set to `FALSE`), then use [ragg::agg_png()].
#' * If a quartz device is available (i.e., `capabilities("aqua")` is
#' `TRUE`), then use `png(type = "quartz")`.
#' * If the Cairo package is installed (and the `shiny.usecairo` option
#' is not set to `FALSE`), then use [Cairo::CairoPNG()].
#' * Otherwise, use [grDevices::png()]. In this case, Linux and Windows
#' may not antialias some point shapes, resulting in poor quality output.
#' This function returns the name of the PNG file that it generates. In
#' essence, it calls `png()`, then `func()`, then `dev.off()`.
#' So `func` must be a function that will generate a plot when used this
#' way.
#'
#' @details
#' A `NULL` value provided to `width` or `height` is ignored (i.e., the
#' default `width` or `height` of the graphics device is used).
#' For output, it will try to use the following devices, in this order:
#' quartz (via [grDevices::png()]), then [Cairo::CairoPNG()],
#' and finally [grDevices::png()]. This is in order of quality of
#' output. Notably, plain `png` output on Linux and Windows may not
#' antialias some point shapes, resulting in poor quality output.
#'
#' In some cases, `Cairo()` provides output that looks worse than
#' `png()`. To disable Cairo output for an app, use
#' `options(shiny.usecairo=FALSE)`.
#'
#' @param func A function that generates a plot.
#' @param filename The name of the output file. Defaults to a temp file with
#' extension `.png`.
#' @param width Width in pixels.
#' @param height Height in pixels.
#' @param res Resolution in pixels per inch. This value is passed to the
#' graphics device. Note that this affects the resolution of PNG rendering in
#' @param res Resolution in pixels per inch. This value is passed to
#' [grDevices::png()]. Note that this affects the resolution of PNG rendering in
#' R; it won't change the actual ppi of the browser.
#' @param ... Arguments to be passed through to the graphics device. These can
#' be used to set the width, height, background color, etc.
#'
#' @return A path to the newly generated PNG file.
#'
#' @param ... Arguments to be passed through to [grDevices::png()].
#' These can be used to set the width, height, background color, etc.
#' @export
plotPNG <- function(func, filename=tempfile(fileext='.png'),
width=400, height=400, res=72, ...) {

View File

@@ -103,10 +103,10 @@ fixedPanel <- function(...,
jqueryuiDependency <- function() {
htmlDependency(
"jqueryui",
version_jqueryui,
src = "www/shared/jqueryui",
package = "shiny",
script = "jquery-ui.min.js"
'jqueryui',
'1.12.1',
src = 'www/shared/jqueryui',
package = 'shiny',
script = 'jquery-ui.min.js'
)
}

View File

@@ -43,10 +43,7 @@ removeModal <- function(session = getDefaultReactiveDomain()) {
#' @param title An optional title for the dialog.
#' @param footer UI for footer. Use `NULL` for no footer.
#' @param size One of `"s"` for small, `"m"` (the default) for medium,
#' `"l"` for large, or `"xl"` for extra large. Note that `"xl"` only
#' works with Bootstrap 4 and above (to opt-in to Bootstrap 4+,
#' pass [bslib::bs_theme()] to the `theme` argument of a page container
#' like [fluidPage()]).
#' or `"l"` for large.
#' @param easyClose If `TRUE`, the modal dialog can be dismissed by
#' clicking outside the dialog box, or be pressing the Escape key. If
#' `FALSE` (the default), the modal dialog can't be dismissed in those

View File

@@ -2472,11 +2472,11 @@ debounce <- function(r, millis, priority = 100, domain = getDefaultReactiveDomai
# Ensure r() is called only after setting firstRun to FALSE since r()
# may throw an error
try(r(), silent = TRUE)
r()
return()
}
# This ensures r() is still tracked after firstRun
try(r(), silent = TRUE)
r()
# The value (or possibly millis) changed. Start or reset the timer.
v$when <- getDomainTimeMs(domain) + millis()
@@ -2509,7 +2509,7 @@ debounce <- function(r, millis, priority = 100, domain = getDefaultReactiveDomai
# commenting it out and studying the unit test failure that results.
primer <- observe({
primer$destroy()
try(er(), silent = TRUE)
er()
}, label = "debounce primer", domain = domain, priority = priority)
er
@@ -2551,7 +2551,7 @@ throttle <- function(r, millis, priority = 100, domain = getDefaultReactiveDomai
}
# Responsible for tracking when f() changes.
observeEvent(try(r(), silent = TRUE), {
observeEvent(r(), {
if (v$pending) {
# In a blackout period and someone already scheduled; do nothing
} else if (blackoutMillisLeft() > 0) {

View File

@@ -34,7 +34,7 @@
#' When rendering an inline plot, you must provide numeric values (in pixels)
#' to both \code{width} and \code{height}.
#' @param res Resolution of resulting plot, in pixels per inch. This value is
#' passed to [plotPNG()]. Note that this affects the resolution of PNG
#' passed to [grDevices::png()]. Note that this affects the resolution of PNG
#' rendering in R; it won't change the actual ppi of the browser.
#' @param alt Alternate text for the HTML `<img>` tag if it cannot be displayed
#' or viewed (i.e., the user uses a screen reader). In addition to a character
@@ -44,7 +44,7 @@
#' ggplot objects; for other plots, `NA` results in alt text of "Plot object".
#' `NULL` or `""` is not recommended because those should be limited to
#' decorative images.
#' @param ... Arguments to be passed through to [plotPNG()].
#' @param ... Arguments to be passed through to [grDevices::png()].
#' These can be used to set the width, height, background color, etc.
#' @inheritParams renderUI
#' @param execOnResize If `FALSE` (the default), then when a plot is
@@ -194,8 +194,8 @@ renderPlot <- function(expr, width = 'auto', height = 'auto', res = 72, ...,
}
resizeSavedPlot <- function(name, session, result, width, height, alt, pixelratio, res, ...) {
if (isTRUE(result$img$width == width && result$img$height == height &&
result$pixelratio == pixelratio && result$res == res)) {
if (result$img$width == width && result$img$height == height &&
result$pixelratio == pixelratio && result$res == res) {
return(result)
}

View File

@@ -29,7 +29,7 @@ registerClient <- function(client) {
#' Define Server Functionality
#'
#' @description `r lifecycle::badge("superseded")`
#' @description \lifecycle{superseded}
#'
#' @description Defines the server-side logic of the Shiny application. This generally
#' involves creating functions that map user inputs to various kinds of output.
@@ -49,7 +49,7 @@ registerClient <- function(client) {
#' optional `session` parameter, which is used when greater control is
#' needed.
#'
#' See the [tutorial](https://shiny.rstudio.com/tutorial/) for more
#' See the [tutorial](https://rstudio.github.io/shiny/tutorial/) for more
#' on how to write a server function.
#'
#' @param func The server function for this application. See the details section
@@ -331,7 +331,7 @@ argsForServerFunc <- function(serverFunc, session) {
getEffectiveBody <- function(func) {
if (is.null(func))
NULL
else if (isS4(func) && inherits(func, "functionWithTrace"))
else if (isS4(func) && class(func) == "functionWithTrace")
body(func@original)
else
body(func)

View File

@@ -140,10 +140,9 @@ getShinyOption <- function(name, default = NULL) {
#' messages).}
#' \item{shiny.autoload.r (defaults to `TRUE`)}{If `TRUE`, then the R/
#' of a shiny app will automatically be sourced.}
#' \item{shiny.useragg (defaults to `TRUE`)}{Set to `FALSE` to prevent PNG rendering via the
#' ragg package. See [plotPNG()] for more information.}
#' \item{shiny.usecairo (defaults to `TRUE`)}{Set to `FALSE` to prevent PNG rendering via the
#' Cairo package. See [plotPNG()] for more information.}
#' \item{shiny.usecairo (defaults to `TRUE`)}{This is used to disable graphical rendering by the
#' Cairo package, if it is installed. See [plotPNG()] for more
#' information.}
#' \item{shiny.devmode (defaults to `NULL`)}{Option to enable Shiny Developer Mode. When set,
#' different default `getOption(key)` values will be returned. See [devmode()] for more details.}
### Not documenting as 'shiny.devmode.verbose' is for niche use only

View File

@@ -185,11 +185,9 @@ workerId <- local({
#' session is actually connected.
#' }
#' \item{request}{
#' An environment that implements the [Rook
#' specification](https://github.com/jeffreyhorner/Rook#the-environment) for
#' HTTP requests. This is the request that was used to initiate the websocket
#' connection (as opposed to the request that downloaded the web page for the
#' app).
#' An environment that implements the Rook specification for HTTP requests.
#' This is the request that was used to initiate the websocket connection
#' (as opposed to the request that downloaded the web page for the app).
#' }
#' \item{userData}{
#' An environment for app authors and module/package authors to store whatever
@@ -1876,26 +1874,6 @@ ShinySession <- R6Class(
# Provides a mechanism for handling direct HTTP requests that are posted
# to the session (rather than going through the websocket)
handleRequest = function(req) {
if (!is.null(self$user)) {
if (is.null(req$HTTP_SHINY_SERVER_CREDENTIALS)) {
# Session owner is logged in, but this requester is not
return(NULL)
}
requestUser <- NULL
try(
{
creds <- safeFromJSON(req$HTTP_SHINY_SERVER_CREDENTIALS)
requestUser <- creds$user
},
silent = TRUE
)
if (!identical(self$user, requestUser)) {
# This requester is not the same user as session owner
return(NULL)
}
}
# TODO: Turn off caching for the response
subpath <- req$PATH_INFO

View File

@@ -148,7 +148,7 @@ shinyDependencyCSS <- function(theme) {
#' Create a Shiny UI handler
#'
#' @description `r lifecycle::badge("superseded")`
#' @description \lifecycle{superseded}
#'
#' @description Historically this function was used in ui.R files to register a user
#' interface with Shiny. It is no longer required as of Shiny 0.10; simply

View File

@@ -1,2 +0,0 @@
# Generated by tools/updatejQueryUI.R; do not edit by hand
version_jqueryui <- "1.13.2"

View File

@@ -16,7 +16,7 @@ Easily build rich and productive interactive web apps in R &mdash; no HTML/CSS/J
* A prebuilt set of highly sophisticated, customizable, and easy-to-use widgets (e.g., plots, tables, sliders, dropdowns, date pickers, and more).
* An attractive default look based on [Bootstrap](https://getbootstrap.com/) which can also be easily customized with the [bslib](https://github.com/rstudio/bslib) package or avoided entirely with more direct R bindings to HTML/CSS/JavaScript.
* Seamless integration with [R Markdown](https://shiny.rstudio.com/articles/interactive-docs.html), making it easy to embed numerous applications natively within a larger dynamic document.
* Tools for improving and monitoring performance, including native support for [async programming](https://www.rstudio.com/blog/shiny-1-1-0/), [caching](https://talks.cpsievert.me/20201117), [load testing](https://rstudio.github.io/shinyloadtest/), and more.
* Tools for improving and monitoring performance, including native support for [async programming](https://blog.rstudio.com/2018/06/26/shiny-1-1-0/), [caching](https://talks.cpsievert.me/20201117), [load testing](https://rstudio.github.io/shinyloadtest/), and [more](https://support.rstudio.com/hc/en-us/articles/231874748-Scaling-and-Performance-Tuning-in-RStudio-Connect).
* [Modules](https://shiny.rstudio.com/articles/modules.html): a framework for reducing code duplication and complexity.
* An ability to [bookmark application state](https://shiny.rstudio.com/articles/bookmarking-state.html) and/or [generate code to reproduce output(s)](https://github.com/rstudio/shinymeta).
* A rich ecosystem of extension packages for more [custom widgets](http://www.htmlwidgets.org/), [input validation](https://github.com/rstudio/shinyvalidate), [unit testing](https://github.com/rstudio/shinytest), and more.

View File

@@ -1,2 +0,0 @@
# Load application support files into testing environment
shinytest2::load_app_env()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -312,7 +312,7 @@ Mani Mishra <manimishra902@gmail.com>
Hannah Methvin <hannahmethvin@gmail.com>
Leonardo Balter <leonardo.balter@gmail.com>
Benjamin Albert <benjamin_a5@yahoo.com>
Michał Gołębiowski-Owczarek <m.goleb@gmail.com>
Michał Gołębiowski <m.goleb@gmail.com>
Alyosha Pushak <alyosha.pushak@gmail.com>
Fahad Ahmad <fahadahmad41@hotmail.com>
Matt Brundage <github@mattbrundage.com>
@@ -331,42 +331,3 @@ Peter Dave Hello <hsu@peterdavehello.org>
Johannes Schäfer <johnschaefer@gmx.de>
Ville Skyttä <ville.skytta@iki.fi>
Ryan Oriecuia <ryan.oriecuia@visioncritical.com>
Sergei Ratnikov <sergeir82@gmail.com>
milk54 <milk851@gmail.com>
Evelyn Masso <evoutofambit@gmail.com>
Robin <mail@robin-fowler.com>
Simon Asika <asika32764@gmail.com>
Kevin Cupp <kevin.cupp@gmail.com>
Jeremy Mickelson <Jeremy.Mickelson@gmail.com>
Kyle Rosenberg <kyle.rosenberg@gmail.com>
Petri Partio <petri.partio@gmail.com>
pallxk <github@pallxk.com>
Luke Brookhart <luke@onjax.com>
claudi <hirt-claudia@gmx.de>
Eirik Sletteberg <eiriksletteberg@gmail.com>
Albert Johansson <albert@intervaro.se>
A. Wells <borgboyone@users.noreply.github.com>
Robert Brignull <robertbrignull@gmail.com>
Horus68 <pauloizidoro@gmail.com>
Maksymenkov Eugene <foatei@gmail.com>
OskarNS <soerensen.oskar@gmail.com>
Gez Quinn <holla@gezquinn.design>
jigar gala <jigar.gala140291@gmail.com>
Florian Wegscheider <flo.wegscheider@gmail.com>
Fatér Zsolt <fater.zsolt@gmail.com>
Szabolcs Szabolcsi-Toth <nec@shell8.net>
Jérémy Munsch <github@jeremydev.ovh>
Hrvoje Novosel <hrvoje.novosel@gmail.com>
Paul Capron <PaulCapron@users.noreply.github.com>
Micah Miller <mikhey@runbox.com>
sakshi87 <53863764+sakshi87@users.noreply.github.com>
Mikolaj Wolicki <wolicki.mikolaj@gmail.com>
Patrick McKay <patrick.mckay@vumc.org>
c-lambert <58025159+c-lambert@users.noreply.github.com>
Josep Sanz <josepsanzcamp@gmail.com>
Ben Mullins <benm@umich.edu>
Christian Oliff <christianoliff@pm.me>
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Adam Lidén Hällgren <adamlh92@gmail.com>
James Hinderks <hinderks@gmail.com>
Denny Septian Panggabean <97607754+ddevsr@users.noreply.github.com>

View File

@@ -0,0 +1,5 @@
This a full jQuery UI build, downloaded from:
https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip
The copy of jQuery that is bundled with the download, under external/, is not
included because Shiny already has its own copy of jQuery.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -58,6 +58,7 @@
<h1>YOUR COMPONENTS:</h1>
<!-- Accordion -->
<h2 class="demoHeaders">Accordion</h2>
<div id="accordion">
@@ -69,17 +70,23 @@
<div>Nam dui erat, auctor a, dignissim quis.</div>
</div>
<!-- Autocomplete -->
<h2 class="demoHeaders">Autocomplete</h2>
<div>
<input id="autocomplete" title="type &quot;a&quot;">
</div>
<!-- Button -->
<h2 class="demoHeaders">Button</h2>
<button id="button">A button element</button>
<button id="button-icon">An icon-only button</button>
<!-- Checkboxradio -->
<h2 class="demoHeaders">Checkboxradio</h2>
<form style="margin-top: 1em;">
@@ -90,6 +97,8 @@
</div>
</form>
<!-- Controlgroup -->
<h2 class="demoHeaders">Controlgroup</h2>
<fieldset>
@@ -116,6 +125,8 @@
</div>
</fieldset>
<!-- Tabs -->
<h2 class="demoHeaders">Tabs</h2>
<div id="tabs">
@@ -129,6 +140,8 @@
<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
</div>
<h2 class="demoHeaders">Dialog</h2>
<p>
<button id="dialog-link" class="ui-button ui-corner-all ui-widget">
@@ -154,6 +167,7 @@
</div>
<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
<ul id="icons" class="ui-widget ui-helper-clearfix">
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-n"><span class="ui-icon ui-icon-caret-1-n"></span></li>
@@ -331,18 +345,25 @@
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
</ul>
<!-- Slider -->
<h2 class="demoHeaders">Slider</h2>
<div id="slider"></div>
<!-- Datepicker -->
<h2 class="demoHeaders">Datepicker</h2>
<div id="datepicker"></div>
<!-- Progressbar -->
<h2 class="demoHeaders">Progressbar</h2>
<div id="progressbar"></div>
<!-- Progressbar -->
<h2 class="demoHeaders">Selectmenu</h2>
<select id="selectmenu">
@@ -353,10 +374,14 @@
<option>Faster</option>
</select>
<!-- Spinner -->
<h2 class="demoHeaders">Spinner</h2>
<input id="spinner">
<!-- Menu -->
<h2 class="demoHeaders">Menu</h2>
<ul style="width:100px;" id="menu">
@@ -375,6 +400,8 @@
<li><div>Item 5</div></li>
</ul>
<!-- Tooltip -->
<h2 class="demoHeaders">Tooltip</h2>
<p id="tooltip">
@@ -382,6 +409,7 @@
the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.
</p>
<!-- Highlight / Error -->
<h2 class="demoHeaders">Highlight / Error</h2>
<div class="ui-widget">
@@ -401,8 +429,11 @@ the element with your mouse, the title attribute is displayed in a little box ne
<script src="external/jquery/jquery.js"></script>
<script src="jquery-ui.js"></script>
<script>
$( "#accordion" ).accordion();
var availableTags = [
"ActionScript",
"AppleScript",
@@ -431,18 +462,28 @@ $( "#autocomplete" ).autocomplete({
source: availableTags
});
$( "#button" ).button();
$( "#button-icon" ).button({
icon: "ui-icon-gear",
showLabel: false
});
$( "#radioset" ).buttonset();
$( "#controlgroup" ).controlgroup();
$( "#tabs" ).tabs();
$( "#dialog" ).dialog({
autoOpen: false,
width: 400,
@@ -468,27 +509,42 @@ $( "#dialog-link" ).click(function( event ) {
event.preventDefault();
});
$( "#datepicker" ).datepicker({
inline: true
});
$( "#slider" ).slider({
range: true,
values: [ 17, 67 ]
});
$( "#progressbar" ).progressbar({
value: 20
});
$( "#spinner" ).spinner();
$( "#menu" ).menu();
$( "#tooltip" ).tooltip();
$( "#selectmenu" ).selectmenu();
// Hover states on the static widgets
$( "#dialog-link, #icons li" ).hover(
function() {

View File

@@ -1,4 +1,4 @@
/*! jQuery UI - v1.13.2 - 2022-07-14
/*! jQuery UI - v1.12.1 - 2016-09-14
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
@@ -45,7 +45,7 @@
left: 0;
position: absolute;
opacity: 0;
-ms-filter: "alpha(opacity=0)"; /* support: IE8 */
filter:Alpha(Opacity=0); /* support: IE8 */
}
.ui-front {
@@ -664,7 +664,7 @@ button.ui-button::-moz-focus-inner {
.ui-progressbar .ui-progressbar-overlay {
background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
height: 100%;
-ms-filter: "alpha(opacity=25)"; /* support: IE8 */
filter: alpha(opacity=25); /* support: IE8 */
opacity: 0.25;
}
.ui-progressbar-indeterminate .ui-progressbar-value {
@@ -728,7 +728,7 @@ button.ui-button::-moz-focus-inner {
z-index: 2;
width: 1.2em;
height: 1.2em;
cursor: pointer;
cursor: default;
-ms-touch-action: none;
touch-action: none;
}
@@ -1041,18 +1041,18 @@ a.ui-button:active,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
opacity: .7;
-ms-filter: "alpha(opacity=70)"; /* support: IE8 */
filter:Alpha(Opacity=70); /* support: IE8 */
font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
opacity: .35;
-ms-filter: "alpha(opacity=35)"; /* support: IE8 */
filter:Alpha(Opacity=35); /* support: IE8 */
background-image: none;
}
.ui-state-disabled .ui-icon {
-ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
}
/* Icons
@@ -1093,10 +1093,7 @@ a.ui-button:active,
}
/* positioning */
/* Three classes needed to override `.ui-button:hover .ui-icon` */
.ui-icon-blank.ui-icon-blank.ui-icon-blank {
background-image: none;
}
.ui-icon-blank { background-position: 16px 16px; }
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
@@ -1307,7 +1304,7 @@ a.ui-button:active,
.ui-widget-overlay {
background: #aaaaaa;
opacity: .003;
-ms-filter: Alpha(Opacity=.3); /* support: IE8 */
filter: Alpha(Opacity=.3); /* support: IE8 */
}
.ui-widget-shadow {
-webkit-box-shadow: 0px 0px 5px #666666;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
/*!
* jQuery UI CSS Framework 1.13.2
* jQuery UI CSS Framework 1.12.1
* http://jqueryui.com
*
* Copyright jQuery Foundation and other contributors
@@ -49,7 +49,7 @@
left: 0;
position: absolute;
opacity: 0;
-ms-filter: "alpha(opacity=0)"; /* support: IE8 */
filter:Alpha(Opacity=0); /* support: IE8 */
}
.ui-front {
@@ -668,7 +668,7 @@ button.ui-button::-moz-focus-inner {
.ui-progressbar .ui-progressbar-overlay {
background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
height: 100%;
-ms-filter: "alpha(opacity=25)"; /* support: IE8 */
filter: alpha(opacity=25); /* support: IE8 */
opacity: 0.25;
}
.ui-progressbar-indeterminate .ui-progressbar-value {
@@ -732,7 +732,7 @@ button.ui-button::-moz-focus-inner {
z-index: 2;
width: 1.2em;
height: 1.2em;
cursor: pointer;
cursor: default;
-ms-touch-action: none;
touch-action: none;
}

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
/*!
* jQuery UI CSS Framework 1.13.2
* jQuery UI CSS Framework 1.12.1
* http://jqueryui.com
*
* Copyright jQuery Foundation and other contributors
@@ -172,18 +172,18 @@ a.ui-button:active,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
opacity: .7;
-ms-filter: "alpha(opacity=70)"; /* support: IE8 */
filter:Alpha(Opacity=70); /* support: IE8 */
font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
opacity: .35;
-ms-filter: "alpha(opacity=35)"; /* support: IE8 */
filter:Alpha(Opacity=35); /* support: IE8 */
background-image: none;
}
.ui-state-disabled .ui-icon {
-ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
}
/* Icons
@@ -224,10 +224,7 @@ a.ui-button:active,
}
/* positioning */
/* Three classes needed to override `.ui-button:hover .ui-icon` */
.ui-icon-blank.ui-icon-blank.ui-icon-blank {
background-image: none;
}
.ui-icon-blank { background-position: 16px 16px; }
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
@@ -438,7 +435,7 @@ a.ui-button:active,
.ui-widget-overlay {
background: #aaaaaa;
opacity: .003;
-ms-filter: Alpha(Opacity=.3); /* support: IE8 */
filter: Alpha(Opacity=.3); /* support: IE8 */
}
.ui-widget-shadow {
-webkit-box-shadow: 0px 0px 5px #666666;

File diff suppressed because one or more lines are too long

View File

@@ -42,7 +42,7 @@ Selectize.define("selectize-plugin-a11y", function (options) {
// random IDs are assigned when .selectize() is called, but we're
// doing it here to limit the scope of changes.
var kids = self.$dropdown_content[0].children;
for (var i = 0; i < kids.length; i++) {
for (i = 0; i < kids.length; i++) {
var attrs = kids[i].attributes;
if (!attrs.role) {
kids[i].setAttribute("role", "option");

View File

@@ -1 +1 @@
Selectize.define("selectize-plugin-a11y",function(c){var t=this,l=13;typeof t.accessibility=="undefined"&&(t.accessibility={}),t.accessibility.helpers={randomId:function(e){for(var r="",s=e||10,i="abcdefghijklmnopqrstuvwxyz0123456789",n=i.length,a=0;a<s;a++)r+=i[Math.floor(n*Math.random())];return r}},t.accessibility.liveRegion={$region:"",speak:function(e){var r=$("<div></div>");r.text(e),this.$region.html(r)},domListener:function(){var e=new MutationObserver(function(r){r.forEach(function(s){var i=$(s.target);if(i.hasClass("items"))if(i.hasClass("dropdown-active")){t.$control_input.attr("aria-expanded","true");for(var n=t.$dropdown_content[0].children,a=0;a<n.length;a++){var o=n[a].attributes;o.role||n[a].setAttribute("role","option"),o.id||n[a].setAttribute("id",t.accessibility.helpers.randomId())}}else t.$control_input.attr("aria-expanded","false"),t.$control_input.removeAttr("aria-activedescendant");else i.hasClass("active")&&i.attr("data-value")&&(t.$control_input.attr("aria-activedescendant",i.attr("id")),t.accessibility.liveRegion.speak(i.text(),500))})});e.observe(t.$dropdown[0],{attributes:!0,attributeFilter:["class"],subtree:!0,attributeOldValue:!0}),e.observe(t.$control[0],{attributes:!0,attributeFilter:["class"]}),e.observe(t.$control_input[0],{attributes:!0,attributeFilter:["value"]})},setAttributes:function(){this.$region.attr({"aria-live":"assertive",role:"log","aria-relevant":"additions","aria-atomic":"true"})},setStyles:function(){this.$region.css({position:"absolute",width:"1px",height:"1px","margin-top":"-1px",clip:"rect(1px, 1px, 1px, 1px)",overflow:"hidden"})},init:function(){this.$region=$("<div>"),this.setAttributes(),this.setStyles(),$("body").append(this.$region),this.domListener()}},this.setup=function(){var e=t.setup;return function(){e.apply(this,arguments);var r=t.accessibility.helpers.randomId(),s=t.accessibility.helpers.randomId();t.$control.on("keydown",function(i){i.keyCode===l&&(t.settings.openOnFocus?(t.settings.openOnFocus=!1,t.focus(),setTimeout(function(){t.settings.openOnFocus=!0},0)):t.focus())}),t.$control_input.attr({role:"combobox","aria-expanded":"false",haspopup:"listbox","aria-owns":s,"aria-label":t.$wrapper.closest("[data-accessibility-selectize-label]").attr("data-accessibility-selectize-label")}),t.$dropdown_content.attr({role:"listbox",id:s}),t.accessibility.liveRegion.init()}}(),this.destroy=function(){var e=t.destroy;return function(){return t.accessibility.liveRegion.$region.remove(),e.apply(this,arguments)}}()});
Selectize.define("selectize-plugin-a11y",function(c){var t=this,l=13;typeof t.accessibility=="undefined"&&(t.accessibility={}),t.accessibility.helpers={randomId:function(e){for(var a="",s=e||10,r="abcdefghijklmnopqrstuvwxyz0123456789",n=r.length,o=0;o<s;o++)a+=r[Math.floor(n*Math.random())];return a}},t.accessibility.liveRegion={$region:"",speak:function(e){var a=$("<div></div>");a.text(e),this.$region.html(a)},domListener:function(){var e=new MutationObserver(function(a){a.forEach(function(s){var r=$(s.target);if(r.hasClass("items"))if(r.hasClass("dropdown-active")){t.$control_input.attr("aria-expanded","true");var n=t.$dropdown_content[0].children;for(i=0;i<n.length;i++){var o=n[i].attributes;o.role||n[i].setAttribute("role","option"),o.id||n[i].setAttribute("id",t.accessibility.helpers.randomId())}}else t.$control_input.attr("aria-expanded","false"),t.$control_input.removeAttr("aria-activedescendant");else r.hasClass("active")&&r.attr("data-value")&&(t.$control_input.attr("aria-activedescendant",r.attr("id")),t.accessibility.liveRegion.speak(r.text(),500))})});e.observe(t.$dropdown[0],{attributes:!0,attributeFilter:["class"],subtree:!0,attributeOldValue:!0}),e.observe(t.$control[0],{attributes:!0,attributeFilter:["class"]}),e.observe(t.$control_input[0],{attributes:!0,attributeFilter:["value"]})},setAttributes:function(){this.$region.attr({"aria-live":"assertive",role:"log","aria-relevant":"additions","aria-atomic":"true"})},setStyles:function(){this.$region.css({position:"absolute",width:"1px",height:"1px","margin-top":"-1px",clip:"rect(1px, 1px, 1px, 1px)",overflow:"hidden"})},init:function(){this.$region=$("<div>"),this.setAttributes(),this.setStyles(),$("body").append(this.$region),this.domListener()}},this.setup=function(){var e=t.setup;return function(){e.apply(this,arguments);var a=t.accessibility.helpers.randomId(),s=t.accessibility.helpers.randomId();t.$control.on("keydown",function(r){r.keyCode===l&&(t.settings.openOnFocus?(t.settings.openOnFocus=!1,t.focus(),setTimeout(function(){t.settings.openOnFocus=!0},0)):t.focus())}),t.$control_input.attr({role:"combobox","aria-expanded":"false",haspopup:"listbox","aria-owns":s,"aria-label":t.$wrapper.closest("[data-accessibility-selectize-label]").attr("data-accessibility-selectize-label")}),t.$dropdown_content.attr({role:"listbox",id:s}),t.accessibility.liveRegion.init()}}(),this.destroy=function(){var e=t.destroy;return function(){return t.accessibility.liveRegion.$region.remove(),e.apply(this,arguments)}}()});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +1,2 @@
/*! shiny 1.7.4.9001 | (c) 2012-2023 RStudio, PBC. | License: GPL-3 | file LICENSE */
#showcase-well{border-radius:0}.shiny-code{background-color:#fff;margin-bottom:0}.shiny-code code{font-family:Menlo,Consolas,Courier New,monospace}.shiny-code-container{margin-top:20px;clear:both}.shiny-code-container h3{display:inline;margin-right:15px}.showcase-header{font-size:16px;font-weight:400}.showcase-code-link{text-align:right;padding:15px}#showcase-app-container{vertical-align:top}#showcase-code-tabs{margin-right:15px}#showcase-code-tabs pre{border:none;line-height:1em}#showcase-code-tabs .nav,#showcase-code-tabs ul{margin-bottom:0}#showcase-code-tabs .tab-content{border-style:solid;border-color:#e5e5e5;border-width:0px 1px 1px 1px;overflow:auto;border-bottom-right-radius:4px;border-bottom-left-radius:4px}#showcase-app-code{width:100%}#showcase-code-position-toggle{float:right}#showcase-sxs-code{padding-top:20px;vertical-align:top}.showcase-code-license{display:block;text-align:right}#showcase-code-content pre{background-color:#fff}
/*! shiny 1.7.1.9003 | (c) 2012-2022 RStudio, PBC. | License: GPL-3 | file LICENSE */
#showcase-well{border-radius:0}.shiny-code{background-color:#fff;margin-bottom:0}.shiny-code code{font-family:Menlo,Consolas,"Courier New",monospace}.shiny-code-container{margin-top:20px;clear:both}.shiny-code-container h3{display:inline;margin-right:15px}.showcase-header{font-size:16px;font-weight:normal}.showcase-code-link{text-align:right;padding:15px}#showcase-app-container{vertical-align:top}#showcase-code-tabs{margin-right:15px}#showcase-code-tabs pre{border:none;line-height:1em}#showcase-code-tabs .nav{margin-bottom:0}#showcase-code-tabs ul{margin-bottom:0}#showcase-code-tabs .tab-content{border-style:solid;border-color:#e5e5e5;border-width:0px 1px 1px 1px;overflow:auto;border-bottom-right-radius:4px;border-bottom-left-radius:4px}#showcase-app-code{width:100%}#showcase-code-position-toggle{float:right}#showcase-sxs-code{padding-top:20px;vertical-align:top}.showcase-code-license{display:block;text-align:right}#showcase-code-content pre{background-color:#fff}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
/*! shiny 1.7.4.9001 | (c) 2012-2023 RStudio, PBC. | License: GPL-3 | file LICENSE */
"use strict";(function(){var a=eval;window.addEventListener("message",function(i){var e=i.data;e.code&&a(e.code)});})();
/*! shiny 1.7.1.9003 | (c) 2012-2022 RStudio, PBC. | License: GPL-3 | file LICENSE */
(function(){var a=eval;window.addEventListener("message",function(i){var e=i.data;e.code&&a(e.code)});})();
//# sourceMappingURL=shiny-testmode.js.map

View File

@@ -2,6 +2,6 @@
"version": 3,
"sources": ["../../../srcts/src/utils/eval.ts", "../../../srcts/extras/shiny-testmode.ts"],
"sourcesContent": ["//esbuild.github.io/content-types/#direct-eval\n//tl/dr;\n// * Direct usage of `eval(\"x\")` is bad with bundled code.\n// * Instead, use indirect calls to `eval` such as `indirectEval(\"x\")`\n// * Even just renaming the function works well enough.\n// > This is known as \"indirect eval\" because eval is not being called directly, and so does not trigger the grammatical special case for direct eval in the JavaScript VM. You can call indirect eval using any syntax at all except for an expression of the exact form eval('x'). For example, var eval2 = eval; eval2('x') and [eval][0]('x') and window.eval('x') are all indirect eval calls.\n// > When you use indirect eval, the code is evaluated in the global scope instead of in the inline scope of the caller.\nvar indirectEval = eval;\nexport { indirectEval };", "/* eslint-disable unicorn/filename-case */\nimport { indirectEval } from \"../src/utils/eval\"; // Listen for messages from parent frame. This file is only added when the\n// shiny.testmode option is TRUE.\n\nwindow.addEventListener(\"message\", function (e) {\n var message = e.data;\n if (message.code) indirectEval(message.code);\n});"],
"mappings": ";yBAOA,IAAIA,EAAe,KCHnB,OAAO,iBAAiB,UAAW,SAAUC,EAAG,CAC9C,IAAIC,EAAUD,EAAE,KACZC,EAAQ,MAAMC,EAAaD,EAAQ,IAAI,CAC7C,CAAC",
"names": ["indirectEval", "e", "message", "indirectEval"]
"mappings": ";YAOA,GAAI,GAAe,KCHnB,OAAO,iBAAiB,UAAW,SAAU,EAAG,CAC9C,GAAI,GAAU,EAAE,KAChB,AAAI,EAAQ,MAAM,EAAa,EAAQ",
"names": []
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -42,7 +42,7 @@ In the example here, the \code{bindCache()} key consists of \code{input$x} and
\code{input$y} combined, and the value is \code{input$x * input$y}. In this simple
example, for any given key, there is only one possible returned value.
\if{html}{\out{<div class="sourceCode">}}\preformatted{r <- reactive(\{ input$x * input$y \}) \%>\%
\if{html}{\out{<div class="sourceCode NA">}}\preformatted{r <- reactive(\{ input$x * input$y \}) \%>\%
bindCache(input$x, input$y)
}\if{html}{\out{</div>}}
@@ -67,7 +67,7 @@ have a large data set with timestamps, it might make sense to extract the
most recent timestamp and return that. Then, instead of hashing the entire
data object, the cached reactive only needs to hash the timestamp.
\if{html}{\out{<div class="sourceCode">}}\preformatted{r <- reactive(\{ compute(bigdata()) \} \%>\%
\if{html}{\out{<div class="sourceCode NA">}}\preformatted{r <- reactive(\{ compute(bigdata()) \} \%>\%
bindCache(\{ extract_most_recent_time(bigdata()) \})
}\if{html}{\out{</div>}}
@@ -111,7 +111,7 @@ time that someone accesses the cached reactive. It is only re-executed if
it has been invalidated by one of the reactives it depends on. For
example, suppose we have this cached reactive:
\if{html}{\out{<div class="sourceCode">}}\preformatted{r <- reactive(\{ input$x * input$y \}) \%>\%
\if{html}{\out{<div class="sourceCode NA">}}\preformatted{r <- reactive(\{ input$x * input$y \}) \%>\%
bindCache(input$x, input$y)
}\if{html}{\out{</div>}}
@@ -276,7 +276,7 @@ cache key, in addition to the one passed to \code{bindCache()} by the user. The
cache hint can be viewed by calling the internal Shiny function
\code{extractCacheHint()}:
\if{html}{\out{<div class="sourceCode">}}\preformatted{r <- renderText(\{ input$x \})
\if{html}{\out{<div class="sourceCode NA">}}\preformatted{r <- renderText(\{ input$x \})
shiny:::extractCacheHint(r)
}\if{html}{\out{</div>}}

View File

@@ -173,7 +173,7 @@ user sets both \code{x} and \code{y}, and then clicks on an \link{actionButton}
To use both caching and events, the object should first be passed to
\code{bindCache()}, then \code{bindEvent()}. For example:
\if{html}{\out{<div class="sourceCode">}}\preformatted{r <- reactive(\{
\if{html}{\out{<div class="sourceCode NA">}}\preformatted{r <- reactive(\{
Sys.sleep(2) # Pretend this is an expensive computation
input$x * input$y
\}) \%>\%

View File

@@ -125,12 +125,12 @@ function.
}
\section{Functions}{
\itemize{
\item \code{quoToFunction()}: convert a quosure to a function.
\item \code{quoToFunction}: convert a quosure to a function.
\item \code{installExprFunction()}: converts a user's reactive \code{expr} into a
\item \code{installExprFunction}: converts a user's reactive \code{expr} into a
function that's assigned to a \code{name} in the \code{assign.env}.
}}
\examples{
# A custom render function that repeats the supplied value 3 times
renderTriple <- function(expr) {

View File

@@ -71,7 +71,7 @@ registered \code{devmode_default} value will be used.}
\code{TRUE} and the specified option is not set in \code{\link[=options]{options()}}.}
}
\description{
\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#experimental}{\figure{lifecycle-experimental.svg}{options: alt='[Experimental]'}}}{\strong{[Experimental]}}
\lifecycle{experimental}
Developer Mode enables a number of \code{\link[=options]{options()}} to make a developer's life
easier, like enabling non-minified JS and printing messages about
@@ -84,20 +84,20 @@ Please see the function descriptions for more details.
}
\section{Functions}{
\itemize{
\item \code{devmode()}: Function to set two options to enable/disable Shiny
\item \code{devmode}: Function to set two options to enable/disable Shiny
Developer Mode and Developer messages
\item \code{in_devmode()}: Determines if Shiny is in Developer Mode. If the
\item \code{in_devmode}: Determines if Shiny is in Developer Mode. If the
\code{getOption("shiny.devmode")} is set to \code{TRUE} and not in testing inside
\code{testthat}, then Shiny Developer Mode is enabled.
\item \code{with_devmode()}: Temporarily set Shiny Developer Mode and Developer
\item \code{with_devmode}: Temporarily set Shiny Developer Mode and Developer
message verbosity
\item \code{devmode_inform()}: If Shiny Developer Mode and verbosity are enabled,
\item \code{devmode_inform}: If Shiny Developer Mode and verbosity are enabled,
displays a message once every 8 hrs (by default)
\item \code{register_devmode_option()}: Registers a Shiny Developer Mode option with an updated
\item \code{register_devmode_option}: Registers a Shiny Developer Mode option with an updated
value and Developer message. This registration method allows package
authors to write one message in a single location.
@@ -138,7 +138,7 @@ register_devmode_option(
)
}\if{html}{\out{</div>}}
\item \code{get_devmode_option()}: Provides a consistent way to change the expected
\item \code{get_devmode_option}: Provides a consistent way to change the expected
\code{\link[=getOption]{getOption()}} behavior when Developer Mode is enabled. This method is very
similar to \code{\link[=getOption]{getOption()}} where the globally set option takes precedence.
See section "Avoiding direct dependency on shiny" for
@@ -148,8 +148,8 @@ See section "Avoiding direct dependency on shiny" for
\code{register_devmode_option()} to avoid supplying the same \code{devmode_default}
and \code{devmode_message} values throughout your package. (This requires a
\pkg{shiny} dependency.)
}}
\section{Avoiding direct dependency on shiny}{

View File

@@ -9,17 +9,10 @@ htmlOutput(
outputId,
inline = FALSE,
container = if (inline) span else div,
fill = FALSE,
...
)
uiOutput(
outputId,
inline = FALSE,
container = if (inline) span else div,
fill = FALSE,
...
)
uiOutput(outputId, inline = FALSE, container = if (inline) span else div, ...)
}
\arguments{
\item{outputId}{output variable to read the value from}
@@ -29,13 +22,6 @@ for the output}
\item{container}{a function to generate an HTML element to contain the text}
\item{fill}{If \code{TRUE}, the result of \code{container} is treated as \emph{both} a fill
item and container (see \code{\link[htmltools:bindFillRole]{htmltools::bindFillRole()}}), which means both the
\code{container} as well as its immediate children (i.e., the result of
\code{renderUI()}) are allowed to grow/shrink to fit a fill container with an
opinionated height. Set \code{fill = "item"} or \code{fill = "container"} to treat
\code{container} as just a fill item or a fill container.}
\item{...}{Other arguments to pass to the container tag function. This is
useful for providing additional classes for the tag.}
}
@@ -44,12 +30,12 @@ An HTML output element that can be included in a panel
}
\description{
Render a reactive output variable as HTML within an application page. The
text will be included within an HTML \code{div} tag, and is presumed to contain
HTML content which should not be escaped.
text will be included within an HTML \code{div} tag, and is presumed to
contain HTML content which should not be escaped.
}
\details{
\code{uiOutput} is intended to be used with \code{renderUI} on the server side. It is
currently just an alias for \code{htmlOutput}.
\code{uiOutput} is intended to be used with \code{renderUI} on the server
side. It is currently just an alias for \code{htmlOutput}.
}
\examples{
htmlOutput("summary")

View File

@@ -24,10 +24,7 @@ modalButton(label, icon = NULL)
\item{footer}{UI for footer. Use \code{NULL} for no footer.}
\item{size}{One of \code{"s"} for small, \code{"m"} (the default) for medium,
\code{"l"} for large, or \code{"xl"} for extra large. Note that \code{"xl"} only
works with Bootstrap 4 and above (to opt-in to Bootstrap 4+,
pass \code{\link[bslib:bs_theme]{bslib::bs_theme()}} to the \code{theme} argument of a page container
like \code{\link[=fluidPage]{fluidPage()}}).}
or \code{"l"} for large.}
\item{easyClose}{If \code{TRUE}, the modal dialog can be dismissed by
clicking outside the dialog box, or be pressing the Escape key. If

View File

@@ -13,8 +13,7 @@ imageOutput(
dblclick = NULL,
hover = NULL,
brush = NULL,
inline = FALSE,
fill = FALSE
inline = FALSE
)
plotOutput(
@@ -25,8 +24,7 @@ plotOutput(
dblclick = NULL,
hover = NULL,
brush = NULL,
inline = FALSE,
fill = !inline
inline = FALSE
)
}
\arguments{
@@ -78,12 +76,6 @@ same \code{id} to disappear.}
\item{inline}{use an inline (\code{span()}) or block container (\code{div()})
for the output}
\item{fill}{Whether or not the returned tag should be treated as a fill item,
meaning that its \code{height} is allowed to grow/shrink to fit a fill container
with an opinionated height (see \code{\link[htmltools:bindFillRole]{htmltools::bindFillRole()}}) with an
opinionated height. Examples of fill containers include \code{bslib::card()} and
\code{bslib::card_body_fill()}.}
}
\value{
A plot or image output element that can be included in a panel.

View File

@@ -2,7 +2,7 @@
% Please edit documentation in R/imageutils.R
\name{plotPNG}
\alias{plotPNG}
\title{Capture a plot as a PNG file.}
\title{Run a plotting function and save the output as a PNG}
\usage{
plotPNG(
func,
@@ -23,30 +23,27 @@ extension \code{.png}.}
\item{height}{Height in pixels.}
\item{res}{Resolution in pixels per inch. This value is passed to the
graphics device. Note that this affects the resolution of PNG rendering in
\item{res}{Resolution in pixels per inch. This value is passed to
\code{\link[grDevices:png]{grDevices::png()}}. Note that this affects the resolution of PNG rendering in
R; it won't change the actual ppi of the browser.}
\item{...}{Arguments to be passed through to the graphics device. These can
be used to set the width, height, background color, etc.}
}
\value{
A path to the newly generated PNG file.
\item{...}{Arguments to be passed through to \code{\link[grDevices:png]{grDevices::png()}}.
These can be used to set the width, height, background color, etc.}
}
\description{
The PNG graphics device used is determined in the following order:
\itemize{
\item If the ragg package is installed (and the \code{shiny.useragg} is not
set to \code{FALSE}), then use \code{\link[ragg:agg_png]{ragg::agg_png()}}.
\item If a quartz device is available (i.e., \code{capabilities("aqua")} is
\code{TRUE}), then use \code{png(type = "quartz")}.
\item If the Cairo package is installed (and the \code{shiny.usecairo} option
is not set to \code{FALSE}), then use \code{\link[Cairo:Cairo]{Cairo::CairoPNG()}}.
\item Otherwise, use \code{\link[grDevices:png]{grDevices::png()}}. In this case, Linux and Windows
may not antialias some point shapes, resulting in poor quality output.
}
This function returns the name of the PNG file that it generates. In
essence, it calls \code{png()}, then \code{func()}, then \code{dev.off()}.
So \code{func} must be a function that will generate a plot when used this
way.
}
\details{
A \code{NULL} value provided to \code{width} or \code{height} is ignored (i.e., the
default \code{width} or \code{height} of the graphics device is used).
For output, it will try to use the following devices, in this order:
quartz (via \code{\link[grDevices:png]{grDevices::png()}}), then \code{\link[Cairo:Cairo]{Cairo::CairoPNG()}},
and finally \code{\link[grDevices:png]{grDevices::png()}}. This is in order of quality of
output. Notably, plain \code{png} output on Linux and Windows may not
antialias some point shapes, resulting in poor quality output.
In some cases, \code{Cairo()} provides output that looks worse than
\code{png()}. To disable Cairo output for an app, use
\code{options(shiny.usecairo=FALSE)}.
}

View File

@@ -51,11 +51,11 @@ of the source code of your reactive expressions and observers.
}
\section{Functions}{
\itemize{
\item \code{reactlog()}: Return a list of reactive information. Can be used in conjunction with
\item \code{reactlog}: Return a list of reactive information. Can be used in conjunction with
\link[reactlog:reactlog_show]{reactlog::reactlog_show} to later display the reactlog graph.
\item \code{reactlogShow()}: Display a full reactlog graph for all sessions.
\item \code{reactlogReset()}: Resets the entire reactlog stack. Useful for debugging and removing all prior reactive history.
\item \code{reactlogShow}: Display a full reactlog graph for all sessions.
\item \code{reactlogReset}: Resets the entire reactlog stack. Useful for debugging and removing all prior reactive history.
}}

View File

@@ -37,7 +37,7 @@ information on the default sizing policy.}
(the default), \code{"session"}, or a cache object like a
\code{\link[cachem:cache_disk]{cachem::cache_disk()}}. See the Cache Scoping section for more information.}
\item{...}{Arguments to be passed through to \code{\link[=plotPNG]{plotPNG()}}.
\item{...}{Arguments to be passed through to \code{\link[grDevices:png]{grDevices::png()}}.
These can be used to set the width, height, background color, etc.}
\item{alt}{Alternate text for the HTML \verb{<img>} tag if it cannot be displayed

View File

@@ -35,10 +35,10 @@ When rendering an inline plot, you must provide numeric values (in pixels)
to both \code{width} and \code{height}.}
\item{res}{Resolution of resulting plot, in pixels per inch. This value is
passed to \code{\link[=plotPNG]{plotPNG()}}. Note that this affects the resolution of PNG
passed to \code{\link[grDevices:png]{grDevices::png()}}. Note that this affects the resolution of PNG
rendering in R; it won't change the actual ppi of the browser.}
\item{...}{Arguments to be passed through to \code{\link[=plotPNG]{plotPNG()}}.
\item{...}{Arguments to be passed through to \code{\link[grDevices:png]{grDevices::png()}}.
These can be used to set the width, height, background color, etc.}
\item{alt}{Alternate text for the HTML \verb{<img>} tag if it cannot be displayed

View File

@@ -96,10 +96,9 @@ The equivalent of hitting the browser's Reload button. Only works if the
session is actually connected.
}
\item{request}{
An environment that implements the \href{https://github.com/jeffreyhorner/Rook#the-environment}{Rook specification} for
HTTP requests. This is the request that was used to initiate the websocket
connection (as opposed to the request that downloaded the web page for the
app).
An environment that implements the Rook specification for HTTP requests.
This is the request that was used to initiate the websocket connection
(as opposed to the request that downloaded the web page for the app).
}
\item{userData}{
An environment for app authors and module/package authors to store whatever

View File

@@ -45,7 +45,6 @@ following files and directories is created:
`- tests
|- testthat.R
`- testthat
|- setup-shinytest2.R
|- test-examplemodule.R
|- test-server.R
|- test-shinytest2.R
@@ -68,7 +67,6 @@ choose to use or remove any of them. They can be executed by the
\verb{tests/testthat/} directory using the
\href{https://rstudio.github.io/shinytest2/reference/test_app.html}{shinytest2}
package.
\item \code{tests/testthat/setup-shinytest2.R} is setup file to source your \code{./R} folder into the testing environment.
\item \code{tests/testthat/test-examplemodule.R} is a test for an application's module server function.
\item \code{tests/testthat/test-server.R} is a test for the application's server code
\item \code{tests/testthat/test-shinytest2.R} is a test that uses the

View File

@@ -119,10 +119,9 @@ values are \code{"send"} (only print messages sent to the client),
messages).}
\item{shiny.autoload.r (defaults to \code{TRUE})}{If \code{TRUE}, then the R/
of a shiny app will automatically be sourced.}
\item{shiny.useragg (defaults to \code{TRUE})}{Set to \code{FALSE} to prevent PNG rendering via the
ragg package. See \code{\link[=plotPNG]{plotPNG()}} for more information.}
\item{shiny.usecairo (defaults to \code{TRUE})}{Set to \code{FALSE} to prevent PNG rendering via the
Cairo package. See \code{\link[=plotPNG]{plotPNG()}} for more information.}
\item{shiny.usecairo (defaults to \code{TRUE})}{This is used to disable graphical rendering by the
Cairo package, if it is installed. See \code{\link[=plotPNG]{plotPNG()}} for more
information.}
\item{shiny.devmode (defaults to \code{NULL})}{Option to enable Shiny Developer Mode. When set,
different default \code{getOption(key)} values will be returned. See \code{\link[=devmode]{devmode()}} for more details.}
}

View File

@@ -11,7 +11,7 @@ shinyServer(func)
for more information.}
}
\description{
\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#superseded}{\figure{lifecycle-superseded.svg}{options: alt='[Superseded]'}}}{\strong{[Superseded]}}
\lifecycle{superseded}
Defines the server-side logic of the Shiny application. This generally
involves creating functions that map user inputs to various kinds of output.
@@ -31,7 +31,7 @@ the Shiny application's page. It must take an \code{input} and an
optional \code{session} parameter, which is used when greater control is
needed.
See the \href{https://shiny.rstudio.com/tutorial/}{tutorial} for more
See the \href{https://rstudio.github.io/shiny/tutorial/}{tutorial} for more
on how to write a server function.
}
\examples{

View File

@@ -13,7 +13,7 @@ shinyUI(ui)
The user interface definition, without modifications or side effects.
}
\description{
\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#superseded}{\figure{lifecycle-superseded.svg}{options: alt='[Superseded]'}}}{\strong{[Superseded]}}
\lifecycle{superseded}
Historically this function was used in ui.R files to register a user
interface with Shiny. It is no longer required as of Shiny 0.10; simply

View File

@@ -29,12 +29,12 @@ Create a tab panel
}
\section{Functions}{
\itemize{
\item \code{tabPanel()}: Create a tab panel that can be included within a \code{\link[=tabsetPanel]{tabsetPanel()}} or a \code{\link[=navbarPage]{navbarPage()}}.
\item \code{tabPanel}: Create a tab panel that can be included within a \code{\link[=tabsetPanel]{tabsetPanel()}} or a \code{\link[=navbarPage]{navbarPage()}}.
\item \code{tabPanelBody()}: Create a tab panel that drops the title argument.
\item \code{tabPanelBody}: Create a tab panel that drops the title argument.
This function should be used within \code{tabsetPanel(type = "hidden")}. See \code{\link[=tabsetPanel]{tabsetPanel()}} for example usage.
}}
\examples{
# Show a tabset that includes a plot, summary, and
# table view of the generated distribution

View File

@@ -3,7 +3,7 @@
"homepage": "https://shiny.rstudio.com",
"repository": "github:rstudio/shiny",
"name": "@types/rstudio-shiny",
"version": "1.7.4-alpha.9001",
"version": "1.7.1-alpha.9003",
"license": "GPL-3.0-only",
"main": "",
"browser": "",
@@ -23,7 +23,7 @@
"@types/bootstrap-datepicker": "0.0.14",
"@types/datatables.net": "^1.10.19",
"@types/ion-rangeslider": "2.3.0",
"@types/jquery": "3.5.14",
"@types/jquery": "patch:@types/jquery@3.5.5#./srcts/patch/types-jquery.patch",
"@types/selectize": "0.12.34"
},
"devDependencies": {
@@ -32,34 +32,33 @@
"@babel/preset-env": "^7.14.2",
"@babel/preset-typescript": "^7.13.0",
"@babel/runtime": "^7.14.0",
"@deanc/esbuild-plugin-postcss": "^1.0.2",
"@deanc/esbuild-plugin-postcss": "^1.0.1",
"@testing-library/dom": "^7.31.0",
"@testing-library/jest-dom": "^5.12.0",
"@testing-library/user-event": "^13.1.9",
"@types/highlightjs": "^9.12.1",
"@types/jest": "^26.0.23",
"@types/jqueryui": "1.12.16",
"@types/jqueryui": "1.12.15",
"@types/lodash": "^4.14.170",
"@types/node": "^15.6.1",
"@types/showdown": "^1.9.3",
"@typescript-eslint/eslint-plugin": "^5.38.1",
"@typescript-eslint/parser": "^5.38.1",
"@typescript-eslint/eslint-plugin": "^4.25.0",
"@typescript-eslint/parser": "^4.25.0",
"autoprefixer": "^10.2.6",
"bootstrap-datepicker": "1.9.0",
"browserslist": "^4.19.1",
"caniuse-lite": "^1.0.30001312",
"core-js": "^3.13.0",
"esbuild": "^0.15.10",
"esbuild": "^0.12.4",
"esbuild-plugin-babel": "https://github.com/schloerke/esbuild-plugin-babel#patch-2",
"esbuild-plugin-globals": "^0.1.1",
"esbuild-plugin-sass": "^1.0.1",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-jest": "^27.0.4",
"eslint-plugin-jest-dom": "^4.0.2",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-unicorn": "^43.0.2",
"fs-readdir-recursive": "^1.1.0",
"esbuild-plugin-sass": "^0.5.2",
"eslint": "^7.27.0",
"eslint-config-prettier": "^7.2.0",
"eslint-plugin-jest": "^24.3.6",
"eslint-plugin-jest-dom": "^3.9.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-unicorn": "^33.0.1",
"ion-rangeslider": "2.3.1",
"jest": "^26.6.3",
"jquery": "3.6.0",
@@ -68,15 +67,15 @@
"node-gyp": "^8.1.0",
"phantomjs-prebuilt": "^2.1.16",
"postcss": "^8.3.5",
"prettier": "^2.7.1",
"prettier": "2.3.0",
"readcontrol": "^1.0.0",
"replace": "^1.2.1",
"selectize": "0.12.4",
"strftime": "0.9.2",
"ts-jest": "^26",
"ts-node": "^10.9.1",
"type-coverage": "^2.22.0",
"typescript": "^4.8.4",
"ts-node": "^10.0.0",
"type-coverage": "^2.17.5",
"typescript": "~4.1.5",
"util-inspect": "https://github.com/deecewan/browser-util-inspect#c0b4350df4378ffd743e8c36dd3898ce3992823e"
},
"scripts": {

View File

@@ -1,12 +1,944 @@
# Platform
|field |value |
|:--------|:----------------------------|
|version |R version 4.0.0 (2020-04-24) |
|os |macOS Catalina 10.15.5 |
|system |x86_64, darwin17.0 |
|ui |X11 |
|language |(EN) |
|collate |en_US.UTF-8 |
|ctype |en_US.UTF-8 |
|tz |America/New_York |
|date |2020-06-19 |
# Dependencies
|package |old |new |Δ |
|:-------|:-------|:-----|:--|
|shiny |1.4.0.2 |1.5.0 |* |
# Revdeps
## Failed to check (5)
## Failed to check (3)
|package |version |error |warning |note |
|:----------|:-------|:-----|:-------|:----|
|ctsem |3.6.0 |1 | | |
|diveR |? | | | |
|loon.shiny |? | | | |
|NA |? | | | |
|SSVS |? | | | |
|package |version |error |warning |note |
|:--------------------------------------|:-------|:-----|:-------|:----|
|[frailtypack](failures.md#frailtypack) |3.3.0 |1 | | |
|[Rariant](failures.md#rariant) |1.24.0 |1 | | |
|[skeleSim](failures.md#skelesim) |0.9.8 |1 | | |
## New problems (2)
|package |version |error |warning |note |
|:--------------------------------------------|:-------|:------|:-------|:--------|
|[bsplus](problems.md#bsplus) |0.1.1 |__+1__ | |1 |
|[RforProteomics](problems.md#rforproteomics) |1.26.0 | |1 |2 __+1__ |
## All (902)
|package |version |error |warning |note |
|:------------------------------------------------------------------------|:----------|:------|:-------|:--------|
|[aaSEA](problems.md#aasea) |1.1.0 | | |1 |
|ABACUS |1.0.0 | | | |
|abstractr |0.1.0 | | | |
|[ADAMgui](problems.md#adamgui) |1.4.0 | | |2 |
|[adapr](problems.md#adapr) |2.0.0 | | |1 |
|AdaptGauss |1.5.6 | | | |
|adaptiveGPCA |0.1.2 | | | |
|addinslist |0.3 | | | |
|addinsOutline |0.1.6 | | | |
|[adegenet](problems.md#adegenet) |2.1.3 | | |1 |
|[adepro](problems.md#adepro) |3.0.0 | | |1 |
|adespatial |0.3-8 | | | |
|[AdhereRViz](problems.md#adhererviz) |0.1.0 | | |1 |
|AFheritability |0.1.0 | | | |
|AFM |1.2.6 | | | |
|ahp |0.2.12 | | | |
|airGRteaching |0.2.8.69 | | | |
|[alevinQC](problems.md#alevinqc) |1.4.0 | | |1 |
|AMModels |0.1.4 | | | |
|AmpGram |1.0 | | | |
|[AMPLE](problems.md#ample) |0.0.2 | | |1 |
|AmyloGram |1.1 | | | |
|[analysisPipelines](problems.md#analysispipelines) |1.0.2 | | |1 |
|[animalcules](problems.md#animalcules) |1.4.0 |-1 | |4 |
|[animaltracker](problems.md#animaltracker) |0.1.0 | | |1 |
|[animint2](problems.md#animint2) |2019.7.3 |2 | |2 |
|aniview |0.1.0 | | | |
|[ANOVAIREVA](problems.md#anovaireva) |0.1.0 | | |1 |
|ANOVAreplication |1.1.4 | | | |
|[ANOVAShiny](problems.md#anovashiny) |0.1.0 | | |1 |
|antaresRead |2.2.5 | | | |
|antaresViz |0.15.2 | | | |
|AnthropMMD |3.0.1 | | | |
|[antitrust](problems.md#antitrust) |0.99.11 | | |1 |
|aos |0.1.0 | | | |
|[apexcharter](problems.md#apexcharter) |0.1.4 | | |1 |
|[appreci8R](problems.md#appreci8r) |1.6.0 |1 | | |
|[ArchaeoPhases](problems.md#archaeophases) |1.4.5 | | |1 |
|archivist |2.3.4 | | | |
|[arena2r](problems.md#arena2r) |1.0.0 | | |1 |
|argonDash |0.2.0 | | | |
|argonR |0.2.0 | | | |
|ARPobservation |1.2.0 | | | |
|arulesViz |1.3-3 | | | |
|asciiSetupReader |2.3.1 | | | |
|[ASSOCShiny](problems.md#assocshiny) |0.1.0 | | |1 |
|[AUCell](problems.md#aucell) |1.10.0 | | |4 |
|auth0 |0.2.1 | | | |
|AutoDeskR |0.1.3 | | | |
|autoshiny |0.0.2 | | | |
|[autoTS](problems.md#autots) |0.9.11 | | |1 |
|AzureAuth |1.2.4 | | | |
|azuremlsdk |0.6.85 | | | |
|backpipe |0.2.3 | | | |
|bairt |0.1.2 | | | |
|baRcodeR |0.1.5 | | | |
|[BARIS](problems.md#baris) |1.1.1 | | |1 |
|basictabler |0.3.1 | | | |
|[BatchQC](problems.md#batchqc) |1.16.0 |1 | |1 |
|[BayesBD](problems.md#bayesbd) |1.2 |1 | | |
|BayesianFROC |0.2.3 | | | |
|[BayesianNetwork](problems.md#bayesiannetwork) |0.1.5 | | |1 |
|[BayesNetBP](problems.md#bayesnetbp) |1.5.2 | | |1 |
|[BBEST](problems.md#bbest) |0.1-6 |1 | | |
|[BCEA](problems.md#bcea) |2.3-1.1 | | |1 |
|[bdchecks](problems.md#bdchecks) |0.1.7 | | |1 |
|[bdclean](problems.md#bdclean) |0.1.15 | | |1 |
|bdDwC |0.1.15 | | | |
|[bde](problems.md#bde) |1.0.1 | | |1 |
|BDEsize |1.2 | | | |
|BDP2 |0.1.3 | | | |
|[bea.R](problems.md#bear) |1.0.6 | | |1 |
|BEACH |1.3.1 | | | |
|[beanz](problems.md#beanz) |2.4 | | |3 |
|beats |0.1.1 | | | |
|[bestSDP](problems.md#bestsdp) |0.1.2 | | |1 |
|[BETS](problems.md#bets) |0.4.9 | |2 |1 |
|[bibliometrix](problems.md#bibliometrix) |3.0.2 | | |1 |
|BIGL |1.4.3 | | | |
|[bigPint](problems.md#bigpint) |1.4.0 | | |1 |
|[bigQueryR](problems.md#bigqueryr) |0.5.0 | | |1 |
|[billboarder](problems.md#billboarder) |0.2.8 | | |1 |
|[binovisualfields](problems.md#binovisualfields) |0.1.1 | | |1 |
|[bioCancer](problems.md#biocancer) |1.16.0 | |1 |2 |
|[BiocOncoTK](problems.md#bioconcotk) |1.8.0 |1 | |3 |
|[BioInstaller](problems.md#bioinstaller) |0.3.7 | | |1 |
|[BioNetStat](problems.md#bionetstat) |1.8.4 | | |4 |
|[BIRDS](problems.md#birds) |0.1 | | |2 |
|[biva](problems.md#biva) |0.1.0 | | |1 |
|[blkbox](problems.md#blkbox) |1.0 | | |2 |
|[blockCV](problems.md#blockcv) |2.1.1 | | |1 |
|blogdown |0.19 | | | |
|[BLRShiny](problems.md#blrshiny) |0.1.0 | | |1 |
|bookdown |0.19 | | | |
|bpbounds |0.1.4 | | | |
|bridger2 |0.1.0 | | | |
|bs4Dash |0.5.0 | | | |
|bSims |0.2-1 | | | |
|[bsplus](problems.md#bsplus) |0.1.1 |__+1__ | |1 |
|bullwhipgame |0.1.0 | | | |
|bunchr |1.2.0 | | | |
|bupaR |0.4.4 | | | |
|[caffsim](problems.md#caffsim) |0.2.2 | | |1 |
|CamelUp |0.1.1 | | | |
|[canvasXpress](problems.md#canvasxpress) |1.27.6-1 | | |1 |
|[CaPO4Sim](problems.md#capo4sim) |0.1.0 | | |1 |
|[cartools](problems.md#cartools) |0.1.0 | | |1 |
|causaloptim |0.7.1 | | | |
|cbsodataR |0.4.1 | | | |
|[ChAMP](problems.md#champ) |2.18.2 |1 | | |
|ChannelAttributionApp |1.2 | | | |
|cheatR |1.2.1 | | | |
|[CHETAH](problems.md#chetah) |1.4.0 | | |2 |
|[chipPCR](problems.md#chippcr) |0.0.8-10 | | |1 |
|[chromoMap](problems.md#chromomap) |0.2 | | |1 |
|chromVAR |1.10.0 | | | |
|[cicerone](problems.md#cicerone) |1.0.1 | | |1 |
|Cite |0.1.0 | | | |
|citr |0.3.2 | | | |
|[cjoint](problems.md#cjoint) |2.1.0 | | |2 |
|CLME |2.0-12 | | | |
|[clustDRM](problems.md#clustdrm) |0.1-0 | | |1 |
|[CLUSTShiny](problems.md#clustshiny) |0.1.0 | | |1 |
|cmsaf |2.0.1 |-1 | | |
|[CMShiny](problems.md#cmshiny) |0.1.0 | | |1 |
|cNORM |1.2.3 | | | |
|[CNVPanelizer](problems.md#cnvpanelizer) |1.20.0 | | |1 |
|CNVScope |3.0.9 | | | |
|[cocktailApp](problems.md#cocktailapp) |0.2.1 | | |1 |
|[codebook](problems.md#codebook) |0.9.2 | | |2 |
|[cognitoR](problems.md#cognitor) |1.0.1 | | |1 |
|colocr |0.1.1 | | | |
|colorspace |1.4-1 | | | |
|colourpicker |1.0 | | | |
|compareGroups |4.4.1 | | | |
|[COMPASS](problems.md#compass) |1.26.0 | | |3 |
|[competitiontoolbox](problems.md#competitiontoolbox) |0.1.2 | | |1 |
|complexity |1.1.1 | | | |
|condformat |0.9.0 | | | |
|condir |0.1.2 | | | |
|condvis |0.5-1 | | | |
|condvis2 |0.1.0 | | | |
|[conflr](problems.md#conflr) |0.1.1 | | |1 |
|convertr |0.1 | | | |
|[CoRegNet](problems.md#coregnet) |1.26.0 | |1 |2 |
|[corporaexplorer](problems.md#corporaexplorer) |0.8.2 | | |1 |
|[cosinor](problems.md#cosinor) |1.1 | | |1 |
|countfitteR |1.0 | | | |
|[coveffectsplot](problems.md#coveffectsplot) |0.0.9 | | |1 |
|[CRANsearcher](problems.md#cransearcher) |1.0.0 | | |1 |
|[crawl](problems.md#crawl) |2.2.1 | | |1 |
|credsubs |1.1.0 | | | |
|[crispRdesignR](problems.md#crisprdesignr) |1.1.5 | | |1 |
|[crisprseekplus](problems.md#crisprseekplus) |1.14.0 | | |1 |
|cromwellDashboard |0.5.1 | | | |
|cronR |0.4.0 | | | |
|[CrossICC](problems.md#crossicc) |1.2.0 | | |1 |
|[crossmeta](problems.md#crossmeta) |1.14.0 | |1 |2 |
|crosstalk |1.1.0.1 | | | |
|crunchy |0.3.1 | | | |
|[CSUV](problems.md#csuv) |0.1.0 |1 | | |
|[CTAShiny](problems.md#ctashiny) |0.1.0 | | |1 |
|[ctsem](problems.md#ctsem) |3.2.1 | | |3 |
|ctsGE |1.14.0 | | | |
|[CTShiny](problems.md#ctshiny) |0.1.0 | | |1 |
|CTTinShiny |0.1.0 | | | |
|CTTShiny |0.1 | | | |
|cubeview |0.2.0 | | | |
|[CVE](problems.md#cve) |1.11.2 |1 |1 |2 |
|cydar |1.12.0 | | | |
|CytobankAPIstats |2.0 | | | |
|d3heatmap |0.6.1.2 | | | |
|[d3Tree](problems.md#d3tree) |0.2.0 | | |1 |
|daqapo |0.3.0 | | | |
|[datacheck](problems.md#datacheck) |1.2.2 | | |2 |
|[datadigest](problems.md#datadigest) |1.0.2 | | |1 |
|[dataesgobr](problems.md#dataesgobr) |1.0.0 | | |1 |
|datamaps |0.0.3 | | | |
|datasets.load |1.4.0 | | | |
|daterangepicker |0.1.0 | | | |
|dccvalidator |0.2.0 | | | |
|ddpcr |1.15 | | | |
|[debrowser](problems.md#debrowser) |1.16.1 | | |1 |
|deepdep |0.2.1 | | | |
|deisotoper |0.0.7 | | | |
|[delayed](problems.md#delayed) |0.3.0 | | |1 |
|demoShiny |0.1 | | | |
|[DEP](problems.md#dep) |1.10.0 | | |1 |
|[detzrcr](problems.md#detzrcr) |0.3.0 | | |1 |
|dextergui |0.2.2 | | | |
|diffr |0.1 | | | |
|dipsaus |0.0.7 | | | |
|[DiscoRhythm](problems.md#discorhythm) |1.4.0 | | |2 |
|discoveR |1.2.4 | | | |
|disk.frame |0.3.6 | | | |
|distcomp |1.1 | | | |
|distill |0.8 | | | |
|distreg.vis |1.7.0 | | | |
|Distributacalcul |0.2.2 | | | |
|[diveRsity](problems.md#diversity) |1.9.90 | | |1 |
|DIZutils |0.0.4 | | | |
|[DLMtool](problems.md#dlmtool) |5.4.5 | | |1 |
|dmdScheme |1.2 | | | |
|[Doscheda](problems.md#doscheda) |1.10.0 | | |1 |
|[dosedesignR](problems.md#dosedesignr) |0.2.4 | | |1 |
|dpcR |0.5 | | | |
|[dplyrAssist](problems.md#dplyrassist) |0.1.0 | | |1 |
|dqshiny |0.0.4 | | | |
|[dragon](problems.md#dragon) |0.2.1 | | |1 |
|dragulaR |0.3.1 | | | |
|DRomics |2.0-1 | | | |
|[dropR](problems.md#dropr) |0.1 | | |1 |
|DSAIDE |0.8.3 | | | |
|DSAIRM |0.8.2 | | | |
|DT |0.13 | | | |
|DTAT |0.3-4 | | | |
|[dtwclust](problems.md#dtwclust) |5.5.6 | | |1 |
|[DVHmetrics](problems.md#dvhmetrics) |0.3.10 | | |1 |
|[dynamichazard](problems.md#dynamichazard) |0.6.6 | | |1 |
|DynNom |5.0.1 | | | |
|Eagle |2.2 | | | |
|eAnalytics |0.1.4 | | | |
|easySdcTable |0.5.0 | | | |
|[EBImage](problems.md#ebimage) |4.30.0 | |1 |1 |
|ECharts2Shiny |0.2.13 | | | |
|echarts4r |0.3.2 | | | |
|edeaR |0.8.5 | | | |
|edgebundleR |0.1.4 | | | |
|editData |0.1.2 | | | |
|eechidna |1.4.0 | | | |
|eemR |1.0.1 | | | |
|EffectLiteR |0.4-4 | | | |
|[effectR](problems.md#effectr) |1.0.2 | | |1 |
|egor |0.20.06 | | | |
|einet |0.1.0 | | | |
|elaborator |1.0 | | | |
|[elementR](problems.md#elementr) |1.3.6 |1 | | |
|[embryogrowth](problems.md#embryogrowth) |7.6 | | |1 |
|[EML](problems.md#eml) |2.0.2 | | |1 |
|EMMAgeo |0.9.7 | | | |
|EMSaov |2.3 | | | |
|emuR |2.1.0 | | | |
|[ENCODExplorer](problems.md#encodexplorer) |2.14.0 | | |1 |
|[enviGCMS](problems.md#envigcms) |0.6.6 | | |1 |
|enviPick |1.5 | | | |
|[epicontacts](problems.md#epicontacts) |1.1.0 | | |1 |
|epimdr |0.6-5 | | | |
|EpiModel |1.8.0 | | | |
|[EpiSignalDetection](problems.md#episignaldetection) |0.1.1 | | |1 |
|[epivizrChart](problems.md#epivizrchart) |1.10.0 | | |2 |
|eq5d |0.7.1 | | | |
|[erma](problems.md#erma) |1.4.0 | | |2 |
|ERSA |0.1.1 | | | |
|eSDM |0.3.4 | | | |
|eseis |0.5.0 | | | |
|esquisse |0.3.0 | | | |
|EurosarcBayes |1.1 | | | |
|evaluator |0.4.2 | | | |
|EventDetectGUI |0.3.0 | | | |
|[EventStudy](problems.md#eventstudy) |0.36 | | |2 |
|evobiR |1.1 | | | |
|excelR |0.4.0 | | | |
|ExPanDaR |0.5.1 | | | |
|explor |0.3.6 | | | |
|explore |0.5.5 | | | |
|ExploreModelMatrix |1.0.1 | | | |
|[ezplot](problems.md#ezplot) |0.6.1 | | |1 |
|Factoshiny |2.2 | | | |
|fanplot |3.4.2 | | | |
|[farrell](problems.md#farrell) |0.2.0 | | |1 |
|[FastqCleaner](problems.md#fastqcleaner) |1.6.0 | | |2 |
|[FELLA](problems.md#fella) |1.8.0 |1 | |1 |
|findviews |0.1.3 | | | |
|fingertipsR |1.0.4 | | | |
|[firebase](problems.md#firebase) |0.1.0 | | |1 |
|[fitteR](problems.md#fitter) |0.1.0 | | |1 |
|[fitur](problems.md#fitur) |0.6.1 | | |1 |
|flacco |1.8 | | | |
|[flair](problems.md#flair) |0.0.2 | | |1 |
|flexdashboard |0.5.1.1 | | | |
|[flora](problems.md#flora) |0.3.4 | | |1 |
|[flowAI](problems.md#flowai) |1.18.2 | | |1 |
|[flowcatchR](problems.md#flowcatchr) |1.22.0 | | |2 |
|flowPloidy |1.14.0 | | | |
|formatR |1.7 | | | |
|formattable |0.2.0.1 | | | |
|[frailtypack](failures.md#frailtypack) |3.3.0 |1 | | |
|FreqProf |0.0.1 | | | |
|frequency |0.4.0 | | | |
|fresh |0.2.0 | | | |
|[FSK2R](problems.md#fsk2r) |0.1.1 |1 | | |
|[FunChIP](problems.md#funchip) |1.14.0 |1 | | |
|FuzzyR |2.3 | | | |
|G2Sd |2.1.5 | | | |
|[g3viz](problems.md#g3viz) |1.1.2 | | |1 |
|[GA4GHshiny](problems.md#ga4ghshiny) |1.10.0 |1 | |1 |
|[gamesGA](problems.md#gamesga) |1.1.3.7 | | |1 |
|[gastempt](problems.md#gastempt) |0.5.0 | | |3 |
|gazepath |1.3 | | | |
|[GDCRNATools](problems.md#gdcrnatools) |1.8.0 | | |3 |
|GDINA |2.8.0 | | | |
|genBaRcode |1.2.3 | | | |
|[genBart](problems.md#genbart) |1.0.1 | | |1 |
|[GeneNetworkBuilder](problems.md#genenetworkbuilder) |1.30.0 | | |1 |
|GeneralizedUmatrix |1.1.9 | | | |
|[GenEst](problems.md#genest) |1.4.4 | | |1 |
|[GeneTonic](problems.md#genetonic) |1.0.1 | | |2 |
|genogeographer |0.1.19 | | | |
|[GenomicScores](problems.md#genomicscores) |2.0.0 |1 | |4 |
|genTS |0.1.3 | | | |
|geodrawr |1.0.1 | | | |
|[GerminaR](problems.md#germinar) |1.4.2 | | |1 |
|gestate |1.4.0 | | | |
|getTBinR |0.7.1 | | | |
|gfonts |0.1.1 | | | |
|[ggedit](problems.md#ggedit) |0.3.1 | | |1 |
|[ggExtra](problems.md#ggextra) |0.9 | | |1 |
|ggiraph |0.7.0 | | | |
|[ggplotAssist](problems.md#ggplotassist) |0.1.3 | | |1 |
|ggplotgui |1.0.0 | | | |
|[ggquickeda](problems.md#ggquickeda) |0.1.6 | | |1 |
|ggraptR |1.2 | | | |
|ggThemeAssist |0.1.5 | | | |
|ggvis |0.4.5 | | | |
|gimmeTools |0.1 | | | |
|giphyr |0.2.0 | | | |
|gitgadget |0.5.2 | | | |
|gitlabr |1.1.6 | | | |
|gitlink |0.1.3 | | | |
|glmaag |0.0.6 | | | |
|GMCM |1.4 | | | |
|[gmDatabase](problems.md#gmdatabase) |0.5.0 | |2 |1 |
|[GmicR](problems.md#gmicr) |1.2.0 | | |3 |
|GMSE |0.6.0.4 | | | |
|[GOFShiny](problems.md#gofshiny) |0.1.0 | | |1 |
|golem |0.2.1 | | | |
|googleAnalyticsR |0.7.1 | | | |
|googleAuthR |1.3.0 | | | |
|googleCloudRunner |0.2.0 | | | |
|googleLanguageR |0.3.0 | | | |
|googleVis |0.6.5 | | | |
|googleway |2.7.1 | | | |
|[GPA](problems.md#gpa) |1.0.0 | | |1 |
|GPoM.FDLyapu |1.0 | | | |
|[gQTLstats](problems.md#gqtlstats) |1.20.0 | | |4 |
|gradientPickerD3 |0.1.0.0 | | | |
|[gravitas](problems.md#gravitas) |0.1.2 |2 | | |
|[gridsampler](problems.md#gridsampler) |0.6 | | |1 |
|[GSCA](problems.md#gsca) |2.17.0 | | |3 |
|GSVA |1.36.2 | | | |
|[gt](problems.md#gt) |0.2.1 | | |2 |
|guiplot |0.1.0 | | | |
|[gwdegree](problems.md#gwdegree) |0.1.1 | | |1 |
|GWSDAT |3.0.3 | | | |
|[HaDeX](problems.md#hadex) |1.2.1 | | |2 |
|HARtools |0.0.5 | | | |
|[hchinamap](problems.md#hchinamap) |0.1.0 | | |1 |
|HelpersMG |4.2 | | | |
|HH |3.1-40 | | | |
|[highcharter](problems.md#highcharter) |0.7.0 | | |1 |
|highlightHTML |0.2.5 | | | |
|hpackedbubble |0.1.0 | | | |
|hR |0.2.1 | | | |
|[HumanTranscriptomeCompendium](problems.md#humantranscriptomecompendium) |1.4.0 |2 | | |
|[hwordcloud](problems.md#hwordcloud) |0.1.0 | | |1 |
|iAdapt |0.1.0 | | | |
|iCellR |1.5.1 | | | |
|iCOBRA |1.16.0 | | | |
|ICSShiny |0.5 | | | |
|[ideal](problems.md#ideal) |1.12.1 | | |1 |
|[idefix](problems.md#idefix) |0.4.3 | | |1 |
|[idem](problems.md#idem) |5.0 | | |2 |
|ifaTools |0.21 | | | |
|igraphinshiny |0.1 | | | |
|iheatmapr |0.4.12 | | | |
|imagefluency |0.2.3 | | | |
|Imetagene |1.18.0 | | | |
|[immunarch](problems.md#immunarch) |0.6.5 | | |2 |
|IMP |1.1 | | | |
|ImportExport |1.1 | | | |
|[IMWatson](problems.md#imwatson) |0.5.0 | | |1 |
|[IncucyteDRC](problems.md#incucytedrc) |0.5.4 |1 | | |
|[INDperform](problems.md#indperform) |0.2.2 |2 | |1 |
|inferr |0.3.0 | | | |
|[inlabru](problems.md#inlabru) |2.1.13 | | |2 |
|[INSPEcT](problems.md#inspect) |1.18.0 | | |2 |
|[interactiveDisplay](problems.md#interactivedisplay) |1.26.0 | |1 |2 |
|interactiveDisplayBase |1.26.3 | | | |
|[interAdapt](problems.md#interadapt) |0.1 | | |2 |
|interimApp |0.0.1 | | | |
|[IOHanalyzer](problems.md#iohanalyzer) |0.1.3 | | |2 |
|ioncopy |2.1.1 | | | |
|ipc |0.1.3 | | | |
|ipumsr |0.4.4 | | | |
|irtDemo |0.1.4 | | | |
|IRTShiny |1.2 | | | |
|[iSEE](problems.md#isee) |2.0.0 |2 | |2 |
|[iSEEu](problems.md#iseeu) |1.0.1 |2 | | |
|[iSTATS](problems.md#istats) |1.4 | | |1 |
|[ivygapSE](problems.md#ivygapse) |1.10.0 | | |2 |
|JMbayes |0.8-85 | | | |
|JointNets |2.0.1 | | | |
|[jpmesh](problems.md#jpmesh) |1.2.1 | | |1 |
|[jpndistrict](problems.md#jpndistrict) |0.3.7 | | |1 |
|[jsmodule](problems.md#jsmodule) |1.0.8 | | |1 |
|KappaGUI |2.0.2 | | | |
|KCSKNNShiny |0.1.0 | | | |
|KCSNBShiny |0.1.0 | | | |
|kgc |1.0.0.2 | | | |
|kgschart |1.3.5 | | | |
|[KNNShiny](problems.md#knnshiny) |0.1.0 | | |1 |
|[kokudosuuchi](problems.md#kokudosuuchi) |0.4.2 | | |1 |
|[koRpus](problems.md#korpus) |0.11-5 | | |1 |
|lavaan.shiny |1.2 | | | |
|LBSPR |0.1.5 | | | |
|lcars |0.3.1 | | | |
|lcsm |0.1.1 | | | |
|LDAvis |0.3.2 | | | |
|leaflet |2.0.3 | | | |
|[leaflet.extras2](problems.md#leafletextras2) |1.0.0 | | |1 |
|leaflet.minicharts |0.6.0 | | | |
|learnr |0.10.1 | | | |
|[learnstats](problems.md#learnstats) |0.1.1 | | |1 |
|[levi](problems.md#levi) |1.6.0 | | |2 |
|lifelogr |0.1.0 | | | |
|lightsout |0.3 | | | |
|[likert](problems.md#likert) |1.3.5 | | |1 |
|lime |0.5.1 | | | |
|linguisticsdown |1.2.0 | | | |
|linkspotter |1.2.0 | | | |
|linpk |1.0 | | | |
|listviewer |3.0.0 | | | |
|[live](problems.md#live) |1.5.13 | | |1 |
|[lmviz](problems.md#lmviz) |0.1.2 | | |1 |
|manipulateWidget |0.10.1 | | | |
|[mapdeck](problems.md#mapdeck) |0.3.3 | | |1 |
|[mapedit](problems.md#mapedit) |0.6.0 | | |1 |
|markdownInput |0.1.2 | | | |
|matman |1.1.0 | | | |
|MAVIS |1.1.3 | | | |
|MazamaSpatialUtils |0.6.4 | | | |
|MCPModPack |0.2 |-1 | | |
|mcvis |1.0.4 | | | |
|[MDSPCAShiny](problems.md#mdspcashiny) |0.1.0 | | |1 |
|meltt |0.4.1 | | | |
|[memapp](problems.md#memapp) |2.13 | | |1 |
|[memery](problems.md#memery) |0.5.2 | | |1 |
|merTools |0.5.0 | | | |
|[meta4diag](problems.md#meta4diag) |2.0.8 | | |1 |
|MetaAnalyser |0.2.1 | | | |
|metamer |0.2.0 | | | |
|metathis |1.0.2 | | | |
|[MetCirc](problems.md#metcirc) |1.18.0 | | |2 |
|[MethylAid](problems.md#methylaid) |1.22.0 |2 | |1 |
|[methylGSA](problems.md#methylgsa) |1.6.1 | | |1 |
|metricsgraphics |0.9.0 | | | |
|[mgcViz](problems.md#mgcviz) |0.1.6 | | |1 |
|[microhaplot](problems.md#microhaplot) |1.0.1 | | |1 |
|microsamplingDesign |1.0.7 | | | |
|midas |1.0.1 | | | |
|MIMSunit |0.9.1 | | | |
|[miniMeta](problems.md#minimeta) |0.2 | | |1 |
|miniUI |0.1.1.1 | | | |
|[miRcomp](problems.md#mircomp) |1.18.0 | |1 | |
|mirt |1.32.1 | | | |
|mirtCAT |1.9.3 | | | |
|[MLDAShiny](problems.md#mldashiny) |0.1.0 | | |1 |
|mldr |0.4.3 | | | |
|[MLInterfaces](problems.md#mlinterfaces) |1.68.0 | | |5 |
|[mlr3shiny](problems.md#mlr3shiny) |0.1.1 | | |1 |
|[MLRShiny](problems.md#mlrshiny) |0.1.0 | | |1 |
|[MLRShiny2](problems.md#mlrshiny2) |0.1.0 | | |1 |
|mlxR |4.1.3 | | | |
|[MMDiff2](problems.md#mmdiff2) |1.16.0 | | |4 |
|[MNLR](problems.md#mnlr) |0.1.0 | | |1 |
|modest |0.3-1 | | | |
|MODIStsp |1.4.0 | | | |
|Mondrian |1.1.0 | | | |
|mplot |1.0.4 | | | |
|mrMLM.GUI |4.0 | | | |
|[MSEtool](problems.md#msetool) |1.6.0 | | |1 |
|[MSGFgui](problems.md#msgfgui) |1.22.0 |1 | | |
|[MSnbase](problems.md#msnbase) |2.14.2 | | |3 |
|MSstatsQCgui |1.8.0 | | | |
|[mstrio](problems.md#mstrio) |11.2.1 | | |1 |
|MtreeRing |1.4.2 | | | |
|[MuChPoint](problems.md#muchpoint) |0.6.1 | | |1 |
|multichull |1.0.0 | | | |
|mwaved |1.1.7 | | | |
|mwshiny |2.1.0 | | | |
|NACHO |1.0.1 | | | |
|[nbc4va](problems.md#nbc4va) |1.1 |1 | |1 |
|[NBShiny](problems.md#nbshiny) |0.1.0 | | |1 |
|[NBShiny2](problems.md#nbshiny2) |0.1.0 | | |1 |
|[NDP](problems.md#ndp) |0.1.0 | | |1 |
|[neo4r](problems.md#neo4r) |0.1.1 | | |1 |
|netCoin |1.1.25 | | | |
|netrankr |0.2.1 | | | |
|nlgeocoder |0.1.3 | | | |
|NNTbiomarker |0.29.11 | | | |
|normalr |1.0.0 | | | |
|nph |2.0 | | | |
|[nprcgenekeepr](problems.md#nprcgenekeepr) |1.0.3 | | |1 |
|npregfast |1.5.1 | | | |
|nse2r |0.1.2 | | | |
|objectremover |0.7.0 | | | |
|[oceanis](problems.md#oceanis) |1.7.3 | | |2 |
|[omicplotR](problems.md#omicplotr) |1.8.0 | | |2 |
|[oneSENSE](problems.md#onesense) |1.10.0 | |1 |1 |
|[ontoProc](problems.md#ontoproc) |1.10.0 |1 | |3 |
|[oolong](problems.md#oolong) |0.3.4 | | |1 |
|OpenImageR |1.1.7 | | | |
|[openmetrics](problems.md#openmetrics) |0.1.1 | | |1 |
|[openPrimeRui](problems.md#openprimerui) |1.10.0 | | |2 |
|[oppr](problems.md#oppr) |1.0.2 | | |1 |
|optimStrat |2.1 | | | |
|OWEA |0.1.1 | | | |
|[pairsD3](problems.md#pairsd3) |0.1.0 | | |1 |
|[PanVizGenerator](problems.md#panvizgenerator) |1.16.0 | | |1 |
|ParallelLogger |2.0.0 | | | |
|paramGUI |2.1.4 | | | |
|parcoords |1.0.0 | | | |
|[PathoStat](problems.md#pathostat) |1.14.0 | | |1 |
|pcadapt |4.3.3 | | | |
|[pcaExplorer](problems.md#pcaexplorer) |2.14.2 | | |2 |
|[pcFactorStan](problems.md#pcfactorstan) |1.5.1 | | |2 |
|PCRedux |1.0-6 | | | |
|pdfsearch |0.3.0 | | | |
|PDShiny |0.1.0 | | | |
|PELVIS |2.0.1 | | | |
|[pepStat](problems.md#pepstat) |1.22.0 | | |3 |
|periscope |0.4.10-1 | | | |
|[phenocamr](problems.md#phenocamr) |1.1.4 | | |1 |
|phenofit |0.2.7 | | | |
|phenology |7.3 | | | |
|phuse |0.2.2 | | | |
|PhyloProfile |1.2.5 | | | |
|[piano](problems.md#piano) |2.4.0 | | |2 |
|pipe.design |0.5.1 | | | |
|pipefittr |0.1.2 | | | |
|[pitchRx](problems.md#pitchrx) |1.8.2 | | |1 |
|PivotalR |0.1.18.3.1 | | | |
|[pivottabler](problems.md#pivottabler) |1.5.0 | | |1 |
|pixels |0.1.0 | | | |
|PKconverter |1.5 | | | |
|pkgsearch |3.0.2 | | | |
|plainview |0.1.0 | | | |
|[plethem](problems.md#plethem) |0.1.7 |1 | |1 |
|[plotGrouper](problems.md#plotgrouper) |1.6.0 | | |1 |
|[plotly](problems.md#plotly) |4.9.2.1 | | |1 |
|plotROC |2.2.1 | | | |
|plotSEMM |2.4 | | | |
|plsr |0.0.1 | | | |
|[pmd](problems.md#pmd) |0.1.9 | | |1 |
|[pogos](problems.md#pogos) |1.8.0 | | |1 |
|[polaroid](problems.md#polaroid) |0.0.1 | | |1 |
|[polmineR](problems.md#polminer) |0.8.0 | | |1 |
|PopED |0.5.0 | | | |
|poppr |2.8.6 | | | |
|populationPDXdesign |1.0.3 | | | |
|powdR |1.2.2 | | | |
|powerlmm |0.4.0 | | | |
|ppcSpatial |0.2.0 | | | |
|pqantimalarials |0.2 | | | |
|[precisely](problems.md#precisely) |0.1.0 | | |1 |
|[PrecisionTrialDrawer](problems.md#precisiontrialdrawer) |1.4.0 |1 | | |
|[predictoR](problems.md#predictor) |1.1.0 | | |1 |
|[PREPShiny](problems.md#prepshiny) |0.1.0 | | |1 |
|[primirTSS](problems.md#primirtss) |1.6.1 | |1 |1 |
|[prioritizr](problems.md#prioritizr) |5.0.1 | | |2 |
|ProbBayes |1.1 | | | |
|[PROBShiny](problems.md#probshiny) |0.1.0 | | |1 |
|[processanimateR](problems.md#processanimater) |1.0.3 | | |1 |
|processmapR |0.3.4 | | | |
|processmonitR |0.1.0 | | | |
|processR |0.2.3 | | | |
|profvis |0.3.6 | | | |
|progressr |0.6.0 | | | |
|ProjectionBasedClustering |1.1.1 | | | |
|pRolocGUI |1.22.0 | | | |
|Prostar |1.20.0 | | | |
|[psichomics](problems.md#psichomics) |1.14.1 | | |1 |
|PupilPre |0.6.2 | | | |
|pushbar |0.1.0 | | | |
|[pwrEWAS](problems.md#pwrewas) |1.2.0 |2 | | |
|[QCA](problems.md#qca) |3.8.2 | | |2 |
|qgam |1.3.2 | | | |
|[qlcData](problems.md#qlcdata) |0.2.1 | | |1 |
|[qqplotr](problems.md#qqplotr) |0.0.4 | | |1 |
|qqvases |1.0.0 | | | |
|QRAGadget |0.1.0 | | | |
|qrage |1.0 | | | |
|QTL.gCIMapping.GUI |2.1 | | | |
|[questionr](problems.md#questionr) |0.7.1 | | |2 |
|R.SamBada |0.1.2 | | | |
|r2d3 |0.2.3 | | | |
|[R3CPET](problems.md#r3cpet) |1.20.0 |1 | | |
|r4ss |1.36.1 | | | |
|rabi |1.0.2 | | | |
|radarchart |0.3.1 | | | |
|radiant |1.3.2 | | | |
|radiant.basics |1.3.4 | | | |
|radiant.data |1.3.9 | | | |
|radiant.design |1.3.5 | | | |
|radiant.model |1.3.10 | | | |
|radiant.multivariate |1.3.5 | | | |
|radix |0.6 | | | |
|[RagGrid](problems.md#raggrid) |0.2.0 | | |1 |
|rainette |0.1.1 | | | |
|[rAmCharts](problems.md#ramcharts) |2.1.13 | | |1 |
|rangeMapper |0.3-7 | | | |
|[rangeModelMetadata](problems.md#rangemodelmetadata) |0.1.3 | | |1 |
|RanglaPunjab |2.3.4 | | | |
|[rapbase](problems.md#rapbase) |1.10.0 | | |1 |
|[Rariant](failures.md#rariant) |1.24.0 |1 | | |
|rbin |0.2.0 | | | |
|rblt |0.2.4.5 | | | |
|[rcellminer](problems.md#rcellminer) |2.10.0 | |1 |3 |
|[rCGH](problems.md#rcgh) |1.18.0 | | |2 |
|rclipboard |0.1.2 | | | |
|rco |1.0.1 | | | |
|rcrossref |1.0.0 | | | |
|[Rcwl](problems.md#rcwl) |1.4.2 |1 |4 |5 |
|[rddapp](problems.md#rddapp) |1.2.1 |1 | |2 |
|RDML |1.0 | | | |
|reactable |0.2.0 | | | |
|reactlog |1.0.0 | | | |
|reactR |0.4.2 | | | |
|[recmap](problems.md#recmap) |1.0.7 | | |1 |
|[ReDaMoR](problems.md#redamor) |0.4.2 | | |1 |
|[RefNet](problems.md#refnet) |1.24.0 | |1 | |
|refund.shiny |0.3.0 | | | |
|regexSelect |1.0.0 | | | |
|[regressoR](problems.md#regressor) |1.1.8 | | |1 |
|Repliscope |1.1.0 | | | |
|repo |2.1.5 | | | |
|[ReportingTools](problems.md#reportingtools) |2.28.0 | | |1 |
|reprex |0.3.0 | | | |
|[reverseR](problems.md#reverser) |0.1 | | |1 |
|revtools |0.4.1 | | | |
|[RforProteomics](problems.md#rforproteomics) |1.26.0 | |1 |2 __+1__ |
|[Rfssa](problems.md#rfssa) |1.0.0 | | |1 |
|RGA |0.4.2 | | | |
|[rgl](problems.md#rgl) |0.100.54 | | |2 |
|[rhandsontable](problems.md#rhandsontable) |0.3.7 | | |1 |
|Rilostat |1.1 | | | |
|rintrojs |0.2.2 | | | |
|rivr |1.2-2 | | | |
|[RLumShiny](problems.md#rlumshiny) |0.2.2 | | |1 |
|[rmarkdown](problems.md#rmarkdown) |2.3 | | |1 |
|[rmd](problems.md#rmd) |0.1.5 | | |1 |
|[RnBeads](problems.md#rnbeads) |2.6.0 | | |7 |
|rnn |0.9.8 | | | |
|roadoi |0.6 | | | |
|robmed |0.7.0 | | | |
|[RobStatTM](problems.md#robstattm) |1.0.2 | | |1 |
|[rosr](problems.md#rosr) |0.0.10 | | |1 |
|rPackedBar |0.2.2 | | | |
|[rpostgisLT](problems.md#rpostgislt) |0.6.0 | | |1 |
|rpredictit |0.0.2 | | | |
|[Rqc](problems.md#rqc) |1.22.0 | | |2 |
|[RQuantLib](problems.md#rquantlib) |0.4.12 |2 |1 | |
|rrtable |0.2.1 | | | |
|[rrvgo](problems.md#rrvgo) |1.0.0 | | |3 |
|RSCAT |1.1.0 | | | |
|rsconnect |0.8.16 | | | |
|[rtimicropem](problems.md#rtimicropem) |1.4.0 | | |1 |
|rTRMui |1.26.0 | | | |
|[RtutoR](problems.md#rtutor) |1.2 | | |1 |
|rusk |0.1.1 | | | |
|ruv |0.9.7.1 | | | |
|rwalkr |0.5.2 | | | |
|[RxODE](problems.md#rxode) |0.9.2-0 | | |1 |
|sadists |0.2.3 | | | |
|[safetyGraphics](problems.md#safetygraphics) |1.1.0 | | |1 |
|samr |3.0 | | | |
|[sangerseqR](problems.md#sangerseqr) |1.24.0 | | |1 |
|sankeywheel |0.1.0 | | | |
|[santaR](problems.md#santar) |1.0 | | |1 |
|[SC3](problems.md#sc3) |1.16.0 | | |3 |
|scdhlm |0.3.2 | | | |
|schex |1.2.0 | | | |
|[scone](problems.md#scone) |1.12.0 | | |1 |
|sdcHierarchies |0.18.2 | | | |
|sdcMicro |5.5.1 | | | |
|[SDEFSR](problems.md#sdefsr) |0.7.21 | | |1 |
|sdm |1.0-89 | | | |
|[SEA](problems.md#sea) |1.0 | | |1 |
|searchConsoleR |0.4.0 | | | |
|seasonalview |0.3 | | | |
|semantic.dashboard |0.1.5 | | | |
|[semdrw](problems.md#semdrw) |0.1.0 | | |1 |
|[SemNeT](problems.md#semnet) |1.3.0 | | |2 |
|sen2r |1.3.6 | | | |
|[seqplots](problems.md#seqplots) |1.26.0 | | |4 |
|serieslcb |0.4.0 | | | |
|[sglr](problems.md#sglr) |0.7 | | |2 |
|SHELF |1.7.0 | | | |
|shiny.info |0.2.0 | | | |
|[shiny.router](problems.md#shinyrouter) |0.1.1 | | |1 |
|[shiny.semantic](problems.md#shinysemantic) |0.3.0 | | |1 |
|[shinyAce](problems.md#shinyace) |0.4.1 | | |1 |
|[shinyaframe](problems.md#shinyaframe) |1.0.1 | | |1 |
|shinyalert |1.1 | | | |
|shinyanimate |0.3.0 | | | |
|shinybootstrap2 |0.2.1 | | | |
|[shinybrms](problems.md#shinybrms) |1.1.0 | | |1 |
|[shinyBS](problems.md#shinybs) |0.61 | | |1 |
|shinybusy |0.2.0 | | | |
|shinycssloaders |0.3 | | | |
|shinycustomloader |0.9.0 | | | |
|shinydashboard |0.7.1 | | | |
|shinydashboardPlus |0.7.0 | | | |
|shinyDND |0.1.0 | | | |
|[shinyEffects](problems.md#shinyeffects) |0.1.0 | | |1 |
|shinyEventLogger |0.1.1 | | | |
|shinyFeedback |0.2.0 | | | |
|shinyFiles |0.8.0 | | | |
|shinyglide |0.1.2 | | | |
|shinyHeatmaply |0.2.0 | | | |
|[shinyhelper](problems.md#shinyhelper) |0.3.2 | | |1 |
|ShinyImage |0.1.0 | | | |
|[ShinyItemAnalysis](problems.md#shinyitemanalysis) |1.3.3 | | |2 |
|shinyjqui |0.3.3 | | | |
|[shinyjs](problems.md#shinyjs) |1.1 | | |1 |
|[shinyKGode](problems.md#shinykgode) |1.0.5 | | |1 |
|shinyKnobs |0.1.3 | | | |
|shinylogs |0.1.7 | | | |
|shinyLP |1.1.2 | | | |
|shinymanager |1.0.200 | | | |
|shinymaterial |1.1.0 | | | |
|shinyMatrix |0.3.0 | | | |
|[shinyMethyl](problems.md#shinymethyl) |1.24.0 |1 | | |
|shinyML |0.2.0 | | | |
|shinyMobile |0.7.0 | | | |
|shinyMolBio |0.2 | | | |
|shinyNotes |0.0.1 | | | |
|shinyobjects |0.1.0 | | | |
|[shinypanels](problems.md#shinypanels) |0.5.0 | | |1 |
|[shinyr](problems.md#shinyr) |0.2.6 | | |1 |
|[shinyrecap](problems.md#shinyrecap) |0.1.0 | | |1 |
|shinyrecipes |0.1.0 | | | |
|shinyreforms |0.0.1 | | | |
|shinyRGL |0.1.0 | | | |
|shinySearchbar |1.0.0 | | | |
|shinySIR |0.1.1 | | | |
|shinystan |2.5.0 | | | |
|[shinyTANDEM](problems.md#shinytandem) |1.26.0 |1 | | |
|shinytest |1.4.0 | | | |
|shinythemes |1.1.2 | | | |
|shinyTime |1.0.1 | | | |
|shinytoastr |2.1.1 | | | |
|shinyTree |0.2.7 | | | |
|shinyWidgets |0.5.3 | | | |
|shinyypr |0.0.2 | | | |
|shotGroups |0.7.5.1 | | | |
|[sigmajs](problems.md#sigmajs) |0.1.5 | | |1 |
|sigmaNet |1.1.0 | | | |
|signalHsmm |1.5 | | | |
|[SimDesign](problems.md#simdesign) |2.0.1 | | |1 |
|simglm |0.8.0 | | | |
|simPATHy |0.4 | | | |
|[simplevis](problems.md#simplevis) |1.3.0 | | |1 |
|simrel |2.0.2 | | | |
|sinew |0.3.8 | | | |
|SingleCaseES |0.4.3 | | | |
|[singleCellTK](problems.md#singlecelltk) |1.8.0 | | |3 |
|sistec |0.1.0 | | | |
|[skeleSim](failures.md#skelesim) |0.9.8 |1 | | |
|[skpr](problems.md#skpr) |0.64.2 | | |2 |
|SMITIDvisu |0.0.6 | | | |
|snahelper |1.1.0 | | | |
|snotelr |1.0.4 | | | |
|[soc.ca](problems.md#socca) |0.7.3 | | |1 |
|Sofi |0.16.4.8 | | | |
|[soilcarbon](problems.md#soilcarbon) |1.2.0 | | |2 |
|[sojourner](problems.md#sojourner) |1.2.1 |1 | | |
|solvebio |2.7.2 | | | |
|SOMbrero |1.3 | | | |
|sortable |0.4.2 | | | |
|[soundgen](problems.md#soundgen) |1.7.0 | | |1 |
|[SpaDES.addins](problems.md#spadesaddins) |0.1.2 | | |1 |
|Spaniel |1.2.0 | | | |
|spANOVA |0.99.2 | | | |
|[spant](problems.md#spant) |1.6.0 | | |1 |
|sparkline |2.0 | | | |
|[sparklyr](problems.md#sparklyr) |1.2.0 | | |1 |
|[sparkTable](problems.md#sparktable) |1.3.0 | | |1 |
|SpatialCPie |1.4.0 | | | |
|[SpatialEpiApp](problems.md#spatialepiapp) |0.3 | | |2 |
|[spatialLIBD](problems.md#spatiallibd) |1.0.0 |1 | |1 |
|[spectrolab](problems.md#spectrolab) |0.0.9 | | |1 |
|spinifex |0.2.0 | | | |
|SpNetPrep |1.1 | | | |
|spotGUI |0.2.1 | | | |
|SqlRender |1.6.6 | | | |
|squid |0.1.2 | | | |
|[SSDM](problems.md#ssdm) |0.2.8 | | |1 |
|[ssrch](problems.md#ssrch) |1.4.0 | | |2 |
|[sstModel](problems.md#sstmodel) |1.0.0 | | |1 |
|[STAT](problems.md#stat) |0.1.0 | | |1 |
|statnetWeb |0.5.5 | | | |
|statsr |0.2.0 | | | |
|[steemr](problems.md#steemr) |0.1.3 | | |1 |
|StereoMorph |1.6.3 | | | |
|stmgui |0.1.6 | | | |
|[stminsights](problems.md#stminsights) |0.3.0 | | |1 |
|[STMotif](problems.md#stmotif) |2.0.0 | | |1 |
|[strand](problems.md#strand) |0.1.3 | | |1 |
|StratigrapheR |1.1.0 | | | |
|[subscreen](problems.md#subscreen) |2.0.1 | | |1 |
|SubVis |2.0.2 | | | |
|swirlify |0.5.3 | | | |
|[tableHTML](problems.md#tablehtml) |2.0.0 | | |2 |
|[tablerDash](problems.md#tablerdash) |0.1.0 | | |1 |
|tabulizer |0.2.2 | | | |
|taipan |0.1.2 | | | |
|target |1.2.0 | | | |
|[TAShiny](problems.md#tashiny) |0.1.0 | | |1 |
|[TBSignatureProfiler](problems.md#tbsignatureprofiler) |1.0.0 | | |1 |
|[TCGAbiolinksGUI](problems.md#tcgabiolinksgui) |1.14.0 | | |3 |
|[TeachBayes](problems.md#teachbayes) |1.0 | |1 | |
|teachingApps |1.0.8 | | | |
|[tenXplore](problems.md#tenxplore) |1.10.0 | | |1 |
|[TestDesign](problems.md#testdesign) |1.0.2 | | |1 |
|[testextra](problems.md#testextra) |0.1.0.1 | | |1 |
|[texPreview](problems.md#texpreview) |1.4.4 | | |1 |
|[TFutils](problems.md#tfutils) |1.8.0 |1 |1 |4 |
|themetagenomics |1.0.2 | | | |
|threeBrain |0.1.7 | | | |
|[tidycells](problems.md#tidycells) |0.2.2 |2 | | |
|tidycwl |1.0.4 | | | |
|tidyvpc |1.0.0 | | | |
|tigerstats |0.3.2 | | | |
|[timeline](problems.md#timeline) |0.9 | | |2 |
|[TimerQuant](problems.md#timerquant) |1.18.0 | | |1 |
|[timeseriesdb](problems.md#timeseriesdb) |0.4.1 | | |1 |
|[timevis](problems.md#timevis) |0.5 | | |1 |
|tippy |0.0.1 | | | |
|tmap |3.0 | | | |
|[tmaptools](problems.md#tmaptools) |3.0 | | |1 |
|TnT |1.10.0 | | | |
|toxEval |1.1.0 | | | |
|[TR8](problems.md#tr8) |0.9.21 | | |1 |
|trackdem |0.5.2 | | | |
|[trackeRapp](problems.md#trackerapp) |1.1 | | |1 |
|trackr |0.10.6 | | | |
|trade |0.5.4 | | | |
|treemap |2.4-2 | | | |
|TreeSearch |0.4.1 | | | |
|[treespace](problems.md#treespace) |1.1.3.2 | | |1 |
|TreeTools |1.0.0 | | | |
|Trendy |1.10.0 | | | |
|tricolore |1.2.2 | | | |
|[TSCAN](problems.md#tscan) |1.26.0 | | |1 |
|tsviz |0.1.0 | | | |
|[ttestshiny](problems.md#ttestshiny) |0.1.0 | | |1 |
|[TVTB](problems.md#tvtb) |1.14.0 | | |1 |
|[twoddpcr](problems.md#twoddpcr) |1.12.0 | | |1 |
|[TxRegInfra](problems.md#txreginfra) |1.8.0 | | |5 |
|[ubiquity](problems.md#ubiquity) |1.0.1 | | |1 |
|[UCSCXenaShiny](problems.md#ucscxenashiny) |0.5.0 | | |2 |
|UCSCXenaTools |1.3.1 | | | |
|[Ularcirc](problems.md#ularcirc) |1.6.0 |1 | | |
|Umatrix |3.3 | | | |
|[ursa](problems.md#ursa) |3.8.20 | | |1 |
|[VariantFiltering](problems.md#variantfiltering) |1.24.0 |1 | |3 |
|[VarSelLCM](problems.md#varsellcm) |2.1.3 | | |1 |
|[vdiffr](problems.md#vdiffr) |0.3.2 | | |1 |
|vegawidget |0.3.1 | | | |
|vici |0.5.2 | | | |
|VineCopula |2.3.0 | | | |
|[viromeBrowser](problems.md#viromebrowser) |1.0.0 | | |1 |
|[visit](problems.md#visit) |2.1 | | |2 |
|[visNetwork](problems.md#visnetwork) |2.0.9 | | |1 |
|vistributions |0.1.1 | | | |
|visvow |0.9.0 | | | |
|voronoiTreemap |0.2.0 | | | |
|VOSONDash |0.5.4 | | | |
|vov |0.1.0 | | | |
|vtree |4.0.0 | | | |
|[VTShiny](problems.md#vtshiny) |0.1.0 | | |1 |
|VWPre |1.2.3 | | | |
|[waiter](problems.md#waiter) |0.1.0 | | |1 |
|[wallace](problems.md#wallace) |1.0.6.2 | | |1 |
|[webr](problems.md#webr) |0.1.5 | | |1 |
|webshot |0.5.2 | | | |
|weco |1.2 | | | |
|weightr |2.0.2 | | | |
|wilson |2.4.0 | | | |
|wiqid |0.3.0 | | | |
|[wiseR](problems.md#wiser) |1.0.1 | | |2 |
|workflowr |1.6.2 | | | |
|wppExplorer |2.3-4 | | | |
|[wTO](problems.md#wto) |1.6.3 | | |1 |
|xplorerr |0.1.1 | | | |
|[xROI](problems.md#xroi) |0.9.13 | |1 | |
|[ymlthis](problems.md#ymlthis) |0.1.2 | | |1 |
|yonder |0.2.0 | | | |
|[yuimaGUI](problems.md#yuimagui) |1.3.0 | | |1 |
|zooimage |5.5.2 | | | |
|zscorer |0.3.1 | | | |

View File

@@ -1,15 +0,0 @@
## revdepcheck results
We checked 1039 reverse dependencies (1038 from CRAN + 1 from Bioconductor), comparing R CMD check results across CRAN and dev versions of this package.
* We saw 0 new problems
* We failed to check 4 packages
Issues with CRAN packages are summarised below.
### Failed to check
* ctsem (NA)
* diveR (NA)
* loon.shiny (NA)
* SSVS (NA)

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +1,13 @@
import type {
BuildFailure,
import {
build as esbuildBuild,
BuildIncremental,
BuildOptions,
BuildResult,
WatchMode,
} from "esbuild";
import { build as esbuildBuild } from "esbuild";
import readcontrol from "readcontrol";
import process from "process";
import { basename } from "path";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore; Type definitions are not found. This occurs when `strict: true` in tsconfig.json
import readcontrol from "readcontrol";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore; Type definitions are not found. This occurs when `strict: true` in tsconfig.json
import babelPlugin from "esbuild-plugin-babel";
const outDir = "./inst/www/shared/";
type ShinyDesc = { version: string; package: string; license: string };
@@ -52,7 +42,7 @@ async function build(
}
}
const onRebuild = function (error: BuildFailure | null) {
const onRebuild = function (error?: string) {
if (error) {
console.error(printNames.join(", "), "watch build failed:\n", error);
} else {
@@ -64,7 +54,7 @@ async function build(
};
let incremental = false;
let watch: WatchMode | false = false;
let watch: false | { onRebuild: (error, result) => void } = false;
if (process.argv.length >= 3 && process.argv[2] == "--watch") {
incremental = true;
@@ -83,9 +73,9 @@ async function build(
preserveSymlinks: true,
...opts,
}).then((x) => {
onRebuild(null);
onRebuild();
return x;
});
}
export { outDir, build, shinyDesc, banner, babelPlugin };
export { outDir, build, shinyDesc, banner };

View File

@@ -1,97 +0,0 @@
/*
Make sure all `*.ts` files contain `"jquery"` import statements to properly scope `jquery`.
Prior behavior:
- Use a patch file to remove globally declared `$` variable
- PR: https://github.com/rstudio/shiny/pull/3296/commits/169318382d1d00927d0148a16fde4c96a291a602
Prior reasoning:
- Only allow for jQuery type definitions to exist if imported.
- This is problematic as it can lead to improperly scoped values of `$`
- Ex:
* If `a.ts` imports jquery, then `b.ts` can see the global definition of `$`
even though `b.ts` does not import jquery.
* If `$` is not scoped / encapsulated, then it is possible to have
inconsistent versions of jquery executing within the shiny bundle.
Related:
- Open Issue ('16): https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11187
- Closed stale PR ('19): https://github.com/DefinitelyTyped/DefinitelyTyped/pull/40295/files
- Unsolved Issue ('14): https://github.com/DefinitelyTyped/DefinitelyTyped/issues/1564
- Multiple `$` conflicts ('22): https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/60443
- Bandaid PR ('22): https://github.com/DefinitelyTyped/DefinitelyTyped/pull/60444
Approach within this file:
* For every `*.ts` file:
* Do not use `jQuery` (use `$`!)
* If utilizing `$`
* Require `jquery` import statement
- Advantages:
- Does not require a yarn patch file or separate GitHub repo containing the patched type definitions.
- Disadvantages:
- Variable reassignment isn't caught `jq = $; jq(divs)`. (This should not happen, but it is possible.)
- Only tested when bundling is started, not on every file change.
- PR: https://github.com/rstudio/shiny/pull/3710
*/
import fs from "fs";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore; Type definitions are not found
import readdirRecursive from "fs-readdir-recursive";
import { isUndefined } from "lodash";
const verifyJqueryUsage = async function (filename: string): Promise<void> {
const contents = await fs.promises.readFile(filename, "utf8");
const lines = contents.toString().split("\n");
// Find if using `jQuery` in the file
const jqueryMatch = lines.find((line) => {
return line.includes("jQuery.") || line.includes("jQuery(");
});
if (!isUndefined(jqueryMatch)) {
throw (
`Using \`jQuery\` in file: ${filename}\n` +
`Match:\n${jqueryMatch}\n` +
"Please use `$` instead of `jQuery`\n" +
"See file ./srcts/build/_jquery.ts for more details"
);
}
// Find if using `$` in the file
const dollarMatch = lines.find((line) => {
return line.includes("$.") || line.includes("$(");
});
if (isUndefined(dollarMatch)) {
// No match found. Not using jquery
return;
}
// Using jquery, find that it is being imported
const importJquery = 'import $ from "jquery";';
const hasJqueryImport = lines.includes(importJquery);
if (!hasJqueryImport) {
// Not importing jquery, yell
throw (
`Using \`$\` in file: ${filename}\n` +
`Match:\n${dollarMatch}\n` +
`Please call \`${importJquery}\` at the top of the file.\n` +
"See file ./srcts/build/_jquery.ts for more details"
);
}
// Using jquery and importing it;
return;
};
const verifyJqueryImport = async function (dir = "."): Promise<void> {
const tsFiles = (readdirRecursive(dir) as string[])
.filter((path: string) => path.endsWith(".ts"))
.map((path) => dir + "/" + path);
// Run all checks in parallel
await Promise.all(tsFiles.map((file) => verifyJqueryUsage(file)));
return;
};
export { verifyJqueryImport };

View File

@@ -10,12 +10,6 @@ import globalsPlugin from "esbuild-plugin-globals";
const opts = {
bundle: false,
sourcemap: false,
// Oddly, esbuild seems to use the top-level tsconfig.json file even when just
// minifying JS to JS. Because that tsconfig file has "strict":true, esbuild
// ends up adding "use strict" to the top of each minified JS file, which can
// alter behavior. To avoid this, we have a separate tsconfig file with
// "alwaysStrict":false.
tsconfig: "srcts/build/external_libs_tsconfig.json",
};
readdir(outDir + "datepicker/js/locales/").then(async (localeFiles) => {

View File

@@ -1,6 +0,0 @@
{
"compilerOptions": {
"target": "ES5",
"alwaysStrict": false
}
}

View File

@@ -5,7 +5,8 @@
// - TypeScript -----------------------------------------------------------
import { banner, build, outDir, babelPlugin } from "./_build";
import { banner, build, outDir } from "./_build";
import babelPlugin from "esbuild-plugin-babel";
build({
bundle: true,
@@ -24,10 +25,8 @@ build({
// - Sass -----------------------------------------------------------
import autoprefixer from "autoprefixer";
import sassPlugin from "esbuild-plugin-sass";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore; Type definitions are not found. This occurs when `strict: true` in tsconfig.json
import postCssPlugin from "@deanc/esbuild-plugin-postcss";
import sassPlugin from "esbuild-plugin-sass";
const sassOpts = {
minify: true,

View File

@@ -3,10 +3,10 @@
// yarn build
// ```
import { banner, build, outDir, shinyDesc, babelPlugin } from "./_build";
import { banner, build, outDir, shinyDesc } from "./_build";
import globalsPlugin from "esbuild-plugin-globals";
import babelPlugin from "esbuild-plugin-babel";
import type { BuildOptions } from "esbuild";
import { verifyJqueryImport } from "./_jquery";
const opts: BuildOptions = {
entryPoints: ["srcts/src/index.ts"],
@@ -27,21 +27,12 @@ const opts: BuildOptions = {
banner: banner,
};
// Make sure all ts files contain jquery import statements before building
verifyJqueryImport("srcts/src")
.then(() => {
Promise.all([
build({
...opts,
outfile: outDir + "shiny.js",
}),
build({
...opts,
outfile: outDir + "shiny.min.js",
minify: true,
}),
]);
})
.catch((err) => {
console.error("Error:\n" + err);
});
build({
...opts,
outfile: outDir + "shiny.js",
});
build({
...opts,
outfile: outDir + "shiny.min.js",
minify: true,
});

View File

@@ -1,5 +1,7 @@
# `yarn` Patch files
* `types-jquery.patch`
* Do not export `$` as a globally available variable. When developing TS code, I like to have full control over the variables. It is good to have a record of where everything comes from. Shiny can not use the latest jQuery loaded onto the page and needs to use a scoped `jQuery` variable. In the end, we can shim the `jquery` import to be `window.jQuery`
* `yarn_pnp.patch`
* This file is currently not used and is outdated.
* This provides a good game plan on how to use PnP with Yarn once esbuild can easily be integrated with Yarn PnP.

View File

@@ -0,0 +1,21 @@
diff --git a/misc.d.ts b/misc.d.ts
index 126d374477db459e1a251f5af548e88b46f43cdd..948cfb287b0bfa6057f3ccbcd013579aef07a29a 100644
--- a/misc.d.ts
+++ b/misc.d.ts
@@ -6618,7 +6618,7 @@ $( "#checkMetaKey" ).click(function( event ) {
}
declare const jQuery: JQueryStatic;
-declare const $: JQueryStatic;
+// declare const $: JQueryStatic;
type _Event = Event;
type _UIEvent = UIEvent;
@@ -6643,6 +6643,6 @@ interface SymbolConstructor {
readonly toStringTag: symbol;
}
-declare var Symbol: SymbolConstructor;
+// declare var Symbol: SymbolConstructor;
// #endregion

View File

@@ -1,8 +1,9 @@
import $ from "jquery";
import { hasDefinedProperty } from "../../utils";
import { InputBinding } from "./inputBinding";
type ActionButtonReceiveMessageData = { label?: string; icon?: string | [] };
import { hasOwnProperty } from "../../utils";
type ActionButtonReceiveMessageData = { label?: string; icon?: string };
class ActionButtonInputBinding extends InputBinding {
find(scope: HTMLElement): JQuery<HTMLElement> {
@@ -39,7 +40,7 @@ class ActionButtonInputBinding extends InputBinding {
const $el = $(el);
// retrieve current label and icon
let label: string = $el.text();
let label = $el.text();
let icon = "";
// to check (and store) the previous icon, we look for a $el child
@@ -56,18 +57,16 @@ class ActionButtonInputBinding extends InputBinding {
}
// update the requested properties
if (hasDefinedProperty(data, "label")) {
label = data.label;
}
if (hasDefinedProperty(data, "icon")) {
// `data.icon` can be an [] if user gave `character(0)`.
icon = Array.isArray(data.icon) ? "" : data.icon ?? "";
if (hasOwnProperty(data, "label")) label = data.label;
if (hasOwnProperty(data, "icon")) {
icon = data.icon;
// if the user entered icon=character(0), remove the icon
if (icon.length === 0) icon = "";
}
// produce new html
$el.html(icon + " " + label);
}
unsubscribe(el: HTMLElement): void {
$(el).off(".actionButtonInputBinding");
}

View File

@@ -1,6 +1,6 @@
import $ from "jquery";
import { InputBinding } from "./inputBinding";
import { hasDefinedProperty } from "../../utils";
import { hasOwnProperty } from "../../utils";
type CheckedHTMLElement = HTMLInputElement;
@@ -35,15 +35,12 @@ class CheckboxInputBinding extends InputBinding {
el: CheckedHTMLElement,
data: CheckboxReceiveMessageData
): void {
if (hasDefinedProperty(data, "value")) {
el.checked = data.value;
}
if (hasOwnProperty(data, "value")) el.checked = data.value;
// checkboxInput()'s label works different from other
// input labels...the label container should always exist
if (hasDefinedProperty(data, "label")) {
if (hasOwnProperty(data, "label"))
$(el).parent().find("span").text(data.label);
}
$(el).trigger("change");
}

View File

@@ -1,7 +1,7 @@
import $ from "jquery";
import { InputBinding } from "./inputBinding";
import { $escape, updateLabel, hasDefinedProperty } from "../../utils";
import { $escape, hasOwnProperty, updateLabel } from "../../utils";
import type { CheckedHTMLElement } from "./checkbox";
type CheckboxGroupHTMLElement = CheckedHTMLElement;
@@ -24,11 +24,9 @@ function getLabelNode(el: CheckboxGroupHTMLElement): JQuery<HTMLElement> {
// Given an input DOM object, get the associated label. Handles labels
// that wrap the input as well as labels associated with 'for' attribute.
function getLabel(obj: HTMLElement): string | null {
const parentNode = obj.parentNode as HTMLElement;
// If <label><input /><span>label text</span></label>
if (parentNode.tagName === "LABEL") {
return $(parentNode).find("span").text().trim();
if ((obj.parentNode as HTMLElement).tagName === "LABEL") {
return $(obj.parentNode).find("span").text().trim();
}
return null;
@@ -37,11 +35,9 @@ function getLabel(obj: HTMLElement): string | null {
// that wrap the input as well as labels associated with 'for' attribute.
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function setLabel(obj: HTMLElement, value: string): null {
const parentNode = obj.parentNode as HTMLElement;
// If <label><input /><span>label text</span></label>
if (parentNode.tagName === "LABEL") {
$(parentNode).find("span").text(value);
if ((obj.parentNode as HTMLElement).tagName === "LABEL") {
$(obj.parentNode).find("span").text(value);
}
return null;
@@ -62,10 +58,7 @@ class CheckboxGroupInputBinding extends InputBinding {
}
return values;
}
setValue(el: HTMLElement, value: string[] | string | null): void {
// Null value should be treated as empty array
value = value ?? [];
setValue(el: HTMLElement, value: string[] | string): void {
// Clear all checkboxes
$('input:checkbox[name="' + $escape(el.id) + '"]').prop("checked", false);
@@ -120,7 +113,7 @@ class CheckboxGroupInputBinding extends InputBinding {
const $el = $(el);
// This will replace all the options
if (hasDefinedProperty(data, "options")) {
if (hasOwnProperty(data, "options")) {
// Clear existing options and add each new one
$el.find("div.shiny-options-group").remove();
// Backward compatibility: for HTML generated by shinybootstrap2 package
@@ -128,9 +121,7 @@ class CheckboxGroupInputBinding extends InputBinding {
$el.append(data.options);
}
if (hasDefinedProperty(data, "value")) {
this.setValue(el, data.value);
}
if (hasOwnProperty(data, "value")) this.setValue(el, data.value);
updateLabel(data.label, getLabelNode(el));

View File

@@ -5,9 +5,8 @@ import {
updateLabel,
$escape,
parseDate,
hasDefinedProperty,
hasOwnProperty,
} from "../../utils";
import type { NotUndefined } from "../../utils/extraTypes";
declare global {
interface JQuery {
@@ -15,9 +14,7 @@ declare global {
bsDatepicker(methodName: "getUTCDate"): Date;
// Infinity is not allowed as a literal return type. Using `1e9999` as a placeholder that resolves to Infinity
// https://github.com/microsoft/TypeScript/issues/32277
// eslint-disable-next-line @typescript-eslint/no-loss-of-precision
bsDatepicker(methodName: "getStartDate"): Date | -1e9999;
// eslint-disable-next-line @typescript-eslint/no-loss-of-precision
bsDatepicker(methodName: "getEndDate"): Date | 1e9999;
bsDatepicker(methodName: string): void;
bsDatepicker(methodName: string, params: Date | null): void;
@@ -125,7 +122,8 @@ class DateInputBindingBase extends InputBinding {
}
// Given an unambiguous date string or a Date object, set the min (start) date.
// null will unset. undefined will result in no change,
protected _setMin(el: HTMLElement, date: Date | null): void {
protected _setMin(el: HTMLElement, date: Date | null | undefined): void {
if (date === undefined) return;
if (date === null) {
$(el).bsDatepicker("setStartDate", null);
return;
@@ -163,7 +161,8 @@ class DateInputBindingBase extends InputBinding {
}
// Given an unambiguous date string or a Date object, set the max (end) date
// null will unset.
protected _setMax(el: HTMLElement, date: Date | null): void {
protected _setMax(el: HTMLElement, date: Date): void {
if (date === undefined) return;
if (date === null) {
$(el).bsDatepicker("setEndDate", null);
return;
@@ -237,7 +236,7 @@ class DateInputBinding extends DateInputBindingBase {
return formatDateUTC(date);
}
// value must be an unambiguous string like '2001-01-01', or a Date object.
setValue(el: HTMLElement, value: Date | null): void {
setValue(el: HTMLElement, value: Date): void {
// R's NA, which is null here will remove current value
if (value === null) {
$(el).find("input").val("").bsDatepicker("update");
@@ -287,7 +286,7 @@ class DateInputBinding extends DateInputBindingBase {
return {
label: this._getLabelNode(el).text(),
value: this.getValue(el),
valueString: $input.val() as NotUndefined<ReturnType<typeof $input.val>>,
valueString: $input.val(),
min: min,
max: max,
language: $input.data("datepicker").language,
@@ -301,14 +300,14 @@ class DateInputBinding extends DateInputBindingBase {
updateLabel(data.label, this._getLabelNode(el));
if (hasDefinedProperty(data, "min")) this._setMin($input[0], data.min);
if (hasOwnProperty(data, "min")) this._setMin($input[0], data.min);
if (hasDefinedProperty(data, "max")) this._setMax($input[0], data.max);
if (hasOwnProperty(data, "max")) this._setMax($input[0], data.max);
// Must set value only after min and max have been set. If new value is
// outside the bounds of the previous min/max, then the result will be a
// blank input.
if (hasDefinedProperty(data, "value")) this.setValue(el, data.value);
if (hasOwnProperty(data, "value")) this.setValue(el, data.value);
$(el).trigger("change");
}

View File

@@ -3,7 +3,7 @@ import $ from "jquery";
import {
$escape,
formatDateUTC,
hasDefinedProperty,
hasOwnProperty,
updateLabel,
} from "../../utils";
import { DateInputBindingBase } from "./date";
@@ -114,12 +114,12 @@ class DateRangeInputBinding extends DateInputBindingBase {
updateLabel(data.label, getLabelNode(el));
if (hasDefinedProperty(data, "min")) {
if (hasOwnProperty(data, "min")) {
this._setMin($startinput[0], data.min);
this._setMin($endinput[0], data.min);
}
if (hasDefinedProperty(data, "max")) {
if (hasOwnProperty(data, "max")) {
this._setMax($startinput[0], data.max);
this._setMax($endinput[0], data.max);
}
@@ -127,9 +127,7 @@ class DateRangeInputBinding extends DateInputBindingBase {
// Must set value only after min and max have been set. If new value is
// outside the bounds of the previous min/max, then the result will be a
// blank input.
if (hasDefinedProperty(data, "value")) {
this.setValue(el, data.value);
}
if (hasOwnProperty(data, "value")) this.setValue(el, data.value);
$el.trigger("change");
}

View File

@@ -24,7 +24,6 @@ function enableDraghover(el: JQuery<HTMLElement>): JQuery<HTMLElement> {
const $el = $(el);
let childCounter = 0;
/* eslint-disable @typescript-eslint/naming-convention */
$el.on({
"dragenter.draghover": (e) => {
if (childCounter++ === 0) {
@@ -92,7 +91,7 @@ function canSetFiles(fileList: FileList): boolean {
return true;
}
function handleDrop(e: JQuery.DragEventBase, el: HTMLInputElement): void {
const files = e.originalEvent?.dataTransfer?.files,
const files = e.originalEvent.dataTransfer.files,
$el = $(el);
if (files === undefined || files === null) {
@@ -110,7 +109,7 @@ function handleDrop(e: JQuery.DragEventBase, el: HTMLInputElement): void {
// 3. The browser supports FileList and input.files assignment.
// (Chrome, Safari)
$el.val("");
el.files = files;
el.files = e.originalEvent.dataTransfer.files;
// Recent versions of Firefox (57+, or "Quantum" and beyond) don't seem to
// automatically trigger a change event, so we trigger one manually here.
// On browsers that do trigger change, this operation appears to be
@@ -189,7 +188,7 @@ function uploadFiles(evt: JQuery.DragEvent): void {
// TODO-barret ; Should this be an internal class property?
let $fileInputs = $();
function fileInputBindingGetId(this: any, el: HTMLInputElement): string {
function fileInputBindingGetId(el: HTMLInputElement): string {
return InputBinding.prototype.getId.call(this, el) || el.name;
}

View File

@@ -2,13 +2,14 @@ import type { RatePolicyModes } from "../../inputPolicies/inputRateDecorator";
import type { BindScope } from "../../shiny/bind";
class InputBinding {
name!: string;
name: string;
// Returns a jQuery object or element array that contains the
// descendants of scope that match this binding
find(scope: BindScope): JQuery<HTMLElement> {
throw "Not implemented";
scope; // unused var
// add so that typescript isn't mad about an unused var
scope;
}
getId(el: HTMLElement): string {
@@ -17,9 +18,9 @@ class InputBinding {
// Gives the input a type in case the server needs to know it
// to deserialize the JSON correctly
getType(el: HTMLElement): string | null {
return null;
el; // unused var
getType(el: HTMLElement): string | false {
return false;
el;
}
getValue(el: HTMLElement): any {
throw "Not implemented";
@@ -31,12 +32,12 @@ class InputBinding {
// getRatePolicy. If false, send value immediately. Default behavior is `false`
subscribe(el: HTMLElement, callback: (value: boolean) => void): void {
// empty
el; // unused var
callback; // unused var
el;
callback;
}
unsubscribe(el: HTMLElement): void {
// empty
el; // unused var
el;
}
// This is used for receiving messages that tell the input object to do
@@ -46,19 +47,19 @@ class InputBinding {
// trigger a change event.
receiveMessage(el: HTMLElement, data: unknown): void {
throw "Not implemented";
el; // unused var
data; // unused var
el;
data;
}
getState(el: HTMLElement): unknown {
throw "Not implemented";
el; // unused var
el;
}
getRatePolicy(
el: HTMLElement
): { policy: RatePolicyModes; delay: number } | null {
return null;
el; // unused var
el;
}
// Some input objects need initialization before being bound. This is

View File

@@ -1,5 +1,5 @@
import $ from "jquery";
import { $escape, hasDefinedProperty, updateLabel } from "../../utils";
import { $escape, hasOwnProperty, updateLabel } from "../../utils";
import { TextInputBindingBase } from "./text";
type NumberHTMLElement = HTMLInputElement;
@@ -23,9 +23,7 @@ class NumberInputBinding extends TextInputBindingBase {
return $(scope).find('input[type="number"]');
}
getValue(
el: NumberHTMLElement
): string[] | number | string | null | undefined {
getValue(el: NumberHTMLElement): string[] | number | string {
const numberVal = $(el).val();
if (typeof numberVal == "string") {
@@ -51,12 +49,10 @@ class NumberInputBinding extends TextInputBindingBase {
el;
}
receiveMessage(el: NumberHTMLElement, data: NumberReceiveMessageData): void {
// Setting values to `""` will remove the attribute value from the DOM element.
// The attr key will still remain, but there is not value... ex: `<input id="foo" type="number" min max/>`
if (hasDefinedProperty(data, "value")) el.value = data.value ?? "";
if (hasDefinedProperty(data, "min")) el.min = data.min ?? "";
if (hasDefinedProperty(data, "max")) el.max = data.max ?? "";
if (hasDefinedProperty(data, "step")) el.step = data.step ?? "";
if (hasOwnProperty(data, "value")) el.value = data.value;
if (hasOwnProperty(data, "min")) el.min = data.min;
if (hasOwnProperty(data, "max")) el.max = data.max;
if (hasOwnProperty(data, "step")) el.step = data.step;
updateLabel(data.label, getLabelNode(el));

View File

@@ -1,6 +1,6 @@
import $ from "jquery";
import { InputBinding } from "./inputBinding";
import { $escape, hasDefinedProperty, updateLabel } from "../../utils";
import { $escape, hasOwnProperty, updateLabel } from "../../utils";
type RadioHTMLElement = HTMLInputElement;
@@ -10,7 +10,7 @@ type ValueLabelObject = {
};
type RadioReceiveMessageData = {
value?: string | [];
value?: string;
options?: ValueLabelObject[];
label: string;
};
@@ -24,11 +24,9 @@ function getLabelNode(el: RadioHTMLElement): JQuery<HTMLElement> {
// Given an input DOM object, get the associated label. Handles labels
// that wrap the input as well as labels associated with 'for' attribute.
function getLabel(obj: HTMLElement): string | null {
const parentNode = obj.parentNode as HTMLElement;
// If <label><input /><span>label text</span></label>
if (parentNode.tagName === "LABEL") {
return $(parentNode).find("span").text().trim();
if ((obj.parentNode as HTMLElement).tagName === "LABEL") {
return $(obj.parentNode).find("span").text().trim();
}
return null;
@@ -37,11 +35,9 @@ function getLabel(obj: HTMLElement): string | null {
// that wrap the input as well as labels associated with 'for' attribute.
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function setLabel(obj: HTMLElement, value: string): null {
const parentNode = obj.parentNode as HTMLElement;
// If <label><input /><span>label text</span></label>
if (parentNode.tagName === "LABEL") {
$(parentNode).find("span").text(value);
if ((obj.parentNode as HTMLElement).tagName === "LABEL") {
$(obj.parentNode).find("span").text(value);
}
return null;
@@ -51,9 +47,7 @@ class RadioInputBinding extends InputBinding {
find(scope: HTMLElement): JQuery<HTMLElement> {
return $(scope).find(".shiny-input-radiogroup");
}
getValue(
el: RadioHTMLElement
): string[] | number | string | null | undefined {
getValue(el: RadioHTMLElement): string[] | number | string | null {
// Select the radio objects that have name equal to the grouping div's id
const checkedItems = $(
'input:radio[name="' + $escape(el.id) + '"]:checked'
@@ -67,8 +61,8 @@ class RadioInputBinding extends InputBinding {
return checkedItems.val();
}
setValue(el: RadioHTMLElement, value: string | []): void {
if (Array.isArray(value) && value.length === 0) {
setValue(el: RadioHTMLElement, value: string): void {
if ($.isArray(value) && value.length === 0) {
// Removing all checked item if the sent data is empty
$('input:radio[name="' + $escape(el.id) + '"]').prop("checked", false);
} else {
@@ -83,7 +77,7 @@ class RadioInputBinding extends InputBinding {
}
getState(el: RadioHTMLElement): {
label: string;
value: ReturnType<RadioInputBinding["getValue"]>;
value: string[] | number | string;
options: ValueLabelObject[];
} {
const $objs = $(
@@ -107,20 +101,16 @@ class RadioInputBinding extends InputBinding {
const $el = $(el);
// This will replace all the options
if (hasDefinedProperty(data, "options")) {
if (hasOwnProperty(data, "options")) {
// Clear existing options and add each new one
$el.find("div.shiny-options-group").remove();
// Backward compatibility: for HTML generated by shinybootstrap2 package
$el.find("label.radio").remove();
// @ts-expect-error; TODO-barret; IDK what this line is doing
// TODO-barret; Should this line be setting attributes instead?
// `data.options` is an array of `{value, label}` objects
$el.append(data.options);
}
if (hasDefinedProperty(data, "value")) {
this.setValue(el, data.value);
}
if (hasOwnProperty(data, "value")) this.setValue(el, data.value);
updateLabel(data.label, getLabelNode(el));

View File

@@ -1,8 +1,7 @@
import $ from "jquery";
import { InputBinding } from "./inputBinding";
import { $escape, hasDefinedProperty, updateLabel } from "../../utils";
import { $escape, hasOwnProperty, updateLabel } from "../../utils";
import { indirectEval } from "../../utils/eval";
import type { NotUndefined } from "../../utils/extraTypes";
type SelectHTMLElement = HTMLSelectElement & { nonempty: boolean };
@@ -14,9 +13,8 @@ type SelectInputReceiveMessageData = {
value?: string;
};
type SelectizeOptions = Selectize.IOptions<string, unknown>;
type SelectizeInfo = Selectize.IApi<string, unknown> & {
settings: SelectizeOptions;
settings: Selectize.IOptions<string, unknown>;
};
function getLabelNode(el: SelectHTMLElement): JQuery<HTMLElement> {
@@ -44,7 +42,7 @@ class SelectInputBinding extends InputBinding {
find(scope: HTMLElement): JQuery<HTMLElement> {
return $(scope).find("select");
}
getType(el: HTMLElement): string | null {
getType(el: HTMLElement): string {
const $el = $(el);
if (!$el.hasClass("symbol")) {
@@ -60,10 +58,8 @@ class SelectInputBinding extends InputBinding {
getId(el: SelectHTMLElement): string {
return InputBinding.prototype.getId.call(this, el) || el.name;
}
getValue(
el: HTMLElement
): NotUndefined<ReturnType<JQuery<HTMLElement>["val"]>> {
return $(el).val() as NotUndefined<ReturnType<JQuery<HTMLElement>["val"]>>;
getValue(el: HTMLElement): string[] | number | string {
return $(el).val();
}
setValue(el: SelectHTMLElement, value: string): void {
if (!isSelectize(el)) {
@@ -71,12 +67,14 @@ class SelectInputBinding extends InputBinding {
} else {
const selectize = this._selectize(el);
selectize?.setValue(value);
if (selectize) {
selectize.setValue(value);
}
}
}
getState(el: SelectHTMLElement): {
label: JQuery<HTMLElement>;
value: ReturnType<SelectInputBinding["getValue"]>;
value: string[] | number | string;
options: Array<{ value: string; label: string }>;
} {
// Store options in an array of objects, each with with value and label
@@ -103,21 +101,21 @@ class SelectInputBinding extends InputBinding {
data: SelectInputReceiveMessageData
): void {
const $el = $(el);
let selectize;
// This will replace all the options
if (hasDefinedProperty(data, "options")) {
const selectize = this._selectize(el);
if (hasOwnProperty(data, "options")) {
selectize = this._selectize(el);
// Must destroy selectize before appending new options, otherwise
// selectize will restore the original select
selectize?.destroy();
if (selectize) selectize.destroy();
// Clear existing options and add each new one
$el.empty().append(data.options);
this._selectize(el);
}
// re-initialize selectize
if (hasDefinedProperty(data, "config")) {
if (hasOwnProperty(data, "config")) {
$el
.parent()
.find('script[data-for="' + $escape(el.id) + '"]')
@@ -126,22 +124,12 @@ class SelectInputBinding extends InputBinding {
}
// use server-side processing for selectize
if (hasDefinedProperty(data, "url")) {
type CallbackFn = Parameters<
NonNullable<SelectizeInfo["settings"]["load"]>
>[1];
const selectize = this._selectize(el) as ReturnType<
SelectInputBinding["_selectize"]
> & {
settings: {
load: (query: string, callback: CallbackFn) => any;
};
};
if (hasOwnProperty(data, "url")) {
selectize = this._selectize(el);
selectize.clearOptions();
let loaded = false;
selectize.settings.load = function (query: string, callback: CallbackFn) {
selectize.settings.load = function (query, callback) {
const settings = selectize.settings;
$.ajax({
@@ -167,7 +155,7 @@ class SelectInputBinding extends InputBinding {
// the group's label and value. We use the current settings of
// the selectize object to decide the fieldnames of that obj.
const optgroupId = elem[settings.optgroupField || "optgroup"];
const optgroup: { [key: string]: string } = {};
const optgroup = {};
optgroup[settings.optgroupLabelField || "label"] = optgroupId;
optgroup[settings.optgroupValueField || "value"] = optgroupId;
@@ -175,8 +163,8 @@ class SelectInputBinding extends InputBinding {
});
callback(res);
if (!loaded) {
if (hasDefinedProperty(data, "value")) {
selectize.setValue(data.value as any);
if (hasOwnProperty(data, "value")) {
selectize.setValue(data.value);
} else if (settings.maxItems === 1) {
// first item selected by default only for single-select
selectize.setValue(res[0].value);
@@ -190,7 +178,7 @@ class SelectInputBinding extends InputBinding {
selectize.load(function (callback) {
selectize.settings.load.apply(selectize, ["", callback]);
});
} else if (hasDefinedProperty(data, "value")) {
} else if (hasOwnProperty(data, "value")) {
this.setValue(el, data.value);
}
@@ -219,12 +207,7 @@ class SelectInputBinding extends InputBinding {
initialize(el: SelectHTMLElement): void {
this._selectize(el);
}
protected _selectize(
el: SelectHTMLElement,
update = false
): SelectizeInfo | undefined {
// Apps like 008-html do not have the selectize js library
// Safe-guard against missing the selectize js library
protected _selectize(el: SelectHTMLElement, update = false): SelectizeInfo {
if (!$.fn.selectize) return undefined;
const $el = $(el);
const config = $el
@@ -233,13 +216,13 @@ class SelectInputBinding extends InputBinding {
if (config.length === 0) return undefined;
let options: SelectizeOptions & {
let options: {
labelField: "label";
valueField: "value";
searchField: ["label"];
onItemRemove?: (value: string) => void;
onDropdownClose?: () => void;
} = $.extend(
} & { [key: string]: unknown } = $.extend(
{
labelField: "label",
valueField: "value",
@@ -252,7 +235,7 @@ class SelectInputBinding extends InputBinding {
if (typeof config.data("nonempty") !== "undefined") {
el.nonempty = true;
options = $.extend(options, {
onItemRemove: function (this: SelectizeInfo, value: string) {
onItemRemove: function (value) {
if (this.getValue() === "")
$("select#" + $escape(el.id))
.empty()
@@ -266,10 +249,9 @@ class SelectInputBinding extends InputBinding {
},
onDropdownClose:
// $dropdown: any
function (this: SelectizeInfo) {
if (this.getValue() === "") {
this.setValue($("select#" + $escape(el.id)).val() as string);
}
function () {
if (this.getValue() === "")
this.setValue($("select#" + $escape(el.id)).val());
},
});
} else {
@@ -277,9 +259,8 @@ class SelectInputBinding extends InputBinding {
}
// options that should be eval()ed
if (config.data("eval") instanceof Array)
$.each(config.data("eval"), function (i, x: string) {
$.each(config.data("eval"), function (i, x) {
/*jshint evil: true*/
// @ts-expect-error; Need to type `options` keys to know exactly which values are accessed.
options[x] = indirectEval("(" + options[x] + ")");
});
let control = $el.selectize(options)[0].selectize as SelectizeInfo;

View File

@@ -1,14 +1,10 @@
import type {
IonRangeSliderEvent,
IonRangeSliderOptions,
} from "ion-rangeslider";
import $ from "jquery";
// import { NameValueHTMLElement } from ".";
import {
formatDateUTC,
updateLabel,
$escape,
hasDefinedProperty,
hasOwnProperty,
} from "../../utils";
import type { TextHTMLElement } from "./text";
@@ -32,11 +28,6 @@ type SliderReceiveMessageData = {
min?: number;
max?: number;
step?: number;
// eslint-disable-next-line @typescript-eslint/naming-convention
"data-type"?: string;
// eslint-disable-next-line @typescript-eslint/naming-convention
"time-format"?: string;
timezone?: string;
};
// MUST use window.strftime as the javascript dependency is dynamic
@@ -51,7 +42,7 @@ declare global {
}
// Necessary to get hidden sliders to send their updated values
function forceIonSliderUpdate(slider: any) {
function forceIonSliderUpdate(slider) {
if (slider.$cache && slider.$cache.input)
slider.$cache.input.trigger("change");
else console.log("Couldn't force ion slider to update");
@@ -82,7 +73,7 @@ function getTypePrettifyer(
// The default prettify function for ion.rangeSlider adds thousands
// separators after the decimal mark, so we have our own version here.
// (#1958)
prettify = function (this: IonRangeSliderOptions, num: number) {
prettify = function (num) {
// When executed, `this` will refer to the `IonRangeSlider.options`
// object.
return formatNumber(num, this.prettify_separator);
@@ -113,18 +104,18 @@ class SliderInputBinding extends TextInputBindingBase {
return $(scope).find("input.js-range-slider");
}
getType(el: HTMLElement): string | null {
getType(el: HTMLElement): string | false {
const dataType = $(el).data("data-type");
if (dataType === "date") return "shiny.date";
else if (dataType === "datetime") return "shiny.datetime";
else return null;
else return false;
}
getValue(
el: TextHTMLElement
): number | string | [number | string, number | string] {
const $el = $(el);
const result = $(el).data("ionRangeSlider").result as IonRangeSliderEvent;
const result = $(el).data("ionRangeSlider").result;
// Function for converting numeric value from slider to appropriate type.
let convert: (val: unknown) => number | string;
@@ -191,28 +182,21 @@ class SliderInputBinding extends TextInputBindingBase {
prettify?: Prettify;
} = {};
if (hasDefinedProperty(data, "value")) {
if (hasOwnProperty(data, "value")) {
if (numValues(el) === 2 && data.value instanceof Array) {
msg.from = data.value[0];
msg.to = data.value[1];
} else {
if (Array.isArray(data.value)) {
throw "Slider only contains a single value and cannot be updated with an array";
}
msg.from = data.value;
msg.from = data.value as number | string;
}
}
const sliderFeatures: Array<"max" | "min" | "step"> = [
"min",
"max",
"step",
];
const sliderFeatures = ["min", "max", "step"];
for (let i = 0; i < sliderFeatures.length; i++) {
const feats = sliderFeatures[i];
if (hasDefinedProperty(data, feats)) {
if (hasOwnProperty(data, feats)) {
msg[feats] = data[feats];
}
}
@@ -220,16 +204,12 @@ class SliderInputBinding extends TextInputBindingBase {
updateLabel(data.label, getLabelNode(el));
// (maybe) update data elements
const domElements: Array<"data-type" | "time-format" | "timezone"> = [
"data-type",
"time-format",
"timezone",
];
const domElements = ["data-type", "time-format", "timezone"];
for (let i = 0; i < domElements.length; i++) {
const elem = domElements[i];
if (hasDefinedProperty(data, elem)) {
if (hasOwnProperty(data, elem)) {
$el.data(elem, data[elem]);
}
}
@@ -304,12 +284,12 @@ function formatNumber(
$(document).on("click", ".slider-animate-button", function (evt: Event) {
evt.preventDefault();
const self = $(this);
const target = $("#" + $escape(self.attr("data-target-id") as string));
const target = $("#" + $escape(self.attr("data-target-id")));
const startLabel = "Play";
const stopLabel = "Pause";
const loop =
self.attr("data-loop") !== undefined &&
!/^\s*false\s*$/i.test(self.attr("data-loop") as string);
!/^\s*false\s*$/i.test(self.attr("data-loop"));
let animInterval = self.attr("data-interval") as number | string;
if (isNaN(animInterval as number)) animInterval = 1500;

Some files were not shown because too many files have changed in this diff Show More