From 37ab726cf1254ec6db3e253bf22d6ab6ed367f57 Mon Sep 17 00:00:00 2001 From: Cristiana Di Tullio Date: Mon, 8 Jun 2026 16:27:25 +0200 Subject: [PATCH 01/14] Added insertStructure() function and subfunctions --- NAMESPACE | 1 + R/insertStructure.R | 217 ++++++++++++++++++++++++++++++++++++ man/insertDocs.Rd | 14 +++ man/insertStructure.Rd | 26 +++++ man/insertStudyFiles.Rd | 21 ++++ man/insertTests.Rd | 19 ++++ man/installPackageBundle.Rd | 18 +++ 7 files changed, 316 insertions(+) create mode 100644 R/insertStructure.R create mode 100644 man/insertDocs.Rd create mode 100644 man/insertStructure.Rd create mode 100644 man/insertStudyFiles.Rd create mode 100644 man/insertTests.Rd create mode 100644 man/installPackageBundle.Rd diff --git a/NAMESPACE b/NAMESPACE index 96265e9..c6bd2ed 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,7 @@ export(arrangeCdmNames) export(assertCdmNames) export(createResultsDir) export(getPkgZips) +export(insertStructure) export(unZipStudyFiles) import(cli) import(httr) diff --git a/R/insertStructure.R b/R/insertStructure.R new file mode 100644 index 0000000..89527d5 --- /dev/null +++ b/R/insertStructure.R @@ -0,0 +1,217 @@ +#' Install default package bundle +#' +#' Installs a predefined set of DARWIN EU®/OHDSI packages into the study project +#' and updates their dependencies. The standard package list includes the packages +#' omopgenerics, PhenotypeR, DrugExposureDiagnostics, CohortConstructor, +#' IncidencePrevalence, DrugUtilisation, CohortCharacteristics, CohortSurvival, +#' visOmopResults and DarwinShinyModules. +#' +#' @return +#' An invisible list of the installed packages. +installPackageBundle <- function(path) { + + # Install default package bundle + complete_darwin <- list( + cran = c( + "omopgenerics", + "PhenotypeR", + "DrugExposureDiagnostics", + "CohortConstructor", + "IncidencePrevalence", + "DrugUtilisation", + "CohortCharacteristics", + "CohortSurvival", + "visOmopResults" + ), + github = c( + "darwin-eu/DarwinShinyModules" + ) + ) + + # Install packages with renv + if (!dir.exists(file.path(path, "renv"))) { + cli::cli_abort( + message = c( + "x" = "No renv detected in {.path {path}}.", + "i" = "Need to initialize the environment with {.fn renv::init} first." + ) + ) + } + + renv::install(complete_darwin$cran) + renv::install(complete_darwin$github) + + # Add dependencies (default type = "Imports") + pkg_names <- c( + complete_darwin$cran, + basename(complete_darwin$github) + ) + + if (!requireNamespace("usethis", quietly = TRUE)) { + cli::cli_inform( + "Installing required package: 'usethis'" + ) + install.packages("usethis") + } + + for (pkg in pkg_names) { + usethis::use_package(pkg) + } + + # Update lockfile + renv::snapshot() + + # Return invisible package list + invisible(pkg_names) + +} + + +#' Insert default documentation files +#' +#' Creates default `NEWS.md`, `README.Rmd` and `LICENSE.md` (Apache License 2.0) files. +#' +#' @return +#' No return value. +insertDocs <- function() { + usethis::use_news_md(open = FALSE) + usethis::use_readme_rmd(open = FALSE) + usethis::use_apl2_license() +} + + +#' Insert default study files +#' +#' Creates the `inst` and `extras` folders and populates the `R` folder with +#' ready files for standard study functions. +#' +#' @param path Character string identifying the path to the study project, +#' default `"."`. +#' @param n_obj Number of study objectives, default `n_obj = 3`. +#' +#' @return +#' No return value. +insertStudyFiles <- function( + path = ".", + n_obj = 3 + ) { + # R/ + if ("hello.R" %in% list.files(file.path(path, "R"))) { + unlink(file.path(path, "R/hello.R")) + } + usethis::use_r("createCohorts", open = FALSE) + usethis::use_r("runStudy", open = FALSE) + usethis::use_r("runDiagnostics", open = FALSE) + usethis::use_r("pullFromAtlas", open = FALSE) + usethis::use_r("utils", open = FALSE) + usethis::use_r("globals", open = FALSE) + usethis::use_r("merge", open = FALSE) + for (i in 1:n_obj) { + usethis::use_r(paste0("objective", i), open = FALSE) + } + # man/ + if (!dir.exists(file.path(path, "man"))) { + dir.create(file.path(path, "man")) + } + if ("hello.Rd" %in% list.files(file.path(path, "man"))) { + unlink(file.path(path, "man/hello.Rd")) + } + # inst/ + dir.create(file.path(path, "inst")) + dir.create(file.path(path, "inst/cohorts")) + dir.create(file.path(path, "inst/concept_sets")) + # extras/ + dir.create(file.path(path, "extras")) + invisible(file.create(file.path(path, "extras/CodeToRun.R"))) + invisible(file.create(file.path(path, "extras/pullCohortsFromAtlas.R"))) +} + + +#' Insert default test files +#' +#' Creates the `tests` folder and populates the `tests/testthat` folder with +#' a default test file for each script found in the `R` folder. +#' +#' @param path Character string identifying the path to the study project, +#' default `"."`. +#' +#' @return +#' No return value. +insertTests <- function( + path = "." + ) { + + usethis::use_testthat() + + if (!dir.exists(file.path(path, "R")) | length(list.files(file.path(path, "R"))) == 0) { + cli::cli_abort( + message = c( + "!" = "No .R files are found to generate tests", + "x" = "The R folder in current project doesn't exist or is empty." + ) + ) + } + + # Create test files for each script in R/ except globals.R + for (script in list.files(file.path(path, "R"))) { + if (script == "globals.R") { + next + } else{ # remove ".R" + usethis::use_test(substr(script, 1, nchar(script) -2), open = FALSE) + } + } +} + + +#' Set up study structure +#' +#' Creates the standard structure required for a new OMOP study package. +#' It includes standard folders, R scripts, test and documentation files and it +#' installs a default list of DARWIN EU®/OHDSI packages. +#' +#' It assumes an active R project has already been created and the `renv` +#' initialized. +#' +#' @param path Character string identifying the path to the study project, +#' default `"."`. +#' @param n_obj Number of study objectives, default `n_obj = 3`. +#' +#' @return +#' No return value. +#' +#' @export +insertStructure <- function( + path = ".", + n_obj = 3 + ) { + + # Need an existing package to run the function + if (!file.exists(file.path(path, "DESCRIPTION"))) { + cli::cli_abort( + message = c( + "!" = "The path doesn't correspond to a package folder.", + "x" = "A package must contain a DESCRIPTION file. No DESCRIPTION detected at {.path {path}}.", + "i" = "Create a package first with {.fn usethis::create_package} or through the RStudio interface." + ) + ) + } + + # Set up structure at specified project path + cli::cli_h1("Setting up study package structure") + + cli::cli_alert_info("Installing package bundle...") + installPackageBundle(path) + + withr::with_dir(path, { + cli::cli_alert_info("Inserting documentation files...") + insertDocs() + }) + + cli::cli_alert_info("Inserting study files...") + insertStudyFiles(path, n_obj) + + cli::cli_alert_info("Inserting test files...") + insertTests(path) + + cli::cli_alert_success("Package structure created successfully.") +} diff --git a/man/insertDocs.Rd b/man/insertDocs.Rd new file mode 100644 index 0000000..ddd3a3c --- /dev/null +++ b/man/insertDocs.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/insertStructure.R +\name{insertDocs} +\alias{insertDocs} +\title{Insert default documentation files} +\usage{ +insertDocs() +} +\value{ +No return value. +} +\description{ +Creates default `NEWS.md`, `README.Rmd` and `LICENSE.md` (Apache License 2.0) files. +} diff --git a/man/insertStructure.Rd b/man/insertStructure.Rd new file mode 100644 index 0000000..ec682a5 --- /dev/null +++ b/man/insertStructure.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/insertStructure.R +\name{insertStructure} +\alias{insertStructure} +\title{Set up study structure} +\usage{ +insertStructure(path = ".", n_obj = 3) +} +\arguments{ +\item{path}{Character string identifying the path to the study project, +default `"."`.} + +\item{n_obj}{Number of study objectives, default `n_obj = 3`.} +} +\value{ +No return value. +} +\description{ +Creates the standard structure required for a new OMOP study package. +It includes standard folders, R scripts, test and documentation files and it +installs a default list of DARWIN EU®/OHDSI packages. +} +\details{ +It assumes an active R project has already been created and the `renv` +initialized. +} diff --git a/man/insertStudyFiles.Rd b/man/insertStudyFiles.Rd new file mode 100644 index 0000000..aab8fca --- /dev/null +++ b/man/insertStudyFiles.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/insertStructure.R +\name{insertStudyFiles} +\alias{insertStudyFiles} +\title{Insert default study files} +\usage{ +insertStudyFiles(path = ".", n_obj = 3) +} +\arguments{ +\item{path}{Character string identifying the path to the study project, +default `"."`.} + +\item{n_obj}{Number of study objectives, default `n_obj = 3`.} +} +\value{ +No return value. +} +\description{ +Creates the `inst` and `extras` folders and populates the `R` folder with +ready files for standard study functions. +} diff --git a/man/insertTests.Rd b/man/insertTests.Rd new file mode 100644 index 0000000..4eba46b --- /dev/null +++ b/man/insertTests.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/insertStructure.R +\name{insertTests} +\alias{insertTests} +\title{Insert default test files} +\usage{ +insertTests(path = ".") +} +\arguments{ +\item{path}{Character string identifying the path to the study project, +default `"."`.} +} +\value{ +No return value. +} +\description{ +Creates the `tests` folder and populates the `tests/testthat` folder with +a default test file for each script found in the `R` folder. +} diff --git a/man/installPackageBundle.Rd b/man/installPackageBundle.Rd new file mode 100644 index 0000000..12b741a --- /dev/null +++ b/man/installPackageBundle.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/insertStructure.R +\name{installPackageBundle} +\alias{installPackageBundle} +\title{Install default package bundle} +\usage{ +installPackageBundle(path) +} +\value{ +An invisible list of the installed packages. +} +\description{ +Installs a predefined set of DARWIN EU®/OHDSI packages into the study project +and updates their dependencies. The standard package list includes the packages +omopgenerics, PhenotypeR, DrugExposureDiagnostics, CohortConstructor, +IncidencePrevalence, DrugUtilisation, CohortCharacteristics, CohortSurvival, +visOmopResults and DarwinShinyModules. +} From a2f0be01f7cea188ed2e913c220a39acf121b083 Mon Sep 17 00:00:00 2001 From: Cristiana Di Tullio Date: Mon, 8 Jun 2026 16:28:54 +0200 Subject: [PATCH 02/14] Added expectations for insertStructure() and a sample testPackage to run tests --- tests/testthat/test-insertStructure.R | 53 + tests/testthat/testPackage/.Rbuildignore | 6 + tests/testthat/testPackage/.Rprofile | 1 + tests/testthat/testPackage/.gitignore | 1 + tests/testthat/testPackage/DESCRIPTION | 24 + tests/testthat/testPackage/LICENSE.md | 194 + tests/testthat/testPackage/NAMESPACE | 2 + tests/testthat/testPackage/NEWS.md | 3 + tests/testthat/testPackage/R/createCohorts.R | 0 tests/testthat/testPackage/R/globals.R | 0 tests/testthat/testPackage/R/merge.R | 0 tests/testthat/testPackage/R/objective1.R | 0 tests/testthat/testPackage/R/objective2.R | 0 tests/testthat/testPackage/R/objective3.R | 0 tests/testthat/testPackage/R/pullFromAtlas.R | 0 tests/testthat/testPackage/R/runDiagnostics.R | 0 tests/testthat/testPackage/R/runStudy.R | 0 tests/testthat/testPackage/R/utils.R | 0 tests/testthat/testPackage/README.Rmd | 55 + tests/testthat/testPackage/extras/CodeToRun.R | 0 .../testPackage/extras/pullCohortsFromAtlas.R | 0 tests/testthat/testPackage/renv.lock | 5458 +++++++++++++++++ tests/testthat/testPackage/renv/.gitignore | 7 + tests/testthat/testPackage/renv/activate.R | 1438 +++++ tests/testthat/testPackage/renv/settings.json | 21 + tests/testthat/testPackage/testPackage.Rproj | 22 + tests/testthat/testPackage/tests/testthat.R | 12 + .../tests/testthat/test-createCohorts.R | 3 + .../testPackage/tests/testthat/test-merge.R | 3 + .../tests/testthat/test-objective1.R | 3 + .../tests/testthat/test-objective2.R | 3 + .../tests/testthat/test-objective3.R | 3 + .../tests/testthat/test-pullFromAtlas.R | 3 + .../tests/testthat/test-runDiagnostics.R | 3 + .../tests/testthat/test-runStudy.R | 3 + .../testPackage/tests/testthat/test-utils.R | 3 + 36 files changed, 7324 insertions(+) create mode 100644 tests/testthat/test-insertStructure.R create mode 100644 tests/testthat/testPackage/.Rbuildignore create mode 100644 tests/testthat/testPackage/.Rprofile create mode 100644 tests/testthat/testPackage/.gitignore create mode 100644 tests/testthat/testPackage/DESCRIPTION create mode 100644 tests/testthat/testPackage/LICENSE.md create mode 100644 tests/testthat/testPackage/NAMESPACE create mode 100644 tests/testthat/testPackage/NEWS.md create mode 100644 tests/testthat/testPackage/R/createCohorts.R create mode 100644 tests/testthat/testPackage/R/globals.R create mode 100644 tests/testthat/testPackage/R/merge.R create mode 100644 tests/testthat/testPackage/R/objective1.R create mode 100644 tests/testthat/testPackage/R/objective2.R create mode 100644 tests/testthat/testPackage/R/objective3.R create mode 100644 tests/testthat/testPackage/R/pullFromAtlas.R create mode 100644 tests/testthat/testPackage/R/runDiagnostics.R create mode 100644 tests/testthat/testPackage/R/runStudy.R create mode 100644 tests/testthat/testPackage/R/utils.R create mode 100644 tests/testthat/testPackage/README.Rmd create mode 100644 tests/testthat/testPackage/extras/CodeToRun.R create mode 100644 tests/testthat/testPackage/extras/pullCohortsFromAtlas.R create mode 100644 tests/testthat/testPackage/renv.lock create mode 100644 tests/testthat/testPackage/renv/.gitignore create mode 100644 tests/testthat/testPackage/renv/activate.R create mode 100644 tests/testthat/testPackage/renv/settings.json create mode 100644 tests/testthat/testPackage/testPackage.Rproj create mode 100644 tests/testthat/testPackage/tests/testthat.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-createCohorts.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-merge.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-objective1.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-objective2.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-objective3.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-runStudy.R create mode 100644 tests/testthat/testPackage/tests/testthat/test-utils.R diff --git a/tests/testthat/test-insertStructure.R b/tests/testthat/test-insertStructure.R new file mode 100644 index 0000000..5b437c8 --- /dev/null +++ b/tests/testthat/test-insertStructure.R @@ -0,0 +1,53 @@ +test_that("insertStructure works", { + + test_pkg_path <- testthat::test_path("testPackage") + + # Expect installed packages + expect_true(dir.exists(file.path(test_pkg_path, "renv"))) + expect_true(file.exists(file.path(test_pkg_path, "renv.lock"))) + installed_pkgs <- c( + "omopgenerics", + "PhenotypeR", + "DrugExposureDiagnostics", + "CohortConstructor", + "IncidencePrevalence", + "DrugUtilisation", + "CohortCharacteristics", + "CohortSurvival", + "visOmopResults", + "DarwinShinyModules" + ) + desc <- desc::desc(file.path(test_pkg_path, "DESCRIPTION")) + imported_pkgs <- desc$get("Imports") + for (pkg in installed_pkgs) { + expect_true(grepl(pkg, imported_pkgs)) + } + + # Expect inserted docs + expect_true(file.exists(file.path(test_pkg_path, "NEWS.md"))) + expect_true(file.exists(file.path(test_pkg_path, "README.Rmd"))) + expect_true(file.exists(file.path(test_pkg_path, "LICENSE.md"))) + + # Expect inserted study files + expect_true(dir.exists(file.path(test_pkg_path, "R"))) + r_files <- length(list.files(file.path(test_pkg_path, "R"))) + expect_equal(r_files, 10) + expect_false(file.exists(file.path(test_pkg_path, "R/hello.R"))) + expect_false(file.exists(file.path(test_pkg_path, "man/hello.Rd"))) + expect_true(dir.exists(file.path(test_pkg_path, "inst/cohorts"))) + expect_true(dir.exists(file.path(test_pkg_path, "inst"))) + expect_true(dir.exists(file.path(test_pkg_path, "inst/concept_sets"))) + expect_true(dir.exists(file.path(test_pkg_path, "extras"))) + expect_true(file.exists(file.path(test_pkg_path, "extras/CodeToRun.R"))) + expect_true(file.exists(file.path(test_pkg_path, "extras/pullCohortsFromAtlas.R"))) + + # Expect inserted tests + for (script in list.files(file.path(test_pkg_path, "R"))) { + if (script == "globals.R") { + next + } else{ + expect_true(file.exists(file.path(test_pkg_path, paste0("tests/testthat/test-", script)))) + } + } + +}) diff --git a/tests/testthat/testPackage/.Rbuildignore b/tests/testthat/testPackage/.Rbuildignore new file mode 100644 index 0000000..2ebbf2a --- /dev/null +++ b/tests/testthat/testPackage/.Rbuildignore @@ -0,0 +1,6 @@ +^renv$ +^renv\.lock$ +^testPackage\.Rproj$ +^\.Rproj\.user$ +^README\.Rmd$ +^LICENSE\.md$ diff --git a/tests/testthat/testPackage/.Rprofile b/tests/testthat/testPackage/.Rprofile new file mode 100644 index 0000000..81b960f --- /dev/null +++ b/tests/testthat/testPackage/.Rprofile @@ -0,0 +1 @@ +source("renv/activate.R") diff --git a/tests/testthat/testPackage/.gitignore b/tests/testthat/testPackage/.gitignore new file mode 100644 index 0000000..cd67eac --- /dev/null +++ b/tests/testthat/testPackage/.gitignore @@ -0,0 +1 @@ +.Rproj.user diff --git a/tests/testthat/testPackage/DESCRIPTION b/tests/testthat/testPackage/DESCRIPTION new file mode 100644 index 0000000..6c0bc6d --- /dev/null +++ b/tests/testthat/testPackage/DESCRIPTION @@ -0,0 +1,24 @@ +Package: testPackage +Title: What the Package Does (One Line, Title Case) +Version: 0.0.0.9000 +Authors@R: + person("First", "Last", , "first.last@example.com", role = c("aut", "cre")) +Description: What the package does (one paragraph). +License: Apache License (>= 2) +Encoding: UTF-8 +Roxygen: list(markdown = TRUE) +RoxygenNote: 8.0.0 +Imports: + CohortCharacteristics, + CohortConstructor, + CohortSurvival, + DarwinShinyModules, + DrugExposureDiagnostics, + DrugUtilisation, + IncidencePrevalence, + omopgenerics, + PhenotypeR, + visOmopResults +Suggests: + testthat (>= 3.0.0) +Config/testthat/edition: 3 diff --git a/tests/testthat/testPackage/LICENSE.md b/tests/testthat/testPackage/LICENSE.md new file mode 100644 index 0000000..b62a9b5 --- /dev/null +++ b/tests/testthat/testPackage/LICENSE.md @@ -0,0 +1,194 @@ +Apache License +============== + +_Version 2.0, January 2004_ +_<>_ + +### Terms and Conditions for use, reproduction, and distribution + +#### 1. Definitions + +“License” shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +“Licensor” shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +“Legal Entity” shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, “control” means **(i)** the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the +outstanding shares, or **(iii)** beneficial ownership of such entity. + +“You” (or “Your”) shall mean an individual or Legal Entity exercising +permissions granted by this License. + +“Source” form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +“Object” form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +“Work” shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +“Derivative Works” shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +“Contribution” shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +“submitted” means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as “Not a Contribution.” + +“Contributor” shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +#### 2. Grant of Copyright License + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +#### 3. Grant of Patent License + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +#### 4. Redistribution + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +* **(a)** You must give any other recipients of the Work or Derivative Works a copy of +this License; and +* **(b)** You must cause any modified files to carry prominent notices stating that You +changed the files; and +* **(c)** You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. + +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +#### 5. Submission of Contributions + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +#### 6. Trademarks + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +#### 7. Disclaimer of Warranty + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +#### 8. Limitation of Liability + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +#### 9. Accepting Warranty or Additional Liability + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +_END OF TERMS AND CONDITIONS_ + +### APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets `[]` replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same “printed page” as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/tests/testthat/testPackage/NAMESPACE b/tests/testthat/testPackage/NAMESPACE new file mode 100644 index 0000000..6ae9268 --- /dev/null +++ b/tests/testthat/testPackage/NAMESPACE @@ -0,0 +1,2 @@ +# Generated by roxygen2: do not edit by hand + diff --git a/tests/testthat/testPackage/NEWS.md b/tests/testthat/testPackage/NEWS.md new file mode 100644 index 0000000..4adab30 --- /dev/null +++ b/tests/testthat/testPackage/NEWS.md @@ -0,0 +1,3 @@ +# testPackage (development version) + +* Initial CRAN submission. diff --git a/tests/testthat/testPackage/R/createCohorts.R b/tests/testthat/testPackage/R/createCohorts.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/globals.R b/tests/testthat/testPackage/R/globals.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/merge.R b/tests/testthat/testPackage/R/merge.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/objective1.R b/tests/testthat/testPackage/R/objective1.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/objective2.R b/tests/testthat/testPackage/R/objective2.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/objective3.R b/tests/testthat/testPackage/R/objective3.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/pullFromAtlas.R b/tests/testthat/testPackage/R/pullFromAtlas.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/runDiagnostics.R b/tests/testthat/testPackage/R/runDiagnostics.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/runStudy.R b/tests/testthat/testPackage/R/runStudy.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/R/utils.R b/tests/testthat/testPackage/R/utils.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/README.Rmd b/tests/testthat/testPackage/README.Rmd new file mode 100644 index 0000000..10ac786 --- /dev/null +++ b/tests/testthat/testPackage/README.Rmd @@ -0,0 +1,55 @@ +--- +output: github_document +--- + + + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + fig.path = "man/figures/README-", + out.width = "100%" +) +``` + +# testPackage + + + + +The goal of testPackage is to ... + +## Installation + +You can install the development version of testPackage from [GitHub](https://github.com/) with: + +``` r +# install.packages("pak") +pak::pak("mi-erasmusmc/studyGenerics") +``` + +## Example + +This is a basic example which shows you how to solve a common problem: + +```{r example} +library(testPackage) +## basic example code +``` + +What is special about using `README.Rmd` instead of just `README.md`? You can include R chunks like so: + +```{r cars} +summary(cars) +``` + +You'll still need to render `README.Rmd` regularly, to keep `README.md` up-to-date. `devtools::build_readme()` is handy for this. + +You can also embed plots, for example: + +```{r pressure, echo = FALSE} +plot(pressure) +``` + +In that case, don't forget to commit and push the resulting figure files, so they display on GitHub and CRAN. diff --git a/tests/testthat/testPackage/extras/CodeToRun.R b/tests/testthat/testPackage/extras/CodeToRun.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/extras/pullCohortsFromAtlas.R b/tests/testthat/testPackage/extras/pullCohortsFromAtlas.R new file mode 100644 index 0000000..e69de29 diff --git a/tests/testthat/testPackage/renv.lock b/tests/testthat/testPackage/renv.lock new file mode 100644 index 0000000..5632cda --- /dev/null +++ b/tests/testthat/testPackage/renv.lock @@ -0,0 +1,5458 @@ +{ + "R": { + "Version": "4.4.1", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cran.rstudio.com" + } + ] + }, + "Packages": { + "CDMConnector": { + "Package": "CDMConnector", + "Version": "2.5.1", + "Source": "Repository", + "Title": "Connect to an OMOP Common Data Model", + "Authors@R": "c( person(\"Adam\", \"Black\", , \"ablack3@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-5576-8701\")), person(\"Artem\", \"Gorbachev\", , \"artem.gorbachev@odysseusinc.com\", role = \"aut\"), person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = \"aut\"), person(\"Marti\", \"Catala Sabate\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = \"aut\"), person(\"Ioanna\", \"Nika\", , \"i.nika@darwin-eu.org\", role = \"aut\") )", + "Description": "Provides tools for working with observational health data in the Observational Medical Outcomes Partnership (OMOP) Common Data Model format with a pipe friendly syntax. Common data model database table references are stored in a single compound object along with metadata.", + "License": "Apache License (>= 2)", + "URL": "https://darwin-eu.github.io/CDMConnector/, https://github.com/darwin-eu/CDMConnector", + "BugReports": "https://github.com/darwin-eu/CDMConnector/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "httr", + "dplyr", + "dbplyr (>= 2.5.0)", + "DBI (>= 0.3.0)", + "checkmate", + "cli", + "purrr", + "rlang", + "tidyselect", + "glue", + "methods", + "withr", + "lifecycle", + "stringr", + "stringi", + "generics", + "tidyr", + "jsonlite", + "readr", + "omopgenerics (>= 1.2.0)" + ], + "Suggests": [ + "SqlRender", + "CirceR", + "rJava", + "covr", + "knitr", + "rmarkdown", + "duckdb", + "RSQLite", + "RPostgres", + "DatabaseConnector", + "odbc", + "ggplot2", + "bigrquery", + "lubridate", + "clock", + "tibble", + "testthat (>= 3.0.0)", + "pool", + "snakecase", + "digest", + "rstudioapi", + "uuid" + ], + "Enhances": [ + "arrow" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "false", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Adam Black [aut, cre] (ORCID: ), Artem Gorbachev [aut], Edward Burn [aut], Marti Catala Sabate [aut], Ioanna Nika [aut]", + "Maintainer": "Adam Black ", + "Repository": "CRAN" + }, + "CodelistGenerator": { + "Package": "CodelistGenerator", + "Version": "4.0.2", + "Source": "Repository", + "Title": "Identify Relevant Clinical Codes and Evaluate Their Use", + "Authors@R": "c( person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")), person(\"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Xihang\", \"Chen\", email = \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\")), person(\"Nuria\", \"Mercade-Besora\", email = \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Danielle\", \"Newby\", email = \"danielle.newby@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-3001-1478\")) )", + "Description": "Generate a candidate code list for the Observational Medical Outcomes Partnership (OMOP) common data model based on string matching. For a given search strategy, a candidate code list will be returned.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "DBI (>= 1.1.0)", + "dplyr (>= 1.1.0)", + "omopgenerics (>= 1.3.4)", + "rlang (>= 1.0.0)", + "glue (>= 1.5.0)", + "stringr (>= 1.6.0)", + "stringi (>= 1.8.1)", + "tidyr (>= 1.2.0)", + "cli (>= 3.1.0)", + "purrr", + "clock", + "PatientProfiles (>= 1.4.4)", + "vctrs", + "jsonlite", + "lifecycle" + ], + "Suggests": [ + "covr", + "duckdb", + "CDMConnector (>= 2.1.0)", + "visOmopResults (>= 1.4.0)", + "CohortConstructor (>= 0.5.0)", + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)", + "RPostgres", + "odbc", + "spelling", + "tibble", + "gt", + "flextable", + "omock", + "tictoc" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "URL": "https://darwin-eu.github.io/CodelistGenerator/", + "Language": "en-US", + "LazyData": "true", + "NeedsCompilation": "no", + "Author": "Edward Burn [aut, cre] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: ), Martí Català [aut] (ORCID: ), Xihang Chen [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Mike Du [aut] (ORCID: ), Danielle Newby [aut] (ORCID: )", + "Maintainer": "Edward Burn ", + "Repository": "CRAN" + }, + "CohortCharacteristics": { + "Package": "CohortCharacteristics", + "Version": "1.1.3", + "Source": "Repository", + "Type": "Package", + "Title": "Summarise and Visualise Characteristics of Patients in the OMOP CDM", + "Authors@R": "c( person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Yuchen\", \"Guo\", , \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Mike\", \"Du\", , \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Marta\", \"Alcalde\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")) )", + "Maintainer": "Martí Català ", + "Description": "Summarise and visualise the characteristics of patients in data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model (CDM).", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Imports": [ + "dplyr", + "tidyr", + "rlang", + "cli", + "stringr", + "omopgenerics (>= 1.3.1)", + "PatientProfiles (>= 1.3.1)", + "snakecase", + "lifecycle", + "purrr", + "clock" + ], + "URL": "https://darwin-eu.github.io/CohortCharacteristics/", + "BugReports": "https://github.com/darwin-eu/CohortCharacteristics/issues", + "Language": "en-US", + "Depends": [ + "R (>= 4.1)" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "Suggests": [ + "CDMConnector (>= 1.6.0)", + "CodelistGenerator", + "visOmopResults (>= 1.2.0)", + "CohortConstructor", + "covr", + "DBI", + "DiagrammeR", + "DiagrammeRsvg", + "DrugUtilisation", + "DT", + "duckdb (>= 1.0.0)", + "flextable", + "ggplot2", + "ggpubr", + "glue", + "grid", + "gt", + "here", + "Hmisc", + "htmltools", + "knitr", + "odbc", + "omock", + "plotly", + "png", + "reactable", + "rmarkdown", + "RPostgres", + "rsvg", + "scales", + "spelling", + "testthat (>= 3.1.5)", + "tictoc", + "withr", + "extrafont" + ], + "NeedsCompilation": "no", + "Author": "Martí Català [aut, cre] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Mike Du [ctb] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Edward Burn [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Marta Alcalde [aut] (ORCID: )", + "Repository": "CRAN" + }, + "CohortConstructor": { + "Package": "CohortConstructor", + "Version": "0.6.3", + "Source": "Repository", + "Title": "Build and Manipulate Study Cohorts Using a Common Data Model", + "Authors@R": "c( person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")), person(\"Mike\", \"Du\", , \"mike.du@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Xihang\", \"Chen\", , \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\")), person(\"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = \"aut\", comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Elin\", \"Rowlands\", , \"elin.rowlands@ndorms.ox.ac.uk\", role = \"aut\", comment = c(ORCID = \"0009-0005-5166-0417\")))", + "Description": "Create and manipulate study cohorts in data mapped to the Observational Medical Outcomes Partnership Common Data Model.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Imports": [ + "cli", + "clock", + "dplyr", + "glue", + "omopgenerics (>= 1.3.2)", + "PatientProfiles (>= 1.4.4)", + "CodelistGenerator (>= 4.0.0)", + "purrr", + "rlang", + "tibble", + "tidyr", + "utils" + ], + "Suggests": [ + "CDMConnector (>= 1.7.0)", + "CirceR", + "CohortCharacteristics", + "covr", + "DBI", + "DiagrammeR", + "DrugUtilisation", + "duckdb", + "ggplot2", + "gt", + "here", + "IncidencePrevalence", + "knitr", + "odbc", + "omock (>= 0.5.0)", + "rmarkdown", + "RPostgres", + "scales", + "SqlRender", + "stringr", + "testthat (>= 3.0.0)", + "tictoc", + "visOmopResults", + "systemfonts" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "Depends": [ + "R (>= 4.1)" + ], + "URL": "https://ohdsi.github.io/CohortConstructor/, https://github.com/OHDSI/CohortConstructor", + "BugReports": "https://github.com/OHDSI/CohortConstructor/issues", + "LazyData": "true", + "NeedsCompilation": "no", + "Author": "Edward Burn [aut, cre] (ORCID: ), Martí Català [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: ), Mike Du [aut] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Xihang Chen [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Elin Rowlands [aut] (ORCID: )", + "Maintainer": "Edward Burn ", + "Repository": "CRAN" + }, + "CohortSurvival": { + "Package": "CohortSurvival", + "Version": "1.1.1", + "Source": "Repository", + "Title": "Estimate Survival from Common Data Model Cohorts", + "Authors@R": "c( person(\"Kim\", \"López-Güell\", email = \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Xintong\", \"Li\", email = \"xintong.li@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-6872-5804\")), person(\"Danielle\", \"Newby\", email = \"danielle.newby@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-3001-1478\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")))", + "Description": "Estimate survival using data mapped to the Observational Medical Outcomes Partnership common data model. Survival can be estimated based on user-defined study cohorts.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Imports": [ + "broom", + "cli", + "clock", + "DBI", + "dplyr", + "glue", + "omopgenerics (>= 1.1.0)", + "PatientProfiles (>= 1.3.1)", + "purrr", + "rlang", + "survival (>= 3.7.0)", + "stats", + "stringr", + "tibble", + "tidyr" + ], + "Suggests": [ + "testthat (>= 3.0.0)", + "CodelistGenerator", + "roxygen2", + "knitr", + "tictoc", + "rmarkdown", + "ggplot2", + "patchwork", + "cmprsk", + "duckdb", + "gt", + "flextable", + "scales", + "visOmopResults (>= 1.4.0)", + "extrafont", + "CDMConnector (>= 2.0.0)" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "URL": "https://darwin-eu.github.io/CohortSurvival/", + "BugReports": "https://github.com/darwin-eu/CohortSurvival/issues", + "NeedsCompilation": "no", + "Author": "Kim López-Güell [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Martí Català [aut] (ORCID: ), Xintong Li [aut] (ORCID: ), Danielle Newby [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: )", + "Maintainer": "Kim López-Güell ", + "Depends": [ + "R (>= 4.1.0)" + ], + "Repository": "CRAN" + }, + "DBI": { + "Package": "DBI", + "Version": "1.3.0", + "Source": "Repository", + "Title": "R Database Interface", + "Date": "2026-02-11", + "Authors@R": "c( person(\"R Special Interest Group on Databases (R-SIG-DB)\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\") )", + "Description": "A database interface definition for communication between R and relational database management systems. All classes in this package are virtual and need to be extended by the various R/DBMS implementations.", + "License": "LGPL (>= 2.1)", + "URL": "https://dbi.r-dbi.org, https://github.com/r-dbi/DBI", + "BugReports": "https://github.com/r-dbi/DBI/issues", + "Depends": [ + "methods", + "R (>= 3.0.0)" + ], + "Suggests": [ + "arrow", + "blob", + "callr", + "covr", + "DBItest (>= 1.8.2)", + "dbplyr", + "downlit", + "dplyr", + "glue", + "hms", + "knitr", + "magrittr", + "nanoarrow (>= 0.3.0.1)", + "otel", + "otelsdk", + "RMariaDB", + "rmarkdown", + "rprojroot", + "RSQLite (>= 1.1-2)", + "testthat (>= 3.0.0)", + "vctrs", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "false", + "Config/Needs/check": "r-dbi/DBItest", + "Config/Needs/website": "r-dbi/DBItest, r-dbi/dbitemplate, adbi, AzureKusto, bigrquery, DatabaseConnector, dittodb, duckdb, implyr, lazysf, odbc, pool, RAthena, IMSMWU/RClickhouse, RH2, RJDBC, RMariaDB, RMySQL, RPostgres, RPostgreSQL, RPresto, RSQLite, sergeant, sparklyr, withr", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "NeedsCompilation": "no", + "Author": "R Special Interest Group on Databases (R-SIG-DB) [aut], Hadley Wickham [aut], Kirill Müller [aut, cre] (ORCID: ), R Consortium [fnd]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "DT": { + "Package": "DT", + "Version": "0.34.0", + "Source": "Repository", + "Type": "Package", + "Title": "A Wrapper of the JavaScript Library 'DataTables'", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Xianying\", \"Tan\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Maximilian\", \"Girlich\", role = \"ctb\"), person(\"Greg\", \"Freedman Ellis\", role = \"ctb\"), person(\"Johannes\", \"Rauh\", role = \"ctb\"), person(\"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables in htmlwidgets/lib\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js in htmlwidgets/lib\"), person(\"Leon\", \"Gersen\", role = c(\"ctb\", \"cph\"), comment = \"noUiSlider in htmlwidgets/lib\"), person(\"Bartek\", \"Szopka\", role = c(\"ctb\", \"cph\"), comment = \"jquery.highlight.js in htmlwidgets/lib\"), person(\"Alex\", \"Pickering\", role = \"ctb\"), person(\"William\", \"Holmes\", role = \"ctb\"), person(\"Mikko\", \"Marttila\", role = \"ctb\"), person(\"Andres\", \"Quintero\", role = \"ctb\"), person(\"Stéphane\", \"Laurent\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Data objects in R can be rendered as HTML tables using the JavaScript library 'DataTables' (typically via R Markdown or Shiny). The 'DataTables' library has been included in this R package. The package name 'DT' is an abbreviation of 'DataTables'.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/DT", + "BugReports": "https://github.com/rstudio/DT/issues", + "Imports": [ + "crosstalk", + "htmltools (>= 0.3.6)", + "htmlwidgets (>= 1.3)", + "jquerylib", + "jsonlite (>= 0.9.16)", + "magrittr", + "promises" + ], + "Suggests": [ + "bslib", + "future", + "httpuv", + "knitr (>= 1.8)", + "rmarkdown", + "shiny (>= 1.6)", + "testit", + "tibble" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut], Joe Cheng [aut], Xianying Tan [aut], Garrick Aden-Buie [aut, cre] (ORCID: ), JJ Allaire [ctb], Maximilian Girlich [ctb], Greg Freedman Ellis [ctb], Johannes Rauh [ctb], SpryMedia Limited [ctb, cph] (DataTables in htmlwidgets/lib), Brian Reavis [ctb, cph] (selectize.js in htmlwidgets/lib), Leon Gersen [ctb, cph] (noUiSlider in htmlwidgets/lib), Bartek Szopka [ctb, cph] (jquery.highlight.js in htmlwidgets/lib), Alex Pickering [ctb], William Holmes [ctb], Mikko Marttila [ctb], Andres Quintero [ctb], Stéphane Laurent [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Garrick Aden-Buie ", + "Repository": "CRAN" + }, + "DarwinShinyModules": { + "Package": "DarwinShinyModules", + "Version": "0.6.0", + "Source": "GitHub", + "Title": "Repository of Shiny Modules for Darwin Result Viewers", + "Authors@R": "c( person(\"Ger\", \"Inberg\", email = \"g.inberg@erasmusmc.nl\", role = c(\"aut\"), comment = c(ORCID = \"0000-0001-8993-8748\")), person(\"Maarten\", \"van Kessel\", email = \"m.l.vankessel@erasmusmc.nl\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0006-8832-6030\")), person(\"Erasmus MC\", role = c(\"cph\")) )", + "Description": "Install this package to access useful shiny modules for building shiny apps to explore results using the Darwin tools.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "Roxygen": "list(markdown = TRUE)", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "R6", + "rlang", + "checkmate", + "shiny", + "dplyr", + "ggplot2", + "plotly", + "DT", + "gt", + "flextable", + "reactable", + "promises", + "shinyWidgets", + "stringr", + "purrr" + ], + "Suggests": [ + "bslib", + "shinydashboard", + "networkD3", + "testthat (>= 3.0.0)", + "knitr", + "rmarkdown", + "datasets", + "htmlwidgets", + "xml2", + "shinycssloaders", + "DatabaseConnector", + "DBI", + "dbplyr", + "duckdb", + "RSQLite", + "visOmopResults", + "omopgenerics", + "CDMConnector", + "TreatmentPatterns", + "DrugUtilisation", + "IncidencePrevalence", + "DrugExposureDiagnostics (>= 1.1.1)", + "CohortSurvival", + "PatientProfiles", + "CohortCharacteristics", + "usethis", + "tidyr", + "stats", + "CirceR" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "Language": "en-US", + "Collate": "'App.R' 'ShinyModule.R' 'Bridge.R' 'BslibApp.R' 'CohortCharacteristics-Characteristics.R' 'CohortCharacteristics-CohortAttrition.R' 'CohortCharacteristics-LargeScaleCharacteristics.R' 'CohortSurvival-CohortSurvival.R' 'CreateApp.R' 'Darwin-Utils.R' 'DarwinBslibApp.R' 'DarwinDashboardApp.R' 'DarwinShinyModules.R' 'Database.R' 'DatabaseDBC.R' 'DatabaseDBI.R' 'DatabaseOverview.R' 'DrugExposureDiagnostics.R' 'DrugUtilisation-DrugRestart.R' 'DrugUtilisation-DrugUtilisation.R' 'DrugUtilisation-Indication.R' 'DrugUtilisation-Treatment.R' 'IncidencePrevalence-IncidencePrevalence.R' 'InputPanel.R' 'OhdsiModule.R' 'Plot.R' 'Plot-Plotly.R' 'Plot-Static.R' 'Plot-Widget.R' 'ShinydashboardApp.R' 'StudyBackground.R' 'Table-DT.R' 'Table-Flextable.R' 'Table-GT.R' 'Table-Reactable.R' 'Table.R' 'Text.R' 'TreatmentPatterns-TreatmentPatterns.R' 'appBuilderUtils.R' 'launchBslibApp.R' 'launchDarwinBslibApp.R' 'launchDarwinDashboardApp.R' 'launchShinydashboardApp.R' 'makeModule.R' 'preview.R' 'utils-SummarizedResult.R' 'utils.R' 'zzz.R'", + "URL": "https://darwin-eu-dev.github.io/DarwinShinyModules/", + "Config/roxygen2/version": "8.0.0", + "Author": "Ger Inberg [aut] (), Maarten van Kessel [aut, cre] (), Erasmus MC [cph]", + "Maintainer": "Maarten van Kessel ", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteUsername": "darwin-eu", + "RemoteRepo": "DarwinShinyModules", + "RemoteRef": "main", + "RemoteSha": "b17492dc42528b2a9f00ae450c4360c411dbdd44" + }, + "DrugExposureDiagnostics": { + "Package": "DrugExposureDiagnostics", + "Version": "1.1.7", + "Source": "Repository", + "Title": "Diagnostics for OMOP Common Data Model Drug Records", + "Authors@R": "c( person(\"Ger\", \"Inberg\", email = \"g.inberg@erasmusmc.nl\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-8993-8748\")), person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Theresa\", \"Burkard\", email = \"theresa.burkard@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-1313-4473\")), person(\"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Marti\", \"Catala\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Xintong\", \"Li\", email = \"xintong.li@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-6872-5804\")), person(\"Ross\", \"Williams\", email = \"r.williams@erasmusmc.nl\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-7723-417X\")), person(\"Erasmus MC\", role = c(\"cph\")) )", + "Description": "Ingredient specific diagnostics for drug exposure records in the Observational Medical Outcomes Partnership (OMOP) common data model.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Depends": [ + "R (>= 4.0)" + ], + "Imports": [ + "CDMConnector (>= 1.4.0)", + "dplyr (>= 1.0.0)", + "magrittr (>= 2.0.0)", + "rlang (>= 1.0.0)", + "tidyr (>= 1.2.0)", + "tidyselect (>= 1.2.0)", + "checkmate (>= 2.0.0)", + "glue (>= 1.5.0)", + "DrugUtilisation (>= 0.7.0)", + "omopgenerics (>= 0.2.3)", + "R6" + ], + "Suggests": [ + "testthat (>= 3.0.0)", + "duckdb", + "odbc", + "DBI", + "knitr", + "rmarkdown", + "zip", + "lubridate", + "tibble", + "DT", + "graphics", + "SqlRender", + "ggplot2", + "plotly", + "tictoc", + "here", + "shiny (>= 1.6.0)", + "shinycssloaders", + "shinyWidgets", + "shinyjs", + "shinytest2" + ], + "Config/testthat/edition": "3", + "URL": "https://darwin-eu.github.io/DrugExposureDiagnostics/, https://github.com/darwin-eu/DrugExposureDiagnostics", + "BugReports": "https://github.com/darwin-eu/DrugExposureDiagnostics/issues", + "VignetteBuilder": "knitr", + "Language": "en-US", + "Collate": "'DrugExposureDiagnostics-package.R' 'checkDaysSupply.R' 'checkDrugDose.R' 'checkDrugExposureDuration.R' 'checkDrugQuantity.R' 'checkDrugRoutes.R' 'checkDrugSig.R' 'checkDrugSourceConcepts.R' 'checkDrugType.R' 'checkDrugsMissing.R' 'checkTimeBetween.R' 'checkVerbatimEndDate.R' 'shinyModule.R' 'dataPlotPanel.R' 'executeChecks.R' 'getDrugRecords.R' 'globals.R' 'ingredientDescendantsInDb.R' 'metaDataPanel.R' 'mockDrugExposure.R' 'obscureCounts.R' 'runBenchmark.R' 'shiny.R' 'shinyApp.R' 'summariseChecks.R' 'utils-pipe.R' 'utils.R'", + "NeedsCompilation": "no", + "Author": "Ger Inberg [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Theresa Burkard [aut] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Marti Catala [ctb] (ORCID: ), Mike Du [ctb] (ORCID: ), Xintong Li [ctb] (ORCID: ), Ross Williams [ctb] (ORCID: ), Erasmus MC [cph]", + "Maintainer": "Ger Inberg ", + "Repository": "CRAN" + }, + "DrugUtilisation": { + "Package": "DrugUtilisation", + "Version": "1.1.0", + "Source": "Repository", + "Title": "Summarise Patient-Level Drug Utilisation in Data Mapped to the OMOP Common Data Model", + "Authors@R": "c( person( \"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\") ), person( \"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\") ), person( \"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\") ), person( \"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\") ), person( \"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\") ), person( \"Xintong\", \"Li\", email = \"xintong.li@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-6872-5804\") ), person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0002-4405-1814\") ), person( \"Nuria\", \"Mercade-Besora\", , email = \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\") ), person( \"Xihang\", \"Chen\", , email = \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\") ))", + "Description": "Summarise patient-level drug utilisation cohorts using data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model. New users and prevalent users cohorts can be generated and their characteristics, indication and drug use summarised.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Suggests": [ + "bit64", + "CDMConnector (>= 1.4.0)", + "CohortConstructor", + "CohortSurvival", + "covr", + "DBI", + "duckdb", + "flextable", + "ggplot2", + "ggtext", + "gt", + "here", + "knitr", + "odbc", + "omock", + "rmarkdown", + "RPostgres", + "scales", + "testthat (>= 3.1.5)", + "tibble", + "visOmopResults (>= 1.3.0)" + ], + "Config/testthat/edition": "3", + "Imports": [ + "cli", + "clock", + "CodelistGenerator (>= 3.1.0)", + "dplyr", + "glue", + "lifecycle", + "omopgenerics (>= 1.3.1)", + "PatientProfiles (>= 1.4.2)", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Depends": [ + "R (>= 4.1)" + ], + "LazyData": "true", + "URL": "https://darwin-eu.github.io/DrugUtilisation/", + "BugReports": "https://github.com/darwin-eu/DrugUtilisation/issues", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Martí Català [aut, cre] (ORCID: ), Mike Du [ctb] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Edward Burn [aut] (ORCID: ), Xintong Li [ctb] (ORCID: ), Marta Alcalde-Herraiz [ctb] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Xihang Chen [aut] (ORCID: )", + "Maintainer": "Martí Català ", + "Repository": "CRAN" + }, + "IncidencePrevalence": { + "Package": "IncidencePrevalence", + "Version": "1.2.1", + "Source": "Repository", + "Title": "Estimate Incidence and Prevalence using the OMOP Common Data Model", + "Authors@R": "c( person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Berta\", \"Raventos\", email = \"braventos@idiapjgol.info\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-4668-2970\")), person(\"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Adam\", \"Black\", email = \"black@ohdsi.org\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-5576-8701\")), person(\"Ger\", \"Inberg\", email = \"g.inberg@erasmusmc.nl\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-8993-8748\")), person(\"Kim\", \"Lopez\", email = \"kim.lopez@spc.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-8462-8668\")) )", + "Description": "Calculate incidence and prevalence using data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model. Incidence and prevalence can be estimated for the total population in a database or for a stratification cohort.", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "CDMConnector (>= 2.0.0)", + "cli (>= 3.0.0)", + "clock", + "dplyr (>= 1.1.0)", + "glue (>= 1.5.0)", + "omopgenerics (>= 1.1.0)", + "magrittr (>= 2.0.0)", + "PatientProfiles (>= 1.3.1)", + "purrr (>= 0.3.5)", + "rlang (>= 1.0.0)", + "stringr (>= 1.5.0)", + "tidyr (>= 1.2.0)" + ], + "Suggests": [ + "knitr", + "dbplyr", + "rmarkdown", + "RPostgres", + "duckdb (>= 1.0.0)", + "DBI (>= 1.0.0)", + "odbc", + "here", + "Hmisc", + "epitools", + "tictoc", + "testthat (>= 0.3.1)", + "spelling", + "gt", + "flextable", + "ggplot2 (>= 3.4.0)", + "scales (>= 1.1.0)", + "visOmopResults (>= 1.0.2)", + "patchwork", + "binom" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "Language": "en-US", + "License": "Apache License (>= 2)", + "URL": "https://darwin-eu.github.io/IncidencePrevalence/", + "BugReports": "https://github.com/darwin-eu/IncidencePrevalence/issues", + "LazyData": "true", + "NeedsCompilation": "no", + "Author": "Edward Burn [aut, cre] (ORCID: ), Berta Raventos [aut] (ORCID: ), Martí Català [aut] (ORCID: ), Mike Du [ctb] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Adam Black [ctb] (ORCID: ), Ger Inberg [ctb] (ORCID: ), Kim Lopez [ctb] (ORCID: )", + "Maintainer": "Edward Burn ", + "Repository": "CRAN" + }, + "Matrix": { + "Package": "Matrix", + "Version": "1.7-0", + "Source": "Repository", + "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h", + "Date": "2024-03-16", + "Priority": "recommended", + "Title": "Sparse and Dense Matrix Classes and Methods", + "Description": "A rich hierarchy of sparse and dense matrix classes, including general, symmetric, triangular, and diagonal matrices with numeric, logical, or pattern entries. Efficient methods for operating on such matrices, often wrapping the 'BLAS', 'LAPACK', and 'SuiteSparse' libraries.", + "License": "GPL (>= 2) | file LICENCE", + "URL": "https://Matrix.R-forge.R-project.org", + "BugReports": "https://R-forge.R-project.org/tracker/?atid=294&group_id=61", + "Contact": "Matrix-authors@R-project.org", + "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Timothy A.\", \"Davis\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7614-6899\", \"SuiteSparse libraries\", \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")), person(\"George\", \"Karypis\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2753-1437\", \"METIS library\", \"Copyright: Regents of the University of Minnesota\")), person(\"Jason\", \"Riedy\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4345-4200\", \"GNU Octave's condest() and onenormest()\", \"Copyright: Regents of the University of California\")), person(\"Jens\", \"Oehlschlägel\", role = \"ctb\", comment = \"initial nearPD()\"), person(\"R Core Team\", role = \"ctb\", comment = \"base R's matrix implementation\"))", + "Depends": [ + "R (>= 4.4.0)", + "methods" + ], + "Imports": [ + "grDevices", + "graphics", + "grid", + "lattice", + "stats", + "utils" + ], + "Suggests": [ + "MASS", + "datasets", + "sfsmisc", + "tools" + ], + "Enhances": [ + "SparseM", + "graph" + ], + "LazyData": "no", + "LazyDataNote": "not possible, since we use data/*.R and our S4 classes", + "BuildResaveData": "no", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Douglas Bates [aut] (), Martin Maechler [aut, cre] (), Mikael Jagan [aut] (), Timothy A. Davis [ctb] (, SuiteSparse libraries, collaborators listed in dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"), pattern=\"License\", full.names=TRUE, recursive=TRUE)), George Karypis [ctb] (, METIS library, Copyright: Regents of the University of Minnesota), Jason Riedy [ctb] (, GNU Octave's condest() and onenormest(), Copyright: Regents of the University of California), Jens Oehlschlägel [ctb] (initial nearPD()), R Core Team [ctb] (base R's matrix implementation)", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, + "MeasurementDiagnostics": { + "Package": "MeasurementDiagnostics", + "Version": "0.3.0", + "Source": "Repository", + "Type": "Package", + "Title": "Diagnostics for Lists of Codes Based on Measurements", + "Authors@R": "c( person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")))", + "Description": "Diagnostics of list of codes based on concepts from the domains measurement and observation. This package works for data mapped to the Observational Medical Outcomes Partnership Common Data Model.", + "Imports": [ + "cli", + "clock", + "CohortCharacteristics", + "CohortConstructor (>= 0.4.0)", + "DBI", + "dplyr", + "glue", + "omopgenerics (>= 1.2.0)", + "PatientProfiles (>= 1.4.0)", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Suggests": [ + "CDMConnector (>= 2.0.0)", + "CodelistGenerator (>= 3.5.0)", + "visOmopResults (>= 1.4.0)", + "duckdb", + "knitr", + "omock (>= 0.4.0)", + "rmarkdown", + "testthat", + "ggplot2", + "gt", + "flextable", + "RPostgres", + "lubridate", + "odbc" + ], + "Depends": [ + "R (>= 4.1)" + ], + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "URL": "https://ohdsi.github.io/MeasurementDiagnostics/", + "BugReports": "https://github.com/ohdsi/MeasurementDiagnostics/issues", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Edward Burn [aut] (ORCID: ), Nuria Mercade-Besora [aut, cre] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: )", + "Maintainer": "Nuria Mercade-Besora ", + "Repository": "CRAN" + }, + "OmopSketch": { + "Package": "OmopSketch", + "Version": "1.0.1", + "Source": "Repository", + "Title": "Characterise Tables of an OMOP Common Data Model Instance", + "Authors@R": "c( person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\") ), person( \"Kim\", \"Lopez-Guell\", email = \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\") ), person( \"Elin\", \"Rowlands\", email = \"elin.rowlands@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0005-5166-0417\") ), person( \"Cecilia\", \"Campanile\", email = \"cecilia.campanile@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0007-6629-4661\") ), person( \"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\") ), person( \"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\") ))", + "Maintainer": "Cecilia Campanile ", + "Description": "Summarises key information in data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model. Assess suitability to perform specific epidemiological studies and explore the different domains to obtain feasibility counts and trends.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Suggests": [ + "CDMConnector (>= 1.3.0)", + "CodelistGenerator", + "CohortCharacteristics", + "DBI", + "duckdb", + "DT", + "flextable", + "gt", + "here", + "knitr", + "lubridate", + "odbc", + "OmopViewer (>= 0.5.0)", + "sortable", + "reactable", + "remotes", + "rmarkdown", + "RPostgres", + "shinyWidgets", + "testthat (>= 3.0.0)", + "withr", + "omock (>= 0.4.0)", + "covr", + "ggplot2", + "visOmopResults (>= 1.4.2)", + "devtools", + "usethis", + "plotly" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Imports": [ + "cli", + "clock", + "CohortConstructor (>= 0.3.1)", + "dplyr", + "lifecycle", + "omopgenerics (>= 1.3.1)", + "PatientProfiles (>= 1.4.3)", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Depends": [ + "R (>= 4.1)" + ], + "URL": "https://OHDSI.github.io/OmopSketch/", + "BugReports": "https://github.com/OHDSI/OmopSketch/issues", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Marta Alcalde-Herraiz [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Elin Rowlands [aut] (ORCID: ), Cecilia Campanile [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Martí Català [aut] (ORCID: )", + "Repository": "CRAN" + }, + "PatientProfiles": { + "Package": "PatientProfiles", + "Version": "1.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Identify Characteristics of Patients in the OMOP Common Data Model", + "Authors@R": "c( person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Yuchen\", \"Guo\", , \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Mike\", \"Du\", , \"mike.du@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Xintong\", \"Li\", , \"xintong.li@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-6872-5804\")), person(\"Xihang\", \"Chen\", , \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0001-8112-8959\")) )", + "Maintainer": "Martí Català ", + "Description": "Identify the characteristics of patients in data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Suggests": [ + "bit64", + "CDMConnector (>= 1.3.1)", + "CodelistGenerator", + "CohortConstructor", + "covr", + "DBI", + "dbplyr", + "DT", + "duckdb (>= 0.9.0)", + "ggplot2", + "glue", + "gt", + "here", + "Hmisc", + "knitr", + "odbc", + "omock", + "patchwork", + "rmarkdown", + "RPostgres", + "scales", + "spelling", + "testthat (>= 3.1.5)", + "tictoc", + "withr" + ], + "Imports": [ + "cli", + "clock", + "dplyr", + "lifecycle", + "omopgenerics (>= 1.3.1)", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "URL": "https://darwin-eu.github.io/PatientProfiles/", + "BugReports": "https://github.com/darwin-eu/PatientProfiles/issues", + "Language": "en-US", + "Depends": [ + "R (>= 4.1.0)" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Martí Català [aut, cre] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Mike Du [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Edward Burn [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Xintong Li [ctb] (ORCID: ), Xihang Chen [ctb] (ORCID: )", + "Repository": "CRAN" + }, + "PhenotypeR": { + "Package": "PhenotypeR", + "Version": "0.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Assess Study Cohorts Using a Common Data Model", + "Authors@R": "c( person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Xihang\", \"Chen\", , \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\")), person(\"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Albert\", \"Prats-Uribe\", , \"albert.prats-uribe@ndorms.ox.ac.uk\", role = \"aut\", comment = c(ORCID = \"0000-0003-1202-9153\")))", + "Description": "Phenotype study cohorts in data mapped to the Observational Medical Outcomes Partnership Common Data Model. Diagnostics are run at the database, code list, cohort, and population level to assess whether study cohorts are ready for research.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "Depends": [ + "R (>= 4.1.0)" + ], + "Suggests": [ + "CDMConnector (>= 1.6.1)", + "duckdb", + "DBI", + "gt", + "omock", + "testthat (>= 3.0.0)", + "knitr", + "glue", + "RPostgres", + "ggplot2", + "stringr", + "shiny (>= 1.11.1)", + "DiagrammeR", + "DiagrammeRsvg", + "reactable", + "rsvg", + "sortable", + "shinycssloaders", + "here", + "DT", + "bslib", + "shinyWidgets", + "plotly", + "tidyr", + "scales", + "usethis", + "rmarkdown", + "CohortSurvival (>= 1.1.0)", + "ellmer", + "htmltools", + "visOmopResults (>= 1.4.2)", + "rsconnect", + "cpp11", + "progress", + "qs2", + "lubridate", + "systemfonts", + "officer", + "fs", + "OmopConstructor", + "tools", + "jsonlite", + "jsonvalidate", + "shinyjs" + ], + "Config/testthat/edition": "3", + "RoxygenNote": "7.3.3", + "Imports": [ + "cli", + "clock", + "CodelistGenerator (>= 4.0.2)", + "CohortCharacteristics (>= 1.1.3)", + "CohortConstructor (>= 0.6.2)", + "dplyr", + "DrugUtilisation (>= 1.1.0)", + "IncidencePrevalence (>= 1.2.0)", + "MeasurementDiagnostics (>= 0.3.0)", + "omopgenerics (>= 1.2.0)", + "OmopSketch (>= 1.0.1)", + "PatientProfiles (>= 1.4.5)", + "purrr", + "readr", + "rlang", + "vctrs" + ], + "URL": "https://ohdsi.github.io/PhenotypeR/", + "BugReports": "https://github.com/OHDSI/PhenotypeR/issues", + "VignetteBuilder": "knitr", + "Config/testthat/parallel": "true", + "NeedsCompilation": "no", + "Author": "Edward Burn [aut, cre] (ORCID: ), Martí Català [aut] (ORCID: ), Xihang Chen [aut] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Albert Prats-Uribe [aut] (ORCID: )", + "Maintainer": "Edward Burn ", + "Repository": "CRAN" + }, + "R6": { + "Package": "R6", + "Version": "2.6.1", + "Source": "Repository", + "Title": "Encapsulated Classes with Reference Semantics", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Creates classes with reference semantics, similar to R's built-in reference classes. Compared to reference classes, R6 classes are simpler and lighter-weight, and they are not built on S4 classes so they do not require the methods package. These classes allow public and private members, and they support inheritance, even when the classes are defined in different packages.", + "License": "MIT + file LICENSE", + "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6", + "BugReports": "https://github.com/r-lib/R6/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Suggests": [ + "lobstr", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate, ggplot2, microbenchmark, scales", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "RColorBrewer": { + "Package": "RColorBrewer", + "Version": "1.1-3", + "Source": "Repository", + "Date": "2022-04-03", + "Title": "ColorBrewer Palettes", + "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", + "Author": "Erich Neuwirth [aut, cre]", + "Maintainer": "Erich Neuwirth ", + "Depends": [ + "R (>= 2.0.0)" + ], + "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", + "License": "Apache License 2.0", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.1.1-1.1", + "Source": "Repository", + "Title": "Seamless R and C++ Integration", + "Date": "2026-04-19", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", + "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "methods", + "utils" + ], + "Suggests": [ + "tinytest", + "inline", + "rbenchmark", + "pkgKitten (>= 0.1.2)" + ], + "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp", + "License": "GPL (>= 2)", + "BugReports": "https://github.com/RcppCore/Rcpp/issues", + "MailingList": "rcpp-devel@lists.r-forge.r-project.org", + "RoxygenNote": "6.1.1", + "Encoding": "UTF-8", + "VignetteBuilder": "Rcpp", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), JJ Allaire [aut] (ORCID: ), Kevin Ushey [aut] (ORCID: ), Qiang Kou [aut] (ORCID: ), Nathan Russell [aut], Iñaki Ucar [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), John Chambers [aut]", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "S7": { + "Package": "S7", + "Version": "0.2.2", + "Source": "Repository", + "Title": "An Object Oriented System Meant to Become a Successor to S3 and S4", + "Authors@R": "c( person(\"Object-Oriented Programming Working Group\", role = \"cph\"), person(\"Davis\", \"Vaughan\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Tomasz\", \"Kalinowski\", role = \"aut\"), person(\"Will\", \"Landau\", role = \"aut\"), person(\"Michael\", \"Lawrence\", role = \"aut\"), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Luke\", \"Tierney\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")) )", + "Description": "A new object oriented programming system designed to be a successor to S3 and S4. It includes formal class, generic, and method specification, and a limited form of multiple dispatch. It has been designed and implemented collaboratively by the R Consortium Object-Oriented Programming Working Group, which includes representatives from R-Core, 'Bioconductor', 'Posit'/'tidyverse', and the wider R community.", + "License": "MIT + file LICENSE", + "URL": "https://rconsortium.github.io/S7/, https://github.com/RConsortium/S7", + "BugReports": "https://github.com/RConsortium/S7/issues", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "bench", + "callr", + "covr", + "knitr", + "methods", + "rmarkdown", + "testthat (>= 3.2.0)", + "tibble" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "sloop", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "TRUE", + "Config/testthat/start-first": "external-generic", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Object-Oriented Programming Working Group [cph], Davis Vaughan [aut], Jim Hester [aut] (ORCID: ), Tomasz Kalinowski [aut], Will Landau [aut], Michael Lawrence [aut], Martin Maechler [aut] (ORCID: ), Luke Tierney [aut], Hadley Wickham [aut, cre] (ORCID: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "V8": { + "Package": "V8", + "Version": "8.2.0", + "Source": "Repository", + "Type": "Package", + "Title": "Embedded JavaScript and WebAssembly Engine for R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"George\", \"Stagg\", role = \"ctb\", comment = c(ORCID = \"0009-0006-3173-9846\")), person(\"Jan Marvin\", \"Garbuszus\", role = \"ctb\"))", + "Description": "An R interface to V8 : Google's open source JavaScript and WebAssembly engine. This package can be compiled either with V8 or NodeJS when built as a shared library.", + "License": "MIT + file LICENSE", + "URL": "https://jeroen.r-universe.dev/V8", + "BugReports": "https://github.com/jeroen/v8/issues", + "SystemRequirements": "On Linux you can build against libv8-dev (Debian) or v8-devel (Fedora). We also provide static libv8 binaries for most platforms, see the README for details.", + "NeedsCompilation": "yes", + "VignetteBuilder": "knitr", + "Imports": [ + "Rcpp (>= 0.12.12)", + "jsonlite (>= 1.0)", + "curl (>= 1.0)", + "utils" + ], + "LinkingTo": [ + "Rcpp" + ], + "Suggests": [ + "testthat", + "knitr", + "rmarkdown" + ], + "RoxygenNote": "7.3.1", + "Language": "en-US", + "Encoding": "UTF-8", + "Biarch": "true", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), George Stagg [ctb] (ORCID: ), Jan Marvin Garbuszus [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "askpass": { + "Package": "askpass", + "Version": "1.2.1", + "Source": "Repository", + "Type": "Package", + "Title": "Password Entry Utilities for R, Git, and SSH", + "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", + "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", + "License": "MIT + file LICENSE", + "URL": "https://r-lib.r-universe.dev/askpass", + "BugReports": "https://github.com/r-lib/askpass/issues", + "Encoding": "UTF-8", + "Imports": [ + "sys (>= 2.1)" + ], + "RoxygenNote": "7.2.3", + "Suggests": [ + "testthat" + ], + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] ()", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "backports": { + "Package": "backports", + "Version": "1.5.1", + "Source": "Repository", + "Type": "Package", + "Title": "Reimplementations of Functions Introduced Since R-3.0.0", + "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Duncan\", \"Murdoch\", NULL, \"murdoch.duncan@gmail.com\", role = c(\"aut\")), person(\"R Core Team\", role = \"aut\"))", + "Maintainer": "Michel Lang ", + "Description": "Functions introduced or changed since R v3.0.0 are re-implemented in this package. The backports are conditionally exported in order to let R resolve the function name to either the implemented backport, or the respective base version, if available. Package developers can make use of new functions or arguments by selectively importing specific backports to support older installations.", + "URL": "https://github.com/r-lib/backports", + "BugReports": "https://github.com/r-lib/backports/issues", + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "yes", + "ByteCompile": "yes", + "Depends": [ + "R (>= 3.0.0)" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Author": "Michel Lang [cre, aut] (ORCID: ), Duncan Murdoch [aut], R Core Team [aut]", + "Repository": "CRAN" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-6", + "Source": "Repository", + "Title": "Tools for 'base64' Encoding", + "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.nz, ORCID: )", + "Authors@R": "person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.nz\", ORCID=\"0000-0003-2297-1732\"))", + "Maintainer": "Simon Urbanek ", + "Depends": [ + "R (>= 2.9.0)" + ], + "Enhances": [ + "png" + ], + "Description": "Tools for handling 'base64' encoding. It is more flexible than the orphaned 'base64' package.", + "License": "GPL-2 | GPL-3", + "URL": "https://www.rforge.net/base64enc", + "BugReports": "https://github.com/s-u/base64enc/issues", + "NeedsCompilation": "yes", + "Repository": "CRAN" + }, + "bigD": { + "Package": "bigD", + "Version": "0.3.1", + "Source": "Repository", + "Type": "Package", + "Title": "Flexibly Format Dates and Times to a Given Locale", + "Description": "Format dates and times flexibly and to whichever locales make sense. Parses dates, times, and date-times in various formats (including string-based ISO 8601 constructions). The formatting syntax gives the user many options for formatting the date and time output in a precise manner. Time zones in the input can be expressed in multiple ways and there are many options for formatting time zones in the output as well. Several of the provided helper functions allow for automatic generation of locale-aware formatting patterns based on date/time skeleton formats and standardized date/time formats with varying specificity.", + "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Olivier\", \"Roy\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/bigD/, https://github.com/rstudio/bigD", + "BugReports": "https://github.com/rstudio/bigD/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Depends": [ + "R (>= 3.6.0)" + ], + "Suggests": [ + "testthat (>= 3.0.0)", + "vctrs (>= 0.5.0)" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "NeedsCompilation": "no", + "Author": "Richard Iannone [aut, cre] (), Olivier Roy [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN" + }, + "bit": { + "Package": "bit", + "Version": "4.6.0", + "Source": "Repository", + "Title": "Classes and Methods for Fast Memory-Efficient Boolean Selections", + "Authors@R": "c( person(\"Michael\", \"Chirico\", email = \"MichaelChirico4@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role = \"aut\"), person(\"Brian\", \"Ripley\", role = \"ctb\") )", + "Depends": [ + "R (>= 3.4.0)" + ], + "Suggests": [ + "testthat (>= 3.0.0)", + "roxygen2", + "knitr", + "markdown", + "rmarkdown", + "microbenchmark", + "bit64 (>= 4.0.0)", + "ff (>= 4.0.0)" + ], + "Description": "Provided are classes for boolean and skewed boolean vectors, fast boolean methods, fast unique and non-unique integer sorting, fast set operations on sorted and unsorted sets of integers, and foundations for ff (range index, compression, chunked processing).", + "License": "GPL-2 | GPL-3", + "LazyLoad": "yes", + "ByteCompile": "yes", + "Encoding": "UTF-8", + "URL": "https://github.com/r-lib/bit", + "VignetteBuilder": "knitr, rmarkdown", + "RoxygenNote": "7.3.2", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Brian Ripley [ctb]", + "Maintainer": "Michael Chirico ", + "Repository": "CRAN" + }, + "bit64": { + "Package": "bit64", + "Version": "4.8.2", + "Source": "Repository", + "Title": "A S3 Class for Vectors of 64bit Integers", + "Authors@R": "c( person(\"Michael\", \"Chirico\", email=\"michaelchirico4@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role=\"aut\"), person(\"Leonardo\", \"Silvestri\", role=\"ctb\"), person(\"Ofek\", \"Shilon\", role=\"ctb\"), person(\"Christian\", \"Ullerich\", role=\"ctb\") )", + "Depends": [ + "R (>= 3.5.0)" + ], + "Description": "Package 'bit64' provides serializable S3 atomic 64bit (signed) integers. These are useful for handling database keys and exact counting in +-2^63. WARNING: do not use them as replacement for 32bit integers, integer64 are not supported for subscripting by R-core and they have different semantics when combined with double, e.g. integer64 + double => integer64. Class integer64 can be used in vectors, matrices, arrays and data.frames. Methods are available for coercion from and to logicals, integers, doubles, characters and factors as well as many elementwise and summary functions. Many fast algorithmic operations such as 'match' and 'order' support inter- active data exploration and manipulation and optionally leverage caching.", + "License": "GPL-2 | GPL-3", + "LazyLoad": "yes", + "ByteCompile": "yes", + "URL": "https://github.com/r-lib/bit64, https://bit64.r-lib.org", + "Encoding": "UTF-8", + "Imports": [ + "bit (>= 4.0.0)", + "graphics", + "methods", + "stats", + "utils" + ], + "Suggests": [ + "patrick (>= 0.3.0)", + "testthat (>= 3.3.0)", + "withr" + ], + "Config/testthat/edition": "3", + "Config/Needs/development": "patrick, testthat", + "Config/Needs/website": "tidyverse/tidytemplate", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Leonardo Silvestri [ctb], Ofek Shilon [ctb], Christian Ullerich [ctb]", + "Maintainer": "Michael Chirico ", + "Repository": "CRAN" + }, + "bitops": { + "Package": "bitops", + "Version": "1.0-9", + "Source": "Repository", + "Date": "2024-10-03", + "Authors@R": "c( person(\"Steve\", \"Dutky\", role = \"aut\", email = \"sdutky@terpalum.umd.edu\", comment = \"S original; then (after MM's port) revised and modified\"), person(\"Martin\", \"Maechler\", role = c(\"cre\", \"aut\"), email = \"maechler@stat.math.ethz.ch\", comment = c(\"Initial R port; tweaks\", ORCID = \"0000-0002-8685-9910\")))", + "Title": "Bitwise Operations", + "Description": "Functions for bitwise operations on integer vectors.", + "License": "GPL (>= 2)", + "URL": "https://github.com/mmaechler/R-bitops", + "BugReports": "https://github.com/mmaechler/R-bitops/issues", + "NeedsCompilation": "yes", + "Author": "Steve Dutky [aut] (S original; then (after MM's port) revised and modified), Martin Maechler [cre, aut] (Initial R port; tweaks, )", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, + "blob": { + "Package": "blob", + "Version": "1.3.0", + "Source": "Repository", + "Title": "A Simple S3 Class for Representing Vectors of Binary Data ('BLOBS')", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = \"cre\"), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", + "Description": "R's raw vector is useful for storing a single binary object. What if you want to put a vector of them in a data frame? The 'blob' package provides the blob object, a list of raw vectors, suitable for use as a column in data frame.", + "License": "MIT + file LICENSE", + "URL": "https://blob.tidyverse.org, https://github.com/tidyverse/blob", + "BugReports": "https://github.com/tidyverse/blob/issues", + "Imports": [ + "methods", + "rlang", + "vctrs (>= 0.2.1)" + ], + "Suggests": [ + "covr", + "crayon", + "pillar (>= 1.2.1)", + "testthat (>= 3.0.0)" + ], + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "false", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Kirill Müller [cre], RStudio [cph, fnd]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "brand.yml": { + "Package": "brand.yml", + "Version": "0.1.0", + "Source": "Repository", + "Title": "Unified Branding with a Simple YAML File", + "Authors@R": "c( person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Read and process 'brand.yml' 'YAML' files. 'brand.yml' is a simple, portable 'YAML' file that codifies your company's brand guidelines into a format that can be used by 'Quarto', 'Shiny' and 'R' tooling to create branded outputs. Maintain unified, branded theming for web applications to printed reports to dashboards and presentations with a consistent look and feel.", + "License": "MIT + file LICENSE", + "URL": "https://posit-dev.github.io/brand-yml/pkg/r/, https://github.com/posit-dev/brand-yml", + "BugReports": "https://github.com/posit-dev/brand-yml/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli", + "rlang (>= 1.1.0)", + "utils", + "yaml" + ], + "Suggests": [ + "base64enc", + "dplyr", + "flextable", + "ggiraph", + "ggplot2 (>= 4.0.0)", + "gt", + "htmltools", + "knitr", + "mime", + "palmerpenguins", + "patchwork", + "plotly", + "prismatic", + "rmarkdown", + "sass", + "stringr", + "testthat (>= 3.0.0)", + "thematic (>= 0.1.7.9000)", + "tidyr", + "tidyverse", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Garrick Aden-Buie [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Garrick Aden-Buie ", + "Repository": "CRAN" + }, + "broom": { + "Package": "broom", + "Version": "1.0.13", + "Source": "Repository", + "Type": "Package", + "Title": "Convert Statistical Objects into Tidy Tibbles", + "Authors@R": "c( person(\"David\", \"Robinson\", , \"admiral.david@gmail.com\", role = \"aut\"), person(\"Alex\", \"Hayes\", , \"alexpghayes@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4985-5160\")), person(\"Simon\", \"Couch\", , \"simon.couch@posit.co\", role = c(\"aut\"), comment = c(ORCID = \"0000-0001-5676-5107\")), person(\"Emil\", \"Hvitfeldt\", , \"emil.hvitfeldt@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0679-1945\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Indrajeet\", \"Patil\", , \"patilindrajeet.science@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1995-6531\")), person(\"Derek\", \"Chiu\", , \"dchiu@bccrc.ca\", role = \"ctb\"), person(\"Matthieu\", \"Gomez\", , \"mattg@princeton.edu\", role = \"ctb\"), person(\"Boris\", \"Demeshev\", , \"boris.demeshev@gmail.com\", role = \"ctb\"), person(\"Dieter\", \"Menne\", , \"dieter.menne@menne-biomed.de\", role = \"ctb\"), person(\"Benjamin\", \"Nutter\", , \"nutter@battelle.org\", role = \"ctb\"), person(\"Luke\", \"Johnston\", , \"luke.johnston@mail.utoronto.ca\", role = \"ctb\"), person(\"Ben\", \"Bolker\", , \"bolker@mcmaster.ca\", role = \"ctb\"), person(\"Francois\", \"Briatte\", , \"f.briatte@gmail.com\", role = \"ctb\"), person(\"Jeffrey\", \"Arnold\", , \"jeffrey.arnold@gmail.com\", role = \"ctb\"), person(\"Jonah\", \"Gabry\", , \"jsg2201@columbia.edu\", role = \"ctb\"), person(\"Luciano\", \"Selzer\", , \"luciano.selzer@gmail.com\", role = \"ctb\"), person(\"Gavin\", \"Simpson\", , \"ucfagls@gmail.com\", role = \"ctb\"), person(\"Jens\", \"Preussner\", , \"jens.preussner@mpi-bn.mpg.de\", role = \"ctb\"), person(\"Jay\", \"Hesselberth\", , \"jay.hesselberth@gmail.com\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"ctb\"), person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = \"ctb\"), person(\"Alessandro\", \"Gasparini\", , \"ag475@leicester.ac.uk\", role = \"ctb\"), person(\"Lukasz\", \"Komsta\", , \"lukasz.komsta@umlub.pl\", role = \"ctb\"), person(\"Frederick\", \"Novometsky\", role = \"ctb\"), person(\"Wilson\", \"Freitas\", role = \"ctb\"), person(\"Michelle\", \"Evans\", role = \"ctb\"), person(\"Jason Cory\", \"Brunson\", , \"cornelioid@gmail.com\", role = \"ctb\"), person(\"Simon\", \"Jackson\", , \"drsimonjackson@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Whalley\", , \"ben.whalley@plymouth.ac.uk\", role = \"ctb\"), person(\"Karissa\", \"Whiting\", , \"karissa.whiting@gmail.com\", role = \"ctb\"), person(\"Yves\", \"Rosseel\", , \"yrosseel@gmail.com\", role = \"ctb\"), person(\"Michael\", \"Kuehn\", , \"mkuehn10@gmail.com\", role = \"ctb\"), person(\"Jorge\", \"Cimentada\", , \"cimentadaj@gmail.com\", role = \"ctb\"), person(\"Erle\", \"Holgersen\", , \"erle.holgersen@gmail.com\", role = \"ctb\"), person(\"Karl\", \"Dunkle Werner\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Ethan\", \"Christensen\", , \"christensen.ej@gmail.com\", role = \"ctb\"), person(\"Steven\", \"Pav\", , \"shabbychef@gmail.com\", role = \"ctb\"), person(\"Paul\", \"PJ\", , \"pjpaul.stephens@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Patrick\", \"Kennedy\", , \"pkqstr@protonmail.com\", role = \"ctb\"), person(\"Lily\", \"Medina\", , \"lilymiru@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Fannin\", , \"captain@pirategrunt.com\", role = \"ctb\"), person(\"Jason\", \"Muhlenkamp\", , \"jason.muhlenkamp@gmail.com\", role = \"ctb\"), person(\"Matt\", \"Lehman\", role = \"ctb\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Nic\", \"Crane\", role = \"ctb\"), person(\"Andrew\", \"Bates\", role = \"ctb\"), person(\"Vincent\", \"Arel-Bundock\", , \"vincent.arel-bundock@umontreal.ca\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2042-7063\")), person(\"Hideaki\", \"Hayashi\", role = \"ctb\"), person(\"Luis\", \"Tobalina\", role = \"ctb\"), person(\"Annie\", \"Wang\", , \"anniewang.uc@gmail.com\", role = \"ctb\"), person(\"Wei Yang\", \"Tham\", , \"weiyang.tham@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", , \"clara.wang.94@gmail.com\", role = \"ctb\"), person(\"Abby\", \"Smith\", , \"als1@u.northwestern.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3207-0375\")), person(\"Jasper\", \"Cooper\", , \"jaspercooper@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8639-3188\")), person(\"E Auden\", \"Krauska\", , \"krauskae@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1466-5850\")), person(\"Alex\", \"Wang\", , \"x249wang@uwaterloo.ca\", role = \"ctb\"), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Charles\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9978-011X\")), person(\"Jared\", \"Wilber\", role = \"ctb\"), person(\"Vilmantas\", \"Gegzna\", , \"GegznaV@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9500-5167\")), person(\"Eduard\", \"Szoecs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Angus\", \"Moore\", , \"angusmoore9@gmail.com\", role = \"ctb\"), person(\"Nick\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Marius\", \"Barth\", , \"marius.barth.uni.koeln@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3421-6665\")), person(\"Bruna\", \"Wundervald\", , \"brunadaviesw@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8163-220X\")), person(\"Joyce\", \"Cahoon\", , \"joyceyu48@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7217-4702\")), person(\"Grant\", \"McDermott\", , \"grantmcd@uoregon.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(\"Kevin\", \"Zarca\", , \"kevin.zarca@gmail.com\", role = \"ctb\"), person(\"Shiro\", \"Kuriwaki\", , \"shirokuriwaki@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5687-2647\")), person(\"Lukas\", \"Wallrich\", , \"lukas.wallrich@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2121-5177\")), person(\"James\", \"Martherus\", , \"james@martherus.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8285-3300\")), person(\"Chuliang\", \"Xiao\", , \"cxiao@umich.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8466-9398\")), person(\"Joseph\", \"Larmarange\", , \"joseph@larmarange.net\", role = \"ctb\"), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", , \"michal2992@gmail.com\", role = \"ctb\"), person(\"Hakon\", \"Malmedal\", , \"hmalmedal@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", role = \"ctb\"), person(\"Sergio\", \"Oller\", , \"sergioller@gmail.com\", role = \"ctb\"), person(\"Luke\", \"Sonnet\", , \"luke.sonnet@gmail.com\", role = \"ctb\"), person(\"Jim\", \"Hester\", , \"jim.hester@posit.co\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Bernie\", \"Gray\", , \"bfgray3@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9190-6032\")), person(\"Mara\", \"Averick\", , \"mara@posit.co\", role = \"ctb\"), person(\"Aaron\", \"Jacobs\", , \"atheriel@gmail.com\", role = \"ctb\"), person(\"Andreas\", \"Bender\", , \"bender.at.R@gmail.com\", role = \"ctb\"), person(\"Sven\", \"Templer\", , \"sven.templer@gmail.com\", role = \"ctb\"), person(\"Paul-Christian\", \"Buerkner\", , \"paul.buerkner@gmail.com\", role = \"ctb\"), person(\"Matthew\", \"Kay\", , \"mjskay@umich.edu\", role = \"ctb\"), person(\"Erwan\", \"Le Pennec\", , \"lepennec@gmail.com\", role = \"ctb\"), person(\"Johan\", \"Junkka\", , \"johan.junkka@umu.se\", role = \"ctb\"), person(\"Hao\", \"Zhu\", , \"haozhu233@gmail.com\", role = \"ctb\"), person(\"Benjamin\", \"Soltoff\", , \"soltoffbc@uchicago.edu\", role = \"ctb\"), person(\"Zoe\", \"Wilkinson Saldana\", , \"zoewsaldana@gmail.com\", role = \"ctb\"), person(\"Tyler\", \"Littlefield\", , \"tylurp1@gmail.com\", role = \"ctb\"), person(\"Charles T.\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\"), person(\"Shabbh E.\", \"Banks\", role = \"ctb\"), person(\"Serina\", \"Robinson\", , \"robi0916@umn.edu\", role = \"ctb\"), person(\"Roger\", \"Bivand\", , \"Roger.Bivand@nhh.no\", role = \"ctb\"), person(\"Riinu\", \"Ots\", , \"riinuots@gmail.com\", role = \"ctb\"), person(\"Nicholas\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Nina\", \"Jakobsen\", role = \"ctb\"), person(\"Michael\", \"Weylandt\", , \"michael.weylandt@gmail.com\", role = \"ctb\"), person(\"Lisa\", \"Lendway\", , \"llendway@macalester.edu\", role = \"ctb\"), person(\"Karl\", \"Hailperin\", , \"khailper@gmail.com\", role = \"ctb\"), person(\"Josue\", \"Rodriguez\", , \"jerrodriguez@ucdavis.edu\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", , \"jenny@posit.co\", role = \"ctb\"), person(\"Chris\", \"Jarvis\", , \"Christopher1.jarvis@gmail.com\", role = \"ctb\"), person(\"Greg\", \"Macfarlane\", , \"gregmacfarlane@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Mannakee\", , \"bmannakee@gmail.com\", role = \"ctb\"), person(\"Drew\", \"Tyre\", , \"atyre2@unl.edu\", role = \"ctb\"), person(\"Shreyas\", \"Singh\", , \"shreyas.singh.298@gmail.com\", role = \"ctb\"), person(\"Laurens\", \"Geffert\", , \"laurensgeffert@gmail.com\", role = \"ctb\"), person(\"Hong\", \"Ooi\", , \"hongooi@microsoft.com\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", , \"henrikb@braju.com\", role = \"ctb\"), person(\"Eduard\", \"Szocs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", , \"davidhughjones@gmail.com\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", , \"Matthieu.Stigler@gmail.com\", role = \"ctb\"), person(\"Hugo\", \"Tavares\", , \"hm533@cam.ac.uk\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9373-2726\")), person(\"R. Willem\", \"Vervoort\", , \"Willemvervoort@gmail.com\", role = \"ctb\"), person(\"Brenton M.\", \"Wiernik\", , \"brenton@wiernik.org\", role = \"ctb\"), person(\"Josh\", \"Yamamoto\", , \"joshuayamamoto5@gmail.com\", role = \"ctb\"), person(\"Jasme\", \"Lee\", role = \"ctb\"), person(\"Taren\", \"Sanders\", , \"taren.sanders@acu.edu.au\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4504-6008\")), person(\"Ilaria\", \"Prosdocimi\", , \"prosdocimi.ilaria@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8565-094X\")), person(\"Daniel D.\", \"Sjoberg\", , \"danield.sjoberg@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0862-2018\")), person(\"Alex\", \"Reinhart\", , \"areinhar@stat.cmu.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6658-514X\")) )", + "Description": "Summarizes key information about statistical objects in tidy tibbles. This makes it easy to report results, create plots and consistently work with large numbers of models at once. Broom provides three verbs that each provide different types of information about a model. tidy() summarizes information about model components such as coefficients of a regression. glance() reports information about an entire model, such as goodness of fit measures like AIC and BIC. augment() adds information about individual observations to a dataset, such as fitted values or influence measures.", + "License": "MIT + file LICENSE", + "URL": "https://broom.tidymodels.org/, https://github.com/tidymodels/broom", + "BugReports": "https://github.com/tidymodels/broom/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "backports", + "cli", + "dplyr (>= 1.0.0)", + "generics (>= 0.0.2)", + "glue", + "lifecycle", + "purrr", + "rlang (>= 1.1.0)", + "stringr", + "tibble (>= 3.0.0)", + "tidyr (>= 1.0.0)" + ], + "Suggests": [ + "AER", + "AUC", + "bbmle", + "betareg (>= 3.2-1)", + "biglm", + "binGroup", + "boot", + "btergm (>= 1.10.6)", + "car (>= 3.1-2)", + "carData", + "caret", + "cluster", + "cmprsk", + "coda", + "covr", + "drc", + "e1071", + "emmeans", + "epiR (>= 2.0.85)", + "ergm (>= 3.10.4)", + "fixest (>= 0.9.0)", + "gam (>= 1.15)", + "gee", + "geepack", + "ggplot2", + "glmnet", + "glmnetUtils", + "gmm", + "Hmisc", + "interp", + "irlba", + "joineRML", + "Kendall", + "knitr", + "ks", + "Lahman", + "lavaan (>= 0.6.18)", + "leaps", + "lfe", + "lm.beta", + "lme4", + "lmodel2", + "lmtest (>= 0.9.38)", + "lsmeans", + "maps", + "margins", + "MASS", + "mclust", + "mediation", + "metafor", + "mfx", + "mgcv", + "mlogit", + "modeldata", + "modeltests (>= 0.1.6)", + "muhaz", + "multcomp", + "network", + "nnet", + "ordinal", + "plm", + "poLCA", + "psych", + "quantreg", + "rmarkdown", + "robust", + "robustbase", + "rsample", + "sandwich", + "spatialreg", + "spdep (>= 1.1)", + "speedglm", + "spelling", + "stats4", + "survey", + "survival (>= 3.6-4)", + "systemfit", + "testthat (>= 3.0.0)", + "tseries", + "vars", + "zoo" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-25", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "Collate": "'aaa-documentation-helper.R' 'null-and-default.R' 'aer.R' 'auc.R' 'base.R' 'bbmle.R' 'betareg.R' 'biglm.R' 'bingroup.R' 'boot.R' 'broom-package.R' 'broom.R' 'btergm.R' 'car.R' 'caret.R' 'cluster.R' 'cmprsk.R' 'data-frame.R' 'deprecated-0-7-0.R' 'drc.R' 'emmeans.R' 'epiR.R' 'ergm.R' 'fixest.R' 'gam.R' 'geepack.R' 'glmnet-cv-glmnet.R' 'glmnet-glmnet.R' 'gmm.R' 'hmisc.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'joinerml.R' 'kendall.R' 'ks.R' 'lavaan.R' 'leaps.R' 'lfe.R' 'list-irlba.R' 'list-optim.R' 'list-svd.R' 'list-xyz.R' 'list.R' 'lm-beta.R' 'lmodel2.R' 'lmtest.R' 'maps.R' 'margins.R' 'mass-fitdistr.R' 'mass-negbin.R' 'mass-polr.R' 'mass-ridgelm.R' 'stats-lm.R' 'mass-rlm.R' 'mclust.R' 'mediation.R' 'metafor.R' 'mfx.R' 'mgcv.R' 'mlogit.R' 'muhaz.R' 'multcomp.R' 'nnet.R' 'nobs.R' 'ordinal-clm.R' 'ordinal-clmm.R' 'plm.R' 'polca.R' 'psych.R' 'stats-nls.R' 'quantreg-nlrq.R' 'quantreg-rq.R' 'quantreg-rqs.R' 'robust-glmrob.R' 'robust-lmrob.R' 'robustbase-glmrob.R' 'robustbase-lmrob.R' 'sp.R' 'spdep.R' 'speedglm-speedglm.R' 'speedglm-speedlm.R' 'stats-anova.R' 'stats-arima.R' 'stats-decompose.R' 'stats-factanal.R' 'stats-glm.R' 'stats-htest.R' 'stats-kmeans.R' 'stats-loess.R' 'stats-mlm.R' 'stats-prcomp.R' 'stats-smooth.spline.R' 'stats-summary-lm.R' 'stats-time-series.R' 'survey.R' 'survival-aareg.R' 'survival-cch.R' 'survival-coxph.R' 'survival-pyears.R' 'survival-survdiff.R' 'survival-survexp.R' 'survival-survfit.R' 'survival-survreg.R' 'systemfit.R' 'tseries.R' 'utilities.R' 'vars.R' 'zoo.R' 'zzz.R'", + "NeedsCompilation": "no", + "Author": "David Robinson [aut], Alex Hayes [aut] (ORCID: ), Simon Couch [aut] (ORCID: ), Emil Hvitfeldt [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Indrajeet Patil [ctb] (ORCID: ), Derek Chiu [ctb], Matthieu Gomez [ctb], Boris Demeshev [ctb], Dieter Menne [ctb], Benjamin Nutter [ctb], Luke Johnston [ctb], Ben Bolker [ctb], Francois Briatte [ctb], Jeffrey Arnold [ctb], Jonah Gabry [ctb], Luciano Selzer [ctb], Gavin Simpson [ctb], Jens Preussner [ctb], Jay Hesselberth [ctb], Hadley Wickham [ctb], Matthew Lincoln [ctb], Alessandro Gasparini [ctb], Lukasz Komsta [ctb], Frederick Novometsky [ctb], Wilson Freitas [ctb], Michelle Evans [ctb], Jason Cory Brunson [ctb], Simon Jackson [ctb], Ben Whalley [ctb], Karissa Whiting [ctb], Yves Rosseel [ctb], Michael Kuehn [ctb], Jorge Cimentada [ctb], Erle Holgersen [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Ethan Christensen [ctb], Steven Pav [ctb], Paul PJ [ctb], Ben Schneider [ctb], Patrick Kennedy [ctb], Lily Medina [ctb], Brian Fannin [ctb], Jason Muhlenkamp [ctb], Matt Lehman [ctb], Bill Denney [ctb] (ORCID: ), Nic Crane [ctb], Andrew Bates [ctb], Vincent Arel-Bundock [ctb] (ORCID: ), Hideaki Hayashi [ctb], Luis Tobalina [ctb], Annie Wang [ctb], Wei Yang Tham [ctb], Clara Wang [ctb], Abby Smith [ctb] (ORCID: ), Jasper Cooper [ctb] (ORCID: ), E Auden Krauska [ctb] (ORCID: ), Alex Wang [ctb], Malcolm Barrett [ctb] (ORCID: ), Charles Gray [ctb] (ORCID: ), Jared Wilber [ctb], Vilmantas Gegzna [ctb] (ORCID: ), Eduard Szoecs [ctb], Frederik Aust [ctb] (ORCID: ), Angus Moore [ctb], Nick Williams [ctb], Marius Barth [ctb] (ORCID: ), Bruna Wundervald [ctb] (ORCID: ), Joyce Cahoon [ctb] (ORCID: ), Grant McDermott [ctb] (ORCID: ), Kevin Zarca [ctb], Shiro Kuriwaki [ctb] (ORCID: ), Lukas Wallrich [ctb] (ORCID: ), James Martherus [ctb] (ORCID: ), Chuliang Xiao [ctb] (ORCID: ), Joseph Larmarange [ctb], Max Kuhn [ctb], Michal Bojanowski [ctb], Hakon Malmedal [ctb], Clara Wang [ctb], Sergio Oller [ctb], Luke Sonnet [ctb], Jim Hester [ctb], Ben Schneider [ctb], Bernie Gray [ctb] (ORCID: ), Mara Averick [ctb], Aaron Jacobs [ctb], Andreas Bender [ctb], Sven Templer [ctb], Paul-Christian Buerkner [ctb], Matthew Kay [ctb], Erwan Le Pennec [ctb], Johan Junkka [ctb], Hao Zhu [ctb], Benjamin Soltoff [ctb], Zoe Wilkinson Saldana [ctb], Tyler Littlefield [ctb], Charles T. Gray [ctb], Shabbh E. Banks [ctb], Serina Robinson [ctb], Roger Bivand [ctb], Riinu Ots [ctb], Nicholas Williams [ctb], Nina Jakobsen [ctb], Michael Weylandt [ctb], Lisa Lendway [ctb], Karl Hailperin [ctb], Josue Rodriguez [ctb], Jenny Bryan [ctb], Chris Jarvis [ctb], Greg Macfarlane [ctb], Brian Mannakee [ctb], Drew Tyre [ctb], Shreyas Singh [ctb], Laurens Geffert [ctb], Hong Ooi [ctb], Henrik Bengtsson [ctb], Eduard Szocs [ctb], David Hugh-Jones [ctb], Matthieu Stigler [ctb], Hugo Tavares [ctb] (ORCID: ), R. Willem Vervoort [ctb], Brenton M. Wiernik [ctb], Josh Yamamoto [ctb], Jasme Lee [ctb], Taren Sanders [ctb] (ORCID: ), Ilaria Prosdocimi [ctb] (ORCID: ), Daniel D. Sjoberg [ctb] (ORCID: ), Alex Reinhart [ctb] (ORCID: )", + "Maintainer": "Emil Hvitfeldt ", + "Repository": "CRAN" + }, + "bslib": { + "Package": "bslib", + "Version": "0.10.0", + "Source": "Repository", + "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", + "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )", + "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", + "BugReports": "https://github.com/rstudio/bslib/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Imports": [ + "base64enc", + "cachem", + "fastmap (>= 1.1.1)", + "grDevices", + "htmltools (>= 0.5.8)", + "jquerylib (>= 0.1.3)", + "jsonlite", + "lifecycle", + "memoise (>= 2.0.1)", + "mime", + "rlang", + "sass (>= 0.4.9)" + ], + "Suggests": [ + "brand.yml", + "bsicons", + "curl", + "fontawesome", + "future", + "ggplot2", + "knitr", + "lattice", + "magrittr", + "rappdirs", + "rmarkdown (>= 2.7)", + "shiny (>= 1.11.1)", + "testthat", + "thematic", + "tools", + "utils", + "withr", + "yaml" + ], + "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble", + "Config/Needs/routine": "chromote, desc, renv", + "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R' 'bs-dependencies.R' 'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R' 'bs-theme-preset-brand.R' 'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R' 'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R' 'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R' 'fill.R' 'imports.R' 'input-code-editor.R' 'input-dark-mode.R' 'input-submit.R' 'input-switch.R' 'layout.R' 'nav-items.R' 'nav-update.R' 'navbar_options.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R' 'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R' 'toast.R' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'", + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (ORCID: ), Joe Cheng [aut], Garrick Aden-Buie [aut] (ORCID: ), Posit Software, PBC [cph, fnd], Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Javi Aguilar [ctb, cph] (Bootstrap colorpicker library), Thomas Park [ctb, cph] (Bootswatch library), PayPal [ctb, cph] (Bootstrap accessibility plugin)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "cachem": { + "Package": "cachem", + "Version": "1.1.0", + "Source": "Repository", + "Title": "Cache R Objects with Automatic Pruning", + "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "ByteCompile": "true", + "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", + "Imports": [ + "rlang", + "fastmap (>= 1.2.0)" + ], + "Suggests": [ + "testthat" + ], + "RoxygenNote": "7.2.3", + "Config/Needs/routine": "lobstr", + "Config/Needs/website": "pkgdown", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "checkmate": { + "Package": "checkmate", + "Version": "2.3.4", + "Source": "Repository", + "Type": "Package", + "Title": "Fast and Versatile Argument Checks", + "Description": "Tests and assertions to perform frequent argument checks. A substantial part of the package was written in C to minimize any worries about execution time overhead.", + "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Bernd\", \"Bischl\", NULL, \"bernd_bischl@gmx.net\", role = \"ctb\"), person(\"Dénes\", \"Tóth\", NULL, \"toth.denes@kogentum.hu\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4262-3217\")) )", + "URL": "https://mllg.github.io/checkmate/, https://github.com/mllg/checkmate", + "URLNote": "https://github.com/mllg/checkmate", + "BugReports": "https://github.com/mllg/checkmate/issues", + "NeedsCompilation": "yes", + "ByteCompile": "yes", + "Encoding": "UTF-8", + "Depends": [ + "R (>= 3.0.0)" + ], + "Imports": [ + "backports (>= 1.1.0)", + "utils" + ], + "Suggests": [ + "R6", + "fastmatch", + "data.table (>= 1.9.8)", + "devtools", + "ggplot2", + "knitr", + "magrittr", + "microbenchmark", + "rmarkdown", + "testthat (>= 3.0.4)", + "tinytest (>= 1.1.0)", + "tibble" + ], + "License": "BSD_3_clause + file LICENSE", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.3.3", + "Collate": "'AssertCollection.R' 'allMissing.R' 'anyInfinite.R' 'anyMissing.R' 'anyNaN.R' 'asInteger.R' 'assert.R' 'helper.R' 'makeExpectation.R' 'makeTest.R' 'makeAssertion.R' 'checkAccess.R' 'checkArray.R' 'checkAtomic.R' 'checkAtomicVector.R' 'checkCharacter.R' 'checkChoice.R' 'checkClass.R' 'checkComplex.R' 'checkCount.R' 'checkDataFrame.R' 'checkDataTable.R' 'checkDate.R' 'checkDirectoryExists.R' 'checkDisjunct.R' 'checkDouble.R' 'checkEnvironment.R' 'checkFALSE.R' 'checkFactor.R' 'checkFileExists.R' 'checkFlag.R' 'checkFormula.R' 'checkFunction.R' 'checkInt.R' 'checkInteger.R' 'checkIntegerish.R' 'checkList.R' 'checkLogical.R' 'checkMatrix.R' 'checkMultiClass.R' 'checkNamed.R' 'checkNames.R' 'checkNull.R' 'checkNumber.R' 'checkNumeric.R' 'checkOS.R' 'checkPOSIXct.R' 'checkPathForOutput.R' 'checkPermutation.R' 'checkR6.R' 'checkRaw.R' 'checkScalar.R' 'checkScalarNA.R' 'checkSetEqual.R' 'checkString.R' 'checkSubset.R' 'checkTRUE.R' 'checkTibble.R' 'checkVector.R' 'coalesce.R' 'isIntegerish.R' 'matchArg.R' 'qassert.R' 'qassertr.R' 'vname.R' 'wfwl.R' 'zzz.R'", + "Author": "Michel Lang [cre, aut] (ORCID: ), Bernd Bischl [ctb], Dénes Tóth [ctb] (ORCID: )", + "Maintainer": "Michel Lang ", + "Repository": "CRAN" + }, + "cli": { + "Package": "cli", + "Version": "3.6.6", + "Source": "Repository", + "Title": "Helpers for Developing Command Line Interfaces", + "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI colors and text styles as well.", + "License": "MIT + file LICENSE", + "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", + "BugReports": "https://github.com/r-lib/cli/issues", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "callr", + "covr", + "crayon", + "digest", + "glue (>= 1.6.0)", + "grDevices", + "htmltools", + "htmlwidgets", + "knitr", + "methods", + "processx", + "ps (>= 1.3.4.9000)", + "rlang (>= 1.0.2.9003)", + "rmarkdown", + "rprojroot", + "rstudioapi", + "testthat (>= 3.2.0)", + "tibble", + "whoami", + "withr" + ], + "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-25", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "NeedsCompilation": "yes", + "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "clipr": { + "Package": "clipr", + "Version": "0.8.1", + "Source": "Repository", + "Type": "Package", + "Title": "Read and Write from the System Clipboard", + "Authors@R": "c( person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4387-3384\")), person(\"Louis\", \"Maddox\", role = \"ctb\"), person(\"Steve\", \"Simpson\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\") )", + "Description": "Simple utility functions to read from and write to the Windows, OS X, and X11 clipboards.", + "License": "GPL-3", + "URL": "https://github.com/mdlincoln/clipr, http://matthewlincoln.net/clipr/", + "BugReports": "https://github.com/mdlincoln/clipr/issues", + "Imports": [ + "utils" + ], + "Suggests": [ + "covr", + "knitr", + "rmarkdown", + "rstudioapi (>= 0.5)", + "testthat (>= 2.0.0)" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "SystemRequirements": "xclip (https://github.com/astrand/xclip) or xsel (http://www.vergenet.net/~conrad/software/xsel/) for accessing the X11 clipboard, or wl-clipboard (https://github.com/bugaevc/wl-clipboard) for systems using Wayland.", + "NeedsCompilation": "no", + "Author": "Matthew Lincoln [aut, cre] (ORCID: ), Louis Maddox [ctb], Steve Simpson [ctb], Jennifer Bryan [ctb]", + "Maintainer": "Matthew Lincoln ", + "Repository": "CRAN" + }, + "clock": { + "Package": "clock", + "Version": "0.7.4", + "Source": "Repository", + "Title": "Date-Time Types and Tools", + "Authors@R": "c( person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides a comprehensive library for date-time manipulations using a new family of orthogonal date-time classes (durations, time points, zoned-times, and calendars) that partition responsibilities so that the complexities of time zones are only considered when they are really needed. Capabilities include: date-time parsing, formatting, arithmetic, extraction and updating of components, and rounding.", + "License": "MIT + file LICENSE", + "URL": "https://clock.r-lib.org, https://github.com/r-lib/clock", + "BugReports": "https://github.com/r-lib/clock/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "cli (>= 3.6.4)", + "lifecycle (>= 1.0.4)", + "rlang (>= 1.1.5)", + "tzdb (>= 0.5.0)", + "vctrs (>= 0.6.5)" + ], + "Suggests": [ + "covr", + "knitr", + "magrittr", + "pillar", + "rmarkdown", + "slider (>= 0.3.2)", + "testthat (>= 3.0.0)", + "withr" + ], + "LinkingTo": [ + "cpp11 (>= 0.5.2)", + "tzdb (>= 0.5.0)" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "lubridate, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Davis Vaughan [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "commonmark": { + "Package": "commonmark", + "Version": "2.0.0", + "Source": "Repository", + "Type": "Package", + "Title": "High Performance CommonMark and Github Markdown Rendering in R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", + "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.", + "License": "BSD_2_clause + file LICENSE", + "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark", + "BugReports": "https://github.com/r-lib/commonmark/issues", + "Suggests": [ + "curl", + "testthat", + "xml2" + ], + "RoxygenNote": "7.3.2", + "Language": "en-US", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), John MacFarlane [cph] (Author of cmark)", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.5.5", + "Source": "Repository", + "Title": "A C++11 Interface for R's C Interface", + "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' vectors.", + "License": "MIT + file LICENSE", + "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", + "BugReports": "https://github.com/r-lib/cpp11/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Suggests": [ + "bench", + "brio", + "callr", + "cli", + "covr", + "decor", + "desc", + "ggplot2", + "glue", + "knitr", + "lobstr", + "mockery", + "progress", + "rmarkdown", + "scales", + "Rcpp", + "testthat (>= 3.2.0)", + "tibble", + "utils", + "vctrs", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Davis Vaughan [aut, cre] (ORCID: ), Jim Hester [aut] (ORCID: ), Romain François [aut] (ORCID: ), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "crayon": { + "Package": "crayon", + "Version": "1.5.3", + "Source": "Repository", + "Title": "Colored Terminal Output", + "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Brodie\", \"Gaslam\", , \"brodie.gaslam@yahoo.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "The crayon package is now superseded. Please use the 'cli' package for new projects. Colored terminal output on terminals that support 'ANSI' color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI' color support is automatically detected. Colors and highlighting can be combined and nested. New styles can also be created easily. This package was inspired by the 'chalk' 'JavaScript' project.", + "License": "MIT + file LICENSE", + "URL": "https://r-lib.github.io/crayon/, https://github.com/r-lib/crayon", + "BugReports": "https://github.com/r-lib/crayon/issues", + "Imports": [ + "grDevices", + "methods", + "utils" + ], + "Suggests": [ + "mockery", + "rstudioapi", + "testthat", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R' 'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.R' 'ansi-palette.R' 'combine.R' 'string.R' 'utils.R' 'crayon-package.R' 'disposable.R' 'enc-utils.R' 'has_ansi.R' 'has_color.R' 'link.R' 'styles.R' 'machinery.R' 'parts.R' 'print.R' 'style-var.R' 'show.R' 'string_operations.R'", + "NeedsCompilation": "no", + "Author": "Gábor Csárdi [aut, cre], Brodie Gaslam [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.2", + "Source": "Repository", + "Type": "Package", + "Title": "Inter-Widget Interactivity for HTML Widgets", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(, \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )", + "Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk", + "BugReports": "https://github.com/rstudio/crosstalk/issues", + "Imports": [ + "htmltools (>= 0.3.6)", + "jsonlite", + "lazyeval", + "R6" + ], + "Suggests": [ + "bslib", + "ggplot2", + "sass", + "shiny", + "testthat (>= 2.1.0)" + ], + "Config/Needs/website": "jcheng5/d3scatter, DT, leaflet, rmarkdown", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "curl": { + "Package": "curl", + "Version": "7.1.0", + "Source": "Repository", + "Type": "Package", + "Title": "A Modern and Flexible Web Client for R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", + "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", + "License": "MIT + file LICENSE", + "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", + "URL": "https://jeroen.r-universe.dev/curl", + "BugReports": "https://github.com/jeroen/curl/issues", + "Suggests": [ + "spelling", + "testthat (>= 1.0.0)", + "knitr", + "jsonlite", + "later", + "rmarkdown", + "httpuv (>= 1.4.4)", + "webutils" + ], + "VignetteBuilder": "knitr", + "Depends": [ + "R (>= 3.0.0)" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "data.table": { + "Package": "data.table", + "Version": "1.18.4", + "Source": "Repository", + "Title": "Extension of `data.frame`", + "Depends": [ + "R (>= 3.4.0)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "bit64 (>= 4.0.0)", + "bit (>= 4.0.4)", + "R.utils (>= 2.13.0)", + "xts", + "zoo (>= 1.8-1)", + "yaml", + "knitr", + "markdown" + ], + "Description": "Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns, friendly and fast character-separated-value read/write. Offers a natural and flexible syntax, for faster development.", + "License": "MPL-2.0 | file LICENSE", + "URL": "https://r-datatable.com, https://Rdatatable.gitlab.io/data.table, https://github.com/Rdatatable/data.table", + "BugReports": "https://github.com/Rdatatable/data.table/issues", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "ByteCompile": "TRUE", + "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\"), person(\"Tarun\", \"Thammisetty\", role=\"ctb\") )", + "NeedsCompilation": "yes", + "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb], Tarun Thammisetty [ctb]", + "Maintainer": "Tyson Barrett ", + "Repository": "CRAN" + }, + "dbplyr": { + "Package": "dbplyr", + "Version": "2.5.2", + "Source": "Repository", + "Type": "Package", + "Title": "A 'dplyr' Back End for Databases", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Edgar\", \"Ruiz\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A 'dplyr' back end for databases that allows you to work with remote database tables as if they are in-memory data frames. Basic features works with any database that has a 'DBI' back end; more advanced features require 'SQL' translation to be provided by the package author.", + "License": "MIT + file LICENSE", + "URL": "https://dbplyr.tidyverse.org/, https://github.com/tidyverse/dbplyr", + "BugReports": "https://github.com/tidyverse/dbplyr/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "blob (>= 1.2.0)", + "cli (>= 3.6.1)", + "DBI (>= 1.1.3)", + "dplyr (>= 1.1.2)", + "glue (>= 1.6.2)", + "lifecycle (>= 1.0.3)", + "magrittr", + "methods", + "pillar (>= 1.9.0)", + "purrr (>= 1.0.1)", + "R6 (>= 2.2.2)", + "rlang (>= 1.1.1)", + "tibble (>= 3.2.1)", + "tidyr (>= 1.3.0)", + "tidyselect (>= 1.2.1)", + "utils", + "vctrs (>= 0.6.3)", + "withr (>= 2.5.0)" + ], + "Suggests": [ + "bit64", + "covr", + "knitr", + "Lahman", + "nycflights13", + "odbc (>= 1.4.2)", + "RMariaDB (>= 1.2.2)", + "rmarkdown", + "RPostgres (>= 1.4.5)", + "RPostgreSQL", + "RSQLite (>= 2.3.8)", + "testthat (>= 3.1.10)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "TRUE", + "Encoding": "UTF-8", + "Language": "en-gb", + "RoxygenNote": "7.3.3", + "Collate": "'db-sql.R' 'utils-check.R' 'import-standalone-types-check.R' 'import-standalone-obj-type.R' 'utils.R' 'sql.R' 'escape.R' 'translate-sql-cut.R' 'translate-sql-quantile.R' 'translate-sql-string.R' 'translate-sql-paste.R' 'translate-sql-helpers.R' 'translate-sql-window.R' 'translate-sql-conditional.R' 'backend-.R' 'backend-access.R' 'backend-hana.R' 'backend-hive.R' 'backend-impala.R' 'verb-copy-to.R' 'backend-mssql.R' 'backend-mysql.R' 'backend-odbc.R' 'backend-oracle.R' 'backend-postgres.R' 'backend-postgres-old.R' 'backend-redshift.R' 'backend-snowflake.R' 'backend-spark-sql.R' 'backend-sqlite.R' 'backend-teradata.R' 'build-sql.R' 'data-cache.R' 'data-lahman.R' 'data-nycflights13.R' 'db-escape.R' 'db-io.R' 'db.R' 'dbplyr.R' 'explain.R' 'ident.R' 'import-standalone-s3-register.R' 'join-by-compat.R' 'join-cols-compat.R' 'lazy-join-query.R' 'lazy-ops.R' 'lazy-query.R' 'lazy-select-query.R' 'lazy-set-op-query.R' 'memdb.R' 'optimise-utils.R' 'pillar.R' 'progress.R' 'sql-build.R' 'query-join.R' 'query-select.R' 'query-semi-join.R' 'query-set-op.R' 'query.R' 'reexport.R' 'remote.R' 'rows.R' 'schema.R' 'simulate.R' 'sql-clause.R' 'sql-expr.R' 'src-sql.R' 'src_dbi.R' 'table-name.R' 'tbl-lazy.R' 'tbl-sql.R' 'test-frame.R' 'testthat.R' 'tidyeval-across.R' 'tidyeval.R' 'translate-sql.R' 'utils-format.R' 'verb-arrange.R' 'verb-compute.R' 'verb-count.R' 'verb-distinct.R' 'verb-do-query.R' 'verb-do.R' 'verb-expand.R' 'verb-fill.R' 'verb-filter.R' 'verb-group_by.R' 'verb-head.R' 'verb-joins.R' 'verb-mutate.R' 'verb-pivot-longer.R' 'verb-pivot-wider.R' 'verb-pull.R' 'verb-select.R' 'verb-set-ops.R' 'verb-slice.R' 'verb-summarise.R' 'verb-uncount.R' 'verb-window.R' 'zzz.R'", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Maximilian Girlich [aut], Edgar Ruiz [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "digest": { + "Package": "digest", + "Version": "0.6.39", + "Source": "Repository", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\", comment = c(ORCID = \"0000-0002-8059-9767\")), person(\"Jarek\", \"Tuszynski\", role=\"ctb\"), person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")), person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")), person(\"Mario\", \"Frasca\", role=\"ctb\"), person(\"Bryan\", \"Lewis\", role=\"ctb\"), person(\"Murray\", \"Stokely\", role=\"ctb\"), person(\"Hannes\", \"Muehleisen\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8552-0029\")), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")), person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")), person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Viliam\", \"Simko\", role=\"ctb\"), person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")), person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")), person(\"Matthew\", \"de Queljoe\", role=\"ctb\"), person(\"Dmitry\", \"Selivanov\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0492-6647\")), person(\"Ion\", \"Suruceanu\", role=\"ctb\", comment = c(ORCID = \"0009-0005-6446-4909\")), person(\"Bill\", \"Denney\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\", comment = c(ORCID = \"0009-0008-8480-1329\")), person(\"Sergey\", \"Fedorov\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5970-7233\")), person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")), person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")), person(\"Kevin\", \"Tappe\", role=\"ctb\"), person(\"Harris\", \"McGehee\", role=\"ctb\"), person(\"Tim\", \"Mastny\", role=\"ctb\"), person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")), person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")), person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")), person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")), person(\"Sebastian\", \"Campbell\", role=\"ctb\", comment = c(ORCID = \"0009-0000-5948-4503\")), person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")), person(\"Kevin\", \"Ushey\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Carl\", \"Pearson\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0701-7860\")))", + "Date": "2025-11-19", + "Title": "Create Compact Hash Digests of R Objects", + "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as 'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", + "URL": "https://github.com/eddelbuettel/digest, https://eddelbuettel.github.io/digest/, https://dirk.eddelbuettel.com/code/digest.html", + "BugReports": "https://github.com/eddelbuettel/digest/issues", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "utils" + ], + "License": "GPL (>= 2)", + "Suggests": [ + "tinytest", + "simplermarkdown", + "rbenchmark" + ], + "VignetteBuilder": "simplermarkdown", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Antoine Lucas [ctb] (ORCID: ), Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (ORCID: ), Simon Urbanek [ctb] (ORCID: ), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb] (ORCID: ), Duncan Murdoch [ctb], Jim Hester [ctb] (ORCID: ), Wush Wu [ctb] (ORCID: ), Qiang Kou [ctb] (ORCID: ), Thierry Onkelinx [ctb] (ORCID: ), Michel Lang [ctb] (ORCID: ), Viliam Simko [ctb], Kurt Hornik [ctb] (ORCID: ), Radford Neal [ctb] (ORCID: ), Kendon Bell [ctb] (ORCID: ), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb] (ORCID: ), Ion Suruceanu [ctb] (ORCID: ), Bill Denney [ctb] (ORCID: ), Dirk Schumacher [ctb], András Svraka [ctb] (ORCID: ), Sergey Fedorov [ctb] (ORCID: ), Will Landau [ctb] (ORCID: ), Floris Vanderhaeghe [ctb] (ORCID: ), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (ORCID: ), Mark van der Loo [ctb] (ORCID: ), Chris Muir [ctb] (ORCID: ), Moritz Beller [ctb] (ORCID: ), Sebastian Campbell [ctb] (ORCID: ), Winston Chang [ctb] (ORCID: ), Dean Attali [ctb] (ORCID: ), Michael Chirico [ctb] (ORCID: ), Kevin Ushey [ctb] (ORCID: ), Carl Pearson [ctb] (ORCID: )", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.2.1", + "Source": "Repository", + "Type": "Package", + "Title": "A Grammar of Data Manipulation", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", + "License": "MIT + file LICENSE", + "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", + "BugReports": "https://github.com/tidyverse/dplyr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli (>= 3.6.2)", + "generics", + "glue (>= 1.3.2)", + "lifecycle (>= 1.0.5)", + "magrittr (>= 1.5)", + "methods", + "pillar (>= 1.9.0)", + "R6", + "rlang (>= 1.1.7)", + "tibble (>= 3.2.0)", + "tidyselect (>= 1.2.0)", + "utils", + "vctrs (>= 0.7.1)" + ], + "Suggests": [ + "broom", + "covr", + "DBI", + "dbplyr (>= 2.2.1)", + "ggplot2", + "knitr", + "Lahman", + "lobstr", + "nycflights13", + "purrr", + "rmarkdown", + "RSQLite", + "stringi (>= 1.7.6)", + "testthat (>= 3.1.5)", + "tidyr (>= 1.3.0)", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Romain François [aut] (ORCID: ), Lionel Henry [aut], Kirill Müller [aut] (ORCID: ), Davis Vaughan [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "evaluate": { + "Package": "evaluate", + "Version": "1.0.5", + "Source": "Repository", + "Type": "Package", + "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", + "License": "MIT + file LICENSE", + "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", + "BugReports": "https://github.com/r-lib/evaluate/issues", + "Depends": [ + "R (>= 3.6.0)" + ], + "Suggests": [ + "callr", + "covr", + "ggplot2 (>= 3.3.6)", + "lattice", + "methods", + "pkgload", + "ragg (>= 1.4.0)", + "rlang (>= 1.1.5)", + "knitr", + "testthat (>= 3.0.0)", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (ORCID: ), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "farver": { + "Package": "farver", + "Version": "2.1.2", + "Source": "Repository", + "Type": "Package", + "Title": "High Performance Colour Space Manipulation", + "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.", + "License": "MIT + file LICENSE", + "URL": "https://farver.data-imaginist.com, https://github.com/thomasp85/farver", + "BugReports": "https://github.com/thomasp85/farver/issues", + "Suggests": [ + "covr", + "testthat (>= 3.0.0)" + ], + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "NeedsCompilation": "yes", + "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Fast Data Structures", + "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )", + "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak issue by implementing the map using data structures in C++.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Suggests": [ + "testthat (>= 2.1.1)" + ], + "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", + "BugReports": "https://github.com/r-lib/fastmap/issues", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "flextable": { + "Package": "flextable", + "Version": "0.9.12", + "Source": "Repository", + "Type": "Package", + "Title": "Functions for Tabular Reporting", + "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"ArData\", role = \"cph\"), person(\"Clementine\", \"Jager\", role = \"ctb\"), person(\"Eli\", \"Daniels\", role = \"ctb\"), person(\"Panagiotis\", \"Skintzos\", , \"panagiotis.skintzos@ardata.fr\", role = \"aut\"), person(\"Quentin\", \"Fazilleau\", role = \"ctb\"), person(\"Maxim\", \"Nazarov\", role = \"ctb\"), person(\"Titouan\", \"Robert\", role = \"ctb\"), person(\"Michael\", \"Barrowman\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\"), person(\"Paul\", \"Julian\", role = \"ctb\"), person(\"Sean\", \"Browning\", role = \"ctb\"), person(\"Rémi\", \"Thériault\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4315-6788\")), person(\"Samuel\", \"Jobert\", role = \"ctb\"), person(\"Keith\", \"Newman\", role = \"ctb\") )", + "Description": "Use a grammar for creating and customizing pretty tables. The following formats are supported: 'HTML', 'PDF', 'RTF', 'Microsoft Word', 'Microsoft PowerPoint', R 'Grid Graphics' and 'patchwork'. 'R Markdown', 'Quarto' and the package 'officer' can be used to produce the result files. The syntax is the same for the user regardless of the type of output to be produced. A set of functions allows the creation, definition of cell arrangement, addition of headers or footers, formatting and definition of cell content with text and or images. The package also offers a set of high-level functions that allow tabular reporting of statistical models and the creation of complex cross tabulations.", + "License": "GPL-3", + "URL": "https://ardata-fr.github.io/flextable-book/, https://davidgohel.github.io/flextable/", + "BugReports": "https://github.com/davidgohel/flextable/issues", + "Imports": [ + "data.table (>= 1.13.0)", + "gdtools (>= 0.5.0)", + "graphics", + "grDevices", + "grid", + "htmltools", + "knitr", + "officer (>= 0.7.3)", + "ragg", + "rlang", + "rmarkdown (>= 2.0)", + "stats", + "utils", + "uuid (>= 0.1-4)", + "xml2" + ], + "Suggests": [ + "bookdown (>= 0.40)", + "broom", + "broom.mixed", + "formatters", + "chromote", + "cluster", + "commonmark", + "doconv (>= 0.3.0)", + "equatags", + "ggplot2", + "gtable", + "jsonlite", + "lme4", + "magick", + "mgcv", + "nlme", + "officedown", + "patchwork", + "pdftools", + "pkgdown (>= 2.0.0)", + "rtables", + "scales", + "svglite", + "tables (>= 0.9.17)", + "testthat (>= 3.0.0)", + "webshot2", + "withr", + "xtable" + ], + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "Config/roxygen2/version": "8.0.0", + "NeedsCompilation": "no", + "Author": "David Gohel [aut, cre], ArData [cph], Clementine Jager [ctb], Eli Daniels [ctb], Panagiotis Skintzos [aut], Quentin Fazilleau [ctb], Maxim Nazarov [ctb], Titouan Robert [ctb], Michael Barrowman [ctb], Atsushi Yasumoto [ctb], Paul Julian [ctb], Sean Browning [ctb], Rémi Thériault [ctb] (ORCID: ), Samuel Jobert [ctb], Keith Newman [ctb]", + "Maintainer": "David Gohel ", + "Repository": "CRAN" + }, + "fontBitstreamVera": { + "Package": "fontBitstreamVera", + "Version": "0.1.1", + "Source": "Repository", + "Title": "Fonts with 'Bitstream Vera Fonts' License", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel.hry@gmail.com\", c(\"cre\", \"aut\")), person(\"Bitstream\", role = \"cph\"))", + "Description": "Provides fonts licensed under the 'Bitstream Vera Fonts' license for the 'fontquiver' package.", + "Depends": [ + "R (>= 3.0.0)" + ], + "License": "file LICENCE", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "5.0.1", + "NeedsCompilation": "no", + "Author": "Lionel Henry [cre, aut], Bitstream [cph]", + "Maintainer": "Lionel Henry ", + "License_is_FOSS": "yes", + "Repository": "CRAN" + }, + "fontLiberation": { + "Package": "fontLiberation", + "Version": "0.1.0", + "Source": "Repository", + "Title": "Liberation Fonts", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", \"cre\"), person(\"Pravin Satpute\", role = \"aut\"), person(\"Steve Matteson\", role = \"aut\"), person(\"Red Hat, Inc\", role = \"cph\"), person(\"Google Corporation\", role = \"cph\"))", + "Description": "A placeholder for the Liberation fontset intended for the `fontquiver` package. This fontset covers the 12 combinations of families (sans, serif, mono) and faces (plain, bold, italic, bold italic) supported in R graphics devices.", + "Depends": [ + "R (>= 3.0)" + ], + "License": "file LICENSE", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "5.0.1", + "NeedsCompilation": "no", + "Author": "Lionel Henry [cre], Pravin Satpute [aut], Steve Matteson [aut], Red Hat, Inc [cph], Google Corporation [cph]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "License_is_FOSS": "yes" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.3", + "Source": "Repository", + "Type": "Package", + "Title": "Easily Work with 'Font Awesome' Icons", + "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.", + "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", + "BugReports": "https://github.com/rstudio/fontawesome/issues", + "Encoding": "UTF-8", + "ByteCompile": "true", + "RoxygenNote": "7.3.2", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "rlang (>= 1.0.6)", + "htmltools (>= 0.5.1.1)" + ], + "Suggests": [ + "covr", + "dplyr (>= 1.0.8)", + "gt (>= 0.9.0)", + "knitr (>= 1.31)", + "testthat (>= 3.0.0)", + "rsvg" + ], + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN" + }, + "fontquiver": { + "Package": "fontquiver", + "Version": "0.2.1", + "Source": "Repository", + "Title": "Set of Installed Fonts", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", c(\"cre\", \"aut\")), person(\"RStudio\", role = \"cph\"), person(\"George Douros\", role = \"cph\", comment = \"Symbola font\"))", + "Description": "Provides a set of fonts with permissive licences. This is useful when you want to avoid system fonts to make sure your outputs are reproducible.", + "Depends": [ + "R (>= 3.0.0)" + ], + "Imports": [ + "fontBitstreamVera (>= 0.1.0)", + "fontLiberation (>= 0.1.0)" + ], + "Suggests": [ + "testthat", + "htmltools" + ], + "License": "GPL-3 | file LICENSE", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "5.0.1", + "Collate": "'font-getters.R' 'fontset.R' 'fontset-bitstream-vera.R' 'fontset-dejavu.R' 'fontset-liberation.R' 'fontset-symbola.R' 'html-dependency.R' 'utils.R'", + "NeedsCompilation": "no", + "Author": "Lionel Henry [cre, aut], RStudio [cph], George Douros [cph] (Symbola font)", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "fs": { + "Package": "fs", + "Version": "2.1.0", + "Source": "Repository", + "Title": "Cross-Platform File System Operations Based on 'libuv'", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroenooms@gmail.com\", role = \"cre\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", + "License": "MIT + file LICENSE", + "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", + "BugReports": "https://github.com/r-lib/fs/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "covr", + "crayon", + "knitr", + "pillar (>= 1.0.0)", + "rmarkdown", + "spelling", + "testthat (>= 3.0.0)", + "tibble (>= 1.1.0)", + "vctrs (>= 0.3.0)", + "withr" + ], + "VignetteBuilder": "knitr", + "SystemRequirements": "libuv: libuv-devel (rpm) or libuv1-dev (deb). Alternatively to build the vendored libuv 'cmake' is required. GNU make.", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Copyright": "file COPYRIGHTS", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "gdtools": { + "Package": "gdtools", + "Version": "0.5.1", + "Source": "Repository", + "Title": "Font Metrics and Font Management Utilities for R Graphics", + "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroen@berkeley.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Yixuan\", \"Qiu\", role = \"ctb\"), person(\"R Core Team\", role = \"cph\", comment = \"Cairo code from X11 device\"), person(\"ArData\", role = \"cph\"), person(\"RStudio\", role = \"cph\") )", + "Description": "Compute text metrics (width, ascent, descent) using 'Cairo' and 'FreeType', independently of the active graphic device. Font lookup is delegated to 'systemfonts'. Additional utilities let users register 'Google Fonts' or bundled 'Liberation' fonts, check font availability, and assemble 'htmlDependency' objects so that fonts are correctly embedded in 'Shiny' applications, 'R Markdown' documents, and 'htmlwidgets' outputs such as 'ggiraph'.", + "License": "GPL-3 | file LICENSE", + "URL": "https://davidgohel.github.io/gdtools/", + "BugReports": "https://github.com/davidgohel/gdtools/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "fontquiver (>= 0.2.0)", + "htmltools", + "Rcpp (>= 0.12.12)", + "systemfonts (>= 1.3.1)", + "tools" + ], + "Suggests": [ + "curl", + "gfonts", + "methods", + "testthat" + ], + "LinkingTo": [ + "Rcpp" + ], + "Encoding": "UTF-8", + "SystemRequirements": "cairo, freetype2, fontconfig", + "Config/roxygen2/version": "8.0.0", + "NeedsCompilation": "yes", + "Author": "David Gohel [aut, cre], Hadley Wickham [aut], Lionel Henry [aut], Jeroen Ooms [aut] (ORCID: ), Yixuan Qiu [ctb], R Core Team [cph] (Cairo code from X11 device), ArData [cph], RStudio [cph]", + "Maintainer": "David Gohel ", + "Repository": "CRAN" + }, + "generics": { + "Package": "generics", + "Version": "0.1.4", + "Source": "Repository", + "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", + "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", + "License": "MIT + file LICENSE", + "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", + "BugReports": "https://github.com/r-lib/generics/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "covr", + "pkgload", + "testthat (>= 3.0.0)", + "tibble", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Max Kuhn [aut], Davis Vaughan [aut], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "ggplot2": { + "Package": "ggplot2", + "Version": "4.0.3", + "Source": "Repository", + "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Winston\", \"Chang\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Kohske\", \"Takahashi\", role = \"aut\"), person(\"Claus\", \"Wilke\", role = \"aut\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(\"Kara\", \"Woo\", role = \"aut\", comment = c(ORCID = \"0000-0002-5125-4188\")), person(\"Hiroaki\", \"Yutani\", role = \"aut\", comment = c(ORCID = \"0000-0002-3385-7233\")), person(\"Dewey\", \"Dunnington\", role = \"aut\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Teun\", \"van den Brand\", role = \"aut\", comment = c(ORCID = \"0000-0002-9335-7468\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A system for 'declaratively' creating graphics, based on \"The Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details.", + "License": "MIT + file LICENSE", + "URL": "https://ggplot2.tidyverse.org, https://github.com/tidyverse/ggplot2", + "BugReports": "https://github.com/tidyverse/ggplot2/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli", + "grDevices", + "grid", + "gtable (>= 0.3.6)", + "isoband", + "lifecycle (> 1.0.1)", + "rlang (>= 1.1.0)", + "S7", + "scales (>= 1.4.0)", + "stats", + "vctrs (>= 0.6.0)", + "withr (>= 2.5.0)" + ], + "Suggests": [ + "broom", + "covr", + "dplyr", + "ggplot2movies", + "hexbin", + "Hmisc", + "hms", + "knitr", + "mapproj", + "maps", + "MASS", + "mgcv", + "multcomp", + "munsell", + "nlme", + "profvis", + "quantreg", + "quarto", + "ragg (>= 1.2.6)", + "RColorBrewer", + "roxygen2", + "rpart", + "sf (>= 0.7-3)", + "svglite (>= 2.1.2)", + "testthat (>= 3.1.5)", + "tibble", + "vdiffr (>= 1.0.6)", + "xml2" + ], + "Enhances": [ + "sp" + ], + "VignetteBuilder": "quarto", + "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R' 'aes-colour-fill-alpha.R' 'aes-evaluation.R' 'aes-group-order.R' 'aes-linetype-size-shape.R' 'aes-position.R' 'all-classes.R' 'compat-plyr.R' 'utilities.R' 'aes.R' 'annotation-borders.R' 'utilities-checks.R' 'legend-draw.R' 'geom-.R' 'annotation-custom.R' 'annotation-logticks.R' 'scale-type.R' 'layer.R' 'make-constructor.R' 'geom-polygon.R' 'geom-map.R' 'annotation-map.R' 'geom-raster.R' 'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R' 'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R' 'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R' 'coord-map.R' 'coord-munch.R' 'coord-polar.R' 'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R' 'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R' 'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-map.R' 'fortify-models.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-tile.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-point.R' 'geom-count.R' 'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R' 'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R' 'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R' 'geom-label.R' 'geom-linerange.R' 'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R' 'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R' 'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R' 'properties.R' 'margins.R' 'theme-elements.R' 'guide-.R' 'guide-axis.R' 'guide-axis-logticks.R' 'guide-axis-stack.R' 'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R' 'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R' 'guide-none.R' 'guide-old.R' 'guides-.R' 'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'labeller.R' 'labels.R' 'layer-sf.R' 'layout.R' 'limits.R' 'performance.R' 'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R' 'position-.R' 'position-collide.R' 'position-dodge.R' 'position-dodge2.R' 'position-identity.R' 'position-jitter.R' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R' 'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R' 'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R' 'scale-colour.R' 'scale-continuous.R' 'scale-date.R' 'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R' 'scale-grey.R' 'scale-hue.R' 'scale-identity.R' 'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R' 'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R' 'stat-bin.R' 'stat-summary-2d.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R' 'stat-boxplot.R' 'stat-connect.R' 'stat-contour.R' 'stat-count.R' 'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R' 'stat-ellipse.R' 'stat-function.R' 'stat-identity.R' 'stat-manual.R' 'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R' 'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R' 'stat-smooth.R' 'stat-sum.R' 'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R' 'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R' 'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R' 'theme-sub.R' 'utilities-break.R' 'utilities-grid.R' 'utilities-help.R' 'utilities-patterns.R' 'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R' 'zzz.R'", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Lionel Henry [aut], Thomas Lin Pedersen [aut, cre] (ORCID: ), Kohske Takahashi [aut], Claus Wilke [aut] (ORCID: ), Kara Woo [aut] (ORCID: ), Hiroaki Yutani [aut] (ORCID: ), Dewey Dunnington [aut] (ORCID: ), Teun van den Brand [aut] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "glue": { + "Package": "glue", + "Version": "1.8.1", + "Source": "Repository", + "Title": "Interpreted String Literals", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", + "License": "MIT + file LICENSE", + "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", + "BugReports": "https://github.com/tidyverse/glue/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "crayon", + "DBI (>= 1.2.0)", + "dplyr", + "knitr", + "rlang", + "rmarkdown", + "RSQLite", + "testthat (>= 3.2.0)", + "vctrs (>= 0.3.0)", + "waldo (>= 0.5.3)", + "withr" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2026-04-16", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Jim Hester [aut] (ORCID: ), Jennifer Bryan [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN" + }, + "gt": { + "Package": "gt", + "Version": "1.3.0", + "Source": "Repository", + "Type": "Package", + "Title": "Easily Create Presentation-Ready Display Tables", + "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Shannon\", \"Haughton\", , \"shannon.l.haughton@gsk.com\", role = \"aut\"), person(\"Ellis\", \"Hughes\", , \"ellis.h.hughes@gsk.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-0637-4436\")), person(\"Alexandra\", \"Lauer\", , \"alexandralauer1@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4191-6301\")), person(\"Romain\", \"François\", , \"romain@tada.science\", role = \"aut\"), person(\"JooYoung\", \"Seo\", , \"jseo1005@illinois.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Ken\", \"Brevoort\", , \"ken@brevoort.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4001-8358\")), person(\"Olivier\", \"Roy\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Build display tables from tabular data with an easy-to-use set of functions. With its progressive approach, we can construct display tables with a cohesive set of table parts. Table values can be formatted using any of the included formatting functions. Footnotes and cell styles can be precisely added through a location targeting system. The way in which 'gt' handles things for you means that you don't often have to worry about the fine details.", + "License": "MIT + file LICENSE", + "URL": "https://gt.rstudio.com, https://github.com/rstudio/gt", + "BugReports": "https://github.com/rstudio/gt/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "base64enc (>= 0.1-3)", + "bigD (>= 0.2)", + "bitops (>= 1.0-7)", + "cli (>= 3.6.3)", + "commonmark (>= 1.9.1)", + "dplyr (>= 1.1.4)", + "fs (>= 1.6.4)", + "glue (>= 1.8.0)", + "htmltools (>= 0.5.8.1)", + "htmlwidgets (>= 1.6.4)", + "juicyjuice (>= 0.1.0)", + "magrittr (>= 2.0.3)", + "markdown (>= 1.13)", + "reactable (>= 0.4.4)", + "rlang (>= 1.1.4)", + "sass (>= 0.4.9)", + "scales (>= 1.3.0)", + "tidyselect (>= 1.2.1)", + "vctrs", + "xml2 (>= 1.3.6)" + ], + "Suggests": [ + "bit64", + "farver", + "fontawesome (>= 0.5.2)", + "ggplot2", + "grid", + "gtable (>= 0.3.6)", + "katex (>= 1.4.1)", + "knitr", + "lubridate", + "magick", + "paletteer", + "RColorBrewer", + "rmarkdown (>= 2.20)", + "rsvg", + "rvest", + "shiny (>= 1.9.1)", + "testthat (>= 3.1.9)", + "tidyr (>= 1.0.0)", + "webshot2 (>= 0.1.0)", + "withr" + ], + "Config/Needs/coverage": "officer", + "Config/Needs/website": "quarto", + "ByteCompile": "true", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Richard Iannone [aut, cre] (ORCID: ), Joe Cheng [aut], Barret Schloerke [aut] (ORCID: ), Shannon Haughton [aut], Ellis Hughes [aut] (ORCID: ), Alexandra Lauer [aut] (ORCID: ), Romain François [aut], JooYoung Seo [aut] (ORCID: ), Ken Brevoort [aut] (ORCID: ), Olivier Roy [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN" + }, + "gtable": { + "Package": "gtable", + "Version": "0.3.6", + "Source": "Repository", + "Title": "Arrange 'Grobs' in Tables", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a grid along with a list of grobs and their placement in the grid. Further the package makes it easy to manipulate and combine 'gtable' objects so that complex compositions can be built up sequentially.", + "License": "MIT + file LICENSE", + "URL": "https://gtable.r-lib.org, https://github.com/r-lib/gtable", + "BugReports": "https://github.com/r-lib/gtable/issues", + "Depends": [ + "R (>= 4.0)" + ], + "Imports": [ + "cli", + "glue", + "grid", + "lifecycle", + "rlang (>= 1.1.0)", + "stats" + ], + "Suggests": [ + "covr", + "ggplot2", + "knitr", + "profvis", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2024-10-25", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "highr": { + "Package": "highr", + "Version": "0.12", + "Source": "Repository", + "Type": "Package", + "Title": "Syntax Highlighting for R Source Code", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )", + "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package ().", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "xfun (>= 0.18)" + ], + "Suggests": [ + "knitr", + "markdown", + "testit" + ], + "License": "GPL", + "URL": "https://github.com/yihui/highr", + "BugReports": "https://github.com/yihui/highr/issues", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (ORCID: ), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "hms": { + "Package": "hms", + "Version": "1.1.4", + "Source": "Repository", + "Title": "Pretty Time of Day", + "Date": "2025-10-11", + "Authors@R": "c( person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\"), person(\"Posit Software, PBC\", role = \"fnd\", comment = c(ROR = \"03wc8by49\")) )", + "Description": "Implements an S3 class for storing and formatting time-of-day values, based on the 'difftime' class.", + "License": "MIT + file LICENSE", + "URL": "https://hms.tidyverse.org/, https://github.com/tidyverse/hms", + "BugReports": "https://github.com/tidyverse/hms/issues", + "Imports": [ + "cli", + "lifecycle", + "methods", + "pkgconfig", + "rlang (>= 1.0.2)", + "vctrs (>= 0.3.8)" + ], + "Suggests": [ + "crayon", + "lubridate", + "pillar (>= 1.1.0)", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "NeedsCompilation": "no", + "Author": "Kirill Müller [aut, cre] (ORCID: ), R Consortium [fnd], Posit Software, PBC [fnd] (ROR: )", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.9", + "Source": "Repository", + "Type": "Package", + "Title": "Tools for HTML", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools for HTML generation and output.", + "License": "GPL (>= 2)", + "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", + "BugReports": "https://github.com/rstudio/htmltools/issues", + "Depends": [ + "R (>= 2.14.1)" + ], + "Imports": [ + "base64enc", + "digest", + "fastmap (>= 1.1.0)", + "grDevices", + "rlang (>= 1.0.0)", + "utils" + ], + "Suggests": [ + "Cairo", + "markdown", + "ragg", + "shiny", + "testthat", + "withr" + ], + "Enhances": [ + "knitr" + ], + "Config/Needs/check": "knitr", + "Config/Needs/website": "rstudio/quillt, bench", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.4", + "Source": "Repository", + "Type": "Package", + "Title": "HTML Widgets for R", + "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/ramnathv/htmlwidgets", + "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", + "Imports": [ + "grDevices", + "htmltools (>= 0.5.7)", + "jsonlite (>= 0.9.16)", + "knitr (>= 1.8)", + "rmarkdown", + "yaml" + ], + "Suggests": [ + "testthat" + ], + "Enhances": [ + "shiny (>= 1.1)" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.17", + "Source": "Repository", + "Type": "Package", + "Title": "HTTP and WebSocket Server Library", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )", + "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http-parser license information.)", + "License": "GPL (>= 2) | file LICENSE", + "URL": "https://rstudio.github.io/httpuv/, https://github.com/rstudio/httpuv", + "BugReports": "https://github.com/rstudio/httpuv/issues", + "Depends": [ + "R (>= 2.15.1)" + ], + "Imports": [ + "later (>= 0.8.0)", + "promises", + "R6", + "Rcpp (>= 1.0.7)", + "utils" + ], + "Suggests": [ + "callr", + "curl", + "jsonlite", + "testthat (>= 3.0.0)", + "websocket" + ], + "LinkingTo": [ + "later", + "Rcpp" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-07-01", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "GNU make, zlib", + "Collate": "'RcppExports.R' 'httpuv-package.R' 'httpuv.R' 'random_port.R' 'server.R' 'staticServer.R' 'static_paths.R' 'utils.R'", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC [cph, fnd] (ROR: ), Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "httr": { + "Package": "httr", + "Version": "1.4.8", + "Source": "Repository", + "Title": "Tools for Working with URLs and HTTP", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", + "License": "MIT + file LICENSE", + "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", + "BugReports": "https://github.com/r-lib/httr/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "curl (>= 5.1.0)", + "jsonlite", + "mime", + "openssl (>= 0.8)", + "R6" + ], + "Suggests": [ + "covr", + "httpuv", + "jpeg", + "knitr", + "png", + "readr", + "rmarkdown", + "testthat (>= 0.8.0)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "isoband": { + "Package": "isoband", + "Version": "0.3.0", + "Source": "Repository", + "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation Grids", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\", comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.", + "License": "MIT + file LICENSE", + "URL": "https://isoband.r-lib.org, https://github.com/r-lib/isoband", + "BugReports": "https://github.com/r-lib/isoband/issues", + "Imports": [ + "cli", + "grid", + "rlang", + "utils" + ], + "Suggests": [ + "covr", + "ggplot2", + "knitr", + "magick", + "bench", + "rmarkdown", + "sf", + "testthat (>= 3.0.0)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-12-05", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Config/build/compilation-database": "true", + "LinkingTo": [ + "cpp11" + ], + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut] (ORCID: ), Claus O. Wilke [aut] (Original author, ORCID: ), Thomas Lin Pedersen [aut, cre] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Title": "Obtain 'jQuery' as an HTML Dependency Object", + "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )", + "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "RoxygenNote": "7.0.2", + "Imports": [ + "htmltools" + ], + "Suggests": [ + "testthat" + ], + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "jsonlite": { + "Package": "jsonlite", + "Version": "2.0.0", + "Source": "Repository", + "Title": "A Simple and Robust JSON Parser and Generator for R", + "License": "MIT + file LICENSE", + "Depends": [ + "methods" + ], + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", + "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", + "BugReports": "https://github.com/jeroen/jsonlite/issues", + "Maintainer": "Jeroen Ooms ", + "VignetteBuilder": "knitr, R.rsp", + "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", + "Suggests": [ + "httr", + "vctrs", + "testthat", + "knitr", + "rmarkdown", + "R.rsp", + "sf" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", + "Repository": "CRAN" + }, + "juicyjuice": { + "Package": "juicyjuice", + "Version": "0.1.0", + "Source": "Repository", + "Title": "Inline CSS Properties into HTML Tags Using 'juice'", + "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"riannone@me.com\", c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Automattic\", role = c(\"cph\"), comment = \"juice library\"), person(\"juice contributors\", role = c(\"ctb\"), comment = \"juice library\") )", + "Description": "There are occasions where you need a piece of HTML with integrated styles. A prime example of this is HTML email. This transformation involves moving the CSS and associated formatting instructions from the style block in the head of your document into the body of the HTML. Many prominent email clients require integrated styles in HTML email; otherwise a received HTML email will be displayed without any styling. This package will quickly and precisely perform these CSS transformations when given HTML text and it does so by using the JavaScript 'juice' library.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rich-iannone/juicyjuice", + "BugReports": "https://github.com/rich-iannone/juicyjuice/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.1", + "Imports": [ + "V8 (>= 4.2.0)" + ], + "Suggests": [ + "testthat (>= 3.0.0)" + ], + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Richard Iannone [aut, cre, cph] (), Automattic [cph] (juice library), juice contributors [ctb] (juice library)", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN" + }, + "knitr": { + "Package": "knitr", + "Version": "1.51", + "Source": "Repository", + "Type": "Package", + "Title": "A General-Purpose Package for Dynamic Report Generation in R", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "evaluate (>= 0.15)", + "highr (>= 0.11)", + "methods", + "tools", + "xfun (>= 0.52)", + "yaml (>= 2.1.19)" + ], + "Suggests": [ + "bslib", + "DBI (>= 0.4-1)", + "digest", + "formatR", + "gifski", + "gridSVG", + "htmlwidgets (>= 0.7)", + "jpeg", + "JuliaCall (>= 0.11.1)", + "magick", + "litedown", + "markdown (>= 1.3)", + "otel", + "otelsdk", + "png", + "ragg", + "reticulate (>= 1.4)", + "rgl (>= 0.95.1201)", + "rlang", + "rmarkdown", + "sass", + "showtext", + "styler (>= 1.2.0)", + "targets (>= 0.6.0)", + "testit", + "tibble", + "tikzDevice (>= 0.10)", + "tinytex (>= 0.56)", + "webshot", + "rstudioapi", + "svglite" + ], + "License": "GPL", + "URL": "https://yihui.org/knitr/", + "BugReports": "https://github.com/yihui/knitr/issues", + "Encoding": "UTF-8", + "VignetteBuilder": "litedown, knitr", + "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", + "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "labeling": { + "Package": "labeling", + "Version": "0.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Axis Labeling", + "Date": "2023-08-29", + "Author": "Justin Talbot,", + "Maintainer": "Nuno Sempere ", + "Description": "Functions which provide a range of axis labeling algorithms.", + "License": "MIT + file LICENSE | Unlimited", + "Collate": "'labeling.R'", + "NeedsCompilation": "no", + "Imports": [ + "stats", + "graphics" + ], + "Repository": "CRAN" + }, + "later": { + "Package": "later", + "Version": "1.4.8", + "Source": "Repository", + "Type": "Package", + "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )", + "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled in an event loop.", + "License": "MIT + file LICENSE", + "URL": "https://later.r-lib.org, https://github.com/r-lib/later", + "BugReports": "https://github.com/r-lib/later/issues", + "Depends": [ + "R (>= 3.5)" + ], + "Imports": [ + "Rcpp (>= 1.0.10)", + "rlang" + ], + "Suggests": [ + "knitr", + "nanonext", + "promises", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-07-18", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], Charlie Gao [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)", + "Maintainer": "Charlie Gao ", + "Repository": "CRAN" + }, + "lattice": { + "Package": "lattice", + "Version": "0.22-6", + "Source": "Repository", + "Date": "2024-03-20", + "Priority": "recommended", + "Title": "Trellis Graphics for R", + "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )", + "Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.", + "Depends": [ + "R (>= 4.0.0)" + ], + "Suggests": [ + "KernSmooth", + "MASS", + "latticeExtra", + "colorspace" + ], + "Imports": [ + "grid", + "grDevices", + "graphics", + "stats", + "utils" + ], + "Enhances": [ + "chron", + "zoo" + ], + "LazyLoad": "yes", + "LazyData": "yes", + "License": "GPL (>= 2)", + "URL": "https://lattice.r-forge.r-project.org/", + "BugReports": "https://github.com/deepayan/lattice/issues", + "NeedsCompilation": "yes", + "Author": "Deepayan Sarkar [aut, cre] (), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)", + "Maintainer": "Deepayan Sarkar ", + "Repository": "CRAN" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.3", + "Source": "Repository", + "Title": "Lazy (Non-Standard) Evaluation", + "Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", + "License": "GPL-3", + "Depends": [ + "R (>= 3.1.0)" + ], + "Imports": [ + "rlang" + ], + "Suggests": [ + "knitr", + "rmarkdown (>= 0.2.65)", + "testthat", + "covr" + ], + "VignetteBuilder": "knitr", + "RoxygenNote": "7.3.3", + "Config/build/compilation-database": "true", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre], RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.5", + "Source": "Repository", + "Title": "Manage the Life Cycle of your Package Functions", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", + "License": "MIT + file LICENSE", + "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", + "BugReports": "https://github.com/r-lib/lifecycle/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "cli (>= 3.4.0)", + "rlang (>= 1.1.0)" + ], + "Suggests": [ + "covr", + "knitr", + "lintr (>= 3.1.0)", + "rmarkdown", + "testthat (>= 3.0.1)", + "tibble", + "tidyverse", + "tools", + "vctrs", + "withr", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate, usethis", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "litedown": { + "Package": "litedown", + "Version": "0.9", + "Source": "Repository", + "Type": "Package", + "Title": "A Lightweight Version of R Markdown", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Tim\", \"Taylor\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8587-7113\")), person() )", + "Description": "Render R Markdown to Markdown (without using 'knitr'), and Markdown to lightweight HTML or 'LaTeX' documents with the 'commonmark' package (instead of 'Pandoc'). Some missing Markdown features in 'commonmark' are also supported, such as raw HTML or 'LaTeX' blocks, 'LaTeX' math, superscripts, subscripts, footnotes, element attributes, and appendices, but not all 'Pandoc' Markdown features are (or will be) supported. With additional JavaScript and CSS, you can also create HTML slides and articles. This package can be viewed as a trimmed-down version of R Markdown and 'knitr'. It does not aim at rich Markdown features or a large variety of output formats (the primary formats are HTML and 'LaTeX'). Book and website projects of multiple input documents are also supported.", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "utils", + "commonmark (>= 2.0.0)", + "xfun (>= 0.55)" + ], + "Suggests": [ + "rbibutils", + "rstudioapi", + "tinytex" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/yihui/litedown", + "BugReports": "https://github.com/yihui/litedown/issues", + "VignetteBuilder": "litedown", + "RoxygenNote": "7.3.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Tim Taylor [ctb] (ORCID: )", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "magrittr": { + "Package": "magrittr", + "Version": "2.0.5", + "Source": "Repository", + "Type": "Package", + "Title": "A Forward-Pipe Operator for R", + "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"cre\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"", + "License": "MIT + file LICENSE", + "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", + "BugReports": "https://github.com/tidyverse/magrittr/issues", + "Depends": [ + "R (>= 3.4.0)" + ], + "Suggests": [ + "covr", + "knitr", + "rlang", + "rmarkdown", + "testthat" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "Yes", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "markdown": { + "Package": "markdown", + "Version": "2.0", + "Source": "Repository", + "Type": "Package", + "Title": "Render Markdown with 'commonmark'", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Jeffrey\", \"Horner\", role = \"aut\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Yixuan\", \"Qiu\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Adam\", \"November\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Andrzej\", \"Oles\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Render Markdown to full and lightweight HTML/LaTeX documents with the 'commonmark' package. This package has been superseded by 'litedown'.", + "Depends": [ + "R (>= 2.11.1)" + ], + "Imports": [ + "utils", + "xfun", + "litedown (>= 0.6)" + ], + "Suggests": [ + "knitr", + "rmarkdown (>= 2.18)", + "yaml", + "RCurl" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/markdown", + "BugReports": "https://github.com/rstudio/markdown/issues", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (), JJ Allaire [aut], Jeffrey Horner [aut], Henrik Bengtsson [ctb], Jim Hester [ctb], Yixuan Qiu [ctb], Kohske Takahashi [ctb], Adam November [ctb], Nacho Caballero [ctb], Jeroen Ooms [ctb], Thomas Leeper [ctb], Joe Cheng [ctb], Andrzej Oles [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Title": "'Memoisation' of Functions", + "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))", + "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", + "License": "MIT + file LICENSE", + "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", + "BugReports": "https://github.com/r-lib/memoise/issues", + "Imports": [ + "rlang (>= 0.4.10)", + "cachem" + ], + "Suggests": [ + "digest", + "aws.s3", + "covr", + "googleAuthR", + "googleCloudStorageR", + "httr", + "testthat" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "mime": { + "Package": "mime", + "Version": "0.13", + "Source": "Repository", + "Type": "Package", + "Title": "Map Filenames to MIME Types", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", + "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", + "Imports": [ + "tools" + ], + "License": "GPL", + "URL": "https://github.com/yihui/mime", + "BugReports": "https://github.com/yihui/mime/issues", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "officer": { + "Package": "officer", + "Version": "0.7.5", + "Source": "Repository", + "Type": "Package", + "Title": "Manipulation of Microsoft Word and PowerPoint Documents", + "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"Stefan\", \"Moog\", , \"moogs@gmx.de\", role = \"aut\"), person(\"Mark\", \"Heckmann\", , \"heckmann.mark@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-0736-7417\")), person(\"ArData\", role = \"cph\"), person(\"Frank\", \"Hangler\", , \"frank@plotandscatter.com\", role = \"ctb\", comment = \"function body_replace_all_text\"), person(\"Liz\", \"Sander\", , \"lsander@civisanalytics.com\", role = \"ctb\", comment = \"several documentation fixes\"), person(\"Anton\", \"Victorson\", , \"anton@victorson.se\", role = \"ctb\", comment = \"fixes xml structures\"), person(\"Jon\", \"Calder\", , \"jonmcalder@gmail.com\", role = \"ctb\", comment = \"update vignettes\"), person(\"John\", \"Harrold\", , \"john.m.harrold@gmail.com\", role = \"ctb\", comment = \"function annotate_base\"), person(\"John\", \"Muschelli\", , \"muschellij2@gmail.com\", role = \"ctb\", comment = \"google doc compatibility\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\", \"function as.matrix.rpptx\")), person(\"Nikolai\", \"Beck\", , \"beck.nikolai@gmail.com\", role = \"ctb\", comment = \"set speaker notes for .pptx documents\"), person(\"Greg\", \"Leleu\", , \"gregoire.leleu@gmail.com\", role = \"ctb\", comment = \"fields functionality in ppt\"), person(\"Majid\", \"Eismann\", role = \"ctb\"), person(\"Wahiduzzaman\", \"Khan\", role = \"ctb\", comment = \"vectorization of remove_slide\"), person(\"Hongyuan\", \"Jia\", , \"hongyuanjia@cqust.edu.cn\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0075-8183\")), person(\"Michael\", \"Stackhouse\", , \"mike.stackhouse@atorusresearch.com\", role = \"ctb\") )", + "Description": "Access and manipulate 'Microsoft Word', 'RTF' and 'Microsoft PowerPoint' documents from R. The package focuses on tabular and graphical reporting from R; it also provides two functions that let users get document content into data objects. A set of functions lets add and remove images, tables and paragraphs of text in new or existing documents. The package does not require any installation of Microsoft products to be able to write Microsoft files.", + "License": "MIT + file LICENSE", + "URL": "https://ardata-fr.github.io/officeverse/, https://davidgohel.github.io/officer/", + "BugReports": "https://github.com/davidgohel/officer/issues", + "Imports": [ + "cli", + "dplyr", + "graphics", + "grDevices", + "openssl", + "R6", + "ragg", + "stats", + "tidyr", + "utils", + "uuid", + "xml2 (>= 1.1.0)", + "zip (>= 2.1.0)" + ], + "Suggests": [ + "devEMF", + "doconv (>= 0.3.0)", + "gdtools", + "ggplot2", + "knitr", + "magick", + "rmarkdown", + "rsvg", + "mschart", + "testthat", + "withr" + ], + "Encoding": "UTF-8", + "Collate": "'core_properties.R' 'custom_properties.R' 'defunct.R' 'dev-utils.R' 'docx_add.R' 'docx_comments.R' 'docx_cursor.R' 'docx_embed_font.R' 'docx_part.R' 'docx_replace.R' 'docx_section.R' 'docx_settings.R' 'docx_styles.R' 'docx_utils_funs.R' 'empty_content.R' 'formatting_properties.R' 'fortify_docx.R' 'fortify_pptx.R' 'knitr_utils.R' 'officer.R' 'ooxml.R' 'ooxml_block_objects.R' 'ooxml_run_objects.R' 'openxml_content_type.R' 'openxml_document.R' 'pack_folder.R' 'ph_location.R' 'post-proc.R' 'ppt_class_dir_collection.R' 'ppt_classes.R' 'ppt_notes.R' 'ppt_ph_dedupe_layout.R' 'ppt_ph_manipulate.R' 'ppt_ph_rename_layout.R' 'ppt_ph_with_methods.R' 'pptx_informations.R' 'pptx_layout_helper.R' 'pptx_matrix.R' 'utils.R' 'pptx_slide_manip.R' 'read_docx.R' 'docx_write.R' 'read_docx_styles.R' 'read_pptx.R' 'read_xlsx.R' 'relationship.R' 'rtf.R' 'shape_properties.R' 'shorcuts.R' 'docx_append_context.R' 'utils-xml.R' 'deprecated.R' 'zzz.R'", + "Config/roxygen2/version": "8.0.0", + "NeedsCompilation": "no", + "Author": "David Gohel [aut, cre], Stefan Moog [aut], Mark Heckmann [aut] (ORCID: ), ArData [cph], Frank Hangler [ctb] (function body_replace_all_text), Liz Sander [ctb] (several documentation fixes), Anton Victorson [ctb] (fixes xml structures), Jon Calder [ctb] (update vignettes), John Harrold [ctb] (function annotate_base), John Muschelli [ctb] (google doc compatibility), Bill Denney [ctb] (ORCID: , function as.matrix.rpptx), Nikolai Beck [ctb] (set speaker notes for .pptx documents), Greg Leleu [ctb] (fields functionality in ppt), Majid Eismann [ctb], Wahiduzzaman Khan [ctb] (vectorization of remove_slide), Hongyuan Jia [ctb] (ORCID: ), Michael Stackhouse [ctb]", + "Maintainer": "David Gohel ", + "Repository": "CRAN" + }, + "omopgenerics": { + "Package": "omopgenerics", + "Version": "1.3.7", + "Source": "Repository", + "Title": "Methods and Classes for the OMOP Common Data Model", + "Authors@R": "c( person( \"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\") ), person( \"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\") ), person( \"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\") ), person( \"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\") ), person( \"Adam\", \"Black\", email = \"black@ohdsi.org\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-5576-8701\") ), person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0002-4405-1814\") ) )", + "Description": "Provides definitions of core classes and methods used by analytic pipelines that query the OMOP (Observational Medical Outcomes Partnership) common data model.", + "License": "Apache License (>= 2)", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Imports": [ + "cli", + "dbplyr (>= 2.5.1)", + "dplyr", + "generics", + "glue", + "lifecycle", + "methods", + "purrr", + "rlang", + "snakecase", + "stringi", + "stringr", + "tidyr", + "vctrs" + ], + "Depends": [ + "R (>= 4.1)" + ], + "Suggests": [ + "bit64", + "CDMConnector", + "covr", + "duckdb", + "gt", + "here", + "jsonlite", + "knitr", + "omock", + "readr", + "rmarkdown", + "testthat (>= 3.0.0)", + "withr" + ], + "URL": "https://darwin-eu.github.io/omopgenerics/", + "BugReports": "https://github.com/darwin-eu/omopgenerics/issues", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Martí Català [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Mike Du [ctb] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Adam Black [ctb] (ORCID: ), Marta Alcalde-Herraiz [ctb] (ORCID: )", + "Maintainer": "Martí Català ", + "Repository": "CRAN" + }, + "openssl": { + "Package": "openssl", + "Version": "2.4.1", + "Source": "Repository", + "Type": "Package", + "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", + "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", + "License": "MIT + file LICENSE", + "URL": "https://jeroen.r-universe.dev/openssl", + "BugReports": "https://github.com/jeroen/openssl/issues", + "SystemRequirements": "OpenSSL >= 1.0.2", + "VignetteBuilder": "knitr", + "Imports": [ + "askpass" + ], + "Suggests": [ + "curl", + "testthat (>= 2.1.0)", + "digest", + "knitr", + "rmarkdown", + "jsonlite", + "jose", + "sodium" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "otel": { + "Package": "otel", + "Version": "0.2.0", + "Source": "Repository", + "Title": "OpenTelemetry R API", + "Authors@R": "person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\"))", + "Description": "High-quality, ubiquitous, and portable telemetry to enable effective observability. OpenTelemetry is a collection of tools, APIs, and SDKs used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior. This package implements the OpenTelemetry API: . Use this package as a dependency if you want to instrument your R package for OpenTelemetry.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "Depends": [ + "R (>= 3.6.0)" + ], + "Suggests": [ + "callr", + "cli", + "glue", + "jsonlite", + "otelsdk", + "processx", + "shiny", + "spelling", + "testthat (>= 3.0.0)", + "utils", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "URL": "https://otel.r-lib.org, https://github.com/r-lib/otel", + "Additional_repositories": "https://github.com/r-lib/otelsdk/releases/download/devel", + "BugReports": "https://github.com/r-lib/otel/issues", + "NeedsCompilation": "no", + "Author": "Gábor Csárdi [aut, cre]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "pillar": { + "Package": "pillar", + "Version": "1.11.1", + "Source": "Repository", + "Title": "Coloured Formatting for Columns", + "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", + "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", + "License": "MIT + file LICENSE", + "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", + "BugReports": "https://github.com/r-lib/pillar/issues", + "Imports": [ + "cli (>= 2.3.0)", + "glue", + "lifecycle", + "rlang (>= 1.0.2)", + "utf8 (>= 1.1.0)", + "utils", + "vctrs (>= 0.5.0)" + ], + "Suggests": [ + "bit64", + "DBI", + "debugme", + "DiagrammeR", + "dplyr", + "formattable", + "ggplot2", + "knitr", + "lubridate", + "nanotime", + "nycflights13", + "palmerpenguins", + "rmarkdown", + "scales", + "stringi", + "survival", + "testthat (>= 3.1.1)", + "tibble", + "units (>= 0.7.2)", + "vdiffr", + "withr" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "no", + "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], RStudio [cph]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Title": "Private Configuration for 'R' Packages", + "Author": "Gábor Csárdi", + "Maintainer": "Gábor Csárdi ", + "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "Imports": [ + "utils" + ], + "Suggests": [ + "covr", + "testthat", + "disposables (>= 1.0.3)" + ], + "URL": "https://github.com/r-lib/pkgconfig#readme", + "BugReports": "https://github.com/r-lib/pkgconfig/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "plotly": { + "Package": "plotly", + "Version": "4.12.0", + "Source": "Repository", + "Title": "Create Interactive Web Graphics via 'plotly.js'", + "Authors@R": "c(person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"cpsievert1@gmail.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Chris\", \"Parmer\", role = \"aut\", email = \"chris@plot.ly\"), person(\"Toby\", \"Hocking\", role = \"aut\", email = \"tdhock5@gmail.com\"), person(\"Scott\", \"Chamberlain\", role = \"aut\", email = \"myrmecocystus@gmail.com\"), person(\"Karthik\", \"Ram\", role = \"aut\", email = \"karthik.ram@gmail.com\"), person(\"Marianne\", \"Corvellec\", role = \"aut\", email = \"marianne.corvellec@igdore.org\", comment = c(ORCID = \"0000-0002-1994-3581\")), person(\"Pedro\", \"Despouy\", role = \"aut\", email = \"pedro@plot.ly\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Plotly Technologies Inc.\", role = \"cph\"))", + "License": "MIT + file LICENSE", + "Description": "Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.", + "URL": "https://plotly-r.com, https://github.com/plotly/plotly.R, https://plotly.com/r/", + "BugReports": "https://github.com/plotly/plotly.R/issues", + "Depends": [ + "R (>= 3.5.0)", + "ggplot2 (>= 3.0.0)" + ], + "Imports": [ + "tools", + "scales", + "httr (>= 1.3.0)", + "jsonlite (>= 1.6)", + "magrittr", + "digest", + "viridisLite", + "base64enc", + "htmltools (>= 0.3.6)", + "htmlwidgets (>= 1.5.2.9001)", + "tidyr (>= 1.0.0)", + "RColorBrewer", + "dplyr", + "vctrs", + "tibble", + "lazyeval (>= 0.2.0)", + "rlang (>= 1.0.0)", + "crosstalk", + "purrr", + "data.table", + "promises" + ], + "Suggests": [ + "MASS", + "maps", + "hexbin", + "ggthemes", + "GGally", + "ggalluvial", + "testthat", + "knitr", + "shiny (>= 1.1.0)", + "shinytest2", + "curl", + "rmarkdown", + "Cairo", + "broom", + "webshot", + "listviewer", + "dendextend", + "sf", + "png", + "IRdisplay", + "processx", + "plotlyGeoAssets", + "forcats", + "withr", + "palmerpenguins", + "rversions", + "reticulate", + "rsvg", + "ggridges" + ], + "LazyData": "true", + "RoxygenNote": "7.3.3", + "Encoding": "UTF-8", + "Config/Needs/check": "tidyverse/ggplot2, ggobi/GGally, rcmdcheck, devtools, reshape2, s2", + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (ORCID: ), Chris Parmer [aut], Toby Hocking [aut], Scott Chamberlain [aut], Karthik Ram [aut], Marianne Corvellec [aut] (ORCID: ), Pedro Despouy [aut], Salim Brüggemann [ctb] (ORCID: ), Plotly Technologies Inc. [cph]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "prettyunits": { + "Package": "prettyunits", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Pretty, Human Readable Formatting of Quantities", + "Authors@R": "c( person(\"Gabor\", \"Csardi\", email=\"csardi.gabor@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Bill\", \"Denney\", email=\"wdenney@humanpredictions.com\", role=c(\"ctb\"), comment=c(ORCID=\"0000-0002-5759-428X\")), person(\"Christophe\", \"Regouby\", email=\"christophe.regouby@free.fr\", role=c(\"ctb\")) )", + "Description": "Pretty, human readable formatting of quantities. Time intervals: '1337000' -> '15d 11h 23m 20s'. Vague time intervals: '2674000' -> 'about a month ago'. Bytes: '1337' -> '1.34 kB'. Rounding: '99' with 3 significant digits -> '99.0' p-values: '0.00001' -> '<0.0001'. Colors: '#FF0000' -> 'red'. Quantities: '1239437' -> '1.24 M'.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/prettyunits", + "BugReports": "https://github.com/r-lib/prettyunits/issues", + "Depends": [ + "R(>= 2.10)" + ], + "Suggests": [ + "codetools", + "covr", + "testthat" + ], + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Gabor Csardi [aut, cre], Bill Denney [ctb] (), Christophe Regouby [ctb]", + "Maintainer": "Gabor Csardi ", + "Repository": "CRAN" + }, + "progress": { + "Package": "progress", + "Version": "1.2.3", + "Source": "Repository", + "Title": "Terminal Progress Bars", + "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Rich\", \"FitzJohn\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Configurable Progress bars, they may include percentage, elapsed time, and/or the estimated completion time. They work in terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works with or without 'Rcpp'.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/progress#readme, http://r-lib.github.io/progress/", + "BugReports": "https://github.com/r-lib/progress/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "crayon", + "hms", + "prettyunits", + "R6" + ], + "Suggests": [ + "Rcpp", + "testthat (>= 3.0.0)", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Author": "Gábor Csárdi [aut, cre], Rich FitzJohn [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "promises": { + "Package": "promises", + "Version": "1.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Abstractions for Promise-Based Asynchronous Programming", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises", + "BugReports": "https://github.com/rstudio/promises/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "fastmap (>= 1.1.0)", + "later", + "lifecycle", + "magrittr (>= 1.5)", + "otel (>= 0.2.0)", + "R6", + "rlang" + ], + "Suggests": [ + "future (>= 1.21.0)", + "knitr", + "mirai", + "otelsdk (>= 0.2.0)", + "purrr", + "Rcpp", + "rmarkdown", + "spelling", + "testthat (>= 3.0.0)", + "vembedr" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "rsconnect, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-05-27", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Joe Cheng [aut], Barret Schloerke [aut, cre] (ORCID: ), Winston Chang [aut] (ORCID: ), Charlie Gao [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Barret Schloerke ", + "Repository": "CRAN" + }, + "purrr": { + "Package": "purrr", + "Version": "1.2.2", + "Source": "Repository", + "Title": "Functional Programming Tools", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", + "Description": "A complete and consistent functional programming toolkit for R.", + "License": "MIT + file LICENSE", + "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", + "BugReports": "https://github.com/tidyverse/purrr/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli (>= 3.6.1)", + "lifecycle (>= 1.0.3)", + "magrittr (>= 1.5.0)", + "rlang (>= 1.1.1)", + "vctrs (>= 0.6.3)" + ], + "Suggests": [ + "carrier (>= 0.3.0)", + "covr", + "dplyr (>= 0.7.8)", + "httr", + "knitr", + "lubridate", + "mirai (>= 2.5.1)", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble", + "tidyselect" + ], + "LinkingTo": [ + "cli" + ], + "VignetteBuilder": "knitr", + "Biarch": "true", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate, tidyr", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "TRUE", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "ragg": { + "Package": "ragg", + "Version": "1.5.2", + "Source": "Repository", + "Type": "Package", + "Title": "Graphic Devices Based on AGG", + "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Maxim\", \"Shemanarev\", role = c(\"aut\", \"cph\"), comment = \"Author of AGG\"), person(\"Tony\", \"Juricic\", , \"tonygeek@yahoo.com\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Milan\", \"Marusinec\", , \"milan@marusinec.sk\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Spencer\", \"Garrett\", role = \"ctb\", comment = \"Contributor to AGG\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Maintainer": "Thomas Lin Pedersen ", + "Description": "Anti-Grain Geometry (AGG) is a high-quality and high-performance 2D drawing library. The 'ragg' package provides a set of graphic devices based on AGG to use as alternative to the raster devices provided through the 'grDevices' package.", + "License": "MIT + file LICENSE", + "URL": "https://ragg.r-lib.org, https://github.com/r-lib/ragg", + "BugReports": "https://github.com/r-lib/ragg/issues", + "Imports": [ + "systemfonts (>= 1.0.3)", + "textshaping (>= 0.3.0)" + ], + "Suggests": [ + "covr", + "graphics", + "grid", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "systemfonts", + "textshaping" + ], + "Config/build/compilation-database": "true", + "Config/Needs/website": "ggplot2, devoid, magick, bench, tidyr, ggridges, hexbin, sessioninfo, pkgdown, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-25", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "freetype2, libpng, libtiff, libjpeg, libwebp, libwebpmux", + "NeedsCompilation": "yes", + "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Maxim Shemanarev [aut, cph] (Author of AGG), Tony Juricic [ctb, cph] (Contributor to AGG), Milan Marusinec [ctb, cph] (Contributor to AGG), Spencer Garrett [ctb] (Contributor to AGG), Posit Software, PBC [cph, fnd] (ROR: )", + "Repository": "CRAN" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.4", + "Source": "Repository", + "Type": "Package", + "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"trl\", \"cre\", \"cph\")), person(\"Sridhar\", \"Ratnakumar\", role = \"aut\"), person(\"Trent\", \"Mick\", role = \"aut\"), person(\"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(\"Eddy\", \"Petrisor\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = c(\"trl\", \"aut\"), comment = c(ORCID = \"0000-0001-6341-4639\")), person(\"Gabor\", \"Csardi\", role = \"ctb\"), person(\"Gregory\", \"Jefferis\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to R.", + "License": "MIT + file LICENSE", + "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", + "BugReports": "https://github.com/r-lib/rappdirs/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Suggests": [ + "covr", + "roxygen2", + "testthat (>= 3.2.0)", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-05-05", + "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, Posit, PBC. See file LICENSE for details.", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [trl, cre, cph], Sridhar Ratnakumar [aut], Trent Mick [aut], ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs), Eddy Petrisor [ctb], Trevor Davis [trl, aut] (ORCID: ), Gabor Csardi [ctb], Gregory Jefferis [ctb], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "reactR": { + "Package": "reactR", + "Version": "0.6.1", + "Source": "Repository", + "Type": "Package", + "Title": "React Helpers", + "Date": "2024-09-14", + "Authors@R": "c( person( \"Facebook\", \"Inc\" , role = c(\"aut\", \"cph\") , comment = \"React library in lib, https://reactjs.org/; see AUTHORS for full list of contributors\" ), person( \"Michel\",\"Weststrate\", , role = c(\"aut\", \"cph\") , comment = \"mobx library in lib, https://github.com/mobxjs\" ), person( \"Kent\", \"Russell\" , role = c(\"aut\", \"cre\") , comment = \"R interface\" , email = \"kent.russell@timelyportfolio.com\" ), person( \"Alan\", \"Dipert\" , role = c(\"aut\") , comment = \"R interface\" , email = \"alan@rstudio.com\" ), person( \"Greg\", \"Lin\" , role = c(\"aut\") , comment = \"R interface\" , email = \"glin@glin.io\" ) )", + "Maintainer": "Kent Russell ", + "Description": "Make it easy to use 'React' in R with 'htmlwidget' scaffolds, helper dependency functions, an embedded 'Babel' 'transpiler', and examples.", + "URL": "https://github.com/react-R/reactR", + "BugReports": "https://github.com/react-R/reactR/issues", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Imports": [ + "htmltools" + ], + "Suggests": [ + "htmlwidgets (>= 1.5.3)", + "rmarkdown", + "shiny", + "V8", + "knitr", + "usethis", + "jsonlite" + ], + "RoxygenNote": "7.3.2", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Facebook Inc [aut, cph] (React library in lib, https://reactjs.org/; see AUTHORS for full list of contributors), Michel Weststrate [aut, cph] (mobx library in lib, https://github.com/mobxjs), Kent Russell [aut, cre] (R interface), Alan Dipert [aut] (R interface), Greg Lin [aut] (R interface)", + "Repository": "CRAN" + }, + "reactable": { + "Package": "reactable", + "Version": "0.4.5", + "Source": "Repository", + "Type": "Package", + "Title": "Interactive Data Tables for R", + "Authors@R": "c( person(\"Greg\", \"Lin\", email = \"glin@glin.io\", role = c(\"aut\", \"cre\")), person(\"Tanner\", \"Linsley\", role = c(\"ctb\", \"cph\"), comment = \"React Table library\"), person(family = \"Emotion team and other contributors\", role = c(\"ctb\", \"cph\"), comment = \"Emotion library\"), person(\"Kent\", \"Russell\", role = c(\"ctb\", \"cph\"), comment = \"reactR package\"), person(\"Ramnath\", \"Vaidyanathan\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Joe\", \"Cheng\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"JJ\", \"Allaire\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Yihui\", \"Xie\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Kenton\", \"Russell\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(family = \"Facebook, Inc. and its affiliates\", role = c(\"ctb\", \"cph\"), comment = \"React library\"), person(family = \"FormatJS\", role = c(\"ctb\", \"cph\"), comment = \"FormatJS libraries\"), person(family = \"Feross Aboukhadijeh, and other contributors\", role = c(\"ctb\", \"cph\"), comment = \"buffer library\"), person(\"Roman\", \"Shtylman\", role = c(\"ctb\", \"cph\"), comment = \"process library\"), person(\"James\", \"Halliday\", role = c(\"ctb\", \"cph\"), comment = \"stream-browserify library\"), person(family = \"Posit Software, PBC\", role = c(\"fnd\", \"cph\")) )", + "Description": "Interactive data tables for R, based on the 'React Table' JavaScript library. Provides an HTML widget that can be used in 'R Markdown' or 'Quarto' documents, 'Shiny' applications, or viewed from an R console.", + "License": "MIT + file LICENSE", + "URL": "https://glin.github.io/reactable/, https://github.com/glin/reactable", + "BugReports": "https://github.com/glin/reactable/issues", + "Depends": [ + "R (>= 3.1)" + ], + "Imports": [ + "digest", + "htmltools (>= 0.5.2)", + "htmlwidgets (>= 1.5.3)", + "jsonlite", + "reactR" + ], + "Suggests": [ + "covr", + "crosstalk", + "dplyr", + "fontawesome", + "knitr", + "leaflet", + "MASS", + "rmarkdown", + "shiny", + "sparkline", + "testthat", + "tippy", + "V8" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.2.1", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Greg Lin [aut, cre], Tanner Linsley [ctb, cph] (React Table library), Emotion team and other contributors [ctb, cph] (Emotion library), Kent Russell [ctb, cph] (reactR package), Ramnath Vaidyanathan [ctb, cph] (htmlwidgets package), Joe Cheng [ctb, cph] (htmlwidgets package), JJ Allaire [ctb, cph] (htmlwidgets package), Yihui Xie [ctb, cph] (htmlwidgets package), Kenton Russell [ctb, cph] (htmlwidgets package), Facebook, Inc. and its affiliates [ctb, cph] (React library), FormatJS [ctb, cph] (FormatJS libraries), Feross Aboukhadijeh, and other contributors [ctb, cph] (buffer library), Roman Shtylman [ctb, cph] (process library), James Halliday [ctb, cph] (stream-browserify library), Posit Software, PBC [fnd, cph]", + "Maintainer": "Greg Lin ", + "Repository": "CRAN" + }, + "readr": { + "Package": "readr", + "Version": "2.2.0", + "Source": "Repository", + "Title": "Read Rectangular Text Data", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Shelby\", \"Bearrows\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"https://github.com/mandreyel/\", role = \"cph\", comment = \"mio library\"), person(\"Jukka\", \"Jylänki\", role = c(\"ctb\", \"cph\"), comment = \"grisu3 implementation\"), person(\"Mikkel\", \"Jørgensen\", role = c(\"ctb\", \"cph\"), comment = \"grisu3 implementation\") )", + "Description": "The goal of 'readr' is to provide a fast and friendly way to read rectangular data (like 'csv', 'tsv', and 'fwf'). It is designed to flexibly parse many types of data found in the wild, while still cleanly failing when data unexpectedly changes.", + "License": "MIT + file LICENSE", + "URL": "https://readr.tidyverse.org, https://github.com/tidyverse/readr", + "BugReports": "https://github.com/tidyverse/readr/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli", + "clipr", + "crayon", + "glue", + "hms (>= 0.4.1)", + "lifecycle", + "methods", + "R6", + "rlang", + "tibble", + "utils", + "vroom (>= 1.7.0)", + "withr" + ], + "Suggests": [ + "covr", + "curl", + "datasets", + "knitr", + "rmarkdown", + "spelling", + "stringi", + "testthat (>= 3.2.0)", + "tzdb (>= 0.1.1)", + "waldo", + "xml2" + ], + "LinkingTo": [ + "cpp11", + "tzdb (>= 0.1.1)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "false", + "Config/usethis/last-upkeep": "2025-11-14", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut], Jim Hester [aut], Romain Francois [ctb], Jennifer Bryan [aut, cre] (ORCID: ), Shelby Bearrows [ctb], Posit Software, PBC [cph, fnd] (ROR: ), https://github.com/mandreyel/ [cph] (mio library), Jukka Jylänki [ctb, cph] (grisu3 implementation), Mikkel Jørgensen [ctb, cph] (grisu3 implementation)", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN" + }, + "renv": { + "Package": "renv", + "Version": "1.2.3", + "Source": "Repository", + "Type": "Package", + "Title": "Project Environments", + "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@rstudio.com\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A dependency management toolkit for R. Using 'renv', you can create and manage project-local R libraries, save the state of these libraries to a 'lockfile', and later restore your library as required. Together, these tools can help make your projects more isolated, portable, and reproducible.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/renv/, https://github.com/rstudio/renv", + "BugReports": "https://github.com/rstudio/renv/issues", + "Imports": [ + "utils" + ], + "Suggests": [ + "BiocManager", + "cli", + "compiler", + "covr", + "cpp11", + "curl", + "devtools", + "generics", + "gitcreds", + "jsonlite", + "jsonvalidate", + "knitr", + "miniUI", + "modules", + "packrat", + "pak", + "R6", + "remotes", + "reticulate", + "rmarkdown", + "rstudioapi", + "shiny", + "testthat", + "uuid", + "waldo", + "yaml", + "webfakes" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", + "NeedsCompilation": "no", + "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Kevin Ushey ", + "Repository": "CRAN" + }, + "rlang": { + "Package": "rlang", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", + "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", + "Authors@R": "c( person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"), person(given = \"mikefc\", email = \"mikefc@coolbutuseless.com\", role = \"cph\", comment = \"Hash implementation based on Mike's xxhashlite\"), person(given = \"Yann\", family = \"Collet\", role = \"cph\", comment = \"Author of the embedded xxHash library\"), person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", + "License": "MIT + file LICENSE", + "ByteCompile": "true", + "Biarch": "true", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "cli (>= 3.1.0)", + "covr", + "crayon", + "desc", + "fs", + "glue", + "knitr", + "magrittr", + "methods", + "pillar", + "pkgload", + "rmarkdown", + "stats", + "testthat (>= 3.3.2)", + "tibble", + "usethis", + "vctrs (>= 0.2.3)", + "withr" + ], + "Enhances": [ + "winch" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", + "BugReports": "https://github.com/r-lib/rlang/issues", + "Config/build/compilation-database": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "dplyr, tidyverse/tidytemplate", + "NeedsCompilation": "yes", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], mikefc [cph] (Hash implementation based on Mike's xxhashlite), Yann Collet [cph] (Author of the embedded xxHash library), Posit, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.31", + "Source": "Repository", + "Type": "Package", + "Title": "Dynamic Documents for R", + "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", + "Description": "Convert R Markdown documents into a variety of formats.", + "License": "GPL-3", + "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", + "BugReports": "https://github.com/rstudio/rmarkdown/issues", + "Depends": [ + "R (>= 3.0)" + ], + "Imports": [ + "bslib (>= 0.2.5.1)", + "evaluate (>= 0.13)", + "fontawesome (>= 0.5.0)", + "htmltools (>= 0.5.1)", + "jquerylib", + "jsonlite", + "knitr (>= 1.43)", + "methods", + "tinytex (>= 0.31)", + "tools", + "utils", + "xfun (>= 0.36)", + "yaml (>= 2.1.19)" + ], + "Suggests": [ + "digest", + "dygraphs", + "fs", + "rsconnect", + "downlit (>= 0.4.0)", + "katex (>= 1.4.0)", + "sass (>= 0.4.0)", + "shiny (>= 1.6.0)", + "testthat (>= 3.0.3)", + "tibble", + "vctrs", + "cleanrmd", + "withr (>= 2.4.2)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "rstudio/quillt, pkgdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", + "NeedsCompilation": "no", + "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (ORCID: ), Christophe Dervieux [aut] (ORCID: ), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (ORCID: ), Andrew Dunning [ctb] (ORCID: ), Atsushi Yasumoto [ctb, cph] (ORCID: , cph: Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Frederik Aust [ctb] (ORCID: ), Jeff Allen [ctb], JooYoung Seo [ctb] (ORCID: ), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "sass": { + "Package": "sass", + "Version": "0.4.10", + "Source": "Repository", + "Type": "Package", + "Title": "Syntactically Awesome Style Sheets ('Sass')", + "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this, R developers can use variables, inheritance, and functions to generate dynamic style sheets. The package uses the 'Sass CSS' extension language, which is stable, powerful, and CSS compatible.", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"), person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"), comment = c(ORCID = \"0000-0003-4474-2498\")), person(family = \"RStudio\", role = c(\"cph\", \"fnd\")), person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"), comment = \"json.cpp\"), person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"), comment = \"utf8.h\") )", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", + "BugReports": "https://github.com/rstudio/sass/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "SystemRequirements": "GNU make", + "Imports": [ + "fs (>= 1.2.4)", + "rlang (>= 0.4.10)", + "htmltools (>= 0.5.1)", + "R6", + "rappdirs" + ], + "Suggests": [ + "testthat", + "knitr", + "rmarkdown", + "withr", + "shiny", + "curl" + ], + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "scales": { + "Package": "scales", + "Version": "1.4.0", + "Source": "Repository", + "Title": "Scale Functions for Visualization", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Dana\", \"Seidel\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.", + "License": "MIT + file LICENSE", + "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", + "BugReports": "https://github.com/r-lib/scales/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli", + "farver (>= 2.0.3)", + "glue", + "labeling", + "lifecycle", + "R6", + "RColorBrewer", + "rlang (>= 1.1.0)", + "viridisLite" + ], + "Suggests": [ + "bit64", + "covr", + "dichromat", + "ggplot2", + "hms (>= 0.5.0)", + "stringi", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "LazyLoad": "yes", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [cre, aut] (), Dana Seidel [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "shiny": { + "Package": "shiny", + "Version": "1.13.0", + "Source": "Repository", + "Type": "Package", + "Title": "Web Application Framework for R", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Garrick\", \"Aden-Buie\", , \"garrick@adenbuie.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Alan\", \"Dipert\", role = \"aut\"), person(\"Barbara\", \"Borges\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Prem Nawaz\", \"Khan\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Victor\", \"Tsaran\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Dennis\", \"Lembree\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Cathy\", \"O'Connor\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(, \"PayPal, Inc\", role = \"cph\", comment = \"Bootstrap accessibility plugin\"), person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"), comment = \"selectize-plugin-a11y library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\"), person(, \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"R Core Team\", role = c(\"ctb\", \"cph\"), comment = \"tar implementation from R\") )", + "Description": "Makes it incredibly easy to build interactive web applications with R. Automatic \"reactive\" binding between inputs and outputs and extensive prebuilt widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.", + "License": "MIT + file LICENSE", + "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", + "BugReports": "https://github.com/rstudio/shiny/issues", + "Depends": [ + "methods", + "R (>= 3.1.2)" + ], + "Imports": [ + "bslib (>= 0.6.0)", + "cachem (>= 1.1.0)", + "cli", + "commonmark (>= 2.0.0)", + "fastmap (>= 1.1.1)", + "fontawesome (>= 0.4.0)", + "glue (>= 1.3.2)", + "grDevices", + "htmltools (>= 0.5.4)", + "httpuv (>= 1.5.2)", + "jsonlite (>= 0.9.16)", + "later (>= 1.0.0)", + "lifecycle (>= 0.2.0)", + "mime (>= 0.3)", + "otel", + "promises (>= 1.5.0)", + "R6 (>= 2.0)", + "rlang (>= 0.4.10)", + "sourcetools", + "tools", + "utils", + "withr", + "xtable" + ], + "Suggests": [ + "Cairo (>= 1.5-5)", + "coro (>= 1.1.0)", + "datasets", + "DT", + "dygraphs", + "future", + "ggplot2", + "knitr (>= 1.6)", + "magrittr", + "markdown", + "mirai", + "otelsdk (>= 0.2.0)", + "ragg", + "reactlog (>= 1.0.0)", + "rmarkdown", + "sass", + "showtext", + "testthat (>= 3.2.1)", + "watcher", + "yaml" + ], + "Config/Needs/check": "shinytest2", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R' 'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R' 'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R' 'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R' 'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R' 'html-deps.R' 'image-interact-opts.R' 'image-interact.R' 'imageutils.R' 'input-action.R' 'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R' 'input-file.R' 'input-numeric.R' 'input-password.R' 'input-radiobuttons.R' 'input-select.R' 'input-slider.R' 'input-submit.R' 'input-text.R' 'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R' 'notifications.R' 'otel-attr-srcref.R' 'otel-collect.R' 'otel-enable.R' 'otel-error.R' 'otel-label.R' 'otel-reactive-update.R' 'otel-session.R' 'otel-shiny.R' 'otel-with.R' 'priorityqueue.R' 'progress.R' 'react.R' 'reexports.R' 'render-cached-plot.R' 'render-plot.R' 'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R' 'server-input-handlers.R' 'server-resource-paths.R' 'server.R' 'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R' 'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R' 'tar.R' 'test-export.R' 'test-server.R' 'test.R' 'update-input.R' 'utils-lang.R' 'utils-tags.R' 'version_bs_date_picker.R' 'version_ion_range_slider.R' 'version_jquery.R' 'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R' 'viewer.R'", + "NeedsCompilation": "no", + "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], JJ Allaire [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Garrick Aden-Buie [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Jonathan McPherson [aut], Alan Dipert [aut], Barbara Borges [aut], Posit Software, PBC [cph, fnd] (ROR: ), jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin), Victor Tsaran [ctb] (Bootstrap accessibility plugin), Dennis Lembree [ctb] (Bootstrap accessibility plugin), Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin), Cathy O'Connor [ctb] (Bootstrap accessibility plugin), PayPal, Inc [cph] (Bootstrap accessibility plugin), Stefan Petre [ctb, cph] (Bootstrap-datepicker library), Andrew Rowls [ctb, cph] (Bootstrap-datepicker library), Brian Reavis [ctb, cph] (selectize.js library), Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library), SpryMedia Limited [ctb, cph] (DataTables library), Ivan Sagalaev [ctb, cph] (highlight.js library), R Core Team [ctb, cph] (tar implementation from R)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "shinyWidgets": { + "Package": "shinyWidgets", + "Version": "0.9.1", + "Source": "Repository", + "Title": "Custom Inputs Widgets for Shiny", + "Authors@R": "c( person(\"Victor\", \"Perrier\", email = \"victor.perrier@dreamrs.fr\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Fanny\", \"Meyer\", role = \"aut\"), person(\"David\", \"Granjon\", role = \"aut\"), person(\"Ian\", \"Fellows\", role = \"ctb\", comment = \"Methods for mutating vertical tabs & updateMultiInput\"), person(\"Wil\", \"Davis\", role = \"ctb\", comment = \"numericRangeInput function\"), person(\"Spencer\", \"Matthews\", role = \"ctb\", comment = \"autoNumeric methods\"), person(family = \"JavaScript and CSS libraries authors\", role = c(\"ctb\", \"cph\"), comment = \"All authors are listed in LICENSE.md\") )", + "Description": "Collection of custom input controls and user interface components for 'Shiny' applications. Give your applications a unique and colorful style !", + "URL": "https://github.com/dreamRs/shinyWidgets, https://dreamrs.github.io/shinyWidgets/", + "BugReports": "https://github.com/dreamRs/shinyWidgets/issues", + "License": "GPL-3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "Depends": [ + "R (>= 3.1.0)" + ], + "Imports": [ + "bslib", + "sass", + "shiny (>= 1.6.0)", + "htmltools (>= 0.5.1)", + "jsonlite", + "grDevices", + "rlang" + ], + "Suggests": [ + "testthat", + "covr", + "ggplot2", + "DT", + "scales", + "shinydashboard", + "shinydashboardPlus" + ], + "NeedsCompilation": "no", + "Author": "Victor Perrier [aut, cre, cph], Fanny Meyer [aut], David Granjon [aut], Ian Fellows [ctb] (Methods for mutating vertical tabs & updateMultiInput), Wil Davis [ctb] (numericRangeInput function), Spencer Matthews [ctb] (autoNumeric methods), JavaScript and CSS libraries authors [ctb, cph] (All authors are listed in LICENSE.md)", + "Maintainer": "Victor Perrier ", + "Repository": "CRAN" + }, + "snakecase": { + "Package": "snakecase", + "Version": "0.11.1", + "Source": "Repository", + "Date": "2023-08-27", + "Title": "Convert Strings into any Case", + "Description": "A consistent, flexible and easy to use tool to parse and convert strings into cases like snake or camel among others.", + "Authors@R": "c( person(\"Malte\", \"Grosser\", , \"malte.grosser@gmail.com\", role = c(\"aut\", \"cre\")))", + "Maintainer": "Malte Grosser ", + "Depends": [ + "R (>= 3.2)" + ], + "Imports": [ + "stringr", + "stringi" + ], + "Suggests": [ + "testthat", + "covr", + "tibble", + "purrrlyr", + "knitr", + "rmarkdown", + "magrittr" + ], + "URL": "https://github.com/Tazinho/snakecase", + "BugReports": "https://github.com/Tazinho/snakecase/issues", + "Encoding": "UTF-8", + "License": "GPL-3", + "RoxygenNote": "6.1.1", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "Malte Grosser [aut, cre]", + "Repository": "CRAN" + }, + "sourcetools": { + "Package": "sourcetools", + "Version": "0.1.7-2", + "Source": "Repository", + "Type": "Package", + "Title": "Tools for Reading, Tokenizing and Parsing R Code", + "Authors@R": "person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevinushey@gmail.com\")", + "Maintainer": "Kevin Ushey ", + "Description": "Tools for the reading and tokenization of R code. The 'sourcetools' package provides both an R and C++ interface for the tokenization of R code, and helpers for interacting with the tokenized representation of R code.", + "License": "MIT + file LICENSE", + "Depends": [ + "R (>= 3.0.2)" + ], + "Suggests": [ + "testthat" + ], + "RoxygenNote": "5.0.1", + "BugReports": "https://github.com/kevinushey/sourcetools/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Kevin Ushey [aut, cre]", + "Repository": "CRAN" + }, + "stringi": { + "Package": "stringi", + "Version": "1.8.7", + "Source": "Repository", + "Date": "2025-03-27", + "Title": "Fast and Portable Character String Processing Facilities", + "Description": "A collection of character string/text/natural language processing tools for pattern searching (e.g., with 'Java'-like regular expressions or the 'Unicode' collation algorithm), random string generation, case mapping, string transliteration, concatenation, sorting, padding, wrapping, Unicode normalisation, date-time formatting and parsing, and many more. They are fast, consistent, convenient, and - thanks to 'ICU' (International Components for Unicode) - portable across all locales and platforms. Documentation about 'stringi' is provided via its website at and the paper by Gagolewski (2022, ).", + "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", + "BugReports": "https://github.com/gagolews/stringi/issues", + "SystemRequirements": "ICU4C (>= 61, optional)", + "Type": "Package", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "tools", + "utils", + "stats" + ], + "Biarch": "TRUE", + "License": "file LICENSE", + "Authors@R": "c(person(given = \"Marek\", family = \"Gagolewski\", role = c(\"aut\", \"cre\", \"cph\"), email = \"marek@gagolewski.com\", comment = c(ORCID = \"0000-0003-0637-6028\")), person(given = \"Bartek\", family = \"Tartanus\", role = \"ctb\"), person(\"Unicode, Inc. and others\", role=\"ctb\", comment = \"ICU4C source code, Unicode Character Database\") )", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", + "Maintainer": "Marek Gagolewski ", + "License_is_FOSS": "yes", + "Repository": "CRAN" + }, + "stringr": { + "Package": "stringr", + "Version": "1.6.0", + "Source": "Repository", + "Title": "Simple, Consistent Wrappers for Common String Operations", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with \"NA\"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.", + "License": "MIT + file LICENSE", + "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", + "BugReports": "https://github.com/tidyverse/stringr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli", + "glue (>= 1.6.1)", + "lifecycle (>= 1.0.3)", + "magrittr", + "rlang (>= 1.0.0)", + "stringi (>= 1.5.3)", + "vctrs (>= 0.4.0)" + ], + "Suggests": [ + "covr", + "dplyr", + "gt", + "htmltools", + "htmlwidgets", + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/potools/style": "explicit", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "survival": { + "Package": "survival", + "Version": "3.8-6", + "Source": "Repository", + "Title": "Survival Analysis", + "Priority": "recommended", + "Date": "2026-01-09", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "graphics", + "Matrix", + "methods", + "splines", + "stats", + "utils" + ], + "LazyData": "Yes", + "LazyDataCompression": "xz", + "ByteCompile": "Yes", + "Authors@R": "c(person(c(\"Terry\", \"M\"), \"Therneau\", email=\"therneau.terry@mayo.edu\", role=c(\"aut\", \"cre\")), person(\"Thomas\", \"Lumley\", role=c(\"ctb\", \"trl\"), comment=\"original S->R port and R maintainer until 2009\"), person(\"Atkinson\", \"Elizabeth\", role=\"ctb\"), person(\"Crowson\", \"Cynthia\", role=\"ctb\"))", + "Description": "Contains the core survival analysis routines, including definition of Surv objects, Kaplan-Meier and Aalen-Johansen (multi-state) curves, Cox models, and parametric accelerated failure time models.", + "License": "LGPL (>= 2)", + "URL": "https://github.com/therneau/survival", + "NeedsCompilation": "yes", + "Author": "Terry M Therneau [aut, cre], Thomas Lumley [ctb, trl] (original S->R port and R maintainer until 2009), Atkinson Elizabeth [ctb], Crowson Cynthia [ctb]", + "Maintainer": "Terry M Therneau ", + "Repository": "CRAN" + }, + "sys": { + "Package": "sys", + "Version": "3.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Powerful and Reliable Tools for Running System Commands in R", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"ctb\"))", + "Description": "Drop-in replacements for the base system2() function with fine control and consistent behavior across platforms. Supports clean interruption, timeout, background tasks, and streaming STDIN / STDOUT / STDERR over binary or text connections. Arguments on Windows automatically get encoded and quoted to work on different locales.", + "License": "MIT + file LICENSE", + "URL": "https://jeroen.r-universe.dev/sys", + "BugReports": "https://github.com/jeroen/sys/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "Suggests": [ + "unix (>= 1.4)", + "spelling", + "testthat" + ], + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "systemfonts": { + "Package": "systemfonts", + "Version": "1.3.2", + "Source": "Repository", + "Type": "Package", + "Title": "System Native Font Finding", + "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Jeroen\", \"Ooms\", , \"jeroen@berkeley.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Devon\", \"Govett\", role = \"aut\", comment = \"Author of font-manager\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides system native access to the font catalogue. As font handling varies between systems it is difficult to correctly locate installed fonts across different operating systems. The 'systemfonts' package provides bindings to the native libraries on Windows, macOS and Linux for finding font files that can then be used further by e.g. graphic devices. The main use is intended to be from compiled code but 'systemfonts' also provides access from R.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/systemfonts, https://systemfonts.r-lib.org", + "BugReports": "https://github.com/r-lib/systemfonts/issues", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "base64enc", + "grid", + "jsonlite", + "lifecycle", + "tools", + "utils" + ], + "Suggests": [ + "covr", + "farver", + "ggplot2", + "graphics", + "knitr", + "ragg", + "rmarkdown", + "svglite", + "testthat (>= 2.1.0)" + ], + "LinkingTo": [ + "cpp11 (>= 0.2.1)" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "SystemRequirements": "fontconfig, freetype2", + "NeedsCompilation": "yes", + "Author": "Thomas Lin Pedersen [aut, cre] (ORCID: ), Jeroen Ooms [aut] (ORCID: ), Devon Govett [aut] (Author of font-manager), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "textshaping": { + "Package": "textshaping", + "Version": "1.0.5", + "Source": "Repository", + "Title": "Bindings to the 'HarfBuzz' and 'Fribidi' Libraries for Text Shaping", + "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides access to the text shaping functionality in the 'HarfBuzz' library and the bidirectional algorithm in the 'Fribidi' library. 'textshaping' is a low-level utility package mainly for graphic devices that expands upon the font tool-set provided by the 'systemfonts' package.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/textshaping", + "BugReports": "https://github.com/r-lib/textshaping/issues", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "lifecycle", + "stats", + "stringi", + "systemfonts (>= 1.3.0)", + "utils" + ], + "Suggests": [ + "covr", + "grDevices", + "grid", + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "cpp11 (>= 0.2.1)", + "systemfonts (>= 1.0.0)" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "SystemRequirements": "freetype2, harfbuzz, fribidi", + "NeedsCompilation": "yes", + "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "tibble": { + "Package": "tibble", + "Version": "3.3.1", + "Source": "Repository", + "Title": "Simple Data Frames", + "Authors@R": "c( person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Romain\", \"Francois\", , \"romain@r-enthusiasts.com\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", + "License": "MIT + file LICENSE", + "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", + "BugReports": "https://github.com/tidyverse/tibble/issues", + "Depends": [ + "R (>= 3.4.0)" + ], + "Imports": [ + "cli", + "lifecycle (>= 1.0.0)", + "magrittr", + "methods", + "pillar (>= 1.8.1)", + "pkgconfig", + "rlang (>= 1.0.2)", + "utils", + "vctrs (>= 0.5.0)" + ], + "Suggests": [ + "bench", + "bit64", + "blob", + "brio", + "callr", + "DiagrammeR", + "dplyr", + "evaluate", + "formattable", + "ggplot2", + "here", + "hms", + "htmltools", + "knitr", + "lubridate", + "nycflights13", + "pkgload", + "purrr", + "rmarkdown", + "stringi", + "testthat (>= 3.0.2)", + "tidyr", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/autostyle/rmd": "false", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", + "Config/usethis/last-upkeep": "2025-06-07", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "NeedsCompilation": "yes", + "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.3.2", + "Source": "Repository", + "Title": "Tidy Messy Data", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools to help to create tidy data, where each column is a variable, each row is an observation, and each cell contains a single value. 'tidyr' contains tools for changing the shape (pivoting) and hierarchy (nesting and 'unnesting') of a dataset, turning deeply nested lists into rectangular data frames ('rectangling'), and extracting values out of string columns. It also includes tools for working with missing values (both implicit and explicit).", + "License": "MIT + file LICENSE", + "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", + "BugReports": "https://github.com/tidyverse/tidyr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli (>= 3.4.1)", + "dplyr (>= 1.1.0)", + "glue", + "lifecycle (>= 1.0.3)", + "magrittr", + "purrr (>= 1.0.1)", + "rlang (>= 1.1.1)", + "stringr (>= 1.5.0)", + "tibble (>= 2.1.1)", + "tidyselect (>= 1.2.1)", + "utils", + "vctrs (>= 0.5.2)" + ], + "Suggests": [ + "covr", + "data.table", + "knitr", + "readr", + "repurrrsive (>= 1.1.0)", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "cpp11 (>= 0.4.0)" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre], Davis Vaughan [aut], Maximilian Girlich [aut], Kevin Ushey [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.1", + "Source": "Repository", + "Title": "Select from a Set of Strings", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.", + "License": "MIT + file LICENSE", + "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", + "BugReports": "https://github.com/r-lib/tidyselect/issues", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "cli (>= 3.3.0)", + "glue (>= 1.3.0)", + "lifecycle (>= 1.0.3)", + "rlang (>= 1.0.4)", + "vctrs (>= 0.5.2)", + "withr" + ], + "Suggests": [ + "covr", + "crayon", + "dplyr", + "knitr", + "magrittr", + "rmarkdown", + "stringr", + "testthat (>= 3.1.1)", + "tibble (>= 2.1.3)" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.0.9000", + "NeedsCompilation": "yes", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.59", + "Source": "Repository", + "Type": "Package", + "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Ethan\", \"Heinzen\", role = \"ctb\"), person(\"Fernando\", \"Cagua\", role = \"ctb\"), person() )", + "Description": "Helper functions to install and maintain the 'LaTeX' distribution named 'TinyTeX' (), a lightweight, cross-platform, portable, and easy-to-maintain version of 'TeX Live'. This package also contains helper functions to compile 'LaTeX' documents, and install missing 'LaTeX' packages automatically.", + "Imports": [ + "xfun (>= 0.48)" + ], + "Suggests": [ + "testit", + "rstudioapi" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/tinytex", + "BugReports": "https://github.com/rstudio/tinytex/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre, cph] (ORCID: ), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Ethan Heinzen [ctb], Fernando Cagua [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "tzdb": { + "Package": "tzdb", + "Version": "0.5.0", + "Source": "Repository", + "Title": "Time Zone Database Information", + "Authors@R": "c( person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"Howard\", \"Hinnant\", role = \"cph\", comment = \"Author of the included date library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides an up-to-date copy of the Internet Assigned Numbers Authority (IANA) Time Zone Database. It is updated periodically to reflect changes made by political bodies to time zone boundaries, UTC offsets, and daylight saving time rules. Additionally, this package provides a C++ interface for working with the 'date' library. 'date' provides comprehensive support for working with dates and date-times, which this package exposes to make it easier for other R packages to utilize. Headers are provided for calendar specific calculations, along with a limited interface for time zone manipulations.", + "License": "MIT + file LICENSE", + "URL": "https://tzdb.r-lib.org, https://github.com/r-lib/tzdb", + "BugReports": "https://github.com/r-lib/tzdb/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Suggests": [ + "covr", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "cpp11 (>= 0.5.2)" + ], + "Biarch": "yes", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Davis Vaughan [aut, cre], Howard Hinnant [cph] (Author of the included date library), Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "utf8": { + "Package": "utf8", + "Version": "1.2.6", + "Source": "Repository", + "Title": "Unicode Text Processing", + "Authors@R": "c(person(given = c(\"Patrick\", \"O.\"), family = \"Perry\", role = c(\"aut\", \"cph\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"cre\", email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", + "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", + "License": "Apache License (== 2.0) | file LICENSE", + "URL": "https://krlmlr.github.io/utf8/, https://github.com/krlmlr/utf8", + "BugReports": "https://github.com/krlmlr/utf8/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Suggests": [ + "cli", + "covr", + "knitr", + "rlang", + "rmarkdown", + "testthat (>= 3.0.0)", + "withr" + ], + "VignetteBuilder": "knitr, rmarkdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "NeedsCompilation": "yes", + "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre] (ORCID: ), Unicode, Inc. [cph, dtc] (Unicode Character Database)", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "uuid": { + "Package": "uuid", + "Version": "1.2-2", + "Source": "Repository", + "Title": "Tools for Generating and Handling of UUIDs", + "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.org, ORCID: ), Theodore Ts'o [aut, cph] (libuuid)", + "Maintainer": "Simon Urbanek ", + "Authors@R": "c(person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.org\", ORCID=\"0000-0003-2297-1732\")), person(\"Theodore\",\"Ts'o\", email=\"tytso@thunk.org\", role=c(\"aut\",\"cph\"), comment=\"libuuid\"))", + "Depends": [ + "R (>= 2.9.0)" + ], + "Description": "Tools for generating and handling of UUIDs (Universally Unique Identifiers).", + "License": "MIT + file LICENSE", + "URL": "https://www.rforge.net/uuid", + "BugReports": "https://github.com/s-u/uuid/issues", + "NeedsCompilation": "yes", + "Repository": "CRAN" + }, + "vctrs": { + "Package": "vctrs", + "Version": "0.7.3", + "Source": "Repository", + "Title": "Vector Helpers", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"data.table team\", role = \"cph\", comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Defines new notions of prototype and size that are used to provide tools for consistent and well-founded type-coercion and size-recycling, and are in turn connected to ideas of type- and size-stability useful for analysing function interfaces.", + "License": "MIT + file LICENSE", + "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", + "BugReports": "https://github.com/r-lib/vctrs/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "cli (>= 3.4.0)", + "glue", + "lifecycle (>= 1.0.3)", + "rlang (>= 1.1.7)" + ], + "Suggests": [ + "bit64", + "covr", + "crayon", + "dplyr (>= 0.8.5)", + "generics", + "knitr", + "pillar (>= 1.4.4)", + "pkgdown (>= 2.0.1)", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble (>= 3.1.3)", + "waldo (>= 0.2.0)", + "withr", + "xml2", + "zeallot" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Encoding": "UTF-8", + "KeepSource": "true", + "Language": "en-GB", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut], Lionel Henry [aut], Davis Vaughan [aut, cre], data.table team [cph] (Radix sort based on data.table's forder() and their contribution to R's order()), Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "viridisLite": { + "Package": "viridisLite", + "Version": "0.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Colorblind-Friendly Color Maps (Lite Version)", + "Date": "2026-02-03", + "Authors@R": "c( person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")), person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")), person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")), person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\")) )", + "Maintainer": "Simon Garnier ", + "Description": "Color maps designed to improve graph readability for readers with common forms of color blindness and/or color vision deficiency. The color maps are also perceptually-uniform, both in regular form and also when converted to black-and-white for printing. This is the 'lite' version of the 'viridis' package that also contains 'ggplot2' bindings for discrete and continuous color and fill scales and can be found at .", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Depends": [ + "R (>= 2.10)" + ], + "Suggests": [ + "hexbin (>= 1.27.0)", + "ggplot2 (>= 1.0.1)", + "testthat", + "covr" + ], + "URL": "https://sjmgarnier.github.io/viridisLite/, https://github.com/sjmgarnier/viridisLite/", + "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Simon Garnier [aut, cre], Noam Ross [ctb, cph], Bob Rudis [ctb, cph], Marco Sciaini [ctb, cph], Antônio Pedro Camargo [ctb, cph], Cédric Scherer [ctb, cph]", + "Repository": "CRAN" + }, + "visOmopResults": { + "Package": "visOmopResults", + "Version": "1.5.0", + "Source": "Repository", + "Title": "Graphs and Tables for OMOP Results", + "Authors@R": "c( person( \"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\") ), person( \"Núria\", \"Mercadé-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0006-7948-3747\") ), person( \"Yuchen\", \"Guo\", , \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\") ), person( \"Elin\", \"Rowlands\", , \"elin.rowlands@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0007-6629-4661\") ), person( \"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0002-4405-1814\") ), person( \"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9286-1128\") ) )", + "Maintainer": "Núria Mercadé-Besora ", + "Description": "Provides methods to transform omop_result objects into formatted tables and figures, facilitating the visualisation of study results working with the Observational Medical Outcomes Partnership (OMOP) Common Data Model.", + "License": "Apache License (>= 2)", + "URL": "https://darwin-eu.github.io/visOmopResults/, https://github.com/darwin-eu/visOmopResults", + "BugReports": "https://github.com/darwin-eu/visOmopResults/issues", + "Imports": [ + "brand.yml", + "cli", + "dplyr", + "generics", + "glue", + "omopgenerics (>= 0.3.1)", + "purrr", + "rlang", + "stringr", + "systemfonts", + "tidyr" + ], + "Suggests": [ + "bslib", + "CohortCharacteristics", + "covr", + "DT", + "flextable (>= 0.9.5)", + "ggalluvial", + "ggplot2", + "ggsankeyfier", + "gt", + "here", + "htmltools", + "IncidencePrevalence", + "knitr", + "lifecycle", + "officer", + "palmerpenguins", + "PatientProfiles", + "plotly", + "reactable", + "rmarkdown", + "shiny", + "shinycssloaders", + "shinyWidgets", + "sortable", + "testthat (>= 3.0.0)", + "tinytable (>= 0.14.0)", + "yaml" + ], + "VignetteBuilder": "knitr", + "Depends": [ + "R (>= 4.1)" + ], + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Encoding": "UTF-8", + "LazyData": "true", + "Config/roxygen2/version": "8.0.0", + "NeedsCompilation": "no", + "Author": "Martí Català [aut] (ORCID: ), Núria Mercadé-Besora [aut, cre] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Elin Rowlands [ctb] (ORCID: ), Marta Alcalde-Herraiz [ctb] (ORCID: ), Edward Burn [ctb] (ORCID: )", + "Repository": "CRAN" + }, + "vroom": { + "Package": "vroom", + "Version": "1.7.1", + "Source": "Repository", + "Title": "Read and Write Rectangular Text Data Quickly", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Shelby\", \"Bearrows\", role = \"ctb\"), person(\"https://github.com/mandreyel/\", role = \"cph\", comment = \"mio library\"), person(\"Jukka\", \"Jylänki\", role = \"cph\", comment = \"grisu3 implementation\"), person(\"Mikkel\", \"Jørgensen\", role = \"cph\", comment = \"grisu3 implementation\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "The goal of 'vroom' is to read and write data (like 'csv', 'tsv' and 'fwf') quickly. When reading it uses a quick initial indexing step, then reads the values lazily , so only the data you actually use needs to be read. The writer formats the data in parallel and writes to disk asynchronously from formatting.", + "License": "MIT + file LICENSE", + "URL": "https://vroom.tidyverse.org, https://github.com/tidyverse/vroom", + "BugReports": "https://github.com/tidyverse/vroom/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "bit64", + "cli (>= 3.2.0)", + "crayon", + "glue", + "hms", + "lifecycle (>= 1.0.3)", + "methods", + "rlang (>= 1.1.0)", + "stats", + "tibble (>= 2.0.0)", + "tidyselect", + "tzdb (>= 0.1.1)", + "vctrs (>= 0.2.0)", + "withr" + ], + "Suggests": [ + "archive", + "bench (>= 1.1.0)", + "covr", + "curl", + "dplyr", + "forcats", + "fs", + "ggplot2", + "knitr", + "patchwork", + "prettyunits", + "purrr", + "rmarkdown", + "rstudioapi", + "scales", + "spelling", + "testthat (>= 2.1.0)", + "tidyr", + "utils", + "waldo", + "xml2" + ], + "LinkingTo": [ + "cpp11 (>= 0.2.0)", + "progress (>= 1.2.3)", + "tzdb (>= 0.1.1)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "nycflights13, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "false", + "Config/usethis/last-upkeep": "2025-11-25", + "Copyright": "file COPYRIGHTS", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "Config/build/compilation-database": "true", + "NeedsCompilation": "yes", + "Author": "Jim Hester [aut] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Jennifer Bryan [aut, cre] (ORCID: ), Shelby Bearrows [ctb], https://github.com/mandreyel/ [cph] (mio library), Jukka Jylänki [cph] (grisu3 implementation), Mikkel Jørgensen [cph] (grisu3 implementation), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN" + }, + "withr": { + "Package": "withr", + "Version": "3.0.2", + "Source": "Repository", + "Title": "Run Code 'With' Temporarily Modified Global State", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.", + "License": "MIT + file LICENSE", + "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", + "BugReports": "https://github.com/r-lib/withr/issues", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "graphics", + "grDevices" + ], + "Suggests": [ + "callr", + "DBI", + "knitr", + "methods", + "rlang", + "rmarkdown (>= 2.12)", + "RSQLite", + "testthat (>= 3.0.0)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R' 'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R' 'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R' 'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R' 'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R' 'utils.R' 'with.R'", + "NeedsCompilation": "no", + "Author": "Jim Hester [aut], Lionel Henry [aut, cre], Kirill Müller [aut], Kevin Ushey [aut], Hadley Wickham [aut], Winston Chang [aut], Jennifer Bryan [ctb], Richard Cotton [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "xfun": { + "Package": "xfun", + "Version": "0.58", + "Source": "Repository", + "Type": "Package", + "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Daijiang\", \"Li\", role = \"ctb\"), person(\"Xianying\", \"Tan\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person() )", + "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "grDevices", + "stats", + "tools" + ], + "Suggests": [ + "testit", + "parallel", + "codetools", + "methods", + "rstudioapi", + "tinytex (>= 0.30)", + "mime", + "litedown (>= 0.6)", + "commonmark", + "knitr (>= 1.50)", + "remotes", + "pak", + "curl", + "xml2", + "jsonlite", + "magick", + "yaml", + "data.table", + "qs2" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/yihui/xfun", + "BugReports": "https://github.com/yihui/xfun/issues", + "Encoding": "UTF-8", + "VignetteBuilder": "litedown", + "Config/roxygen2/version": "8.0.0", + "NeedsCompilation": "yes", + "Author": "Yihui Xie [aut, cre, cph] (ORCID: , URL: https://yihui.org), Wush Wu [ctb], Daijiang Li [ctb], Xianying Tan [ctb], Salim Brüggemann [ctb] (ORCID: ), Christophe Dervieux [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "xml2": { + "Package": "xml2", + "Version": "1.5.2", + "Source": "Repository", + "Title": "Parse XML", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", email = \"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Foundation\", role = \"ctb\", comment = \"Copy of R-project homepage cached as example\") )", + "Description": "Bindings to 'libxml2' for working with XML data using a simple, consistent interface based on 'XPath' expressions. Also supports XML schema validation; for 'XSLT' transformations see the 'xslt' package.", + "License": "MIT + file LICENSE", + "URL": "https://xml2.r-lib.org, https://r-lib.r-universe.dev/xml2", + "BugReports": "https://github.com/r-lib/xml2/issues", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "cli", + "methods", + "rlang (>= 1.1.0)" + ], + "Suggests": [ + "covr", + "curl", + "httr", + "knitr", + "mockery", + "rmarkdown", + "testthat (>= 3.2.0)", + "xslt" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "libxml2: libxml2-dev (deb), libxml2-devel (rpm)", + "Collate": "'S4.R' 'as_list.R' 'xml_parse.R' 'as_xml_document.R' 'classes.R' 'format.R' 'import-standalone-obj-type.R' 'import-standalone-purrr.R' 'import-standalone-types-check.R' 'init.R' 'nodeset_apply.R' 'paths.R' 'utils.R' 'xml2-package.R' 'xml_attr.R' 'xml_children.R' 'xml_document.R' 'xml_find.R' 'xml_missing.R' 'xml_modify.R' 'xml_name.R' 'xml_namespaces.R' 'xml_node.R' 'xml_nodeset.R' 'xml_path.R' 'xml_schema.R' 'xml_serialize.R' 'xml_structure.R' 'xml_text.R' 'xml_type.R' 'xml_url.R' 'xml_write.R' 'zzz.R'", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut], Jim Hester [aut], Jeroen Ooms [aut, cre], Posit Software, PBC [cph, fnd], R Foundation [ctb] (Copy of R-project homepage cached as example)", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "xtable": { + "Package": "xtable", + "Version": "1.8-8", + "Source": "Repository", + "Date": "2026-02-20", + "Title": "Export Tables to LaTeX or HTML", + "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", + "Maintainer": "David Scott ", + "Imports": [ + "stats", + "utils", + "methods" + ], + "Suggests": [ + "knitr", + "zoo", + "survival", + "glue", + "tinytex" + ], + "VignetteBuilder": "knitr", + "Description": "Coerce data to LaTeX and HTML tables.", + "URL": "http://xtable.r-forge.r-project.org/", + "Depends": [ + "R (>= 2.10.0)" + ], + "License": "GPL (>= 2)", + "Repository": "CRAN", + "NeedsCompilation": "no", + "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]" + }, + "yaml": { + "Package": "yaml", + "Version": "2.3.12", + "Source": "Repository", + "Type": "Package", + "Title": "Methods to Convert R Data to YAML and Back", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"cre\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Shawn\", \"Garbett\", , \"shawn.garbett@vumc.org\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4079-5621\")), person(\"Jeremy\", \"Stephens\", role = c(\"aut\", \"ctb\")), person(\"Kirill\", \"Simonov\", role = \"aut\"), person(\"Yihui\", \"Xie\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Zhuoer\", \"Dong\", role = \"ctb\"), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"reikoch\", role = \"ctb\"), person(\"Will\", \"Beasley\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5613-5006\")), person(\"Brendan\", \"O'Connor\", role = \"ctb\"), person(\"Michael\", \"Quinn\", role = \"ctb\"), person(\"Charlie\", \"Gao\", role = \"ctb\"), person(c(\"Gregory\", \"R.\"), \"Warnes\", role = \"ctb\"), person(c(\"Zhian\", \"N.\"), \"Kamvar\", role = \"ctb\") )", + "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", + "License": "BSD_3_clause + file LICENSE", + "URL": "https://yaml.r-lib.org, https://github.com/r-lib/yaml/", + "BugReports": "https://github.com/r-lib/yaml/issues", + "Suggests": [ + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [cre] (ORCID: ), Shawn Garbett [ctb] (ORCID: ), Jeremy Stephens [aut, ctb], Kirill Simonov [aut], Yihui Xie [ctb] (ORCID: ), Zhuoer Dong [ctb], Jeffrey Horner [ctb], reikoch [ctb], Will Beasley [ctb] (ORCID: ), Brendan O'Connor [ctb], Michael Quinn [ctb], Charlie Gao [ctb], Gregory R. Warnes [ctb], Zhian N. Kamvar [ctb]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "zip": { + "Package": "zip", + "Version": "2.3.3", + "Source": "Repository", + "Title": "Cross-Platform 'zip' Compression", + "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kuba\", \"Podgórski\", role = \"ctb\"), person(\"Rich\", \"Geldreich\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Cross-Platform 'zip' Compression Library. A replacement for the 'zip' function, that does not require any additional external tools on any platform.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/zip, https://r-lib.github.io/zip/", + "BugReports": "https://github.com/r-lib/zip/issues", + "Suggests": [ + "covr", + "pillar", + "processx", + "R6", + "testthat", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-05-07", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "NeedsCompilation": "yes", + "Author": "Gábor Csárdi [aut, cre], Kuba Podgórski [ctb], Rich Geldreich [ctb], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + } + } +} diff --git a/tests/testthat/testPackage/renv/.gitignore b/tests/testthat/testPackage/renv/.gitignore new file mode 100644 index 0000000..0ec0cbb --- /dev/null +++ b/tests/testthat/testPackage/renv/.gitignore @@ -0,0 +1,7 @@ +library/ +local/ +cellar/ +lock/ +python/ +sandbox/ +staging/ diff --git a/tests/testthat/testPackage/renv/activate.R b/tests/testthat/testPackage/renv/activate.R new file mode 100644 index 0000000..20ffd44 --- /dev/null +++ b/tests/testthat/testPackage/renv/activate.R @@ -0,0 +1,1438 @@ + +local({ + + # the requested version of renv + version <- "1.2.3" + attr(version, "md5") <- "1bd9f58e1cfe27ce035933937c6f03de" + attr(version, "sha") <- NULL + + # the project directory + project <- Sys.getenv("RENV_PROJECT") + if (!nzchar(project)) + project <- getwd() + + # use start-up diagnostics if enabled + diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") + if (diagnostics) { + start <- Sys.time() + profile <- tempfile("renv-startup-", fileext = ".Rprof") + utils::Rprof(profile) + on.exit({ + utils::Rprof(NULL) + elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) + writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) + writeLines(sprintf("- Profile: %s", profile)) + print(utils::summaryRprof(profile)) + }, add = TRUE) + } + + # figure out whether the autoloader is enabled + enabled <- local({ + + # first, check config option + override <- getOption("renv.config.autoloader.enabled") + if (!is.null(override)) + return(override) + + # if we're being run in a context where R_LIBS is already set, + # don't load -- presumably we're being run as a sub-process and + # the parent process has already set up library paths for us + rcmd <- Sys.getenv("R_CMD", unset = NA) + rlibs <- Sys.getenv("R_LIBS", unset = NA) + if (!is.na(rlibs) && !is.na(rcmd)) + return(FALSE) + + # next, check environment variables + # prefer using the configuration one in the future + envvars <- c( + "RENV_CONFIG_AUTOLOADER_ENABLED", + "RENV_AUTOLOADER_ENABLED", + "RENV_ACTIVATE_PROJECT" + ) + + for (envvar in envvars) { + envval <- Sys.getenv(envvar, unset = NA) + if (!is.na(envval)) + return(tolower(envval) %in% c("true", "t", "1")) + } + + # enable by default + TRUE + + }) + + # bail if we're not enabled + if (!enabled) { + + # if we're not enabled, we might still need to manually load + # the user profile here + profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") + if (file.exists(profile)) { + cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") + if (tolower(cfg) %in% c("true", "t", "1")) + sys.source(profile, envir = globalenv()) + } + + return(FALSE) + + } + + # avoid recursion + if (identical(getOption("renv.autoloader.running"), TRUE)) { + warning("ignoring recursive attempt to run renv autoloader") + return(invisible(TRUE)) + } + + # signal that we're loading renv during R startup + options(renv.autoloader.running = TRUE) + on.exit(options(renv.autoloader.running = NULL), add = TRUE) + + # signal that we've consented to use renv + options(renv.consent = TRUE) + + # load the 'utils' package eagerly -- this ensures that renv shims, which + # mask 'utils' packages, will come first on the search path + library(utils, lib.loc = .Library) + + # unload renv if it's already been loaded + if ("renv" %in% loadedNamespaces()) + unloadNamespace("renv") + + # load bootstrap tools + ansify <- function(text) { + if (renv_ansify_enabled()) + renv_ansify_enhanced(text) + else + renv_ansify_default(text) + } + + renv_ansify_enabled <- function() { + + override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA) + if (!is.na(override)) + return(as.logical(override)) + + pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA) + if (identical(pane, "build")) + return(FALSE) + + testthat <- Sys.getenv("TESTTHAT", unset = "false") + if (tolower(testthat) %in% "true") + return(FALSE) + + iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false") + if (tolower(iderun) %in% "false") + return(FALSE) + + TRUE + + } + + renv_ansify_default <- function(text) { + text + } + + renv_ansify_enhanced <- function(text) { + + # R help links + pattern <- "`\\?(renv::(?:[^`])+)`" + replacement <- "`\033]8;;x-r-help:\\1\a?\\1\033]8;;\a`" + text <- gsub(pattern, replacement, text, perl = TRUE) + + # runnable code + pattern <- "`(renv::(?:[^`])+)`" + replacement <- "`\033]8;;x-r-run:\\1\a\\1\033]8;;\a`" + text <- gsub(pattern, replacement, text, perl = TRUE) + + # return ansified text + text + + } + + renv_ansify_init <- function() { + + envir <- renv_envir_self() + if (renv_ansify_enabled()) + assign("ansify", renv_ansify_enhanced, envir = envir) + else + assign("ansify", renv_ansify_default, envir = envir) + + } + + `%||%` <- function(x, y) { + if (is.null(x)) y else x + } + + catf <- function(fmt, ..., appendLF = TRUE) { + + quiet <- getOption("renv.bootstrap.quiet", default = FALSE) + if (quiet) + return(invisible()) + + # also check for config environment variables that should suppress messages + # https://github.com/rstudio/renv/issues/2214 + enabled <- Sys.getenv("RENV_CONFIG_STARTUP_QUIET", unset = NA) + if (!is.na(enabled) && tolower(enabled) %in% c("true", "1")) + return(invisible()) + + enabled <- Sys.getenv("RENV_CONFIG_SYNCHRONIZED_CHECK", unset = NA) + if (!is.na(enabled) && tolower(enabled) %in% c("false", "0")) + return(invisible()) + + msg <- sprintf(fmt, ...) + cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") + + invisible(msg) + + } + + header <- function(label, + ..., + prefix = "#", + suffix = "-", + n = min(getOption("width"), 78)) + { + label <- sprintf(label, ...) + n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) + if (n <= 0) + return(paste(prefix, label)) + + tail <- paste(rep.int(suffix, n), collapse = "") + paste0(prefix, " ", label, " ", tail) + + } + + heredoc <- function(text, leave = 0) { + + # remove leading, trailing whitespace + trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) + + # split into lines + lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] + + # compute common indent + indent <- regexpr("[^[:space:]]", lines) + common <- min(setdiff(indent, -1L)) - leave + text <- paste(substring(lines, common), collapse = "\n") + + # substitute in ANSI links for executable renv code + ansify(text) + + } + + bootstrap <- function(version, library) { + + friendly <- renv_bootstrap_version_friendly(version) + section <- header(sprintf("Bootstrapping renv %s", friendly)) + catf(section) + + # ensure the target library path exists; required for file.copy(..., recursive = TRUE) + dir.create(library, showWarnings = FALSE, recursive = TRUE) + + # try to install renv from cache + md5 <- attr(version, "md5", exact = TRUE) + if (length(md5)) { + pkgpath <- renv_bootstrap_find(version) + if (length(pkgpath) && file.exists(pkgpath)) { + ok <- file.copy(pkgpath, library, recursive = TRUE) + if (isTRUE(ok)) + return(invisible()) + } + } + + # attempt to download renv + catf("- Downloading renv ... ", appendLF = FALSE) + withCallingHandlers( + tarball <- renv_bootstrap_download(version), + error = function(err) { + catf("FAILED") + stop("failed to download:\n", conditionMessage(err)) + } + ) + catf("OK") + on.exit(unlink(tarball), add = TRUE) + + # now attempt to install + catf("- Installing renv ... ", appendLF = FALSE) + withCallingHandlers( + status <- renv_bootstrap_install(version, tarball, library), + error = function(err) { + catf("FAILED") + stop("failed to install:\n", conditionMessage(err)) + } + ) + catf("OK") + + # add empty line to break up bootstrapping from normal output + catf("") + return(invisible()) + } + + renv_bootstrap_tests_running <- function() { + getOption("renv.tests.running", default = FALSE) + } + + renv_bootstrap_repos <- function() { + + # get CRAN repository + cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") + + # check for repos override + repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) + if (!is.na(repos)) { + + # split on ';' if present + parts <- strsplit(repos, ";", fixed = TRUE)[[1L]] + + # split into named repositories if present + idx <- regexpr("=", parts, fixed = TRUE) + keys <- substring(parts, 1L, idx - 1L) + vals <- substring(parts, idx + 1L) + names(vals) <- keys + + # if we have a single unnamed repository, call it CRAN + if (length(vals) == 1L && identical(keys, "")) + names(vals) <- "CRAN" + + return(vals) + + } + + # check for lockfile repositories + repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) + if (!inherits(repos, "error") && length(repos)) + return(repos) + + # retrieve current repos + repos <- getOption("repos") + + # ensure @CRAN@ entries are resolved + repos[repos == "@CRAN@"] <- cran + + # add in renv.bootstrap.repos if set + default <- c(FALLBACK = "https://cloud.r-project.org") + extra <- getOption("renv.bootstrap.repos", default = default) + repos <- c(repos, extra) + + # remove duplicates that might've snuck in + dupes <- duplicated(repos) | duplicated(names(repos)) + repos[!dupes] + + } + + renv_bootstrap_repos_lockfile <- function() { + + lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") + if (!file.exists(lockpath)) + return(NULL) + + lockfile <- tryCatch(renv_json_read(lockpath), error = identity) + if (inherits(lockfile, "error")) { + warning(lockfile) + return(NULL) + } + + repos <- lockfile$R$Repositories + if (length(repos) == 0) + return(NULL) + + keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) + vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) + names(vals) <- keys + + return(vals) + + } + + renv_bootstrap_download <- function(version) { + + sha <- attr(version, "sha", exact = TRUE) + + methods <- if (!is.null(sha)) { + + # attempting to bootstrap a development version of renv + c( + function() renv_bootstrap_download_tarball(sha), + function() renv_bootstrap_download_github(sha) + ) + + } else { + + # attempting to bootstrap a release version of renv + c( + function() renv_bootstrap_download_tarball(version), + function() renv_bootstrap_download_cran_latest(version), + function() renv_bootstrap_download_cran_archive(version) + ) + + } + + for (method in methods) { + path <- tryCatch(method(), error = identity) + if (is.character(path) && file.exists(path)) + return(path) + } + + stop("All download methods failed") + + } + + renv_bootstrap_download_impl <- function(url, destfile) { + + mode <- "wb" + + # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 + fixup <- + Sys.info()[["sysname"]] == "Windows" && + substring(url, 1L, 5L) == "file:" + + if (fixup) + mode <- "w+b" + + args <- list( + url = url, + destfile = destfile, + mode = mode, + quiet = TRUE + ) + + if ("headers" %in% names(formals(utils::download.file))) { + headers <- renv_bootstrap_download_custom_headers(url) + if (length(headers) && is.character(headers)) + args$headers <- headers + } + + do.call(utils::download.file, args) + + } + + renv_bootstrap_download_custom_headers <- function(url) { + + headers <- getOption("renv.download.headers") + if (is.null(headers)) + return(character()) + + if (!is.function(headers)) + stopf("'renv.download.headers' is not a function") + + headers <- headers(url) + if (length(headers) == 0L) + return(character()) + + if (is.list(headers)) + headers <- unlist(headers, recursive = FALSE, use.names = TRUE) + + ok <- + is.character(headers) && + is.character(names(headers)) && + all(nzchar(names(headers))) + + if (!ok) + stop("invocation of 'renv.download.headers' did not return a named character vector") + + headers + + } + + renv_bootstrap_download_cran_latest <- function(version) { + + spec <- renv_bootstrap_download_cran_latest_find(version) + type <- spec$type + repos <- spec$repos + + baseurl <- utils::contrib.url(repos = repos, type = type) + ext <- if (identical(type, "source")) + ".tar.gz" + else if (Sys.info()[["sysname"]] == "Windows") + ".zip" + else + ".tgz" + name <- sprintf("renv_%s%s", version, ext) + url <- paste(baseurl, name, sep = "/") + + destfile <- file.path(tempdir(), name) + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (inherits(status, "condition")) + return(FALSE) + + # report success and return + destfile + + } + + renv_bootstrap_download_cran_latest_find <- function(version) { + + # check whether binaries are supported on this system + binary <- + getOption("renv.bootstrap.binary", default = TRUE) && + !identical(.Platform$pkgType, "source") && + !identical(getOption("pkgType"), "source") && + Sys.info()[["sysname"]] %in% c("Darwin", "Windows") + + types <- c(if (binary) "binary", "source") + + # iterate over types + repositories + for (type in types) { + for (repos in renv_bootstrap_repos()) { + + # build arguments for utils::available.packages() call + args <- list(type = type, repos = repos) + + # add custom headers if available -- note that + # utils::available.packages() will pass this to download.file() + if ("headers" %in% names(formals(utils::download.file))) { + headers <- renv_bootstrap_download_custom_headers(repos) + if (length(headers) && is.character(headers)) + args$headers <- headers + } + + # retrieve package database + db <- tryCatch( + as.data.frame( + do.call(utils::available.packages, args), + stringsAsFactors = FALSE + ), + error = identity + ) + + if (inherits(db, "error")) + next + + # check for compatible entry + entry <- db[db$Package %in% "renv" & db$Version %in% version, ] + if (nrow(entry) == 0) + next + + # found it; return spec to caller + spec <- list(entry = entry, type = type, repos = repos) + return(spec) + + } + } + + # if we got here, we failed to find renv + fmt <- "renv %s is not available from your declared package repositories" + stop(sprintf(fmt, version)) + + } + + renv_bootstrap_download_cran_archive <- function(version) { + + name <- sprintf("renv_%s.tar.gz", version) + repos <- renv_bootstrap_repos() + urls <- file.path(repos, "src/contrib/Archive/renv", name) + destfile <- file.path(tempdir(), name) + + for (url in urls) { + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (identical(status, 0L)) + return(destfile) + + } + + return(FALSE) + + } + + renv_bootstrap_find <- function(version) { + + path <- renv_bootstrap_find_cache(version) + if (length(path) && file.exists(path)) { + catf("- Using renv %s from global package cache", version) + return(path) + } + + } + + renv_bootstrap_find_cache <- function(version) { + + md5 <- attr(version, "md5", exact = TRUE) + if (is.null(md5)) + return() + + # infer path to renv cache + cache <- Sys.getenv("RENV_PATHS_CACHE", unset = "") + if (!nzchar(cache)) { + root <- Sys.getenv("RENV_PATHS_ROOT", unset = NA) + if (!is.na(root)) + cache <- file.path(root, "cache") + } + + if (!nzchar(cache)) { + tools <- asNamespace("tools") + if (is.function(tools$R_user_dir)) { + root <- tools$R_user_dir("renv", "cache") + cache <- file.path(root, "cache") + } + } + + # start completing path to cache + file.path( + cache, + renv_bootstrap_cache_version(), + renv_bootstrap_platform_prefix(), + "renv", + version, + md5, + "renv" + ) + + } + + renv_bootstrap_download_tarball <- function(version) { + + # if the user has provided the path to a tarball via + # an environment variable, then use it + tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) + if (is.na(tarball)) + return() + + # allow directories + if (dir.exists(tarball)) { + name <- sprintf("renv_%s.tar.gz", version) + tarball <- file.path(tarball, name) + } + + # bail if it doesn't exist + if (!file.exists(tarball)) { + + # let the user know we weren't able to honour their request + fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." + msg <- sprintf(fmt, tarball) + warning(msg) + + # bail + return() + + } + + catf("- Using local tarball '%s'.", tarball) + tarball + + } + + renv_bootstrap_github_token <- function() { + for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) { + envval <- Sys.getenv(envvar, unset = NA) + if (!is.na(envval)) + return(envval) + } + } + + renv_bootstrap_download_github <- function(version) { + + enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") + if (!identical(enabled, "TRUE")) + return(FALSE) + + # prepare download options + token <- renv_bootstrap_github_token() + if (is.null(token)) + token <- "" + + if (nzchar(Sys.which("curl")) && nzchar(token)) { + fmt <- "--location --fail --header \"Authorization: token %s\"" + extra <- sprintf(fmt, token) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "curl", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } else if (nzchar(Sys.which("wget")) && nzchar(token)) { + fmt <- "--header=\"Authorization: token %s\"" + extra <- sprintf(fmt, token) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "wget", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } + + url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) + name <- sprintf("renv_%s.tar.gz", version) + destfile <- file.path(tempdir(), name) + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (!identical(status, 0L)) + return(FALSE) + + renv_bootstrap_download_augment(destfile) + + return(destfile) + + } + + # Add Sha to DESCRIPTION. This is stop gap until #890, after which we + # can use renv::install() to fully capture metadata. + renv_bootstrap_download_augment <- function(destfile) { + sha <- renv_bootstrap_git_extract_sha1_tar(destfile) + if (is.null(sha)) { + return() + } + + # Untar + tempdir <- tempfile("renv-github-") + on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) + untar(destfile, exdir = tempdir) + pkgdir <- dir(tempdir, full.names = TRUE)[[1]] + + # Modify description + desc_path <- file.path(pkgdir, "DESCRIPTION") + desc_lines <- readLines(desc_path) + remotes_fields <- c( + "RemoteType: github", + "RemoteHost: api.github.com", + "RemoteRepo: renv", + "RemoteUsername: rstudio", + "RemotePkgRef: rstudio/renv", + paste("RemoteRef: ", sha), + paste("RemoteSha: ", sha) + ) + writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) + + # Re-tar + local({ + old <- setwd(tempdir) + on.exit(setwd(old), add = TRUE) + + tar(destfile, compression = "gzip") + }) + invisible() + } + + # Extract the commit hash from a git archive. Git archives include the SHA1 + # hash as the comment field of the tarball pax extended header + # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) + # For GitHub archives this should be the first header after the default one + # (512 byte) header. + renv_bootstrap_git_extract_sha1_tar <- function(bundle) { + + # open the bundle for reading + # We use gzcon for everything because (from ?gzcon) + # > Reading from a connection which does not supply a 'gzip' magic + # > header is equivalent to reading from the original connection + conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) + on.exit(close(conn)) + + # The default pax header is 512 bytes long and the first pax extended header + # with the comment should be 51 bytes long + # `52 comment=` (11 chars) + 40 byte SHA1 hash + len <- 0x200 + 0x33 + res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) + + if (grepl("^52 comment=", res)) { + sub("52 comment=", "", res) + } else { + NULL + } + } + + renv_bootstrap_install <- function(version, tarball, library) { + + # attempt to install it into project library + dir.create(library, showWarnings = FALSE, recursive = TRUE) + output <- renv_bootstrap_install_impl(library, tarball) + + # check for successful install + status <- attr(output, "status") + if (is.null(status) || identical(status, 0L)) + return(status) + + # an error occurred; report it + header <- "installation of renv failed" + lines <- paste(rep.int("=", nchar(header)), collapse = "") + text <- paste(c(header, lines, output), collapse = "\n") + stop(text) + + } + + renv_bootstrap_install_impl <- function(library, tarball) { + + # invoke using system2 so we can capture and report output + bin <- R.home("bin") + exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" + R <- file.path(bin, exe) + + args <- c( + "--vanilla", "CMD", "INSTALL", "--no-multiarch", + "-l", shQuote(path.expand(library)), + shQuote(path.expand(tarball)) + ) + + system2(R, args, stdout = TRUE, stderr = TRUE) + + } + + renv_bootstrap_platform_prefix_default <- function() { + + # read version component + version <- Sys.getenv("RENV_PATHS_VERSION", unset = "R-%v") + + # expand placeholders + placeholders <- list( + list("%v", format(getRversion()[1, 1:2])), + list("%V", format(getRversion()[1, 1:3])) + ) + + for (placeholder in placeholders) + version <- gsub(placeholder[[1L]], placeholder[[2L]], version, fixed = TRUE) + + # include SVN revision for development versions of R + # (to avoid sharing platform-specific artefacts with released versions of R) + devel <- + identical(R.version[["status"]], "Under development (unstable)") || + identical(R.version[["nickname"]], "Unsuffered Consequences") + + if (devel) + version <- paste(version, R.version[["svn rev"]], sep = "-r") + + version + + } + + renv_bootstrap_platform_prefix <- function() { + + # construct version prefix + version <- renv_bootstrap_platform_prefix_default() + + # build list of path components + components <- c(version, R.version$platform) + + # include prefix if provided by user + prefix <- renv_bootstrap_platform_prefix_impl() + if (!is.na(prefix) && nzchar(prefix)) + components <- c(prefix, components) + + # build prefix + paste(components, collapse = "/") + + } + + renv_bootstrap_platform_prefix_impl <- function() { + + # if an explicit prefix has been supplied, use it + prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) + if (!is.na(prefix)) + return(prefix) + + # if the user has requested an automatic prefix, generate it + auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) + if (is.na(auto) && getRversion() >= "4.4.0") + auto <- "TRUE" + + if (auto %in% c("TRUE", "True", "true", "1")) + return(renv_bootstrap_platform_prefix_auto()) + + # empty string on failure + "" + + } + + renv_bootstrap_platform_prefix_auto <- function() { + + prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) + if (inherits(prefix, "error") || prefix %in% "unknown") { + + msg <- paste( + "failed to infer current operating system", + "please file a bug report at https://github.com/rstudio/renv/issues", + sep = "; " + ) + + warning(msg) + + } + + prefix + + } + + renv_bootstrap_platform_os <- function() { + + sysinfo <- Sys.info() + sysname <- sysinfo[["sysname"]] + + # handle Windows + macOS up front + if (sysname == "Windows") + return("windows") + else if (sysname == "Darwin") + return("macos") + + # check for os-release files + for (file in c("/etc/os-release", "/usr/lib/os-release")) + if (file.exists(file)) + return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) + + # check for redhat-release files + if (file.exists("/etc/redhat-release")) + return(renv_bootstrap_platform_os_via_redhat_release()) + + "unknown" + + } + + renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { + + # read /etc/os-release + release <- utils::read.table( + file = file, + sep = "=", + quote = c("\"", "'"), + col.names = c("Key", "Value"), + comment.char = "#", + stringsAsFactors = FALSE + ) + + vars <- as.list(release$Value) + names(vars) <- release$Key + + # get os name + os <- tolower(sysinfo[["sysname"]]) + + # read id + id <- "unknown" + for (field in c("ID", "ID_LIKE")) { + if (field %in% names(vars) && nzchar(vars[[field]])) { + id <- vars[[field]] + break + } + } + + # read version + version <- "unknown" + for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { + if (field %in% names(vars) && nzchar(vars[[field]])) { + version <- vars[[field]] + break + } + } + + # join together + paste(c(os, id, version), collapse = "-") + + } + + renv_bootstrap_platform_os_via_redhat_release <- function() { + + # read /etc/redhat-release + contents <- readLines("/etc/redhat-release", warn = FALSE) + + # infer id + id <- if (grepl("centos", contents, ignore.case = TRUE)) + "centos" + else if (grepl("redhat", contents, ignore.case = TRUE)) + "redhat" + else + "unknown" + + # try to find a version component (very hacky) + version <- "unknown" + + parts <- strsplit(contents, "[[:space:]]")[[1L]] + for (part in parts) { + + nv <- tryCatch(numeric_version(part), error = identity) + if (inherits(nv, "error")) + next + + version <- nv[1, 1] + break + + } + + paste(c("linux", id, version), collapse = "-") + + } + + renv_bootstrap_library_root_name <- function(project) { + + # use project name as-is if requested + asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") + if (asis) + return(basename(project)) + + # otherwise, disambiguate based on project's path + id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) + paste(basename(project), id, sep = "-") + + } + + renv_bootstrap_library_root <- function(project) { + + prefix <- renv_bootstrap_profile_prefix() + + path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) + if (!is.na(path)) + return(paste(c(path, prefix), collapse = "/")) + + path <- renv_bootstrap_library_root_impl(project) + if (!is.null(path)) { + name <- renv_bootstrap_library_root_name(project) + return(paste(c(path, prefix, name), collapse = "/")) + } + + renv_bootstrap_paths_renv("library", project = project) + + } + + renv_bootstrap_library_root_impl <- function(project) { + + root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) + if (!is.na(root)) + return(root) + + type <- renv_bootstrap_project_type(project) + if (identical(type, "package")) { + userdir <- renv_bootstrap_user_dir() + return(file.path(userdir, "library")) + } + + } + + renv_bootstrap_validate_version <- function(version, description = NULL) { + + # resolve description file + # + # avoid passing lib.loc to `packageDescription()` below, since R will + # use the loaded version of the package by default anyhow. note that + # this function should only be called after 'renv' is loaded + # https://github.com/rstudio/renv/issues/1625 + description <- description %||% packageDescription("renv") + + # check whether requested version 'version' matches loaded version of renv + sha <- attr(version, "sha", exact = TRUE) + valid <- if (!is.null(sha)) + renv_bootstrap_validate_version_dev(sha, description) + else + renv_bootstrap_validate_version_release(version, description) + + if (valid) + return(TRUE) + + # the loaded version of renv doesn't match the requested version; + # give the user instructions on how to proceed + dev <- identical(description[["RemoteType"]], "github") + remote <- if (dev) + paste("rstudio/renv", description[["RemoteSha"]], sep = "@") + else + paste("renv", description[["Version"]], sep = "@") + + # display both loaded version + sha if available + friendly <- renv_bootstrap_version_friendly( + version = description[["Version"]], + sha = if (dev) description[["RemoteSha"]] + ) + + fmt <- heredoc(" + renv %1$s was loaded from project library, but this project is configured to use renv %2$s. + - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. + - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. + ") + catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) + + FALSE + + } + + renv_bootstrap_validate_version_dev <- function(version, description) { + + expected <- description[["RemoteSha"]] + if (!is.character(expected)) + return(FALSE) + + pattern <- sprintf("^\\Q%s\\E", version) + grepl(pattern, expected, perl = TRUE) + + } + + renv_bootstrap_validate_version_release <- function(version, description) { + expected <- description[["Version"]] + is.character(expected) && identical(c(expected), c(version)) + } + + renv_bootstrap_hash_text <- function(text) { + + hashfile <- tempfile("renv-hash-") + on.exit(unlink(hashfile), add = TRUE) + + writeLines(text, con = hashfile) + tools::md5sum(hashfile) + + } + + renv_bootstrap_load <- function(project, libpath, version) { + + # try to load renv from the project library + if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) + return(FALSE) + + # warn if the version of renv loaded does not match + renv_bootstrap_validate_version(version) + + # execute renv load hooks, if any + hooks <- getHook("renv::autoload") + for (hook in hooks) + if (is.function(hook)) + tryCatch(hook(), error = warnify) + + # load the project + renv::load(project) + + TRUE + + } + + renv_bootstrap_profile_load <- function(project) { + + # if RENV_PROFILE is already set, just use that + profile <- Sys.getenv("RENV_PROFILE", unset = NA) + if (!is.na(profile) && nzchar(profile)) + return(profile) + + # check for a profile file (nothing to do if it doesn't exist) + path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) + if (!file.exists(path)) + return(NULL) + + # read the profile, and set it if it exists + contents <- readLines(path, warn = FALSE) + if (length(contents) == 0L) + return(NULL) + + # set RENV_PROFILE + profile <- contents[[1L]] + if (!profile %in% c("", "default")) + Sys.setenv(RENV_PROFILE = profile) + + profile + + } + + renv_bootstrap_profile_prefix <- function() { + profile <- renv_bootstrap_profile_get() + if (!is.null(profile)) + return(file.path("profiles", profile, "renv")) + } + + renv_bootstrap_profile_get <- function() { + profile <- Sys.getenv("RENV_PROFILE", unset = "") + renv_bootstrap_profile_normalize(profile) + } + + renv_bootstrap_profile_set <- function(profile) { + profile <- renv_bootstrap_profile_normalize(profile) + if (is.null(profile)) + Sys.unsetenv("RENV_PROFILE") + else + Sys.setenv(RENV_PROFILE = profile) + } + + renv_bootstrap_profile_normalize <- function(profile) { + + if (is.null(profile) || profile %in% c("", "default")) + return(NULL) + + profile + + } + + renv_bootstrap_path_absolute <- function(path) { + + substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( + substr(path, 1L, 1L) %in% c(letters, LETTERS) && + substr(path, 2L, 3L) %in% c(":/", ":\\") + ) + + } + + renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { + renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") + root <- if (renv_bootstrap_path_absolute(renv)) NULL else project + prefix <- if (profile) renv_bootstrap_profile_prefix() + components <- c(root, renv, prefix, ...) + paste(components, collapse = "/") + } + + renv_bootstrap_project_type <- function(path) { + + descpath <- file.path(path, "DESCRIPTION") + if (!file.exists(descpath)) + return("unknown") + + desc <- tryCatch( + read.dcf(descpath, all = TRUE), + error = identity + ) + + if (inherits(desc, "error")) + return("unknown") + + type <- desc$Type + if (!is.null(type)) + return(tolower(type)) + + package <- desc$Package + if (!is.null(package)) + return("package") + + "unknown" + + } + + renv_bootstrap_user_dir <- function() { + dir <- renv_bootstrap_user_dir_impl() + path.expand(chartr("\\", "/", dir)) + } + + renv_bootstrap_user_dir_impl <- function() { + + # use local override if set + override <- getOption("renv.userdir.override") + if (!is.null(override)) + return(override) + + # use R_user_dir if available + tools <- asNamespace("tools") + if (is.function(tools$R_user_dir)) + return(tools$R_user_dir("renv", "cache")) + + # try using our own backfill for older versions of R + envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") + for (envvar in envvars) { + root <- Sys.getenv(envvar, unset = NA) + if (!is.na(root)) + return(file.path(root, "R/renv")) + } + + # use platform-specific default fallbacks + if (Sys.info()[["sysname"]] == "Windows") + file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") + else if (Sys.info()[["sysname"]] == "Darwin") + "~/Library/Caches/org.R-project.R/R/renv" + else + "~/.cache/R/renv" + + } + + renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { + sha <- sha %||% attr(version, "sha", exact = TRUE) + parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) + paste(parts, collapse = "") + } + + renv_bootstrap_exec <- function(project, libpath, version) { + if (!renv_bootstrap_load(project, libpath, version)) + renv_bootstrap_run(project, libpath, version) + } + + renv_bootstrap_run <- function(project, libpath, version) { + tryCatch( + renv_bootstrap_run_impl(project, libpath, version), + error = function(e) { + msg <- paste( + "failed to bootstrap renv: the project will not be loaded.", + paste("Reason:", conditionMessage(e)), + "Use `renv::activate()` to re-initialize the project.", + sep = "\n" + ) + warning(msg, call. = FALSE) + } + ) + } + + renv_bootstrap_run_impl <- function(project, libpath, version) { + + # perform bootstrap + bootstrap(version, libpath) + + # exit early if we're just testing bootstrap + if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) + return(TRUE) + + # try again to load + if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { + return(renv::load(project = project)) + } + + # failed to download or load renv; warn the user + msg <- c( + "Failed to find an renv installation: the project will not be loaded.", + "Use `renv::activate()` to re-initialize the project." + ) + + warning(paste(msg, collapse = "\n"), call. = FALSE) + + } + + renv_bootstrap_cache_version <- function() { + # NOTE: users should normally not override the cache version; + # this is provided just to make testing easier + Sys.getenv("RENV_CACHE_VERSION", unset = "v5") + } + + renv_bootstrap_cache_version_previous <- function() { + version <- renv_bootstrap_cache_version() + number <- as.integer(substring(version, 2L)) + paste("v", number - 1L, sep = "") + } + + renv_json_read <- function(file = NULL, text = NULL) { + + jlerr <- NULL + + # if jsonlite is loaded, use that instead + if ("jsonlite" %in% loadedNamespaces()) { + + json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) + if (!inherits(json, "error")) + return(json) + + jlerr <- json + + } + + # otherwise, fall back to the default JSON reader + json <- tryCatch(renv_json_read_default(file, text), error = identity) + if (!inherits(json, "error")) + return(json) + + # report an error + if (!is.null(jlerr)) + stop(jlerr) + else + stop(json) + + } + + renv_json_read_jsonlite <- function(file = NULL, text = NULL) { + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") + jsonlite::fromJSON(txt = text, simplifyVector = FALSE) + } + + renv_json_read_patterns <- function() { + + list( + + # objects + list("{", "\t\n\tobject(\t\n\t", TRUE), + list("}", "\t\n\t)\t\n\t", TRUE), + + # arrays + list("[", "\t\n\tarray(\t\n\t", TRUE), + list("]", "\n\t\n)\n\t\n", TRUE), + + # maps + list(":", "\t\n\t=\t\n\t", TRUE), + + # newlines + list("\\u000a", "\n", FALSE) + + ) + + } + + renv_json_read_envir <- function() { + + envir <- new.env(parent = emptyenv()) + + envir[["+"]] <- `+` + envir[["-"]] <- `-` + + envir[["object"]] <- function(...) { + result <- list(...) + names(result) <- as.character(names(result)) + result + } + + envir[["array"]] <- list + + envir[["true"]] <- TRUE + envir[["false"]] <- FALSE + envir[["null"]] <- NULL + + envir + + } + + renv_json_read_remap <- function(object, patterns) { + + # repair names if necessary + if (!is.null(names(object))) { + + nms <- names(object) + for (pattern in patterns) + nms <- gsub(pattern[[2L]], pattern[[1L]], nms, fixed = TRUE) + names(object) <- nms + + } + + # repair strings if necessary + if (is.character(object)) { + for (pattern in patterns) + object <- gsub(pattern[[2L]], pattern[[1L]], object, fixed = TRUE) + } + + # recurse for other objects + if (is.recursive(object)) + for (i in seq_along(object)) + object[i] <- list(renv_json_read_remap(object[[i]], patterns)) + + # return remapped object + object + + } + + renv_json_read_default <- function(file = NULL, text = NULL) { + + # read json text + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") + + # convert into something the R parser will understand + patterns <- renv_json_read_patterns() + transformed <- text + for (pattern in patterns) + transformed <- gsub(pattern[[1L]], pattern[[2L]], transformed, fixed = TRUE) + + # parse it + rfile <- tempfile("renv-json-", fileext = ".R") + on.exit(unlink(rfile), add = TRUE) + writeLines(transformed, con = rfile) + json <- parse(rfile, keep.source = FALSE, srcfile = NULL)[[1L]] + + # evaluate in safe environment + result <- eval(json, envir = renv_json_read_envir()) + + # fix up strings if necessary -- do so only with reversible patterns + patterns <- Filter(function(pattern) pattern[[3L]], patterns) + renv_json_read_remap(result, patterns) + + } + + + # load the renv profile, if any + renv_bootstrap_profile_load(project) + + # construct path to library root + root <- renv_bootstrap_library_root(project) + + # construct library prefix for platform + prefix <- renv_bootstrap_platform_prefix() + + # construct full libpath + libpath <- file.path(root, prefix) + + # run bootstrap code + renv_bootstrap_exec(project, libpath, version) + + invisible() + +}) diff --git a/tests/testthat/testPackage/renv/settings.json b/tests/testthat/testPackage/renv/settings.json new file mode 100644 index 0000000..46f2f31 --- /dev/null +++ b/tests/testthat/testPackage/renv/settings.json @@ -0,0 +1,21 @@ +{ + "bioconductor.version": null, + "external.libraries": [], + "ignored.packages": [], + "lockfile.sanitize": true, + "package.dependency.fields": [ + "Imports", + "Depends", + "LinkingTo" + ], + "ppm.enabled": null, + "ppm.ignored.urls": [], + "r.version": null, + "snapshot.dev": false, + "snapshot.type": "implicit", + "use.cache": true, + "vcs.ignore.cellar": true, + "vcs.ignore.library": true, + "vcs.ignore.local": true, + "vcs.manage.ignores": true +} diff --git a/tests/testthat/testPackage/testPackage.Rproj b/tests/testthat/testPackage/testPackage.Rproj new file mode 100644 index 0000000..69fafd4 --- /dev/null +++ b/tests/testthat/testPackage/testPackage.Rproj @@ -0,0 +1,22 @@ +Version: 1.0 + +RestoreWorkspace: No +SaveWorkspace: No +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +AutoAppendNewline: Yes +StripTrailingWhitespace: Yes +LineEndingConversion: Posix + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace diff --git a/tests/testthat/testPackage/tests/testthat.R b/tests/testthat/testPackage/tests/testthat.R new file mode 100644 index 0000000..e3034c3 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat.R @@ -0,0 +1,12 @@ +# This file is part of the standard setup for testthat. +# It is recommended that you do not modify it. +# +# Where should you do additional test configuration? +# Learn more about the roles of various files in: +# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview +# * https://testthat.r-lib.org/articles/special-files.html + +library(testthat) +library(testPackage) + +test_check("testPackage") diff --git a/tests/testthat/testPackage/tests/testthat/test-createCohorts.R b/tests/testthat/testPackage/tests/testthat/test-createCohorts.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-createCohorts.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-merge.R b/tests/testthat/testPackage/tests/testthat/test-merge.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-merge.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-objective1.R b/tests/testthat/testPackage/tests/testthat/test-objective1.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-objective1.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-objective2.R b/tests/testthat/testPackage/tests/testthat/test-objective2.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-objective2.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-objective3.R b/tests/testthat/testPackage/tests/testthat/test-objective3.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-objective3.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R b/tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R b/tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-runStudy.R b/tests/testthat/testPackage/tests/testthat/test-runStudy.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-runStudy.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/testPackage/tests/testthat/test-utils.R b/tests/testthat/testPackage/tests/testthat/test-utils.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/testPackage/tests/testthat/test-utils.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) From 544dc95ef0842712c4459ec74738825d7dd6839c Mon Sep 17 00:00:00 2001 From: Cristiana Di Tullio Date: Tue, 9 Jun 2026 15:17:33 +0200 Subject: [PATCH 03/14] Added path parameter to insertDocs() --- R/insertStructure.R | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/R/insertStructure.R b/R/insertStructure.R index 89527d5..6709168 100644 --- a/R/insertStructure.R +++ b/R/insertStructure.R @@ -73,10 +73,12 @@ installPackageBundle <- function(path) { #' #' @return #' No return value. -insertDocs <- function() { - usethis::use_news_md(open = FALSE) - usethis::use_readme_rmd(open = FALSE) - usethis::use_apl2_license() +insertDocs <- function(path) { + withr::with_dir(path, { + usethis::use_news_md(open = FALSE) + usethis::use_readme_rmd(open = FALSE) + usethis::use_apl2_license() + }) } @@ -202,10 +204,8 @@ insertStructure <- function( cli::cli_alert_info("Installing package bundle...") installPackageBundle(path) - withr::with_dir(path, { - cli::cli_alert_info("Inserting documentation files...") - insertDocs() - }) + cli::cli_alert_info("Inserting documentation files...") + insertDocs(path) cli::cli_alert_info("Inserting study files...") insertStudyFiles(path, n_obj) From 584fd9601d7f0ac3b07f0f7381c7f21ecef16606 Mon Sep 17 00:00:00 2001 From: Cristiana Di Tullio Date: Wed, 10 Jun 2026 14:52:16 +0200 Subject: [PATCH 04/14] updated tests and small modifications --- R/insertStructure.R | 42 ++++++++++++++------------- tests/testthat/test-insertStructure.R | 10 +++++++ 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/R/insertStructure.R b/R/insertStructure.R index 6709168..48b26c6 100644 --- a/R/insertStructure.R +++ b/R/insertStructure.R @@ -28,7 +28,6 @@ installPackageBundle <- function(path) { ) ) - # Install packages with renv if (!dir.exists(file.path(path, "renv"))) { cli::cli_abort( message = c( @@ -38,28 +37,31 @@ installPackageBundle <- function(path) { ) } - renv::install(complete_darwin$cran) - renv::install(complete_darwin$github) - - # Add dependencies (default type = "Imports") - pkg_names <- c( - complete_darwin$cran, - basename(complete_darwin$github) - ) - - if (!requireNamespace("usethis", quietly = TRUE)) { - cli::cli_inform( - "Installing required package: 'usethis'" + withr::with_dir(path, { + # Install packages with renv + renv::install(complete_darwin$cran) + renv::install(complete_darwin$github) + + # Add dependencies (default type = "Imports") + pkg_names <- c( + complete_darwin$cran, + basename(complete_darwin$github) ) - install.packages("usethis") - } - for (pkg in pkg_names) { - usethis::use_package(pkg) - } + if (!requireNamespace("usethis", quietly = TRUE)) { + cli::cli_inform( + "Installing required package: 'usethis'" + ) + install.packages("usethis") + } - # Update lockfile - renv::snapshot() + for (pkg in pkg_names) { + usethis::use_package(pkg) + } + + # Update lockfile + renv::snapshot() + }) # Return invisible package list invisible(pkg_names) diff --git a/tests/testthat/test-insertStructure.R b/tests/testthat/test-insertStructure.R index 5b437c8..456ef03 100644 --- a/tests/testthat/test-insertStructure.R +++ b/tests/testthat/test-insertStructure.R @@ -2,6 +2,8 @@ test_that("insertStructure works", { test_pkg_path <- testthat::test_path("testPackage") + insertStructure(path = test_pkg_path, n_obj = 3) + # Expect installed packages expect_true(dir.exists(file.path(test_pkg_path, "renv"))) expect_true(file.exists(file.path(test_pkg_path, "renv.lock"))) @@ -50,4 +52,12 @@ test_that("insertStructure works", { } } + # De-comment to reset testPackage structure before testing again + # unlink(file.path(test_pkg_path, c("extras", "inst", "tests")), recursive = TRUE, force = TRUE) + # unlink(list.files(file.path(test_pkg_path, "R"), full.names = TRUE), recursive = TRUE, force = TRUE) + # unlink(list.files(file.path(test_pkg_path, "man"), full.names = TRUE), recursive = TRUE, force = TRUE) + # unlink(file.path(test_pkg_path, c("NEWS.md", "README.Rmd", "LICENSE.md")), force = TRUE) + # desc$del_deps() + # desc$write() + }) From 503648f37fa6a681528c66d3c1a52b628cc489fb Mon Sep 17 00:00:00 2001 From: Cristiana Di Tullio Date: Mon, 8 Jun 2026 16:27:25 +0200 Subject: [PATCH 05/14] Added insertStructure() function and subfunctions --- NAMESPACE | 1 + R/insertStructure.R | 58 ++++++++++++++++++++++----------------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index e20ce00..58b8ee9 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,7 @@ export(arrangeCdmNames) export(assertCdmNames) export(createResultsDir) export(getPkgZips) +export(insertStructure) export(setLoggers) export(unZipStudyFiles) export(zipStudyFiles) diff --git a/R/insertStructure.R b/R/insertStructure.R index 48b26c6..89527d5 100644 --- a/R/insertStructure.R +++ b/R/insertStructure.R @@ -28,6 +28,7 @@ installPackageBundle <- function(path) { ) ) + # Install packages with renv if (!dir.exists(file.path(path, "renv"))) { cli::cli_abort( message = c( @@ -37,31 +38,28 @@ installPackageBundle <- function(path) { ) } - withr::with_dir(path, { - # Install packages with renv - renv::install(complete_darwin$cran) - renv::install(complete_darwin$github) - - # Add dependencies (default type = "Imports") - pkg_names <- c( - complete_darwin$cran, - basename(complete_darwin$github) - ) + renv::install(complete_darwin$cran) + renv::install(complete_darwin$github) - if (!requireNamespace("usethis", quietly = TRUE)) { - cli::cli_inform( - "Installing required package: 'usethis'" - ) - install.packages("usethis") - } + # Add dependencies (default type = "Imports") + pkg_names <- c( + complete_darwin$cran, + basename(complete_darwin$github) + ) - for (pkg in pkg_names) { - usethis::use_package(pkg) - } + if (!requireNamespace("usethis", quietly = TRUE)) { + cli::cli_inform( + "Installing required package: 'usethis'" + ) + install.packages("usethis") + } - # Update lockfile - renv::snapshot() - }) + for (pkg in pkg_names) { + usethis::use_package(pkg) + } + + # Update lockfile + renv::snapshot() # Return invisible package list invisible(pkg_names) @@ -75,12 +73,10 @@ installPackageBundle <- function(path) { #' #' @return #' No return value. -insertDocs <- function(path) { - withr::with_dir(path, { - usethis::use_news_md(open = FALSE) - usethis::use_readme_rmd(open = FALSE) - usethis::use_apl2_license() - }) +insertDocs <- function() { + usethis::use_news_md(open = FALSE) + usethis::use_readme_rmd(open = FALSE) + usethis::use_apl2_license() } @@ -206,8 +202,10 @@ insertStructure <- function( cli::cli_alert_info("Installing package bundle...") installPackageBundle(path) - cli::cli_alert_info("Inserting documentation files...") - insertDocs(path) + withr::with_dir(path, { + cli::cli_alert_info("Inserting documentation files...") + insertDocs() + }) cli::cli_alert_info("Inserting study files...") insertStudyFiles(path, n_obj) From 0034a9314ad05d5766f7aeb1b899fbff5eb7acbb Mon Sep 17 00:00:00 2001 From: cebarboza Date: Wed, 1 Jul 2026 14:09:31 +0200 Subject: [PATCH 06/14] test passing deleting extra files --- DESCRIPTION | 3 +- R/insertStructure.R | 30 +- docs/404.html | 74 + docs/404.md | 3 + docs/LICENSE.html | 133 + docs/LICENSE.md | 206 + docs/authors.html | 81 + docs/authors.md | 20 + .../bootstrap-5.3.8/bootstrap.bundle.min.js | 7 + .../bootstrap.bundle.min.js.map | 1 + docs/deps/bootstrap-5.3.8/bootstrap.min.css | 5 + .../bootstrap-toc-1.0.1/bootstrap-toc.min.js | 5 + .../deps/clipboard.js-2.0.11/clipboard.min.js | 7 + docs/deps/data-deps.txt | 13 + docs/deps/font-awesome-6.5.2/css/all.css | 8028 ++++++++++++ docs/deps/font-awesome-6.5.2/css/all.min.css | 9 + docs/deps/font-awesome-6.5.2/css/v4-shims.css | 2194 ++++ .../font-awesome-6.5.2/css/v4-shims.min.css | 6 + .../webfonts/fa-brands-400.ttf | Bin 0 -> 209128 bytes .../webfonts/fa-brands-400.woff2 | Bin 0 -> 117852 bytes .../webfonts/fa-regular-400.ttf | Bin 0 -> 67860 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 25392 bytes .../webfonts/fa-solid-900.ttf | Bin 0 -> 420332 bytes .../webfonts/fa-solid-900.woff2 | Bin 0 -> 156400 bytes .../webfonts/fa-v4compatibility.ttf | Bin 0 -> 10832 bytes .../webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4792 bytes docs/deps/headroom-0.11.0/headroom.min.js | 7 + .../headroom-0.11.0/jQuery.headroom.min.js | 7 + docs/deps/jquery-3.6.0/jquery-3.6.0.js | 10881 ++++++++++++++++ docs/deps/jquery-3.6.0/jquery-3.6.0.min.js | 2 + docs/deps/jquery-3.6.0/jquery-3.6.0.min.map | 1 + .../search-1.0.0/autocomplete.jquery.min.js | 7 + docs/deps/search-1.0.0/fuse.min.js | 9 + docs/deps/search-1.0.0/mark.min.js | 7 + docs/index.html | 138 + docs/index.md | 53 + docs/katex-auto.js | 16 + docs/lightswitch.js | 85 + docs/link.svg | 12 + docs/llms.txt | 75 + docs/news/index.html | 56 + docs/news/index.md | 5 + docs/pkgdown.js | 162 + docs/pkgdown.yml | 5 + docs/reference/arrangeCdmNames.html | 93 + docs/reference/arrangeCdmNames.md | 35 + docs/reference/assertCdmNames.html | 92 + docs/reference/assertCdmNames.md | 38 + docs/reference/createResultsDir.html | 104 + docs/reference/createResultsDir.md | 48 + docs/reference/figures/README-pressure-1.png | Bin 0 -> 22977 bytes docs/reference/getPkgZips.html | 119 + docs/reference/getPkgZips.md | 75 + docs/reference/index.html | 110 + docs/reference/index.md | 20 + docs/reference/setLoggers.html | 130 + docs/reference/setLoggers.md | 68 + docs/reference/unZipStudyFiles.html | 111 + docs/reference/unZipStudyFiles.md | 56 + docs/reference/zipStudyFiles.html | 106 + docs/reference/zipStudyFiles.md | 50 + docs/search.json | 1 + docs/sitemap.xml | 16 + renv.lock | 228 +- tests/testthat/test-insertStructure.R | 28 +- tests/testthat/testPackage/.Rbuildignore | 6 - tests/testthat/testPackage/.Rprofile | 1 - tests/testthat/testPackage/.gitignore | 1 - tests/testthat/testPackage/DESCRIPTION | 2 +- tests/testthat/testPackage/LICENSE.md | 194 - tests/testthat/testPackage/NAMESPACE | 2 - tests/testthat/testPackage/NEWS.md | 3 - tests/testthat/testPackage/R/createCohorts.R | 0 tests/testthat/testPackage/R/globals.R | 0 tests/testthat/testPackage/R/merge.R | 0 tests/testthat/testPackage/R/objective1.R | 0 tests/testthat/testPackage/R/objective2.R | 0 tests/testthat/testPackage/R/objective3.R | 0 tests/testthat/testPackage/R/pullFromAtlas.R | 0 tests/testthat/testPackage/R/runDiagnostics.R | 0 tests/testthat/testPackage/R/runStudy.R | 0 tests/testthat/testPackage/R/utils.R | 0 tests/testthat/testPackage/README.Rmd | 55 - tests/testthat/testPackage/extras/CodeToRun.R | 0 .../testPackage/extras/pullCohortsFromAtlas.R | 0 tests/testthat/testPackage/renv.lock | 5460 ++------ tests/testthat/testPackage/renv/.gitignore | 7 - tests/testthat/testPackage/renv/activate.R | 1438 -- tests/testthat/testPackage/renv/settings.json | 21 - tests/testthat/testPackage/testPackage.Rproj | 22 - tests/testthat/testPackage/tests/testthat.R | 12 - .../tests/testthat/test-createCohorts.R | 3 - .../testPackage/tests/testthat/test-merge.R | 3 - .../tests/testthat/test-objective1.R | 3 - .../tests/testthat/test-objective2.R | 3 - .../tests/testthat/test-objective3.R | 3 - .../tests/testthat/test-pullFromAtlas.R | 3 - .../tests/testthat/test-runDiagnostics.R | 3 - .../tests/testthat/test-runStudy.R | 3 - .../testPackage/tests/testthat/test-utils.R | 3 - 100 files changed, 24918 insertions(+), 6214 deletions(-) create mode 100644 docs/404.html create mode 100644 docs/404.md create mode 100644 docs/LICENSE.html create mode 100644 docs/LICENSE.md create mode 100644 docs/authors.html create mode 100644 docs/authors.md create mode 100644 docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js create mode 100644 docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js.map create mode 100644 docs/deps/bootstrap-5.3.8/bootstrap.min.css create mode 100644 docs/deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js create mode 100644 docs/deps/clipboard.js-2.0.11/clipboard.min.js create mode 100644 docs/deps/data-deps.txt create mode 100644 docs/deps/font-awesome-6.5.2/css/all.css create mode 100644 docs/deps/font-awesome-6.5.2/css/all.min.css create mode 100644 docs/deps/font-awesome-6.5.2/css/v4-shims.css create mode 100644 docs/deps/font-awesome-6.5.2/css/v4-shims.min.css create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 create mode 100644 docs/deps/headroom-0.11.0/headroom.min.js create mode 100644 docs/deps/headroom-0.11.0/jQuery.headroom.min.js create mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.js create mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.min.js create mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.min.map create mode 100644 docs/deps/search-1.0.0/autocomplete.jquery.min.js create mode 100644 docs/deps/search-1.0.0/fuse.min.js create mode 100644 docs/deps/search-1.0.0/mark.min.js create mode 100644 docs/index.html create mode 100644 docs/index.md create mode 100644 docs/katex-auto.js create mode 100644 docs/lightswitch.js create mode 100644 docs/link.svg create mode 100644 docs/llms.txt create mode 100644 docs/news/index.html create mode 100644 docs/news/index.md create mode 100644 docs/pkgdown.js create mode 100644 docs/pkgdown.yml create mode 100644 docs/reference/arrangeCdmNames.html create mode 100644 docs/reference/arrangeCdmNames.md create mode 100644 docs/reference/assertCdmNames.html create mode 100644 docs/reference/assertCdmNames.md create mode 100644 docs/reference/createResultsDir.html create mode 100644 docs/reference/createResultsDir.md create mode 100644 docs/reference/figures/README-pressure-1.png create mode 100644 docs/reference/getPkgZips.html create mode 100644 docs/reference/getPkgZips.md create mode 100644 docs/reference/index.html create mode 100644 docs/reference/index.md create mode 100644 docs/reference/setLoggers.html create mode 100644 docs/reference/setLoggers.md create mode 100644 docs/reference/unZipStudyFiles.html create mode 100644 docs/reference/unZipStudyFiles.md create mode 100644 docs/reference/zipStudyFiles.html create mode 100644 docs/reference/zipStudyFiles.md create mode 100644 docs/search.json create mode 100644 docs/sitemap.xml delete mode 100644 tests/testthat/testPackage/.Rbuildignore delete mode 100644 tests/testthat/testPackage/.Rprofile delete mode 100644 tests/testthat/testPackage/.gitignore delete mode 100644 tests/testthat/testPackage/LICENSE.md delete mode 100644 tests/testthat/testPackage/NAMESPACE delete mode 100644 tests/testthat/testPackage/NEWS.md delete mode 100644 tests/testthat/testPackage/R/createCohorts.R delete mode 100644 tests/testthat/testPackage/R/globals.R delete mode 100644 tests/testthat/testPackage/R/merge.R delete mode 100644 tests/testthat/testPackage/R/objective1.R delete mode 100644 tests/testthat/testPackage/R/objective2.R delete mode 100644 tests/testthat/testPackage/R/objective3.R delete mode 100644 tests/testthat/testPackage/R/pullFromAtlas.R delete mode 100644 tests/testthat/testPackage/R/runDiagnostics.R delete mode 100644 tests/testthat/testPackage/R/runStudy.R delete mode 100644 tests/testthat/testPackage/R/utils.R delete mode 100644 tests/testthat/testPackage/README.Rmd delete mode 100644 tests/testthat/testPackage/extras/CodeToRun.R delete mode 100644 tests/testthat/testPackage/extras/pullCohortsFromAtlas.R delete mode 100644 tests/testthat/testPackage/renv/.gitignore delete mode 100644 tests/testthat/testPackage/renv/activate.R delete mode 100644 tests/testthat/testPackage/renv/settings.json delete mode 100644 tests/testthat/testPackage/testPackage.Rproj delete mode 100644 tests/testthat/testPackage/tests/testthat.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-createCohorts.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-merge.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-objective1.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-objective2.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-objective3.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-runStudy.R delete mode 100644 tests/testthat/testPackage/tests/testthat/test-utils.R diff --git a/DESCRIPTION b/DESCRIPTION index 8f7a0b6..0210922 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,7 +29,8 @@ Imports: stringr, zip, here, - fs + fs, + usethis Config/roxygen2/version: 8.0.0 Suggests: testthat (>= 3.0.0) diff --git a/R/insertStructure.R b/R/insertStructure.R index 89527d5..8148914 100644 --- a/R/insertStructure.R +++ b/R/insertStructure.R @@ -9,7 +9,6 @@ #' @return #' An invisible list of the installed packages. installPackageBundle <- function(path) { - # Install default package bundle complete_darwin <- list( cran = c( @@ -63,7 +62,6 @@ installPackageBundle <- function(path) { # Return invisible package list invisible(pkg_names) - } @@ -92,9 +90,9 @@ insertDocs <- function() { #' @return #' No return value. insertStudyFiles <- function( - path = ".", - n_obj = 3 - ) { + path = ".", + n_obj = 3 +) { # R/ if ("hello.R" %in% list.files(file.path(path, "R"))) { unlink(file.path(path, "R/hello.R")) @@ -138,12 +136,14 @@ insertStudyFiles <- function( #' @return #' No return value. insertTests <- function( - path = "." - ) { - + path = "." +) { usethis::use_testthat() - if (!dir.exists(file.path(path, "R")) | length(list.files(file.path(path, "R"))) == 0) { + if ( + !dir.exists(file.path(path, "R")) | + length(list.files(file.path(path, "R"))) == 0 + ) { cli::cli_abort( message = c( "!" = "No .R files are found to generate tests", @@ -156,8 +156,9 @@ insertTests <- function( for (script in list.files(file.path(path, "R"))) { if (script == "globals.R") { next - } else{ # remove ".R" - usethis::use_test(substr(script, 1, nchar(script) -2), open = FALSE) + } else { + # remove ".R" + usethis::use_test(substr(script, 1, nchar(script) - 2), open = FALSE) } } } @@ -181,10 +182,9 @@ insertTests <- function( #' #' @export insertStructure <- function( - path = ".", - n_obj = 3 - ) { - + path = ".", + n_obj = 3 +) { # Need an existing package to run the function if (!file.exists(file.path(path, "DESCRIPTION"))) { cli::cli_abort( diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..482b1da --- /dev/null +++ b/docs/404.html @@ -0,0 +1,74 @@ + + + + + + + +Page not found (404) • studyGenerics + + + + + + + + Skip to contents + + +
+
+
+ +Content not found. Please use links in the navbar. + +
+
+ + +
+ + + +
+
+ + + + + + + diff --git a/docs/404.md b/docs/404.md new file mode 100644 index 0000000..5107f89 --- /dev/null +++ b/docs/404.md @@ -0,0 +1,3 @@ +Content not found. Please use links in the navbar. + +# Page not found (404) diff --git a/docs/LICENSE.html b/docs/LICENSE.html new file mode 100644 index 0000000..66fe661 --- /dev/null +++ b/docs/LICENSE.html @@ -0,0 +1,133 @@ + +Apache License • studyGenerics + Skip to contents + + +
+
+
+ +
+ +

Version 2.0, January 2004 <http://www.apache.org/licenses/>

+
+

Terms and Conditions for use, reproduction, and distribution

+
+

1. Definitions

+

“License” shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

+

“Licensor” shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

+

“Legal Entity” shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

+

“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License.

+

“Source” form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

+

“Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

+

“Work” shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

+

“Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

+

“Contribution” shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as “Not a Contribution.”

+

“Contributor” shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

+
+
+ +

Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

+
+
+

3. Grant of Patent License

+

Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

+
+
+

4. Redistribution

+

You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

+
  • +(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
  • +
  • +(b) You must cause any modified files to carry prominent notices stating that You changed the files; and
  • +
  • +(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
  • +
  • +(d) If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
  • +

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

+
+
+

5. Submission of Contributions

+

Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

+
+
+

6. Trademarks

+

This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

+
+
+

7. Disclaimer of Warranty

+

Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

+
+
+

8. Limitation of Liability

+

In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

+
+
+

9. Accepting Warranty or Additional Liability

+

While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

+

END OF TERMS AND CONDITIONS

+
+
+
+

APPENDIX: How to apply the Apache License to your work

+

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets [] replaced with your own identifying information. (Don’t include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same “printed page” as the copyright notice for easier identification within third-party archives.

+
Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+ +
+ + +
+ + + +
+ + + + + + + diff --git a/docs/LICENSE.md b/docs/LICENSE.md new file mode 100644 index 0000000..cdeff29 --- /dev/null +++ b/docs/LICENSE.md @@ -0,0 +1,206 @@ +# Apache License + +*Version 2.0, January 2004* *\<\>* + +### Terms and Conditions for use, reproduction, and distribution + +#### 1. Definitions + +“License” shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +“Licensor” shall mean the copyright owner or entity authorized by the +copyright owner that is granting the License. + +“Legal Entity” shall mean the union of the acting entity and all other +entities that control, are controlled by, or are under common control +with that entity. For the purposes of this definition, “control” means +**(i)** the power, direct or indirect, to cause the direction or +management of such entity, whether by contract or otherwise, or **(ii)** +ownership of fifty percent (50%) or more of the outstanding shares, or +**(iii)** beneficial ownership of such entity. + +“You” (or “Your”) shall mean an individual or Legal Entity exercising +permissions granted by this License. + +“Source” form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation source, +and configuration files. + +“Object” form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but not +limited to compiled object code, generated documentation, and +conversions to other media types. + +“Work” shall mean the work of authorship, whether in Source or Object +form, made available under the License, as indicated by a copyright +notice that is included in or attached to the work (an example is +provided in the Appendix below). + +“Derivative Works” shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +“Contribution” shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor +for inclusion in the Work by the copyright owner or by an individual or +Legal Entity authorized to submit on behalf of the copyright owner. For +the purposes of this definition, “submitted” means any form of +electronic, verbal, or written communication sent to the Licensor or its +representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated in +writing by the copyright owner as “Not a Contribution.” + +“Contributor” shall mean Licensor and any individual or Legal Entity on +behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +#### 2. Grant of Copyright License + +Subject to the terms and conditions of this License, each Contributor +hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, +royalty-free, irrevocable copyright license to reproduce, prepare +Derivative Works of, publicly display, publicly perform, sublicense, and +distribute the Work and such Derivative Works in Source or Object form. + +#### 3. Grant of Patent License + +Subject to the terms and conditions of this License, each Contributor +hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, +royalty-free, irrevocable (except as stated in this section) patent +license to make, have made, use, offer to sell, sell, import, and +otherwise transfer the Work, where such license applies only to those +patent claims licensable by such Contributor that are necessarily +infringed by their Contribution(s) alone or by combination of their +Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Work or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses granted to +You under this License for that Work shall terminate as of the date such +litigation is filed. + +#### 4. Redistribution + +You may reproduce and distribute copies of the Work or Derivative Works +thereof in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + +- **(a)** You must give any other recipients of the Work or Derivative + Works a copy of this License; and +- **(b)** You must cause any modified files to carry prominent notices + stating that You changed the files; and +- **(c)** You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices that + do not pertain to any part of the Derivative Works; and +- **(d)** If the Work includes a “NOTICE” text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained within + such NOTICE file, excluding those notices that do not pertain to any + part of the Derivative Works, in at least one of the following places: + within a NOTICE text file distributed as part of the Derivative Works; + within the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the Derivative + Works, if and wherever such third-party notices normally appear. The + contents of the NOTICE file are for informational purposes only and do + not modify the License. You may add Your own attribution notices + within Derivative Works that You distribute, alongside or as an + addendum to the NOTICE text from the Work, provided that such + additional attribution notices cannot be construed as modifying the + License. + +You may add Your own copyright statement to Your modifications and may +provide additional or different license terms and conditions for use, +reproduction, or distribution of Your modifications, or for any such +Derivative Works as a whole, provided Your use, reproduction, and +distribution of the Work otherwise complies with the conditions stated +in this License. + +#### 5. Submission of Contributions + +Unless You explicitly state otherwise, any Contribution intentionally +submitted for inclusion in the Work by You to the Licensor shall be +under the terms and conditions of this License, without any additional +terms or conditions. Notwithstanding the above, nothing herein shall +supersede or modify the terms of any separate license agreement you may +have executed with Licensor regarding such Contributions. + +#### 6. Trademarks + +This License does not grant permission to use the trade names, +trademarks, service marks, or product names of the Licensor, except as +required for reasonable and customary use in describing the origin of +the Work and reproducing the content of the NOTICE file. + +#### 7. Disclaimer of Warranty + +Unless required by applicable law or agreed to in writing, Licensor +provides the Work (and each Contributor provides its Contributions) on +an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +express or implied, including, without limitation, any warranties or +conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any risks +associated with Your exercise of permissions under this License. + +#### 8. Limitation of Liability + +In no event and under no legal theory, whether in tort (including +negligence), contract, or otherwise, unless required by applicable law +(such as deliberate and grossly negligent acts) or agreed to in writing, +shall any Contributor be liable to You for damages, including any +direct, indirect, special, incidental, or consequential damages of any +character arising as a result of this License or out of the use or +inability to use the Work (including but not limited to damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and +all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +#### 9. Accepting Warranty or Additional Liability + +While redistributing the Work or Derivative Works thereof, You may +choose to offer, and charge a fee for, acceptance of support, warranty, +indemnity, or other liability obligations and/or rights consistent with +this License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf of any +other Contributor, and only if You agree to indemnify, defend, and hold +each Contributor harmless for any liability incurred by, or claims +asserted against, such Contributor by reason of your accepting any such +warranty or additional liability. + +*END OF TERMS AND CONDITIONS* + +### APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets `[]` replaced +with your own identifying information. (Don’t include the brackets!) The +text should be enclosed in the appropriate comment syntax for the file +format. We also recommend that a file or class name and description of +purpose be included on the same “printed page” as the copyright notice +for easier identification within third-party archives. + +``` R +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/docs/authors.html b/docs/authors.html new file mode 100644 index 0000000..8a7e85d --- /dev/null +++ b/docs/authors.html @@ -0,0 +1,81 @@ + +Authors and Citation • studyGenerics + Skip to contents + + +
+
+
+ +
+

Authors

+ +
  • +

    Cesar Barboza. Author, maintainer. +

    +
  • +
  • +

    Arianna Alamshahi. Author. +

    +
  • +
+ +
+

Citation

+

+ +

Barboza C, Alamshahi A (2026). +studyGenerics: A centralised repository of tested and frequently used methods for OMOP-CDM studies. +R package version 0.1.0. +

+
@Manual{,
+  title = {studyGenerics: A centralised repository of tested and frequently used methods for OMOP-CDM studies},
+  author = {Cesar Barboza and Arianna Alamshahi},
+  year = {2026},
+  note = {R package version 0.1.0},
+}
+
+ +
+ + +
+ + + +
+ + + + + + + diff --git a/docs/authors.md b/docs/authors.md new file mode 100644 index 0000000..5ced296 --- /dev/null +++ b/docs/authors.md @@ -0,0 +1,20 @@ +# Authors and Citation + +## Authors + +- **Cesar Barboza**. Author, maintainer. + +- **Arianna Alamshahi**. Author. + +## Citation + +Barboza C, Alamshahi A (2026). *studyGenerics: A centralised repository +of tested and frequently used methods for OMOP-CDM studies*. R package +version 0.1.0. + + @Manual{, + title = {studyGenerics: A centralised repository of tested and frequently used methods for OMOP-CDM studies}, + author = {Cesar Barboza and Arianna Alamshahi}, + year = {2026}, + note = {R package version 0.1.0}, + } diff --git a/docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js b/docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js new file mode 100644 index 0000000..0b87369 --- /dev/null +++ b/docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.8 (https://getbootstrap.com/) + * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),t),s=t=>null==t?`${t}`:Object.prototype.toString.call(t).match(/\s([a-z]+)/i)[1].toLowerCase(),o=t=>{t.dispatchEvent(new Event(i))},r=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),a=t=>r(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,l=t=>{if(!r(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of p)t()}),p.push(e)):e()},_=(t,e=[],i=t)=>"function"==typeof t?t.call(...e):i,b=(t,e,n=!0)=>{if(!n)return void _(t);const s=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),_(t))};e.addEventListener(i,a),setTimeout(()=>{r||o(e)},s)},v=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,A=/::\d+$/,E={};let T=1;const C={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function x(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function k(t){const e=x(t);return t.uidEvent=e,E[e]=E[e]||{},E[e]}function L(t,e,i=null){return Object.values(t).find(t=>t.callable===e&&t.delegationSelector===i)}function S(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=N(t);return O.has(o)||(o=t),[n,s,o]}function D(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=S(e,i,n);if(e in C){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=k(t),c=l[a]||(l[a]={}),h=L(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=x(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return j(s,{delegateTarget:r}),n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return j(n,{delegateTarget:t}),i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function $(t,e,i,n,s){const o=L(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&$(t,e,i,r.callable,r.delegationSelector)}function N(t){return t=t.replace(w,""),C[t]||t}const P={on(t,e,i,n){D(t,e,i,n,!1)},one(t,e,i,n){D(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=k(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))I(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(A,"");a&&!e.includes(s)||$(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;$(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f();let s=null,o=!0,r=!0,a=!1;e!==N(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=j(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function j(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function F(t){return t.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const H={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter(t=>t.startsWith("bs")&&!t.startsWith("bsConfig"));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${F(e)}`))};class W{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=r(e)?H.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...r(e)?H.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[i,n]of Object.entries(e)){const e=t[i],o=r(e)?"element":s(e);if(!new RegExp(n).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${o}" but expected type "${n}".`)}}}class B extends W{constructor(t,i){super(),(t=a(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){b(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(a(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const z=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map(t=>n(t)).join(","):null},R={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,t).filter(t=>!c(t)&&l(t))},getSelectorFromElement(t){const e=z(t);return e&&R.findOne(e)?e:null},getElementFromSelector(t){const e=z(t);return e?R.findOne(e):null},getMultipleElementsFromSelector(t){const e=z(t);return e?R.find(e):[]}},q=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;P.on(document,i,`[data-bs-dismiss="${n}"]`,function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const s=R.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()})},V=".bs.alert",K=`close${V}`,Q=`closed${V}`;class X extends B{static get NAME(){return"alert"}close(){if(P.trigger(this._element,K).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),P.trigger(this._element,Q),this.dispose()}static jQueryInterface(t){return this.each(function(){const e=X.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}})}}q(X,"close"),g(X);const Y='[data-bs-toggle="button"]';class U extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each(function(){const e=U.getOrCreateInstance(this);"toggle"===t&&e[t]()})}}P.on(document,"click.bs.button.data-api",Y,t=>{t.preventDefault();const e=t.target.closest(Y);U.getOrCreateInstance(e).toggle()}),g(U);const G=".bs.swipe",J=`touchstart${G}`,Z=`touchmove${G}`,tt=`touchend${G}`,et=`pointerdown${G}`,it=`pointerup${G}`,nt={endCallback:null,leftCallback:null,rightCallback:null},st={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class ot extends W{constructor(t,e){super(),this._element=t,t&&ot.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return nt}static get DefaultType(){return st}static get NAME(){return"swipe"}dispose(){P.off(this._element,G)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),_(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&_(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(P.on(this._element,et,t=>this._start(t)),P.on(this._element,it,t=>this._end(t)),this._element.classList.add("pointer-event")):(P.on(this._element,J,t=>this._start(t)),P.on(this._element,Z,t=>this._move(t)),P.on(this._element,tt,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const rt=".bs.carousel",at=".data-api",lt="ArrowLeft",ct="ArrowRight",ht="next",dt="prev",ut="left",ft="right",pt=`slide${rt}`,mt=`slid${rt}`,gt=`keydown${rt}`,_t=`mouseenter${rt}`,bt=`mouseleave${rt}`,vt=`dragstart${rt}`,yt=`load${rt}${at}`,wt=`click${rt}${at}`,At="carousel",Et="active",Tt=".active",Ct=".carousel-item",Ot=Tt+Ct,xt={[lt]:ft,[ct]:ut},kt={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Lt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class St extends B{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=R.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===At&&this.cycle()}static get Default(){return kt}static get DefaultType(){return Lt}static get NAME(){return"carousel"}next(){this._slide(ht)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(dt)}pause(){this._isSliding&&o(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?P.one(this._element,mt,()=>this.cycle()):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void P.one(this._element,mt,()=>this.to(t));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?ht:dt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&P.on(this._element,gt,t=>this._keydown(t)),"hover"===this._config.pause&&(P.on(this._element,_t,()=>this.pause()),P.on(this._element,bt,()=>this._maybeEnableCycle())),this._config.touch&&ot.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of R.find(".carousel-item img",this._element))P.on(t,vt,t=>t.preventDefault());const t={leftCallback:()=>this._slide(this._directionToOrder(ut)),rightCallback:()=>this._slide(this._directionToOrder(ft)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new ot(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=xt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=R.findOne(Tt,this._indicatorsElement);e.classList.remove(Et),e.removeAttribute("aria-current");const i=R.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Et),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===ht,s=e||v(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>P.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(pt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),u(s),i.classList.add(l),s.classList.add(l),this._queueCallback(()=>{s.classList.remove(l,c),s.classList.add(Et),i.classList.remove(Et,c,l),this._isSliding=!1,r(mt)},i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return R.findOne(Ot,this._element)}_getItems(){return R.find(Ct,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return m()?t===ut?dt:ht:t===ut?ht:dt}_orderToDirection(t){return m()?t===dt?ut:ft:t===dt?ft:ut}static jQueryInterface(t){return this.each(function(){const e=St.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)})}}P.on(document,wt,"[data-bs-slide], [data-bs-slide-to]",function(t){const e=R.getElementFromSelector(this);if(!e||!e.classList.contains(At))return;t.preventDefault();const i=St.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===H.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())}),P.on(window,yt,()=>{const t=R.find('[data-bs-ride="carousel"]');for(const e of t)St.getOrCreateInstance(e)}),g(St);const Dt=".bs.collapse",$t=`show${Dt}`,It=`shown${Dt}`,Nt=`hide${Dt}`,Pt=`hidden${Dt}`,jt=`click${Dt}.data-api`,Mt="show",Ft="collapse",Ht="collapsing",Wt=`:scope .${Ft} .${Ft}`,Bt='[data-bs-toggle="collapse"]',zt={parent:null,toggle:!0},Rt={parent:"(null|element)",toggle:"boolean"};class qt extends B{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=R.find(Bt);for(const t of i){const e=R.getSelectorFromElement(t),i=R.find(e).filter(t=>t===this._element);null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return zt}static get DefaultType(){return Rt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(t=>t!==this._element).map(t=>qt.getOrCreateInstance(t,{toggle:!1}))),t.length&&t[0]._isTransitioning)return;if(P.trigger(this._element,$t).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Ft),this._element.classList.add(Ht),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Ht),this._element.classList.add(Ft,Mt),this._element.style[e]="",P.trigger(this._element,It)},this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,Nt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(Ht),this._element.classList.remove(Ft,Mt);for(const t of this._triggerArray){const e=R.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Ht),this._element.classList.add(Ft),P.trigger(this._element,Pt)},this._element,!0)}_isShown(t=this._element){return t.classList.contains(Mt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=a(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Bt);for(const e of t){const t=R.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=R.find(Wt,this._config.parent);return R.find(t,this._config.parent).filter(t=>!e.includes(t))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each(function(){const i=qt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}})}}P.on(document,jt,Bt,function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of R.getMultipleElementsFromSelector(this))qt.getOrCreateInstance(t,{toggle:!1}).toggle()}),g(qt);var Vt="top",Kt="bottom",Qt="right",Xt="left",Yt="auto",Ut=[Vt,Kt,Qt,Xt],Gt="start",Jt="end",Zt="clippingParents",te="viewport",ee="popper",ie="reference",ne=Ut.reduce(function(t,e){return t.concat([e+"-"+Gt,e+"-"+Jt])},[]),se=[].concat(Ut,[Yt]).reduce(function(t,e){return t.concat([e,e+"-"+Gt,e+"-"+Jt])},[]),oe="beforeRead",re="read",ae="afterRead",le="beforeMain",ce="main",he="afterMain",de="beforeWrite",ue="write",fe="afterWrite",pe=[oe,re,ae,le,ce,he,de,ue,fe];function me(t){return t?(t.nodeName||"").toLowerCase():null}function ge(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function _e(t){return t instanceof ge(t).Element||t instanceof Element}function be(t){return t instanceof ge(t).HTMLElement||t instanceof HTMLElement}function ve(t){return"undefined"!=typeof ShadowRoot&&(t instanceof ge(t).ShadowRoot||t instanceof ShadowRoot)}const ye={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach(function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];be(s)&&me(s)&&(Object.assign(s.style,i),Object.keys(n).forEach(function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)}))})},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach(function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce(function(t,e){return t[e]="",t},{});be(n)&&me(n)&&(Object.assign(n.style,o),Object.keys(s).forEach(function(t){n.removeAttribute(t)}))})}},requires:["computeStyles"]};function we(t){return t.split("-")[0]}var Ae=Math.max,Ee=Math.min,Te=Math.round;function Ce(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function Oe(){return!/^((?!chrome|android).)*safari/i.test(Ce())}function xe(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&be(t)&&(s=t.offsetWidth>0&&Te(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&Te(n.height)/t.offsetHeight||1);var r=(_e(t)?ge(t):window).visualViewport,a=!Oe()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function ke(t){var e=xe(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Le(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ve(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Se(t){return ge(t).getComputedStyle(t)}function De(t){return["table","td","th"].indexOf(me(t))>=0}function $e(t){return((_e(t)?t.ownerDocument:t.document)||window.document).documentElement}function Ie(t){return"html"===me(t)?t:t.assignedSlot||t.parentNode||(ve(t)?t.host:null)||$e(t)}function Ne(t){return be(t)&&"fixed"!==Se(t).position?t.offsetParent:null}function Pe(t){for(var e=ge(t),i=Ne(t);i&&De(i)&&"static"===Se(i).position;)i=Ne(i);return i&&("html"===me(i)||"body"===me(i)&&"static"===Se(i).position)?e:i||function(t){var e=/firefox/i.test(Ce());if(/Trident/i.test(Ce())&&be(t)&&"fixed"===Se(t).position)return null;var i=Ie(t);for(ve(i)&&(i=i.host);be(i)&&["html","body"].indexOf(me(i))<0;){var n=Se(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function je(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Me(t,e,i){return Ae(t,Ee(e,i))}function Fe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function He(t,e){return e.reduce(function(e,i){return e[i]=t,e},{})}const We={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=we(i.placement),l=je(a),c=[Xt,Qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Fe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:He(t,Ut))}(s.padding,i),d=ke(o),u="y"===l?Vt:Xt,f="y"===l?Kt:Qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=Pe(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Me(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Le(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Be(t){return t.split("-")[1]}var ze={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Re(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Xt,y=Vt,w=window;if(c){var A=Pe(i),E="clientHeight",T="clientWidth";A===ge(i)&&"static"!==Se(A=$e(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===Vt||(s===Xt||s===Qt)&&o===Jt)&&(y=Kt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Xt&&(s!==Vt&&s!==Kt||o!==Jt)||(v=Qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&ze),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:Te(i*s)/s||0,y:Te(n*s)/s||0}}({x:f,y:m},ge(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const qe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:we(e.placement),variation:Be(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,Re(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,Re(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var Ve={passive:!0};const Ke={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=ge(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach(function(t){t.addEventListener("scroll",i.update,Ve)}),a&&l.addEventListener("resize",i.update,Ve),function(){o&&c.forEach(function(t){t.removeEventListener("scroll",i.update,Ve)}),a&&l.removeEventListener("resize",i.update,Ve)}},data:{}};var Qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Xe(t){return t.replace(/left|right|bottom|top/g,function(t){return Qe[t]})}var Ye={start:"end",end:"start"};function Ue(t){return t.replace(/start|end/g,function(t){return Ye[t]})}function Ge(t){var e=ge(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Je(t){return xe($e(t)).left+Ge(t).scrollLeft}function Ze(t){var e=Se(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ti(t){return["html","body","#document"].indexOf(me(t))>=0?t.ownerDocument.body:be(t)&&Ze(t)?t:ti(Ie(t))}function ei(t,e){var i;void 0===e&&(e=[]);var n=ti(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=ge(n),r=s?[o].concat(o.visualViewport||[],Ze(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ei(Ie(r)))}function ii(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ni(t,e,i){return e===te?ii(function(t,e){var i=ge(t),n=$e(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Oe();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Je(t),y:l}}(t,i)):_e(e)?function(t,e){var i=xe(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):ii(function(t){var e,i=$e(t),n=Ge(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Ae(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Ae(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Je(t),l=-n.scrollTop;return"rtl"===Se(s||i).direction&&(a+=Ae(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}($e(t)))}function si(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?we(s):null,r=s?Be(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case Vt:e={x:a,y:i.y-n.height};break;case Kt:e={x:a,y:i.y+i.height};break;case Qt:e={x:i.x+i.width,y:l};break;case Xt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?je(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Gt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Jt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function oi(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Zt:a,c=i.rootBoundary,h=void 0===c?te:c,d=i.elementContext,u=void 0===d?ee:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Fe("number"!=typeof g?g:He(g,Ut)),b=u===ee?ie:ee,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ei(Ie(t)),i=["absolute","fixed"].indexOf(Se(t).position)>=0&&be(t)?Pe(t):t;return _e(i)?e.filter(function(t){return _e(t)&&Le(t,i)&&"body"!==me(t)}):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce(function(e,i){var s=ni(t,i,n);return e.top=Ae(s.top,e.top),e.right=Ee(s.right,e.right),e.bottom=Ee(s.bottom,e.bottom),e.left=Ae(s.left,e.left),e},ni(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(_e(y)?y:y.contextElement||$e(t.elements.popper),l,h,r),A=xe(t.elements.reference),E=si({reference:A,element:v,placement:s}),T=ii(Object.assign({},v,E)),C=u===ee?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===ee&&x){var k=x[s];Object.keys(O).forEach(function(t){var e=[Qt,Kt].indexOf(t)>=0?1:-1,i=[Vt,Kt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e})}return O}function ri(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?se:l,h=Be(n),d=h?a?ne:ne.filter(function(t){return Be(t)===h}):Ut,u=d.filter(function(t){return c.indexOf(t)>=0});0===u.length&&(u=d);var f=u.reduce(function(e,i){return e[i]=oi(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[we(i)],e},{});return Object.keys(f).sort(function(t,e){return f[t]-f[e]})}const ai={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=we(g),b=l||(_!==g&&p?function(t){if(we(t)===Yt)return[];var e=Xe(t);return[Ue(t),e,Ue(e)]}(g):[Xe(g)]),v=[g].concat(b).reduce(function(t,i){return t.concat(we(i)===Yt?ri(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)},[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=oi(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?Qt:Xt:k?Kt:Vt;y[S]>w[S]&&($=Xe($));var I=Xe($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every(function(t){return t})){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find(function(e){var i=A.get(e);if(i)return i.slice(0,t).every(function(t){return t})});if(e)return T=e,"break"},j=p?3:1;j>0&&"break"!==P(j);j--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function li(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ci(t){return[Vt,Qt,Kt,Xt].some(function(e){return t[e]>=0})}const hi={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=oi(e,{elementContext:"reference"}),a=oi(e,{altBoundary:!0}),l=li(r,n),c=li(a,s,o),h=ci(l),d=ci(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},di={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=se.reduce(function(t,i){return t[i]=function(t,e,i){var n=we(t),s=[Xt,Vt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Xt,Qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t},{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ui={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=si({reference:e.rects.reference,element:e.rects.popper,placement:e.placement})},data:{}},fi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=oi(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=we(e.placement),b=Be(e.placement),v=!b,y=je(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?Vt:Xt,D="y"===y?Kt:Qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],j=f?-T[$]/2:0,M=b===Gt?E[$]:T[$],F=b===Gt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?ke(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Me(0,E[$],W[$]),V=v?E[$]/2-j-q-z-O.mainAxis:M-q-z-O.mainAxis,K=v?-E[$]/2+j+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&Pe(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Me(f?Ee(N,I+V-Y-X):N,I,f?Ae(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?Vt:Xt,tt="x"===y?Kt:Qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[Vt,Xt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Me(t,e,i);return n>i?i:n}(at,et,lt):Me(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function pi(t,e,i){void 0===i&&(i=!1);var n,s,o=be(e),r=be(e)&&function(t){var e=t.getBoundingClientRect(),i=Te(e.width)/t.offsetWidth||1,n=Te(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=$e(e),l=xe(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==me(e)||Ze(a))&&(c=(n=e)!==ge(n)&&be(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Ge(n)),be(e)?((h=xe(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Je(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function mi(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}}),n.push(t)}return t.forEach(function(t){e.set(t.name,t)}),t.forEach(function(t){i.has(t.name)||s(t)}),n}var gi={placement:"bottom",modifiers:[],strategy:"absolute"};function _i(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(H.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..._(this._config.popperConfig,[void 0,t])}}_selectMenuItem({key:t,target:e}){const i=R.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(t=>l(t));i.length&&v(i,e,t===xi,!i.includes(e)).focus()}static jQueryInterface(t){return this.each(function(){const e=Qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}})}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=R.find(Mi);for(const i of e){const e=Qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Oi,xi].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(ji)?this:R.prev(this,ji)[0]||R.next(this,ji)[0]||R.findOne(ji,t.delegateTarget.parentNode),o=Qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}P.on(document,Ii,ji,Qi.dataApiKeydownHandler),P.on(document,Ii,Fi,Qi.dataApiKeydownHandler),P.on(document,$i,Qi.clearMenus),P.on(document,Ni,Qi.clearMenus),P.on(document,$i,ji,function(t){t.preventDefault(),Qi.getOrCreateInstance(this).toggle()}),g(Qi);const Xi="backdrop",Yi="show",Ui=`mousedown.bs.${Xi}`,Gi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ji={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Zi extends W{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Gi}static get DefaultType(){return Ji}static get NAME(){return Xi}show(t){if(!this._config.isVisible)return void _(t);this._append();const e=this._getElement();this._config.isAnimated&&u(e),e.classList.add(Yi),this._emulateAnimation(()=>{_(t)})}hide(t){this._config.isVisible?(this._getElement().classList.remove(Yi),this._emulateAnimation(()=>{this.dispose(),_(t)})):_(t)}dispose(){this._isAppended&&(P.off(this._element,Ui),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=a(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),P.on(t,Ui,()=>{_(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const tn=".bs.focustrap",en=`focusin${tn}`,nn=`keydown.tab${tn}`,sn="backward",on={autofocus:!0,trapElement:null},rn={autofocus:"boolean",trapElement:"element"};class an extends W{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return on}static get DefaultType(){return rn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),P.off(document,tn),P.on(document,en,t=>this._handleFocusin(t)),P.on(document,nn,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,P.off(document,tn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=R.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===sn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?sn:"forward")}}const ln=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",cn=".sticky-top",hn="padding-right",dn="margin-right";class un{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,hn,e=>e+t),this._setElementAttributes(ln,hn,e=>e+t),this._setElementAttributes(cn,dn,e=>e-t)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,hn),this._resetElementAttributes(ln,hn),this._resetElementAttributes(cn,dn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)})}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&H.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const i=H.getDataAttribute(t,e);null!==i?(H.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)})}_applyManipulationCallback(t,e){if(r(t))e(t);else for(const i of R.find(t,this._element))e(i)}}const fn=".bs.modal",pn=`hide${fn}`,mn=`hidePrevented${fn}`,gn=`hidden${fn}`,_n=`show${fn}`,bn=`shown${fn}`,vn=`resize${fn}`,yn=`click.dismiss${fn}`,wn=`mousedown.dismiss${fn}`,An=`keydown.dismiss${fn}`,En=`click${fn}.data-api`,Tn="modal-open",Cn="show",On="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},kn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ln extends B{constructor(t,e){super(t,e),this._dialog=R.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new un,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return kn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||P.trigger(this._element,_n,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Tn),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){this._isShown&&!this._isTransitioning&&(P.trigger(this._element,pn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated())))}dispose(){P.off(window,fn),P.off(this._dialog,fn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Zi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new an({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=R.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),u(this._element),this._element.classList.add(Cn),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,P.trigger(this._element,bn,{relatedTarget:t})},this._dialog,this._isAnimated())}_addEventListeners(){P.on(this._element,An,t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),P.on(window,vn,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),P.on(this._element,wn,t=>{P.one(this._element,yn,e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Tn),this._resetAdjustments(),this._scrollBar.reset(),P.trigger(this._element,gn)})}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(P.trigger(this._element,mn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(On)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(On),this._queueCallback(()=>{this._element.classList.remove(On),this._queueCallback(()=>{this._element.style.overflowY=e},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=m()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=m()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each(function(){const i=Ln.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}})}}P.on(document,En,'[data-bs-toggle="modal"]',function(t){const e=R.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),P.one(e,_n,t=>{t.defaultPrevented||P.one(e,gn,()=>{l(this)&&this.focus()})});const i=R.findOne(".modal.show");i&&Ln.getInstance(i).hide(),Ln.getOrCreateInstance(e).toggle(this)}),q(Ln),g(Ln);const Sn=".bs.offcanvas",Dn=".data-api",$n=`load${Sn}${Dn}`,In="show",Nn="showing",Pn="hiding",jn=".offcanvas.show",Mn=`show${Sn}`,Fn=`shown${Sn}`,Hn=`hide${Sn}`,Wn=`hidePrevented${Sn}`,Bn=`hidden${Sn}`,zn=`resize${Sn}`,Rn=`click${Sn}${Dn}`,qn=`keydown.dismiss${Sn}`,Vn={backdrop:!0,keyboard:!0,scroll:!1},Kn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Qn extends B{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Vn}static get DefaultType(){return Kn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||P.trigger(this._element,Mn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new un).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Nn),this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(In),this._element.classList.remove(Nn),P.trigger(this._element,Fn,{relatedTarget:t})},this._element,!0))}hide(){this._isShown&&(P.trigger(this._element,Hn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback(()=>{this._element.classList.remove(In,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new un).reset(),P.trigger(this._element,Bn)},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Zi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():P.trigger(this._element,Wn)}:null})}_initializeFocusTrap(){return new an({trapElement:this._element})}_addEventListeners(){P.on(this._element,qn,t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():P.trigger(this._element,Wn))})}static jQueryInterface(t){return this.each(function(){const e=Qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}})}}P.on(document,Rn,'[data-bs-toggle="offcanvas"]',function(t){const e=R.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;P.one(e,Bn,()=>{l(this)&&this.focus()});const i=R.findOne(jn);i&&i!==e&&Qn.getInstance(i).hide(),Qn.getOrCreateInstance(e).toggle(this)}),P.on(window,$n,()=>{for(const t of R.find(jn))Qn.getOrCreateInstance(t).show()}),P.on(window,zn,()=>{for(const t of R.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Qn.getOrCreateInstance(t).hide()}),q(Qn),g(Qn);const Xn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Yn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Un=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Gn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Yn.has(i)||Boolean(Un.test(t.nodeValue)):e.filter(t=>t instanceof RegExp).some(t=>t.test(i))},Jn={allowList:Xn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Zn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},ts={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends W{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Jn}static get DefaultType(){return Zn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},ts)}_setContent(t,e,i){const n=R.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?r(e)?this._putElementInTemplate(a(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Gn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return _(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const is=new Set(["sanitize","allowList","sanitizeFn"]),ns="fade",ss="show",os=".tooltip-inner",rs=".modal",as="hide.bs.modal",ls="hover",cs="focus",hs="click",ds={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},us={allowList:Xn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},fs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class ps extends B{constructor(t,e){if(void 0===Ai)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return us}static get DefaultType(){return fs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(rs),as,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=P.trigger(this._element,this.constructor.eventName("show")),e=(h(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.on(t,"mouseover",d);this._queueCallback(()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(this._isShown()&&!P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.off(t,"mouseover",d);this._activeTrigger[hs]=!1,this._activeTrigger[cs]=!1,this._activeTrigger[ls]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ns,ss),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ns),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new es({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[os]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ns)}_isShown(){return this.tip&&this.tip.classList.contains(ss)}_createPopper(t){const e=_(this._config.placement,[this,t,this._element]),i=ds[e.toUpperCase()];return wi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return _(t,[this._element,this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..._(this._config.popperConfig,[void 0,e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)P.on(this._element,this.constructor.eventName("click"),this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[hs]=!(e._isShown()&&e._activeTrigger[hs]),e.toggle()});else if("manual"!==e){const t=e===ls?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ls?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,t,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?cs:ls]=!0,e._enter()}),P.on(this._element,i,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?cs:ls]=e._element.contains(t.relatedTarget),e._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(rs),as,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=H.getDataAttributes(this._element);for(const t of Object.keys(e))is.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:a(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const e=ps.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}})}}g(ps);const ms=".popover-header",gs=".popover-body",_s={...ps.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},bs={...ps.DefaultType,content:"(null|string|element|function)"};class vs extends ps{static get Default(){return _s}static get DefaultType(){return bs}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[ms]:this._getTitle(),[gs]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const e=vs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}})}}g(vs);const ys=".bs.scrollspy",ws=`activate${ys}`,As=`click${ys}`,Es=`load${ys}.data-api`,Ts="active",Cs="[href]",Os=".nav-link",xs=`${Os}, .nav-item > ${Os}, .list-group-item`,ks={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Ls={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ss extends B{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ks}static get DefaultType(){return Ls}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=a(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map(t=>Number.parseFloat(t))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(P.off(this._config.target,As),P.on(this._config.target,As,Cs,t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=R.find(Cs,this._config.target);for(const e of t){if(!e.hash||c(e))continue;const t=R.findOne(decodeURI(e.hash),this._element);l(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Ts),this._activateParents(t),P.trigger(this._element,ws,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))R.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(Ts);else for(const e of R.parents(t,".nav, .list-group"))for(const t of R.prev(e,xs))t.classList.add(Ts)}_clearActiveClass(t){t.classList.remove(Ts);const e=R.find(`${Cs}.${Ts}`,t);for(const t of e)t.classList.remove(Ts)}static jQueryInterface(t){return this.each(function(){const e=Ss.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}})}}P.on(window,Es,()=>{for(const t of R.find('[data-bs-spy="scroll"]'))Ss.getOrCreateInstance(t)}),g(Ss);const Ds=".bs.tab",$s=`hide${Ds}`,Is=`hidden${Ds}`,Ns=`show${Ds}`,Ps=`shown${Ds}`,js=`click${Ds}`,Ms=`keydown${Ds}`,Fs=`load${Ds}`,Hs="ArrowLeft",Ws="ArrowRight",Bs="ArrowUp",zs="ArrowDown",Rs="Home",qs="End",Vs="active",Ks="fade",Qs="show",Xs=".dropdown-toggle",Ys=`:not(${Xs})`,Us='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Gs=`.nav-link${Ys}, .list-group-item${Ys}, [role="tab"]${Ys}, ${Us}`,Js=`.${Vs}[data-bs-toggle="tab"], .${Vs}[data-bs-toggle="pill"], .${Vs}[data-bs-toggle="list"]`;class Zs extends B{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),P.on(this._element,Ms,t=>this._keydown(t)))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?P.trigger(e,$s,{relatedTarget:t}):null;P.trigger(t,Ns,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Vs),this._activate(R.getElementFromSelector(t)),this._queueCallback(()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),P.trigger(t,Ps,{relatedTarget:e})):t.classList.add(Qs)},t,t.classList.contains(Ks)))}_deactivate(t,e){t&&(t.classList.remove(Vs),t.blur(),this._deactivate(R.getElementFromSelector(t)),this._queueCallback(()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),P.trigger(t,Is,{relatedTarget:e})):t.classList.remove(Qs)},t,t.classList.contains(Ks)))}_keydown(t){if(![Hs,Ws,Bs,zs,Rs,qs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter(t=>!c(t));let i;if([Rs,qs].includes(t.key))i=e[t.key===Rs?0:e.length-1];else{const n=[Ws,zs].includes(t.key);i=v(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Zs.getOrCreateInstance(i).show())}_getChildren(){return R.find(Gs,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=R.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=R.findOne(t,i);s&&s.classList.toggle(n,e)};n(Xs,Vs),n(".dropdown-menu",Qs),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Vs)}_getInnerElement(t){return t.matches(Gs)?t:R.findOne(Gs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each(function(){const e=Zs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}})}}P.on(document,js,Us,function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||Zs.getOrCreateInstance(this).show()}),P.on(window,Fs,()=>{for(const t of R.find(Js))Zs.getOrCreateInstance(t)}),g(Zs);const to=".bs.toast",eo=`mouseover${to}`,io=`mouseout${to}`,no=`focusin${to}`,so=`focusout${to}`,oo=`hide${to}`,ro=`hidden${to}`,ao=`show${to}`,lo=`shown${to}`,co="hide",ho="show",uo="showing",fo={animation:"boolean",autohide:"boolean",delay:"number"},po={animation:!0,autohide:!0,delay:5e3};class mo extends B{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return po}static get DefaultType(){return fo}static get NAME(){return"toast"}show(){P.trigger(this._element,ao).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(co),u(this._element),this._element.classList.add(ho,uo),this._queueCallback(()=>{this._element.classList.remove(uo),P.trigger(this._element,lo),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this.isShown()&&(P.trigger(this._element,oo).defaultPrevented||(this._element.classList.add(uo),this._queueCallback(()=>{this._element.classList.add(co),this._element.classList.remove(uo,ho),P.trigger(this._element,ro)},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(ho),super.dispose()}isShown(){return this._element.classList.contains(ho)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){P.on(this._element,eo,t=>this._onInteraction(t,!0)),P.on(this._element,io,t=>this._onInteraction(t,!1)),P.on(this._element,no,t=>this._onInteraction(t,!0)),P.on(this._element,so,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const e=mo.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}})}}return q(mo),g(mo),{Alert:X,Button:U,Carousel:St,Collapse:qt,Dropdown:Qi,Modal:Ln,Offcanvas:Qn,Popover:vs,ScrollSpy:Ss,Tab:Zs,Toast:mo,Tooltip:ps}}); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js.map b/docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js.map new file mode 100644 index 0000000..3e678d4 --- /dev/null +++ b/docs/deps/bootstrap-5.3.8/bootstrap.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","Object","prototype","toString","call","toLowerCase","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","value","_unused","defineProperty","configurable","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","VERSION","eventName","getSelector","hrefAttribute","trim","map","sel","join","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","DATA_API_KEY","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","ARROW_LEFT_KEY$1","ARROW_RIGHT_KEY$1","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","endCallBack","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","complete","getBoundingClientRect","selected","triggerArray","isOpen","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","forEach","styles","assign","effect","_ref2","initialStyles","position","options","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","isArray","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","display","popperConfig","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","Offcanvas","blur","completeCallback","DefaultAllowlist","area","br","col","code","dd","div","dl","dt","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","EVENT_CLICK","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","activeNodes","spy","HOME_KEY","END_KEY","SELECTOR_DROPDOWN_TOGGLE","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/dom/data.js","../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/util/scrollbar.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.8'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n // Private\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n // Private\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org/docs/v2/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [undefined, this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' +\n '
' +\n '
' +\n '
',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org/docs/v2/)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element, this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' +\n '
' +\n '

' +\n '
' +\n '
',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
    and
')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('
');n.attr("href","#"+e),n.text(t);var r=a("
  • ");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1 + + + + + + + + + + + + diff --git a/docs/deps/font-awesome-6.5.2/css/all.css b/docs/deps/font-awesome-6.5.2/css/all.css new file mode 100644 index 0000000..151dd57 --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/all.css @@ -0,0 +1,8028 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-table-cells-column-lock::before { + content: "\e678"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-table-cells-row-lock::before { + content: "\e67a"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-jxl:before { + content: "\e67b"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-square-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-web-awesome:before { + content: "\e682"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-square-upwork:before { + content: "\e67c"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-square-web-awesome:before { + content: "\e683"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-bluesky:before { + content: "\e671"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } diff --git a/docs/deps/font-awesome-6.5.2/css/all.min.css b/docs/deps/font-awesome-6.5.2/css/all.min.css new file mode 100644 index 0000000..269bcee --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } \ No newline at end of file diff --git a/docs/deps/font-awesome-6.5.2/css/v4-shims.css b/docs/deps/font-awesome-6.5.2/css/v4-shims.css new file mode 100644 index 0000000..ea60ea4 --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/v4-shims.css @@ -0,0 +1,2194 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-star-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-home:before { + content: "\f015"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-list-alt:before { + content: "\f022"; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-edit { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-edit:before { + content: "\f044"; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart:before { + content: "\e0e3"; } + +.fa.fa-bar-chart-o:before { + content: "\e0e3"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitter-square:before { + content: "\f081"; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square:before { + content: "\f082"; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-github-square:before { + content: "\f092"; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-globe:before { + content: "\f57d"; } + +.fa.fa-tasks:before { + content: "\f828"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-cut:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-save { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-save:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-magic:before { + content: "\e2ca"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f625"; } + +.fa.fa-dashboard:before { + content: "\f625"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard:before { + content: "\f0ea"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f0ed"; } + +.fa.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f5c0"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f5c0"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f5c0"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-unlink:before { + content: "\f127"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-unlock-alt:before { + content: "\f09c"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\24"; } + +.fa.fa-dollar:before { + content: "\24"; } + +.fa.fa-inr:before { + content: "\e1bc"; } + +.fa.fa-rupee:before { + content: "\e1bc"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f884"; } + +.fa.fa-sort-amount-desc:before { + content: "\f160"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-square:before { + content: "\f431"; } + +.fa.fa-youtube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square:before { + content: "\f169"; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square:before { + content: "\f174"; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo-square:before { + content: "\f194"; } + +.fa.fa-try:before { + content: "\e2bb"; } + +.fa.fa-turkish-lira:before { + content: "\e2bb"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square:before { + content: "\f1a2"; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square:before { + content: "\f1b5"; } + +.fa.fa-steam { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square:before { + content: "\f1b7"; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-cab:before { + content: "\f1ba"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-git-square:before { + content: "\f1d2"; } + +.fa.fa-git { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square:before { + content: "\f203"; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-transgender:before { + content: "\f224"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-transgender-alt:before { + content: "\f225"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-meetup { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } diff --git a/docs/deps/font-awesome-6.5.2/css/v4-shims.min.css b/docs/deps/font-awesome-6.5.2/css/v4-shims.min.css new file mode 100644 index 0000000..09baf5f --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/v4-shims.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf b/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1fbb1f7c32d46f5dcb89a50e10d00878ed43f1a1 GIT binary patch literal 209128 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%0AUSgWHQiFZ4^`_co**CW&|kdjzuG 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

    O#Re#lfxr>sz;}@f8bqwz1up1^t)%zofq!AG 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

    xA$6E^?#w4)r)%Sw3|NzgKHve*eJ-FKmx(duR9N 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 JOba38zW{E)cm@Cf literal 0 HcmV?d00001 diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 b/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5d28021697ff1f32507b1bcbcbf9e6a41d0ac99f GIT binary patch literal 117852 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%0DxnTep24BZG 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 G?NiJ&y^c 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 Nb?&+EAr}Jx001#^dC~v? literal 0 HcmV?d00001 diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf b/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..549d68dc023ff6e31b8774d784c2cfcc231e7976 GIT binary patch literal 67860 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%0A>X@lH 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 KISZn8x&9A2X%@x+ literal 0 HcmV?d00001 diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 b/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..18400d7fad27fc52cfbabbda495b871bd912d045 GIT binary patch literal 25392 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 z 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 `GTC$U2 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 JQkvHO^gqOStd#%& literal 0 HcmV?d00001 diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 b/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..758dd4f6070c7cb399334ae997ae9ff6523d3b55 GIT binary patch literal 156400 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 z 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 S`O1A00000000000000000000 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 S2VsmQO06}ypn7Xr@LvO5t4+KB literal 0 HcmV?d00001 diff --git a/docs/deps/headroom-0.11.0/headroom.min.js b/docs/deps/headroom-0.11.0/headroom.min.js new file mode 100644 index 0000000..433069f --- /dev/null +++ b/docs/deps/headroom-0.11.0/headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.11.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t,n){n=n||{},Object.assign(this,o.options,n),this.classes=Object.assign({},o.options.classes,n.classes),this.elem=t,this.tolerance=function(t){return t===Object(t)?t:{down:t,up:t}}(this.tolerance),this.initialised=!1,this.frozen=!1}return o.prototype={constructor:o,init:function(){return o.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},o.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},o.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),o}); \ No newline at end of file diff --git a/docs/deps/headroom-0.11.0/jQuery.headroom.min.js b/docs/deps/headroom-0.11.0/jQuery.headroom.min.js new file mode 100644 index 0000000..17f70c9 --- /dev/null +++ b/docs/deps/headroom-0.11.0/jQuery.headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(a){a&&(a.fn.headroom=function(b){return this.each(function(){var c=a(this),d=c.data("headroom"),e="object"==typeof b&&b;e=a.extend(!0,{},Headroom.options,e),d||(d=new Headroom(this,e),d.init(),c.data("headroom",d)),"string"==typeof b&&(d[b](),"destroy"===b&&c.removeData("headroom"))})},a("[data-headroom]").each(function(){var b=a(this);b.headroom(b.data())}))}(window.Zepto||window.jQuery); \ No newline at end of file diff --git a/docs/deps/jquery-3.6.0/jquery-3.6.0.js b/docs/deps/jquery-3.6.0/jquery-3.6.0.js new file mode 100644 index 0000000..fc6c299 --- /dev/null +++ b/docs/deps/jquery-3.6.0/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + Skip to contents + + +
    +
    +
    + + + +

    The goal of studyGenerics is to …

    +
    +

    Installation +

    +

    You can install the development version of studyGenerics from GitHub with:

    +
    +# install.packages("pak")
    +pak::pak("mi-erasmusmc/studyGenerics")
    +
    +
    +

    Example +

    +

    This is a basic example which shows you how to solve a common problem:

    +
    +library(studyGenerics)
    +#> Warning: replacing previous import 'httr::config' by 'renv::config' when
    +#> loading 'studyGenerics'
    +## basic example code
    +

    What is special about using README.Rmd instead of just README.md? You can include R chunks like so:

    +
    +summary(cars)
    +#>      speed           dist       
    +#>  Min.   : 4.0   Min.   :  2.00  
    +#>  1st Qu.:12.0   1st Qu.: 26.00  
    +#>  Median :15.0   Median : 36.00  
    +#>  Mean   :15.4   Mean   : 42.98  
    +#>  3rd Qu.:19.0   3rd Qu.: 56.00  
    +#>  Max.   :25.0   Max.   :120.00
    +

    You’ll still need to render README.Rmd regularly, to keep README.md up-to-date. devtools::build_readme() is handy for this.

    +

    You can also embed plots, for example:

    +

    +

    In that case, don’t forget to commit and push the resulting figure files, so they display on GitHub and CRAN.

    +
    +
    +
    +
    + + +
    + + + +
    +
    + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..06b9157 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,53 @@ +# studyGenerics + +The goal of studyGenerics is to … + +## Installation + +You can install the development version of studyGenerics from +[GitHub](https://github.com/) with: + +``` r + +# install.packages("pak") +pak::pak("mi-erasmusmc/studyGenerics") +``` + +## Example + +This is a basic example which shows you how to solve a common problem: + +``` r + +library(studyGenerics) +#> Warning: replacing previous import 'httr::config' by 'renv::config' when +#> loading 'studyGenerics' +## basic example code +``` + +What is special about using `README.Rmd` instead of just `README.md`? +You can include R chunks like so: + +``` r + +summary(cars) +#> speed dist +#> Min. : 4.0 Min. : 2.00 +#> 1st Qu.:12.0 1st Qu.: 26.00 +#> Median :15.0 Median : 36.00 +#> Mean :15.4 Mean : 42.98 +#> 3rd Qu.:19.0 3rd Qu.: 56.00 +#> Max. :25.0 Max. :120.00 +``` + +You’ll still need to render `README.Rmd` regularly, to keep `README.md` +up-to-date. +[`devtools::build_readme()`](https://devtools.r-lib.org/reference/build_readme.html) +is handy for this. + +You can also embed plots, for example: + +![](reference/figures/README-pressure-1.png) + +In that case, don’t forget to commit and push the resulting figure +files, so they display on GitHub and CRAN. diff --git a/docs/katex-auto.js b/docs/katex-auto.js new file mode 100644 index 0000000..2adab3a --- /dev/null +++ b/docs/katex-auto.js @@ -0,0 +1,16 @@ +// https://github.com/jgm/pandoc/blob/29fa97ab96b8e2d62d48326e1b949a71dc41f47a/src/Text/Pandoc/Writers/HTML.hs#L332-L345 +document.addEventListener("DOMContentLoaded", function () { + var mathElements = document.getElementsByClassName("math"); + var macros = []; + for (var i = 0; i < mathElements.length; i++) { + var texText = mathElements[i].firstChild; + if (mathElements[i].tagName == "SPAN") { + katex.render(texText.data, mathElements[i], { + displayMode: mathElements[i].classList.contains("display"), + throwOnError: false, + macros: macros, + fleqn: false + }); + } + } +}); diff --git a/docs/lightswitch.js b/docs/lightswitch.js new file mode 100644 index 0000000..3808ca1 --- /dev/null +++ b/docs/lightswitch.js @@ -0,0 +1,85 @@ + +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + * Updates for {pkgdown} by the {bslib} authors, also licensed under CC-BY-3.0. + */ + +const getStoredTheme = () => localStorage.getItem('theme') +const setStoredTheme = theme => localStorage.setItem('theme', theme) + +const getPreferredTheme = () => { + const storedTheme = getStoredTheme() + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' +} + +const setTheme = theme => { + if (theme === 'auto') { + document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')) + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + } +} + +function bsSetupThemeToggle() { + 'use strict' + + const showActiveTheme = (theme, focus = false) => { + var activeLabel, activeIcon; + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + const buttonTheme = element.getAttribute('data-bs-theme-value') + const isActive = buttonTheme == theme + + element.classList.toggle('active', isActive) + element.setAttribute('aria-pressed', isActive) + + if (isActive) { + activeLabel = element.textContent; + activeIcon = element.querySelector('span').classList.value; + } + }) + + const themeSwitcher = document.querySelector('#dropdown-lightswitch') + if (!themeSwitcher) { + return + } + + themeSwitcher.setAttribute('aria-label', activeLabel) + themeSwitcher.querySelector('span').classList.value = activeIcon; + + if (focus) { + themeSwitcher.focus() + } + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + const storedTheme = getStoredTheme() + if (storedTheme !== 'light' && storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document + .querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + setTheme(theme) + setStoredTheme(theme) + showActiveTheme(theme, true) + }) + }) + }) +} + +setTheme(getPreferredTheme()); +bsSetupThemeToggle(); diff --git a/docs/link.svg b/docs/link.svg new file mode 100644 index 0000000..88ad827 --- /dev/null +++ b/docs/link.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/docs/llms.txt b/docs/llms.txt new file mode 100644 index 0000000..8aa7c7e --- /dev/null +++ b/docs/llms.txt @@ -0,0 +1,75 @@ +# studyGenerics + +The goal of studyGenerics is to … + +## Installation + +You can install the development version of studyGenerics from +[GitHub](https://github.com/) with: + +``` r + +# install.packages("pak") +pak::pak("mi-erasmusmc/studyGenerics") +``` + +## Example + +This is a basic example which shows you how to solve a common problem: + +``` r + +library(studyGenerics) +#> Warning: replacing previous import 'httr::config' by 'renv::config' when +#> loading 'studyGenerics' +## basic example code +``` + +What is special about using `README.Rmd` instead of just `README.md`? +You can include R chunks like so: + +``` r + +summary(cars) +#> speed dist +#> Min. : 4.0 Min. : 2.00 +#> 1st Qu.:12.0 1st Qu.: 26.00 +#> Median :15.0 Median : 36.00 +#> Mean :15.4 Mean : 42.98 +#> 3rd Qu.:19.0 3rd Qu.: 56.00 +#> Max. :25.0 Max. :120.00 +``` + +You’ll still need to render `README.Rmd` regularly, to keep `README.md` +up-to-date. +[`devtools::build_readme()`](https://devtools.r-lib.org/reference/build_readme.html) +is handy for this. + +You can also embed plots, for example: + +![](reference/figures/README-pressure-1.png) + +In that case, don’t forget to commit and push the resulting figure +files, so they display on GitHub and CRAN. + +# Package index + +## All functions + +- [`arrangeCdmNames()`](arrangeCdmNames.md) : \`arrangeCdmNames()\` + verifies if data partner's acronyms are valie and returns a vector + ordered by country alphabetical order +- [`assertCdmNames()`](assertCdmNames.md) : \`assertCdmNames()\` + verifies if data partner's names are correct and display an error if + incorrect +- [`createResultsDir()`](createResultsDir.md) : Create directory for + analysis results +- [`getPkgZips()`](getPkgZips.md) : Download zip-compressed Windows + binaries from a renv.lock file +- [`setLoggers()`](setLoggers.md) : \`setLoggers()\` as text files in + the results directory +- [`unZipStudyFiles()`](unZipStudyFiles.md) : \`unZipStudyFiles()\` + uncompress study results +- [`zipStudyFiles()`](zipStudyFiles.md) : \`zipStudyFiles()\` compress + study results + diff --git a/docs/news/index.html b/docs/news/index.html new file mode 100644 index 0000000..2870ea3 --- /dev/null +++ b/docs/news/index.html @@ -0,0 +1,56 @@ + +Changelog • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    studyGenerics 0.1.0

    +
    • Initial CRAN submission.
    • +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/news/index.md b/docs/news/index.md new file mode 100644 index 0000000..11744ac --- /dev/null +++ b/docs/news/index.md @@ -0,0 +1,5 @@ +# Changelog + +## studyGenerics 0.1.0 + +- Initial CRAN submission. diff --git a/docs/pkgdown.js b/docs/pkgdown.js new file mode 100644 index 0000000..0a5573a --- /dev/null +++ b/docs/pkgdown.js @@ -0,0 +1,162 @@ +/* http://gregfranko.com/blog/jquery-best-practices/ */ +(function ($) { + $(function () { + + $('nav.navbar').headroom(); + + Toc.init({ + $nav: $("#toc"), + $scope: $("main h2, main h3, main h4, main h5, main h6") + }); + + if ($('#toc').length) { + $('body').scrollspy({ + target: '#toc', + offset: $("nav.navbar").outerHeight() + 1 + }); + } + + // Activate popovers + $('[data-bs-toggle="popover"]').popover({ + container: 'body', + html: true, + trigger: 'focus', + placement: "top", + sanitize: false, + }); + + $('[data-bs-toggle="tooltip"]').tooltip(); + + /* Clipboard --------------------------*/ + + function changeTooltipMessage(element, msg) { + var tooltipOriginalTitle = element.getAttribute('data-bs-original-title'); + element.setAttribute('data-bs-original-title', msg); + $(element).tooltip('show'); + element.setAttribute('data-bs-original-title', tooltipOriginalTitle); + } + + if (ClipboardJS.isSupported()) { + $(document).ready(function () { + var copyButton = ""; + + $("div.sourceCode").addClass("hasCopyButton"); + + // Insert copy buttons: + $(copyButton).prependTo(".hasCopyButton"); + + // Initialize tooltips: + $('.btn-copy-ex').tooltip({ container: 'body' }); + + // Initialize clipboard: + var clipboard = new ClipboardJS('[data-clipboard-copy]', { + text: function (trigger) { + return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); + } + }); + + clipboard.on('success', function (e) { + changeTooltipMessage(e.trigger, 'Copied!'); + e.clearSelection(); + }); + + clipboard.on('error', function (e) { + changeTooltipMessage(e.trigger, 'Press Ctrl+C or Command+C to copy'); + }); + + }); + } + + /* Search marking --------------------------*/ + var url = new URL(window.location.href); + var toMark = url.searchParams.get("q"); + var mark = new Mark("main#main"); + if (toMark) { + mark.mark(toMark, { + accuracy: { + value: "complementary", + limiters: [",", ".", ":", "/"], + } + }); + } + + /* Search --------------------------*/ + /* Adapted from https://github.com/rstudio/bookdown/blob/2d692ba4b61f1e466c92e78fd712b0ab08c11d31/inst/resources/bs4_book/bs4_book.js#L25 */ + // Initialise search index on focus + var fuse; + $("#search-input").focus(async function (e) { + if (fuse) { + return; + } + + $(e.target).addClass("loading"); + var response = await fetch($("#search-input").data("search-index")); + var data = await response.json(); + + var options = { + keys: ["what", "text", "code"], + ignoreLocation: true, + threshold: 0.1, + includeMatches: true, + includeScore: true, + }; + fuse = new Fuse(data, options); + + $(e.target).removeClass("loading"); + }); + + // Use algolia autocomplete + var options = { + autoselect: true, + debug: true, + hint: false, + minLength: 2, + }; + var q; + async function searchFuse(query, callback) { + await fuse; + + var items; + if (!fuse) { + items = []; + } else { + q = query; + var results = fuse.search(query, { limit: 20 }); + items = results + .filter((x) => x.score <= 0.75) + .map((x) => x.item); + if (items.length === 0) { + items = [{ dir: "Sorry 😿", previous_headings: "", title: "No results found.", what: "No results found.", path: window.location.href }]; + } + } + callback(items); + } + $("#search-input").autocomplete(options, [ + { + name: "content", + source: searchFuse, + templates: { + suggestion: (s) => { + if (s.title == s.what) { + return `${s.dir} >
    ${s.title}
    `; + } else if (s.previous_headings == "") { + return `${s.dir} >
    ${s.title}
    > ${s.what}`; + } else { + return `${s.dir} >
    ${s.title}
    > ${s.previous_headings} > ${s.what}`; + } + }, + }, + }, + ]).on('autocomplete:selected', function (event, s) { + window.location.href = s.path + "?q=" + q + "#" + s.id; + }); + }); +})(window.jQuery || window.$) + +document.addEventListener('keydown', function (event) { + // Check if the pressed key is '/' + if (event.key === '/') { + event.preventDefault(); // Prevent any default action associated with the '/' key + document.getElementById('search-input').focus(); // Set focus to the search input + } +}); diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml new file mode 100644 index 0000000..ad62b59 --- /dev/null +++ b/docs/pkgdown.yml @@ -0,0 +1,5 @@ +pandoc: 3.9.0.2 +pkgdown: 2.2.0 +pkgdown_sha: ~ +articles: {} +last_built: 2026-06-07T16:00Z diff --git a/docs/reference/arrangeCdmNames.html b/docs/reference/arrangeCdmNames.html new file mode 100644 index 0000000..2f99637 --- /dev/null +++ b/docs/reference/arrangeCdmNames.html @@ -0,0 +1,93 @@ + +`arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order — arrangeCdmNames • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    `arrangeCdmNames()` verifies if data partner's acronyms are valie +and returns a vector ordered by country alphabetical order

    +
    + +
    +

    Usage

    +
    arrangeCdmNames(labels)
    +
    + +
    +

    Arguments

    + + +
    labels
    +

    A character vector of data partners acronyms

    + +
    +
    +

    Value

    +

    A character vector

    +
    + +
    +

    Examples

    +
    # Verifies acronyms are valid and sorts them in the correct order
    +labels <- c(
    +  "BCR",
    +  "IQVIA US - PMTX+",
    +  "IQVIA US - AmbEMR",
    +  "IQVIA LPD Belgium"
    +  )
    +arrangeCdmNames(labels = labels)
    +#> [1] "BCR"               "IQVIA LPD Belgium" "IQVIA US - AmbEMR"
    +#> [4] "IQVIA US - PMTX+" 
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/arrangeCdmNames.md b/docs/reference/arrangeCdmNames.md new file mode 100644 index 0000000..86c7cfc --- /dev/null +++ b/docs/reference/arrangeCdmNames.md @@ -0,0 +1,35 @@ +# \`arrangeCdmNames()\` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order + +\`arrangeCdmNames()\` verifies if data partner's acronyms are valie and +returns a vector ordered by country alphabetical order + +## Usage + +``` r +arrangeCdmNames(labels) +``` + +## Arguments + +- labels: + + A character vector of data partners acronyms + +## Value + +A character vector + +## Examples + +``` r +# Verifies acronyms are valid and sorts them in the correct order +labels <- c( + "BCR", + "IQVIA US - PMTX+", + "IQVIA US - AmbEMR", + "IQVIA LPD Belgium" + ) +arrangeCdmNames(labels = labels) +#> [1] "BCR" "IQVIA LPD Belgium" "IQVIA US - AmbEMR" +#> [4] "IQVIA US - PMTX+" +``` diff --git a/docs/reference/assertCdmNames.html b/docs/reference/assertCdmNames.html new file mode 100644 index 0000000..7929941 --- /dev/null +++ b/docs/reference/assertCdmNames.html @@ -0,0 +1,92 @@ + +`assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect — assertCdmNames • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    `assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect

    +
    + +
    +

    Usage

    +
    assertCdmNames(labels, expected)
    +
    + +
    +

    Arguments

    + + +
    labels
    +

    A character vector of data partner acronyms

    + + +
    expected
    +

    A character vector of expected data partner acronyms. If omitted, the package's built-in CDM names are used.

    + +
    +
    +

    Value

    +

    Invisible if labels are correct

    +
    + +
    +

    Examples

    +
    # Assert if acronyms are correct
    +labels <- c(
    +  "BCR",
    +  "IQVIA LPD Belgium",
    +  "IQVIA US - AmbEMR",
    +  "IQVIA US - PMTX+"
    +)
    +assertCdmNames(labels = labels)
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/assertCdmNames.md b/docs/reference/assertCdmNames.md new file mode 100644 index 0000000..9377bf7 --- /dev/null +++ b/docs/reference/assertCdmNames.md @@ -0,0 +1,38 @@ +# \`assertCdmNames()\` verifies if data partner's names are correct and display an error if incorrect + +\`assertCdmNames()\` verifies if data partner's names are correct and +display an error if incorrect + +## Usage + +``` r +assertCdmNames(labels, expected) +``` + +## Arguments + +- labels: + + A character vector of data partner acronyms + +- expected: + + A character vector of expected data partner acronyms. If omitted, the + package's built-in CDM names are used. + +## Value + +Invisible if labels are correct + +## Examples + +``` r +# Assert if acronyms are correct +labels <- c( + "BCR", + "IQVIA LPD Belgium", + "IQVIA US - AmbEMR", + "IQVIA US - PMTX+" +) +assertCdmNames(labels = labels) +``` diff --git a/docs/reference/createResultsDir.html b/docs/reference/createResultsDir.html new file mode 100644 index 0000000..f79a9d3 --- /dev/null +++ b/docs/reference/createResultsDir.html @@ -0,0 +1,104 @@ + +Create directory for analysis results — createResultsDir • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    Creates a subdirectory for results based on the database name within a +specified output directory. If the output directory is not provided, the +current working directory is used.

    +
    + +
    +

    Usage

    +
    createResultsDir(outputDir = NULL, dbname)
    +
    + +
    +

    Arguments

    + + +
    outputDir
    +

    Character string. The path to the main output folder. +If NULL, defaults to the current working directory. Default NULL.

    + + +
    dbname
    +

    Character string. The name of the database, used to suffix +the results folder (e.g., "results_dbname").

    + +
    +
    +

    Value

    +

    A list containing three elements:

    • outputDir: The path to the main output directory.

    • +
    • resultsDir: The path to the specific results subdirectory created.

    • +
    • resultsDirName: The name of the results subdirectory.

    • +
    + +
    +

    Examples

    +
    outputDir <- file.path(
    +   tempdir(),
    +   "examples"
    +)
    +directories <- createResultsDir(
    +   outputDir,
    +   dbname = "OMOP"
    +   )
    +#>  Creating locations to save results
    +unlink(outputDir, recursive = TRUE)
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/createResultsDir.md b/docs/reference/createResultsDir.md new file mode 100644 index 0000000..a4dabd4 --- /dev/null +++ b/docs/reference/createResultsDir.md @@ -0,0 +1,48 @@ +# Create directory for analysis results + +Creates a subdirectory for results based on the database name within a +specified output directory. If the output directory is not provided, the +current working directory is used. + +## Usage + +``` r +createResultsDir(outputDir = NULL, dbname) +``` + +## Arguments + +- outputDir: + + Character string. The path to the main output folder. If NULL, + defaults to the current working directory. Default NULL. + +- dbname: + + Character string. The name of the database, used to suffix the results + folder (e.g., "results_dbname"). + +## Value + +A list containing three elements: + +- `outputDir`: The path to the main output directory. + +- `resultsDir`: The path to the specific results subdirectory created. + +- `resultsDirName`: The name of the results subdirectory. + +## Examples + +``` r +outputDir <- file.path( + tempdir(), + "examples" +) +directories <- createResultsDir( + outputDir, + dbname = "OMOP" + ) +#> ℹ Creating locations to save results +unlink(outputDir, recursive = TRUE) +``` diff --git a/docs/reference/figures/README-pressure-1.png b/docs/reference/figures/README-pressure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4e507c3cc094d73ef5614d37751c77c4fc2b807d GIT binary patch literal 22977 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 RzC0BrC#5Wzb;aP({{dT8wb=jw literal 0 HcmV?d00001 diff --git a/docs/reference/getPkgZips.html b/docs/reference/getPkgZips.html new file mode 100644 index 0000000..82d9062 --- /dev/null +++ b/docs/reference/getPkgZips.html @@ -0,0 +1,119 @@ + +Download zip-compressed Windows binaries from a renv.lock file — getPkgZips • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    A function that locates and downloads Windows binaries (.zip) from CRAN based on packages specified in a renv.lock file.

    +
    + +
    +

    Usage

    +
    getPkgZips(
    +  lockfile_path = NULL,
    +  supplement = NULL,
    +  override_lock = FALSE,
    +  r_rels_vect = c("4.0", "4.1", "4.2", "4.3", "4.4", "4.5", "4.6"),
    +  backupRrel = "4.4",
    +  outDir = NULL
    +)
    +
    + +
    +

    Arguments

    + + +
    lockfile_path
    +

    Path to renv.lock file, if empty will search for renv.lock in project directory

    + + +
    supplement
    +

    Nested list of packages to supplement or use in place of a renv.lock file

    + + +
    override_lock
    +

    Logical. Default is FALSE. If set to TRUE and the same package is named in both the renv.lock and the supplement, the version called in the supplement will override the renv.lock

    + + +
    r_rels_vect
    +

    A character vector of R minor releases

    + + +
    backupRrel
    +

    A string of the R minor-release to use if preferred package version cannot be found under any of the minor releases specified in `r_rels_vect`

    + + +
    outDir
    +

    Path to output directory for package zips. If left empty, an output directory will be created in project 'renv' directory

    + +
    +
    +

    Value

    +

    In addition to downloading the specified packages into the outDir, returns a list of packages that were searched for as well as the URLs, versions (if found), etc.

    +
    +
    +

    Details

    +

    If the package version is not found under any of the R minor releases, the package will be downloaded from the specified `backupRrel` regardless of package version specified in renv.lock

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +pkg_status_list <- getPkgZips()
    +# Format supp in this way:
    +devtools <- list(Package = "devtools", Version = "2.5.1")
    +duckdb <- list(Package = "duckdb", Version = "1.5.2")
    +supp <- list(Packages = list(devtools = devtools, duckdb = duckdb))
    +pkg_status_list <- getPkgZips(supplement = supp)
    +} # }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/getPkgZips.md b/docs/reference/getPkgZips.md new file mode 100644 index 0000000..febed91 --- /dev/null +++ b/docs/reference/getPkgZips.md @@ -0,0 +1,75 @@ +# Download zip-compressed Windows binaries from a renv.lock file + +A function that locates and downloads Windows binaries (.zip) from CRAN +based on packages specified in a renv.lock file. + +## Usage + +``` r +getPkgZips( + lockfile_path = NULL, + supplement = NULL, + override_lock = FALSE, + r_rels_vect = c("4.0", "4.1", "4.2", "4.3", "4.4", "4.5", "4.6"), + backupRrel = "4.4", + outDir = NULL +) +``` + +## Arguments + +- lockfile_path: + + Path to renv.lock file, if empty will search for renv.lock in project + directory + +- supplement: + + Nested list of packages to supplement or use in place of a renv.lock + file + +- override_lock: + + Logical. Default is FALSE. If set to TRUE and the same package is + named in both the renv.lock and the supplement, the version called in + the supplement will override the renv.lock + +- r_rels_vect: + + A character vector of R minor releases + +- backupRrel: + + A string of the R minor-release to use if preferred package version + cannot be found under any of the minor releases specified in + \`r_rels_vect\` + +- outDir: + + Path to output directory for package zips. If left empty, an output + directory will be created in project 'renv' directory + +## Value + +In addition to downloading the specified packages into the outDir, +returns a list of packages that were searched for as well as the URLs, +versions (if found), etc. + +## Details + +If the package version is not found under any of the R minor releases, +the package will be downloaded from the specified \`backupRrel\` +regardless of package version specified in renv.lock + +## Examples + +``` r +if (FALSE) { # \dontrun{ +pkg_status_list <- getPkgZips() +# Format supp in this way: +devtools <- list(Package = "devtools", Version = "2.5.1") +duckdb <- list(Package = "duckdb", Version = "1.5.2") +supp <- list(Packages = list(devtools = devtools, duckdb = duckdb)) +pkg_status_list <- getPkgZips(supplement = supp) +} # } +``` diff --git a/docs/reference/index.html b/docs/reference/index.html new file mode 100644 index 0000000..ed578ee --- /dev/null +++ b/docs/reference/index.html @@ -0,0 +1,110 @@ + +Package index • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    All functions

    + + + +
    + + + + +
    + + arrangeCdmNames() + +
    +
    `arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order
    + +
    + + assertCdmNames() + +
    +
    `assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect
    + +
    + + createResultsDir() + +
    +
    Create directory for analysis results
    + +
    + + getPkgZips() + +
    +
    Download zip-compressed Windows binaries from a renv.lock file
    + +
    + + setLoggers() + +
    +
    `setLoggers()` as text files in the results directory
    + +
    + + unZipStudyFiles() + +
    +
    `unZipStudyFiles()` uncompress study results
    + +
    + + zipStudyFiles() + +
    +
    `zipStudyFiles()` compress study results
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/index.md b/docs/reference/index.md new file mode 100644 index 0000000..3ba4d12 --- /dev/null +++ b/docs/reference/index.md @@ -0,0 +1,20 @@ +# Package index + +## All functions + +- [`arrangeCdmNames()`](arrangeCdmNames.md) : \`arrangeCdmNames()\` + verifies if data partner's acronyms are valie and returns a vector + ordered by country alphabetical order +- [`assertCdmNames()`](assertCdmNames.md) : \`assertCdmNames()\` + verifies if data partner's names are correct and display an error if + incorrect +- [`createResultsDir()`](createResultsDir.md) : Create directory for + analysis results +- [`getPkgZips()`](getPkgZips.md) : Download zip-compressed Windows + binaries from a renv.lock file +- [`setLoggers()`](setLoggers.md) : \`setLoggers()\` as text files in + the results directory +- [`unZipStudyFiles()`](unZipStudyFiles.md) : \`unZipStudyFiles()\` + uncompress study results +- [`zipStudyFiles()`](zipStudyFiles.md) : \`zipStudyFiles()\` compress + study results diff --git a/docs/reference/setLoggers.html b/docs/reference/setLoggers.html new file mode 100644 index 0000000..5ede34d --- /dev/null +++ b/docs/reference/setLoggers.html @@ -0,0 +1,130 @@ + +`setLoggers()` as text files in the results directory — setLoggers • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    Sets `ohdsi/ParallelLogger` log and error report for a study. Logger +registered as 'OMOP_STUDY_LOGGER' and error report as 'OMOP_STUDY_ERROR_REPORT'. +Please note: avoid using inside a tryCatch() or similar because events +will not be 'obsorbed' and not recorded by ParallelLogger.

    +
    + +
    +

    Usage

    +
    setLoggers(
    +  resultsDir,
    +  logFileName = "log",
    +  errorFileName = "error",
    +  eventLevel = "TRACE",
    +  errorLevel = "ERROR"
    +)
    +
    + +
    +

    Arguments

    + + +
    resultsDir
    +

    A valid folder where to save the results of a study. +This function will work best with the folder structure formed by +`createsResultsDir()`

    + + +
    logFileName
    +

    A file name in character. Default 'log'

    + + +
    errorFileName
    +

    A file name in character. Default 'error'

    + + +
    eventLevel
    +

    TRACE is the default, captures all the output from +the console

    + + +
    errorLevel
    +

    ERROR is the default, captures errors and fatal events

    + +
    +
    +

    Value

    +

    Invisible

    +
    + +
    +

    Examples

    +
    outputDir <- file.path(
    +   tempdir(),
    +   "examples"
    +)
    +directories <- createResultsDir(
    +   outputDir,
    +   dbname = "OMOP"
    +   )
    +#>  Creating locations to save results
    +setLoggers(
    +  resultsDir = directories$resultsDir
    +  )
    +#> Currently in a tryCatch or withCallingHandlers block, so unable to add global calling handlers. ParallelLogger will not capture R messages, errors, and warnings, only explicit calls to ParallelLogger. (This message will not be shown again this R session)
    +#> Logger file will be created at: /var/folders/sr/lw0bmhn50k3cj_1pf68l9_r80000gp/T//RtmpvAvdxG/examples/results_OMOP
    +ParallelLogger::clearLoggers()
    +unlink(outputDir, recursive = TRUE)
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/setLoggers.md b/docs/reference/setLoggers.md new file mode 100644 index 0000000..b2712ca --- /dev/null +++ b/docs/reference/setLoggers.md @@ -0,0 +1,68 @@ +# \`setLoggers()\` as text files in the results directory + +Sets \`ohdsi/ParallelLogger\` log and error report for a study. Logger +registered as 'OMOP_STUDY_LOGGER' and error report as +'OMOP_STUDY_ERROR_REPORT'. Please note: avoid using inside a tryCatch() +or similar because events will not be 'obsorbed' and not recorded by +ParallelLogger. + +## Usage + +``` r +setLoggers( + resultsDir, + logFileName = "log", + errorFileName = "error", + eventLevel = "TRACE", + errorLevel = "ERROR" +) +``` + +## Arguments + +- resultsDir: + + A valid folder where to save the results of a study. This function + will work best with the folder structure formed by + \`createsResultsDir()\` + +- logFileName: + + A file name in character. Default 'log' + +- errorFileName: + + A file name in character. Default 'error' + +- eventLevel: + + TRACE is the default, captures all the output from the console + +- errorLevel: + + ERROR is the default, captures errors and fatal events + +## Value + +Invisible + +## Examples + +``` r +outputDir <- file.path( + tempdir(), + "examples" +) +directories <- createResultsDir( + outputDir, + dbname = "OMOP" + ) +#> ℹ Creating locations to save results +setLoggers( + resultsDir = directories$resultsDir + ) +#> Currently in a tryCatch or withCallingHandlers block, so unable to add global calling handlers. ParallelLogger will not capture R messages, errors, and warnings, only explicit calls to ParallelLogger. (This message will not be shown again this R session) +#> Logger file will be created at: /var/folders/sr/lw0bmhn50k3cj_1pf68l9_r80000gp/T//RtmpvAvdxG/examples/results_OMOP +ParallelLogger::clearLoggers() +unlink(outputDir, recursive = TRUE) +``` diff --git a/docs/reference/unZipStudyFiles.html b/docs/reference/unZipStudyFiles.html new file mode 100644 index 0000000..0279c5a --- /dev/null +++ b/docs/reference/unZipStudyFiles.html @@ -0,0 +1,111 @@ + +`unZipStudyFiles()` uncompress study results — unZipStudyFiles • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    `unZipStudyFiles()` uncompress study results

    +
    + +
    +

    Usage

    +
    unZipStudyFiles(path, pattern, negate = FALSE, recursive = TRUE, outputDir)
    +
    + +
    +

    Arguments

    + + +
    path
    +

    The path to the directory where the .zip files are located. Character.

    + + +
    pattern
    +

    A character string to filter the files from the location provided. Default is NULL.

    + + +
    negate
    +

    If TRUE it will filter the opposite from 'pattern'. Default is FALSE.

    + + +
    recursive
    +

    If TRUE it will search recursively for .zip files. Default is TRUE.

    + + +
    outputDir
    +

    The path to the main output folder. Character.

    + +
    +
    +

    Value

    +

    A message stating the location of the uncompressed results

    +
    + +
    +

    Examples

    +
     if (FALSE) { # \dontrun{
    +path <- testthat::test_path(
    +   "data",
    +   "results_execution"
    +)
    +outputDir <- file.path(
    +  tempdir(),
    +  "examples"
    +)
    +unZipStudyFiles(
    +  path = path,
    +  outputDir = outputDir
    +)
    +unlink(outputDir, recursive = TRUE)
    +} # }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/unZipStudyFiles.md b/docs/reference/unZipStudyFiles.md new file mode 100644 index 0000000..1c19754 --- /dev/null +++ b/docs/reference/unZipStudyFiles.md @@ -0,0 +1,56 @@ +# \`unZipStudyFiles()\` uncompress study results + +\`unZipStudyFiles()\` uncompress study results + +## Usage + +``` r +unZipStudyFiles(path, pattern, negate = FALSE, recursive = TRUE, outputDir) +``` + +## Arguments + +- path: + + The path to the directory where the .zip files are located. Character. + +- pattern: + + A character string to filter the files from the location provided. + Default is NULL. + +- negate: + + If TRUE it will filter the opposite from 'pattern'. Default is FALSE. + +- recursive: + + If TRUE it will search recursively for .zip files. Default is TRUE. + +- outputDir: + + The path to the main output folder. Character. + +## Value + +A message stating the location of the uncompressed results + +## Examples + +``` r + if (FALSE) { # \dontrun{ +path <- testthat::test_path( + "data", + "results_execution" +) +outputDir <- file.path( + tempdir(), + "examples" +) +unZipStudyFiles( + path = path, + outputDir = outputDir +) +unlink(outputDir, recursive = TRUE) +} # } +``` diff --git a/docs/reference/zipStudyFiles.html b/docs/reference/zipStudyFiles.html new file mode 100644 index 0000000..2eeb7a9 --- /dev/null +++ b/docs/reference/zipStudyFiles.html @@ -0,0 +1,106 @@ + +`zipStudyFiles()` compress study results — zipStudyFiles • studyGenerics + Skip to contents + + +
    +
    +
    + +
    +

    `zipStudyFiles()` compress study results

    +
    + +
    +

    Usage

    +
    zipStudyFiles(resultsDirName, outputDir, dbname)
    +
    + +
    +

    Arguments

    + + +
    resultsDirName
    +

    Location of the results. Character.

    + + +
    outputDir
    +

    The directory where the results folder is located. Character

    + + +
    dbname
    +

    The database name. Character

    + +
    +
    +

    Value

    +

    A message stating the location of the compressed results

    +
    + +
    +

    Examples

    +
    outputDir <- file.path(
    +   tempdir(),
    +   "examples"
    +   )
    +dbname <- "IPCI"
    +directories <- createResultsDir(
    +  outputDir,
    +  dbname = dbname
    +)
    +#>  Creating locations to save results
    +zipStudyFiles(
    +  resultsDirName = directories$resultsDir,
    +  outputDir = directories$outputDir,
    +  dbname = dbname
    +)
    +#>  Exporting results to zip format
    +#>  Results exported to /private/var/folders/sr/lw0bmhn50k3cj_1pf68l9_r80000gp/T/RtmpvAvdxG/examples/results_IPCI/results_IPCI_20260607.zip
    +unlink(outputDir, recursive = TRUE)
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/zipStudyFiles.md b/docs/reference/zipStudyFiles.md new file mode 100644 index 0000000..635ec71 --- /dev/null +++ b/docs/reference/zipStudyFiles.md @@ -0,0 +1,50 @@ +# \`zipStudyFiles()\` compress study results + +\`zipStudyFiles()\` compress study results + +## Usage + +``` r +zipStudyFiles(resultsDirName, outputDir, dbname) +``` + +## Arguments + +- resultsDirName: + + Location of the results. Character. + +- outputDir: + + The directory where the results folder is located. Character + +- dbname: + + The database name. Character + +## Value + +A message stating the location of the compressed results + +## Examples + +``` r +outputDir <- file.path( + tempdir(), + "examples" + ) +dbname <- "IPCI" +directories <- createResultsDir( + outputDir, + dbname = dbname +) +#> ℹ Creating locations to save results +zipStudyFiles( + resultsDirName = directories$resultsDir, + outputDir = directories$outputDir, + dbname = dbname +) +#> ℹ Exporting results to zip format +#> ✔ Results exported to /private/var/folders/sr/lw0bmhn50k3cj_1pf68l9_r80000gp/T/RtmpvAvdxG/examples/results_IPCI/results_IPCI_20260607.zip +unlink(outputDir, recursive = TRUE) +``` diff --git a/docs/search.json b/docs/search.json new file mode 100644 index 0000000..2eb8d07 --- /dev/null +++ b/docs/search.json @@ -0,0 +1 @@ +[{"path":"/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"Apache License","title":"Apache License","text":"Version 2.0, January 2004 ","code":""},{"path":[]},{"path":"/LICENSE.html","id":"id_1-definitions","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"1. Definitions","title":"Apache License","text":"“License” shall mean terms conditions use, reproduction, distribution defined Sections 1 9 document. “Licensor” shall mean copyright owner entity authorized copyright owner granting License. “Legal Entity” shall mean union acting entity entities control, controlled , common control entity. purposes definition, “control” means () power, direct indirect, cause direction management entity, whether contract otherwise, (ii) ownership fifty percent (50%) outstanding shares, (iii) beneficial ownership entity. “” (“”) shall mean individual Legal Entity exercising permissions granted License. “Source” form shall mean preferred form making modifications, including limited software source code, documentation source, configuration files. “Object” form shall mean form resulting mechanical transformation translation Source form, including limited compiled object code, generated documentation, conversions media types. “Work” shall mean work authorship, whether Source Object form, made available License, indicated copyright notice included attached work (example provided Appendix ). “Derivative Works” shall mean work, whether Source Object form, based (derived ) Work editorial revisions, annotations, elaborations, modifications represent, whole, original work authorship. purposes License, Derivative Works shall include works remain separable , merely link (bind name) interfaces , Work Derivative Works thereof. “Contribution” shall mean work authorship, including original version Work modifications additions Work Derivative Works thereof, intentionally submitted Licensor inclusion Work copyright owner individual Legal Entity authorized submit behalf copyright owner. purposes definition, “submitted” means form electronic, verbal, written communication sent Licensor representatives, including limited communication electronic mailing lists, source code control systems, issue tracking systems managed , behalf , Licensor purpose discussing improving Work, excluding communication conspicuously marked otherwise designated writing copyright owner “Contribution.” “Contributor” shall mean Licensor individual Legal Entity behalf Contribution received Licensor subsequently incorporated within Work.","code":""},{"path":"/LICENSE.html","id":"id_2-grant-of-copyright-license","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"2. Grant of Copyright License","title":"Apache License","text":"Subject terms conditions License, Contributor hereby grants perpetual, worldwide, non-exclusive, -charge, royalty-free, irrevocable copyright license reproduce, prepare Derivative Works , publicly display, publicly perform, sublicense, distribute Work Derivative Works Source Object form.","code":""},{"path":"/LICENSE.html","id":"id_3-grant-of-patent-license","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"3. Grant of Patent License","title":"Apache License","text":"Subject terms conditions License, Contributor hereby grants perpetual, worldwide, non-exclusive, -charge, royalty-free, irrevocable (except stated section) patent license make, made, use, offer sell, sell, import, otherwise transfer Work, license applies patent claims licensable Contributor necessarily infringed Contribution(s) alone combination Contribution(s) Work Contribution(s) submitted. institute patent litigation entity (including cross-claim counterclaim lawsuit) alleging Work Contribution incorporated within Work constitutes direct contributory patent infringement, patent licenses granted License Work shall terminate date litigation filed.","code":""},{"path":"/LICENSE.html","id":"id_4-redistribution","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"4. Redistribution","title":"Apache License","text":"may reproduce distribute copies Work Derivative Works thereof medium, without modifications, Source Object form, provided meet following conditions: () must give recipients Work Derivative Works copy License; (b) must cause modified files carry prominent notices stating changed files; (c) must retain, Source form Derivative Works distribute, copyright, patent, trademark, attribution notices Source form Work, excluding notices pertain part Derivative Works; (d) Work includes “NOTICE” text file part distribution, Derivative Works distribute must include readable copy attribution notices contained within NOTICE file, excluding notices pertain part Derivative Works, least one following places: within NOTICE text file distributed part Derivative Works; within Source form documentation, provided along Derivative Works; , within display generated Derivative Works, wherever third-party notices normally appear. contents NOTICE file informational purposes modify License. may add attribution notices within Derivative Works distribute, alongside addendum NOTICE text Work, provided additional attribution notices construed modifying License. may add copyright statement modifications may provide additional different license terms conditions use, reproduction, distribution modifications, Derivative Works whole, provided use, reproduction, distribution Work otherwise complies conditions stated License.","code":""},{"path":"/LICENSE.html","id":"id_5-submission-of-contributions","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"5. Submission of Contributions","title":"Apache License","text":"Unless explicitly state otherwise, Contribution intentionally submitted inclusion Work Licensor shall terms conditions License, without additional terms conditions. Notwithstanding , nothing herein shall supersede modify terms separate license agreement may executed Licensor regarding Contributions.","code":""},{"path":"/LICENSE.html","id":"id_6-trademarks","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"6. Trademarks","title":"Apache License","text":"License grant permission use trade names, trademarks, service marks, product names Licensor, except required reasonable customary use describing origin Work reproducing content NOTICE file.","code":""},{"path":"/LICENSE.html","id":"id_7-disclaimer-of-warranty","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"7. Disclaimer of Warranty","title":"Apache License","text":"Unless required applicable law agreed writing, Licensor provides Work (Contributor provides Contributions) “” BASIS, WITHOUT WARRANTIES CONDITIONS KIND, either express implied, including, without limitation, warranties conditions TITLE, NON-INFRINGEMENT, MERCHANTABILITY, FITNESS PARTICULAR PURPOSE. solely responsible determining appropriateness using redistributing Work assume risks associated exercise permissions License.","code":""},{"path":"/LICENSE.html","id":"id_8-limitation-of-liability","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"8. Limitation of Liability","title":"Apache License","text":"event legal theory, whether tort (including negligence), contract, otherwise, unless required applicable law (deliberate grossly negligent acts) agreed writing, shall Contributor liable damages, including direct, indirect, special, incidental, consequential damages character arising result License use inability use Work (including limited damages loss goodwill, work stoppage, computer failure malfunction, commercial damages losses), even Contributor advised possibility damages.","code":""},{"path":"/LICENSE.html","id":"id_9-accepting-warranty-or-additional-liability","dir":"","previous_headings":"Terms and Conditions for use, reproduction, and distribution","what":"9. Accepting Warranty or Additional Liability","title":"Apache License","text":"redistributing Work Derivative Works thereof, may choose offer, charge fee , acceptance support, warranty, indemnity, liability obligations /rights consistent License. However, accepting obligations, may act behalf sole responsibility, behalf Contributor, agree indemnify, defend, hold Contributor harmless liability incurred , claims asserted , Contributor reason accepting warranty additional liability. END TERMS CONDITIONS","code":""},{"path":"/LICENSE.html","id":"appendix-how-to-apply-the-apache-license-to-your-work","dir":"","previous_headings":"","what":"APPENDIX: How to apply the Apache License to your work","title":"Apache License","text":"apply Apache License work, attach following boilerplate notice, fields enclosed brackets [] replaced identifying information. (Don’t include brackets!) text enclosed appropriate comment syntax file format. also recommend file class name description purpose included “printed page” copyright notice easier identification within third-party archives.","code":"Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."},{"path":"/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Cesar Barboza. Author, maintainer. Arianna Alamshahi. Author.","code":""},{"path":"/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Barboza C, Alamshahi (2026). studyGenerics: centralised repository tested frequently used methods OMOP-CDM studies. R package version 0.1.0.","code":"@Manual{, title = {studyGenerics: A centralised repository of tested and frequently used methods for OMOP-CDM studies}, author = {Cesar Barboza and Arianna Alamshahi}, year = {2026}, note = {R package version 0.1.0}, }"},{"path":"/index.html","id":"studygenerics","dir":"","previous_headings":"","what":"A centralised repository of tested and frequently used methods for OMOP-CDM studies","title":"A centralised repository of tested and frequently used methods for OMOP-CDM studies","text":"goal studyGenerics …","code":""},{"path":"/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"A centralised repository of tested and frequently used methods for OMOP-CDM studies","text":"can install development version studyGenerics GitHub :","code":"# install.packages(\"pak\") pak::pak(\"mi-erasmusmc/studyGenerics\")"},{"path":"/index.html","id":"example","dir":"","previous_headings":"","what":"Example","title":"A centralised repository of tested and frequently used methods for OMOP-CDM studies","text":"basic example shows solve common problem: special using README.Rmd instead just README.md? can include R chunks like : ’ll still need render README.Rmd regularly, keep README.md --date. devtools::build_readme() handy . can also embed plots, example: case, don’t forget commit push resulting figure files, display GitHub CRAN.","code":"library(studyGenerics) #> Warning: replacing previous import 'httr::config' by 'renv::config' when #> loading 'studyGenerics' ## basic example code summary(cars) #> speed dist #> Min. : 4.0 Min. : 2.00 #> 1st Qu.:12.0 1st Qu.: 26.00 #> Median :15.0 Median : 36.00 #> Mean :15.4 Mean : 42.98 #> 3rd Qu.:19.0 3rd Qu.: 56.00 #> Max. :25.0 Max. :120.00"},{"path":"/reference/arrangeCdmNames.html","id":null,"dir":"Reference","previous_headings":"","what":"`arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order — arrangeCdmNames","title":"`arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order — arrangeCdmNames","text":"`arrangeCdmNames()` verifies data partner's acronyms valie returns vector ordered country alphabetical order","code":""},{"path":"/reference/arrangeCdmNames.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"`arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order — arrangeCdmNames","text":"","code":"arrangeCdmNames(labels)"},{"path":"/reference/arrangeCdmNames.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"`arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order — arrangeCdmNames","text":"labels character vector data partners acronyms","code":""},{"path":"/reference/arrangeCdmNames.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"`arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order — arrangeCdmNames","text":"character vector","code":""},{"path":"/reference/arrangeCdmNames.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"`arrangeCdmNames()` verifies if data partner's acronyms are valie and returns a vector ordered by country alphabetical order — arrangeCdmNames","text":"","code":"# Verifies acronyms are valid and sorts them in the correct order labels <- c( \"BCR\", \"IQVIA US - PMTX+\", \"IQVIA US - AmbEMR\", \"IQVIA LPD Belgium\" ) arrangeCdmNames(labels = labels) #> [1] \"BCR\" \"IQVIA LPD Belgium\" \"IQVIA US - AmbEMR\" #> [4] \"IQVIA US - PMTX+\""},{"path":"/reference/assertCdmNames.html","id":null,"dir":"Reference","previous_headings":"","what":"`assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect — assertCdmNames","title":"`assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect — assertCdmNames","text":"`assertCdmNames()` verifies data partner's names correct display error incorrect","code":""},{"path":"/reference/assertCdmNames.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"`assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect — assertCdmNames","text":"","code":"assertCdmNames(labels, expected)"},{"path":"/reference/assertCdmNames.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"`assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect — assertCdmNames","text":"labels character vector data partner acronyms expected character vector expected data partner acronyms. omitted, package's built-CDM names used.","code":""},{"path":"/reference/assertCdmNames.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"`assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect — assertCdmNames","text":"Invisible labels correct","code":""},{"path":"/reference/assertCdmNames.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"`assertCdmNames()` verifies if data partner's names are correct and display an error if incorrect — assertCdmNames","text":"","code":"# Assert if acronyms are correct labels <- c( \"BCR\", \"IQVIA LPD Belgium\", \"IQVIA US - AmbEMR\", \"IQVIA US - PMTX+\" ) assertCdmNames(labels = labels)"},{"path":"/reference/createResultsDir.html","id":null,"dir":"Reference","previous_headings":"","what":"Create directory for analysis results — createResultsDir","title":"Create directory for analysis results — createResultsDir","text":"Creates subdirectory results based database name within specified output directory. output directory provided, current working directory used.","code":""},{"path":"/reference/createResultsDir.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create directory for analysis results — createResultsDir","text":"","code":"createResultsDir(outputDir = NULL, dbname)"},{"path":"/reference/createResultsDir.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create directory for analysis results — createResultsDir","text":"outputDir Character string. path main output folder. NULL, defaults current working directory. Default NULL. dbname Character string. name database, used suffix results folder (e.g., \"results_dbname\").","code":""},{"path":"/reference/createResultsDir.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create directory for analysis results — createResultsDir","text":"list containing three elements: outputDir: path main output directory. resultsDir: path specific results subdirectory created. resultsDirName: name results subdirectory.","code":""},{"path":"/reference/createResultsDir.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create directory for analysis results — createResultsDir","text":"","code":"outputDir <- file.path( tempdir(), \"examples\" ) directories <- createResultsDir( outputDir, dbname = \"OMOP\" ) #> ℹ Creating locations to save results unlink(outputDir, recursive = TRUE)"},{"path":"/reference/getPkgZips.html","id":null,"dir":"Reference","previous_headings":"","what":"Download zip-compressed Windows binaries from a renv.lock file — getPkgZips","title":"Download zip-compressed Windows binaries from a renv.lock file — getPkgZips","text":"function locates downloads Windows binaries (.zip) CRAN based packages specified renv.lock file.","code":""},{"path":"/reference/getPkgZips.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download zip-compressed Windows binaries from a renv.lock file — getPkgZips","text":"","code":"getPkgZips( lockfile_path = NULL, supplement = NULL, override_lock = FALSE, r_rels_vect = c(\"4.0\", \"4.1\", \"4.2\", \"4.3\", \"4.4\", \"4.5\", \"4.6\"), backupRrel = \"4.4\", outDir = NULL )"},{"path":"/reference/getPkgZips.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download zip-compressed Windows binaries from a renv.lock file — getPkgZips","text":"lockfile_path Path renv.lock file, empty search renv.lock project directory supplement Nested list packages supplement use place renv.lock file override_lock Logical. Default FALSE. set TRUE package named renv.lock supplement, version called supplement override renv.lock r_rels_vect character vector R minor releases backupRrel string R minor-release use preferred package version found minor releases specified `r_rels_vect` outDir Path output directory package zips. left empty, output directory created project 'renv' directory","code":""},{"path":"/reference/getPkgZips.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download zip-compressed Windows binaries from a renv.lock file — getPkgZips","text":"addition downloading specified packages outDir, returns list packages searched well URLs, versions (found), etc.","code":""},{"path":"/reference/getPkgZips.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Download zip-compressed Windows binaries from a renv.lock file — getPkgZips","text":"package version found R minor releases, package downloaded specified `backupRrel` regardless package version specified renv.lock","code":""},{"path":"/reference/getPkgZips.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download zip-compressed Windows binaries from a renv.lock file — getPkgZips","text":"","code":"if (FALSE) { # \\dontrun{ pkg_status_list <- getPkgZips() # Format supp in this way: devtools <- list(Package = \"devtools\", Version = \"2.5.1\") duckdb <- list(Package = \"duckdb\", Version = \"1.5.2\") supp <- list(Packages = list(devtools = devtools, duckdb = duckdb)) pkg_status_list <- getPkgZips(supplement = supp) } # }"},{"path":"/reference/setLoggers.html","id":null,"dir":"Reference","previous_headings":"","what":"`setLoggers()` as text files in the results directory — setLoggers","title":"`setLoggers()` as text files in the results directory — setLoggers","text":"Sets `ohdsi/ParallelLogger` log error report study. Logger registered 'OMOP_STUDY_LOGGER' error report 'OMOP_STUDY_ERROR_REPORT'. Please note: avoid using inside tryCatch() similar events 'obsorbed' recorded ParallelLogger.","code":""},{"path":"/reference/setLoggers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"`setLoggers()` as text files in the results directory — setLoggers","text":"","code":"setLoggers( resultsDir, logFileName = \"log\", errorFileName = \"error\", eventLevel = \"TRACE\", errorLevel = \"ERROR\" )"},{"path":"/reference/setLoggers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"`setLoggers()` as text files in the results directory — setLoggers","text":"resultsDir valid folder save results study. function work best folder structure formed `createsResultsDir()` logFileName file name character. Default 'log' errorFileName file name character. Default 'error' eventLevel TRACE default, captures output console errorLevel ERROR default, captures errors fatal events","code":""},{"path":"/reference/setLoggers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"`setLoggers()` as text files in the results directory — setLoggers","text":"Invisible","code":""},{"path":"/reference/setLoggers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"`setLoggers()` as text files in the results directory — setLoggers","text":"","code":"outputDir <- file.path( tempdir(), \"examples\" ) directories <- createResultsDir( outputDir, dbname = \"OMOP\" ) #> ℹ Creating locations to save results setLoggers( resultsDir = directories$resultsDir ) #> Currently in a tryCatch or withCallingHandlers block, so unable to add global calling handlers. ParallelLogger will not capture R messages, errors, and warnings, only explicit calls to ParallelLogger. (This message will not be shown again this R session) #> Logger file will be created at: /var/folders/sr/lw0bmhn50k3cj_1pf68l9_r80000gp/T//RtmpvAvdxG/examples/results_OMOP ParallelLogger::clearLoggers() unlink(outputDir, recursive = TRUE)"},{"path":"/reference/unZipStudyFiles.html","id":null,"dir":"Reference","previous_headings":"","what":"`unZipStudyFiles()` uncompress study results — unZipStudyFiles","title":"`unZipStudyFiles()` uncompress study results — unZipStudyFiles","text":"`unZipStudyFiles()` uncompress study results","code":""},{"path":"/reference/unZipStudyFiles.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"`unZipStudyFiles()` uncompress study results — unZipStudyFiles","text":"","code":"unZipStudyFiles(path, pattern, negate = FALSE, recursive = TRUE, outputDir)"},{"path":"/reference/unZipStudyFiles.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"`unZipStudyFiles()` uncompress study results — unZipStudyFiles","text":"path path directory .zip files located. Character. pattern character string filter files location provided. Default NULL. negate TRUE filter opposite 'pattern'. Default FALSE. recursive TRUE search recursively .zip files. Default TRUE. outputDir path main output folder. Character.","code":""},{"path":"/reference/unZipStudyFiles.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"`unZipStudyFiles()` uncompress study results — unZipStudyFiles","text":"message stating location uncompressed results","code":""},{"path":"/reference/unZipStudyFiles.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"`unZipStudyFiles()` uncompress study results — unZipStudyFiles","text":"","code":"if (FALSE) { # \\dontrun{ path <- testthat::test_path( \"data\", \"results_execution\" ) outputDir <- file.path( tempdir(), \"examples\" ) unZipStudyFiles( path = path, outputDir = outputDir ) unlink(outputDir, recursive = TRUE) } # }"},{"path":"/reference/zipStudyFiles.html","id":null,"dir":"Reference","previous_headings":"","what":"`zipStudyFiles()` compress study results — zipStudyFiles","title":"`zipStudyFiles()` compress study results — zipStudyFiles","text":"`zipStudyFiles()` compress study results","code":""},{"path":"/reference/zipStudyFiles.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"`zipStudyFiles()` compress study results — zipStudyFiles","text":"","code":"zipStudyFiles(resultsDirName, outputDir, dbname)"},{"path":"/reference/zipStudyFiles.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"`zipStudyFiles()` compress study results — zipStudyFiles","text":"resultsDirName Location results. Character. outputDir directory results folder located. Character dbname database name. Character","code":""},{"path":"/reference/zipStudyFiles.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"`zipStudyFiles()` compress study results — zipStudyFiles","text":"message stating location compressed results","code":""},{"path":"/reference/zipStudyFiles.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"`zipStudyFiles()` compress study results — zipStudyFiles","text":"","code":"outputDir <- file.path( tempdir(), \"examples\" ) dbname <- \"IPCI\" directories <- createResultsDir( outputDir, dbname = dbname ) #> ℹ Creating locations to save results zipStudyFiles( resultsDirName = directories$resultsDir, outputDir = directories$outputDir, dbname = dbname ) #> ℹ Exporting results to zip format #> ✔ Results exported to /private/var/folders/sr/lw0bmhn50k3cj_1pf68l9_r80000gp/T/RtmpvAvdxG/examples/results_IPCI/results_IPCI_20260607.zip unlink(outputDir, recursive = TRUE)"},{"path":"/news/index.html","id":"studygenerics-010","dir":"Changelog","previous_headings":"","what":"studyGenerics 0.1.0","title":"studyGenerics 0.1.0","text":"Initial CRAN submission.","code":""}] diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..4ab547a --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,16 @@ + +/404.html +/LICENSE.html +/authors.html +/index.html +/news/index.html +/reference/arrangeCdmNames.html +/reference/assertCdmNames.html +/reference/createResultsDir.html +/reference/getPkgZips.html +/reference/index.html +/reference/setLoggers.html +/reference/unZipStudyFiles.html +/reference/zipStudyFiles.html + + diff --git a/renv.lock b/renv.lock index d075dfe..7546e90 100644 --- a/renv.lock +++ b/renv.lock @@ -51,7 +51,7 @@ "Package": "backports", "Version": "1.5.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], @@ -61,7 +61,7 @@ "Package": "checkmate", "Version": "2.3.4", "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ "R", "backports", @@ -80,6 +80,42 @@ ], "Hash": "a73d822b669d443ff8de6928f9c49850" }, + "clipr": { + "Package": "clipr", + "Version": "0.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + }, + "crayon": { + "Package": "crayon", + "Version": "1.5.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "methods", + "utils" + ], + "Hash": "859d96e65ef198fd43e82b9628d593ef" + }, + "credentials": { + "Package": "credentials", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "askpass", + "curl", + "jsonlite", + "openssl", + "sys" + ], + "Hash": "bda033f0a309540bb66d5e85872c6973" + }, "curl": { "Package": "curl", "Version": "7.1.0", @@ -90,22 +126,78 @@ ], "Hash": "2e004ed19964915a8faf48a574439be9" }, + "desc": { + "Package": "desc", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "utils" + ], + "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" + }, "fs": { "Package": "fs", "Version": "2.1.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "methods" ], "Hash": "09278623bca442bc53b0940ffa2f6d87" }, + "gert": { + "Package": "gert", + "Version": "2.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "askpass", + "credentials", + "openssl", + "rstudioapi", + "sys", + "zip" + ], + "Hash": "8c696f49b5150a2541af009311c2fc83" + }, + "gh": { + "Package": "gh", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "gitcreds", + "glue", + "httr2", + "ini", + "jsonlite", + "lifecycle", + "rlang" + ], + "Hash": "d92acb7afad09df6839e4e456e538d03" + }, + "gitcreds": { + "Package": "gitcreds", + "Version": "0.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" + }, "glue": { "Package": "glue", "Version": "1.8.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "methods" @@ -126,7 +218,7 @@ "Package": "httr", "Version": "1.4.8", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", @@ -137,6 +229,34 @@ ], "Hash": "10bcae7793493db63a6872096132e10c" }, + "httr2": { + "Package": "httr2", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "curl", + "glue", + "lifecycle", + "magrittr", + "openssl", + "rappdirs", + "rlang", + "vctrs", + "withr" + ], + "Hash": "c20959a9442c0e3adb1e8d3809c5d1f7" + }, + "ini": { + "Package": "ini", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "6154ec2223172bce8162d4153cda21f7" + }, "jsonlite": { "Package": "jsonlite", "Version": "2.0.0", @@ -163,7 +283,7 @@ "Package": "magrittr", "Version": "2.0.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], @@ -201,6 +321,31 @@ ], "Hash": "865a99ecdce7c318efa3a467b7614ec3" }, + "purrr": { + "Package": "purrr", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "lifecycle", + "magrittr", + "rlang", + "vctrs" + ], + "Hash": "0a35605539b085a4828ec55ad973fe60" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "f146a5bfc94db048309712535d4d0aee" + }, "renv": { "Package": "renv", "Version": "1.0.11", @@ -215,7 +360,7 @@ "Package": "rlang", "Version": "1.2.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "utils" @@ -287,11 +432,43 @@ "Repository": "CRAN", "Hash": "de342ebfebdbf40477d0758d05426646" }, + "usethis": { + "Package": "usethis", + "Version": "3.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "clipr", + "crayon", + "curl", + "desc", + "fs", + "gert", + "gh", + "glue", + "jsonlite", + "lifecycle", + "purrr", + "rappdirs", + "rlang", + "rprojroot", + "rstudioapi", + "stats", + "tools", + "utils", + "whisker", + "withr", + "yaml" + ], + "Hash": "caa93b7eada0b69e299f61db5984faa7" + }, "vctrs": { "Package": "vctrs", "Version": "0.7.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -301,6 +478,25 @@ ], "Hash": "2dcde2d30d3ad67bf1d3a37177457b87" }, + "whisker": { + "Package": "whisker", + "Version": "0.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "c6abfa47a46d281a7d5159d0a8891e88" + }, + "withr": { + "Package": "withr", + "Version": "3.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "graphics" + ], + "Hash": "cc2d62c76458d425210d1eb1478b30b4" + }, "xml2": { "Package": "xml2", "Version": "1.5.2", @@ -314,12 +510,22 @@ ], "Hash": "d8e98d08a4a4d03f5052acc6e6204b99" }, + "yaml": { + "Package": "yaml", + "Version": "2.3.12", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "7cd77cb32abd9220d744307e9fc94ffb" + }, "zip": { "Package": "zip", - "Version": "2.3.3", + "Version": "3.0.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "6ebe4b1dc74c3e50e74e316323629583" + "Repository": "CRAN", + "Requirements": [ + "cli" + ], + "Hash": "b6637f22cadc4e12ad70c4b7d8d63e15" } } } diff --git a/tests/testthat/test-insertStructure.R b/tests/testthat/test-insertStructure.R index 456ef03..9769adb 100644 --- a/tests/testthat/test-insertStructure.R +++ b/tests/testthat/test-insertStructure.R @@ -1,6 +1,13 @@ test_that("insertStructure works", { - test_pkg_path <- testthat::test_path("testPackage") + test_pkg_path <- testthat::test_path("testPackage") + dir.create( + file.path( + test_pkg_path, + "renv" + ), + recursive = TRUE + ) insertStructure(path = test_pkg_path, n_obj = 3) @@ -52,12 +59,17 @@ test_that("insertStructure works", { } } - # De-comment to reset testPackage structure before testing again - # unlink(file.path(test_pkg_path, c("extras", "inst", "tests")), recursive = TRUE, force = TRUE) - # unlink(list.files(file.path(test_pkg_path, "R"), full.names = TRUE), recursive = TRUE, force = TRUE) - # unlink(list.files(file.path(test_pkg_path, "man"), full.names = TRUE), recursive = TRUE, force = TRUE) - # unlink(file.path(test_pkg_path, c("NEWS.md", "README.Rmd", "LICENSE.md")), force = TRUE) - # desc$del_deps() - # desc$write() + files <- list.files( + test_pkg_path, + full.names = TRUE, + all.files = TRUE, + no.. = TRUE + ) + to_remove <- files[!basename(files) %in% c("renv.lock", "DESCRIPTION")] + + unlink( + to_remove, + recursive = TRUE + ) }) diff --git a/tests/testthat/testPackage/.Rbuildignore b/tests/testthat/testPackage/.Rbuildignore deleted file mode 100644 index 2ebbf2a..0000000 --- a/tests/testthat/testPackage/.Rbuildignore +++ /dev/null @@ -1,6 +0,0 @@ -^renv$ -^renv\.lock$ -^testPackage\.Rproj$ -^\.Rproj\.user$ -^README\.Rmd$ -^LICENSE\.md$ diff --git a/tests/testthat/testPackage/.Rprofile b/tests/testthat/testPackage/.Rprofile deleted file mode 100644 index 81b960f..0000000 --- a/tests/testthat/testPackage/.Rprofile +++ /dev/null @@ -1 +0,0 @@ -source("renv/activate.R") diff --git a/tests/testthat/testPackage/.gitignore b/tests/testthat/testPackage/.gitignore deleted file mode 100644 index cd67eac..0000000 --- a/tests/testthat/testPackage/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.Rproj.user diff --git a/tests/testthat/testPackage/DESCRIPTION b/tests/testthat/testPackage/DESCRIPTION index 6c0bc6d..d118ff4 100644 --- a/tests/testthat/testPackage/DESCRIPTION +++ b/tests/testthat/testPackage/DESCRIPTION @@ -21,4 +21,4 @@ Imports: visOmopResults Suggests: testthat (>= 3.0.0) -Config/testthat/edition: 3 +Config/testthat/edition: 3 \ No newline at end of file diff --git a/tests/testthat/testPackage/LICENSE.md b/tests/testthat/testPackage/LICENSE.md deleted file mode 100644 index b62a9b5..0000000 --- a/tests/testthat/testPackage/LICENSE.md +++ /dev/null @@ -1,194 +0,0 @@ -Apache License -============== - -_Version 2.0, January 2004_ -_<>_ - -### Terms and Conditions for use, reproduction, and distribution - -#### 1. Definitions - -“License” shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -“Licensor” shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -“Legal Entity” shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, “control” means **(i)** the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the -outstanding shares, or **(iii)** beneficial ownership of such entity. - -“You” (or “Your”) shall mean an individual or Legal Entity exercising -permissions granted by this License. - -“Source” form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -“Object” form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -“Work” shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -“Derivative Works” shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -“Contribution” shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -“submitted” means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as “Not a Contribution.” - -“Contributor” shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -#### 2. Grant of Copyright License - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -#### 3. Grant of Patent License - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -#### 4. Redistribution - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -* **(a)** You must give any other recipients of the Work or Derivative Works a copy of -this License; and -* **(b)** You must cause any modified files to carry prominent notices stating that You -changed the files; and -* **(c)** You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. - -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -#### 5. Submission of Contributions - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -#### 6. Trademarks - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -#### 7. Disclaimer of Warranty - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -#### 8. Limitation of Liability - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -#### 9. Accepting Warranty or Additional Liability - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -_END OF TERMS AND CONDITIONS_ - -### APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets `[]` replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same “printed page” as the copyright notice for easier identification within -third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/tests/testthat/testPackage/NAMESPACE b/tests/testthat/testPackage/NAMESPACE deleted file mode 100644 index 6ae9268..0000000 --- a/tests/testthat/testPackage/NAMESPACE +++ /dev/null @@ -1,2 +0,0 @@ -# Generated by roxygen2: do not edit by hand - diff --git a/tests/testthat/testPackage/NEWS.md b/tests/testthat/testPackage/NEWS.md deleted file mode 100644 index 4adab30..0000000 --- a/tests/testthat/testPackage/NEWS.md +++ /dev/null @@ -1,3 +0,0 @@ -# testPackage (development version) - -* Initial CRAN submission. diff --git a/tests/testthat/testPackage/R/createCohorts.R b/tests/testthat/testPackage/R/createCohorts.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/globals.R b/tests/testthat/testPackage/R/globals.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/merge.R b/tests/testthat/testPackage/R/merge.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/objective1.R b/tests/testthat/testPackage/R/objective1.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/objective2.R b/tests/testthat/testPackage/R/objective2.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/objective3.R b/tests/testthat/testPackage/R/objective3.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/pullFromAtlas.R b/tests/testthat/testPackage/R/pullFromAtlas.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/runDiagnostics.R b/tests/testthat/testPackage/R/runDiagnostics.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/runStudy.R b/tests/testthat/testPackage/R/runStudy.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/R/utils.R b/tests/testthat/testPackage/R/utils.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/README.Rmd b/tests/testthat/testPackage/README.Rmd deleted file mode 100644 index 10ac786..0000000 --- a/tests/testthat/testPackage/README.Rmd +++ /dev/null @@ -1,55 +0,0 @@ ---- -output: github_document ---- - - - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - fig.path = "man/figures/README-", - out.width = "100%" -) -``` - -# testPackage - - - - -The goal of testPackage is to ... - -## Installation - -You can install the development version of testPackage from [GitHub](https://github.com/) with: - -``` r -# install.packages("pak") -pak::pak("mi-erasmusmc/studyGenerics") -``` - -## Example - -This is a basic example which shows you how to solve a common problem: - -```{r example} -library(testPackage) -## basic example code -``` - -What is special about using `README.Rmd` instead of just `README.md`? You can include R chunks like so: - -```{r cars} -summary(cars) -``` - -You'll still need to render `README.Rmd` regularly, to keep `README.md` up-to-date. `devtools::build_readme()` is handy for this. - -You can also embed plots, for example: - -```{r pressure, echo = FALSE} -plot(pressure) -``` - -In that case, don't forget to commit and push the resulting figure files, so they display on GitHub and CRAN. diff --git a/tests/testthat/testPackage/extras/CodeToRun.R b/tests/testthat/testPackage/extras/CodeToRun.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/extras/pullCohortsFromAtlas.R b/tests/testthat/testPackage/extras/pullCohortsFromAtlas.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/testPackage/renv.lock b/tests/testthat/testPackage/renv.lock index 5632cda..2cfc0d9 100644 --- a/tests/testthat/testPackage/renv.lock +++ b/tests/testthat/testPackage/renv.lock @@ -4,3510 +4,1377 @@ "Repositories": [ { "Name": "CRAN", - "URL": "https://cran.rstudio.com" + "URL": "https://packagemanager.posit.co/cran/latest" } ] }, "Packages": { "CDMConnector": { "Package": "CDMConnector", - "Version": "2.5.1", - "Source": "Repository", - "Title": "Connect to an OMOP Common Data Model", - "Authors@R": "c( person(\"Adam\", \"Black\", , \"ablack3@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-5576-8701\")), person(\"Artem\", \"Gorbachev\", , \"artem.gorbachev@odysseusinc.com\", role = \"aut\"), person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = \"aut\"), person(\"Marti\", \"Catala Sabate\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = \"aut\"), person(\"Ioanna\", \"Nika\", , \"i.nika@darwin-eu.org\", role = \"aut\") )", - "Description": "Provides tools for working with observational health data in the Observational Medical Outcomes Partnership (OMOP) Common Data Model format with a pipe friendly syntax. Common data model database table references are stored in a single compound object along with metadata.", - "License": "Apache License (>= 2)", - "URL": "https://darwin-eu.github.io/CDMConnector/, https://github.com/darwin-eu/CDMConnector", - "BugReports": "https://github.com/darwin-eu/CDMConnector/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "httr", - "dplyr", - "dbplyr (>= 2.5.0)", - "DBI (>= 0.3.0)", + "Version": "2.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "DBI", + "R", "checkmate", "cli", - "purrr", - "rlang", - "tidyselect", + "dbplyr", + "dplyr", + "generics", "glue", - "methods", - "withr", + "httr2", + "jsonlite", "lifecycle", - "stringr", + "methods", + "omopgenerics", + "purrr", + "readr", + "rlang", "stringi", - "generics", + "stringr", "tidyr", - "jsonlite", - "readr", - "omopgenerics (>= 1.2.0)" - ], - "Suggests": [ - "SqlRender", - "CirceR", - "rJava", - "covr", - "knitr", - "rmarkdown", - "duckdb", - "RSQLite", - "RPostgres", - "DatabaseConnector", - "odbc", - "ggplot2", - "bigrquery", - "lubridate", - "clock", - "tibble", - "testthat (>= 3.0.0)", - "pool", - "snakecase", - "digest", - "rstudioapi", - "uuid" - ], - "Enhances": [ - "arrow" + "tidyselect", + "withr" ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "false", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Adam Black [aut, cre] (ORCID: ), Artem Gorbachev [aut], Edward Burn [aut], Marti Catala Sabate [aut], Ioanna Nika [aut]", - "Maintainer": "Adam Black ", - "Repository": "CRAN" + "Hash": "20f9abc5909eb8946c1fc63ed4509305" }, "CodelistGenerator": { "Package": "CodelistGenerator", "Version": "4.0.2", "Source": "Repository", - "Title": "Identify Relevant Clinical Codes and Evaluate Their Use", - "Authors@R": "c( person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")), person(\"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Xihang\", \"Chen\", email = \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\")), person(\"Nuria\", \"Mercade-Besora\", email = \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Danielle\", \"Newby\", email = \"danielle.newby@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-3001-1478\")) )", - "Description": "Generate a candidate code list for the Observational Medical Outcomes Partnership (OMOP) common data model based on string matching. For a given search strategy, a candidate code list will be returned.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "DBI (>= 1.1.0)", - "dplyr (>= 1.1.0)", - "omopgenerics (>= 1.3.4)", - "rlang (>= 1.0.0)", - "glue (>= 1.5.0)", - "stringr (>= 1.6.0)", - "stringi (>= 1.8.1)", - "tidyr (>= 1.2.0)", - "cli (>= 3.1.0)", - "purrr", + "Repository": "RSPM", + "Requirements": [ + "DBI", + "PatientProfiles", + "R", + "cli", "clock", - "PatientProfiles (>= 1.4.4)", - "vctrs", + "dplyr", + "glue", "jsonlite", - "lifecycle" - ], - "Suggests": [ - "covr", - "duckdb", - "CDMConnector (>= 2.1.0)", - "visOmopResults (>= 1.4.0)", - "CohortConstructor (>= 0.5.0)", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)", - "RPostgres", - "odbc", - "spelling", - "tibble", - "gt", - "flextable", - "omock", - "tictoc" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "URL": "https://darwin-eu.github.io/CodelistGenerator/", - "Language": "en-US", - "LazyData": "true", - "NeedsCompilation": "no", - "Author": "Edward Burn [aut, cre] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: ), Martí Català [aut] (ORCID: ), Xihang Chen [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Mike Du [aut] (ORCID: ), Danielle Newby [aut] (ORCID: )", - "Maintainer": "Edward Burn ", - "Repository": "CRAN" + "lifecycle", + "omopgenerics", + "purrr", + "rlang", + "stringi", + "stringr", + "tidyr", + "vctrs" + ], + "Hash": "39a51212e117c844a0b755e72e49a2e2" }, "CohortCharacteristics": { "Package": "CohortCharacteristics", "Version": "1.1.3", "Source": "Repository", - "Type": "Package", - "Title": "Summarise and Visualise Characteristics of Patients in the OMOP CDM", - "Authors@R": "c( person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Yuchen\", \"Guo\", , \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Mike\", \"Du\", , \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Marta\", \"Alcalde\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")) )", - "Maintainer": "Martí Català ", - "Description": "Summarise and visualise the characteristics of patients in data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model (CDM).", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Imports": [ - "dplyr", - "tidyr", - "rlang", + "Repository": "CRAN", + "Requirements": [ + "PatientProfiles", + "R", "cli", - "stringr", - "omopgenerics (>= 1.3.1)", - "PatientProfiles (>= 1.3.1)", - "snakecase", + "clock", + "dplyr", "lifecycle", + "omopgenerics", "purrr", - "clock" - ], - "URL": "https://darwin-eu.github.io/CohortCharacteristics/", - "BugReports": "https://github.com/darwin-eu/CohortCharacteristics/issues", - "Language": "en-US", - "Depends": [ - "R (>= 4.1)" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "Suggests": [ - "CDMConnector (>= 1.6.0)", - "CodelistGenerator", - "visOmopResults (>= 1.2.0)", - "CohortConstructor", - "covr", - "DBI", - "DiagrammeR", - "DiagrammeRsvg", - "DrugUtilisation", - "DT", - "duckdb (>= 1.0.0)", - "flextable", - "ggplot2", - "ggpubr", - "glue", - "grid", - "gt", - "here", - "Hmisc", - "htmltools", - "knitr", - "odbc", - "omock", - "plotly", - "png", - "reactable", - "rmarkdown", - "RPostgres", - "rsvg", - "scales", - "spelling", - "testthat (>= 3.1.5)", - "tictoc", - "withr", - "extrafont" + "rlang", + "snakecase", + "stringr", + "tidyr" ], - "NeedsCompilation": "no", - "Author": "Martí Català [aut, cre] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Mike Du [ctb] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Edward Burn [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Marta Alcalde [aut] (ORCID: )", - "Repository": "CRAN" + "Hash": "6730f642c06d7e048cbb02084bdf1115" }, "CohortConstructor": { "Package": "CohortConstructor", "Version": "0.6.3", "Source": "Repository", - "Title": "Build and Manipulate Study Cohorts Using a Common Data Model", - "Authors@R": "c( person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")), person(\"Mike\", \"Du\", , \"mike.du@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Xihang\", \"Chen\", , \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\")), person(\"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = \"aut\", comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Elin\", \"Rowlands\", , \"elin.rowlands@ndorms.ox.ac.uk\", role = \"aut\", comment = c(ORCID = \"0009-0005-5166-0417\")))", - "Description": "Create and manipulate study cohorts in data mapped to the Observational Medical Outcomes Partnership Common Data Model.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Imports": [ + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "CodelistGenerator", + "PatientProfiles", + "R", "cli", "clock", "dplyr", "glue", - "omopgenerics (>= 1.3.2)", - "PatientProfiles (>= 1.4.4)", - "CodelistGenerator (>= 4.0.0)", + "omopgenerics", "purrr", "rlang", "tibble", "tidyr", "utils" ], - "Suggests": [ - "CDMConnector (>= 1.7.0)", - "CirceR", - "CohortCharacteristics", - "covr", - "DBI", - "DiagrammeR", - "DrugUtilisation", - "duckdb", - "ggplot2", - "gt", - "here", - "IncidencePrevalence", - "knitr", - "odbc", - "omock (>= 0.5.0)", - "rmarkdown", - "RPostgres", - "scales", - "SqlRender", - "stringr", - "testthat (>= 3.0.0)", - "tictoc", - "visOmopResults", - "systemfonts" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 4.1)" - ], - "URL": "https://ohdsi.github.io/CohortConstructor/, https://github.com/OHDSI/CohortConstructor", - "BugReports": "https://github.com/OHDSI/CohortConstructor/issues", - "LazyData": "true", - "NeedsCompilation": "no", - "Author": "Edward Burn [aut, cre] (ORCID: ), Martí Català [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: ), Mike Du [aut] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Xihang Chen [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Elin Rowlands [aut] (ORCID: )", - "Maintainer": "Edward Burn ", - "Repository": "CRAN" + "Hash": "3d5ca3827a93b09a4062ba3306ee0a07" }, "CohortSurvival": { "Package": "CohortSurvival", "Version": "1.1.1", "Source": "Repository", - "Title": "Estimate Survival from Common Data Model Cohorts", - "Authors@R": "c( person(\"Kim\", \"López-Güell\", email = \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Xintong\", \"Li\", email = \"xintong.li@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-6872-5804\")), person(\"Danielle\", \"Newby\", email = \"danielle.newby@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-3001-1478\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")))", - "Description": "Estimate survival using data mapped to the Observational Medical Outcomes Partnership common data model. Survival can be estimated based on user-defined study cohorts.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "DBI", + "PatientProfiles", + "R", "broom", "cli", "clock", - "DBI", "dplyr", "glue", - "omopgenerics (>= 1.1.0)", - "PatientProfiles (>= 1.3.1)", + "omopgenerics", "purrr", "rlang", - "survival (>= 3.7.0)", "stats", "stringr", + "survival", "tibble", "tidyr" ], - "Suggests": [ - "testthat (>= 3.0.0)", - "CodelistGenerator", - "roxygen2", - "knitr", - "tictoc", - "rmarkdown", - "ggplot2", - "patchwork", - "cmprsk", - "duckdb", - "gt", - "flextable", - "scales", - "visOmopResults (>= 1.4.0)", - "extrafont", - "CDMConnector (>= 2.0.0)" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "URL": "https://darwin-eu.github.io/CohortSurvival/", - "BugReports": "https://github.com/darwin-eu/CohortSurvival/issues", - "NeedsCompilation": "no", - "Author": "Kim López-Güell [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Martí Català [aut] (ORCID: ), Xintong Li [aut] (ORCID: ), Danielle Newby [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: )", - "Maintainer": "Kim López-Güell ", - "Depends": [ - "R (>= 4.1.0)" - ], - "Repository": "CRAN" + "Hash": "bf9752e02370baeca96c8a976230f11b" }, "DBI": { "Package": "DBI", "Version": "1.3.0", "Source": "Repository", - "Title": "R Database Interface", - "Date": "2026-02-11", - "Authors@R": "c( person(\"R Special Interest Group on Databases (R-SIG-DB)\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\") )", - "Description": "A database interface definition for communication between R and relational database management systems. All classes in this package are virtual and need to be extended by the various R/DBMS implementations.", - "License": "LGPL (>= 2.1)", - "URL": "https://dbi.r-dbi.org, https://github.com/r-dbi/DBI", - "BugReports": "https://github.com/r-dbi/DBI/issues", - "Depends": [ - "methods", - "R (>= 3.0.0)" - ], - "Suggests": [ - "arrow", - "blob", - "callr", - "covr", - "DBItest (>= 1.8.2)", - "dbplyr", - "downlit", - "dplyr", - "glue", - "hms", - "knitr", - "magrittr", - "nanoarrow (>= 0.3.0.1)", - "otel", - "otelsdk", - "RMariaDB", - "rmarkdown", - "rprojroot", - "RSQLite (>= 1.1-2)", - "testthat (>= 3.0.0)", - "vctrs", - "xml2" + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" ], - "VignetteBuilder": "knitr", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "false", - "Config/Needs/check": "r-dbi/DBItest", - "Config/Needs/website": "r-dbi/DBItest, r-dbi/dbitemplate, adbi, AzureKusto, bigrquery, DatabaseConnector, dittodb, duckdb, implyr, lazysf, odbc, pool, RAthena, IMSMWU/RClickhouse, RH2, RJDBC, RMariaDB, RMySQL, RPostgres, RPostgreSQL, RPresto, RSQLite, sergeant, sparklyr, withr", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "NeedsCompilation": "no", - "Author": "R Special Interest Group on Databases (R-SIG-DB) [aut], Hadley Wickham [aut], Kirill Müller [aut, cre] (ORCID: ), R Consortium [fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" + "Hash": "dbfa2adb83f8063640982459e153f650" }, "DT": { "Package": "DT", "Version": "0.34.0", "Source": "Repository", - "Type": "Package", - "Title": "A Wrapper of the JavaScript Library 'DataTables'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Xianying\", \"Tan\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Maximilian\", \"Girlich\", role = \"ctb\"), person(\"Greg\", \"Freedman Ellis\", role = \"ctb\"), person(\"Johannes\", \"Rauh\", role = \"ctb\"), person(\"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables in htmlwidgets/lib\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js in htmlwidgets/lib\"), person(\"Leon\", \"Gersen\", role = c(\"ctb\", \"cph\"), comment = \"noUiSlider in htmlwidgets/lib\"), person(\"Bartek\", \"Szopka\", role = c(\"ctb\", \"cph\"), comment = \"jquery.highlight.js in htmlwidgets/lib\"), person(\"Alex\", \"Pickering\", role = \"ctb\"), person(\"William\", \"Holmes\", role = \"ctb\"), person(\"Mikko\", \"Marttila\", role = \"ctb\"), person(\"Andres\", \"Quintero\", role = \"ctb\"), person(\"Stéphane\", \"Laurent\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Data objects in R can be rendered as HTML tables using the JavaScript library 'DataTables' (typically via R Markdown or Shiny). The 'DataTables' library has been included in this R package. The package name 'DT' is an abbreviation of 'DataTables'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/DT", - "BugReports": "https://github.com/rstudio/DT/issues", - "Imports": [ + "Repository": "https://cloud.r-project.org", + "Requirements": [ "crosstalk", - "htmltools (>= 0.3.6)", - "htmlwidgets (>= 1.3)", + "htmltools", + "htmlwidgets", "jquerylib", - "jsonlite (>= 0.9.16)", + "jsonlite", "magrittr", "promises" ], - "Suggests": [ - "bslib", - "future", - "httpuv", - "knitr (>= 1.8)", - "rmarkdown", - "shiny (>= 1.6)", - "testit", - "tibble" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut], Joe Cheng [aut], Xianying Tan [aut], Garrick Aden-Buie [aut, cre] (ORCID: ), JJ Allaire [ctb], Maximilian Girlich [ctb], Greg Freedman Ellis [ctb], Johannes Rauh [ctb], SpryMedia Limited [ctb, cph] (DataTables in htmlwidgets/lib), Brian Reavis [ctb, cph] (selectize.js in htmlwidgets/lib), Leon Gersen [ctb, cph] (noUiSlider in htmlwidgets/lib), Bartek Szopka [ctb, cph] (jquery.highlight.js in htmlwidgets/lib), Alex Pickering [ctb], William Holmes [ctb], Mikko Marttila [ctb], Andres Quintero [ctb], Stéphane Laurent [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Garrick Aden-Buie ", - "Repository": "CRAN" + "Hash": "a9d00f59f9c7e613dd4c3e0d27135a03" }, "DarwinShinyModules": { "Package": "DarwinShinyModules", "Version": "0.6.0", "Source": "GitHub", - "Title": "Repository of Shiny Modules for Darwin Result Viewers", - "Authors@R": "c( person(\"Ger\", \"Inberg\", email = \"g.inberg@erasmusmc.nl\", role = c(\"aut\"), comment = c(ORCID = \"0000-0001-8993-8748\")), person(\"Maarten\", \"van Kessel\", email = \"m.l.vankessel@erasmusmc.nl\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0006-8832-6030\")), person(\"Erasmus MC\", role = c(\"cph\")) )", - "Description": "Install this package to access useful shiny modules for building shiny apps to explore results using the Darwin tools.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "Roxygen": "list(markdown = TRUE)", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteUsername": "darwin-eu", + "RemoteRepo": "DarwinShinyModules", + "RemoteRef": "main", + "RemoteSha": "b17492dc42528b2a9f00ae450c4360c411dbdd44", + "Requirements": [ + "DT", + "R", "R6", - "rlang", "checkmate", - "shiny", "dplyr", + "flextable", "ggplot2", - "plotly", - "DT", "gt", - "flextable", - "reactable", + "plotly", "promises", + "purrr", + "reactable", + "rlang", + "shiny", "shinyWidgets", - "stringr", - "purrr" + "stringr" ], - "Suggests": [ - "bslib", - "shinydashboard", - "networkD3", - "testthat (>= 3.0.0)", - "knitr", - "rmarkdown", - "datasets", - "htmlwidgets", - "xml2", - "shinycssloaders", - "DatabaseConnector", - "DBI", - "dbplyr", - "duckdb", - "RSQLite", - "visOmopResults", - "omopgenerics", - "CDMConnector", - "TreatmentPatterns", - "DrugUtilisation", - "IncidencePrevalence", - "DrugExposureDiagnostics (>= 1.1.1)", - "CohortSurvival", - "PatientProfiles", - "CohortCharacteristics", - "usethis", - "tidyr", - "stats", - "CirceR" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "Language": "en-US", - "Collate": "'App.R' 'ShinyModule.R' 'Bridge.R' 'BslibApp.R' 'CohortCharacteristics-Characteristics.R' 'CohortCharacteristics-CohortAttrition.R' 'CohortCharacteristics-LargeScaleCharacteristics.R' 'CohortSurvival-CohortSurvival.R' 'CreateApp.R' 'Darwin-Utils.R' 'DarwinBslibApp.R' 'DarwinDashboardApp.R' 'DarwinShinyModules.R' 'Database.R' 'DatabaseDBC.R' 'DatabaseDBI.R' 'DatabaseOverview.R' 'DrugExposureDiagnostics.R' 'DrugUtilisation-DrugRestart.R' 'DrugUtilisation-DrugUtilisation.R' 'DrugUtilisation-Indication.R' 'DrugUtilisation-Treatment.R' 'IncidencePrevalence-IncidencePrevalence.R' 'InputPanel.R' 'OhdsiModule.R' 'Plot.R' 'Plot-Plotly.R' 'Plot-Static.R' 'Plot-Widget.R' 'ShinydashboardApp.R' 'StudyBackground.R' 'Table-DT.R' 'Table-Flextable.R' 'Table-GT.R' 'Table-Reactable.R' 'Table.R' 'Text.R' 'TreatmentPatterns-TreatmentPatterns.R' 'appBuilderUtils.R' 'launchBslibApp.R' 'launchDarwinBslibApp.R' 'launchDarwinDashboardApp.R' 'launchShinydashboardApp.R' 'makeModule.R' 'preview.R' 'utils-SummarizedResult.R' 'utils.R' 'zzz.R'", - "URL": "https://darwin-eu-dev.github.io/DarwinShinyModules/", - "Config/roxygen2/version": "8.0.0", - "Author": "Ger Inberg [aut] (), Maarten van Kessel [aut, cre] (), Erasmus MC [cph]", - "Maintainer": "Maarten van Kessel ", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "darwin-eu", - "RemoteRepo": "DarwinShinyModules", - "RemoteRef": "main", - "RemoteSha": "b17492dc42528b2a9f00ae450c4360c411dbdd44" + "Hash": "1511c185ae01231e79989fb7b53e5637" }, "DrugExposureDiagnostics": { "Package": "DrugExposureDiagnostics", - "Version": "1.1.7", - "Source": "Repository", - "Title": "Diagnostics for OMOP Common Data Model Drug Records", - "Authors@R": "c( person(\"Ger\", \"Inberg\", email = \"g.inberg@erasmusmc.nl\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-8993-8748\")), person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Theresa\", \"Burkard\", email = \"theresa.burkard@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-1313-4473\")), person(\"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Marti\", \"Catala\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Xintong\", \"Li\", email = \"xintong.li@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-6872-5804\")), person(\"Ross\", \"Williams\", email = \"r.williams@erasmusmc.nl\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-7723-417X\")), person(\"Erasmus MC\", role = c(\"cph\")) )", - "Description": "Ingredient specific diagnostics for drug exposure records in the Observational Medical Outcomes Partnership (OMOP) common data model.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "CDMConnector (>= 1.4.0)", - "dplyr (>= 1.0.0)", - "magrittr (>= 2.0.0)", - "rlang (>= 1.0.0)", - "tidyr (>= 1.2.0)", - "tidyselect (>= 1.2.0)", - "checkmate (>= 2.0.0)", - "glue (>= 1.5.0)", - "DrugUtilisation (>= 0.7.0)", - "omopgenerics (>= 0.2.3)", - "R6" - ], - "Suggests": [ - "testthat (>= 3.0.0)", - "duckdb", - "odbc", - "DBI", - "knitr", - "rmarkdown", - "zip", - "lubridate", - "tibble", - "DT", - "graphics", - "SqlRender", - "ggplot2", - "plotly", - "tictoc", - "here", - "shiny (>= 1.6.0)", - "shinycssloaders", - "shinyWidgets", - "shinyjs", - "shinytest2" - ], - "Config/testthat/edition": "3", - "URL": "https://darwin-eu.github.io/DrugExposureDiagnostics/, https://github.com/darwin-eu/DrugExposureDiagnostics", - "BugReports": "https://github.com/darwin-eu/DrugExposureDiagnostics/issues", - "VignetteBuilder": "knitr", - "Language": "en-US", - "Collate": "'DrugExposureDiagnostics-package.R' 'checkDaysSupply.R' 'checkDrugDose.R' 'checkDrugExposureDuration.R' 'checkDrugQuantity.R' 'checkDrugRoutes.R' 'checkDrugSig.R' 'checkDrugSourceConcepts.R' 'checkDrugType.R' 'checkDrugsMissing.R' 'checkTimeBetween.R' 'checkVerbatimEndDate.R' 'shinyModule.R' 'dataPlotPanel.R' 'executeChecks.R' 'getDrugRecords.R' 'globals.R' 'ingredientDescendantsInDb.R' 'metaDataPanel.R' 'mockDrugExposure.R' 'obscureCounts.R' 'runBenchmark.R' 'shiny.R' 'shinyApp.R' 'summariseChecks.R' 'utils-pipe.R' 'utils.R'", - "NeedsCompilation": "no", - "Author": "Ger Inberg [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Theresa Burkard [aut] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Marti Catala [ctb] (ORCID: ), Mike Du [ctb] (ORCID: ), Xintong Li [ctb] (ORCID: ), Ross Williams [ctb] (ORCID: ), Erasmus MC [cph]", - "Maintainer": "Ger Inberg ", - "Repository": "CRAN" + "Version": "1.1.9", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "CDMConnector", + "DrugUtilisation", + "R", + "R6", + "checkmate", + "dplyr", + "glue", + "magrittr", + "omopgenerics", + "rlang", + "tidyr", + "tidyselect" + ], + "Hash": "9762f087e03fe6a71ab28b4295f4e7a6" }, "DrugUtilisation": { "Package": "DrugUtilisation", - "Version": "1.1.0", + "Version": "1.2.0", "Source": "Repository", - "Title": "Summarise Patient-Level Drug Utilisation in Data Mapped to the OMOP Common Data Model", - "Authors@R": "c( person( \"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\") ), person( \"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\") ), person( \"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\") ), person( \"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\") ), person( \"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\") ), person( \"Xintong\", \"Li\", email = \"xintong.li@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-6872-5804\") ), person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0002-4405-1814\") ), person( \"Nuria\", \"Mercade-Besora\", , email = \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\") ), person( \"Xihang\", \"Chen\", , email = \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\") ))", - "Description": "Summarise patient-level drug utilisation cohorts using data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model. New users and prevalent users cohorts can be generated and their characteristics, indication and drug use summarised.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Suggests": [ - "bit64", - "CDMConnector (>= 1.4.0)", - "CohortConstructor", - "CohortSurvival", - "covr", - "DBI", - "duckdb", - "flextable", - "ggplot2", - "ggtext", - "gt", - "here", - "knitr", - "odbc", - "omock", - "rmarkdown", - "RPostgres", - "scales", - "testthat (>= 3.1.5)", - "tibble", - "visOmopResults (>= 1.3.0)" - ], - "Config/testthat/edition": "3", - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "CodelistGenerator", + "PatientProfiles", + "R", "cli", "clock", - "CodelistGenerator (>= 3.1.0)", "dplyr", "glue", "lifecycle", - "omopgenerics (>= 1.3.1)", - "PatientProfiles (>= 1.4.2)", + "omopgenerics", "purrr", "rlang", "stringr", "tidyr" ], - "Depends": [ - "R (>= 4.1)" - ], - "LazyData": "true", - "URL": "https://darwin-eu.github.io/DrugUtilisation/", - "BugReports": "https://github.com/darwin-eu/DrugUtilisation/issues", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Martí Català [aut, cre] (ORCID: ), Mike Du [ctb] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Edward Burn [aut] (ORCID: ), Xintong Li [ctb] (ORCID: ), Marta Alcalde-Herraiz [ctb] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Xihang Chen [aut] (ORCID: )", - "Maintainer": "Martí Català ", - "Repository": "CRAN" + "Hash": "9eff43ad07834f6d2f6d3ece7df9fbff" }, "IncidencePrevalence": { "Package": "IncidencePrevalence", "Version": "1.2.1", "Source": "Repository", - "Title": "Estimate Incidence and Prevalence using the OMOP Common Data Model", - "Authors@R": "c( person(\"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Berta\", \"Raventos\", email = \"braventos@idiapjgol.info\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-4668-2970\")), person(\"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Adam\", \"Black\", email = \"black@ohdsi.org\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-5576-8701\")), person(\"Ger\", \"Inberg\", email = \"g.inberg@erasmusmc.nl\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-8993-8748\")), person(\"Kim\", \"Lopez\", email = \"kim.lopez@spc.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-8462-8668\")) )", - "Description": "Calculate incidence and prevalence using data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model. Incidence and prevalence can be estimated for the total population in a database or for a stratification cohort.", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "CDMConnector (>= 2.0.0)", - "cli (>= 3.0.0)", + "Repository": "RSPM", + "Requirements": [ + "CDMConnector", + "PatientProfiles", + "R", + "cli", "clock", - "dplyr (>= 1.1.0)", - "glue (>= 1.5.0)", - "omopgenerics (>= 1.1.0)", - "magrittr (>= 2.0.0)", - "PatientProfiles (>= 1.3.1)", - "purrr (>= 0.3.5)", - "rlang (>= 1.0.0)", - "stringr (>= 1.5.0)", - "tidyr (>= 1.2.0)" - ], - "Suggests": [ - "knitr", - "dbplyr", - "rmarkdown", - "RPostgres", - "duckdb (>= 1.0.0)", - "DBI (>= 1.0.0)", - "odbc", - "here", - "Hmisc", - "epitools", - "tictoc", - "testthat (>= 0.3.1)", - "spelling", - "gt", - "flextable", - "ggplot2 (>= 3.4.0)", - "scales (>= 1.1.0)", - "visOmopResults (>= 1.0.2)", - "patchwork", - "binom" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "Language": "en-US", - "License": "Apache License (>= 2)", - "URL": "https://darwin-eu.github.io/IncidencePrevalence/", - "BugReports": "https://github.com/darwin-eu/IncidencePrevalence/issues", - "LazyData": "true", - "NeedsCompilation": "no", - "Author": "Edward Burn [aut, cre] (ORCID: ), Berta Raventos [aut] (ORCID: ), Martí Català [aut] (ORCID: ), Mike Du [ctb] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Adam Black [ctb] (ORCID: ), Ger Inberg [ctb] (ORCID: ), Kim Lopez [ctb] (ORCID: )", - "Maintainer": "Edward Burn ", - "Repository": "CRAN" + "dplyr", + "glue", + "magrittr", + "omopgenerics", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Hash": "ddb15c3903afe4f6fcfe778d83d0f0db" }, "Matrix": { "Package": "Matrix", "Version": "1.7-0", "Source": "Repository", - "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h", - "Date": "2024-03-16", - "Priority": "recommended", - "Title": "Sparse and Dense Matrix Classes and Methods", - "Description": "A rich hierarchy of sparse and dense matrix classes, including general, symmetric, triangular, and diagonal matrices with numeric, logical, or pattern entries. Efficient methods for operating on such matrices, often wrapping the 'BLAS', 'LAPACK', and 'SuiteSparse' libraries.", - "License": "GPL (>= 2) | file LICENCE", - "URL": "https://Matrix.R-forge.R-project.org", - "BugReports": "https://R-forge.R-project.org/tracker/?atid=294&group_id=61", - "Contact": "Matrix-authors@R-project.org", - "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Timothy A.\", \"Davis\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7614-6899\", \"SuiteSparse libraries\", \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")), person(\"George\", \"Karypis\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2753-1437\", \"METIS library\", \"Copyright: Regents of the University of Minnesota\")), person(\"Jason\", \"Riedy\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4345-4200\", \"GNU Octave's condest() and onenormest()\", \"Copyright: Regents of the University of California\")), person(\"Jens\", \"Oehlschlägel\", role = \"ctb\", comment = \"initial nearPD()\"), person(\"R Core Team\", role = \"ctb\", comment = \"base R's matrix implementation\"))", - "Depends": [ - "R (>= 4.4.0)", - "methods" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "grDevices", "graphics", "grid", "lattice", + "methods", "stats", "utils" ], - "Suggests": [ - "MASS", - "datasets", - "sfsmisc", - "tools" - ], - "Enhances": [ - "SparseM", - "graph" - ], - "LazyData": "no", - "LazyDataNote": "not possible, since we use data/*.R and our S4 classes", - "BuildResaveData": "no", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Douglas Bates [aut] (), Martin Maechler [aut, cre] (), Mikael Jagan [aut] (), Timothy A. Davis [ctb] (, SuiteSparse libraries, collaborators listed in dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"), pattern=\"License\", full.names=TRUE, recursive=TRUE)), George Karypis [ctb] (, METIS library, Copyright: Regents of the University of Minnesota), Jason Riedy [ctb] (, GNU Octave's condest() and onenormest(), Copyright: Regents of the University of California), Jens Oehlschlägel [ctb] (initial nearPD()), R Core Team [ctb] (base R's matrix implementation)", - "Maintainer": "Martin Maechler ", - "Repository": "CRAN" + "Hash": "1920b2f11133b12350024297d8a4ff4a" }, "MeasurementDiagnostics": { "Package": "MeasurementDiagnostics", "Version": "0.3.0", "Source": "Repository", - "Type": "Package", - "Title": "Diagnostics for Lists of Codes Based on Measurements", - "Authors@R": "c( person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")))", - "Description": "Diagnostics of list of codes based on concepts from the domains measurement and observation. This package works for data mapped to the Observational Medical Outcomes Partnership Common Data Model.", - "Imports": [ - "cli", - "clock", + "Repository": "RSPM", + "Requirements": [ "CohortCharacteristics", - "CohortConstructor (>= 0.4.0)", + "CohortConstructor", "DBI", + "PatientProfiles", + "R", + "cli", + "clock", "dplyr", "glue", - "omopgenerics (>= 1.2.0)", - "PatientProfiles (>= 1.4.0)", + "omopgenerics", "purrr", "rlang", "stringr", "tidyr" ], - "Suggests": [ - "CDMConnector (>= 2.0.0)", - "CodelistGenerator (>= 3.5.0)", - "visOmopResults (>= 1.4.0)", - "duckdb", - "knitr", - "omock (>= 0.4.0)", - "rmarkdown", - "testthat", - "ggplot2", - "gt", - "flextable", - "RPostgres", - "lubridate", - "odbc" - ], - "Depends": [ - "R (>= 4.1)" - ], - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "URL": "https://ohdsi.github.io/MeasurementDiagnostics/", - "BugReports": "https://github.com/ohdsi/MeasurementDiagnostics/issues", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Edward Burn [aut] (ORCID: ), Nuria Mercade-Besora [aut, cre] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: )", - "Maintainer": "Nuria Mercade-Besora ", - "Repository": "CRAN" + "Hash": "f65160242e48855c915e79944eac707d" }, "OmopSketch": { "Package": "OmopSketch", - "Version": "1.0.1", - "Source": "Repository", - "Title": "Characterise Tables of an OMOP Common Data Model Instance", - "Authors@R": "c( person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\") ), person( \"Kim\", \"Lopez-Guell\", email = \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\") ), person( \"Elin\", \"Rowlands\", email = \"elin.rowlands@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0005-5166-0417\") ), person( \"Cecilia\", \"Campanile\", email = \"cecilia.campanile@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0007-6629-4661\") ), person( \"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\") ), person( \"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\") ))", - "Maintainer": "Cecilia Campanile ", - "Description": "Summarises key information in data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model. Assess suitability to perform specific epidemiological studies and explore the different domains to obtain feasibility counts and trends.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Suggests": [ - "CDMConnector (>= 1.3.0)", - "CodelistGenerator", - "CohortCharacteristics", - "DBI", - "duckdb", - "DT", - "flextable", - "gt", - "here", - "knitr", - "lubridate", - "odbc", - "OmopViewer (>= 0.5.0)", - "sortable", - "reactable", - "remotes", - "rmarkdown", - "RPostgres", - "shinyWidgets", - "testthat (>= 3.0.0)", - "withr", - "omock (>= 0.4.0)", - "covr", - "ggplot2", - "visOmopResults (>= 1.4.2)", - "devtools", - "usethis", - "plotly" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Imports": [ + "Version": "1.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "CohortConstructor", + "PatientProfiles", + "R", "cli", "clock", - "CohortConstructor (>= 0.3.1)", "dplyr", "lifecycle", - "omopgenerics (>= 1.3.1)", - "PatientProfiles (>= 1.4.3)", + "omopgenerics", "purrr", "rlang", "stringr", + "tibble", "tidyr" ], - "Depends": [ - "R (>= 4.1)" + "Hash": "08e11b959fa5743c902e6b484e7bc0d8" + }, + "ParallelLogger": { + "Package": "ParallelLogger", + "Version": "3.5.1", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R", + "jsonlite", + "memuse", + "methods", + "parallel", + "rstudioapi", + "snow", + "utils", + "xml2" ], - "URL": "https://OHDSI.github.io/OmopSketch/", - "BugReports": "https://github.com/OHDSI/OmopSketch/issues", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Marta Alcalde-Herraiz [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Elin Rowlands [aut] (ORCID: ), Cecilia Campanile [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Martí Català [aut] (ORCID: )", - "Repository": "CRAN" + "Hash": "731821a8d5f403dd1ebcebfd6e215056" }, "PatientProfiles": { "Package": "PatientProfiles", "Version": "1.5.0", "Source": "Repository", - "Type": "Package", - "Title": "Identify Characteristics of Patients in the OMOP Common Data Model", - "Authors@R": "c( person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Yuchen\", \"Guo\", , \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-0847-4855\")), person(\"Mike\", \"Du\", , \"mike.du@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9517-8834\")), person(\"Kim\", \"Lopez-Guell\", , \"kim.lopez@spc.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-8462-8668\")), person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Xintong\", \"Li\", , \"xintong.li@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-6872-5804\")), person(\"Xihang\", \"Chen\", , \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0001-8112-8959\")) )", - "Maintainer": "Martí Català ", - "Description": "Identify the characteristics of patients in data mapped to the Observational Medical Outcomes Partnership (OMOP) common data model.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Suggests": [ - "bit64", - "CDMConnector (>= 1.3.1)", - "CodelistGenerator", - "CohortConstructor", - "covr", - "DBI", - "dbplyr", - "DT", - "duckdb (>= 0.9.0)", - "ggplot2", - "glue", - "gt", - "here", - "Hmisc", - "knitr", - "odbc", - "omock", - "patchwork", - "rmarkdown", - "RPostgres", - "scales", - "spelling", - "testthat (>= 3.1.5)", - "tictoc", - "withr" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "cli", "clock", "dplyr", "lifecycle", - "omopgenerics (>= 1.3.1)", + "omopgenerics", "purrr", "rlang", "stringr", "tidyr" ], - "URL": "https://darwin-eu.github.io/PatientProfiles/", - "BugReports": "https://github.com/darwin-eu/PatientProfiles/issues", - "Language": "en-US", - "Depends": [ - "R (>= 4.1.0)" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Martí Català [aut, cre] (ORCID: ), Yuchen Guo [aut] (ORCID: ), Mike Du [aut] (ORCID: ), Kim Lopez-Guell [aut] (ORCID: ), Edward Burn [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Xintong Li [ctb] (ORCID: ), Xihang Chen [ctb] (ORCID: )", - "Repository": "CRAN" + "Hash": "ceba13a7a98e77de7a048c98bfb4504b" }, "PhenotypeR": { "Package": "PhenotypeR", "Version": "0.5.0", "Source": "Repository", - "Type": "Package", - "Title": "Assess Study Cohorts Using a Common Data Model", - "Authors@R": "c( person(\"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9286-1128\")), person(\"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\")), person(\"Xihang\", \"Chen\", , \"xihang.chen@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0001-8112-8959\")), person(\"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0002-4405-1814\")), person(\"Nuria\", \"Mercade-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0009-0006-7948-3747\")), person(\"Albert\", \"Prats-Uribe\", , \"albert.prats-uribe@ndorms.ox.ac.uk\", role = \"aut\", comment = c(ORCID = \"0000-0003-1202-9153\")))", - "Description": "Phenotype study cohorts in data mapped to the Observational Medical Outcomes Partnership Common Data Model. Diagnostics are run at the database, code list, cohort, and population level to assess whether study cohorts are ready for research.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 4.1.0)" - ], - "Suggests": [ - "CDMConnector (>= 1.6.1)", - "duckdb", - "DBI", - "gt", - "omock", - "testthat (>= 3.0.0)", - "knitr", - "glue", - "RPostgres", - "ggplot2", - "stringr", - "shiny (>= 1.11.1)", - "DiagrammeR", - "DiagrammeRsvg", - "reactable", - "rsvg", - "sortable", - "shinycssloaders", - "here", - "DT", - "bslib", - "shinyWidgets", - "plotly", - "tidyr", - "scales", - "usethis", - "rmarkdown", - "CohortSurvival (>= 1.1.0)", - "ellmer", - "htmltools", - "visOmopResults (>= 1.4.2)", - "rsconnect", - "cpp11", - "progress", - "qs2", - "lubridate", - "systemfonts", - "officer", - "fs", - "OmopConstructor", - "tools", - "jsonlite", - "jsonvalidate", - "shinyjs" - ], - "Config/testthat/edition": "3", - "RoxygenNote": "7.3.3", - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "CodelistGenerator", + "CohortCharacteristics", + "CohortConstructor", + "DrugUtilisation", + "IncidencePrevalence", + "MeasurementDiagnostics", + "OmopSketch", + "PatientProfiles", + "R", "cli", "clock", - "CodelistGenerator (>= 4.0.2)", - "CohortCharacteristics (>= 1.1.3)", - "CohortConstructor (>= 0.6.2)", "dplyr", - "DrugUtilisation (>= 1.1.0)", - "IncidencePrevalence (>= 1.2.0)", - "MeasurementDiagnostics (>= 0.3.0)", - "omopgenerics (>= 1.2.0)", - "OmopSketch (>= 1.0.1)", - "PatientProfiles (>= 1.4.5)", + "omopgenerics", "purrr", "readr", "rlang", "vctrs" ], - "URL": "https://ohdsi.github.io/PhenotypeR/", - "BugReports": "https://github.com/OHDSI/PhenotypeR/issues", - "VignetteBuilder": "knitr", - "Config/testthat/parallel": "true", - "NeedsCompilation": "no", - "Author": "Edward Burn [aut, cre] (ORCID: ), Martí Català [aut] (ORCID: ), Xihang Chen [aut] (ORCID: ), Marta Alcalde-Herraiz [aut] (ORCID: ), Nuria Mercade-Besora [aut] (ORCID: ), Albert Prats-Uribe [aut] (ORCID: )", - "Maintainer": "Edward Burn ", - "Repository": "CRAN" + "Hash": "7b1d6d84bb3d9efb9079afb40dc5a866" }, "R6": { "Package": "R6", "Version": "2.6.1", "Source": "Repository", - "Title": "Encapsulated Classes with Reference Semantics", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Creates classes with reference semantics, similar to R's built-in reference classes. Compared to reference classes, R6 classes are simpler and lighter-weight, and they are not built on S4 classes so they do not require the methods package. These classes allow public and private members, and they support inheritance, even when the classes are defined in different packages.", - "License": "MIT + file LICENSE", - "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6", - "BugReports": "https://github.com/r-lib/R6/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Suggests": [ - "lobstr", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate, ggplot2, microbenchmark, scales", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "d4335fe7207f1c01ab8c41762f5840d4" }, "RColorBrewer": { "Package": "RColorBrewer", "Version": "1.1-3", "Source": "Repository", - "Date": "2022-04-03", - "Title": "ColorBrewer Palettes", - "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", - "Author": "Erich Neuwirth [aut, cre]", - "Maintainer": "Erich Neuwirth ", - "Depends": [ - "R (>= 2.0.0)" + "Repository": "RSPM", + "Requirements": [ + "R" ], - "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", - "License": "Apache License 2.0", - "NeedsCompilation": "no", - "Repository": "CRAN" + "Hash": "45f0398006e83a5b10b72a90663d8d8c" }, "Rcpp": { "Package": "Rcpp", "Version": "1.1.1-1.1", "Source": "Repository", - "Title": "Seamless R and C++ Integration", - "Date": "2026-04-19", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", - "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "methods", "utils" ], - "Suggests": [ - "tinytest", - "inline", - "rbenchmark", - "pkgKitten (>= 0.1.2)" - ], - "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp", - "License": "GPL (>= 2)", - "BugReports": "https://github.com/RcppCore/Rcpp/issues", - "MailingList": "rcpp-devel@lists.r-forge.r-project.org", - "RoxygenNote": "6.1.1", - "Encoding": "UTF-8", - "VignetteBuilder": "Rcpp", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), JJ Allaire [aut] (ORCID: ), Kevin Ushey [aut] (ORCID: ), Qiang Kou [aut] (ORCID: ), Nathan Russell [aut], Iñaki Ucar [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), John Chambers [aut]", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" + "Hash": "8842cfd023a523ec9e011b9e4aab50ef" }, "S7": { "Package": "S7", "Version": "0.2.2", "Source": "Repository", - "Title": "An Object Oriented System Meant to Become a Successor to S3 and S4", - "Authors@R": "c( person(\"Object-Oriented Programming Working Group\", role = \"cph\"), person(\"Davis\", \"Vaughan\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Tomasz\", \"Kalinowski\", role = \"aut\"), person(\"Will\", \"Landau\", role = \"aut\"), person(\"Michael\", \"Lawrence\", role = \"aut\"), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Luke\", \"Tierney\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")) )", - "Description": "A new object oriented programming system designed to be a successor to S3 and S4. It includes formal class, generic, and method specification, and a limited form of multiple dispatch. It has been designed and implemented collaboratively by the R Consortium Object-Oriented Programming Working Group, which includes representatives from R-Core, 'Bioconductor', 'Posit'/'tidyverse', and the wider R community.", - "License": "MIT + file LICENSE", - "URL": "https://rconsortium.github.io/S7/, https://github.com/RConsortium/S7", - "BugReports": "https://github.com/RConsortium/S7/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "utils" ], - "Suggests": [ - "bench", - "callr", - "covr", - "knitr", - "methods", - "rmarkdown", - "testthat (>= 3.2.0)", - "tibble" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "sloop", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Config/testthat/start-first": "external-generic", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Object-Oriented Programming Working Group [cph], Davis Vaughan [aut], Jim Hester [aut] (ORCID: ), Tomasz Kalinowski [aut], Will Landau [aut], Michael Lawrence [aut], Martin Maechler [aut] (ORCID: ), Luke Tierney [aut], Hadley Wickham [aut, cre] (ORCID: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "6a72e94a8c9be4ef719af3aa3628f2dc" }, "V8": { "Package": "V8", "Version": "8.2.0", "Source": "Repository", - "Type": "Package", - "Title": "Embedded JavaScript and WebAssembly Engine for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"George\", \"Stagg\", role = \"ctb\", comment = c(ORCID = \"0009-0006-3173-9846\")), person(\"Jan Marvin\", \"Garbuszus\", role = \"ctb\"))", - "Description": "An R interface to V8 : Google's open source JavaScript and WebAssembly engine. This package can be compiled either with V8 or NodeJS when built as a shared library.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/V8", - "BugReports": "https://github.com/jeroen/v8/issues", - "SystemRequirements": "On Linux you can build against libv8-dev (Debian) or v8-devel (Fedora). We also provide static libv8 binaries for most platforms, see the README for details.", - "NeedsCompilation": "yes", - "VignetteBuilder": "knitr", - "Imports": [ - "Rcpp (>= 0.12.12)", - "jsonlite (>= 1.0)", - "curl (>= 1.0)", + "Repository": "CRAN", + "Requirements": [ + "Rcpp", + "curl", + "jsonlite", "utils" ], - "LinkingTo": [ - "Rcpp" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown" - ], - "RoxygenNote": "7.3.1", - "Language": "en-US", - "Encoding": "UTF-8", - "Biarch": "true", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), George Stagg [ctb] (ORCID: ), Jan Marvin Garbuszus [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Hash": "9fcf4128ded76196cf5f9e731d5e14ef" }, "askpass": { "Package": "askpass", "Version": "1.2.1", "Source": "Repository", - "Type": "Package", - "Title": "Password Entry Utilities for R, Git, and SSH", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.r-universe.dev/askpass", - "BugReports": "https://github.com/r-lib/askpass/issues", - "Encoding": "UTF-8", - "Imports": [ - "sys (>= 2.1)" - ], - "RoxygenNote": "7.2.3", - "Suggests": [ - "testthat" - ], - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Repository": "CRAN", + "Requirements": [ + "sys" + ], + "Hash": "c39f4155b3ceb1a9a2799d700fbd4b6a" }, "backports": { "Package": "backports", "Version": "1.5.1", "Source": "Repository", - "Type": "Package", - "Title": "Reimplementations of Functions Introduced Since R-3.0.0", - "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Duncan\", \"Murdoch\", NULL, \"murdoch.duncan@gmail.com\", role = c(\"aut\")), person(\"R Core Team\", role = \"aut\"))", - "Maintainer": "Michel Lang ", - "Description": "Functions introduced or changed since R v3.0.0 are re-implemented in this package. The backports are conditionally exported in order to let R resolve the function name to either the implemented backport, or the respective base version, if available. Package developers can make use of new functions or arguments by selectively importing specific backports to support older installations.", - "URL": "https://github.com/r-lib/backports", - "BugReports": "https://github.com/r-lib/backports/issues", - "License": "GPL-2 | GPL-3", - "NeedsCompilation": "yes", - "ByteCompile": "yes", - "Depends": [ - "R (>= 3.0.0)" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Author": "Michel Lang [cre, aut] (ORCID: ), Duncan Murdoch [aut], R Core Team [aut]", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "e3e65442a2749b59692220f368f46c46" }, "base64enc": { "Package": "base64enc", "Version": "0.1-6", "Source": "Repository", - "Title": "Tools for 'base64' Encoding", - "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.nz, ORCID: )", - "Authors@R": "person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.nz\", ORCID=\"0000-0003-2297-1732\"))", - "Maintainer": "Simon Urbanek ", - "Depends": [ - "R (>= 2.9.0)" + "Repository": "RSPM", + "Requirements": [ + "R" ], - "Enhances": [ - "png" - ], - "Description": "Tools for handling 'base64' encoding. It is more flexible than the orphaned 'base64' package.", - "License": "GPL-2 | GPL-3", - "URL": "https://www.rforge.net/base64enc", - "BugReports": "https://github.com/s-u/base64enc/issues", - "NeedsCompilation": "yes", - "Repository": "CRAN" + "Hash": "5edb675b7baa6e9a0d86dd2c28de1676" }, "bigD": { "Package": "bigD", "Version": "0.3.1", "Source": "Repository", - "Type": "Package", - "Title": "Flexibly Format Dates and Times to a Given Locale", - "Description": "Format dates and times flexibly and to whichever locales make sense. Parses dates, times, and date-times in various formats (including string-based ISO 8601 constructions). The formatting syntax gives the user many options for formatting the date and time output in a precise manner. Time zones in the input can be expressed in multiple ways and there are many options for formatting time zones in the output as well. Several of the provided helper functions allow for automatic generation of locale-aware formatting patterns based on date/time skeleton formats and standardized date/time formats with varying specificity.", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Olivier\", \"Roy\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/bigD/, https://github.com/rstudio/bigD", - "BugReports": "https://github.com/rstudio/bigD/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "testthat (>= 3.0.0)", - "vctrs (>= 0.5.0)" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Olivier Roy [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "ad123ab90aa2fc795512f61ff6939c4a" }, "bit": { "Package": "bit", "Version": "4.6.0", "Source": "Repository", - "Title": "Classes and Methods for Fast Memory-Efficient Boolean Selections", - "Authors@R": "c( person(\"Michael\", \"Chirico\", email = \"MichaelChirico4@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role = \"aut\"), person(\"Brian\", \"Ripley\", role = \"ctb\") )", - "Depends": [ - "R (>= 3.4.0)" + "Repository": "RSPM", + "Requirements": [ + "R" ], - "Suggests": [ - "testthat (>= 3.0.0)", - "roxygen2", - "knitr", - "markdown", - "rmarkdown", - "microbenchmark", - "bit64 (>= 4.0.0)", - "ff (>= 4.0.0)" - ], - "Description": "Provided are classes for boolean and skewed boolean vectors, fast boolean methods, fast unique and non-unique integer sorting, fast set operations on sorted and unsorted sets of integers, and foundations for ff (range index, compression, chunked processing).", - "License": "GPL-2 | GPL-3", - "LazyLoad": "yes", - "ByteCompile": "yes", - "Encoding": "UTF-8", - "URL": "https://github.com/r-lib/bit", - "VignetteBuilder": "knitr, rmarkdown", - "RoxygenNote": "7.3.2", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Brian Ripley [ctb]", - "Maintainer": "Michael Chirico ", - "Repository": "CRAN" + "Hash": "ebe86ffd194564abdc895d87742d5a29" }, "bit64": { "Package": "bit64", "Version": "4.8.2", "Source": "Repository", - "Title": "A S3 Class for Vectors of 64bit Integers", - "Authors@R": "c( person(\"Michael\", \"Chirico\", email=\"michaelchirico4@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role=\"aut\"), person(\"Leonardo\", \"Silvestri\", role=\"ctb\"), person(\"Ofek\", \"Shilon\", role=\"ctb\"), person(\"Christian\", \"Ullerich\", role=\"ctb\") )", - "Depends": [ - "R (>= 3.5.0)" - ], - "Description": "Package 'bit64' provides serializable S3 atomic 64bit (signed) integers. These are useful for handling database keys and exact counting in +-2^63. WARNING: do not use them as replacement for 32bit integers, integer64 are not supported for subscripting by R-core and they have different semantics when combined with double, e.g. integer64 + double => integer64. Class integer64 can be used in vectors, matrices, arrays and data.frames. Methods are available for coercion from and to logicals, integers, doubles, characters and factors as well as many elementwise and summary functions. Many fast algorithmic operations such as 'match' and 'order' support inter- active data exploration and manipulation and optionally leverage caching.", - "License": "GPL-2 | GPL-3", - "LazyLoad": "yes", - "ByteCompile": "yes", - "URL": "https://github.com/r-lib/bit64, https://bit64.r-lib.org", - "Encoding": "UTF-8", - "Imports": [ - "bit (>= 4.0.0)", + "Repository": "CRAN", + "Requirements": [ + "R", + "bit", "graphics", "methods", "stats", "utils" ], - "Suggests": [ - "patrick (>= 0.3.0)", - "testthat (>= 3.3.0)", - "withr" - ], - "Config/testthat/edition": "3", - "Config/Needs/development": "patrick, testthat", - "Config/Needs/website": "tidyverse/tidytemplate", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Leonardo Silvestri [ctb], Ofek Shilon [ctb], Christian Ullerich [ctb]", - "Maintainer": "Michael Chirico ", - "Repository": "CRAN" + "Hash": "71778c0b60bbf439ac64e6a8be695917" }, "bitops": { "Package": "bitops", "Version": "1.0-9", "Source": "Repository", - "Date": "2024-10-03", - "Authors@R": "c( person(\"Steve\", \"Dutky\", role = \"aut\", email = \"sdutky@terpalum.umd.edu\", comment = \"S original; then (after MM's port) revised and modified\"), person(\"Martin\", \"Maechler\", role = c(\"cre\", \"aut\"), email = \"maechler@stat.math.ethz.ch\", comment = c(\"Initial R port; tweaks\", ORCID = \"0000-0002-8685-9910\")))", - "Title": "Bitwise Operations", - "Description": "Functions for bitwise operations on integer vectors.", - "License": "GPL (>= 2)", - "URL": "https://github.com/mmaechler/R-bitops", - "BugReports": "https://github.com/mmaechler/R-bitops/issues", - "NeedsCompilation": "yes", - "Author": "Steve Dutky [aut] (S original; then (after MM's port) revised and modified), Martin Maechler [cre, aut] (Initial R port; tweaks, )", - "Maintainer": "Martin Maechler ", - "Repository": "CRAN" + "Repository": "RSPM", + "Hash": "d972ef991d58c19e6efa71b21f5e144b" }, "blob": { "Package": "blob", "Version": "1.3.0", "Source": "Repository", - "Title": "A Simple S3 Class for Representing Vectors of Binary Data ('BLOBS')", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = \"cre\"), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "R's raw vector is useful for storing a single binary object. What if you want to put a vector of them in a data frame? The 'blob' package provides the blob object, a list of raw vectors, suitable for use as a column in data frame.", - "License": "MIT + file LICENSE", - "URL": "https://blob.tidyverse.org, https://github.com/tidyverse/blob", - "BugReports": "https://github.com/tidyverse/blob/issues", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "methods", "rlang", - "vctrs (>= 0.2.1)" + "vctrs" ], - "Suggests": [ - "covr", - "crayon", - "pillar (>= 1.2.1)", - "testthat (>= 3.0.0)" - ], - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Kirill Müller [cre], RStudio [cph, fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" + "Hash": "1e0ae40898be928695fd90a80e816253" }, "brand.yml": { "Package": "brand.yml", "Version": "0.1.0", "Source": "Repository", - "Title": "Unified Branding with a Simple YAML File", - "Authors@R": "c( person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Read and process 'brand.yml' 'YAML' files. 'brand.yml' is a simple, portable 'YAML' file that codifies your company's brand guidelines into a format that can be used by 'Quarto', 'Shiny' and 'R' tooling to create branded outputs. Maintain unified, branded theming for web applications to printed reports to dashboards and presentations with a consistent look and feel.", - "License": "MIT + file LICENSE", - "URL": "https://posit-dev.github.io/brand-yml/pkg/r/, https://github.com/posit-dev/brand-yml", - "BugReports": "https://github.com/posit-dev/brand-yml/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "cli", - "rlang (>= 1.1.0)", + "rlang", "utils", "yaml" ], - "Suggests": [ - "base64enc", - "dplyr", - "flextable", - "ggiraph", - "ggplot2 (>= 4.0.0)", - "gt", - "htmltools", - "knitr", - "mime", - "palmerpenguins", - "patchwork", - "plotly", - "prismatic", - "rmarkdown", - "sass", - "stringr", - "testthat (>= 3.0.0)", - "thematic (>= 0.1.7.9000)", - "tidyr", - "tidyverse", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Garrick Aden-Buie [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Garrick Aden-Buie ", - "Repository": "CRAN" + "Hash": "e1bcd4c1abdbfef99c66199235be76eb" }, "broom": { "Package": "broom", "Version": "1.0.13", "Source": "Repository", - "Type": "Package", - "Title": "Convert Statistical Objects into Tidy Tibbles", - "Authors@R": "c( person(\"David\", \"Robinson\", , \"admiral.david@gmail.com\", role = \"aut\"), person(\"Alex\", \"Hayes\", , \"alexpghayes@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4985-5160\")), person(\"Simon\", \"Couch\", , \"simon.couch@posit.co\", role = c(\"aut\"), comment = c(ORCID = \"0000-0001-5676-5107\")), person(\"Emil\", \"Hvitfeldt\", , \"emil.hvitfeldt@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0679-1945\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Indrajeet\", \"Patil\", , \"patilindrajeet.science@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1995-6531\")), person(\"Derek\", \"Chiu\", , \"dchiu@bccrc.ca\", role = \"ctb\"), person(\"Matthieu\", \"Gomez\", , \"mattg@princeton.edu\", role = \"ctb\"), person(\"Boris\", \"Demeshev\", , \"boris.demeshev@gmail.com\", role = \"ctb\"), person(\"Dieter\", \"Menne\", , \"dieter.menne@menne-biomed.de\", role = \"ctb\"), person(\"Benjamin\", \"Nutter\", , \"nutter@battelle.org\", role = \"ctb\"), person(\"Luke\", \"Johnston\", , \"luke.johnston@mail.utoronto.ca\", role = \"ctb\"), person(\"Ben\", \"Bolker\", , \"bolker@mcmaster.ca\", role = \"ctb\"), person(\"Francois\", \"Briatte\", , \"f.briatte@gmail.com\", role = \"ctb\"), person(\"Jeffrey\", \"Arnold\", , \"jeffrey.arnold@gmail.com\", role = \"ctb\"), person(\"Jonah\", \"Gabry\", , \"jsg2201@columbia.edu\", role = \"ctb\"), person(\"Luciano\", \"Selzer\", , \"luciano.selzer@gmail.com\", role = \"ctb\"), person(\"Gavin\", \"Simpson\", , \"ucfagls@gmail.com\", role = \"ctb\"), person(\"Jens\", \"Preussner\", , \"jens.preussner@mpi-bn.mpg.de\", role = \"ctb\"), person(\"Jay\", \"Hesselberth\", , \"jay.hesselberth@gmail.com\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"ctb\"), person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = \"ctb\"), person(\"Alessandro\", \"Gasparini\", , \"ag475@leicester.ac.uk\", role = \"ctb\"), person(\"Lukasz\", \"Komsta\", , \"lukasz.komsta@umlub.pl\", role = \"ctb\"), person(\"Frederick\", \"Novometsky\", role = \"ctb\"), person(\"Wilson\", \"Freitas\", role = \"ctb\"), person(\"Michelle\", \"Evans\", role = \"ctb\"), person(\"Jason Cory\", \"Brunson\", , \"cornelioid@gmail.com\", role = \"ctb\"), person(\"Simon\", \"Jackson\", , \"drsimonjackson@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Whalley\", , \"ben.whalley@plymouth.ac.uk\", role = \"ctb\"), person(\"Karissa\", \"Whiting\", , \"karissa.whiting@gmail.com\", role = \"ctb\"), person(\"Yves\", \"Rosseel\", , \"yrosseel@gmail.com\", role = \"ctb\"), person(\"Michael\", \"Kuehn\", , \"mkuehn10@gmail.com\", role = \"ctb\"), person(\"Jorge\", \"Cimentada\", , \"cimentadaj@gmail.com\", role = \"ctb\"), person(\"Erle\", \"Holgersen\", , \"erle.holgersen@gmail.com\", role = \"ctb\"), person(\"Karl\", \"Dunkle Werner\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Ethan\", \"Christensen\", , \"christensen.ej@gmail.com\", role = \"ctb\"), person(\"Steven\", \"Pav\", , \"shabbychef@gmail.com\", role = \"ctb\"), person(\"Paul\", \"PJ\", , \"pjpaul.stephens@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Patrick\", \"Kennedy\", , \"pkqstr@protonmail.com\", role = \"ctb\"), person(\"Lily\", \"Medina\", , \"lilymiru@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Fannin\", , \"captain@pirategrunt.com\", role = \"ctb\"), person(\"Jason\", \"Muhlenkamp\", , \"jason.muhlenkamp@gmail.com\", role = \"ctb\"), person(\"Matt\", \"Lehman\", role = \"ctb\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Nic\", \"Crane\", role = \"ctb\"), person(\"Andrew\", \"Bates\", role = \"ctb\"), person(\"Vincent\", \"Arel-Bundock\", , \"vincent.arel-bundock@umontreal.ca\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2042-7063\")), person(\"Hideaki\", \"Hayashi\", role = \"ctb\"), person(\"Luis\", \"Tobalina\", role = \"ctb\"), person(\"Annie\", \"Wang\", , \"anniewang.uc@gmail.com\", role = \"ctb\"), person(\"Wei Yang\", \"Tham\", , \"weiyang.tham@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", , \"clara.wang.94@gmail.com\", role = \"ctb\"), person(\"Abby\", \"Smith\", , \"als1@u.northwestern.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3207-0375\")), person(\"Jasper\", \"Cooper\", , \"jaspercooper@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8639-3188\")), person(\"E Auden\", \"Krauska\", , \"krauskae@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1466-5850\")), person(\"Alex\", \"Wang\", , \"x249wang@uwaterloo.ca\", role = \"ctb\"), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Charles\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9978-011X\")), person(\"Jared\", \"Wilber\", role = \"ctb\"), person(\"Vilmantas\", \"Gegzna\", , \"GegznaV@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9500-5167\")), person(\"Eduard\", \"Szoecs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Angus\", \"Moore\", , \"angusmoore9@gmail.com\", role = \"ctb\"), person(\"Nick\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Marius\", \"Barth\", , \"marius.barth.uni.koeln@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3421-6665\")), person(\"Bruna\", \"Wundervald\", , \"brunadaviesw@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8163-220X\")), person(\"Joyce\", \"Cahoon\", , \"joyceyu48@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7217-4702\")), person(\"Grant\", \"McDermott\", , \"grantmcd@uoregon.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(\"Kevin\", \"Zarca\", , \"kevin.zarca@gmail.com\", role = \"ctb\"), person(\"Shiro\", \"Kuriwaki\", , \"shirokuriwaki@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5687-2647\")), person(\"Lukas\", \"Wallrich\", , \"lukas.wallrich@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2121-5177\")), person(\"James\", \"Martherus\", , \"james@martherus.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8285-3300\")), person(\"Chuliang\", \"Xiao\", , \"cxiao@umich.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8466-9398\")), person(\"Joseph\", \"Larmarange\", , \"joseph@larmarange.net\", role = \"ctb\"), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", , \"michal2992@gmail.com\", role = \"ctb\"), person(\"Hakon\", \"Malmedal\", , \"hmalmedal@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", role = \"ctb\"), person(\"Sergio\", \"Oller\", , \"sergioller@gmail.com\", role = \"ctb\"), person(\"Luke\", \"Sonnet\", , \"luke.sonnet@gmail.com\", role = \"ctb\"), person(\"Jim\", \"Hester\", , \"jim.hester@posit.co\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Bernie\", \"Gray\", , \"bfgray3@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9190-6032\")), person(\"Mara\", \"Averick\", , \"mara@posit.co\", role = \"ctb\"), person(\"Aaron\", \"Jacobs\", , \"atheriel@gmail.com\", role = \"ctb\"), person(\"Andreas\", \"Bender\", , \"bender.at.R@gmail.com\", role = \"ctb\"), person(\"Sven\", \"Templer\", , \"sven.templer@gmail.com\", role = \"ctb\"), person(\"Paul-Christian\", \"Buerkner\", , \"paul.buerkner@gmail.com\", role = \"ctb\"), person(\"Matthew\", \"Kay\", , \"mjskay@umich.edu\", role = \"ctb\"), person(\"Erwan\", \"Le Pennec\", , \"lepennec@gmail.com\", role = \"ctb\"), person(\"Johan\", \"Junkka\", , \"johan.junkka@umu.se\", role = \"ctb\"), person(\"Hao\", \"Zhu\", , \"haozhu233@gmail.com\", role = \"ctb\"), person(\"Benjamin\", \"Soltoff\", , \"soltoffbc@uchicago.edu\", role = \"ctb\"), person(\"Zoe\", \"Wilkinson Saldana\", , \"zoewsaldana@gmail.com\", role = \"ctb\"), person(\"Tyler\", \"Littlefield\", , \"tylurp1@gmail.com\", role = \"ctb\"), person(\"Charles T.\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\"), person(\"Shabbh E.\", \"Banks\", role = \"ctb\"), person(\"Serina\", \"Robinson\", , \"robi0916@umn.edu\", role = \"ctb\"), person(\"Roger\", \"Bivand\", , \"Roger.Bivand@nhh.no\", role = \"ctb\"), person(\"Riinu\", \"Ots\", , \"riinuots@gmail.com\", role = \"ctb\"), person(\"Nicholas\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Nina\", \"Jakobsen\", role = \"ctb\"), person(\"Michael\", \"Weylandt\", , \"michael.weylandt@gmail.com\", role = \"ctb\"), person(\"Lisa\", \"Lendway\", , \"llendway@macalester.edu\", role = \"ctb\"), person(\"Karl\", \"Hailperin\", , \"khailper@gmail.com\", role = \"ctb\"), person(\"Josue\", \"Rodriguez\", , \"jerrodriguez@ucdavis.edu\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", , \"jenny@posit.co\", role = \"ctb\"), person(\"Chris\", \"Jarvis\", , \"Christopher1.jarvis@gmail.com\", role = \"ctb\"), person(\"Greg\", \"Macfarlane\", , \"gregmacfarlane@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Mannakee\", , \"bmannakee@gmail.com\", role = \"ctb\"), person(\"Drew\", \"Tyre\", , \"atyre2@unl.edu\", role = \"ctb\"), person(\"Shreyas\", \"Singh\", , \"shreyas.singh.298@gmail.com\", role = \"ctb\"), person(\"Laurens\", \"Geffert\", , \"laurensgeffert@gmail.com\", role = \"ctb\"), person(\"Hong\", \"Ooi\", , \"hongooi@microsoft.com\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", , \"henrikb@braju.com\", role = \"ctb\"), person(\"Eduard\", \"Szocs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", , \"davidhughjones@gmail.com\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", , \"Matthieu.Stigler@gmail.com\", role = \"ctb\"), person(\"Hugo\", \"Tavares\", , \"hm533@cam.ac.uk\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9373-2726\")), person(\"R. Willem\", \"Vervoort\", , \"Willemvervoort@gmail.com\", role = \"ctb\"), person(\"Brenton M.\", \"Wiernik\", , \"brenton@wiernik.org\", role = \"ctb\"), person(\"Josh\", \"Yamamoto\", , \"joshuayamamoto5@gmail.com\", role = \"ctb\"), person(\"Jasme\", \"Lee\", role = \"ctb\"), person(\"Taren\", \"Sanders\", , \"taren.sanders@acu.edu.au\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4504-6008\")), person(\"Ilaria\", \"Prosdocimi\", , \"prosdocimi.ilaria@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8565-094X\")), person(\"Daniel D.\", \"Sjoberg\", , \"danield.sjoberg@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0862-2018\")), person(\"Alex\", \"Reinhart\", , \"areinhar@stat.cmu.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6658-514X\")) )", - "Description": "Summarizes key information about statistical objects in tidy tibbles. This makes it easy to report results, create plots and consistently work with large numbers of models at once. Broom provides three verbs that each provide different types of information about a model. tidy() summarizes information about model components such as coefficients of a regression. glance() reports information about an entire model, such as goodness of fit measures like AIC and BIC. augment() adds information about individual observations to a dataset, such as fitted values or influence measures.", - "License": "MIT + file LICENSE", - "URL": "https://broom.tidymodels.org/, https://github.com/tidymodels/broom", - "BugReports": "https://github.com/tidymodels/broom/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "backports", "cli", - "dplyr (>= 1.0.0)", - "generics (>= 0.0.2)", + "dplyr", + "generics", "glue", "lifecycle", "purrr", - "rlang (>= 1.1.0)", + "rlang", "stringr", - "tibble (>= 3.0.0)", - "tidyr (>= 1.0.0)" - ], - "Suggests": [ - "AER", - "AUC", - "bbmle", - "betareg (>= 3.2-1)", - "biglm", - "binGroup", - "boot", - "btergm (>= 1.10.6)", - "car (>= 3.1-2)", - "carData", - "caret", - "cluster", - "cmprsk", - "coda", - "covr", - "drc", - "e1071", - "emmeans", - "epiR (>= 2.0.85)", - "ergm (>= 3.10.4)", - "fixest (>= 0.9.0)", - "gam (>= 1.15)", - "gee", - "geepack", - "ggplot2", - "glmnet", - "glmnetUtils", - "gmm", - "Hmisc", - "interp", - "irlba", - "joineRML", - "Kendall", - "knitr", - "ks", - "Lahman", - "lavaan (>= 0.6.18)", - "leaps", - "lfe", - "lm.beta", - "lme4", - "lmodel2", - "lmtest (>= 0.9.38)", - "lsmeans", - "maps", - "margins", - "MASS", - "mclust", - "mediation", - "metafor", - "mfx", - "mgcv", - "mlogit", - "modeldata", - "modeltests (>= 0.1.6)", - "muhaz", - "multcomp", - "network", - "nnet", - "ordinal", - "plm", - "poLCA", - "psych", - "quantreg", - "rmarkdown", - "robust", - "robustbase", - "rsample", - "sandwich", - "spatialreg", - "spdep (>= 1.1)", - "speedglm", - "spelling", - "stats4", - "survey", - "survival (>= 3.6-4)", - "systemfit", - "testthat (>= 3.0.0)", - "tseries", - "vars", - "zoo" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-25", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "Collate": "'aaa-documentation-helper.R' 'null-and-default.R' 'aer.R' 'auc.R' 'base.R' 'bbmle.R' 'betareg.R' 'biglm.R' 'bingroup.R' 'boot.R' 'broom-package.R' 'broom.R' 'btergm.R' 'car.R' 'caret.R' 'cluster.R' 'cmprsk.R' 'data-frame.R' 'deprecated-0-7-0.R' 'drc.R' 'emmeans.R' 'epiR.R' 'ergm.R' 'fixest.R' 'gam.R' 'geepack.R' 'glmnet-cv-glmnet.R' 'glmnet-glmnet.R' 'gmm.R' 'hmisc.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'joinerml.R' 'kendall.R' 'ks.R' 'lavaan.R' 'leaps.R' 'lfe.R' 'list-irlba.R' 'list-optim.R' 'list-svd.R' 'list-xyz.R' 'list.R' 'lm-beta.R' 'lmodel2.R' 'lmtest.R' 'maps.R' 'margins.R' 'mass-fitdistr.R' 'mass-negbin.R' 'mass-polr.R' 'mass-ridgelm.R' 'stats-lm.R' 'mass-rlm.R' 'mclust.R' 'mediation.R' 'metafor.R' 'mfx.R' 'mgcv.R' 'mlogit.R' 'muhaz.R' 'multcomp.R' 'nnet.R' 'nobs.R' 'ordinal-clm.R' 'ordinal-clmm.R' 'plm.R' 'polca.R' 'psych.R' 'stats-nls.R' 'quantreg-nlrq.R' 'quantreg-rq.R' 'quantreg-rqs.R' 'robust-glmrob.R' 'robust-lmrob.R' 'robustbase-glmrob.R' 'robustbase-lmrob.R' 'sp.R' 'spdep.R' 'speedglm-speedglm.R' 'speedglm-speedlm.R' 'stats-anova.R' 'stats-arima.R' 'stats-decompose.R' 'stats-factanal.R' 'stats-glm.R' 'stats-htest.R' 'stats-kmeans.R' 'stats-loess.R' 'stats-mlm.R' 'stats-prcomp.R' 'stats-smooth.spline.R' 'stats-summary-lm.R' 'stats-time-series.R' 'survey.R' 'survival-aareg.R' 'survival-cch.R' 'survival-coxph.R' 'survival-pyears.R' 'survival-survdiff.R' 'survival-survexp.R' 'survival-survfit.R' 'survival-survreg.R' 'systemfit.R' 'tseries.R' 'utilities.R' 'vars.R' 'zoo.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "David Robinson [aut], Alex Hayes [aut] (ORCID: ), Simon Couch [aut] (ORCID: ), Emil Hvitfeldt [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Indrajeet Patil [ctb] (ORCID: ), Derek Chiu [ctb], Matthieu Gomez [ctb], Boris Demeshev [ctb], Dieter Menne [ctb], Benjamin Nutter [ctb], Luke Johnston [ctb], Ben Bolker [ctb], Francois Briatte [ctb], Jeffrey Arnold [ctb], Jonah Gabry [ctb], Luciano Selzer [ctb], Gavin Simpson [ctb], Jens Preussner [ctb], Jay Hesselberth [ctb], Hadley Wickham [ctb], Matthew Lincoln [ctb], Alessandro Gasparini [ctb], Lukasz Komsta [ctb], Frederick Novometsky [ctb], Wilson Freitas [ctb], Michelle Evans [ctb], Jason Cory Brunson [ctb], Simon Jackson [ctb], Ben Whalley [ctb], Karissa Whiting [ctb], Yves Rosseel [ctb], Michael Kuehn [ctb], Jorge Cimentada [ctb], Erle Holgersen [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Ethan Christensen [ctb], Steven Pav [ctb], Paul PJ [ctb], Ben Schneider [ctb], Patrick Kennedy [ctb], Lily Medina [ctb], Brian Fannin [ctb], Jason Muhlenkamp [ctb], Matt Lehman [ctb], Bill Denney [ctb] (ORCID: ), Nic Crane [ctb], Andrew Bates [ctb], Vincent Arel-Bundock [ctb] (ORCID: ), Hideaki Hayashi [ctb], Luis Tobalina [ctb], Annie Wang [ctb], Wei Yang Tham [ctb], Clara Wang [ctb], Abby Smith [ctb] (ORCID: ), Jasper Cooper [ctb] (ORCID: ), E Auden Krauska [ctb] (ORCID: ), Alex Wang [ctb], Malcolm Barrett [ctb] (ORCID: ), Charles Gray [ctb] (ORCID: ), Jared Wilber [ctb], Vilmantas Gegzna [ctb] (ORCID: ), Eduard Szoecs [ctb], Frederik Aust [ctb] (ORCID: ), Angus Moore [ctb], Nick Williams [ctb], Marius Barth [ctb] (ORCID: ), Bruna Wundervald [ctb] (ORCID: ), Joyce Cahoon [ctb] (ORCID: ), Grant McDermott [ctb] (ORCID: ), Kevin Zarca [ctb], Shiro Kuriwaki [ctb] (ORCID: ), Lukas Wallrich [ctb] (ORCID: ), James Martherus [ctb] (ORCID: ), Chuliang Xiao [ctb] (ORCID: ), Joseph Larmarange [ctb], Max Kuhn [ctb], Michal Bojanowski [ctb], Hakon Malmedal [ctb], Clara Wang [ctb], Sergio Oller [ctb], Luke Sonnet [ctb], Jim Hester [ctb], Ben Schneider [ctb], Bernie Gray [ctb] (ORCID: ), Mara Averick [ctb], Aaron Jacobs [ctb], Andreas Bender [ctb], Sven Templer [ctb], Paul-Christian Buerkner [ctb], Matthew Kay [ctb], Erwan Le Pennec [ctb], Johan Junkka [ctb], Hao Zhu [ctb], Benjamin Soltoff [ctb], Zoe Wilkinson Saldana [ctb], Tyler Littlefield [ctb], Charles T. Gray [ctb], Shabbh E. Banks [ctb], Serina Robinson [ctb], Roger Bivand [ctb], Riinu Ots [ctb], Nicholas Williams [ctb], Nina Jakobsen [ctb], Michael Weylandt [ctb], Lisa Lendway [ctb], Karl Hailperin [ctb], Josue Rodriguez [ctb], Jenny Bryan [ctb], Chris Jarvis [ctb], Greg Macfarlane [ctb], Brian Mannakee [ctb], Drew Tyre [ctb], Shreyas Singh [ctb], Laurens Geffert [ctb], Hong Ooi [ctb], Henrik Bengtsson [ctb], Eduard Szocs [ctb], David Hugh-Jones [ctb], Matthieu Stigler [ctb], Hugo Tavares [ctb] (ORCID: ), R. Willem Vervoort [ctb], Brenton M. Wiernik [ctb], Josh Yamamoto [ctb], Jasme Lee [ctb], Taren Sanders [ctb] (ORCID: ), Ilaria Prosdocimi [ctb] (ORCID: ), Daniel D. Sjoberg [ctb] (ORCID: ), Alex Reinhart [ctb] (ORCID: )", - "Maintainer": "Emil Hvitfeldt ", - "Repository": "CRAN" + "tibble", + "tidyr" + ], + "Hash": "b91eb25282a25d746f84dbd340ace9db" }, "bslib": { "Package": "bslib", - "Version": "0.10.0", - "Source": "Repository", - "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", - "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )", - "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", - "BugReports": "https://github.com/rstudio/bslib/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Imports": [ + "Version": "0.11.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", "base64enc", "cachem", - "fastmap (>= 1.1.1)", + "fastmap", "grDevices", - "htmltools (>= 0.5.8)", - "jquerylib (>= 0.1.3)", + "htmltools", + "jquerylib", "jsonlite", "lifecycle", - "memoise (>= 2.0.1)", + "memoise", "mime", "rlang", - "sass (>= 0.4.9)" + "sass" ], - "Suggests": [ - "brand.yml", - "bsicons", - "curl", - "fontawesome", - "future", - "ggplot2", - "knitr", - "lattice", - "magrittr", - "rappdirs", - "rmarkdown (>= 2.7)", - "shiny (>= 1.11.1)", - "testthat", - "thematic", - "tools", - "utils", - "withr", - "yaml" - ], - "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble", - "Config/Needs/routine": "chromote, desc, renv", - "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R' 'bs-dependencies.R' 'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R' 'bs-theme-preset-brand.R' 'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R' 'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R' 'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R' 'fill.R' 'imports.R' 'input-code-editor.R' 'input-dark-mode.R' 'input-submit.R' 'input-switch.R' 'layout.R' 'nav-items.R' 'nav-update.R' 'navbar_options.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R' 'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R' 'toast.R' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'", - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (ORCID: ), Joe Cheng [aut], Garrick Aden-Buie [aut] (ORCID: ), Posit Software, PBC [cph, fnd], Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Javi Aguilar [ctb, cph] (Bootstrap colorpicker library), Thomas Park [ctb, cph] (Bootswatch library), PayPal [ctb, cph] (Bootstrap accessibility plugin)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "82c0dcea3e967cfeaa263e920798a77e" }, "cachem": { "Package": "cachem", "Version": "1.1.0", "Source": "Repository", - "Title": "Cache R Objects with Automatic Pruning", - "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "ByteCompile": "true", - "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", - "Imports": [ - "rlang", - "fastmap (>= 1.2.0)" - ], - "Suggests": [ - "testthat" + "Repository": "RSPM", + "Requirements": [ + "fastmap", + "rlang" ], - "RoxygenNote": "7.2.3", - "Config/Needs/routine": "lobstr", - "Config/Needs/website": "pkgdown", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" + "Hash": "cd9a672193789068eb5a2aad65a0dedf" }, "checkmate": { "Package": "checkmate", "Version": "2.3.4", "Source": "Repository", - "Type": "Package", - "Title": "Fast and Versatile Argument Checks", - "Description": "Tests and assertions to perform frequent argument checks. A substantial part of the package was written in C to minimize any worries about execution time overhead.", - "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Bernd\", \"Bischl\", NULL, \"bernd_bischl@gmx.net\", role = \"ctb\"), person(\"Dénes\", \"Tóth\", NULL, \"toth.denes@kogentum.hu\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4262-3217\")) )", - "URL": "https://mllg.github.io/checkmate/, https://github.com/mllg/checkmate", - "URLNote": "https://github.com/mllg/checkmate", - "BugReports": "https://github.com/mllg/checkmate/issues", - "NeedsCompilation": "yes", - "ByteCompile": "yes", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "backports (>= 1.1.0)", + "Repository": "CRAN", + "Requirements": [ + "R", + "backports", "utils" ], - "Suggests": [ - "R6", - "fastmatch", - "data.table (>= 1.9.8)", - "devtools", - "ggplot2", - "knitr", - "magrittr", - "microbenchmark", - "rmarkdown", - "testthat (>= 3.0.4)", - "tinytest (>= 1.1.0)", - "tibble" - ], - "License": "BSD_3_clause + file LICENSE", - "VignetteBuilder": "knitr", - "RoxygenNote": "7.3.3", - "Collate": "'AssertCollection.R' 'allMissing.R' 'anyInfinite.R' 'anyMissing.R' 'anyNaN.R' 'asInteger.R' 'assert.R' 'helper.R' 'makeExpectation.R' 'makeTest.R' 'makeAssertion.R' 'checkAccess.R' 'checkArray.R' 'checkAtomic.R' 'checkAtomicVector.R' 'checkCharacter.R' 'checkChoice.R' 'checkClass.R' 'checkComplex.R' 'checkCount.R' 'checkDataFrame.R' 'checkDataTable.R' 'checkDate.R' 'checkDirectoryExists.R' 'checkDisjunct.R' 'checkDouble.R' 'checkEnvironment.R' 'checkFALSE.R' 'checkFactor.R' 'checkFileExists.R' 'checkFlag.R' 'checkFormula.R' 'checkFunction.R' 'checkInt.R' 'checkInteger.R' 'checkIntegerish.R' 'checkList.R' 'checkLogical.R' 'checkMatrix.R' 'checkMultiClass.R' 'checkNamed.R' 'checkNames.R' 'checkNull.R' 'checkNumber.R' 'checkNumeric.R' 'checkOS.R' 'checkPOSIXct.R' 'checkPathForOutput.R' 'checkPermutation.R' 'checkR6.R' 'checkRaw.R' 'checkScalar.R' 'checkScalarNA.R' 'checkSetEqual.R' 'checkString.R' 'checkSubset.R' 'checkTRUE.R' 'checkTibble.R' 'checkVector.R' 'coalesce.R' 'isIntegerish.R' 'matchArg.R' 'qassert.R' 'qassertr.R' 'vname.R' 'wfwl.R' 'zzz.R'", - "Author": "Michel Lang [cre, aut] (ORCID: ), Bernd Bischl [ctb], Dénes Tóth [ctb] (ORCID: )", - "Maintainer": "Michel Lang ", - "Repository": "CRAN" + "Hash": "86cbe221fc19b56242f6c3eb0d4c5ab5" }, "cli": { "Package": "cli", "Version": "3.6.6", "Source": "Repository", - "Title": "Helpers for Developing Command Line Interfaces", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI colors and text styles as well.", - "License": "MIT + file LICENSE", - "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", - "BugReports": "https://github.com/r-lib/cli/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "utils" ], - "Suggests": [ - "callr", - "covr", - "crayon", - "digest", - "glue (>= 1.6.0)", - "grDevices", - "htmltools", - "htmlwidgets", - "knitr", - "methods", - "processx", - "ps (>= 1.3.4.9000)", - "rlang (>= 1.0.2.9003)", - "rmarkdown", - "rprojroot", - "rstudioapi", - "testthat (>= 3.2.0)", - "tibble", - "whoami", - "withr" - ], - "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-25", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" + "Hash": "a73d822b669d443ff8de6928f9c49850" }, "clipr": { "Package": "clipr", - "Version": "0.8.1", - "Source": "Repository", - "Type": "Package", - "Title": "Read and Write from the System Clipboard", - "Authors@R": "c( person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4387-3384\")), person(\"Louis\", \"Maddox\", role = \"ctb\"), person(\"Steve\", \"Simpson\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\") )", - "Description": "Simple utility functions to read from and write to the Windows, OS X, and X11 clipboards.", - "License": "GPL-3", - "URL": "https://github.com/mdlincoln/clipr, http://matthewlincoln.net/clipr/", - "BugReports": "https://github.com/mdlincoln/clipr/issues", - "Imports": [ + "Version": "0.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ "utils" ], - "Suggests": [ - "covr", - "knitr", - "rmarkdown", - "rstudioapi (>= 0.5)", - "testthat (>= 2.0.0)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "SystemRequirements": "xclip (https://github.com/astrand/xclip) or xsel (http://www.vergenet.net/~conrad/software/xsel/) for accessing the X11 clipboard, or wl-clipboard (https://github.com/bugaevc/wl-clipboard) for systems using Wayland.", - "NeedsCompilation": "no", - "Author": "Matthew Lincoln [aut, cre] (ORCID: ), Louis Maddox [ctb], Steve Simpson [ctb], Jennifer Bryan [ctb]", - "Maintainer": "Matthew Lincoln ", - "Repository": "CRAN" + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" }, "clock": { "Package": "clock", "Version": "0.7.4", "Source": "Repository", - "Title": "Date-Time Types and Tools", - "Authors@R": "c( person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a comprehensive library for date-time manipulations using a new family of orthogonal date-time classes (durations, time points, zoned-times, and calendars) that partition responsibilities so that the complexities of time zones are only considered when they are really needed. Capabilities include: date-time parsing, formatting, arithmetic, extraction and updating of components, and rounding.", - "License": "MIT + file LICENSE", - "URL": "https://clock.r-lib.org, https://github.com/r-lib/clock", - "BugReports": "https://github.com/r-lib/clock/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "cli (>= 3.6.4)", - "lifecycle (>= 1.0.4)", - "rlang (>= 1.1.5)", - "tzdb (>= 0.5.0)", - "vctrs (>= 0.6.5)" - ], - "Suggests": [ - "covr", - "knitr", - "magrittr", - "pillar", - "rmarkdown", - "slider (>= 0.3.2)", - "testthat (>= 3.0.0)", - "withr" + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "cpp11", + "lifecycle", + "rlang", + "tzdb", + "vctrs" ], - "LinkingTo": [ - "cpp11 (>= 0.5.2)", - "tzdb (>= 0.5.0)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "lubridate, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Davis Vaughan [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" + "Hash": "dce6a8b20db8fc2fe9967d85f770b475" }, "commonmark": { "Package": "commonmark", "Version": "2.0.0", "Source": "Repository", - "Type": "Package", - "Title": "High Performance CommonMark and Github Markdown Rendering in R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", - "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.", - "License": "BSD_2_clause + file LICENSE", - "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark", - "BugReports": "https://github.com/r-lib/commonmark/issues", - "Suggests": [ - "curl", - "testthat", - "xml2" - ], - "RoxygenNote": "7.3.2", - "Language": "en-US", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), John MacFarlane [cph] (Author of cmark)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Repository": "RSPM", + "Hash": "8cba62334c1088d21689d353a7e87663" }, "cpp11": { "Package": "cpp11", "Version": "0.5.5", "Source": "Repository", - "Title": "A C++11 Interface for R's C Interface", - "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' vectors.", - "License": "MIT + file LICENSE", - "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", - "BugReports": "https://github.com/r-lib/cpp11/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "bench", - "brio", - "callr", - "cli", - "covr", - "decor", - "desc", - "ggplot2", - "glue", - "knitr", - "lobstr", - "mockery", - "progress", - "rmarkdown", - "scales", - "Rcpp", - "testthat (>= 3.2.0)", - "tibble", - "utils", - "vctrs", - "withr" + "Repository": "CRAN", + "Requirements": [ + "R" ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Davis Vaughan [aut, cre] (ORCID: ), Jim Hester [aut] (ORCID: ), Romain François [aut] (ORCID: ), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" + "Hash": "20ecb9105a3fb48a8390919abc3b7e90" }, "crayon": { "Package": "crayon", "Version": "1.5.3", "Source": "Repository", - "Title": "Colored Terminal Output", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Brodie\", \"Gaslam\", , \"brodie.gaslam@yahoo.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The crayon package is now superseded. Please use the 'cli' package for new projects. Colored terminal output on terminals that support 'ANSI' color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI' color support is automatically detected. Colors and highlighting can be combined and nested. New styles can also be created easily. This package was inspired by the 'chalk' 'JavaScript' project.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.github.io/crayon/, https://github.com/r-lib/crayon", - "BugReports": "https://github.com/r-lib/crayon/issues", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "grDevices", "methods", "utils" ], - "Suggests": [ - "mockery", - "rstudioapi", - "testthat", - "withr" + "Hash": "859d96e65ef198fd43e82b9628d593ef" + }, + "credentials": { + "Package": "credentials", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "askpass", + "curl", + "jsonlite", + "openssl", + "sys" ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R' 'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.R' 'ansi-palette.R' 'combine.R' 'string.R' 'utils.R' 'crayon-package.R' 'disposable.R' 'enc-utils.R' 'has_ansi.R' 'has_color.R' 'link.R' 'styles.R' 'machinery.R' 'parts.R' 'print.R' 'style-var.R' 'show.R' 'string_operations.R'", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Brodie Gaslam [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" + "Hash": "bda033f0a309540bb66d5e85872c6973" }, "crosstalk": { "Package": "crosstalk", "Version": "1.2.2", "Source": "Repository", - "Type": "Package", - "Title": "Inter-Widget Interactivity for HTML Widgets", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(, \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )", - "Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk", - "BugReports": "https://github.com/rstudio/crosstalk/issues", - "Imports": [ - "htmltools (>= 0.3.6)", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R6", + "htmltools", "jsonlite", - "lazyeval", - "R6" - ], - "Suggests": [ - "bslib", - "ggplot2", - "sass", - "shiny", - "testthat (>= 2.1.0)" + "lazyeval" ], - "Config/Needs/website": "jcheng5/d3scatter, DT, leaflet, rmarkdown", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "8b008bc619e0bbebb5646b3d37efdad1" }, "curl": { "Package": "curl", "Version": "7.1.0", "Source": "Repository", - "Type": "Package", - "Title": "A Modern and Flexible Web Client for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", - "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", - "License": "MIT + file LICENSE", - "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", - "URL": "https://jeroen.r-universe.dev/curl", - "BugReports": "https://github.com/jeroen/curl/issues", - "Suggests": [ - "spelling", - "testthat (>= 1.0.0)", - "knitr", - "jsonlite", - "later", - "rmarkdown", - "httpuv (>= 1.4.4)", - "webutils" - ], - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 3.0.0)" + "Repository": "CRAN", + "Requirements": [ + "R" ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Hash": "2e004ed19964915a8faf48a574439be9" }, "data.table": { "Package": "data.table", "Version": "1.18.4", "Source": "Repository", - "Title": "Extension of `data.frame`", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "methods" ], - "Suggests": [ - "bit64 (>= 4.0.0)", - "bit (>= 4.0.4)", - "R.utils (>= 2.13.0)", - "xts", - "zoo (>= 1.8-1)", - "yaml", - "knitr", - "markdown" - ], - "Description": "Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns, friendly and fast character-separated-value read/write. Offers a natural and flexible syntax, for faster development.", - "License": "MPL-2.0 | file LICENSE", - "URL": "https://r-datatable.com, https://Rdatatable.gitlab.io/data.table, https://github.com/Rdatatable/data.table", - "BugReports": "https://github.com/Rdatatable/data.table/issues", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "ByteCompile": "TRUE", - "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\"), person(\"Tarun\", \"Thammisetty\", role=\"ctb\") )", - "NeedsCompilation": "yes", - "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb], Tarun Thammisetty [ctb]", - "Maintainer": "Tyson Barrett ", - "Repository": "CRAN" + "Hash": "da9ddede68a6f6e5d3098c0ab81b6e1f" }, "dbplyr": { "Package": "dbplyr", - "Version": "2.5.2", - "Source": "Repository", - "Type": "Package", - "Title": "A 'dplyr' Back End for Databases", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Edgar\", \"Ruiz\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A 'dplyr' back end for databases that allows you to work with remote database tables as if they are in-memory data frames. Basic features works with any database that has a 'DBI' back end; more advanced features require 'SQL' translation to be provided by the package author.", - "License": "MIT + file LICENSE", - "URL": "https://dbplyr.tidyverse.org/, https://github.com/tidyverse/dbplyr", - "BugReports": "https://github.com/tidyverse/dbplyr/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "blob (>= 1.2.0)", - "cli (>= 3.6.1)", - "DBI (>= 1.1.3)", - "dplyr (>= 1.1.2)", - "glue (>= 1.6.2)", - "lifecycle (>= 1.0.3)", + "Version": "2.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "DBI", + "R", + "R6", + "blob", + "cli", + "dplyr", + "glue", + "lifecycle", "magrittr", "methods", - "pillar (>= 1.9.0)", - "purrr (>= 1.0.1)", - "R6 (>= 2.2.2)", - "rlang (>= 1.1.1)", - "tibble (>= 3.2.1)", - "tidyr (>= 1.3.0)", - "tidyselect (>= 1.2.1)", + "pillar", + "purrr", + "rlang", + "tibble", + "tidyr", + "tidyselect", "utils", - "vctrs (>= 0.6.3)", - "withr (>= 2.5.0)" + "vctrs", + "withr" ], - "Suggests": [ - "bit64", - "covr", - "knitr", - "Lahman", - "nycflights13", - "odbc (>= 1.4.2)", - "RMariaDB (>= 1.2.2)", - "rmarkdown", - "RPostgres (>= 1.4.5)", - "RPostgreSQL", - "RSQLite (>= 2.3.8)", - "testthat (>= 3.1.10)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "Language": "en-gb", - "RoxygenNote": "7.3.3", - "Collate": "'db-sql.R' 'utils-check.R' 'import-standalone-types-check.R' 'import-standalone-obj-type.R' 'utils.R' 'sql.R' 'escape.R' 'translate-sql-cut.R' 'translate-sql-quantile.R' 'translate-sql-string.R' 'translate-sql-paste.R' 'translate-sql-helpers.R' 'translate-sql-window.R' 'translate-sql-conditional.R' 'backend-.R' 'backend-access.R' 'backend-hana.R' 'backend-hive.R' 'backend-impala.R' 'verb-copy-to.R' 'backend-mssql.R' 'backend-mysql.R' 'backend-odbc.R' 'backend-oracle.R' 'backend-postgres.R' 'backend-postgres-old.R' 'backend-redshift.R' 'backend-snowflake.R' 'backend-spark-sql.R' 'backend-sqlite.R' 'backend-teradata.R' 'build-sql.R' 'data-cache.R' 'data-lahman.R' 'data-nycflights13.R' 'db-escape.R' 'db-io.R' 'db.R' 'dbplyr.R' 'explain.R' 'ident.R' 'import-standalone-s3-register.R' 'join-by-compat.R' 'join-cols-compat.R' 'lazy-join-query.R' 'lazy-ops.R' 'lazy-query.R' 'lazy-select-query.R' 'lazy-set-op-query.R' 'memdb.R' 'optimise-utils.R' 'pillar.R' 'progress.R' 'sql-build.R' 'query-join.R' 'query-select.R' 'query-semi-join.R' 'query-set-op.R' 'query.R' 'reexport.R' 'remote.R' 'rows.R' 'schema.R' 'simulate.R' 'sql-clause.R' 'sql-expr.R' 'src-sql.R' 'src_dbi.R' 'table-name.R' 'tbl-lazy.R' 'tbl-sql.R' 'test-frame.R' 'testthat.R' 'tidyeval-across.R' 'tidyeval.R' 'translate-sql.R' 'utils-format.R' 'verb-arrange.R' 'verb-compute.R' 'verb-count.R' 'verb-distinct.R' 'verb-do-query.R' 'verb-do.R' 'verb-expand.R' 'verb-fill.R' 'verb-filter.R' 'verb-group_by.R' 'verb-head.R' 'verb-joins.R' 'verb-mutate.R' 'verb-pivot-longer.R' 'verb-pivot-wider.R' 'verb-pull.R' 'verb-select.R' 'verb-set-ops.R' 'verb-slice.R' 'verb-summarise.R' 'verb-uncount.R' 'verb-window.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Maximilian Girlich [aut], Edgar Ruiz [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "ddbed6865865c509ea0b516faf83042b" + }, + "desc": { + "Package": "desc", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "utils" + ], + "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" }, "digest": { "Package": "digest", "Version": "0.6.39", "Source": "Repository", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\", comment = c(ORCID = \"0000-0002-8059-9767\")), person(\"Jarek\", \"Tuszynski\", role=\"ctb\"), person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")), person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")), person(\"Mario\", \"Frasca\", role=\"ctb\"), person(\"Bryan\", \"Lewis\", role=\"ctb\"), person(\"Murray\", \"Stokely\", role=\"ctb\"), person(\"Hannes\", \"Muehleisen\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8552-0029\")), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")), person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")), person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Viliam\", \"Simko\", role=\"ctb\"), person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")), person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")), person(\"Matthew\", \"de Queljoe\", role=\"ctb\"), person(\"Dmitry\", \"Selivanov\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0492-6647\")), person(\"Ion\", \"Suruceanu\", role=\"ctb\", comment = c(ORCID = \"0009-0005-6446-4909\")), person(\"Bill\", \"Denney\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\", comment = c(ORCID = \"0009-0008-8480-1329\")), person(\"Sergey\", \"Fedorov\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5970-7233\")), person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")), person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")), person(\"Kevin\", \"Tappe\", role=\"ctb\"), person(\"Harris\", \"McGehee\", role=\"ctb\"), person(\"Tim\", \"Mastny\", role=\"ctb\"), person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")), person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")), person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")), person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")), person(\"Sebastian\", \"Campbell\", role=\"ctb\", comment = c(ORCID = \"0009-0000-5948-4503\")), person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")), person(\"Kevin\", \"Ushey\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Carl\", \"Pearson\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0701-7860\")))", - "Date": "2025-11-19", - "Title": "Create Compact Hash Digests of R Objects", - "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as 'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", - "URL": "https://github.com/eddelbuettel/digest, https://eddelbuettel.github.io/digest/, https://dirk.eddelbuettel.com/code/digest.html", - "BugReports": "https://github.com/eddelbuettel/digest/issues", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "utils" ], - "License": "GPL (>= 2)", - "Suggests": [ - "tinytest", - "simplermarkdown", - "rbenchmark" - ], - "VignetteBuilder": "simplermarkdown", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Antoine Lucas [ctb] (ORCID: ), Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (ORCID: ), Simon Urbanek [ctb] (ORCID: ), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb] (ORCID: ), Duncan Murdoch [ctb], Jim Hester [ctb] (ORCID: ), Wush Wu [ctb] (ORCID: ), Qiang Kou [ctb] (ORCID: ), Thierry Onkelinx [ctb] (ORCID: ), Michel Lang [ctb] (ORCID: ), Viliam Simko [ctb], Kurt Hornik [ctb] (ORCID: ), Radford Neal [ctb] (ORCID: ), Kendon Bell [ctb] (ORCID: ), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb] (ORCID: ), Ion Suruceanu [ctb] (ORCID: ), Bill Denney [ctb] (ORCID: ), Dirk Schumacher [ctb], András Svraka [ctb] (ORCID: ), Sergey Fedorov [ctb] (ORCID: ), Will Landau [ctb] (ORCID: ), Floris Vanderhaeghe [ctb] (ORCID: ), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (ORCID: ), Mark van der Loo [ctb] (ORCID: ), Chris Muir [ctb] (ORCID: ), Moritz Beller [ctb] (ORCID: ), Sebastian Campbell [ctb] (ORCID: ), Winston Chang [ctb] (ORCID: ), Dean Attali [ctb] (ORCID: ), Michael Chirico [ctb] (ORCID: ), Kevin Ushey [ctb] (ORCID: ), Carl Pearson [ctb] (ORCID: )", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" + "Hash": "d18028e978a88b2b16ef8d400cb49adf" }, "dplyr": { "Package": "dplyr", "Version": "1.2.1", "Source": "Repository", - "Type": "Package", - "Title": "A Grammar of Data Manipulation", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", - "License": "MIT + file LICENSE", - "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", - "BugReports": "https://github.com/tidyverse/dplyr/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "cli (>= 3.6.2)", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", "generics", - "glue (>= 1.3.2)", - "lifecycle (>= 1.0.5)", - "magrittr (>= 1.5)", + "glue", + "lifecycle", + "magrittr", "methods", - "pillar (>= 1.9.0)", - "R6", - "rlang (>= 1.1.7)", - "tibble (>= 3.2.0)", - "tidyselect (>= 1.2.0)", + "pillar", + "rlang", + "tibble", + "tidyselect", "utils", - "vctrs (>= 0.7.1)" - ], - "Suggests": [ - "broom", - "covr", - "DBI", - "dbplyr (>= 2.2.1)", - "ggplot2", - "knitr", - "Lahman", - "lobstr", - "nycflights13", - "purrr", - "rmarkdown", - "RSQLite", - "stringi (>= 1.7.6)", - "testthat (>= 3.1.5)", - "tidyr (>= 1.3.0)", - "withr" + "vctrs" ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Romain François [aut] (ORCID: ), Lionel Henry [aut], Kirill Müller [aut] (ORCID: ), Davis Vaughan [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "d71f190466b9496cf8543c76641be5cf" }, "evaluate": { "Package": "evaluate", "Version": "1.0.5", "Source": "Repository", - "Type": "Package", - "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", - "License": "MIT + file LICENSE", - "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", - "BugReports": "https://github.com/r-lib/evaluate/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "callr", - "covr", - "ggplot2 (>= 3.3.6)", - "lattice", - "methods", - "pkgload", - "ragg (>= 1.4.0)", - "rlang (>= 1.1.5)", - "knitr", - "testthat (>= 3.0.0)", - "withr" + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R" ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (ORCID: ), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "94cf2c54237f6841cee68e3ba4ab5a14" }, "farver": { "Package": "farver", "Version": "2.1.2", "Source": "Repository", - "Type": "Package", - "Title": "High Performance Colour Space Manipulation", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.", - "License": "MIT + file LICENSE", - "URL": "https://farver.data-imaginist.com, https://github.com/thomasp85/farver", - "BugReports": "https://github.com/thomasp85/farver/issues", - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" + "Repository": "RSPM", + "Hash": "680887028577f3fa2a81e410ed0d6e42" }, "fastmap": { "Package": "fastmap", "Version": "1.2.0", "Source": "Repository", - "Title": "Fast Data Structures", - "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )", - "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak issue by implementing the map using data structures in C++.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Suggests": [ - "testthat (>= 2.1.1)" - ], - "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", - "BugReports": "https://github.com/r-lib/fastmap/issues", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" + "Repository": "RSPM", + "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" }, "flextable": { "Package": "flextable", "Version": "0.9.12", "Source": "Repository", - "Type": "Package", - "Title": "Functions for Tabular Reporting", - "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"ArData\", role = \"cph\"), person(\"Clementine\", \"Jager\", role = \"ctb\"), person(\"Eli\", \"Daniels\", role = \"ctb\"), person(\"Panagiotis\", \"Skintzos\", , \"panagiotis.skintzos@ardata.fr\", role = \"aut\"), person(\"Quentin\", \"Fazilleau\", role = \"ctb\"), person(\"Maxim\", \"Nazarov\", role = \"ctb\"), person(\"Titouan\", \"Robert\", role = \"ctb\"), person(\"Michael\", \"Barrowman\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\"), person(\"Paul\", \"Julian\", role = \"ctb\"), person(\"Sean\", \"Browning\", role = \"ctb\"), person(\"Rémi\", \"Thériault\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4315-6788\")), person(\"Samuel\", \"Jobert\", role = \"ctb\"), person(\"Keith\", \"Newman\", role = \"ctb\") )", - "Description": "Use a grammar for creating and customizing pretty tables. The following formats are supported: 'HTML', 'PDF', 'RTF', 'Microsoft Word', 'Microsoft PowerPoint', R 'Grid Graphics' and 'patchwork'. 'R Markdown', 'Quarto' and the package 'officer' can be used to produce the result files. The syntax is the same for the user regardless of the type of output to be produced. A set of functions allows the creation, definition of cell arrangement, addition of headers or footers, formatting and definition of cell content with text and or images. The package also offers a set of high-level functions that allow tabular reporting of statistical models and the creation of complex cross tabulations.", - "License": "GPL-3", - "URL": "https://ardata-fr.github.io/flextable-book/, https://davidgohel.github.io/flextable/", - "BugReports": "https://github.com/davidgohel/flextable/issues", - "Imports": [ - "data.table (>= 1.13.0)", - "gdtools (>= 0.5.0)", - "graphics", + "Repository": "CRAN", + "Requirements": [ + "data.table", + "gdtools", "grDevices", + "graphics", "grid", "htmltools", "knitr", - "officer (>= 0.7.3)", + "officer", "ragg", "rlang", - "rmarkdown (>= 2.0)", + "rmarkdown", "stats", "utils", - "uuid (>= 0.1-4)", + "uuid", "xml2" ], - "Suggests": [ - "bookdown (>= 0.40)", - "broom", - "broom.mixed", - "formatters", - "chromote", - "cluster", - "commonmark", - "doconv (>= 0.3.0)", - "equatags", - "ggplot2", - "gtable", - "jsonlite", - "lme4", - "magick", - "mgcv", - "nlme", - "officedown", - "patchwork", - "pdftools", - "pkgdown (>= 2.0.0)", - "rtables", - "scales", - "svglite", - "tables (>= 0.9.17)", - "testthat (>= 3.0.0)", - "webshot2", - "withr", - "xtable" - ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Config/roxygen2/version": "8.0.0", - "NeedsCompilation": "no", - "Author": "David Gohel [aut, cre], ArData [cph], Clementine Jager [ctb], Eli Daniels [ctb], Panagiotis Skintzos [aut], Quentin Fazilleau [ctb], Maxim Nazarov [ctb], Titouan Robert [ctb], Michael Barrowman [ctb], Atsushi Yasumoto [ctb], Paul Julian [ctb], Sean Browning [ctb], Rémi Thériault [ctb] (ORCID: ), Samuel Jobert [ctb], Keith Newman [ctb]", - "Maintainer": "David Gohel ", - "Repository": "CRAN" + "Hash": "981c8f0fcb109d4720e217b9a291ccf1" }, "fontBitstreamVera": { "Package": "fontBitstreamVera", "Version": "0.1.1", "Source": "Repository", - "Title": "Fonts with 'Bitstream Vera Fonts' License", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel.hry@gmail.com\", c(\"cre\", \"aut\")), person(\"Bitstream\", role = \"cph\"))", - "Description": "Provides fonts licensed under the 'Bitstream Vera Fonts' license for the 'fontquiver' package.", - "Depends": [ - "R (>= 3.0.0)" - ], - "License": "file LICENCE", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "5.0.1", - "NeedsCompilation": "no", - "Author": "Lionel Henry [cre, aut], Bitstream [cph]", - "Maintainer": "Lionel Henry ", - "License_is_FOSS": "yes", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "f6068021eff4aba735a9b2353516636c" }, "fontLiberation": { "Package": "fontLiberation", "Version": "0.1.0", "Source": "Repository", - "Title": "Liberation Fonts", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", \"cre\"), person(\"Pravin Satpute\", role = \"aut\"), person(\"Steve Matteson\", role = \"aut\"), person(\"Red Hat, Inc\", role = \"cph\"), person(\"Google Corporation\", role = \"cph\"))", - "Description": "A placeholder for the Liberation fontset intended for the `fontquiver` package. This fontset covers the 12 combinations of families (sans, serif, mono) and faces (plain, bold, italic, bold italic) supported in R graphics devices.", - "Depends": [ - "R (>= 3.0)" - ], - "License": "file LICENSE", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "5.0.1", - "NeedsCompilation": "no", - "Author": "Lionel Henry [cre], Pravin Satpute [aut], Steve Matteson [aut], Red Hat, Inc [cph], Google Corporation [cph]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN", - "License_is_FOSS": "yes" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "f918c5e723f86f409912104d5b7a71d6" }, "fontawesome": { "Package": "fontawesome", "Version": "0.5.3", "Source": "Repository", - "Type": "Package", - "Title": "Easily Work with 'Font Awesome' Icons", - "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", - "BugReports": "https://github.com/rstudio/fontawesome/issues", - "Encoding": "UTF-8", - "ByteCompile": "true", - "RoxygenNote": "7.3.2", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "rlang (>= 1.0.6)", - "htmltools (>= 0.5.1.1)" - ], - "Suggests": [ - "covr", - "dplyr (>= 1.0.8)", - "gt (>= 0.9.0)", - "knitr (>= 1.31)", - "testthat (>= 3.0.0)", - "rsvg" - ], - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R", + "htmltools", + "rlang" + ], + "Hash": "bd1297f9b5b1fc1372d19e2c4cd82215" }, "fontquiver": { "Package": "fontquiver", "Version": "0.2.1", "Source": "Repository", - "Title": "Set of Installed Fonts", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", c(\"cre\", \"aut\")), person(\"RStudio\", role = \"cph\"), person(\"George Douros\", role = \"cph\", comment = \"Symbola font\"))", - "Description": "Provides a set of fonts with permissive licences. This is useful when you want to avoid system fonts to make sure your outputs are reproducible.", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "fontBitstreamVera (>= 0.1.0)", - "fontLiberation (>= 0.1.0)" - ], - "Suggests": [ - "testthat", - "htmltools" + "Repository": "RSPM", + "Requirements": [ + "R", + "fontBitstreamVera", + "fontLiberation" ], - "License": "GPL-3 | file LICENSE", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "5.0.1", - "Collate": "'font-getters.R' 'fontset.R' 'fontset-bitstream-vera.R' 'fontset-dejavu.R' 'fontset-liberation.R' 'fontset-symbola.R' 'html-dependency.R' 'utils.R'", - "NeedsCompilation": "no", - "Author": "Lionel Henry [cre, aut], RStudio [cph], George Douros [cph] (Symbola font)", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" + "Hash": "fc0f4226379e451057d55419fd31761e" }, "fs": { "Package": "fs", "Version": "2.1.0", "Source": "Repository", - "Title": "Cross-Platform File System Operations Based on 'libuv'", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroenooms@gmail.com\", role = \"cre\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", - "License": "MIT + file LICENSE", - "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", - "BugReports": "https://github.com/r-lib/fs/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "methods" ], - "Suggests": [ - "covr", - "crayon", - "knitr", - "pillar (>= 1.0.0)", - "rmarkdown", - "spelling", - "testthat (>= 3.0.0)", - "tibble (>= 1.1.0)", - "vctrs (>= 0.3.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "SystemRequirements": "libuv: libuv-devel (rpm) or libuv1-dev (deb). Alternatively to build the vendored libuv 'cmake' is required. GNU make.", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Hash": "09278623bca442bc53b0940ffa2f6d87" }, "gdtools": { "Package": "gdtools", "Version": "0.5.1", "Source": "Repository", - "Title": "Font Metrics and Font Management Utilities for R Graphics", - "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroen@berkeley.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Yixuan\", \"Qiu\", role = \"ctb\"), person(\"R Core Team\", role = \"cph\", comment = \"Cairo code from X11 device\"), person(\"ArData\", role = \"cph\"), person(\"RStudio\", role = \"cph\") )", - "Description": "Compute text metrics (width, ascent, descent) using 'Cairo' and 'FreeType', independently of the active graphic device. Font lookup is delegated to 'systemfonts'. Additional utilities let users register 'Google Fonts' or bundled 'Liberation' fonts, check font availability, and assemble 'htmlDependency' objects so that fonts are correctly embedded in 'Shiny' applications, 'R Markdown' documents, and 'htmlwidgets' outputs such as 'ggiraph'.", - "License": "GPL-3 | file LICENSE", - "URL": "https://davidgohel.github.io/gdtools/", - "BugReports": "https://github.com/davidgohel/gdtools/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "fontquiver (>= 0.2.0)", + "Repository": "CRAN", + "Requirements": [ + "R", + "Rcpp", + "fontquiver", "htmltools", - "Rcpp (>= 0.12.12)", - "systemfonts (>= 1.3.1)", + "systemfonts", "tools" ], - "Suggests": [ - "curl", - "gfonts", - "methods", - "testthat" - ], - "LinkingTo": [ - "Rcpp" - ], - "Encoding": "UTF-8", - "SystemRequirements": "cairo, freetype2, fontconfig", - "Config/roxygen2/version": "8.0.0", - "NeedsCompilation": "yes", - "Author": "David Gohel [aut, cre], Hadley Wickham [aut], Lionel Henry [aut], Jeroen Ooms [aut] (ORCID: ), Yixuan Qiu [ctb], R Core Team [cph] (Cairo code from X11 device), ArData [cph], RStudio [cph]", - "Maintainer": "David Gohel ", - "Repository": "CRAN" + "Hash": "bca589967c4b7360ced3c08c69a96787" }, "generics": { "Package": "generics", "Version": "0.1.4", "Source": "Repository", - "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", - "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", - "License": "MIT + file LICENSE", - "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", - "BugReports": "https://github.com/r-lib/generics/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "methods" ], - "Suggests": [ - "covr", - "pkgload", - "testthat (>= 3.0.0)", - "tibble", - "withr" + "Hash": "4b29bf698d0c7bdb9f1e4976e7ade41d" + }, + "gert": { + "Package": "gert", + "Version": "2.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "askpass", + "credentials", + "openssl", + "rstudioapi", + "sys", + "zip" ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Max Kuhn [aut], Davis Vaughan [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "8c696f49b5150a2541af009311c2fc83" }, "ggplot2": { "Package": "ggplot2", "Version": "4.0.3", "Source": "Repository", - "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Winston\", \"Chang\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Kohske\", \"Takahashi\", role = \"aut\"), person(\"Claus\", \"Wilke\", role = \"aut\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(\"Kara\", \"Woo\", role = \"aut\", comment = c(ORCID = \"0000-0002-5125-4188\")), person(\"Hiroaki\", \"Yutani\", role = \"aut\", comment = c(ORCID = \"0000-0002-3385-7233\")), person(\"Dewey\", \"Dunnington\", role = \"aut\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Teun\", \"van den Brand\", role = \"aut\", comment = c(ORCID = \"0000-0002-9335-7468\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A system for 'declaratively' creating graphics, based on \"The Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details.", - "License": "MIT + file LICENSE", - "URL": "https://ggplot2.tidyverse.org, https://github.com/tidyverse/ggplot2", - "BugReports": "https://github.com/tidyverse/ggplot2/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", + "S7", "cli", "grDevices", "grid", - "gtable (>= 0.3.6)", + "gtable", "isoband", - "lifecycle (> 1.0.1)", - "rlang (>= 1.1.0)", - "S7", - "scales (>= 1.4.0)", + "lifecycle", + "rlang", + "scales", "stats", - "vctrs (>= 0.6.0)", - "withr (>= 2.5.0)" + "vctrs", + "withr" ], - "Suggests": [ - "broom", - "covr", - "dplyr", - "ggplot2movies", - "hexbin", - "Hmisc", - "hms", - "knitr", - "mapproj", - "maps", - "MASS", - "mgcv", - "multcomp", - "munsell", - "nlme", - "profvis", - "quantreg", - "quarto", - "ragg (>= 1.2.6)", - "RColorBrewer", - "roxygen2", - "rpart", - "sf (>= 0.7-3)", - "svglite (>= 2.1.2)", - "testthat (>= 3.1.5)", - "tibble", - "vdiffr (>= 1.0.6)", - "xml2" + "Hash": "98520fe6b2745c466dca8e46aaa86242" + }, + "gh": { + "Package": "gh", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "gitcreds", + "glue", + "httr2", + "ini", + "jsonlite", + "lifecycle", + "rlang" ], - "Enhances": [ - "sp" - ], - "VignetteBuilder": "quarto", - "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R' 'aes-colour-fill-alpha.R' 'aes-evaluation.R' 'aes-group-order.R' 'aes-linetype-size-shape.R' 'aes-position.R' 'all-classes.R' 'compat-plyr.R' 'utilities.R' 'aes.R' 'annotation-borders.R' 'utilities-checks.R' 'legend-draw.R' 'geom-.R' 'annotation-custom.R' 'annotation-logticks.R' 'scale-type.R' 'layer.R' 'make-constructor.R' 'geom-polygon.R' 'geom-map.R' 'annotation-map.R' 'geom-raster.R' 'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R' 'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R' 'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R' 'coord-map.R' 'coord-munch.R' 'coord-polar.R' 'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R' 'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R' 'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-map.R' 'fortify-models.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-tile.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-point.R' 'geom-count.R' 'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R' 'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R' 'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R' 'geom-label.R' 'geom-linerange.R' 'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R' 'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R' 'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R' 'properties.R' 'margins.R' 'theme-elements.R' 'guide-.R' 'guide-axis.R' 'guide-axis-logticks.R' 'guide-axis-stack.R' 'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R' 'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R' 'guide-none.R' 'guide-old.R' 'guides-.R' 'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'labeller.R' 'labels.R' 'layer-sf.R' 'layout.R' 'limits.R' 'performance.R' 'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R' 'position-.R' 'position-collide.R' 'position-dodge.R' 'position-dodge2.R' 'position-identity.R' 'position-jitter.R' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R' 'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R' 'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R' 'scale-colour.R' 'scale-continuous.R' 'scale-date.R' 'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R' 'scale-grey.R' 'scale-hue.R' 'scale-identity.R' 'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R' 'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R' 'stat-bin.R' 'stat-summary-2d.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R' 'stat-boxplot.R' 'stat-connect.R' 'stat-contour.R' 'stat-count.R' 'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R' 'stat-ellipse.R' 'stat-function.R' 'stat-identity.R' 'stat-manual.R' 'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R' 'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R' 'stat-smooth.R' 'stat-sum.R' 'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R' 'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R' 'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R' 'theme-sub.R' 'utilities-break.R' 'utilities-grid.R' 'utilities-help.R' 'utilities-patterns.R' 'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Lionel Henry [aut], Thomas Lin Pedersen [aut, cre] (ORCID: ), Kohske Takahashi [aut], Claus Wilke [aut] (ORCID: ), Kara Woo [aut] (ORCID: ), Hiroaki Yutani [aut] (ORCID: ), Dewey Dunnington [aut] (ORCID: ), Teun van den Brand [aut] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" + "Hash": "d92acb7afad09df6839e4e456e538d03" + }, + "gitcreds": { + "Package": "gitcreds", + "Version": "0.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" }, "glue": { "Package": "glue", "Version": "1.8.1", "Source": "Repository", - "Title": "Interpreted String Literals", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", - "License": "MIT + file LICENSE", - "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", - "BugReports": "https://github.com/tidyverse/glue/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "methods" ], - "Suggests": [ - "crayon", - "DBI (>= 1.2.0)", - "dplyr", - "knitr", - "rlang", - "rmarkdown", - "RSQLite", - "testthat (>= 3.2.0)", - "vctrs (>= 0.3.0)", - "waldo (>= 0.5.3)", - "withr" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2026-04-16", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (ORCID: ), Jennifer Bryan [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" + "Hash": "f8122473e9a49e00d0642f78235ca5e3" }, "gt": { "Package": "gt", "Version": "1.3.0", "Source": "Repository", - "Type": "Package", - "Title": "Easily Create Presentation-Ready Display Tables", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Shannon\", \"Haughton\", , \"shannon.l.haughton@gsk.com\", role = \"aut\"), person(\"Ellis\", \"Hughes\", , \"ellis.h.hughes@gsk.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-0637-4436\")), person(\"Alexandra\", \"Lauer\", , \"alexandralauer1@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4191-6301\")), person(\"Romain\", \"François\", , \"romain@tada.science\", role = \"aut\"), person(\"JooYoung\", \"Seo\", , \"jseo1005@illinois.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Ken\", \"Brevoort\", , \"ken@brevoort.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4001-8358\")), person(\"Olivier\", \"Roy\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Build display tables from tabular data with an easy-to-use set of functions. With its progressive approach, we can construct display tables with a cohesive set of table parts. Table values can be formatted using any of the included formatting functions. Footnotes and cell styles can be precisely added through a location targeting system. The way in which 'gt' handles things for you means that you don't often have to worry about the fine details.", - "License": "MIT + file LICENSE", - "URL": "https://gt.rstudio.com, https://github.com/rstudio/gt", - "BugReports": "https://github.com/rstudio/gt/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "base64enc (>= 0.1-3)", - "bigD (>= 0.2)", - "bitops (>= 1.0-7)", - "cli (>= 3.6.3)", - "commonmark (>= 1.9.1)", - "dplyr (>= 1.1.4)", - "fs (>= 1.6.4)", - "glue (>= 1.8.0)", - "htmltools (>= 0.5.8.1)", - "htmlwidgets (>= 1.6.4)", - "juicyjuice (>= 0.1.0)", - "magrittr (>= 2.0.3)", - "markdown (>= 1.13)", - "reactable (>= 0.4.4)", - "rlang (>= 1.1.4)", - "sass (>= 0.4.9)", - "scales (>= 1.3.0)", - "tidyselect (>= 1.2.1)", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "bigD", + "bitops", + "cli", + "commonmark", + "dplyr", + "fs", + "glue", + "htmltools", + "htmlwidgets", + "juicyjuice", + "magrittr", + "markdown", + "reactable", + "rlang", + "sass", + "scales", + "tidyselect", "vctrs", - "xml2 (>= 1.3.6)" - ], - "Suggests": [ - "bit64", - "farver", - "fontawesome (>= 0.5.2)", - "ggplot2", - "grid", - "gtable (>= 0.3.6)", - "katex (>= 1.4.1)", - "knitr", - "lubridate", - "magick", - "paletteer", - "RColorBrewer", - "rmarkdown (>= 2.20)", - "rsvg", - "rvest", - "shiny (>= 1.9.1)", - "testthat (>= 3.1.9)", - "tidyr (>= 1.0.0)", - "webshot2 (>= 0.1.0)", - "withr" + "xml2" ], - "Config/Needs/coverage": "officer", - "Config/Needs/website": "quarto", - "ByteCompile": "true", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (ORCID: ), Joe Cheng [aut], Barret Schloerke [aut] (ORCID: ), Shannon Haughton [aut], Ellis Hughes [aut] (ORCID: ), Alexandra Lauer [aut] (ORCID: ), Romain François [aut], JooYoung Seo [aut] (ORCID: ), Ken Brevoort [aut] (ORCID: ), Olivier Roy [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" + "Hash": "7153ac3985ed54f1a318590b73950329" }, "gtable": { "Package": "gtable", "Version": "0.3.6", "Source": "Repository", - "Title": "Arrange 'Grobs' in Tables", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a grid along with a list of grobs and their placement in the grid. Further the package makes it easy to manipulate and combine 'gtable' objects so that complex compositions can be built up sequentially.", - "License": "MIT + file LICENSE", - "URL": "https://gtable.r-lib.org, https://github.com/r-lib/gtable", - "BugReports": "https://github.com/r-lib/gtable/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "cli", "glue", "grid", "lifecycle", - "rlang (>= 1.1.0)", + "rlang", "stats" ], - "Suggests": [ - "covr", - "ggplot2", - "knitr", - "profvis", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2024-10-25", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" + "Hash": "de949855009e2d4d0e52a844e30617ae" }, "highr": { "Package": "highr", "Version": "0.12", "Source": "Repository", - "Type": "Package", - "Title": "Syntax Highlighting for R Source Code", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )", - "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package ().", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "xfun (>= 0.18)" + "Repository": "RSPM", + "Requirements": [ + "R", + "xfun" ], - "Suggests": [ - "knitr", - "markdown", - "testit" - ], - "License": "GPL", - "URL": "https://github.com/yihui/highr", - "BugReports": "https://github.com/yihui/highr/issues", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (ORCID: ), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Hash": "2a2f862ade01a56dcbcd60944de11255" }, "hms": { "Package": "hms", "Version": "1.1.4", "Source": "Repository", - "Title": "Pretty Time of Day", - "Date": "2025-10-11", - "Authors@R": "c( person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\"), person(\"Posit Software, PBC\", role = \"fnd\", comment = c(ROR = \"03wc8by49\")) )", - "Description": "Implements an S3 class for storing and formatting time-of-day values, based on the 'difftime' class.", - "License": "MIT + file LICENSE", - "URL": "https://hms.tidyverse.org/, https://github.com/tidyverse/hms", - "BugReports": "https://github.com/tidyverse/hms/issues", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "cli", "lifecycle", "methods", "pkgconfig", - "rlang (>= 1.0.2)", - "vctrs (>= 0.3.8)" + "rlang", + "vctrs" ], - "Suggests": [ - "crayon", - "lubridate", - "pillar (>= 1.1.0)", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (ORCID: ), R Consortium [fnd], Posit Software, PBC [fnd] (ROR: )", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" + "Hash": "2799ac720626cec589478b191e48b88b" }, "htmltools": { "Package": "htmltools", "Version": "0.5.9", "Source": "Repository", - "Type": "Package", - "Title": "Tools for HTML", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools for HTML generation and output.", - "License": "GPL (>= 2)", - "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", - "BugReports": "https://github.com/rstudio/htmltools/issues", - "Depends": [ - "R (>= 2.14.1)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "base64enc", "digest", - "fastmap (>= 1.1.0)", + "fastmap", "grDevices", - "rlang (>= 1.0.0)", + "rlang", "utils" ], - "Suggests": [ - "Cairo", - "markdown", - "ragg", - "shiny", - "testthat", - "withr" - ], - "Enhances": [ - "knitr" - ], - "Config/Needs/check": "knitr", - "Config/Needs/website": "rstudio/quillt, bench", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "102298e238c14eb830cc4b5edd23c3e8" }, "htmlwidgets": { "Package": "htmlwidgets", "Version": "1.6.4", "Source": "Repository", - "Type": "Package", - "Title": "HTML Widgets for R", - "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/ramnathv/htmlwidgets", - "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "grDevices", - "htmltools (>= 0.5.7)", - "jsonlite (>= 0.9.16)", - "knitr (>= 1.8)", + "htmltools", + "jsonlite", + "knitr", "rmarkdown", "yaml" ], - "Suggests": [ - "testthat" - ], - "Enhances": [ - "shiny (>= 1.1)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "04291cc45198225444a397606810ac37" }, "httpuv": { "Package": "httpuv", "Version": "1.6.17", "Source": "Repository", - "Type": "Package", - "Title": "HTTP and WebSocket Server Library", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )", - "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http-parser license information.)", - "License": "GPL (>= 2) | file LICENSE", - "URL": "https://rstudio.github.io/httpuv/, https://github.com/rstudio/httpuv", - "BugReports": "https://github.com/rstudio/httpuv/issues", - "Depends": [ - "R (>= 2.15.1)" - ], - "Imports": [ - "later (>= 0.8.0)", - "promises", + "Repository": "CRAN", + "Requirements": [ + "R", "R6", - "Rcpp (>= 1.0.7)", + "Rcpp", + "later", + "promises", "utils" ], - "Suggests": [ - "callr", - "curl", - "jsonlite", - "testthat (>= 3.0.0)", - "websocket" - ], - "LinkingTo": [ - "later", - "Rcpp" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-07-01", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "SystemRequirements": "GNU make, zlib", - "Collate": "'RcppExports.R' 'httpuv-package.R' 'httpuv.R' 'random_port.R' 'server.R' 'staticServer.R' 'static_paths.R' 'utils.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC [cph, fnd] (ROR: ), Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" + "Hash": "4ff0297ad1cd631d57f0d30172972754" }, "httr": { "Package": "httr", "Version": "1.4.8", "Source": "Repository", - "Title": "Tools for Working with URLs and HTTP", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", - "License": "MIT + file LICENSE", - "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", - "BugReports": "https://github.com/r-lib/httr/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "curl (>= 5.1.0)", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "curl", "jsonlite", "mime", - "openssl (>= 0.8)", - "R6" + "openssl" ], - "Suggests": [ - "covr", - "httpuv", - "jpeg", - "knitr", - "png", - "readr", - "rmarkdown", - "testthat (>= 0.8.0)", - "xml2" + "Hash": "10bcae7793493db63a6872096132e10c" + }, + "httr2": { + "Package": "httr2", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "curl", + "glue", + "lifecycle", + "magrittr", + "openssl", + "rappdirs", + "rlang", + "vctrs", + "withr" ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "c20959a9442c0e3adb1e8d3809c5d1f7" + }, + "ini": { + "Package": "ini", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "6154ec2223172bce8162d4153cda21f7" }, "isoband": { "Package": "isoband", "Version": "0.3.0", "Source": "Repository", - "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation Grids", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\", comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.", - "License": "MIT + file LICENSE", - "URL": "https://isoband.r-lib.org, https://github.com/r-lib/isoband", - "BugReports": "https://github.com/r-lib/isoband/issues", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "cli", + "cpp11", "grid", "rlang", "utils" ], - "Suggests": [ - "covr", - "ggplot2", - "knitr", - "magick", - "bench", - "rmarkdown", - "sf", - "testthat (>= 3.0.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-12-05", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Config/build/compilation-database": "true", - "LinkingTo": [ - "cpp11" - ], - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut] (ORCID: ), Claus O. Wilke [aut] (Original author, ORCID: ), Thomas Lin Pedersen [aut, cre] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" + "Hash": "0f9a864bbd7ce0232ad05cb76249cc1a" }, "jquerylib": { "Package": "jquerylib", "Version": "0.1.4", "Source": "Repository", - "Title": "Obtain 'jQuery' as an HTML Dependency Object", - "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )", - "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "RoxygenNote": "7.0.2", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "htmltools" ], - "Suggests": [ - "testthat" - ], - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "5aab57a3bd297eee1c1d862735972182" }, "jsonlite": { "Package": "jsonlite", "Version": "2.0.0", "Source": "Repository", - "Title": "A Simple and Robust JSON Parser and Generator for R", - "License": "MIT + file LICENSE", - "Depends": [ + "Repository": "RSPM", + "Requirements": [ "methods" ], - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", - "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", - "BugReports": "https://github.com/jeroen/jsonlite/issues", - "Maintainer": "Jeroen Ooms ", - "VignetteBuilder": "knitr, R.rsp", - "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", - "Suggests": [ - "httr", - "vctrs", - "testthat", - "knitr", - "rmarkdown", - "R.rsp", - "sf" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", - "Repository": "CRAN" + "Hash": "b0776f526d36d8bd4a3344a88fe165c4" }, "juicyjuice": { "Package": "juicyjuice", "Version": "0.1.0", "Source": "Repository", - "Title": "Inline CSS Properties into HTML Tags Using 'juice'", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"riannone@me.com\", c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Automattic\", role = c(\"cph\"), comment = \"juice library\"), person(\"juice contributors\", role = c(\"ctb\"), comment = \"juice library\") )", - "Description": "There are occasions where you need a piece of HTML with integrated styles. A prime example of this is HTML email. This transformation involves moving the CSS and associated formatting instructions from the style block in the head of your document into the body of the HTML. Many prominent email clients require integrated styles in HTML email; otherwise a received HTML email will be displayed without any styling. This package will quickly and precisely perform these CSS transformations when given HTML text and it does so by using the JavaScript 'juice' library.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rich-iannone/juicyjuice", - "BugReports": "https://github.com/rich-iannone/juicyjuice/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "Imports": [ - "V8 (>= 4.2.0)" - ], - "Suggests": [ - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre, cph] (), Automattic [cph] (juice library), juice contributors [ctb] (juice library)", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "V8" + ], + "Hash": "3bcd11943da509341838da9399e18bce" }, "knitr": { "Package": "knitr", "Version": "1.51", "Source": "Repository", - "Type": "Package", - "Title": "A General-Purpose Package for Dynamic Report Generation in R", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "evaluate (>= 0.15)", - "highr (>= 0.11)", + "Repository": "RSPM", + "Requirements": [ + "R", + "evaluate", + "highr", "methods", "tools", - "xfun (>= 0.52)", - "yaml (>= 2.1.19)" + "xfun", + "yaml" ], - "Suggests": [ - "bslib", - "DBI (>= 0.4-1)", - "digest", - "formatR", - "gifski", - "gridSVG", - "htmlwidgets (>= 0.7)", - "jpeg", - "JuliaCall (>= 0.11.1)", - "magick", - "litedown", - "markdown (>= 1.3)", - "otel", - "otelsdk", - "png", - "ragg", - "reticulate (>= 1.4)", - "rgl (>= 0.95.1201)", - "rlang", - "rmarkdown", - "sass", - "showtext", - "styler (>= 1.2.0)", - "targets (>= 0.6.0)", - "testit", - "tibble", - "tikzDevice (>= 0.10)", - "tinytex (>= 0.56)", - "webshot", - "rstudioapi", - "svglite" - ], - "License": "GPL", - "URL": "https://yihui.org/knitr/", - "BugReports": "https://github.com/yihui/knitr/issues", - "Encoding": "UTF-8", - "VignetteBuilder": "litedown, knitr", - "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", - "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Hash": "27682babb50f03b6eb7939ea69ec79ca" }, "labeling": { "Package": "labeling", "Version": "0.4.3", "Source": "Repository", - "Type": "Package", - "Title": "Axis Labeling", - "Date": "2023-08-29", - "Author": "Justin Talbot,", - "Maintainer": "Nuno Sempere ", - "Description": "Functions which provide a range of axis labeling algorithms.", - "License": "MIT + file LICENSE | Unlimited", - "Collate": "'labeling.R'", - "NeedsCompilation": "no", - "Imports": [ - "stats", - "graphics" + "Repository": "RSPM", + "Requirements": [ + "graphics", + "stats" ], - "Repository": "CRAN" + "Hash": "b64ec208ac5bc1852b285f665d6368b3" }, "later": { "Package": "later", "Version": "1.4.8", "Source": "Repository", - "Type": "Package", - "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )", - "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled in an event loop.", - "License": "MIT + file LICENSE", - "URL": "https://later.r-lib.org, https://github.com/r-lib/later", - "BugReports": "https://github.com/r-lib/later/issues", - "Depends": [ - "R (>= 3.5)" - ], - "Imports": [ - "Rcpp (>= 1.0.10)", + "Repository": "RSPM", + "Requirements": [ + "R", + "Rcpp", "rlang" ], - "Suggests": [ - "knitr", - "nanonext", - "promises", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "Rcpp" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-07-18", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], Charlie Gao [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)", - "Maintainer": "Charlie Gao ", - "Repository": "CRAN" + "Hash": "824c180e69b9be79ab96a985e233c470" }, "lattice": { "Package": "lattice", "Version": "0.22-6", "Source": "Repository", - "Date": "2024-03-20", - "Priority": "recommended", - "Title": "Trellis Graphics for R", - "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )", - "Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "KernSmooth", - "MASS", - "latticeExtra", - "colorspace" - ], - "Imports": [ - "grid", + "Repository": "CRAN", + "Requirements": [ + "R", "grDevices", "graphics", + "grid", "stats", "utils" ], - "Enhances": [ - "chron", - "zoo" - ], - "LazyLoad": "yes", - "LazyData": "yes", - "License": "GPL (>= 2)", - "URL": "https://lattice.r-forge.r-project.org/", - "BugReports": "https://github.com/deepayan/lattice/issues", - "NeedsCompilation": "yes", - "Author": "Deepayan Sarkar [aut, cre] (), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)", - "Maintainer": "Deepayan Sarkar ", - "Repository": "CRAN" + "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" }, "lazyeval": { "Package": "lazyeval", "Version": "0.2.3", "Source": "Repository", - "Title": "Lazy (Non-Standard) Evaluation", - "Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", - "License": "GPL-3", - "Depends": [ - "R (>= 3.1.0)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "rlang" ], - "Suggests": [ - "knitr", - "rmarkdown (>= 0.2.65)", - "testthat", - "covr" - ], - "VignetteBuilder": "knitr", - "RoxygenNote": "7.3.3", - "Config/build/compilation-database": "true", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], RStudio [cph]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "2757e46c2633dd5854f62615df70d0d7" }, "lifecycle": { "Package": "lifecycle", "Version": "1.0.5", "Source": "Repository", - "Title": "Manage the Life Cycle of your Package Functions", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", - "License": "MIT + file LICENSE", - "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", - "BugReports": "https://github.com/r-lib/lifecycle/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "covr", - "knitr", - "lintr (>= 3.1.0)", - "rmarkdown", - "testthat (>= 3.0.1)", - "tibble", - "tidyverse", - "tools", - "vctrs", - "withr", - "xml2" + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "rlang" ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, usethis", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" + "Hash": "36dbfe4fba6c064db50a671a90297c85" }, "litedown": { "Package": "litedown", "Version": "0.9", "Source": "Repository", - "Type": "Package", - "Title": "A Lightweight Version of R Markdown", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Tim\", \"Taylor\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8587-7113\")), person() )", - "Description": "Render R Markdown to Markdown (without using 'knitr'), and Markdown to lightweight HTML or 'LaTeX' documents with the 'commonmark' package (instead of 'Pandoc'). Some missing Markdown features in 'commonmark' are also supported, such as raw HTML or 'LaTeX' blocks, 'LaTeX' math, superscripts, subscripts, footnotes, element attributes, and appendices, but not all 'Pandoc' Markdown features are (or will be) supported. With additional JavaScript and CSS, you can also create HTML slides and articles. This package can be viewed as a trimmed-down version of R Markdown and 'knitr'. It does not aim at rich Markdown features or a large variety of output formats (the primary formats are HTML and 'LaTeX'). Book and website projects of multiple input documents are also supported.", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", + "commonmark", "utils", - "commonmark (>= 2.0.0)", - "xfun (>= 0.55)" + "xfun" ], - "Suggests": [ - "rbibutils", - "rstudioapi", - "tinytex" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/litedown", - "BugReports": "https://github.com/yihui/litedown/issues", - "VignetteBuilder": "litedown", - "RoxygenNote": "7.3.3", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Tim Taylor [ctb] (ORCID: )", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Hash": "6b9435273e6506fbafa5909adf4abb88" }, "magrittr": { "Package": "magrittr", "Version": "2.0.5", "Source": "Repository", - "Type": "Package", - "Title": "A Forward-Pipe Operator for R", - "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"cre\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"", - "License": "MIT + file LICENSE", - "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", - "BugReports": "https://github.com/tidyverse/magrittr/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Suggests": [ - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "Yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "665e77ab6e5f37a7913226d40b324e37" }, "markdown": { "Package": "markdown", "Version": "2.0", "Source": "Repository", - "Type": "Package", - "Title": "Render Markdown with 'commonmark'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Jeffrey\", \"Horner\", role = \"aut\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Yixuan\", \"Qiu\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Adam\", \"November\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Andrzej\", \"Oles\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Render Markdown to full and lightweight HTML/LaTeX documents with the 'commonmark' package. This package has been superseded by 'litedown'.", - "Depends": [ - "R (>= 2.11.1)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", + "litedown", "utils", - "xfun", - "litedown (>= 0.6)" + "xfun" ], - "Suggests": [ - "knitr", - "rmarkdown (>= 2.18)", - "yaml", - "RCurl" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/markdown", - "BugReports": "https://github.com/rstudio/markdown/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (), JJ Allaire [aut], Jeffrey Horner [aut], Henrik Bengtsson [ctb], Jim Hester [ctb], Yixuan Qiu [ctb], Kohske Takahashi [ctb], Adam November [ctb], Nacho Caballero [ctb], Jeroen Ooms [ctb], Thomas Leeper [ctb], Joe Cheng [ctb], Andrzej Oles [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Hash": "b4349847250b103bbbb8bc6819c4fbca" }, "memoise": { "Package": "memoise", "Version": "2.0.1", "Source": "Repository", - "Title": "'Memoisation' of Functions", - "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))", - "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", - "License": "MIT + file LICENSE", - "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", - "BugReports": "https://github.com/r-lib/memoise/issues", - "Imports": [ - "rlang (>= 0.4.10)", - "cachem" - ], - "Suggests": [ - "digest", - "aws.s3", - "covr", - "googleAuthR", - "googleCloudStorageR", - "httr", - "testthat" + "Repository": "RSPM", + "Requirements": [ + "cachem", + "rlang" + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" + }, + "memuse": { + "Package": "memuse", + "Version": "4.2-3", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R", + "methods", + "utils" ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" + "Hash": "5cfd074e79d5443c523360bbe203d904" }, "mime": { "Package": "mime", "Version": "0.13", "Source": "Repository", - "Type": "Package", - "Title": "Map Filenames to MIME Types", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", - "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "tools" ], - "License": "GPL", - "URL": "https://github.com/yihui/mime", - "BugReports": "https://github.com/yihui/mime/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Hash": "0ec19f34c72fab674d8f2b4b1c6410e1" }, "officer": { "Package": "officer", "Version": "0.7.5", "Source": "Repository", - "Type": "Package", - "Title": "Manipulation of Microsoft Word and PowerPoint Documents", - "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"Stefan\", \"Moog\", , \"moogs@gmx.de\", role = \"aut\"), person(\"Mark\", \"Heckmann\", , \"heckmann.mark@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-0736-7417\")), person(\"ArData\", role = \"cph\"), person(\"Frank\", \"Hangler\", , \"frank@plotandscatter.com\", role = \"ctb\", comment = \"function body_replace_all_text\"), person(\"Liz\", \"Sander\", , \"lsander@civisanalytics.com\", role = \"ctb\", comment = \"several documentation fixes\"), person(\"Anton\", \"Victorson\", , \"anton@victorson.se\", role = \"ctb\", comment = \"fixes xml structures\"), person(\"Jon\", \"Calder\", , \"jonmcalder@gmail.com\", role = \"ctb\", comment = \"update vignettes\"), person(\"John\", \"Harrold\", , \"john.m.harrold@gmail.com\", role = \"ctb\", comment = \"function annotate_base\"), person(\"John\", \"Muschelli\", , \"muschellij2@gmail.com\", role = \"ctb\", comment = \"google doc compatibility\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\", \"function as.matrix.rpptx\")), person(\"Nikolai\", \"Beck\", , \"beck.nikolai@gmail.com\", role = \"ctb\", comment = \"set speaker notes for .pptx documents\"), person(\"Greg\", \"Leleu\", , \"gregoire.leleu@gmail.com\", role = \"ctb\", comment = \"fields functionality in ppt\"), person(\"Majid\", \"Eismann\", role = \"ctb\"), person(\"Wahiduzzaman\", \"Khan\", role = \"ctb\", comment = \"vectorization of remove_slide\"), person(\"Hongyuan\", \"Jia\", , \"hongyuanjia@cqust.edu.cn\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0075-8183\")), person(\"Michael\", \"Stackhouse\", , \"mike.stackhouse@atorusresearch.com\", role = \"ctb\") )", - "Description": "Access and manipulate 'Microsoft Word', 'RTF' and 'Microsoft PowerPoint' documents from R. The package focuses on tabular and graphical reporting from R; it also provides two functions that let users get document content into data objects. A set of functions lets add and remove images, tables and paragraphs of text in new or existing documents. The package does not require any installation of Microsoft products to be able to write Microsoft files.", - "License": "MIT + file LICENSE", - "URL": "https://ardata-fr.github.io/officeverse/, https://davidgohel.github.io/officer/", - "BugReports": "https://github.com/davidgohel/officer/issues", - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R6", "cli", "dplyr", - "graphics", "grDevices", + "graphics", "openssl", - "R6", "ragg", "stats", "tidyr", "utils", "uuid", - "xml2 (>= 1.1.0)", - "zip (>= 2.1.0)" - ], - "Suggests": [ - "devEMF", - "doconv (>= 0.3.0)", - "gdtools", - "ggplot2", - "knitr", - "magick", - "rmarkdown", - "rsvg", - "mschart", - "testthat", - "withr" + "xml2", + "zip" ], - "Encoding": "UTF-8", - "Collate": "'core_properties.R' 'custom_properties.R' 'defunct.R' 'dev-utils.R' 'docx_add.R' 'docx_comments.R' 'docx_cursor.R' 'docx_embed_font.R' 'docx_part.R' 'docx_replace.R' 'docx_section.R' 'docx_settings.R' 'docx_styles.R' 'docx_utils_funs.R' 'empty_content.R' 'formatting_properties.R' 'fortify_docx.R' 'fortify_pptx.R' 'knitr_utils.R' 'officer.R' 'ooxml.R' 'ooxml_block_objects.R' 'ooxml_run_objects.R' 'openxml_content_type.R' 'openxml_document.R' 'pack_folder.R' 'ph_location.R' 'post-proc.R' 'ppt_class_dir_collection.R' 'ppt_classes.R' 'ppt_notes.R' 'ppt_ph_dedupe_layout.R' 'ppt_ph_manipulate.R' 'ppt_ph_rename_layout.R' 'ppt_ph_with_methods.R' 'pptx_informations.R' 'pptx_layout_helper.R' 'pptx_matrix.R' 'utils.R' 'pptx_slide_manip.R' 'read_docx.R' 'docx_write.R' 'read_docx_styles.R' 'read_pptx.R' 'read_xlsx.R' 'relationship.R' 'rtf.R' 'shape_properties.R' 'shorcuts.R' 'docx_append_context.R' 'utils-xml.R' 'deprecated.R' 'zzz.R'", - "Config/roxygen2/version": "8.0.0", - "NeedsCompilation": "no", - "Author": "David Gohel [aut, cre], Stefan Moog [aut], Mark Heckmann [aut] (ORCID: ), ArData [cph], Frank Hangler [ctb] (function body_replace_all_text), Liz Sander [ctb] (several documentation fixes), Anton Victorson [ctb] (fixes xml structures), Jon Calder [ctb] (update vignettes), John Harrold [ctb] (function annotate_base), John Muschelli [ctb] (google doc compatibility), Bill Denney [ctb] (ORCID: , function as.matrix.rpptx), Nikolai Beck [ctb] (set speaker notes for .pptx documents), Greg Leleu [ctb] (fields functionality in ppt), Majid Eismann [ctb], Wahiduzzaman Khan [ctb] (vectorization of remove_slide), Hongyuan Jia [ctb] (ORCID: ), Michael Stackhouse [ctb]", - "Maintainer": "David Gohel ", - "Repository": "CRAN" + "Hash": "11d3d171bd3d2442d9ecb8136b42749d" }, "omopgenerics": { "Package": "omopgenerics", - "Version": "1.3.7", - "Source": "Repository", - "Title": "Methods and Classes for the OMOP Common Data Model", - "Authors@R": "c( person( \"Martí\", \"Català\", email = \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3308-9905\") ), person( \"Edward\", \"Burn\", email = \"edward.burn@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-9286-1128\") ), person( \"Mike\", \"Du\", email = \"mike.du@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9517-8834\") ), person( \"Yuchen\", \"Guo\", email = \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\") ), person( \"Adam\", \"Black\", email = \"black@ohdsi.org\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0001-5576-8701\") ), person( \"Marta\", \"Alcalde-Herraiz\", email = \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0002-4405-1814\") ) )", - "Description": "Provides definitions of core classes and methods used by analytic pipelines that query the OMOP (Observational Medical Outcomes Partnership) common data model.", - "License": "Apache License (>= 2)", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Imports": [ + "Version": "1.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", "cli", - "dbplyr (>= 2.5.1)", + "dbplyr", "dplyr", "generics", "glue", @@ -3521,1938 +1388,753 @@ "tidyr", "vctrs" ], - "Depends": [ - "R (>= 4.1)" - ], - "Suggests": [ - "bit64", - "CDMConnector", - "covr", - "duckdb", - "gt", - "here", - "jsonlite", - "knitr", - "omock", - "readr", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" - ], - "URL": "https://darwin-eu.github.io/omopgenerics/", - "BugReports": "https://github.com/darwin-eu/omopgenerics/issues", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Martí Català [aut, cre] (ORCID: ), Edward Burn [aut] (ORCID: ), Mike Du [ctb] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Adam Black [ctb] (ORCID: ), Marta Alcalde-Herraiz [ctb] (ORCID: )", - "Maintainer": "Martí Català ", - "Repository": "CRAN" + "Hash": "85259a13789943d677dbb852fab30abc" }, "openssl": { "Package": "openssl", "Version": "2.4.1", "Source": "Repository", - "Type": "Package", - "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", - "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/openssl", - "BugReports": "https://github.com/jeroen/openssl/issues", - "SystemRequirements": "OpenSSL >= 1.0.2", - "VignetteBuilder": "knitr", - "Imports": [ + "Repository": "CRAN", + "Requirements": [ "askpass" ], - "Suggests": [ - "curl", - "testthat (>= 2.1.0)", - "digest", - "knitr", - "rmarkdown", - "jsonlite", - "jose", - "sodium" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Hash": "865a99ecdce7c318efa3a467b7614ec3" }, "otel": { "Package": "otel", "Version": "0.2.0", "Source": "Repository", - "Title": "OpenTelemetry R API", - "Authors@R": "person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\"))", - "Description": "High-quality, ubiquitous, and portable telemetry to enable effective observability. OpenTelemetry is a collection of tools, APIs, and SDKs used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior. This package implements the OpenTelemetry API: . Use this package as a dependency if you want to instrument your R package for OpenTelemetry.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "callr", - "cli", - "glue", - "jsonlite", - "otelsdk", - "processx", - "shiny", - "spelling", - "testthat (>= 3.0.0)", - "utils", - "withr" + "Repository": "RSPM", + "Requirements": [ + "R" ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "URL": "https://otel.r-lib.org, https://github.com/r-lib/otel", - "Additional_repositories": "https://github.com/r-lib/otelsdk/releases/download/devel", - "BugReports": "https://github.com/r-lib/otel/issues", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" + "Hash": "627d6993db1043703c0b084fa432f21f" }, "pillar": { "Package": "pillar", "Version": "1.11.1", "Source": "Repository", - "Title": "Coloured Formatting for Columns", - "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", - "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", - "License": "MIT + file LICENSE", - "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", - "BugReports": "https://github.com/r-lib/pillar/issues", - "Imports": [ - "cli (>= 2.3.0)", + "Repository": "RSPM", + "Requirements": [ + "cli", "glue", "lifecycle", - "rlang (>= 1.0.2)", - "utf8 (>= 1.1.0)", + "rlang", + "utf8", "utils", - "vctrs (>= 0.5.0)" - ], - "Suggests": [ - "bit64", - "DBI", - "debugme", - "DiagrammeR", - "dplyr", - "formattable", - "ggplot2", - "knitr", - "lubridate", - "nanotime", - "nycflights13", - "palmerpenguins", - "rmarkdown", - "scales", - "stringi", - "survival", - "testthat (>= 3.1.1)", - "tibble", - "units (>= 0.7.2)", - "vdiffr", - "withr" + "vctrs" ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], RStudio [cph]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" + "Hash": "1395e64f2689ffd503657778e810cee2" }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", "Source": "Repository", - "Title": "Private Configuration for 'R' Packages", - "Author": "Gábor Csárdi", - "Maintainer": "Gábor Csárdi ", - "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", - "License": "MIT + file LICENSE", - "LazyData": "true", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "utils" ], - "Suggests": [ - "covr", - "testthat", - "disposables (>= 1.0.3)" - ], - "URL": "https://github.com/r-lib/pkgconfig#readme", - "BugReports": "https://github.com/r-lib/pkgconfig/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Repository": "CRAN" + "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, "plotly": { "Package": "plotly", "Version": "4.12.0", "Source": "Repository", - "Title": "Create Interactive Web Graphics via 'plotly.js'", - "Authors@R": "c(person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"cpsievert1@gmail.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Chris\", \"Parmer\", role = \"aut\", email = \"chris@plot.ly\"), person(\"Toby\", \"Hocking\", role = \"aut\", email = \"tdhock5@gmail.com\"), person(\"Scott\", \"Chamberlain\", role = \"aut\", email = \"myrmecocystus@gmail.com\"), person(\"Karthik\", \"Ram\", role = \"aut\", email = \"karthik.ram@gmail.com\"), person(\"Marianne\", \"Corvellec\", role = \"aut\", email = \"marianne.corvellec@igdore.org\", comment = c(ORCID = \"0000-0002-1994-3581\")), person(\"Pedro\", \"Despouy\", role = \"aut\", email = \"pedro@plot.ly\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Plotly Technologies Inc.\", role = \"cph\"))", - "License": "MIT + file LICENSE", - "Description": "Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.", - "URL": "https://plotly-r.com, https://github.com/plotly/plotly.R, https://plotly.com/r/", - "BugReports": "https://github.com/plotly/plotly.R/issues", - "Depends": [ - "R (>= 3.5.0)", - "ggplot2 (>= 3.0.0)" - ], - "Imports": [ - "tools", - "scales", - "httr (>= 1.3.0)", - "jsonlite (>= 1.6)", - "magrittr", - "digest", - "viridisLite", - "base64enc", - "htmltools (>= 0.3.6)", - "htmlwidgets (>= 1.5.2.9001)", - "tidyr (>= 1.0.0)", + "Repository": "RSPM", + "Requirements": [ + "R", "RColorBrewer", - "dplyr", - "vctrs", - "tibble", - "lazyeval (>= 0.2.0)", - "rlang (>= 1.0.0)", + "base64enc", "crosstalk", - "purrr", "data.table", - "promises" + "digest", + "dplyr", + "ggplot2", + "htmltools", + "htmlwidgets", + "httr", + "jsonlite", + "lazyeval", + "magrittr", + "promises", + "purrr", + "rlang", + "scales", + "tibble", + "tidyr", + "tools", + "vctrs", + "viridisLite" ], - "Suggests": [ - "MASS", - "maps", - "hexbin", - "ggthemes", - "GGally", - "ggalluvial", - "testthat", - "knitr", - "shiny (>= 1.1.0)", - "shinytest2", - "curl", - "rmarkdown", - "Cairo", - "broom", - "webshot", - "listviewer", - "dendextend", - "sf", - "png", - "IRdisplay", - "processx", - "plotlyGeoAssets", - "forcats", - "withr", - "palmerpenguins", - "rversions", - "reticulate", - "rsvg", - "ggridges" - ], - "LazyData": "true", - "RoxygenNote": "7.3.3", - "Encoding": "UTF-8", - "Config/Needs/check": "tidyverse/ggplot2, ggobi/GGally, rcmdcheck, devtools, reshape2, s2", - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (ORCID: ), Chris Parmer [aut], Toby Hocking [aut], Scott Chamberlain [aut], Karthik Ram [aut], Marianne Corvellec [aut] (ORCID: ), Pedro Despouy [aut], Salim Brüggemann [ctb] (ORCID: ), Plotly Technologies Inc. [cph]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "282f8b208bc767c67a370b47bff6ada7" }, "prettyunits": { "Package": "prettyunits", "Version": "1.2.0", "Source": "Repository", - "Title": "Pretty, Human Readable Formatting of Quantities", - "Authors@R": "c( person(\"Gabor\", \"Csardi\", email=\"csardi.gabor@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Bill\", \"Denney\", email=\"wdenney@humanpredictions.com\", role=c(\"ctb\"), comment=c(ORCID=\"0000-0002-5759-428X\")), person(\"Christophe\", \"Regouby\", email=\"christophe.regouby@free.fr\", role=c(\"ctb\")) )", - "Description": "Pretty, human readable formatting of quantities. Time intervals: '1337000' -> '15d 11h 23m 20s'. Vague time intervals: '2674000' -> 'about a month ago'. Bytes: '1337' -> '1.34 kB'. Rounding: '99' with 3 significant digits -> '99.0' p-values: '0.00001' -> '<0.0001'. Colors: '#FF0000' -> 'red'. Quantities: '1239437' -> '1.24 M'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/prettyunits", - "BugReports": "https://github.com/r-lib/prettyunits/issues", - "Depends": [ - "R(>= 2.10)" - ], - "Suggests": [ - "codetools", - "covr", - "testthat" - ], - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Gabor Csardi [aut, cre], Bill Denney [ctb] (), Christophe Regouby [ctb]", - "Maintainer": "Gabor Csardi ", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" }, "progress": { "Package": "progress", "Version": "1.2.3", "Source": "Repository", - "Title": "Terminal Progress Bars", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Rich\", \"FitzJohn\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Configurable Progress bars, they may include percentage, elapsed time, and/or the estimated completion time. They work in terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works with or without 'Rcpp'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/progress#readme, http://r-lib.github.io/progress/", - "BugReports": "https://github.com/r-lib/progress/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", "crayon", "hms", - "prettyunits", - "R6" - ], - "Suggests": [ - "Rcpp", - "testthat (>= 3.0.0)", - "withr" + "prettyunits" ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Rich FitzJohn [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" + "Hash": "f4625e061cb2865f111b47ff163a5ca6" }, "promises": { "Package": "promises", "Version": "1.5.0", "Source": "Repository", - "Type": "Package", - "Title": "Abstractions for Promise-Based Asynchronous Programming", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises", - "BugReports": "https://github.com/rstudio/promises/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "fastmap (>= 1.1.0)", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "fastmap", "later", "lifecycle", - "magrittr (>= 1.5)", - "otel (>= 0.2.0)", - "R6", + "magrittr", + "otel", "rlang" ], - "Suggests": [ - "future (>= 1.21.0)", - "knitr", - "mirai", - "otelsdk (>= 0.2.0)", - "purrr", - "Rcpp", - "rmarkdown", - "spelling", - "testthat (>= 3.0.0)", - "vembedr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rsconnect, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-27", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Joe Cheng [aut], Barret Schloerke [aut, cre] (ORCID: ), Winston Chang [aut] (ORCID: ), Charlie Gao [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Barret Schloerke ", - "Repository": "CRAN" + "Hash": "62cb899ed5fff70d4e918ec1b762bf7c" }, "purrr": { "Package": "purrr", "Version": "1.2.2", "Source": "Repository", - "Title": "Functional Programming Tools", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", - "Description": "A complete and consistent functional programming toolkit for R.", - "License": "MIT + file LICENSE", - "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", - "BugReports": "https://github.com/tidyverse/purrr/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli (>= 3.6.1)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 1.5.0)", - "rlang (>= 1.1.1)", - "vctrs (>= 0.6.3)" - ], - "Suggests": [ - "carrier (>= 0.3.0)", - "covr", - "dplyr (>= 0.7.8)", - "httr", - "knitr", - "lubridate", - "mirai (>= 2.5.1)", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble", - "tidyselect" - ], - "LinkingTo": [ - "cli" + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "lifecycle", + "magrittr", + "rlang", + "vctrs" ], - "VignetteBuilder": "knitr", - "Biarch": "true", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate, tidyr", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "0a35605539b085a4828ec55ad973fe60" }, "ragg": { "Package": "ragg", "Version": "1.5.2", "Source": "Repository", - "Type": "Package", - "Title": "Graphic Devices Based on AGG", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Maxim\", \"Shemanarev\", role = c(\"aut\", \"cph\"), comment = \"Author of AGG\"), person(\"Tony\", \"Juricic\", , \"tonygeek@yahoo.com\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Milan\", \"Marusinec\", , \"milan@marusinec.sk\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Spencer\", \"Garrett\", role = \"ctb\", comment = \"Contributor to AGG\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Maintainer": "Thomas Lin Pedersen ", - "Description": "Anti-Grain Geometry (AGG) is a high-quality and high-performance 2D drawing library. The 'ragg' package provides a set of graphic devices based on AGG to use as alternative to the raster devices provided through the 'grDevices' package.", - "License": "MIT + file LICENSE", - "URL": "https://ragg.r-lib.org, https://github.com/r-lib/ragg", - "BugReports": "https://github.com/r-lib/ragg/issues", - "Imports": [ - "systemfonts (>= 1.0.3)", - "textshaping (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "graphics", - "grid", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ + "Repository": "CRAN", + "Requirements": [ "systemfonts", "textshaping" ], - "Config/build/compilation-database": "true", - "Config/Needs/website": "ggplot2, devoid, magick, bench, tidyr, ggridges, hexbin, sessioninfo, pkgdown, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-25", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "SystemRequirements": "freetype2, libpng, libtiff, libjpeg, libwebp, libwebpmux", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Maxim Shemanarev [aut, cph] (Author of AGG), Tony Juricic [ctb, cph] (Contributor to AGG), Milan Marusinec [ctb, cph] (Contributor to AGG), Spencer Garrett [ctb] (Contributor to AGG), Posit Software, PBC [cph, fnd] (ROR: )", - "Repository": "CRAN" + "Hash": "c06b460d55dd27458977e417e8ff02c7" }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.4", "Source": "Repository", - "Type": "Package", - "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"trl\", \"cre\", \"cph\")), person(\"Sridhar\", \"Ratnakumar\", role = \"aut\"), person(\"Trent\", \"Mick\", role = \"aut\"), person(\"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(\"Eddy\", \"Petrisor\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = c(\"trl\", \"aut\"), comment = c(ORCID = \"0000-0001-6341-4639\")), person(\"Gabor\", \"Csardi\", role = \"ctb\"), person(\"Gregory\", \"Jefferis\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to R.", - "License": "MIT + file LICENSE", - "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", - "BugReports": "https://github.com/r-lib/rappdirs/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Suggests": [ - "covr", - "roxygen2", - "testthat (>= 3.2.0)", - "withr" + "Repository": "RSPM", + "Requirements": [ + "R" ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-05", - "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, Posit, PBC. See file LICENSE for details.", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [trl, cre, cph], Sridhar Ratnakumar [aut], Trent Mick [aut], ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs), Eddy Petrisor [ctb], Trevor Davis [trl, aut] (ORCID: ), Gabor Csardi [ctb], Gregory Jefferis [ctb], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "f146a5bfc94db048309712535d4d0aee" }, "reactR": { "Package": "reactR", "Version": "0.6.1", "Source": "Repository", - "Type": "Package", - "Title": "React Helpers", - "Date": "2024-09-14", - "Authors@R": "c( person( \"Facebook\", \"Inc\" , role = c(\"aut\", \"cph\") , comment = \"React library in lib, https://reactjs.org/; see AUTHORS for full list of contributors\" ), person( \"Michel\",\"Weststrate\", , role = c(\"aut\", \"cph\") , comment = \"mobx library in lib, https://github.com/mobxjs\" ), person( \"Kent\", \"Russell\" , role = c(\"aut\", \"cre\") , comment = \"R interface\" , email = \"kent.russell@timelyportfolio.com\" ), person( \"Alan\", \"Dipert\" , role = c(\"aut\") , comment = \"R interface\" , email = \"alan@rstudio.com\" ), person( \"Greg\", \"Lin\" , role = c(\"aut\") , comment = \"R interface\" , email = \"glin@glin.io\" ) )", - "Maintainer": "Kent Russell ", - "Description": "Make it easy to use 'React' in R with 'htmlwidget' scaffolds, helper dependency functions, an embedded 'Babel' 'transpiler', and examples.", - "URL": "https://github.com/react-R/reactR", - "BugReports": "https://github.com/react-R/reactR/issues", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "htmltools" ], - "Suggests": [ - "htmlwidgets (>= 1.5.3)", - "rmarkdown", - "shiny", - "V8", - "knitr", - "usethis", - "jsonlite" - ], - "RoxygenNote": "7.3.2", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Facebook Inc [aut, cph] (React library in lib, https://reactjs.org/; see AUTHORS for full list of contributors), Michel Weststrate [aut, cph] (mobx library in lib, https://github.com/mobxjs), Kent Russell [aut, cre] (R interface), Alan Dipert [aut] (R interface), Greg Lin [aut] (R interface)", - "Repository": "CRAN" + "Hash": "b8e3d93f508045812f47136c7c44c251" }, "reactable": { "Package": "reactable", "Version": "0.4.5", "Source": "Repository", - "Type": "Package", - "Title": "Interactive Data Tables for R", - "Authors@R": "c( person(\"Greg\", \"Lin\", email = \"glin@glin.io\", role = c(\"aut\", \"cre\")), person(\"Tanner\", \"Linsley\", role = c(\"ctb\", \"cph\"), comment = \"React Table library\"), person(family = \"Emotion team and other contributors\", role = c(\"ctb\", \"cph\"), comment = \"Emotion library\"), person(\"Kent\", \"Russell\", role = c(\"ctb\", \"cph\"), comment = \"reactR package\"), person(\"Ramnath\", \"Vaidyanathan\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Joe\", \"Cheng\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"JJ\", \"Allaire\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Yihui\", \"Xie\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Kenton\", \"Russell\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(family = \"Facebook, Inc. and its affiliates\", role = c(\"ctb\", \"cph\"), comment = \"React library\"), person(family = \"FormatJS\", role = c(\"ctb\", \"cph\"), comment = \"FormatJS libraries\"), person(family = \"Feross Aboukhadijeh, and other contributors\", role = c(\"ctb\", \"cph\"), comment = \"buffer library\"), person(\"Roman\", \"Shtylman\", role = c(\"ctb\", \"cph\"), comment = \"process library\"), person(\"James\", \"Halliday\", role = c(\"ctb\", \"cph\"), comment = \"stream-browserify library\"), person(family = \"Posit Software, PBC\", role = c(\"fnd\", \"cph\")) )", - "Description": "Interactive data tables for R, based on the 'React Table' JavaScript library. Provides an HTML widget that can be used in 'R Markdown' or 'Quarto' documents, 'Shiny' applications, or viewed from an R console.", - "License": "MIT + file LICENSE", - "URL": "https://glin.github.io/reactable/, https://github.com/glin/reactable", - "BugReports": "https://github.com/glin/reactable/issues", - "Depends": [ - "R (>= 3.1)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "digest", - "htmltools (>= 0.5.2)", - "htmlwidgets (>= 1.5.3)", + "htmltools", + "htmlwidgets", "jsonlite", "reactR" ], - "Suggests": [ - "covr", - "crosstalk", - "dplyr", - "fontawesome", - "knitr", - "leaflet", - "MASS", - "rmarkdown", - "shiny", - "sparkline", - "testthat", - "tippy", - "V8" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Greg Lin [aut, cre], Tanner Linsley [ctb, cph] (React Table library), Emotion team and other contributors [ctb, cph] (Emotion library), Kent Russell [ctb, cph] (reactR package), Ramnath Vaidyanathan [ctb, cph] (htmlwidgets package), Joe Cheng [ctb, cph] (htmlwidgets package), JJ Allaire [ctb, cph] (htmlwidgets package), Yihui Xie [ctb, cph] (htmlwidgets package), Kenton Russell [ctb, cph] (htmlwidgets package), Facebook, Inc. and its affiliates [ctb, cph] (React library), FormatJS [ctb, cph] (FormatJS libraries), Feross Aboukhadijeh, and other contributors [ctb, cph] (buffer library), Roman Shtylman [ctb, cph] (process library), James Halliday [ctb, cph] (stream-browserify library), Posit Software, PBC [fnd, cph]", - "Maintainer": "Greg Lin ", - "Repository": "CRAN" + "Hash": "abfd6fa3794ff78116123d95845e0c32" }, "readr": { "Package": "readr", "Version": "2.2.0", "Source": "Repository", - "Title": "Read Rectangular Text Data", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Shelby\", \"Bearrows\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"https://github.com/mandreyel/\", role = \"cph\", comment = \"mio library\"), person(\"Jukka\", \"Jylänki\", role = c(\"ctb\", \"cph\"), comment = \"grisu3 implementation\"), person(\"Mikkel\", \"Jørgensen\", role = c(\"ctb\", \"cph\"), comment = \"grisu3 implementation\") )", - "Description": "The goal of 'readr' is to provide a fast and friendly way to read rectangular data (like 'csv', 'tsv', and 'fwf'). It is designed to flexibly parse many types of data found in the wild, while still cleanly failing when data unexpectedly changes.", - "License": "MIT + file LICENSE", - "URL": "https://readr.tidyverse.org, https://github.com/tidyverse/readr", - "BugReports": "https://github.com/tidyverse/readr/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", "cli", "clipr", + "cpp11", "crayon", "glue", - "hms (>= 0.4.1)", + "hms", "lifecycle", "methods", - "R6", "rlang", "tibble", + "tzdb", "utils", - "vroom (>= 1.7.0)", + "vroom", "withr" ], - "Suggests": [ - "covr", - "curl", - "datasets", - "knitr", - "rmarkdown", - "spelling", - "stringi", - "testthat (>= 3.2.0)", - "tzdb (>= 0.1.1)", - "waldo", - "xml2" - ], - "LinkingTo": [ - "cpp11", - "tzdb (>= 0.1.1)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "false", - "Config/usethis/last-upkeep": "2025-11-14", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Romain Francois [ctb], Jennifer Bryan [aut, cre] (ORCID: ), Shelby Bearrows [ctb], Posit Software, PBC [cph, fnd] (ROR: ), https://github.com/mandreyel/ [cph] (mio library), Jukka Jylänki [ctb, cph] (grisu3 implementation), Mikkel Jørgensen [ctb, cph] (grisu3 implementation)", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" + "Hash": "4425ad9e28b8e3351184ca2739995b87" }, "renv": { "Package": "renv", - "Version": "1.2.3", + "Version": "1.0.11", "Source": "Repository", - "Type": "Package", - "Title": "Project Environments", - "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@rstudio.com\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A dependency management toolkit for R. Using 'renv', you can create and manage project-local R libraries, save the state of these libraries to a 'lockfile', and later restore your library as required. Together, these tools can help make your projects more isolated, portable, and reproducible.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/renv/, https://github.com/rstudio/renv", - "BugReports": "https://github.com/rstudio/renv/issues", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ "utils" ], - "Suggests": [ - "BiocManager", - "cli", - "compiler", - "covr", - "cpp11", - "curl", - "devtools", - "generics", - "gitcreds", - "jsonlite", - "jsonvalidate", - "knitr", - "miniUI", - "modules", - "packrat", - "pak", - "R6", - "remotes", - "reticulate", - "rmarkdown", - "rstudioapi", - "shiny", - "testthat", - "uuid", - "waldo", - "yaml", - "webfakes" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", - "NeedsCompilation": "no", - "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Kevin Ushey ", - "Repository": "CRAN" + "Hash": "47623f66b4e80b3b0587bc5d7b309888" }, "rlang": { "Package": "rlang", "Version": "1.2.0", "Source": "Repository", - "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", - "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", - "Authors@R": "c( person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"), person(given = \"mikefc\", email = \"mikefc@coolbutuseless.com\", role = \"cph\", comment = \"Hash implementation based on Mike's xxhashlite\"), person(given = \"Yann\", family = \"Collet\", role = \"cph\", comment = \"Author of the embedded xxHash library\"), person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "ByteCompile": "true", - "Biarch": "true", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "utils" ], - "Suggests": [ - "cli (>= 3.1.0)", - "covr", - "crayon", - "desc", - "fs", - "glue", - "knitr", - "magrittr", - "methods", - "pillar", - "pkgload", - "rmarkdown", - "stats", - "testthat (>= 3.3.2)", - "tibble", - "usethis", - "vctrs (>= 0.2.3)", - "withr" - ], - "Enhances": [ - "winch" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", - "BugReports": "https://github.com/r-lib/rlang/issues", - "Config/build/compilation-database": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "dplyr, tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], mikefc [cph] (Hash implementation based on Mike's xxhashlite), Yann Collet [cph] (Author of the embedded xxHash library), Posit, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" + "Hash": "f88151fb9ca15e72dc351deb1328716e" }, "rmarkdown": { "Package": "rmarkdown", "Version": "2.31", "Source": "Repository", - "Type": "Package", - "Title": "Dynamic Documents for R", - "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", - "Description": "Convert R Markdown documents into a variety of formats.", - "License": "GPL-3", - "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", - "BugReports": "https://github.com/rstudio/rmarkdown/issues", - "Depends": [ - "R (>= 3.0)" - ], - "Imports": [ - "bslib (>= 0.2.5.1)", - "evaluate (>= 0.13)", - "fontawesome (>= 0.5.0)", - "htmltools (>= 0.5.1)", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "evaluate", + "fontawesome", + "htmltools", "jquerylib", "jsonlite", - "knitr (>= 1.43)", + "knitr", "methods", - "tinytex (>= 0.31)", + "tinytex", "tools", "utils", - "xfun (>= 0.36)", - "yaml (>= 2.1.19)" + "xfun", + "yaml" ], - "Suggests": [ - "digest", - "dygraphs", - "fs", - "rsconnect", - "downlit (>= 0.4.0)", - "katex (>= 1.4.0)", - "sass (>= 0.4.0)", - "shiny (>= 1.6.0)", - "testthat (>= 3.0.3)", - "tibble", - "vctrs", - "cleanrmd", - "withr (>= 2.4.2)", - "xml2" + "Hash": "f34039d57d861d2869cbf9be813ed08e" + }, + "rprojroot": { + "Package": "rprojroot", + "Version": "2.1.1", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R" ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rstudio/quillt, pkgdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", - "NeedsCompilation": "no", - "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (ORCID: ), Christophe Dervieux [aut] (ORCID: ), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (ORCID: ), Andrew Dunning [ctb] (ORCID: ), Atsushi Yasumoto [ctb, cph] (ORCID: , cph: Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Frederik Aust [ctb] (ORCID: ), Jeff Allen [ctb], JooYoung Seo [ctb] (ORCID: ), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Hash": "b2453de2d29aa646afe4781defdc7903" + }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.18.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "d6e1ecf8e39b6d53c8acde372b2f92d1" }, "sass": { "Package": "sass", "Version": "0.4.10", "Source": "Repository", - "Type": "Package", - "Title": "Syntactically Awesome Style Sheets ('Sass')", - "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this, R developers can use variables, inheritance, and functions to generate dynamic style sheets. The package uses the 'Sass CSS' extension language, which is stable, powerful, and CSS compatible.", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"), person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"), comment = c(ORCID = \"0000-0003-4474-2498\")), person(family = \"RStudio\", role = c(\"cph\", \"fnd\")), person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"), comment = \"json.cpp\"), person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"), comment = \"utf8.h\") )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", - "BugReports": "https://github.com/rstudio/sass/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "GNU make", - "Imports": [ - "fs (>= 1.2.4)", - "rlang (>= 0.4.10)", - "htmltools (>= 0.5.1)", + "Repository": "RSPM", + "Requirements": [ "R6", - "rappdirs" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "withr", - "shiny", - "curl" + "fs", + "htmltools", + "rappdirs", + "rlang" ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "3fb78d066fb92299b1d13f6a7c9a90a8" }, "scales": { "Package": "scales", "Version": "1.4.0", "Source": "Repository", - "Title": "Scale Functions for Visualization", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Dana\", \"Seidel\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.", - "License": "MIT + file LICENSE", - "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", - "BugReports": "https://github.com/r-lib/scales/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "RColorBrewer", "cli", - "farver (>= 2.0.3)", + "farver", "glue", "labeling", "lifecycle", - "R6", - "RColorBrewer", - "rlang (>= 1.1.0)", + "rlang", "viridisLite" ], - "Suggests": [ - "bit64", - "covr", - "dichromat", - "ggplot2", - "hms (>= 0.5.0)", - "stringi", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "LazyLoad": "yes", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [cre, aut] (), Dana Seidel [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" + "Hash": "c5bba8f0d1df8c4b9538a40570798d9b" }, "shiny": { "Package": "shiny", "Version": "1.13.0", "Source": "Repository", - "Type": "Package", - "Title": "Web Application Framework for R", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Garrick\", \"Aden-Buie\", , \"garrick@adenbuie.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Alan\", \"Dipert\", role = \"aut\"), person(\"Barbara\", \"Borges\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Prem Nawaz\", \"Khan\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Victor\", \"Tsaran\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Dennis\", \"Lembree\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Cathy\", \"O'Connor\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(, \"PayPal, Inc\", role = \"cph\", comment = \"Bootstrap accessibility plugin\"), person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"), comment = \"selectize-plugin-a11y library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\"), person(, \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"R Core Team\", role = c(\"ctb\", \"cph\"), comment = \"tar implementation from R\") )", - "Description": "Makes it incredibly easy to build interactive web applications with R. Automatic \"reactive\" binding between inputs and outputs and extensive prebuilt widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.", - "License": "MIT + file LICENSE", - "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", - "BugReports": "https://github.com/rstudio/shiny/issues", - "Depends": [ - "methods", - "R (>= 3.1.2)" - ], - "Imports": [ - "bslib (>= 0.6.0)", - "cachem (>= 1.1.0)", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "bslib", + "cachem", "cli", - "commonmark (>= 2.0.0)", - "fastmap (>= 1.1.1)", - "fontawesome (>= 0.4.0)", - "glue (>= 1.3.2)", + "commonmark", + "fastmap", + "fontawesome", + "glue", "grDevices", - "htmltools (>= 0.5.4)", - "httpuv (>= 1.5.2)", - "jsonlite (>= 0.9.16)", - "later (>= 1.0.0)", - "lifecycle (>= 0.2.0)", - "mime (>= 0.3)", + "htmltools", + "httpuv", + "jsonlite", + "later", + "lifecycle", + "methods", + "mime", "otel", - "promises (>= 1.5.0)", - "R6 (>= 2.0)", - "rlang (>= 0.4.10)", + "promises", + "rlang", "sourcetools", "tools", "utils", "withr", "xtable" ], - "Suggests": [ - "Cairo (>= 1.5-5)", - "coro (>= 1.1.0)", - "datasets", - "DT", - "dygraphs", - "future", - "ggplot2", - "knitr (>= 1.6)", - "magrittr", - "markdown", - "mirai", - "otelsdk (>= 0.2.0)", - "ragg", - "reactlog (>= 1.0.0)", - "rmarkdown", - "sass", - "showtext", - "testthat (>= 3.2.1)", - "watcher", - "yaml" - ], - "Config/Needs/check": "shinytest2", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R' 'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R' 'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R' 'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R' 'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R' 'html-deps.R' 'image-interact-opts.R' 'image-interact.R' 'imageutils.R' 'input-action.R' 'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R' 'input-file.R' 'input-numeric.R' 'input-password.R' 'input-radiobuttons.R' 'input-select.R' 'input-slider.R' 'input-submit.R' 'input-text.R' 'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R' 'notifications.R' 'otel-attr-srcref.R' 'otel-collect.R' 'otel-enable.R' 'otel-error.R' 'otel-label.R' 'otel-reactive-update.R' 'otel-session.R' 'otel-shiny.R' 'otel-with.R' 'priorityqueue.R' 'progress.R' 'react.R' 'reexports.R' 'render-cached-plot.R' 'render-plot.R' 'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R' 'server-input-handlers.R' 'server-resource-paths.R' 'server.R' 'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R' 'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R' 'tar.R' 'test-export.R' 'test-server.R' 'test.R' 'update-input.R' 'utils-lang.R' 'utils-tags.R' 'version_bs_date_picker.R' 'version_ion_range_slider.R' 'version_jquery.R' 'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R' 'viewer.R'", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], JJ Allaire [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Garrick Aden-Buie [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Jonathan McPherson [aut], Alan Dipert [aut], Barbara Borges [aut], Posit Software, PBC [cph, fnd] (ROR: ), jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin), Victor Tsaran [ctb] (Bootstrap accessibility plugin), Dennis Lembree [ctb] (Bootstrap accessibility plugin), Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin), Cathy O'Connor [ctb] (Bootstrap accessibility plugin), PayPal, Inc [cph] (Bootstrap accessibility plugin), Stefan Petre [ctb, cph] (Bootstrap-datepicker library), Andrew Rowls [ctb, cph] (Bootstrap-datepicker library), Brian Reavis [ctb, cph] (selectize.js library), Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library), SpryMedia Limited [ctb, cph] (DataTables library), Ivan Sagalaev [ctb, cph] (highlight.js library), R Core Team [ctb, cph] (tar implementation from R)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" + "Hash": "3ae8521a5a4576fc4b78d00d401f22f9" }, "shinyWidgets": { "Package": "shinyWidgets", "Version": "0.9.1", "Source": "Repository", - "Title": "Custom Inputs Widgets for Shiny", - "Authors@R": "c( person(\"Victor\", \"Perrier\", email = \"victor.perrier@dreamrs.fr\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Fanny\", \"Meyer\", role = \"aut\"), person(\"David\", \"Granjon\", role = \"aut\"), person(\"Ian\", \"Fellows\", role = \"ctb\", comment = \"Methods for mutating vertical tabs & updateMultiInput\"), person(\"Wil\", \"Davis\", role = \"ctb\", comment = \"numericRangeInput function\"), person(\"Spencer\", \"Matthews\", role = \"ctb\", comment = \"autoNumeric methods\"), person(family = \"JavaScript and CSS libraries authors\", role = c(\"ctb\", \"cph\"), comment = \"All authors are listed in LICENSE.md\") )", - "Description": "Collection of custom input controls and user interface components for 'Shiny' applications. Give your applications a unique and colorful style !", - "URL": "https://github.com/dreamRs/shinyWidgets, https://dreamrs.github.io/shinyWidgets/", - "BugReports": "https://github.com/dreamRs/shinyWidgets/issues", - "License": "GPL-3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "Depends": [ - "R (>= 3.1.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "bslib", - "sass", - "shiny (>= 1.6.0)", - "htmltools (>= 0.5.1)", - "jsonlite", "grDevices", - "rlang" - ], - "Suggests": [ - "testthat", - "covr", - "ggplot2", - "DT", - "scales", - "shinydashboard", - "shinydashboardPlus" + "htmltools", + "jsonlite", + "rlang", + "sass", + "shiny" ], - "NeedsCompilation": "no", - "Author": "Victor Perrier [aut, cre, cph], Fanny Meyer [aut], David Granjon [aut], Ian Fellows [ctb] (Methods for mutating vertical tabs & updateMultiInput), Wil Davis [ctb] (numericRangeInput function), Spencer Matthews [ctb] (autoNumeric methods), JavaScript and CSS libraries authors [ctb, cph] (All authors are listed in LICENSE.md)", - "Maintainer": "Victor Perrier ", - "Repository": "CRAN" + "Hash": "e8f592e8c0a636fef0c253c8196d78c7" }, "snakecase": { "Package": "snakecase", "Version": "0.11.1", "Source": "Repository", - "Date": "2023-08-27", - "Title": "Convert Strings into any Case", - "Description": "A consistent, flexible and easy to use tool to parse and convert strings into cases like snake or camel among others.", - "Authors@R": "c( person(\"Malte\", \"Grosser\", , \"malte.grosser@gmail.com\", role = c(\"aut\", \"cre\")))", - "Maintainer": "Malte Grosser ", - "Depends": [ - "R (>= 3.2)" + "Repository": "RSPM", + "Requirements": [ + "R", + "stringi", + "stringr" ], - "Imports": [ - "stringr", - "stringi" + "Hash": "58767e44739b76965332e8a4fe3f91f1" + }, + "snow": { + "Package": "snow", + "Version": "0.4-4", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R", + "utils" ], - "Suggests": [ - "testthat", - "covr", - "tibble", - "purrrlyr", - "knitr", - "rmarkdown", - "magrittr" - ], - "URL": "https://github.com/Tazinho/snakecase", - "BugReports": "https://github.com/Tazinho/snakecase/issues", - "Encoding": "UTF-8", - "License": "GPL-3", - "RoxygenNote": "6.1.1", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Malte Grosser [aut, cre]", - "Repository": "CRAN" + "Hash": "40b74690debd20c57d93d8c246b305d4" }, "sourcetools": { "Package": "sourcetools", "Version": "0.1.7-2", "Source": "Repository", - "Type": "Package", - "Title": "Tools for Reading, Tokenizing and Parsing R Code", - "Authors@R": "person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevinushey@gmail.com\")", - "Maintainer": "Kevin Ushey ", - "Description": "Tools for the reading and tokenization of R code. The 'sourcetools' package provides both an R and C++ interface for the tokenization of R code, and helpers for interacting with the tokenized representation of R code.", - "License": "MIT + file LICENSE", - "Depends": [ - "R (>= 3.0.2)" - ], - "Suggests": [ - "testthat" - ], - "RoxygenNote": "5.0.1", - "BugReports": "https://github.com/kevinushey/sourcetools/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Kevin Ushey [aut, cre]", - "Repository": "CRAN" + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "e716e13bfbfe8acb6182a05f4b367772" }, "stringi": { "Package": "stringi", "Version": "1.8.7", "Source": "Repository", - "Date": "2025-03-27", - "Title": "Fast and Portable Character String Processing Facilities", - "Description": "A collection of character string/text/natural language processing tools for pattern searching (e.g., with 'Java'-like regular expressions or the 'Unicode' collation algorithm), random string generation, case mapping, string transliteration, concatenation, sorting, padding, wrapping, Unicode normalisation, date-time formatting and parsing, and many more. They are fast, consistent, convenient, and - thanks to 'ICU' (International Components for Unicode) - portable across all locales and platforms. Documentation about 'stringi' is provided via its website at and the paper by Gagolewski (2022, ).", - "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", - "BugReports": "https://github.com/gagolews/stringi/issues", - "SystemRequirements": "ICU4C (>= 61, optional)", - "Type": "Package", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", "tools", - "utils", - "stats" + "utils" ], - "Biarch": "TRUE", - "License": "file LICENSE", - "Authors@R": "c(person(given = \"Marek\", family = \"Gagolewski\", role = c(\"aut\", \"cre\", \"cph\"), email = \"marek@gagolewski.com\", comment = c(ORCID = \"0000-0003-0637-6028\")), person(given = \"Bartek\", family = \"Tartanus\", role = \"ctb\"), person(\"Unicode, Inc. and others\", role=\"ctb\", comment = \"ICU4C source code, Unicode Character Database\") )", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", - "Maintainer": "Marek Gagolewski ", - "License_is_FOSS": "yes", - "Repository": "CRAN" + "Hash": "2b56088e23bdd58f89aebf43a0913457" }, "stringr": { "Package": "stringr", "Version": "1.6.0", "Source": "Repository", - "Title": "Simple, Consistent Wrappers for Common String Operations", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with \"NA\"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.", - "License": "MIT + file LICENSE", - "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", - "BugReports": "https://github.com/tidyverse/stringr/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "cli", - "glue (>= 1.6.1)", - "lifecycle (>= 1.0.3)", + "glue", + "lifecycle", "magrittr", - "rlang (>= 1.0.0)", - "stringi (>= 1.5.3)", - "vctrs (>= 0.4.0)" + "rlang", + "stringi", + "vctrs" ], - "Suggests": [ - "covr", - "dplyr", - "gt", - "htmltools", - "htmlwidgets", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/potools/style": "explicit", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "d47392652eedc68bf916657347ff2526" }, "survival": { "Package": "survival", "Version": "3.8-6", "Source": "Repository", - "Title": "Survival Analysis", - "Priority": "recommended", - "Date": "2026-01-09", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "graphics", + "Repository": "CRAN", + "Requirements": [ "Matrix", + "R", + "graphics", "methods", "splines", "stats", "utils" ], - "LazyData": "Yes", - "LazyDataCompression": "xz", - "ByteCompile": "Yes", - "Authors@R": "c(person(c(\"Terry\", \"M\"), \"Therneau\", email=\"therneau.terry@mayo.edu\", role=c(\"aut\", \"cre\")), person(\"Thomas\", \"Lumley\", role=c(\"ctb\", \"trl\"), comment=\"original S->R port and R maintainer until 2009\"), person(\"Atkinson\", \"Elizabeth\", role=\"ctb\"), person(\"Crowson\", \"Cynthia\", role=\"ctb\"))", - "Description": "Contains the core survival analysis routines, including definition of Surv objects, Kaplan-Meier and Aalen-Johansen (multi-state) curves, Cox models, and parametric accelerated failure time models.", - "License": "LGPL (>= 2)", - "URL": "https://github.com/therneau/survival", - "NeedsCompilation": "yes", - "Author": "Terry M Therneau [aut, cre], Thomas Lumley [ctb, trl] (original S->R port and R maintainer until 2009), Atkinson Elizabeth [ctb], Crowson Cynthia [ctb]", - "Maintainer": "Terry M Therneau ", - "Repository": "CRAN" + "Hash": "663dbb3b41554b751ae90fe58f72decf" }, "sys": { "Package": "sys", "Version": "3.4.3", "Source": "Repository", - "Type": "Package", - "Title": "Powerful and Reliable Tools for Running System Commands in R", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"ctb\"))", - "Description": "Drop-in replacements for the base system2() function with fine control and consistent behavior across platforms. Supports clean interruption, timeout, background tasks, and streaming STDIN / STDOUT / STDERR over binary or text connections. Arguments on Windows automatically get encoded and quoted to work on different locales.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/sys", - "BugReports": "https://github.com/jeroen/sys/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "Suggests": [ - "unix (>= 1.4)", - "spelling", - "testthat" - ], - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Repository": "CRAN", + "Hash": "de342ebfebdbf40477d0758d05426646" }, "systemfonts": { "Package": "systemfonts", "Version": "1.3.2", "Source": "Repository", - "Type": "Package", - "Title": "System Native Font Finding", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Jeroen\", \"Ooms\", , \"jeroen@berkeley.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Devon\", \"Govett\", role = \"aut\", comment = \"Author of font-manager\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides system native access to the font catalogue. As font handling varies between systems it is difficult to correctly locate installed fonts across different operating systems. The 'systemfonts' package provides bindings to the native libraries on Windows, macOS and Linux for finding font files that can then be used further by e.g. graphic devices. The main use is intended to be from compiled code but 'systemfonts' also provides access from R.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/systemfonts, https://systemfonts.r-lib.org", - "BugReports": "https://github.com/r-lib/systemfonts/issues", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "base64enc", + "cpp11", "grid", "jsonlite", "lifecycle", "tools", "utils" ], - "Suggests": [ - "covr", - "farver", - "ggplot2", - "graphics", - "knitr", - "ragg", - "rmarkdown", - "svglite", - "testthat (>= 2.1.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.1)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "fontconfig, freetype2", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [aut, cre] (ORCID: ), Jeroen Ooms [aut] (ORCID: ), Devon Govett [aut] (Author of font-manager), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" + "Hash": "1f930828d6590af5da47b3ab4fe161e6" }, "textshaping": { "Package": "textshaping", "Version": "1.0.5", "Source": "Repository", - "Title": "Bindings to the 'HarfBuzz' and 'Fribidi' Libraries for Text Shaping", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides access to the text shaping functionality in the 'HarfBuzz' library and the bidirectional algorithm in the 'Fribidi' library. 'textshaping' is a low-level utility package mainly for graphic devices that expands upon the font tool-set provided by the 'systemfonts' package.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/textshaping", - "BugReports": "https://github.com/r-lib/textshaping/issues", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", + "cpp11", "lifecycle", "stats", "stringi", - "systemfonts (>= 1.3.0)", + "systemfonts", "utils" ], - "Suggests": [ - "covr", - "grDevices", - "grid", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.1)", - "systemfonts (>= 1.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "freetype2, harfbuzz, fribidi", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" + "Hash": "addb750a886a2ac415dea6f8068867de" }, "tibble": { "Package": "tibble", "Version": "3.3.1", "Source": "Repository", - "Title": "Simple Data Frames", - "Authors@R": "c( person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Romain\", \"Francois\", , \"romain@r-enthusiasts.com\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", - "License": "MIT + file LICENSE", - "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", - "BugReports": "https://github.com/tidyverse/tibble/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "cli", - "lifecycle (>= 1.0.0)", + "lifecycle", "magrittr", "methods", - "pillar (>= 1.8.1)", + "pillar", "pkgconfig", - "rlang (>= 1.0.2)", + "rlang", "utils", - "vctrs (>= 0.5.0)" - ], - "Suggests": [ - "bench", - "bit64", - "blob", - "brio", - "callr", - "DiagrammeR", - "dplyr", - "evaluate", - "formattable", - "ggplot2", - "here", - "hms", - "htmltools", - "knitr", - "lubridate", - "nycflights13", - "pkgload", - "purrr", - "rmarkdown", - "stringi", - "testthat (>= 3.0.2)", - "tidyr", - "withr" + "vctrs" ], - "VignetteBuilder": "knitr", - "Config/autostyle/rmd": "false", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", - "Config/usethis/last-upkeep": "2025-06-07", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "NeedsCompilation": "yes", - "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" + "Hash": "c55df870972551cac674b50cadb2d51f" }, "tidyr": { "Package": "tidyr", "Version": "1.3.2", "Source": "Repository", - "Title": "Tidy Messy Data", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to help to create tidy data, where each column is a variable, each row is an observation, and each cell contains a single value. 'tidyr' contains tools for changing the shape (pivoting) and hierarchy (nesting and 'unnesting') of a dataset, turning deeply nested lists into rectangular data frames ('rectangling'), and extracting values out of string columns. It also includes tools for working with missing values (both implicit and explicit).", - "License": "MIT + file LICENSE", - "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", - "BugReports": "https://github.com/tidyverse/tidyr/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "cli (>= 3.4.1)", - "dplyr (>= 1.1.0)", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "cpp11", + "dplyr", "glue", - "lifecycle (>= 1.0.3)", + "lifecycle", "magrittr", - "purrr (>= 1.0.1)", - "rlang (>= 1.1.1)", - "stringr (>= 1.5.0)", - "tibble (>= 2.1.1)", - "tidyselect (>= 1.2.1)", + "purrr", + "rlang", + "stringr", + "tibble", + "tidyselect", "utils", - "vctrs (>= 0.5.2)" + "vctrs" ], - "Suggests": [ - "covr", - "data.table", - "knitr", - "readr", - "repurrrsive (>= 1.1.0)", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.4.0)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], Davis Vaughan [aut], Maximilian Girlich [aut], Kevin Ushey [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Hash": "a4fa2f5876396f04814cb9d8d9ab89e9" }, "tidyselect": { "Package": "tidyselect", "Version": "1.2.1", "Source": "Repository", - "Title": "Select from a Set of Strings", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.", - "License": "MIT + file LICENSE", - "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", - "BugReports": "https://github.com/r-lib/tidyselect/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "glue (>= 1.3.0)", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.0.4)", - "vctrs (>= 0.5.2)", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang", + "vctrs", "withr" ], - "Suggests": [ - "covr", - "crayon", - "dplyr", - "knitr", - "magrittr", - "rmarkdown", - "stringr", - "testthat (>= 3.1.1)", - "tibble (>= 2.1.3)" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.0.9000", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" + "Hash": "829f27b9c4919c16b593794a6344d6c0" }, "tinytex": { "Package": "tinytex", "Version": "0.59", "Source": "Repository", - "Type": "Package", - "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Ethan\", \"Heinzen\", role = \"ctb\"), person(\"Fernando\", \"Cagua\", role = \"ctb\"), person() )", - "Description": "Helper functions to install and maintain the 'LaTeX' distribution named 'TinyTeX' (), a lightweight, cross-platform, portable, and easy-to-maintain version of 'TeX Live'. This package also contains helper functions to compile 'LaTeX' documents, and install missing 'LaTeX' packages automatically.", - "Imports": [ - "xfun (>= 0.48)" - ], - "Suggests": [ - "testit", - "rstudioapi" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/tinytex", - "BugReports": "https://github.com/rstudio/tinytex/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre, cph] (ORCID: ), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Ethan Heinzen [ctb], Fernando Cagua [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Repository": "CRAN", + "Requirements": [ + "xfun" + ], + "Hash": "2688c3e240d4ccc7d6aae804f7fdf322" }, "tzdb": { "Package": "tzdb", "Version": "0.5.0", "Source": "Repository", - "Title": "Time Zone Database Information", - "Authors@R": "c( person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"Howard\", \"Hinnant\", role = \"cph\", comment = \"Author of the included date library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides an up-to-date copy of the Internet Assigned Numbers Authority (IANA) Time Zone Database. It is updated periodically to reflect changes made by political bodies to time zone boundaries, UTC offsets, and daylight saving time rules. Additionally, this package provides a C++ interface for working with the 'date' library. 'date' provides comprehensive support for working with dates and date-times, which this package exposes to make it easier for other R packages to utilize. Headers are provided for calendar specific calculations, along with a limited interface for time zone manipulations.", - "License": "MIT + file LICENSE", - "URL": "https://tzdb.r-lib.org, https://github.com/r-lib/tzdb", - "BugReports": "https://github.com/r-lib/tzdb/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.5.2)" - ], - "Biarch": "yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Davis Vaughan [aut, cre], Howard Hinnant [cph] (Author of the included date library), Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "09e3961e87b7bafa4a9340bbb34aeda8" + }, + "usethis": { + "Package": "usethis", + "Version": "3.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "clipr", + "crayon", + "curl", + "desc", + "fs", + "gert", + "gh", + "glue", + "jsonlite", + "lifecycle", + "purrr", + "rappdirs", + "rlang", + "rprojroot", + "rstudioapi", + "stats", + "tools", + "utils", + "whisker", + "withr", + "yaml" + ], + "Hash": "caa93b7eada0b69e299f61db5984faa7" }, "utf8": { "Package": "utf8", "Version": "1.2.6", "Source": "Repository", - "Title": "Unicode Text Processing", - "Authors@R": "c(person(given = c(\"Patrick\", \"O.\"), family = \"Perry\", role = c(\"aut\", \"cph\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"cre\", email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", - "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", - "License": "Apache License (== 2.0) | file LICENSE", - "URL": "https://krlmlr.github.io/utf8/, https://github.com/krlmlr/utf8", - "BugReports": "https://github.com/krlmlr/utf8/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "cli", - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" + "Repository": "RSPM", + "Requirements": [ + "R" ], - "VignetteBuilder": "knitr, rmarkdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre] (ORCID: ), Unicode, Inc. [cph, dtc] (Unicode Character Database)", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" + "Hash": "d526d558be176e9ceb68c3d1e83479b7" }, "uuid": { "Package": "uuid", "Version": "1.2-2", "Source": "Repository", - "Title": "Tools for Generating and Handling of UUIDs", - "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.org, ORCID: ), Theodore Ts'o [aut, cph] (libuuid)", - "Maintainer": "Simon Urbanek ", - "Authors@R": "c(person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.org\", ORCID=\"0000-0003-2297-1732\")), person(\"Theodore\",\"Ts'o\", email=\"tytso@thunk.org\", role=c(\"aut\",\"cph\"), comment=\"libuuid\"))", - "Depends": [ - "R (>= 2.9.0)" + "Repository": "RSPM", + "Requirements": [ + "R" ], - "Description": "Tools for generating and handling of UUIDs (Universally Unique Identifiers).", - "License": "MIT + file LICENSE", - "URL": "https://www.rforge.net/uuid", - "BugReports": "https://github.com/s-u/uuid/issues", - "NeedsCompilation": "yes", - "Repository": "CRAN" + "Hash": "528fc9e90d70a6a115e21164f37b2c64" }, "vctrs": { "Package": "vctrs", "Version": "0.7.3", "Source": "Repository", - "Title": "Vector Helpers", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"data.table team\", role = \"cph\", comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Defines new notions of prototype and size that are used to provide tools for consistent and well-founded type-coercion and size-recycling, and are in turn connected to ideas of type- and size-stability useful for analysing function interfaces.", - "License": "MIT + file LICENSE", - "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", - "BugReports": "https://github.com/r-lib/vctrs/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "cli (>= 3.4.0)", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", "glue", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.1.7)" + "lifecycle", + "rlang" ], - "Suggests": [ - "bit64", - "covr", - "crayon", - "dplyr (>= 0.8.5)", - "generics", - "knitr", - "pillar (>= 1.4.4)", - "pkgdown (>= 2.0.1)", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble (>= 3.1.3)", - "waldo (>= 0.2.0)", - "withr", - "xml2", - "zeallot" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "KeepSource": "true", - "Language": "en-GB", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Lionel Henry [aut], Davis Vaughan [aut, cre], data.table team [cph] (Radix sort based on data.table's forder() and their contribution to R's order()), Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" + "Hash": "2dcde2d30d3ad67bf1d3a37177457b87" }, "viridisLite": { "Package": "viridisLite", "Version": "0.4.3", "Source": "Repository", - "Type": "Package", - "Title": "Colorblind-Friendly Color Maps (Lite Version)", - "Date": "2026-02-03", - "Authors@R": "c( person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")), person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")), person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")), person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\")) )", - "Maintainer": "Simon Garnier ", - "Description": "Color maps designed to improve graph readability for readers with common forms of color blindness and/or color vision deficiency. The color maps are also perceptually-uniform, both in regular form and also when converted to black-and-white for printing. This is the 'lite' version of the 'viridis' package that also contains 'ggplot2' bindings for discrete and continuous color and fill scales and can be found at .", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "hexbin (>= 1.27.0)", - "ggplot2 (>= 1.0.1)", - "testthat", - "covr" - ], - "URL": "https://sjmgarnier.github.io/viridisLite/, https://github.com/sjmgarnier/viridisLite/", - "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Simon Garnier [aut, cre], Noam Ross [ctb, cph], Bob Rudis [ctb, cph], Marco Sciaini [ctb, cph], Antônio Pedro Camargo [ctb, cph], Cédric Scherer [ctb, cph]", - "Repository": "CRAN" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "9380d36888b72faf5ae6c22b44703867" }, "visOmopResults": { "Package": "visOmopResults", "Version": "1.5.0", "Source": "Repository", - "Title": "Graphs and Tables for OMOP Results", - "Authors@R": "c( person( \"Martí\", \"Català\", , \"marti.catalasabate@ndorms.ox.ac.uk\", role = c(\"aut\"), comment = c(ORCID = \"0000-0003-3308-9905\") ), person( \"Núria\", \"Mercadé-Besora\", , \"nuria.mercadebesora@ndorms.ox.ac.uk\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0009-0006-7948-3747\") ), person( \"Yuchen\", \"Guo\", , \"yuchen.guo@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-0847-4855\") ), person( \"Elin\", \"Rowlands\", , \"elin.rowlands@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0007-6629-4661\") ), person( \"Marta\", \"Alcalde-Herraiz\", , \"marta.alcaldeherraiz@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0009-0002-4405-1814\") ), person( \"Edward\", \"Burn\", , \"edward.burn@ndorms.ox.ac.uk\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0002-9286-1128\") ) )", - "Maintainer": "Núria Mercadé-Besora ", - "Description": "Provides methods to transform omop_result objects into formatted tables and figures, facilitating the visualisation of study results working with the Observational Medical Outcomes Partnership (OMOP) Common Data Model.", - "License": "Apache License (>= 2)", - "URL": "https://darwin-eu.github.io/visOmopResults/, https://github.com/darwin-eu/visOmopResults", - "BugReports": "https://github.com/darwin-eu/visOmopResults/issues", - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "brand.yml", "cli", "dplyr", "generics", "glue", - "omopgenerics (>= 0.3.1)", + "omopgenerics", "purrr", "rlang", "stringr", "systemfonts", "tidyr" ], - "Suggests": [ - "bslib", - "CohortCharacteristics", - "covr", - "DT", - "flextable (>= 0.9.5)", - "ggalluvial", - "ggplot2", - "ggsankeyfier", - "gt", - "here", - "htmltools", - "IncidencePrevalence", - "knitr", - "lifecycle", - "officer", - "palmerpenguins", - "PatientProfiles", - "plotly", - "reactable", - "rmarkdown", - "shiny", - "shinycssloaders", - "shinyWidgets", - "sortable", - "testthat (>= 3.0.0)", - "tinytable (>= 0.14.0)", - "yaml" - ], - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 4.1)" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "LazyData": "true", - "Config/roxygen2/version": "8.0.0", - "NeedsCompilation": "no", - "Author": "Martí Català [aut] (ORCID: ), Núria Mercadé-Besora [aut, cre] (ORCID: ), Yuchen Guo [ctb] (ORCID: ), Elin Rowlands [ctb] (ORCID: ), Marta Alcalde-Herraiz [ctb] (ORCID: ), Edward Burn [ctb] (ORCID: )", - "Repository": "CRAN" + "Hash": "fade996417c3bc001d6bbcda1c788180" }, "vroom": { "Package": "vroom", "Version": "1.7.1", "Source": "Repository", - "Title": "Read and Write Rectangular Text Data Quickly", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Shelby\", \"Bearrows\", role = \"ctb\"), person(\"https://github.com/mandreyel/\", role = \"cph\", comment = \"mio library\"), person(\"Jukka\", \"Jylänki\", role = \"cph\", comment = \"grisu3 implementation\"), person(\"Mikkel\", \"Jørgensen\", role = \"cph\", comment = \"grisu3 implementation\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "The goal of 'vroom' is to read and write data (like 'csv', 'tsv' and 'fwf') quickly. When reading it uses a quick initial indexing step, then reads the values lazily , so only the data you actually use needs to be read. The writer formats the data in parallel and writes to disk asynchronously from formatting.", - "License": "MIT + file LICENSE", - "URL": "https://vroom.tidyverse.org, https://github.com/tidyverse/vroom", - "BugReports": "https://github.com/tidyverse/vroom/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "bit64", - "cli (>= 3.2.0)", + "cli", + "cpp11", "crayon", "glue", "hms", - "lifecycle (>= 1.0.3)", + "lifecycle", "methods", - "rlang (>= 1.1.0)", + "progress", + "rlang", "stats", - "tibble (>= 2.0.0)", + "tibble", "tidyselect", - "tzdb (>= 0.1.1)", - "vctrs (>= 0.2.0)", + "tzdb", + "vctrs", "withr" ], - "Suggests": [ - "archive", - "bench (>= 1.1.0)", - "covr", - "curl", - "dplyr", - "forcats", - "fs", - "ggplot2", - "knitr", - "patchwork", - "prettyunits", - "purrr", - "rmarkdown", - "rstudioapi", - "scales", - "spelling", - "testthat (>= 2.1.0)", - "tidyr", - "utils", - "waldo", - "xml2" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.0)", - "progress (>= 1.2.3)", - "tzdb (>= 0.1.1)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "nycflights13, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "false", - "Config/usethis/last-upkeep": "2025-11-25", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "Config/build/compilation-database": "true", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Jennifer Bryan [aut, cre] (ORCID: ), Shelby Bearrows [ctb], https://github.com/mandreyel/ [cph] (mio library), Jukka Jylänki [cph] (grisu3 implementation), Mikkel Jørgensen [cph] (grisu3 implementation), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" + "Hash": "1e9494eda38f3418f71474363293da2a" + }, + "whisker": { + "Package": "whisker", + "Version": "0.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "c6abfa47a46d281a7d5159d0a8891e88" }, "withr": { "Package": "withr", "Version": "3.0.2", "Source": "Repository", - "Title": "Run Code 'With' Temporarily Modified Global State", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.", - "License": "MIT + file LICENSE", - "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", - "BugReports": "https://github.com/r-lib/withr/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "graphics", - "grDevices" + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "graphics" ], - "Suggests": [ - "callr", - "DBI", - "knitr", - "methods", - "rlang", - "rmarkdown (>= 2.12)", - "RSQLite", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R' 'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R' 'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R' 'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R' 'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R' 'utils.R' 'with.R'", - "NeedsCompilation": "no", - "Author": "Jim Hester [aut], Lionel Henry [aut, cre], Kirill Müller [aut], Kevin Ushey [aut], Hadley Wickham [aut], Winston Chang [aut], Jennifer Bryan [ctb], Richard Cotton [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" + "Hash": "cc2d62c76458d425210d1eb1478b30b4" }, "xfun": { "Package": "xfun", - "Version": "0.58", + "Version": "0.57", "Source": "Repository", - "Type": "Package", - "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Daijiang\", \"Li\", role = \"ctb\"), person(\"Xianying\", \"Tan\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person() )", - "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ + "Repository": "CRAN", + "Requirements": [ + "R", "grDevices", "stats", "tools" ], - "Suggests": [ - "testit", - "parallel", - "codetools", - "methods", - "rstudioapi", - "tinytex (>= 0.30)", - "mime", - "litedown (>= 0.6)", - "commonmark", - "knitr (>= 1.50)", - "remotes", - "pak", - "curl", - "xml2", - "jsonlite", - "magick", - "yaml", - "data.table", - "qs2" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/xfun", - "BugReports": "https://github.com/yihui/xfun/issues", - "Encoding": "UTF-8", - "VignetteBuilder": "litedown", - "Config/roxygen2/version": "8.0.0", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre, cph] (ORCID: , URL: https://yihui.org), Wush Wu [ctb], Daijiang Li [ctb], Xianying Tan [ctb], Salim Brüggemann [ctb] (ORCID: ), Christophe Dervieux [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" + "Hash": "476c8908ae56baf122e69bb2c2d9f631" }, "xml2": { "Package": "xml2", "Version": "1.5.2", "Source": "Repository", - "Title": "Parse XML", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", email = \"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Foundation\", role = \"ctb\", comment = \"Copy of R-project homepage cached as example\") )", - "Description": "Bindings to 'libxml2' for working with XML data using a simple, consistent interface based on 'XPath' expressions. Also supports XML schema validation; for 'XSLT' transformations see the 'xslt' package.", - "License": "MIT + file LICENSE", - "URL": "https://xml2.r-lib.org, https://r-lib.r-universe.dev/xml2", - "BugReports": "https://github.com/r-lib/xml2/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", "cli", "methods", - "rlang (>= 1.1.0)" + "rlang" ], - "Suggests": [ - "covr", - "curl", - "httr", - "knitr", - "mockery", - "rmarkdown", - "testthat (>= 3.2.0)", - "xslt" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "SystemRequirements": "libxml2: libxml2-dev (deb), libxml2-devel (rpm)", - "Collate": "'S4.R' 'as_list.R' 'xml_parse.R' 'as_xml_document.R' 'classes.R' 'format.R' 'import-standalone-obj-type.R' 'import-standalone-purrr.R' 'import-standalone-types-check.R' 'init.R' 'nodeset_apply.R' 'paths.R' 'utils.R' 'xml2-package.R' 'xml_attr.R' 'xml_children.R' 'xml_document.R' 'xml_find.R' 'xml_missing.R' 'xml_modify.R' 'xml_name.R' 'xml_namespaces.R' 'xml_node.R' 'xml_nodeset.R' 'xml_path.R' 'xml_schema.R' 'xml_serialize.R' 'xml_structure.R' 'xml_text.R' 'xml_type.R' 'xml_url.R' 'xml_write.R' 'zzz.R'", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Jeroen Ooms [aut, cre], Posit Software, PBC [cph, fnd], R Foundation [ctb] (Copy of R-project homepage cached as example)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" + "Hash": "d8e98d08a4a4d03f5052acc6e6204b99" }, "xtable": { "Package": "xtable", "Version": "1.8-8", "Source": "Repository", - "Date": "2026-02-20", - "Title": "Export Tables to LaTeX or HTML", - "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", - "Maintainer": "David Scott ", - "Imports": [ + "Repository": "RSPM", + "Requirements": [ + "R", + "methods", "stats", - "utils", - "methods" - ], - "Suggests": [ - "knitr", - "zoo", - "survival", - "glue", - "tinytex" - ], - "VignetteBuilder": "knitr", - "Description": "Coerce data to LaTeX and HTML tables.", - "URL": "http://xtable.r-forge.r-project.org/", - "Depends": [ - "R (>= 2.10.0)" + "utils" ], - "License": "GPL (>= 2)", - "Repository": "CRAN", - "NeedsCompilation": "no", - "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]" + "Hash": "93b19c064862d315a828c7170d806453" }, "yaml": { "Package": "yaml", "Version": "2.3.12", "Source": "Repository", - "Type": "Package", - "Title": "Methods to Convert R Data to YAML and Back", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"cre\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Shawn\", \"Garbett\", , \"shawn.garbett@vumc.org\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4079-5621\")), person(\"Jeremy\", \"Stephens\", role = c(\"aut\", \"ctb\")), person(\"Kirill\", \"Simonov\", role = \"aut\"), person(\"Yihui\", \"Xie\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Zhuoer\", \"Dong\", role = \"ctb\"), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"reikoch\", role = \"ctb\"), person(\"Will\", \"Beasley\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5613-5006\")), person(\"Brendan\", \"O'Connor\", role = \"ctb\"), person(\"Michael\", \"Quinn\", role = \"ctb\"), person(\"Charlie\", \"Gao\", role = \"ctb\"), person(c(\"Gregory\", \"R.\"), \"Warnes\", role = \"ctb\"), person(c(\"Zhian\", \"N.\"), \"Kamvar\", role = \"ctb\") )", - "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", - "License": "BSD_3_clause + file LICENSE", - "URL": "https://yaml.r-lib.org, https://github.com/r-lib/yaml/", - "BugReports": "https://github.com/r-lib/yaml/issues", - "Suggests": [ - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "VignetteBuilder": "knitr", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [cre] (ORCID: ), Shawn Garbett [ctb] (ORCID: ), Jeremy Stephens [aut, ctb], Kirill Simonov [aut], Yihui Xie [ctb] (ORCID: ), Zhuoer Dong [ctb], Jeffrey Horner [ctb], reikoch [ctb], Will Beasley [ctb] (ORCID: ), Brendan O'Connor [ctb], Michael Quinn [ctb], Charlie Gao [ctb], Gregory R. Warnes [ctb], Zhian N. Kamvar [ctb]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" + "Repository": "RSPM", + "Hash": "7cd77cb32abd9220d744307e9fc94ffb" }, "zip": { "Package": "zip", - "Version": "2.3.3", - "Source": "Repository", - "Title": "Cross-Platform 'zip' Compression", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kuba\", \"Podgórski\", role = \"ctb\"), person(\"Rich\", \"Geldreich\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Cross-Platform 'zip' Compression Library. A replacement for the 'zip' function, that does not require any additional external tools on any platform.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/zip, https://r-lib.github.io/zip/", - "BugReports": "https://github.com/r-lib/zip/issues", - "Suggests": [ - "covr", - "pillar", - "processx", - "R6", - "testthat", - "withr" + "Version": "3.0.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "cli" ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-07", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre], Kuba Podgórski [ctb], Rich Geldreich [ctb], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" + "Hash": "b6637f22cadc4e12ad70c4b7d8d63e15" } } } diff --git a/tests/testthat/testPackage/renv/.gitignore b/tests/testthat/testPackage/renv/.gitignore deleted file mode 100644 index 0ec0cbb..0000000 --- a/tests/testthat/testPackage/renv/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -library/ -local/ -cellar/ -lock/ -python/ -sandbox/ -staging/ diff --git a/tests/testthat/testPackage/renv/activate.R b/tests/testthat/testPackage/renv/activate.R deleted file mode 100644 index 20ffd44..0000000 --- a/tests/testthat/testPackage/renv/activate.R +++ /dev/null @@ -1,1438 +0,0 @@ - -local({ - - # the requested version of renv - version <- "1.2.3" - attr(version, "md5") <- "1bd9f58e1cfe27ce035933937c6f03de" - attr(version, "sha") <- NULL - - # the project directory - project <- Sys.getenv("RENV_PROJECT") - if (!nzchar(project)) - project <- getwd() - - # use start-up diagnostics if enabled - diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") - if (diagnostics) { - start <- Sys.time() - profile <- tempfile("renv-startup-", fileext = ".Rprof") - utils::Rprof(profile) - on.exit({ - utils::Rprof(NULL) - elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) - writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) - writeLines(sprintf("- Profile: %s", profile)) - print(utils::summaryRprof(profile)) - }, add = TRUE) - } - - # figure out whether the autoloader is enabled - enabled <- local({ - - # first, check config option - override <- getOption("renv.config.autoloader.enabled") - if (!is.null(override)) - return(override) - - # if we're being run in a context where R_LIBS is already set, - # don't load -- presumably we're being run as a sub-process and - # the parent process has already set up library paths for us - rcmd <- Sys.getenv("R_CMD", unset = NA) - rlibs <- Sys.getenv("R_LIBS", unset = NA) - if (!is.na(rlibs) && !is.na(rcmd)) - return(FALSE) - - # next, check environment variables - # prefer using the configuration one in the future - envvars <- c( - "RENV_CONFIG_AUTOLOADER_ENABLED", - "RENV_AUTOLOADER_ENABLED", - "RENV_ACTIVATE_PROJECT" - ) - - for (envvar in envvars) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(tolower(envval) %in% c("true", "t", "1")) - } - - # enable by default - TRUE - - }) - - # bail if we're not enabled - if (!enabled) { - - # if we're not enabled, we might still need to manually load - # the user profile here - profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") - if (file.exists(profile)) { - cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") - if (tolower(cfg) %in% c("true", "t", "1")) - sys.source(profile, envir = globalenv()) - } - - return(FALSE) - - } - - # avoid recursion - if (identical(getOption("renv.autoloader.running"), TRUE)) { - warning("ignoring recursive attempt to run renv autoloader") - return(invisible(TRUE)) - } - - # signal that we're loading renv during R startup - options(renv.autoloader.running = TRUE) - on.exit(options(renv.autoloader.running = NULL), add = TRUE) - - # signal that we've consented to use renv - options(renv.consent = TRUE) - - # load the 'utils' package eagerly -- this ensures that renv shims, which - # mask 'utils' packages, will come first on the search path - library(utils, lib.loc = .Library) - - # unload renv if it's already been loaded - if ("renv" %in% loadedNamespaces()) - unloadNamespace("renv") - - # load bootstrap tools - ansify <- function(text) { - if (renv_ansify_enabled()) - renv_ansify_enhanced(text) - else - renv_ansify_default(text) - } - - renv_ansify_enabled <- function() { - - override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA) - if (!is.na(override)) - return(as.logical(override)) - - pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA) - if (identical(pane, "build")) - return(FALSE) - - testthat <- Sys.getenv("TESTTHAT", unset = "false") - if (tolower(testthat) %in% "true") - return(FALSE) - - iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false") - if (tolower(iderun) %in% "false") - return(FALSE) - - TRUE - - } - - renv_ansify_default <- function(text) { - text - } - - renv_ansify_enhanced <- function(text) { - - # R help links - pattern <- "`\\?(renv::(?:[^`])+)`" - replacement <- "`\033]8;;x-r-help:\\1\a?\\1\033]8;;\a`" - text <- gsub(pattern, replacement, text, perl = TRUE) - - # runnable code - pattern <- "`(renv::(?:[^`])+)`" - replacement <- "`\033]8;;x-r-run:\\1\a\\1\033]8;;\a`" - text <- gsub(pattern, replacement, text, perl = TRUE) - - # return ansified text - text - - } - - renv_ansify_init <- function() { - - envir <- renv_envir_self() - if (renv_ansify_enabled()) - assign("ansify", renv_ansify_enhanced, envir = envir) - else - assign("ansify", renv_ansify_default, envir = envir) - - } - - `%||%` <- function(x, y) { - if (is.null(x)) y else x - } - - catf <- function(fmt, ..., appendLF = TRUE) { - - quiet <- getOption("renv.bootstrap.quiet", default = FALSE) - if (quiet) - return(invisible()) - - # also check for config environment variables that should suppress messages - # https://github.com/rstudio/renv/issues/2214 - enabled <- Sys.getenv("RENV_CONFIG_STARTUP_QUIET", unset = NA) - if (!is.na(enabled) && tolower(enabled) %in% c("true", "1")) - return(invisible()) - - enabled <- Sys.getenv("RENV_CONFIG_SYNCHRONIZED_CHECK", unset = NA) - if (!is.na(enabled) && tolower(enabled) %in% c("false", "0")) - return(invisible()) - - msg <- sprintf(fmt, ...) - cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") - - invisible(msg) - - } - - header <- function(label, - ..., - prefix = "#", - suffix = "-", - n = min(getOption("width"), 78)) - { - label <- sprintf(label, ...) - n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) - if (n <= 0) - return(paste(prefix, label)) - - tail <- paste(rep.int(suffix, n), collapse = "") - paste0(prefix, " ", label, " ", tail) - - } - - heredoc <- function(text, leave = 0) { - - # remove leading, trailing whitespace - trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) - - # split into lines - lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] - - # compute common indent - indent <- regexpr("[^[:space:]]", lines) - common <- min(setdiff(indent, -1L)) - leave - text <- paste(substring(lines, common), collapse = "\n") - - # substitute in ANSI links for executable renv code - ansify(text) - - } - - bootstrap <- function(version, library) { - - friendly <- renv_bootstrap_version_friendly(version) - section <- header(sprintf("Bootstrapping renv %s", friendly)) - catf(section) - - # ensure the target library path exists; required for file.copy(..., recursive = TRUE) - dir.create(library, showWarnings = FALSE, recursive = TRUE) - - # try to install renv from cache - md5 <- attr(version, "md5", exact = TRUE) - if (length(md5)) { - pkgpath <- renv_bootstrap_find(version) - if (length(pkgpath) && file.exists(pkgpath)) { - ok <- file.copy(pkgpath, library, recursive = TRUE) - if (isTRUE(ok)) - return(invisible()) - } - } - - # attempt to download renv - catf("- Downloading renv ... ", appendLF = FALSE) - withCallingHandlers( - tarball <- renv_bootstrap_download(version), - error = function(err) { - catf("FAILED") - stop("failed to download:\n", conditionMessage(err)) - } - ) - catf("OK") - on.exit(unlink(tarball), add = TRUE) - - # now attempt to install - catf("- Installing renv ... ", appendLF = FALSE) - withCallingHandlers( - status <- renv_bootstrap_install(version, tarball, library), - error = function(err) { - catf("FAILED") - stop("failed to install:\n", conditionMessage(err)) - } - ) - catf("OK") - - # add empty line to break up bootstrapping from normal output - catf("") - return(invisible()) - } - - renv_bootstrap_tests_running <- function() { - getOption("renv.tests.running", default = FALSE) - } - - renv_bootstrap_repos <- function() { - - # get CRAN repository - cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") - - # check for repos override - repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) { - - # split on ';' if present - parts <- strsplit(repos, ";", fixed = TRUE)[[1L]] - - # split into named repositories if present - idx <- regexpr("=", parts, fixed = TRUE) - keys <- substring(parts, 1L, idx - 1L) - vals <- substring(parts, idx + 1L) - names(vals) <- keys - - # if we have a single unnamed repository, call it CRAN - if (length(vals) == 1L && identical(keys, "")) - names(vals) <- "CRAN" - - return(vals) - - } - - # check for lockfile repositories - repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) - if (!inherits(repos, "error") && length(repos)) - return(repos) - - # retrieve current repos - repos <- getOption("repos") - - # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- cran - - # add in renv.bootstrap.repos if set - default <- c(FALLBACK = "https://cloud.r-project.org") - extra <- getOption("renv.bootstrap.repos", default = default) - repos <- c(repos, extra) - - # remove duplicates that might've snuck in - dupes <- duplicated(repos) | duplicated(names(repos)) - repos[!dupes] - - } - - renv_bootstrap_repos_lockfile <- function() { - - lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") - if (!file.exists(lockpath)) - return(NULL) - - lockfile <- tryCatch(renv_json_read(lockpath), error = identity) - if (inherits(lockfile, "error")) { - warning(lockfile) - return(NULL) - } - - repos <- lockfile$R$Repositories - if (length(repos) == 0) - return(NULL) - - keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) - vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) - names(vals) <- keys - - return(vals) - - } - - renv_bootstrap_download <- function(version) { - - sha <- attr(version, "sha", exact = TRUE) - - methods <- if (!is.null(sha)) { - - # attempting to bootstrap a development version of renv - c( - function() renv_bootstrap_download_tarball(sha), - function() renv_bootstrap_download_github(sha) - ) - - } else { - - # attempting to bootstrap a release version of renv - c( - function() renv_bootstrap_download_tarball(version), - function() renv_bootstrap_download_cran_latest(version), - function() renv_bootstrap_download_cran_archive(version) - ) - - } - - for (method in methods) { - path <- tryCatch(method(), error = identity) - if (is.character(path) && file.exists(path)) - return(path) - } - - stop("All download methods failed") - - } - - renv_bootstrap_download_impl <- function(url, destfile) { - - mode <- "wb" - - # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 - fixup <- - Sys.info()[["sysname"]] == "Windows" && - substring(url, 1L, 5L) == "file:" - - if (fixup) - mode <- "w+b" - - args <- list( - url = url, - destfile = destfile, - mode = mode, - quiet = TRUE - ) - - if ("headers" %in% names(formals(utils::download.file))) { - headers <- renv_bootstrap_download_custom_headers(url) - if (length(headers) && is.character(headers)) - args$headers <- headers - } - - do.call(utils::download.file, args) - - } - - renv_bootstrap_download_custom_headers <- function(url) { - - headers <- getOption("renv.download.headers") - if (is.null(headers)) - return(character()) - - if (!is.function(headers)) - stopf("'renv.download.headers' is not a function") - - headers <- headers(url) - if (length(headers) == 0L) - return(character()) - - if (is.list(headers)) - headers <- unlist(headers, recursive = FALSE, use.names = TRUE) - - ok <- - is.character(headers) && - is.character(names(headers)) && - all(nzchar(names(headers))) - - if (!ok) - stop("invocation of 'renv.download.headers' did not return a named character vector") - - headers - - } - - renv_bootstrap_download_cran_latest <- function(version) { - - spec <- renv_bootstrap_download_cran_latest_find(version) - type <- spec$type - repos <- spec$repos - - baseurl <- utils::contrib.url(repos = repos, type = type) - ext <- if (identical(type, "source")) - ".tar.gz" - else if (Sys.info()[["sysname"]] == "Windows") - ".zip" - else - ".tgz" - name <- sprintf("renv_%s%s", version, ext) - url <- paste(baseurl, name, sep = "/") - - destfile <- file.path(tempdir(), name) - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (inherits(status, "condition")) - return(FALSE) - - # report success and return - destfile - - } - - renv_bootstrap_download_cran_latest_find <- function(version) { - - # check whether binaries are supported on this system - binary <- - getOption("renv.bootstrap.binary", default = TRUE) && - !identical(.Platform$pkgType, "source") && - !identical(getOption("pkgType"), "source") && - Sys.info()[["sysname"]] %in% c("Darwin", "Windows") - - types <- c(if (binary) "binary", "source") - - # iterate over types + repositories - for (type in types) { - for (repos in renv_bootstrap_repos()) { - - # build arguments for utils::available.packages() call - args <- list(type = type, repos = repos) - - # add custom headers if available -- note that - # utils::available.packages() will pass this to download.file() - if ("headers" %in% names(formals(utils::download.file))) { - headers <- renv_bootstrap_download_custom_headers(repos) - if (length(headers) && is.character(headers)) - args$headers <- headers - } - - # retrieve package database - db <- tryCatch( - as.data.frame( - do.call(utils::available.packages, args), - stringsAsFactors = FALSE - ), - error = identity - ) - - if (inherits(db, "error")) - next - - # check for compatible entry - entry <- db[db$Package %in% "renv" & db$Version %in% version, ] - if (nrow(entry) == 0) - next - - # found it; return spec to caller - spec <- list(entry = entry, type = type, repos = repos) - return(spec) - - } - } - - # if we got here, we failed to find renv - fmt <- "renv %s is not available from your declared package repositories" - stop(sprintf(fmt, version)) - - } - - renv_bootstrap_download_cran_archive <- function(version) { - - name <- sprintf("renv_%s.tar.gz", version) - repos <- renv_bootstrap_repos() - urls <- file.path(repos, "src/contrib/Archive/renv", name) - destfile <- file.path(tempdir(), name) - - for (url in urls) { - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (identical(status, 0L)) - return(destfile) - - } - - return(FALSE) - - } - - renv_bootstrap_find <- function(version) { - - path <- renv_bootstrap_find_cache(version) - if (length(path) && file.exists(path)) { - catf("- Using renv %s from global package cache", version) - return(path) - } - - } - - renv_bootstrap_find_cache <- function(version) { - - md5 <- attr(version, "md5", exact = TRUE) - if (is.null(md5)) - return() - - # infer path to renv cache - cache <- Sys.getenv("RENV_PATHS_CACHE", unset = "") - if (!nzchar(cache)) { - root <- Sys.getenv("RENV_PATHS_ROOT", unset = NA) - if (!is.na(root)) - cache <- file.path(root, "cache") - } - - if (!nzchar(cache)) { - tools <- asNamespace("tools") - if (is.function(tools$R_user_dir)) { - root <- tools$R_user_dir("renv", "cache") - cache <- file.path(root, "cache") - } - } - - # start completing path to cache - file.path( - cache, - renv_bootstrap_cache_version(), - renv_bootstrap_platform_prefix(), - "renv", - version, - md5, - "renv" - ) - - } - - renv_bootstrap_download_tarball <- function(version) { - - # if the user has provided the path to a tarball via - # an environment variable, then use it - tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) - if (is.na(tarball)) - return() - - # allow directories - if (dir.exists(tarball)) { - name <- sprintf("renv_%s.tar.gz", version) - tarball <- file.path(tarball, name) - } - - # bail if it doesn't exist - if (!file.exists(tarball)) { - - # let the user know we weren't able to honour their request - fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." - msg <- sprintf(fmt, tarball) - warning(msg) - - # bail - return() - - } - - catf("- Using local tarball '%s'.", tarball) - tarball - - } - - renv_bootstrap_github_token <- function() { - for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(envval) - } - } - - renv_bootstrap_download_github <- function(version) { - - enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") - if (!identical(enabled, "TRUE")) - return(FALSE) - - # prepare download options - token <- renv_bootstrap_github_token() - if (is.null(token)) - token <- "" - - if (nzchar(Sys.which("curl")) && nzchar(token)) { - fmt <- "--location --fail --header \"Authorization: token %s\"" - extra <- sprintf(fmt, token) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "curl", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } else if (nzchar(Sys.which("wget")) && nzchar(token)) { - fmt <- "--header=\"Authorization: token %s\"" - extra <- sprintf(fmt, token) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "wget", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } - - url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) - name <- sprintf("renv_%s.tar.gz", version) - destfile <- file.path(tempdir(), name) - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (!identical(status, 0L)) - return(FALSE) - - renv_bootstrap_download_augment(destfile) - - return(destfile) - - } - - # Add Sha to DESCRIPTION. This is stop gap until #890, after which we - # can use renv::install() to fully capture metadata. - renv_bootstrap_download_augment <- function(destfile) { - sha <- renv_bootstrap_git_extract_sha1_tar(destfile) - if (is.null(sha)) { - return() - } - - # Untar - tempdir <- tempfile("renv-github-") - on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) - untar(destfile, exdir = tempdir) - pkgdir <- dir(tempdir, full.names = TRUE)[[1]] - - # Modify description - desc_path <- file.path(pkgdir, "DESCRIPTION") - desc_lines <- readLines(desc_path) - remotes_fields <- c( - "RemoteType: github", - "RemoteHost: api.github.com", - "RemoteRepo: renv", - "RemoteUsername: rstudio", - "RemotePkgRef: rstudio/renv", - paste("RemoteRef: ", sha), - paste("RemoteSha: ", sha) - ) - writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) - - # Re-tar - local({ - old <- setwd(tempdir) - on.exit(setwd(old), add = TRUE) - - tar(destfile, compression = "gzip") - }) - invisible() - } - - # Extract the commit hash from a git archive. Git archives include the SHA1 - # hash as the comment field of the tarball pax extended header - # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) - # For GitHub archives this should be the first header after the default one - # (512 byte) header. - renv_bootstrap_git_extract_sha1_tar <- function(bundle) { - - # open the bundle for reading - # We use gzcon for everything because (from ?gzcon) - # > Reading from a connection which does not supply a 'gzip' magic - # > header is equivalent to reading from the original connection - conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) - on.exit(close(conn)) - - # The default pax header is 512 bytes long and the first pax extended header - # with the comment should be 51 bytes long - # `52 comment=` (11 chars) + 40 byte SHA1 hash - len <- 0x200 + 0x33 - res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) - - if (grepl("^52 comment=", res)) { - sub("52 comment=", "", res) - } else { - NULL - } - } - - renv_bootstrap_install <- function(version, tarball, library) { - - # attempt to install it into project library - dir.create(library, showWarnings = FALSE, recursive = TRUE) - output <- renv_bootstrap_install_impl(library, tarball) - - # check for successful install - status <- attr(output, "status") - if (is.null(status) || identical(status, 0L)) - return(status) - - # an error occurred; report it - header <- "installation of renv failed" - lines <- paste(rep.int("=", nchar(header)), collapse = "") - text <- paste(c(header, lines, output), collapse = "\n") - stop(text) - - } - - renv_bootstrap_install_impl <- function(library, tarball) { - - # invoke using system2 so we can capture and report output - bin <- R.home("bin") - exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" - R <- file.path(bin, exe) - - args <- c( - "--vanilla", "CMD", "INSTALL", "--no-multiarch", - "-l", shQuote(path.expand(library)), - shQuote(path.expand(tarball)) - ) - - system2(R, args, stdout = TRUE, stderr = TRUE) - - } - - renv_bootstrap_platform_prefix_default <- function() { - - # read version component - version <- Sys.getenv("RENV_PATHS_VERSION", unset = "R-%v") - - # expand placeholders - placeholders <- list( - list("%v", format(getRversion()[1, 1:2])), - list("%V", format(getRversion()[1, 1:3])) - ) - - for (placeholder in placeholders) - version <- gsub(placeholder[[1L]], placeholder[[2L]], version, fixed = TRUE) - - # include SVN revision for development versions of R - # (to avoid sharing platform-specific artefacts with released versions of R) - devel <- - identical(R.version[["status"]], "Under development (unstable)") || - identical(R.version[["nickname"]], "Unsuffered Consequences") - - if (devel) - version <- paste(version, R.version[["svn rev"]], sep = "-r") - - version - - } - - renv_bootstrap_platform_prefix <- function() { - - # construct version prefix - version <- renv_bootstrap_platform_prefix_default() - - # build list of path components - components <- c(version, R.version$platform) - - # include prefix if provided by user - prefix <- renv_bootstrap_platform_prefix_impl() - if (!is.na(prefix) && nzchar(prefix)) - components <- c(prefix, components) - - # build prefix - paste(components, collapse = "/") - - } - - renv_bootstrap_platform_prefix_impl <- function() { - - # if an explicit prefix has been supplied, use it - prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) - if (!is.na(prefix)) - return(prefix) - - # if the user has requested an automatic prefix, generate it - auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) - if (is.na(auto) && getRversion() >= "4.4.0") - auto <- "TRUE" - - if (auto %in% c("TRUE", "True", "true", "1")) - return(renv_bootstrap_platform_prefix_auto()) - - # empty string on failure - "" - - } - - renv_bootstrap_platform_prefix_auto <- function() { - - prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) - if (inherits(prefix, "error") || prefix %in% "unknown") { - - msg <- paste( - "failed to infer current operating system", - "please file a bug report at https://github.com/rstudio/renv/issues", - sep = "; " - ) - - warning(msg) - - } - - prefix - - } - - renv_bootstrap_platform_os <- function() { - - sysinfo <- Sys.info() - sysname <- sysinfo[["sysname"]] - - # handle Windows + macOS up front - if (sysname == "Windows") - return("windows") - else if (sysname == "Darwin") - return("macos") - - # check for os-release files - for (file in c("/etc/os-release", "/usr/lib/os-release")) - if (file.exists(file)) - return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) - - # check for redhat-release files - if (file.exists("/etc/redhat-release")) - return(renv_bootstrap_platform_os_via_redhat_release()) - - "unknown" - - } - - renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { - - # read /etc/os-release - release <- utils::read.table( - file = file, - sep = "=", - quote = c("\"", "'"), - col.names = c("Key", "Value"), - comment.char = "#", - stringsAsFactors = FALSE - ) - - vars <- as.list(release$Value) - names(vars) <- release$Key - - # get os name - os <- tolower(sysinfo[["sysname"]]) - - # read id - id <- "unknown" - for (field in c("ID", "ID_LIKE")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - id <- vars[[field]] - break - } - } - - # read version - version <- "unknown" - for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - version <- vars[[field]] - break - } - } - - # join together - paste(c(os, id, version), collapse = "-") - - } - - renv_bootstrap_platform_os_via_redhat_release <- function() { - - # read /etc/redhat-release - contents <- readLines("/etc/redhat-release", warn = FALSE) - - # infer id - id <- if (grepl("centos", contents, ignore.case = TRUE)) - "centos" - else if (grepl("redhat", contents, ignore.case = TRUE)) - "redhat" - else - "unknown" - - # try to find a version component (very hacky) - version <- "unknown" - - parts <- strsplit(contents, "[[:space:]]")[[1L]] - for (part in parts) { - - nv <- tryCatch(numeric_version(part), error = identity) - if (inherits(nv, "error")) - next - - version <- nv[1, 1] - break - - } - - paste(c("linux", id, version), collapse = "-") - - } - - renv_bootstrap_library_root_name <- function(project) { - - # use project name as-is if requested - asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") - if (asis) - return(basename(project)) - - # otherwise, disambiguate based on project's path - id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) - paste(basename(project), id, sep = "-") - - } - - renv_bootstrap_library_root <- function(project) { - - prefix <- renv_bootstrap_profile_prefix() - - path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) - if (!is.na(path)) - return(paste(c(path, prefix), collapse = "/")) - - path <- renv_bootstrap_library_root_impl(project) - if (!is.null(path)) { - name <- renv_bootstrap_library_root_name(project) - return(paste(c(path, prefix, name), collapse = "/")) - } - - renv_bootstrap_paths_renv("library", project = project) - - } - - renv_bootstrap_library_root_impl <- function(project) { - - root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) - if (!is.na(root)) - return(root) - - type <- renv_bootstrap_project_type(project) - if (identical(type, "package")) { - userdir <- renv_bootstrap_user_dir() - return(file.path(userdir, "library")) - } - - } - - renv_bootstrap_validate_version <- function(version, description = NULL) { - - # resolve description file - # - # avoid passing lib.loc to `packageDescription()` below, since R will - # use the loaded version of the package by default anyhow. note that - # this function should only be called after 'renv' is loaded - # https://github.com/rstudio/renv/issues/1625 - description <- description %||% packageDescription("renv") - - # check whether requested version 'version' matches loaded version of renv - sha <- attr(version, "sha", exact = TRUE) - valid <- if (!is.null(sha)) - renv_bootstrap_validate_version_dev(sha, description) - else - renv_bootstrap_validate_version_release(version, description) - - if (valid) - return(TRUE) - - # the loaded version of renv doesn't match the requested version; - # give the user instructions on how to proceed - dev <- identical(description[["RemoteType"]], "github") - remote <- if (dev) - paste("rstudio/renv", description[["RemoteSha"]], sep = "@") - else - paste("renv", description[["Version"]], sep = "@") - - # display both loaded version + sha if available - friendly <- renv_bootstrap_version_friendly( - version = description[["Version"]], - sha = if (dev) description[["RemoteSha"]] - ) - - fmt <- heredoc(" - renv %1$s was loaded from project library, but this project is configured to use renv %2$s. - - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. - - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. - ") - catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) - - FALSE - - } - - renv_bootstrap_validate_version_dev <- function(version, description) { - - expected <- description[["RemoteSha"]] - if (!is.character(expected)) - return(FALSE) - - pattern <- sprintf("^\\Q%s\\E", version) - grepl(pattern, expected, perl = TRUE) - - } - - renv_bootstrap_validate_version_release <- function(version, description) { - expected <- description[["Version"]] - is.character(expected) && identical(c(expected), c(version)) - } - - renv_bootstrap_hash_text <- function(text) { - - hashfile <- tempfile("renv-hash-") - on.exit(unlink(hashfile), add = TRUE) - - writeLines(text, con = hashfile) - tools::md5sum(hashfile) - - } - - renv_bootstrap_load <- function(project, libpath, version) { - - # try to load renv from the project library - if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) - return(FALSE) - - # warn if the version of renv loaded does not match - renv_bootstrap_validate_version(version) - - # execute renv load hooks, if any - hooks <- getHook("renv::autoload") - for (hook in hooks) - if (is.function(hook)) - tryCatch(hook(), error = warnify) - - # load the project - renv::load(project) - - TRUE - - } - - renv_bootstrap_profile_load <- function(project) { - - # if RENV_PROFILE is already set, just use that - profile <- Sys.getenv("RENV_PROFILE", unset = NA) - if (!is.na(profile) && nzchar(profile)) - return(profile) - - # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) - if (!file.exists(path)) - return(NULL) - - # read the profile, and set it if it exists - contents <- readLines(path, warn = FALSE) - if (length(contents) == 0L) - return(NULL) - - # set RENV_PROFILE - profile <- contents[[1L]] - if (!profile %in% c("", "default")) - Sys.setenv(RENV_PROFILE = profile) - - profile - - } - - renv_bootstrap_profile_prefix <- function() { - profile <- renv_bootstrap_profile_get() - if (!is.null(profile)) - return(file.path("profiles", profile, "renv")) - } - - renv_bootstrap_profile_get <- function() { - profile <- Sys.getenv("RENV_PROFILE", unset = "") - renv_bootstrap_profile_normalize(profile) - } - - renv_bootstrap_profile_set <- function(profile) { - profile <- renv_bootstrap_profile_normalize(profile) - if (is.null(profile)) - Sys.unsetenv("RENV_PROFILE") - else - Sys.setenv(RENV_PROFILE = profile) - } - - renv_bootstrap_profile_normalize <- function(profile) { - - if (is.null(profile) || profile %in% c("", "default")) - return(NULL) - - profile - - } - - renv_bootstrap_path_absolute <- function(path) { - - substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( - substr(path, 1L, 1L) %in% c(letters, LETTERS) && - substr(path, 2L, 3L) %in% c(":/", ":\\") - ) - - } - - renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { - renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") - root <- if (renv_bootstrap_path_absolute(renv)) NULL else project - prefix <- if (profile) renv_bootstrap_profile_prefix() - components <- c(root, renv, prefix, ...) - paste(components, collapse = "/") - } - - renv_bootstrap_project_type <- function(path) { - - descpath <- file.path(path, "DESCRIPTION") - if (!file.exists(descpath)) - return("unknown") - - desc <- tryCatch( - read.dcf(descpath, all = TRUE), - error = identity - ) - - if (inherits(desc, "error")) - return("unknown") - - type <- desc$Type - if (!is.null(type)) - return(tolower(type)) - - package <- desc$Package - if (!is.null(package)) - return("package") - - "unknown" - - } - - renv_bootstrap_user_dir <- function() { - dir <- renv_bootstrap_user_dir_impl() - path.expand(chartr("\\", "/", dir)) - } - - renv_bootstrap_user_dir_impl <- function() { - - # use local override if set - override <- getOption("renv.userdir.override") - if (!is.null(override)) - return(override) - - # use R_user_dir if available - tools <- asNamespace("tools") - if (is.function(tools$R_user_dir)) - return(tools$R_user_dir("renv", "cache")) - - # try using our own backfill for older versions of R - envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") - for (envvar in envvars) { - root <- Sys.getenv(envvar, unset = NA) - if (!is.na(root)) - return(file.path(root, "R/renv")) - } - - # use platform-specific default fallbacks - if (Sys.info()[["sysname"]] == "Windows") - file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") - else if (Sys.info()[["sysname"]] == "Darwin") - "~/Library/Caches/org.R-project.R/R/renv" - else - "~/.cache/R/renv" - - } - - renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { - sha <- sha %||% attr(version, "sha", exact = TRUE) - parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) - paste(parts, collapse = "") - } - - renv_bootstrap_exec <- function(project, libpath, version) { - if (!renv_bootstrap_load(project, libpath, version)) - renv_bootstrap_run(project, libpath, version) - } - - renv_bootstrap_run <- function(project, libpath, version) { - tryCatch( - renv_bootstrap_run_impl(project, libpath, version), - error = function(e) { - msg <- paste( - "failed to bootstrap renv: the project will not be loaded.", - paste("Reason:", conditionMessage(e)), - "Use `renv::activate()` to re-initialize the project.", - sep = "\n" - ) - warning(msg, call. = FALSE) - } - ) - } - - renv_bootstrap_run_impl <- function(project, libpath, version) { - - # perform bootstrap - bootstrap(version, libpath) - - # exit early if we're just testing bootstrap - if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) - return(TRUE) - - # try again to load - if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { - return(renv::load(project = project)) - } - - # failed to download or load renv; warn the user - msg <- c( - "Failed to find an renv installation: the project will not be loaded.", - "Use `renv::activate()` to re-initialize the project." - ) - - warning(paste(msg, collapse = "\n"), call. = FALSE) - - } - - renv_bootstrap_cache_version <- function() { - # NOTE: users should normally not override the cache version; - # this is provided just to make testing easier - Sys.getenv("RENV_CACHE_VERSION", unset = "v5") - } - - renv_bootstrap_cache_version_previous <- function() { - version <- renv_bootstrap_cache_version() - number <- as.integer(substring(version, 2L)) - paste("v", number - 1L, sep = "") - } - - renv_json_read <- function(file = NULL, text = NULL) { - - jlerr <- NULL - - # if jsonlite is loaded, use that instead - if ("jsonlite" %in% loadedNamespaces()) { - - json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) - if (!inherits(json, "error")) - return(json) - - jlerr <- json - - } - - # otherwise, fall back to the default JSON reader - json <- tryCatch(renv_json_read_default(file, text), error = identity) - if (!inherits(json, "error")) - return(json) - - # report an error - if (!is.null(jlerr)) - stop(jlerr) - else - stop(json) - - } - - renv_json_read_jsonlite <- function(file = NULL, text = NULL) { - text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") - jsonlite::fromJSON(txt = text, simplifyVector = FALSE) - } - - renv_json_read_patterns <- function() { - - list( - - # objects - list("{", "\t\n\tobject(\t\n\t", TRUE), - list("}", "\t\n\t)\t\n\t", TRUE), - - # arrays - list("[", "\t\n\tarray(\t\n\t", TRUE), - list("]", "\n\t\n)\n\t\n", TRUE), - - # maps - list(":", "\t\n\t=\t\n\t", TRUE), - - # newlines - list("\\u000a", "\n", FALSE) - - ) - - } - - renv_json_read_envir <- function() { - - envir <- new.env(parent = emptyenv()) - - envir[["+"]] <- `+` - envir[["-"]] <- `-` - - envir[["object"]] <- function(...) { - result <- list(...) - names(result) <- as.character(names(result)) - result - } - - envir[["array"]] <- list - - envir[["true"]] <- TRUE - envir[["false"]] <- FALSE - envir[["null"]] <- NULL - - envir - - } - - renv_json_read_remap <- function(object, patterns) { - - # repair names if necessary - if (!is.null(names(object))) { - - nms <- names(object) - for (pattern in patterns) - nms <- gsub(pattern[[2L]], pattern[[1L]], nms, fixed = TRUE) - names(object) <- nms - - } - - # repair strings if necessary - if (is.character(object)) { - for (pattern in patterns) - object <- gsub(pattern[[2L]], pattern[[1L]], object, fixed = TRUE) - } - - # recurse for other objects - if (is.recursive(object)) - for (i in seq_along(object)) - object[i] <- list(renv_json_read_remap(object[[i]], patterns)) - - # return remapped object - object - - } - - renv_json_read_default <- function(file = NULL, text = NULL) { - - # read json text - text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") - - # convert into something the R parser will understand - patterns <- renv_json_read_patterns() - transformed <- text - for (pattern in patterns) - transformed <- gsub(pattern[[1L]], pattern[[2L]], transformed, fixed = TRUE) - - # parse it - rfile <- tempfile("renv-json-", fileext = ".R") - on.exit(unlink(rfile), add = TRUE) - writeLines(transformed, con = rfile) - json <- parse(rfile, keep.source = FALSE, srcfile = NULL)[[1L]] - - # evaluate in safe environment - result <- eval(json, envir = renv_json_read_envir()) - - # fix up strings if necessary -- do so only with reversible patterns - patterns <- Filter(function(pattern) pattern[[3L]], patterns) - renv_json_read_remap(result, patterns) - - } - - - # load the renv profile, if any - renv_bootstrap_profile_load(project) - - # construct path to library root - root <- renv_bootstrap_library_root(project) - - # construct library prefix for platform - prefix <- renv_bootstrap_platform_prefix() - - # construct full libpath - libpath <- file.path(root, prefix) - - # run bootstrap code - renv_bootstrap_exec(project, libpath, version) - - invisible() - -}) diff --git a/tests/testthat/testPackage/renv/settings.json b/tests/testthat/testPackage/renv/settings.json deleted file mode 100644 index 46f2f31..0000000 --- a/tests/testthat/testPackage/renv/settings.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "bioconductor.version": null, - "external.libraries": [], - "ignored.packages": [], - "lockfile.sanitize": true, - "package.dependency.fields": [ - "Imports", - "Depends", - "LinkingTo" - ], - "ppm.enabled": null, - "ppm.ignored.urls": [], - "r.version": null, - "snapshot.dev": false, - "snapshot.type": "implicit", - "use.cache": true, - "vcs.ignore.cellar": true, - "vcs.ignore.library": true, - "vcs.ignore.local": true, - "vcs.manage.ignores": true -} diff --git a/tests/testthat/testPackage/testPackage.Rproj b/tests/testthat/testPackage/testPackage.Rproj deleted file mode 100644 index 69fafd4..0000000 --- a/tests/testthat/testPackage/testPackage.Rproj +++ /dev/null @@ -1,22 +0,0 @@ -Version: 1.0 - -RestoreWorkspace: No -SaveWorkspace: No -AlwaysSaveHistory: Default - -EnableCodeIndexing: Yes -UseSpacesForTab: Yes -NumSpacesForTab: 2 -Encoding: UTF-8 - -RnwWeave: Sweave -LaTeX: pdfLaTeX - -AutoAppendNewline: Yes -StripTrailingWhitespace: Yes -LineEndingConversion: Posix - -BuildType: Package -PackageUseDevtools: Yes -PackageInstallArgs: --no-multiarch --with-keep.source -PackageRoxygenize: rd,collate,namespace diff --git a/tests/testthat/testPackage/tests/testthat.R b/tests/testthat/testPackage/tests/testthat.R deleted file mode 100644 index e3034c3..0000000 --- a/tests/testthat/testPackage/tests/testthat.R +++ /dev/null @@ -1,12 +0,0 @@ -# This file is part of the standard setup for testthat. -# It is recommended that you do not modify it. -# -# Where should you do additional test configuration? -# Learn more about the roles of various files in: -# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview -# * https://testthat.r-lib.org/articles/special-files.html - -library(testthat) -library(testPackage) - -test_check("testPackage") diff --git a/tests/testthat/testPackage/tests/testthat/test-createCohorts.R b/tests/testthat/testPackage/tests/testthat/test-createCohorts.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-createCohorts.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-merge.R b/tests/testthat/testPackage/tests/testthat/test-merge.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-merge.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-objective1.R b/tests/testthat/testPackage/tests/testthat/test-objective1.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-objective1.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-objective2.R b/tests/testthat/testPackage/tests/testthat/test-objective2.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-objective2.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-objective3.R b/tests/testthat/testPackage/tests/testthat/test-objective3.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-objective3.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R b/tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-pullFromAtlas.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R b/tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-runDiagnostics.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-runStudy.R b/tests/testthat/testPackage/tests/testthat/test-runStudy.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-runStudy.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) diff --git a/tests/testthat/testPackage/tests/testthat/test-utils.R b/tests/testthat/testPackage/tests/testthat/test-utils.R deleted file mode 100644 index 8849056..0000000 --- a/tests/testthat/testPackage/tests/testthat/test-utils.R +++ /dev/null @@ -1,3 +0,0 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) -}) From f455256af7d415e3b89295f3b2715be17edfd663 Mon Sep 17 00:00:00 2001 From: cebarboza Date: Wed, 1 Jul 2026 15:17:20 +0200 Subject: [PATCH 07/14] tests passing --- DESCRIPTION | 12 +- R/insertStructure.R | 90 +- renv.lock | 1631 +++++++++++++++++- tests/testthat/test-insertStructure.R | 29 +- tests/testthat/testPackage/DESCRIPTION | 24 - tests/testthat/testPackage/renv.lock | 2140 ------------------------ 6 files changed, 1692 insertions(+), 2234 deletions(-) delete mode 100644 tests/testthat/testPackage/DESCRIPTION delete mode 100644 tests/testthat/testPackage/renv.lock diff --git a/DESCRIPTION b/DESCRIPTION index 0210922..19109db 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,7 +30,17 @@ Imports: zip, here, fs, - usethis + usethis, + omopgenerics, + PhenotypeR, + DrugExposureDiagnostics, + CohortConstructor, + IncidencePrevalence, + DrugUtilisation, + CohortCharacteristics, + CohortSurvival, + visOmopResults, + DarwinShinyModules Config/roxygen2/version: 8.0.0 Suggests: testthat (>= 3.0.0) diff --git a/R/insertStructure.R b/R/insertStructure.R index 8148914..0b1cdb9 100644 --- a/R/insertStructure.R +++ b/R/insertStructure.R @@ -9,6 +9,7 @@ #' @return #' An invisible list of the installed packages. installPackageBundle <- function(path) { + # Install default package bundle complete_darwin <- list( cran = c( @@ -27,7 +28,6 @@ installPackageBundle <- function(path) { ) ) - # Install packages with renv if (!dir.exists(file.path(path, "renv"))) { cli::cli_abort( message = c( @@ -37,31 +37,35 @@ installPackageBundle <- function(path) { ) } - renv::install(complete_darwin$cran) - renv::install(complete_darwin$github) - - # Add dependencies (default type = "Imports") - pkg_names <- c( - complete_darwin$cran, - basename(complete_darwin$github) - ) - - if (!requireNamespace("usethis", quietly = TRUE)) { - cli::cli_inform( - "Installing required package: 'usethis'" + withr::with_dir(path, { + # Install packages with renv + renv::install(complete_darwin$cran) + renv::install(complete_darwin$github) + + # Add dependencies (default type = "Imports") + pkg_names <- c( + complete_darwin$cran, + basename(complete_darwin$github) ) - install.packages("usethis") - } - for (pkg in pkg_names) { - usethis::use_package(pkg) - } + if (!requireNamespace("usethis", quietly = TRUE)) { + cli::cli_inform( + "Installing required package: 'usethis'" + ) + install.packages("usethis") + } + + for (pkg in pkg_names) { + usethis::use_package(pkg) + } - # Update lockfile - renv::snapshot() + # Update lockfile + renv::snapshot() + }) # Return invisible package list invisible(pkg_names) + } @@ -71,10 +75,12 @@ installPackageBundle <- function(path) { #' #' @return #' No return value. -insertDocs <- function() { - usethis::use_news_md(open = FALSE) - usethis::use_readme_rmd(open = FALSE) - usethis::use_apl2_license() +insertDocs <- function(path) { + withr::with_dir(path, { + usethis::use_news_md(open = FALSE) + usethis::use_readme_rmd(open = FALSE) + usethis::use_apl2_license() + }) } @@ -90,9 +96,9 @@ insertDocs <- function() { #' @return #' No return value. insertStudyFiles <- function( - path = ".", - n_obj = 3 -) { + path = ".", + n_obj = 3 + ) { # R/ if ("hello.R" %in% list.files(file.path(path, "R"))) { unlink(file.path(path, "R/hello.R")) @@ -136,14 +142,12 @@ insertStudyFiles <- function( #' @return #' No return value. insertTests <- function( - path = "." -) { + path = "." + ) { + usethis::use_testthat() - if ( - !dir.exists(file.path(path, "R")) | - length(list.files(file.path(path, "R"))) == 0 - ) { + if (!dir.exists(file.path(path, "R")) | length(list.files(file.path(path, "R"))) == 0) { cli::cli_abort( message = c( "!" = "No .R files are found to generate tests", @@ -156,9 +160,8 @@ insertTests <- function( for (script in list.files(file.path(path, "R"))) { if (script == "globals.R") { next - } else { - # remove ".R" - usethis::use_test(substr(script, 1, nchar(script) - 2), open = FALSE) + } else{ # remove ".R" + usethis::use_test(substr(script, 1, nchar(script) -2), open = FALSE) } } } @@ -182,9 +185,10 @@ insertTests <- function( #' #' @export insertStructure <- function( - path = ".", - n_obj = 3 -) { + path = ".", + n_obj = 3 + ) { + # Need an existing package to run the function if (!file.exists(file.path(path, "DESCRIPTION"))) { cli::cli_abort( @@ -202,10 +206,8 @@ insertStructure <- function( cli::cli_alert_info("Installing package bundle...") installPackageBundle(path) - withr::with_dir(path, { - cli::cli_alert_info("Inserting documentation files...") - insertDocs() - }) + cli::cli_alert_info("Inserting documentation files...") + insertDocs(path) cli::cli_alert_info("Inserting study files...") insertStudyFiles(path, n_obj) @@ -214,4 +216,4 @@ insertStructure <- function( insertTests(path) cli::cli_alert_success("Package structure created successfully.") -} +} \ No newline at end of file diff --git a/renv.lock b/renv.lock index 7546e90..5925551 100644 --- a/renv.lock +++ b/renv.lock @@ -9,6 +9,313 @@ ] }, "Packages": { + "CDMConnector": { + "Package": "CDMConnector", + "Version": "2.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "DBI", + "R", + "checkmate", + "cli", + "dbplyr", + "dplyr", + "generics", + "glue", + "httr2", + "jsonlite", + "lifecycle", + "methods", + "omopgenerics", + "purrr", + "readr", + "rlang", + "stringi", + "stringr", + "tidyr", + "tidyselect", + "withr" + ], + "Hash": "20f9abc5909eb8946c1fc63ed4509305" + }, + "CodelistGenerator": { + "Package": "CodelistGenerator", + "Version": "4.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "DBI", + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "glue", + "jsonlite", + "lifecycle", + "omopgenerics", + "purrr", + "rlang", + "stringi", + "stringr", + "tidyr", + "vctrs" + ], + "Hash": "39a51212e117c844a0b755e72e49a2e2" + }, + "CohortCharacteristics": { + "Package": "CohortCharacteristics", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "lifecycle", + "omopgenerics", + "purrr", + "rlang", + "snakecase", + "stringr", + "tidyr" + ], + "Hash": "6730f642c06d7e048cbb02084bdf1115" + }, + "CohortConstructor": { + "Package": "CohortConstructor", + "Version": "0.6.3", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "CodelistGenerator", + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "glue", + "omopgenerics", + "purrr", + "rlang", + "tibble", + "tidyr", + "utils" + ], + "Hash": "3d5ca3827a93b09a4062ba3306ee0a07" + }, + "CohortSurvival": { + "Package": "CohortSurvival", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "DBI", + "PatientProfiles", + "R", + "broom", + "cli", + "clock", + "dplyr", + "glue", + "omopgenerics", + "purrr", + "rlang", + "stats", + "stringr", + "survival", + "tibble", + "tidyr" + ], + "Hash": "bf9752e02370baeca96c8a976230f11b" + }, + "DBI": { + "Package": "DBI", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "dbfa2adb83f8063640982459e153f650" + }, + "DT": { + "Package": "DT", + "Version": "0.34.0", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "crosstalk", + "htmltools", + "htmlwidgets", + "jquerylib", + "jsonlite", + "magrittr", + "promises" + ], + "Hash": "a9d00f59f9c7e613dd4c3e0d27135a03" + }, + "DarwinShinyModules": { + "Package": "DarwinShinyModules", + "Version": "0.6.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteUsername": "darwin-eu", + "RemoteRepo": "DarwinShinyModules", + "RemoteRef": "main", + "RemoteSha": "b17492dc42528b2a9f00ae450c4360c411dbdd44", + "Requirements": [ + "DT", + "R", + "R6", + "checkmate", + "dplyr", + "flextable", + "ggplot2", + "gt", + "plotly", + "promises", + "purrr", + "reactable", + "rlang", + "shiny", + "shinyWidgets", + "stringr" + ], + "Hash": "1511c185ae01231e79989fb7b53e5637" + }, + "DrugExposureDiagnostics": { + "Package": "DrugExposureDiagnostics", + "Version": "1.1.9", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "CDMConnector", + "DrugUtilisation", + "R", + "R6", + "checkmate", + "dplyr", + "glue", + "magrittr", + "omopgenerics", + "rlang", + "tidyr", + "tidyselect" + ], + "Hash": "9762f087e03fe6a71ab28b4295f4e7a6" + }, + "DrugUtilisation": { + "Package": "DrugUtilisation", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "CodelistGenerator", + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "glue", + "lifecycle", + "omopgenerics", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Hash": "9eff43ad07834f6d2f6d3ece7df9fbff" + }, + "IncidencePrevalence": { + "Package": "IncidencePrevalence", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "CDMConnector", + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "glue", + "magrittr", + "omopgenerics", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Hash": "ddb15c3903afe4f6fcfe778d83d0f0db" + }, + "Matrix": { + "Package": "Matrix", + "Version": "1.7-0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "grid", + "lattice", + "methods", + "stats", + "utils" + ], + "Hash": "1920b2f11133b12350024297d8a4ff4a" + }, + "MeasurementDiagnostics": { + "Package": "MeasurementDiagnostics", + "Version": "0.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "CohortCharacteristics", + "CohortConstructor", + "DBI", + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "glue", + "omopgenerics", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Hash": "f65160242e48855c915e79944eac707d" + }, + "OmopSketch": { + "Package": "OmopSketch", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "CohortConstructor", + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "lifecycle", + "omopgenerics", + "purrr", + "rlang", + "stringr", + "tibble", + "tidyr" + ], + "Hash": "08e11b959fa5743c902e6b484e7bc0d8" + }, "ParallelLogger": { "Package": "ParallelLogger", "Version": "3.5.1", @@ -27,6 +334,51 @@ ], "Hash": "731821a8d5f403dd1ebcebfd6e215056" }, + "PatientProfiles": { + "Package": "PatientProfiles", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "clock", + "dplyr", + "lifecycle", + "omopgenerics", + "purrr", + "rlang", + "stringr", + "tidyr" + ], + "Hash": "ceba13a7a98e77de7a048c98bfb4504b" + }, + "PhenotypeR": { + "Package": "PhenotypeR", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "CodelistGenerator", + "CohortCharacteristics", + "CohortConstructor", + "DrugUtilisation", + "IncidencePrevalence", + "MeasurementDiagnostics", + "OmopSketch", + "PatientProfiles", + "R", + "cli", + "clock", + "dplyr", + "omopgenerics", + "purrr", + "readr", + "rlang", + "vctrs" + ], + "Hash": "7b1d6d84bb3d9efb9079afb40dc5a866" + }, "R6": { "Package": "R6", "Version": "2.6.1", @@ -37,6 +389,52 @@ ], "Hash": "d4335fe7207f1c01ab8c41762f5840d4" }, + "RColorBrewer": { + "Package": "RColorBrewer", + "Version": "1.1-3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "45f0398006e83a5b10b72a90663d8d8c" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.1.1-1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods", + "utils" + ], + "Hash": "8842cfd023a523ec9e011b9e4aab50ef" + }, + "S7": { + "Package": "S7", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "6a72e94a8c9be4ef719af3aa3628f2dc" + }, + "V8": { + "Package": "V8", + "Version": "8.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Rcpp", + "curl", + "jsonlite", + "utils" + ], + "Hash": "9fcf4128ded76196cf5f9e731d5e14ef" + }, "askpass": { "Package": "askpass", "Version": "1.2.1", @@ -57,6 +455,138 @@ ], "Hash": "e3e65442a2749b59692220f368f46c46" }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "5edb675b7baa6e9a0d86dd2c28de1676" + }, + "bigD": { + "Package": "bigD", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "ad123ab90aa2fc795512f61ff6939c4a" + }, + "bit": { + "Package": "bit", + "Version": "4.6.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "ebe86ffd194564abdc895d87742d5a29" + }, + "bit64": { + "Package": "bit64", + "Version": "4.8.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bit", + "graphics", + "methods", + "stats", + "utils" + ], + "Hash": "71778c0b60bbf439ac64e6a8be695917" + }, + "bitops": { + "Package": "bitops", + "Version": "1.0-9", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "d972ef991d58c19e6efa71b21f5e144b" + }, + "blob": { + "Package": "blob", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "methods", + "rlang", + "vctrs" + ], + "Hash": "1e0ae40898be928695fd90a80e816253" + }, + "brand.yml": { + "Package": "brand.yml", + "Version": "0.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "rlang", + "utils", + "yaml" + ], + "Hash": "e1bcd4c1abdbfef99c66199235be76eb" + }, + "broom": { + "Package": "broom", + "Version": "1.0.13", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "backports", + "cli", + "dplyr", + "generics", + "glue", + "lifecycle", + "purrr", + "rlang", + "stringr", + "tibble", + "tidyr" + ], + "Hash": "b91eb25282a25d746f84dbd340ace9db" + }, + "bslib": { + "Package": "bslib", + "Version": "0.11.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "base64enc", + "cachem", + "fastmap", + "grDevices", + "htmltools", + "jquerylib", + "jsonlite", + "lifecycle", + "memoise", + "mime", + "rlang", + "sass" + ], + "Hash": "82c0dcea3e967cfeaa263e920798a77e" + }, + "cachem": { + "Package": "cachem", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "fastmap", + "rlang" + ], + "Hash": "cd9a672193789068eb5a2aad65a0dedf" + }, "checkmate": { "Package": "checkmate", "Version": "2.3.4", @@ -90,6 +620,39 @@ ], "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" }, + "clock": { + "Package": "clock", + "Version": "0.7.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "cpp11", + "lifecycle", + "rlang", + "tzdb", + "vctrs" + ], + "Hash": "dce6a8b20db8fc2fe9967d85f770b475" + }, + "commonmark": { + "Package": "commonmark", + "Version": "2.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "8cba62334c1088d21689d353a7e87663" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.5.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "20ecb9105a3fb48a8390919abc3b7e90" + }, "crayon": { "Package": "crayon", "Version": "1.5.3", @@ -116,6 +679,19 @@ ], "Hash": "bda033f0a309540bb66d5e85872c6973" }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R6", + "htmltools", + "jsonlite", + "lazyeval" + ], + "Hash": "8b008bc619e0bbebb5646b3d37efdad1" + }, "curl": { "Package": "curl", "Version": "7.1.0", @@ -126,6 +702,45 @@ ], "Hash": "2e004ed19964915a8faf48a574439be9" }, + "data.table": { + "Package": "data.table", + "Version": "1.18.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "da9ddede68a6f6e5d3098c0ab81b6e1f" + }, + "dbplyr": { + "Package": "dbplyr", + "Version": "2.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "DBI", + "R", + "R6", + "blob", + "cli", + "dplyr", + "glue", + "lifecycle", + "magrittr", + "methods", + "pillar", + "purrr", + "rlang", + "tibble", + "tidyr", + "tidyselect", + "utils", + "vctrs", + "withr" + ], + "Hash": "ddbed6865865c509ea0b516faf83042b" + }, "desc": { "Package": "desc", "Version": "1.4.3", @@ -133,11 +748,137 @@ "Repository": "RSPM", "Requirements": [ "R", - "R6", - "cli", - "utils" + "R6", + "cli", + "utils" + ], + "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" + }, + "digest": { + "Package": "digest", + "Version": "0.6.39", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "d18028e978a88b2b16ef8d400cb49adf" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "generics", + "glue", + "lifecycle", + "magrittr", + "methods", + "pillar", + "rlang", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "d71f190466b9496cf8543c76641be5cf" + }, + "evaluate": { + "Package": "evaluate", + "Version": "1.0.5", + "Source": "Repository", + "Repository": "https://cloud.r-project.org", + "Requirements": [ + "R" + ], + "Hash": "94cf2c54237f6841cee68e3ba4ab5a14" + }, + "farver": { + "Package": "farver", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "680887028577f3fa2a81e410ed0d6e42" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" + }, + "flextable": { + "Package": "flextable", + "Version": "0.9.12", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "data.table", + "gdtools", + "grDevices", + "graphics", + "grid", + "htmltools", + "knitr", + "officer", + "ragg", + "rlang", + "rmarkdown", + "stats", + "utils", + "uuid", + "xml2" + ], + "Hash": "981c8f0fcb109d4720e217b9a291ccf1" + }, + "fontBitstreamVera": { + "Package": "fontBitstreamVera", + "Version": "0.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "f6068021eff4aba735a9b2353516636c" + }, + "fontLiberation": { + "Package": "fontLiberation", + "Version": "0.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "f918c5e723f86f409912104d5b7a71d6" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "htmltools", + "rlang" + ], + "Hash": "bd1297f9b5b1fc1372d19e2c4cd82215" + }, + "fontquiver": { + "Package": "fontquiver", + "Version": "0.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "fontBitstreamVera", + "fontLiberation" ], - "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" + "Hash": "fc0f4226379e451057d55419fd31761e" }, "fs": { "Package": "fs", @@ -150,6 +891,32 @@ ], "Hash": "09278623bca442bc53b0940ffa2f6d87" }, + "gdtools": { + "Package": "gdtools", + "Version": "0.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "Rcpp", + "fontquiver", + "htmltools", + "systemfonts", + "tools" + ], + "Hash": "bca589967c4b7360ced3c08c69a96787" + }, + "generics": { + "Package": "generics", + "Version": "0.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4b29bf698d0c7bdb9f1e4976e7ade41d" + }, "gert": { "Package": "gert", "Version": "2.3.1", @@ -165,6 +932,28 @@ ], "Hash": "8c696f49b5150a2541af009311c2fc83" }, + "ggplot2": { + "Package": "ggplot2", + "Version": "4.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "S7", + "cli", + "grDevices", + "grid", + "gtable", + "isoband", + "lifecycle", + "rlang", + "scales", + "stats", + "vctrs", + "withr" + ], + "Hash": "98520fe6b2745c466dca8e46aaa86242" + }, "gh": { "Package": "gh", "Version": "1.5.0", @@ -204,6 +993,52 @@ ], "Hash": "f8122473e9a49e00d0642f78235ca5e3" }, + "gt": { + "Package": "gt", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "bigD", + "bitops", + "cli", + "commonmark", + "dplyr", + "fs", + "glue", + "htmltools", + "htmlwidgets", + "juicyjuice", + "magrittr", + "markdown", + "reactable", + "rlang", + "sass", + "scales", + "tidyselect", + "vctrs", + "xml2" + ], + "Hash": "7153ac3985ed54f1a318590b73950329" + }, + "gtable": { + "Package": "gtable", + "Version": "0.3.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "grid", + "lifecycle", + "rlang", + "stats" + ], + "Hash": "de949855009e2d4d0e52a844e30617ae" + }, "here": { "Package": "here", "Version": "1.0.2", @@ -214,6 +1049,78 @@ ], "Hash": "e5114f2abe04168238181913a8572358" }, + "highr": { + "Package": "highr", + "Version": "0.12", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "xfun" + ], + "Hash": "2a2f862ade01a56dcbcd60944de11255" + }, + "hms": { + "Package": "hms", + "Version": "1.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "lifecycle", + "methods", + "pkgconfig", + "rlang", + "vctrs" + ], + "Hash": "2799ac720626cec589478b191e48b88b" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.9", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "digest", + "fastmap", + "grDevices", + "rlang", + "utils" + ], + "Hash": "102298e238c14eb830cc4b5edd23c3e8" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "htmltools", + "jsonlite", + "knitr", + "rmarkdown", + "yaml" + ], + "Hash": "04291cc45198225444a397606810ac37" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.17", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "Rcpp", + "later", + "promises", + "utils" + ], + "Hash": "4ff0297ad1cd631d57f0d30172972754" + }, "httr": { "Package": "httr", "Version": "1.4.8", @@ -257,6 +1164,30 @@ "Repository": "CRAN", "Hash": "6154ec2223172bce8162d4153cda21f7" }, + "isoband": { + "Package": "isoband", + "Version": "0.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "cpp11", + "grid", + "rlang", + "utils" + ], + "Hash": "0f9a864bbd7ce0232ad05cb76249cc1a" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools" + ], + "Hash": "5aab57a3bd297eee1c1d862735972182" + }, "jsonlite": { "Package": "jsonlite", "Version": "2.0.0", @@ -267,6 +1198,81 @@ ], "Hash": "b0776f526d36d8bd4a3344a88fe165c4" }, + "juicyjuice": { + "Package": "juicyjuice", + "Version": "0.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "V8" + ], + "Hash": "3bcd11943da509341838da9399e18bce" + }, + "knitr": { + "Package": "knitr", + "Version": "1.51", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "evaluate", + "highr", + "methods", + "tools", + "xfun", + "yaml" + ], + "Hash": "27682babb50f03b6eb7939ea69ec79ca" + }, + "labeling": { + "Package": "labeling", + "Version": "0.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "graphics", + "stats" + ], + "Hash": "b64ec208ac5bc1852b285f665d6368b3" + }, + "later": { + "Package": "later", + "Version": "1.4.8", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "Rcpp", + "rlang" + ], + "Hash": "824c180e69b9be79ab96a985e233c470" + }, + "lattice": { + "Package": "lattice", + "Version": "0.22-6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "grid", + "stats", + "utils" + ], + "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "rlang" + ], + "Hash": "2757e46c2633dd5854f62615df70d0d7" + }, "lifecycle": { "Package": "lifecycle", "Version": "1.0.5", @@ -279,6 +1285,19 @@ ], "Hash": "36dbfe4fba6c064db50a671a90297c85" }, + "litedown": { + "Package": "litedown", + "Version": "0.9", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "commonmark", + "utils", + "xfun" + ], + "Hash": "6b9435273e6506fbafa5909adf4abb88" + }, "magrittr": { "Package": "magrittr", "Version": "2.0.5", @@ -289,6 +1308,30 @@ ], "Hash": "665e77ab6e5f37a7913226d40b324e37" }, + "markdown": { + "Package": "markdown", + "Version": "2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "litedown", + "utils", + "xfun" + ], + "Hash": "b4349847250b103bbbb8bc6819c4fbca" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cachem", + "rlang" + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" + }, "memuse": { "Package": "memuse", "Version": "4.2-3", @@ -311,15 +1354,170 @@ ], "Hash": "0ec19f34c72fab674d8f2b4b1c6410e1" }, + "officer": { + "Package": "officer", + "Version": "0.7.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R6", + "cli", + "dplyr", + "grDevices", + "graphics", + "openssl", + "ragg", + "stats", + "tidyr", + "utils", + "uuid", + "xml2", + "zip" + ], + "Hash": "11d3d171bd3d2442d9ecb8136b42749d" + }, + "omopgenerics": { + "Package": "omopgenerics", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "dbplyr", + "dplyr", + "generics", + "glue", + "lifecycle", + "methods", + "purrr", + "rlang", + "snakecase", + "stringi", + "stringr", + "tidyr", + "vctrs" + ], + "Hash": "85259a13789943d677dbb852fab30abc" + }, "openssl": { "Package": "openssl", "Version": "2.4.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ - "askpass" + "askpass" + ], + "Hash": "865a99ecdce7c318efa3a467b7614ec3" + }, + "otel": { + "Package": "otel", + "Version": "0.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "627d6993db1043703c0b084fa432f21f" + }, + "pillar": { + "Package": "pillar", + "Version": "1.11.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "glue", + "lifecycle", + "rlang", + "utf8", + "utils", + "vctrs" + ], + "Hash": "1395e64f2689ffd503657778e810cee2" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" + }, + "plotly": { + "Package": "plotly", + "Version": "4.12.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "RColorBrewer", + "base64enc", + "crosstalk", + "data.table", + "digest", + "dplyr", + "ggplot2", + "htmltools", + "htmlwidgets", + "httr", + "jsonlite", + "lazyeval", + "magrittr", + "promises", + "purrr", + "rlang", + "scales", + "tibble", + "tidyr", + "tools", + "vctrs", + "viridisLite" + ], + "Hash": "282f8b208bc767c67a370b47bff6ada7" + }, + "prettyunits": { + "Package": "prettyunits", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" + }, + "progress": { + "Package": "progress", + "Version": "1.2.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "crayon", + "hms", + "prettyunits" + ], + "Hash": "f4625e061cb2865f111b47ff163a5ca6" + }, + "promises": { + "Package": "promises", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "fastmap", + "later", + "lifecycle", + "magrittr", + "otel", + "rlang" ], - "Hash": "865a99ecdce7c318efa3a467b7614ec3" + "Hash": "62cb899ed5fff70d4e918ec1b762bf7c" }, "purrr": { "Package": "purrr", @@ -336,6 +1534,17 @@ ], "Hash": "0a35605539b085a4828ec55ad973fe60" }, + "ragg": { + "Package": "ragg", + "Version": "1.5.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "systemfonts", + "textshaping" + ], + "Hash": "c06b460d55dd27458977e417e8ff02c7" + }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.4", @@ -346,6 +1555,56 @@ ], "Hash": "f146a5bfc94db048309712535d4d0aee" }, + "reactR": { + "Package": "reactR", + "Version": "0.6.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools" + ], + "Hash": "b8e3d93f508045812f47136c7c44c251" + }, + "reactable": { + "Package": "reactable", + "Version": "0.4.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "digest", + "htmltools", + "htmlwidgets", + "jsonlite", + "reactR" + ], + "Hash": "abfd6fa3794ff78116123d95845e0c32" + }, + "readr": { + "Package": "readr", + "Version": "2.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "clipr", + "cpp11", + "crayon", + "glue", + "hms", + "lifecycle", + "methods", + "rlang", + "tibble", + "tzdb", + "utils", + "vroom", + "withr" + ], + "Hash": "4425ad9e28b8e3351184ca2739995b87" + }, "renv": { "Package": "renv", "Version": "1.0.11", @@ -367,6 +1626,29 @@ ], "Hash": "f88151fb9ca15e72dc351deb1328716e" }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.31", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "evaluate", + "fontawesome", + "htmltools", + "jquerylib", + "jsonlite", + "knitr", + "methods", + "tinytex", + "tools", + "utils", + "xfun", + "yaml" + ], + "Hash": "f34039d57d861d2869cbf9be813ed08e" + }, "rprojroot": { "Package": "rprojroot", "Version": "2.1.1", @@ -384,6 +1666,102 @@ "Repository": "CRAN", "Hash": "d6e1ecf8e39b6d53c8acde372b2f92d1" }, + "sass": { + "Package": "sass", + "Version": "0.4.10", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "fs", + "htmltools", + "rappdirs", + "rlang" + ], + "Hash": "3fb78d066fb92299b1d13f6a7c9a90a8" + }, + "scales": { + "Package": "scales", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "RColorBrewer", + "cli", + "farver", + "glue", + "labeling", + "lifecycle", + "rlang", + "viridisLite" + ], + "Hash": "c5bba8f0d1df8c4b9538a40570798d9b" + }, + "shiny": { + "Package": "shiny", + "Version": "1.13.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "bslib", + "cachem", + "cli", + "commonmark", + "fastmap", + "fontawesome", + "glue", + "grDevices", + "htmltools", + "httpuv", + "jsonlite", + "later", + "lifecycle", + "methods", + "mime", + "otel", + "promises", + "rlang", + "sourcetools", + "tools", + "utils", + "withr", + "xtable" + ], + "Hash": "3ae8521a5a4576fc4b78d00d401f22f9" + }, + "shinyWidgets": { + "Package": "shinyWidgets", + "Version": "0.9.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "bslib", + "grDevices", + "htmltools", + "jsonlite", + "rlang", + "sass", + "shiny" + ], + "Hash": "e8f592e8c0a636fef0c253c8196d78c7" + }, + "snakecase": { + "Package": "snakecase", + "Version": "0.11.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "stringi", + "stringr" + ], + "Hash": "58767e44739b76965332e8a4fe3f91f1" + }, "snow": { "Package": "snow", "Version": "0.4-4", @@ -395,6 +1773,16 @@ ], "Hash": "40b74690debd20c57d93d8c246b305d4" }, + "sourcetools": { + "Package": "sourcetools", + "Version": "0.1.7-2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "e716e13bfbfe8acb6182a05f4b367772" + }, "stringi": { "Package": "stringi", "Version": "1.8.7", @@ -425,6 +1813,22 @@ ], "Hash": "d47392652eedc68bf916657347ff2526" }, + "survival": { + "Package": "survival", + "Version": "3.8-6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Matrix", + "R", + "graphics", + "methods", + "splines", + "stats", + "utils" + ], + "Hash": "663dbb3b41554b751ae90fe58f72decf" + }, "sys": { "Package": "sys", "Version": "3.4.3", @@ -432,6 +1836,118 @@ "Repository": "CRAN", "Hash": "de342ebfebdbf40477d0758d05426646" }, + "systemfonts": { + "Package": "systemfonts", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "cpp11", + "grid", + "jsonlite", + "lifecycle", + "tools", + "utils" + ], + "Hash": "1f930828d6590af5da47b3ab4fe161e6" + }, + "textshaping": { + "Package": "textshaping", + "Version": "1.0.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cpp11", + "lifecycle", + "stats", + "stringi", + "systemfonts", + "utils" + ], + "Hash": "addb750a886a2ac415dea6f8068867de" + }, + "tibble": { + "Package": "tibble", + "Version": "3.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "lifecycle", + "magrittr", + "methods", + "pillar", + "pkgconfig", + "rlang", + "utils", + "vctrs" + ], + "Hash": "c55df870972551cac674b50cadb2d51f" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "cpp11", + "dplyr", + "glue", + "lifecycle", + "magrittr", + "purrr", + "rlang", + "stringr", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "a4fa2f5876396f04814cb9d8d9ab89e9" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang", + "vctrs", + "withr" + ], + "Hash": "829f27b9c4919c16b593794a6344d6c0" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.59", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "xfun" + ], + "Hash": "2688c3e240d4ccc7d6aae804f7fdf322" + }, + "tzdb": { + "Package": "tzdb", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "09e3961e87b7bafa4a9340bbb34aeda8" + }, "usethis": { "Package": "usethis", "Version": "3.2.1", @@ -464,6 +1980,26 @@ ], "Hash": "caa93b7eada0b69e299f61db5984faa7" }, + "utf8": { + "Package": "utf8", + "Version": "1.2.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "d526d558be176e9ceb68c3d1e83479b7" + }, + "uuid": { + "Package": "uuid", + "Version": "1.2-2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "528fc9e90d70a6a115e21164f37b2c64" + }, "vctrs": { "Package": "vctrs", "Version": "0.7.3", @@ -478,6 +2014,63 @@ ], "Hash": "2dcde2d30d3ad67bf1d3a37177457b87" }, + "viridisLite": { + "Package": "viridisLite", + "Version": "0.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "9380d36888b72faf5ae6c22b44703867" + }, + "visOmopResults": { + "Package": "visOmopResults", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "brand.yml", + "cli", + "dplyr", + "generics", + "glue", + "omopgenerics", + "purrr", + "rlang", + "stringr", + "systemfonts", + "tidyr" + ], + "Hash": "fade996417c3bc001d6bbcda1c788180" + }, + "vroom": { + "Package": "vroom", + "Version": "1.7.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bit64", + "cli", + "cpp11", + "crayon", + "glue", + "hms", + "lifecycle", + "methods", + "progress", + "rlang", + "stats", + "tibble", + "tidyselect", + "tzdb", + "vctrs", + "withr" + ], + "Hash": "1e9494eda38f3418f71474363293da2a" + }, "whisker": { "Package": "whisker", "Version": "0.4.1", @@ -497,6 +2090,19 @@ ], "Hash": "cc2d62c76458d425210d1eb1478b30b4" }, + "xfun": { + "Package": "xfun", + "Version": "0.57", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "stats", + "tools" + ], + "Hash": "476c8908ae56baf122e69bb2c2d9f631" + }, "xml2": { "Package": "xml2", "Version": "1.5.2", @@ -510,6 +2116,19 @@ ], "Hash": "d8e98d08a4a4d03f5052acc6e6204b99" }, + "xtable": { + "Package": "xtable", + "Version": "1.8-8", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods", + "stats", + "utils" + ], + "Hash": "93b19c064862d315a828c7170d806453" + }, "yaml": { "Package": "yaml", "Version": "2.3.12", diff --git a/tests/testthat/test-insertStructure.R b/tests/testthat/test-insertStructure.R index 9769adb..a4b46b9 100644 --- a/tests/testthat/test-insertStructure.R +++ b/tests/testthat/test-insertStructure.R @@ -1,19 +1,18 @@ test_that("insertStructure works", { - test_pkg_path <- testthat::test_path("testPackage") - dir.create( - file.path( - test_pkg_path, - "renv" - ), - recursive = TRUE - ) + test_pkg_path <- withr::local_tempdir() + usethis::create_package(test_pkg_path, open = FALSE) + renv::init(project = test_pkg_path, bare = TRUE) - insertStructure(path = test_pkg_path, n_obj = 3) + usethis::with_project(test_pkg_path, { + insertStructure( + path = ".", + n_obj = 3) + }) # Expect installed packages expect_true(dir.exists(file.path(test_pkg_path, "renv"))) - expect_true(file.exists(file.path(test_pkg_path, "renv.lock"))) + # expect_true(file.exists(file.path(test_pkg_path, "renv.lock"))) installed_pkgs <- c( "omopgenerics", "PhenotypeR", @@ -59,16 +58,8 @@ test_that("insertStructure works", { } } - files <- list.files( - test_pkg_path, - full.names = TRUE, - all.files = TRUE, - no.. = TRUE - ) - to_remove <- files[!basename(files) %in% c("renv.lock", "DESCRIPTION")] - unlink( - to_remove, + test_pkg_path, recursive = TRUE ) diff --git a/tests/testthat/testPackage/DESCRIPTION b/tests/testthat/testPackage/DESCRIPTION deleted file mode 100644 index d118ff4..0000000 --- a/tests/testthat/testPackage/DESCRIPTION +++ /dev/null @@ -1,24 +0,0 @@ -Package: testPackage -Title: What the Package Does (One Line, Title Case) -Version: 0.0.0.9000 -Authors@R: - person("First", "Last", , "first.last@example.com", role = c("aut", "cre")) -Description: What the package does (one paragraph). -License: Apache License (>= 2) -Encoding: UTF-8 -Roxygen: list(markdown = TRUE) -RoxygenNote: 8.0.0 -Imports: - CohortCharacteristics, - CohortConstructor, - CohortSurvival, - DarwinShinyModules, - DrugExposureDiagnostics, - DrugUtilisation, - IncidencePrevalence, - omopgenerics, - PhenotypeR, - visOmopResults -Suggests: - testthat (>= 3.0.0) -Config/testthat/edition: 3 \ No newline at end of file diff --git a/tests/testthat/testPackage/renv.lock b/tests/testthat/testPackage/renv.lock deleted file mode 100644 index 2cfc0d9..0000000 --- a/tests/testthat/testPackage/renv.lock +++ /dev/null @@ -1,2140 +0,0 @@ -{ - "R": { - "Version": "4.4.1", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://packagemanager.posit.co/cran/latest" - } - ] - }, - "Packages": { - "CDMConnector": { - "Package": "CDMConnector", - "Version": "2.6.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "checkmate", - "cli", - "dbplyr", - "dplyr", - "generics", - "glue", - "httr2", - "jsonlite", - "lifecycle", - "methods", - "omopgenerics", - "purrr", - "readr", - "rlang", - "stringi", - "stringr", - "tidyr", - "tidyselect", - "withr" - ], - "Hash": "20f9abc5909eb8946c1fc63ed4509305" - }, - "CodelistGenerator": { - "Package": "CodelistGenerator", - "Version": "4.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "DBI", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "jsonlite", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringi", - "stringr", - "tidyr", - "vctrs" - ], - "Hash": "39a51212e117c844a0b755e72e49a2e2" - }, - "CohortCharacteristics": { - "Package": "CohortCharacteristics", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "snakecase", - "stringr", - "tidyr" - ], - "Hash": "6730f642c06d7e048cbb02084bdf1115" - }, - "CohortConstructor": { - "Package": "CohortConstructor", - "Version": "0.6.3", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "CodelistGenerator", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "omopgenerics", - "purrr", - "rlang", - "tibble", - "tidyr", - "utils" - ], - "Hash": "3d5ca3827a93b09a4062ba3306ee0a07" - }, - "CohortSurvival": { - "Package": "CohortSurvival", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "PatientProfiles", - "R", - "broom", - "cli", - "clock", - "dplyr", - "glue", - "omopgenerics", - "purrr", - "rlang", - "stats", - "stringr", - "survival", - "tibble", - "tidyr" - ], - "Hash": "bf9752e02370baeca96c8a976230f11b" - }, - "DBI": { - "Package": "DBI", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "dbfa2adb83f8063640982459e153f650" - }, - "DT": { - "Package": "DT", - "Version": "0.34.0", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "jsonlite", - "magrittr", - "promises" - ], - "Hash": "a9d00f59f9c7e613dd4c3e0d27135a03" - }, - "DarwinShinyModules": { - "Package": "DarwinShinyModules", - "Version": "0.6.0", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "darwin-eu", - "RemoteRepo": "DarwinShinyModules", - "RemoteRef": "main", - "RemoteSha": "b17492dc42528b2a9f00ae450c4360c411dbdd44", - "Requirements": [ - "DT", - "R", - "R6", - "checkmate", - "dplyr", - "flextable", - "ggplot2", - "gt", - "plotly", - "promises", - "purrr", - "reactable", - "rlang", - "shiny", - "shinyWidgets", - "stringr" - ], - "Hash": "1511c185ae01231e79989fb7b53e5637" - }, - "DrugExposureDiagnostics": { - "Package": "DrugExposureDiagnostics", - "Version": "1.1.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CDMConnector", - "DrugUtilisation", - "R", - "R6", - "checkmate", - "dplyr", - "glue", - "magrittr", - "omopgenerics", - "rlang", - "tidyr", - "tidyselect" - ], - "Hash": "9762f087e03fe6a71ab28b4295f4e7a6" - }, - "DrugUtilisation": { - "Package": "DrugUtilisation", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CodelistGenerator", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "9eff43ad07834f6d2f6d3ece7df9fbff" - }, - "IncidencePrevalence": { - "Package": "IncidencePrevalence", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "CDMConnector", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "magrittr", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "ddb15c3903afe4f6fcfe778d83d0f0db" - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.7-0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "lattice", - "methods", - "stats", - "utils" - ], - "Hash": "1920b2f11133b12350024297d8a4ff4a" - }, - "MeasurementDiagnostics": { - "Package": "MeasurementDiagnostics", - "Version": "0.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "CohortCharacteristics", - "CohortConstructor", - "DBI", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "f65160242e48855c915e79944eac707d" - }, - "OmopSketch": { - "Package": "OmopSketch", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CohortConstructor", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyr" - ], - "Hash": "08e11b959fa5743c902e6b484e7bc0d8" - }, - "ParallelLogger": { - "Package": "ParallelLogger", - "Version": "3.5.1", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R", - "jsonlite", - "memuse", - "methods", - "parallel", - "rstudioapi", - "snow", - "utils", - "xml2" - ], - "Hash": "731821a8d5f403dd1ebcebfd6e215056" - }, - "PatientProfiles": { - "Package": "PatientProfiles", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "clock", - "dplyr", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "ceba13a7a98e77de7a048c98bfb4504b" - }, - "PhenotypeR": { - "Package": "PhenotypeR", - "Version": "0.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CodelistGenerator", - "CohortCharacteristics", - "CohortConstructor", - "DrugUtilisation", - "IncidencePrevalence", - "MeasurementDiagnostics", - "OmopSketch", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "omopgenerics", - "purrr", - "readr", - "rlang", - "vctrs" - ], - "Hash": "7b1d6d84bb3d9efb9079afb40dc5a866" - }, - "R6": { - "Package": "R6", - "Version": "2.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "d4335fe7207f1c01ab8c41762f5840d4" - }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "45f0398006e83a5b10b72a90663d8d8c" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.1.1-1.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods", - "utils" - ], - "Hash": "8842cfd023a523ec9e011b9e4aab50ef" - }, - "S7": { - "Package": "S7", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "6a72e94a8c9be4ef719af3aa3628f2dc" - }, - "V8": { - "Package": "V8", - "Version": "8.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Rcpp", - "curl", - "jsonlite", - "utils" - ], - "Hash": "9fcf4128ded76196cf5f9e731d5e14ef" - }, - "askpass": { - "Package": "askpass", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "sys" - ], - "Hash": "c39f4155b3ceb1a9a2799d700fbd4b6a" - }, - "backports": { - "Package": "backports", - "Version": "1.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "e3e65442a2749b59692220f368f46c46" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5edb675b7baa6e9a0d86dd2c28de1676" - }, - "bigD": { - "Package": "bigD", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "ad123ab90aa2fc795512f61ff6939c4a" - }, - "bit": { - "Package": "bit", - "Version": "4.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "ebe86ffd194564abdc895d87742d5a29" - }, - "bit64": { - "Package": "bit64", - "Version": "4.8.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit", - "graphics", - "methods", - "stats", - "utils" - ], - "Hash": "71778c0b60bbf439ac64e6a8be695917" - }, - "bitops": { - "Package": "bitops", - "Version": "1.0-9", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "d972ef991d58c19e6efa71b21f5e144b" - }, - "blob": { - "Package": "blob", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods", - "rlang", - "vctrs" - ], - "Hash": "1e0ae40898be928695fd90a80e816253" - }, - "brand.yml": { - "Package": "brand.yml", - "Version": "0.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "rlang", - "utils", - "yaml" - ], - "Hash": "e1bcd4c1abdbfef99c66199235be76eb" - }, - "broom": { - "Package": "broom", - "Version": "1.0.13", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "backports", - "cli", - "dplyr", - "generics", - "glue", - "lifecycle", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyr" - ], - "Hash": "b91eb25282a25d746f84dbd340ace9db" - }, - "bslib": { - "Package": "bslib", - "Version": "0.11.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "base64enc", - "cachem", - "fastmap", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "lifecycle", - "memoise", - "mime", - "rlang", - "sass" - ], - "Hash": "82c0dcea3e967cfeaa263e920798a77e" - }, - "cachem": { - "Package": "cachem", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "cd9a672193789068eb5a2aad65a0dedf" - }, - "checkmate": { - "Package": "checkmate", - "Version": "2.3.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "backports", - "utils" - ], - "Hash": "86cbe221fc19b56242f6c3eb0d4c5ab5" - }, - "cli": { - "Package": "cli", - "Version": "3.6.6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "a73d822b669d443ff8de6928f9c49850" - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" - }, - "clock": { - "Package": "clock", - "Version": "0.7.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "cpp11", - "lifecycle", - "rlang", - "tzdb", - "vctrs" - ], - "Hash": "dce6a8b20db8fc2fe9967d85f770b475" - }, - "commonmark": { - "Package": "commonmark", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "8cba62334c1088d21689d353a7e87663" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.5.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "20ecb9105a3fb48a8390919abc3b7e90" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "859d96e65ef198fd43e82b9628d593ef" - }, - "credentials": { - "Package": "credentials", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "askpass", - "curl", - "jsonlite", - "openssl", - "sys" - ], - "Hash": "bda033f0a309540bb66d5e85872c6973" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "8b008bc619e0bbebb5646b3d37efdad1" - }, - "curl": { - "Package": "curl", - "Version": "7.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "2e004ed19964915a8faf48a574439be9" - }, - "data.table": { - "Package": "data.table", - "Version": "1.18.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "da9ddede68a6f6e5d3098c0ab81b6e1f" - }, - "dbplyr": { - "Package": "dbplyr", - "Version": "2.6.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "R6", - "blob", - "cli", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "purrr", - "rlang", - "tibble", - "tidyr", - "tidyselect", - "utils", - "vctrs", - "withr" - ], - "Hash": "ddbed6865865c509ea0b516faf83042b" - }, - "desc": { - "Package": "desc", - "Version": "1.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "utils" - ], - "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" - }, - "digest": { - "Package": "digest", - "Version": "0.6.39", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "d18028e978a88b2b16ef8d400cb49adf" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "d71f190466b9496cf8543c76641be5cf" - }, - "evaluate": { - "Package": "evaluate", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R" - ], - "Hash": "94cf2c54237f6841cee68e3ba4ab5a14" - }, - "farver": { - "Package": "farver", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "680887028577f3fa2a81e410ed0d6e42" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" - }, - "flextable": { - "Package": "flextable", - "Version": "0.9.12", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "data.table", - "gdtools", - "grDevices", - "graphics", - "grid", - "htmltools", - "knitr", - "officer", - "ragg", - "rlang", - "rmarkdown", - "stats", - "utils", - "uuid", - "xml2" - ], - "Hash": "981c8f0fcb109d4720e217b9a291ccf1" - }, - "fontBitstreamVera": { - "Package": "fontBitstreamVera", - "Version": "0.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "f6068021eff4aba735a9b2353516636c" - }, - "fontLiberation": { - "Package": "fontLiberation", - "Version": "0.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "f918c5e723f86f409912104d5b7a71d6" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "bd1297f9b5b1fc1372d19e2c4cd82215" - }, - "fontquiver": { - "Package": "fontquiver", - "Version": "0.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "fontBitstreamVera", - "fontLiberation" - ], - "Hash": "fc0f4226379e451057d55419fd31761e" - }, - "fs": { - "Package": "fs", - "Version": "2.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "09278623bca442bc53b0940ffa2f6d87" - }, - "gdtools": { - "Package": "gdtools", - "Version": "0.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "fontquiver", - "htmltools", - "systemfonts", - "tools" - ], - "Hash": "bca589967c4b7360ced3c08c69a96787" - }, - "generics": { - "Package": "generics", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4b29bf698d0c7bdb9f1e4976e7ade41d" - }, - "gert": { - "Package": "gert", - "Version": "2.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "askpass", - "credentials", - "openssl", - "rstudioapi", - "sys", - "zip" - ], - "Hash": "8c696f49b5150a2541af009311c2fc83" - }, - "ggplot2": { - "Package": "ggplot2", - "Version": "4.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "S7", - "cli", - "grDevices", - "grid", - "gtable", - "isoband", - "lifecycle", - "rlang", - "scales", - "stats", - "vctrs", - "withr" - ], - "Hash": "98520fe6b2745c466dca8e46aaa86242" - }, - "gh": { - "Package": "gh", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "gitcreds", - "glue", - "httr2", - "ini", - "jsonlite", - "lifecycle", - "rlang" - ], - "Hash": "d92acb7afad09df6839e4e456e538d03" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" - }, - "glue": { - "Package": "glue", - "Version": "1.8.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "f8122473e9a49e00d0642f78235ca5e3" - }, - "gt": { - "Package": "gt", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "bigD", - "bitops", - "cli", - "commonmark", - "dplyr", - "fs", - "glue", - "htmltools", - "htmlwidgets", - "juicyjuice", - "magrittr", - "markdown", - "reactable", - "rlang", - "sass", - "scales", - "tidyselect", - "vctrs", - "xml2" - ], - "Hash": "7153ac3985ed54f1a318590b73950329" - }, - "gtable": { - "Package": "gtable", - "Version": "0.3.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "grid", - "lifecycle", - "rlang", - "stats" - ], - "Hash": "de949855009e2d4d0e52a844e30617ae" - }, - "highr": { - "Package": "highr", - "Version": "0.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "2a2f862ade01a56dcbcd60944de11255" - }, - "hms": { - "Package": "hms", - "Version": "1.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "2799ac720626cec589478b191e48b88b" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "digest", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "102298e238c14eb830cc4b5edd23c3e8" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "knitr", - "rmarkdown", - "yaml" - ], - "Hash": "04291cc45198225444a397606810ac37" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.17", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "Rcpp", - "later", - "promises", - "utils" - ], - "Hash": "4ff0297ad1cd631d57f0d30172972754" - }, - "httr": { - "Package": "httr", - "Version": "1.4.8", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ], - "Hash": "10bcae7793493db63a6872096132e10c" - }, - "httr2": { - "Package": "httr2", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "curl", - "glue", - "lifecycle", - "magrittr", - "openssl", - "rappdirs", - "rlang", - "vctrs", - "withr" - ], - "Hash": "c20959a9442c0e3adb1e8d3809c5d1f7" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6154ec2223172bce8162d4153cda21f7" - }, - "isoband": { - "Package": "isoband", - "Version": "0.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "cpp11", - "grid", - "rlang", - "utils" - ], - "Hash": "0f9a864bbd7ce0232ad05cb76249cc1a" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods" - ], - "Hash": "b0776f526d36d8bd4a3344a88fe165c4" - }, - "juicyjuice": { - "Package": "juicyjuice", - "Version": "0.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "V8" - ], - "Hash": "3bcd11943da509341838da9399e18bce" - }, - "knitr": { - "Package": "knitr", - "Version": "1.51", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "tools", - "xfun", - "yaml" - ], - "Hash": "27682babb50f03b6eb7939ea69ec79ca" - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "graphics", - "stats" - ], - "Hash": "b64ec208ac5bc1852b285f665d6368b3" - }, - "later": { - "Package": "later", - "Version": "1.4.8", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "Rcpp", - "rlang" - ], - "Hash": "824c180e69b9be79ab96a985e233c470" - }, - "lattice": { - "Package": "lattice", - "Version": "0.22-6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "stats", - "utils" - ], - "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "2757e46c2633dd5854f62615df70d0d7" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "rlang" - ], - "Hash": "36dbfe4fba6c064db50a671a90297c85" - }, - "litedown": { - "Package": "litedown", - "Version": "0.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "commonmark", - "utils", - "xfun" - ], - "Hash": "6b9435273e6506fbafa5909adf4abb88" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "665e77ab6e5f37a7913226d40b324e37" - }, - "markdown": { - "Package": "markdown", - "Version": "2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "litedown", - "utils", - "xfun" - ], - "Hash": "b4349847250b103bbbb8bc6819c4fbca" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, - "memuse": { - "Package": "memuse", - "Version": "4.2-3", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R", - "methods", - "utils" - ], - "Hash": "5cfd074e79d5443c523360bbe203d904" - }, - "mime": { - "Package": "mime", - "Version": "0.13", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tools" - ], - "Hash": "0ec19f34c72fab674d8f2b4b1c6410e1" - }, - "officer": { - "Package": "officer", - "Version": "0.7.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "cli", - "dplyr", - "grDevices", - "graphics", - "openssl", - "ragg", - "stats", - "tidyr", - "utils", - "uuid", - "xml2", - "zip" - ], - "Hash": "11d3d171bd3d2442d9ecb8136b42749d" - }, - "omopgenerics": { - "Package": "omopgenerics", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "dbplyr", - "dplyr", - "generics", - "glue", - "lifecycle", - "methods", - "purrr", - "rlang", - "snakecase", - "stringi", - "stringr", - "tidyr", - "vctrs" - ], - "Hash": "85259a13789943d677dbb852fab30abc" - }, - "openssl": { - "Package": "openssl", - "Version": "2.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "askpass" - ], - "Hash": "865a99ecdce7c318efa3a467b7614ec3" - }, - "otel": { - "Package": "otel", - "Version": "0.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "627d6993db1043703c0b084fa432f21f" - }, - "pillar": { - "Package": "pillar", - "Version": "1.11.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "1395e64f2689ffd503657778e810cee2" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "plotly": { - "Package": "plotly", - "Version": "4.12.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "RColorBrewer", - "base64enc", - "crosstalk", - "data.table", - "digest", - "dplyr", - "ggplot2", - "htmltools", - "htmlwidgets", - "httr", - "jsonlite", - "lazyeval", - "magrittr", - "promises", - "purrr", - "rlang", - "scales", - "tibble", - "tidyr", - "tools", - "vctrs", - "viridisLite" - ], - "Hash": "282f8b208bc767c67a370b47bff6ada7" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" - }, - "progress": { - "Package": "progress", - "Version": "1.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "f4625e061cb2865f111b47ff163a5ca6" - }, - "promises": { - "Package": "promises", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "fastmap", - "later", - "lifecycle", - "magrittr", - "otel", - "rlang" - ], - "Hash": "62cb899ed5fff70d4e918ec1b762bf7c" - }, - "purrr": { - "Package": "purrr", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "lifecycle", - "magrittr", - "rlang", - "vctrs" - ], - "Hash": "0a35605539b085a4828ec55ad973fe60" - }, - "ragg": { - "Package": "ragg", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "systemfonts", - "textshaping" - ], - "Hash": "c06b460d55dd27458977e417e8ff02c7" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "f146a5bfc94db048309712535d4d0aee" - }, - "reactR": { - "Package": "reactR", - "Version": "0.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "b8e3d93f508045812f47136c7c44c251" - }, - "reactable": { - "Package": "reactable", - "Version": "0.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "digest", - "htmltools", - "htmlwidgets", - "jsonlite", - "reactR" - ], - "Hash": "abfd6fa3794ff78116123d95845e0c32" - }, - "readr": { - "Package": "readr", - "Version": "2.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "clipr", - "cpp11", - "crayon", - "glue", - "hms", - "lifecycle", - "methods", - "rlang", - "tibble", - "tzdb", - "utils", - "vroom", - "withr" - ], - "Hash": "4425ad9e28b8e3351184ca2739995b87" - }, - "renv": { - "Package": "renv", - "Version": "1.0.11", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "47623f66b4e80b3b0587bc5d7b309888" - }, - "rlang": { - "Package": "rlang", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "f88151fb9ca15e72dc351deb1328716e" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.31", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bslib", - "evaluate", - "fontawesome", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "f34039d57d861d2869cbf9be813ed08e" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.1.1", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R" - ], - "Hash": "b2453de2d29aa646afe4781defdc7903" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.18.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d6e1ecf8e39b6d53c8acde372b2f92d1" - }, - "sass": { - "Package": "sass", - "Version": "0.4.10", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "3fb78d066fb92299b1d13f6a7c9a90a8" - }, - "scales": { - "Package": "scales", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "RColorBrewer", - "cli", - "farver", - "glue", - "labeling", - "lifecycle", - "rlang", - "viridisLite" - ], - "Hash": "c5bba8f0d1df8c4b9538a40570798d9b" - }, - "shiny": { - "Package": "shiny", - "Version": "1.13.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "bslib", - "cachem", - "cli", - "commonmark", - "fastmap", - "fontawesome", - "glue", - "grDevices", - "htmltools", - "httpuv", - "jsonlite", - "later", - "lifecycle", - "methods", - "mime", - "otel", - "promises", - "rlang", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Hash": "3ae8521a5a4576fc4b78d00d401f22f9" - }, - "shinyWidgets": { - "Package": "shinyWidgets", - "Version": "0.9.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "grDevices", - "htmltools", - "jsonlite", - "rlang", - "sass", - "shiny" - ], - "Hash": "e8f592e8c0a636fef0c253c8196d78c7" - }, - "snakecase": { - "Package": "snakecase", - "Version": "0.11.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stringi", - "stringr" - ], - "Hash": "58767e44739b76965332e8a4fe3f91f1" - }, - "snow": { - "Package": "snow", - "Version": "0.4-4", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R", - "utils" - ], - "Hash": "40b74690debd20c57d93d8c246b305d4" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "e716e13bfbfe8acb6182a05f4b367772" - }, - "stringi": { - "Package": "stringi", - "Version": "1.8.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "2b56088e23bdd58f89aebf43a0913457" - }, - "stringr": { - "Package": "stringr", - "Version": "1.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "stringi", - "vctrs" - ], - "Hash": "d47392652eedc68bf916657347ff2526" - }, - "survival": { - "Package": "survival", - "Version": "3.8-6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "graphics", - "methods", - "splines", - "stats", - "utils" - ], - "Hash": "663dbb3b41554b751ae90fe58f72decf" - }, - "sys": { - "Package": "sys", - "Version": "3.4.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "de342ebfebdbf40477d0758d05426646" - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "cpp11", - "grid", - "jsonlite", - "lifecycle", - "tools", - "utils" - ], - "Hash": "1f930828d6590af5da47b3ab4fe161e6" - }, - "textshaping": { - "Package": "textshaping", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cpp11", - "lifecycle", - "stats", - "stringi", - "systemfonts", - "utils" - ], - "Hash": "addb750a886a2ac415dea6f8068867de" - }, - "tibble": { - "Package": "tibble", - "Version": "3.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "c55df870972551cac674b50cadb2d51f" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "cpp11", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "a4fa2f5876396f04814cb9d8d9ab89e9" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "829f27b9c4919c16b593794a6344d6c0" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.59", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "xfun" - ], - "Hash": "2688c3e240d4ccc7d6aae804f7fdf322" - }, - "tzdb": { - "Package": "tzdb", - "Version": "0.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "09e3961e87b7bafa4a9340bbb34aeda8" - }, - "usethis": { - "Package": "usethis", - "Version": "3.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "clipr", - "crayon", - "curl", - "desc", - "fs", - "gert", - "gh", - "glue", - "jsonlite", - "lifecycle", - "purrr", - "rappdirs", - "rlang", - "rprojroot", - "rstudioapi", - "stats", - "tools", - "utils", - "whisker", - "withr", - "yaml" - ], - "Hash": "caa93b7eada0b69e299f61db5984faa7" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "d526d558be176e9ceb68c3d1e83479b7" - }, - "uuid": { - "Package": "uuid", - "Version": "1.2-2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "528fc9e90d70a6a115e21164f37b2c64" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.7.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "2dcde2d30d3ad67bf1d3a37177457b87" - }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "9380d36888b72faf5ae6c22b44703867" - }, - "visOmopResults": { - "Package": "visOmopResults", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "brand.yml", - "cli", - "dplyr", - "generics", - "glue", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "systemfonts", - "tidyr" - ], - "Hash": "fade996417c3bc001d6bbcda1c788180" - }, - "vroom": { - "Package": "vroom", - "Version": "1.7.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit64", - "cli", - "cpp11", - "crayon", - "glue", - "hms", - "lifecycle", - "methods", - "progress", - "rlang", - "stats", - "tibble", - "tidyselect", - "tzdb", - "vctrs", - "withr" - ], - "Hash": "1e9494eda38f3418f71474363293da2a" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c6abfa47a46d281a7d5159d0a8891e88" - }, - "withr": { - "Package": "withr", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "graphics" - ], - "Hash": "cc2d62c76458d425210d1eb1478b30b4" - }, - "xfun": { - "Package": "xfun", - "Version": "0.57", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "stats", - "tools" - ], - "Hash": "476c8908ae56baf122e69bb2c2d9f631" - }, - "xml2": { - "Package": "xml2", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "methods", - "rlang" - ], - "Hash": "d8e98d08a4a4d03f5052acc6e6204b99" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-8", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods", - "stats", - "utils" - ], - "Hash": "93b19c064862d315a828c7170d806453" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.12", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "7cd77cb32abd9220d744307e9fc94ffb" - }, - "zip": { - "Package": "zip", - "Version": "3.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cli" - ], - "Hash": "b6637f22cadc4e12ad70c4b7d8d63e15" - } - } -} From 41fd4c4c849ee92948e97dd8df61003ae4649b85 Mon Sep 17 00:00:00 2001 From: cebarboza Date: Wed, 1 Jul 2026 17:51:27 +0200 Subject: [PATCH 08/14] declaring project explicitely inside installPackageBungle --- DESCRIPTION | 12 +- R/insertStructure.R | 23 +- renv.lock | 1653 +------------------------ tests/testthat/test-insertStructure.R | 5 +- 4 files changed, 38 insertions(+), 1655 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 19109db..0210922 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,17 +30,7 @@ Imports: zip, here, fs, - usethis, - omopgenerics, - PhenotypeR, - DrugExposureDiagnostics, - CohortConstructor, - IncidencePrevalence, - DrugUtilisation, - CohortCharacteristics, - CohortSurvival, - visOmopResults, - DarwinShinyModules + usethis Config/roxygen2/version: 8.0.0 Suggests: testthat (>= 3.0.0) diff --git a/R/insertStructure.R b/R/insertStructure.R index 0b1cdb9..dda2fd5 100644 --- a/R/insertStructure.R +++ b/R/insertStructure.R @@ -37,10 +37,16 @@ installPackageBundle <- function(path) { ) } - withr::with_dir(path, { + # withr::with_dir(path, { # Install packages with renv - renv::install(complete_darwin$cran) - renv::install(complete_darwin$github) + renv::install( + packages = complete_darwin$cran, + project = path + ) + renv::install( + packages = complete_darwin$github, + project = path + ) # Add dependencies (default type = "Imports") pkg_names <- c( @@ -52,7 +58,10 @@ installPackageBundle <- function(path) { cli::cli_inform( "Installing required package: 'usethis'" ) - install.packages("usethis") + renv::install( + packages = "usethis", + project = path + ) } for (pkg in pkg_names) { @@ -60,8 +69,10 @@ installPackageBundle <- function(path) { } # Update lockfile - renv::snapshot() - }) + renv::snapshot( + project = path + ) + # }) # Return invisible package list invisible(pkg_names) diff --git a/renv.lock b/renv.lock index 5925551..7546e90 100644 --- a/renv.lock +++ b/renv.lock @@ -9,313 +9,6 @@ ] }, "Packages": { - "CDMConnector": { - "Package": "CDMConnector", - "Version": "2.6.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "checkmate", - "cli", - "dbplyr", - "dplyr", - "generics", - "glue", - "httr2", - "jsonlite", - "lifecycle", - "methods", - "omopgenerics", - "purrr", - "readr", - "rlang", - "stringi", - "stringr", - "tidyr", - "tidyselect", - "withr" - ], - "Hash": "20f9abc5909eb8946c1fc63ed4509305" - }, - "CodelistGenerator": { - "Package": "CodelistGenerator", - "Version": "4.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "DBI", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "jsonlite", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringi", - "stringr", - "tidyr", - "vctrs" - ], - "Hash": "39a51212e117c844a0b755e72e49a2e2" - }, - "CohortCharacteristics": { - "Package": "CohortCharacteristics", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "snakecase", - "stringr", - "tidyr" - ], - "Hash": "6730f642c06d7e048cbb02084bdf1115" - }, - "CohortConstructor": { - "Package": "CohortConstructor", - "Version": "0.6.3", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "CodelistGenerator", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "omopgenerics", - "purrr", - "rlang", - "tibble", - "tidyr", - "utils" - ], - "Hash": "3d5ca3827a93b09a4062ba3306ee0a07" - }, - "CohortSurvival": { - "Package": "CohortSurvival", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "PatientProfiles", - "R", - "broom", - "cli", - "clock", - "dplyr", - "glue", - "omopgenerics", - "purrr", - "rlang", - "stats", - "stringr", - "survival", - "tibble", - "tidyr" - ], - "Hash": "bf9752e02370baeca96c8a976230f11b" - }, - "DBI": { - "Package": "DBI", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "dbfa2adb83f8063640982459e153f650" - }, - "DT": { - "Package": "DT", - "Version": "0.34.0", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "jsonlite", - "magrittr", - "promises" - ], - "Hash": "a9d00f59f9c7e613dd4c3e0d27135a03" - }, - "DarwinShinyModules": { - "Package": "DarwinShinyModules", - "Version": "0.6.0", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "darwin-eu", - "RemoteRepo": "DarwinShinyModules", - "RemoteRef": "main", - "RemoteSha": "b17492dc42528b2a9f00ae450c4360c411dbdd44", - "Requirements": [ - "DT", - "R", - "R6", - "checkmate", - "dplyr", - "flextable", - "ggplot2", - "gt", - "plotly", - "promises", - "purrr", - "reactable", - "rlang", - "shiny", - "shinyWidgets", - "stringr" - ], - "Hash": "1511c185ae01231e79989fb7b53e5637" - }, - "DrugExposureDiagnostics": { - "Package": "DrugExposureDiagnostics", - "Version": "1.1.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CDMConnector", - "DrugUtilisation", - "R", - "R6", - "checkmate", - "dplyr", - "glue", - "magrittr", - "omopgenerics", - "rlang", - "tidyr", - "tidyselect" - ], - "Hash": "9762f087e03fe6a71ab28b4295f4e7a6" - }, - "DrugUtilisation": { - "Package": "DrugUtilisation", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CodelistGenerator", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "9eff43ad07834f6d2f6d3ece7df9fbff" - }, - "IncidencePrevalence": { - "Package": "IncidencePrevalence", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "CDMConnector", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "magrittr", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "ddb15c3903afe4f6fcfe778d83d0f0db" - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.7-0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "lattice", - "methods", - "stats", - "utils" - ], - "Hash": "1920b2f11133b12350024297d8a4ff4a" - }, - "MeasurementDiagnostics": { - "Package": "MeasurementDiagnostics", - "Version": "0.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "CohortCharacteristics", - "CohortConstructor", - "DBI", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "glue", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "f65160242e48855c915e79944eac707d" - }, - "OmopSketch": { - "Package": "OmopSketch", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CohortConstructor", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyr" - ], - "Hash": "08e11b959fa5743c902e6b484e7bc0d8" - }, "ParallelLogger": { "Package": "ParallelLogger", "Version": "3.5.1", @@ -334,51 +27,6 @@ ], "Hash": "731821a8d5f403dd1ebcebfd6e215056" }, - "PatientProfiles": { - "Package": "PatientProfiles", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "clock", - "dplyr", - "lifecycle", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "tidyr" - ], - "Hash": "ceba13a7a98e77de7a048c98bfb4504b" - }, - "PhenotypeR": { - "Package": "PhenotypeR", - "Version": "0.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "CodelistGenerator", - "CohortCharacteristics", - "CohortConstructor", - "DrugUtilisation", - "IncidencePrevalence", - "MeasurementDiagnostics", - "OmopSketch", - "PatientProfiles", - "R", - "cli", - "clock", - "dplyr", - "omopgenerics", - "purrr", - "readr", - "rlang", - "vctrs" - ], - "Hash": "7b1d6d84bb3d9efb9079afb40dc5a866" - }, "R6": { "Package": "R6", "Version": "2.6.1", @@ -389,52 +37,6 @@ ], "Hash": "d4335fe7207f1c01ab8c41762f5840d4" }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "45f0398006e83a5b10b72a90663d8d8c" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.1.1-1.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods", - "utils" - ], - "Hash": "8842cfd023a523ec9e011b9e4aab50ef" - }, - "S7": { - "Package": "S7", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "6a72e94a8c9be4ef719af3aa3628f2dc" - }, - "V8": { - "Package": "V8", - "Version": "8.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Rcpp", - "curl", - "jsonlite", - "utils" - ], - "Hash": "9fcf4128ded76196cf5f9e731d5e14ef" - }, "askpass": { "Package": "askpass", "Version": "1.2.1", @@ -455,138 +57,6 @@ ], "Hash": "e3e65442a2749b59692220f368f46c46" }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5edb675b7baa6e9a0d86dd2c28de1676" - }, - "bigD": { - "Package": "bigD", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "ad123ab90aa2fc795512f61ff6939c4a" - }, - "bit": { - "Package": "bit", - "Version": "4.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "ebe86ffd194564abdc895d87742d5a29" - }, - "bit64": { - "Package": "bit64", - "Version": "4.8.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit", - "graphics", - "methods", - "stats", - "utils" - ], - "Hash": "71778c0b60bbf439ac64e6a8be695917" - }, - "bitops": { - "Package": "bitops", - "Version": "1.0-9", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "d972ef991d58c19e6efa71b21f5e144b" - }, - "blob": { - "Package": "blob", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods", - "rlang", - "vctrs" - ], - "Hash": "1e0ae40898be928695fd90a80e816253" - }, - "brand.yml": { - "Package": "brand.yml", - "Version": "0.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "rlang", - "utils", - "yaml" - ], - "Hash": "e1bcd4c1abdbfef99c66199235be76eb" - }, - "broom": { - "Package": "broom", - "Version": "1.0.13", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "backports", - "cli", - "dplyr", - "generics", - "glue", - "lifecycle", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyr" - ], - "Hash": "b91eb25282a25d746f84dbd340ace9db" - }, - "bslib": { - "Package": "bslib", - "Version": "0.11.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "base64enc", - "cachem", - "fastmap", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "lifecycle", - "memoise", - "mime", - "rlang", - "sass" - ], - "Hash": "82c0dcea3e967cfeaa263e920798a77e" - }, - "cachem": { - "Package": "cachem", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "cd9a672193789068eb5a2aad65a0dedf" - }, "checkmate": { "Package": "checkmate", "Version": "2.3.4", @@ -620,39 +90,6 @@ ], "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" }, - "clock": { - "Package": "clock", - "Version": "0.7.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "cpp11", - "lifecycle", - "rlang", - "tzdb", - "vctrs" - ], - "Hash": "dce6a8b20db8fc2fe9967d85f770b475" - }, - "commonmark": { - "Package": "commonmark", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "8cba62334c1088d21689d353a7e87663" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.5.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "20ecb9105a3fb48a8390919abc3b7e90" - }, "crayon": { "Package": "crayon", "Version": "1.5.3", @@ -679,243 +116,39 @@ ], "Hash": "bda033f0a309540bb66d5e85872c6973" }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "8b008bc619e0bbebb5646b3d37efdad1" - }, "curl": { "Package": "curl", "Version": "7.1.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ - "R" - ], - "Hash": "2e004ed19964915a8faf48a574439be9" - }, - "data.table": { - "Package": "data.table", - "Version": "1.18.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "da9ddede68a6f6e5d3098c0ab81b6e1f" - }, - "dbplyr": { - "Package": "dbplyr", - "Version": "2.6.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "R6", - "blob", - "cli", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "purrr", - "rlang", - "tibble", - "tidyr", - "tidyselect", - "utils", - "vctrs", - "withr" - ], - "Hash": "ddbed6865865c509ea0b516faf83042b" - }, - "desc": { - "Package": "desc", - "Version": "1.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "utils" - ], - "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" - }, - "digest": { - "Package": "digest", - "Version": "0.6.39", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "d18028e978a88b2b16ef8d400cb49adf" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "d71f190466b9496cf8543c76641be5cf" - }, - "evaluate": { - "Package": "evaluate", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "https://cloud.r-project.org", - "Requirements": [ - "R" - ], - "Hash": "94cf2c54237f6841cee68e3ba4ab5a14" - }, - "farver": { - "Package": "farver", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "680887028577f3fa2a81e410ed0d6e42" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" - }, - "flextable": { - "Package": "flextable", - "Version": "0.9.12", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "data.table", - "gdtools", - "grDevices", - "graphics", - "grid", - "htmltools", - "knitr", - "officer", - "ragg", - "rlang", - "rmarkdown", - "stats", - "utils", - "uuid", - "xml2" - ], - "Hash": "981c8f0fcb109d4720e217b9a291ccf1" - }, - "fontBitstreamVera": { - "Package": "fontBitstreamVera", - "Version": "0.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "f6068021eff4aba735a9b2353516636c" - }, - "fontLiberation": { - "Package": "fontLiberation", - "Version": "0.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "f918c5e723f86f409912104d5b7a71d6" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "bd1297f9b5b1fc1372d19e2c4cd82215" - }, - "fontquiver": { - "Package": "fontquiver", - "Version": "0.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "fontBitstreamVera", - "fontLiberation" - ], - "Hash": "fc0f4226379e451057d55419fd31761e" - }, - "fs": { - "Package": "fs", - "Version": "2.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" + "R" ], - "Hash": "09278623bca442bc53b0940ffa2f6d87" + "Hash": "2e004ed19964915a8faf48a574439be9" }, - "gdtools": { - "Package": "gdtools", - "Version": "0.5.1", + "desc": { + "Package": "desc", + "Version": "1.4.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", - "Rcpp", - "fontquiver", - "htmltools", - "systemfonts", - "tools" + "R6", + "cli", + "utils" ], - "Hash": "bca589967c4b7360ced3c08c69a96787" + "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" }, - "generics": { - "Package": "generics", - "Version": "0.1.4", + "fs": { + "Package": "fs", + "Version": "2.1.0", "Source": "Repository", "Repository": "RSPM", "Requirements": [ "R", "methods" ], - "Hash": "4b29bf698d0c7bdb9f1e4976e7ade41d" + "Hash": "09278623bca442bc53b0940ffa2f6d87" }, "gert": { "Package": "gert", @@ -932,28 +165,6 @@ ], "Hash": "8c696f49b5150a2541af009311c2fc83" }, - "ggplot2": { - "Package": "ggplot2", - "Version": "4.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "S7", - "cli", - "grDevices", - "grid", - "gtable", - "isoband", - "lifecycle", - "rlang", - "scales", - "stats", - "vctrs", - "withr" - ], - "Hash": "98520fe6b2745c466dca8e46aaa86242" - }, "gh": { "Package": "gh", "Version": "1.5.0", @@ -993,52 +204,6 @@ ], "Hash": "f8122473e9a49e00d0642f78235ca5e3" }, - "gt": { - "Package": "gt", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "bigD", - "bitops", - "cli", - "commonmark", - "dplyr", - "fs", - "glue", - "htmltools", - "htmlwidgets", - "juicyjuice", - "magrittr", - "markdown", - "reactable", - "rlang", - "sass", - "scales", - "tidyselect", - "vctrs", - "xml2" - ], - "Hash": "7153ac3985ed54f1a318590b73950329" - }, - "gtable": { - "Package": "gtable", - "Version": "0.3.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "grid", - "lifecycle", - "rlang", - "stats" - ], - "Hash": "de949855009e2d4d0e52a844e30617ae" - }, "here": { "Package": "here", "Version": "1.0.2", @@ -1049,78 +214,6 @@ ], "Hash": "e5114f2abe04168238181913a8572358" }, - "highr": { - "Package": "highr", - "Version": "0.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "2a2f862ade01a56dcbcd60944de11255" - }, - "hms": { - "Package": "hms", - "Version": "1.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "2799ac720626cec589478b191e48b88b" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "digest", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "102298e238c14eb830cc4b5edd23c3e8" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "knitr", - "rmarkdown", - "yaml" - ], - "Hash": "04291cc45198225444a397606810ac37" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.17", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "Rcpp", - "later", - "promises", - "utils" - ], - "Hash": "4ff0297ad1cd631d57f0d30172972754" - }, "httr": { "Package": "httr", "Version": "1.4.8", @@ -1164,30 +257,6 @@ "Repository": "CRAN", "Hash": "6154ec2223172bce8162d4153cda21f7" }, - "isoband": { - "Package": "isoband", - "Version": "0.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "cpp11", - "grid", - "rlang", - "utils" - ], - "Hash": "0f9a864bbd7ce0232ad05cb76249cc1a" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, "jsonlite": { "Package": "jsonlite", "Version": "2.0.0", @@ -1198,81 +267,6 @@ ], "Hash": "b0776f526d36d8bd4a3344a88fe165c4" }, - "juicyjuice": { - "Package": "juicyjuice", - "Version": "0.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "V8" - ], - "Hash": "3bcd11943da509341838da9399e18bce" - }, - "knitr": { - "Package": "knitr", - "Version": "1.51", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "tools", - "xfun", - "yaml" - ], - "Hash": "27682babb50f03b6eb7939ea69ec79ca" - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "graphics", - "stats" - ], - "Hash": "b64ec208ac5bc1852b285f665d6368b3" - }, - "later": { - "Package": "later", - "Version": "1.4.8", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "Rcpp", - "rlang" - ], - "Hash": "824c180e69b9be79ab96a985e233c470" - }, - "lattice": { - "Package": "lattice", - "Version": "0.22-6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "stats", - "utils" - ], - "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "2757e46c2633dd5854f62615df70d0d7" - }, "lifecycle": { "Package": "lifecycle", "Version": "1.0.5", @@ -1285,19 +279,6 @@ ], "Hash": "36dbfe4fba6c064db50a671a90297c85" }, - "litedown": { - "Package": "litedown", - "Version": "0.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "commonmark", - "utils", - "xfun" - ], - "Hash": "6b9435273e6506fbafa5909adf4abb88" - }, "magrittr": { "Package": "magrittr", "Version": "2.0.5", @@ -1308,30 +289,6 @@ ], "Hash": "665e77ab6e5f37a7913226d40b324e37" }, - "markdown": { - "Package": "markdown", - "Version": "2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "litedown", - "utils", - "xfun" - ], - "Hash": "b4349847250b103bbbb8bc6819c4fbca" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, "memuse": { "Package": "memuse", "Version": "4.2-3", @@ -1354,170 +311,15 @@ ], "Hash": "0ec19f34c72fab674d8f2b4b1c6410e1" }, - "officer": { - "Package": "officer", - "Version": "0.7.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "cli", - "dplyr", - "grDevices", - "graphics", - "openssl", - "ragg", - "stats", - "tidyr", - "utils", - "uuid", - "xml2", - "zip" - ], - "Hash": "11d3d171bd3d2442d9ecb8136b42749d" - }, - "omopgenerics": { - "Package": "omopgenerics", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "dbplyr", - "dplyr", - "generics", - "glue", - "lifecycle", - "methods", - "purrr", - "rlang", - "snakecase", - "stringi", - "stringr", - "tidyr", - "vctrs" - ], - "Hash": "85259a13789943d677dbb852fab30abc" - }, "openssl": { "Package": "openssl", "Version": "2.4.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "askpass" - ], - "Hash": "865a99ecdce7c318efa3a467b7614ec3" - }, - "otel": { - "Package": "otel", - "Version": "0.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "627d6993db1043703c0b084fa432f21f" - }, - "pillar": { - "Package": "pillar", - "Version": "1.11.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "1395e64f2689ffd503657778e810cee2" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "plotly": { - "Package": "plotly", - "Version": "4.12.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "RColorBrewer", - "base64enc", - "crosstalk", - "data.table", - "digest", - "dplyr", - "ggplot2", - "htmltools", - "htmlwidgets", - "httr", - "jsonlite", - "lazyeval", - "magrittr", - "promises", - "purrr", - "rlang", - "scales", - "tibble", - "tidyr", - "tools", - "vctrs", - "viridisLite" - ], - "Hash": "282f8b208bc767c67a370b47bff6ada7" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" - }, - "progress": { - "Package": "progress", - "Version": "1.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "f4625e061cb2865f111b47ff163a5ca6" - }, - "promises": { - "Package": "promises", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", + "Repository": "CRAN", "Requirements": [ - "R", - "R6", - "fastmap", - "later", - "lifecycle", - "magrittr", - "otel", - "rlang" + "askpass" ], - "Hash": "62cb899ed5fff70d4e918ec1b762bf7c" + "Hash": "865a99ecdce7c318efa3a467b7614ec3" }, "purrr": { "Package": "purrr", @@ -1534,17 +336,6 @@ ], "Hash": "0a35605539b085a4828ec55ad973fe60" }, - "ragg": { - "Package": "ragg", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "systemfonts", - "textshaping" - ], - "Hash": "c06b460d55dd27458977e417e8ff02c7" - }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.4", @@ -1555,56 +346,6 @@ ], "Hash": "f146a5bfc94db048309712535d4d0aee" }, - "reactR": { - "Package": "reactR", - "Version": "0.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "b8e3d93f508045812f47136c7c44c251" - }, - "reactable": { - "Package": "reactable", - "Version": "0.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "digest", - "htmltools", - "htmlwidgets", - "jsonlite", - "reactR" - ], - "Hash": "abfd6fa3794ff78116123d95845e0c32" - }, - "readr": { - "Package": "readr", - "Version": "2.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "clipr", - "cpp11", - "crayon", - "glue", - "hms", - "lifecycle", - "methods", - "rlang", - "tibble", - "tzdb", - "utils", - "vroom", - "withr" - ], - "Hash": "4425ad9e28b8e3351184ca2739995b87" - }, "renv": { "Package": "renv", "Version": "1.0.11", @@ -1626,29 +367,6 @@ ], "Hash": "f88151fb9ca15e72dc351deb1328716e" }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.31", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bslib", - "evaluate", - "fontawesome", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "f34039d57d861d2869cbf9be813ed08e" - }, "rprojroot": { "Package": "rprojroot", "Version": "2.1.1", @@ -1666,102 +384,6 @@ "Repository": "CRAN", "Hash": "d6e1ecf8e39b6d53c8acde372b2f92d1" }, - "sass": { - "Package": "sass", - "Version": "0.4.10", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "3fb78d066fb92299b1d13f6a7c9a90a8" - }, - "scales": { - "Package": "scales", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "RColorBrewer", - "cli", - "farver", - "glue", - "labeling", - "lifecycle", - "rlang", - "viridisLite" - ], - "Hash": "c5bba8f0d1df8c4b9538a40570798d9b" - }, - "shiny": { - "Package": "shiny", - "Version": "1.13.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "bslib", - "cachem", - "cli", - "commonmark", - "fastmap", - "fontawesome", - "glue", - "grDevices", - "htmltools", - "httpuv", - "jsonlite", - "later", - "lifecycle", - "methods", - "mime", - "otel", - "promises", - "rlang", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Hash": "3ae8521a5a4576fc4b78d00d401f22f9" - }, - "shinyWidgets": { - "Package": "shinyWidgets", - "Version": "0.9.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "grDevices", - "htmltools", - "jsonlite", - "rlang", - "sass", - "shiny" - ], - "Hash": "e8f592e8c0a636fef0c253c8196d78c7" - }, - "snakecase": { - "Package": "snakecase", - "Version": "0.11.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stringi", - "stringr" - ], - "Hash": "58767e44739b76965332e8a4fe3f91f1" - }, "snow": { "Package": "snow", "Version": "0.4-4", @@ -1773,16 +395,6 @@ ], "Hash": "40b74690debd20c57d93d8c246b305d4" }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "e716e13bfbfe8acb6182a05f4b367772" - }, "stringi": { "Package": "stringi", "Version": "1.8.7", @@ -1813,22 +425,6 @@ ], "Hash": "d47392652eedc68bf916657347ff2526" }, - "survival": { - "Package": "survival", - "Version": "3.8-6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "graphics", - "methods", - "splines", - "stats", - "utils" - ], - "Hash": "663dbb3b41554b751ae90fe58f72decf" - }, "sys": { "Package": "sys", "Version": "3.4.3", @@ -1836,118 +432,6 @@ "Repository": "CRAN", "Hash": "de342ebfebdbf40477d0758d05426646" }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "cpp11", - "grid", - "jsonlite", - "lifecycle", - "tools", - "utils" - ], - "Hash": "1f930828d6590af5da47b3ab4fe161e6" - }, - "textshaping": { - "Package": "textshaping", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cpp11", - "lifecycle", - "stats", - "stringi", - "systemfonts", - "utils" - ], - "Hash": "addb750a886a2ac415dea6f8068867de" - }, - "tibble": { - "Package": "tibble", - "Version": "3.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "c55df870972551cac674b50cadb2d51f" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "cpp11", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "a4fa2f5876396f04814cb9d8d9ab89e9" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "829f27b9c4919c16b593794a6344d6c0" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.59", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "xfun" - ], - "Hash": "2688c3e240d4ccc7d6aae804f7fdf322" - }, - "tzdb": { - "Package": "tzdb", - "Version": "0.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "09e3961e87b7bafa4a9340bbb34aeda8" - }, "usethis": { "Package": "usethis", "Version": "3.2.1", @@ -1980,26 +464,6 @@ ], "Hash": "caa93b7eada0b69e299f61db5984faa7" }, - "utf8": { - "Package": "utf8", - "Version": "1.2.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "d526d558be176e9ceb68c3d1e83479b7" - }, - "uuid": { - "Package": "uuid", - "Version": "1.2-2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "528fc9e90d70a6a115e21164f37b2c64" - }, "vctrs": { "Package": "vctrs", "Version": "0.7.3", @@ -2014,63 +478,6 @@ ], "Hash": "2dcde2d30d3ad67bf1d3a37177457b87" }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "9380d36888b72faf5ae6c22b44703867" - }, - "visOmopResults": { - "Package": "visOmopResults", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "brand.yml", - "cli", - "dplyr", - "generics", - "glue", - "omopgenerics", - "purrr", - "rlang", - "stringr", - "systemfonts", - "tidyr" - ], - "Hash": "fade996417c3bc001d6bbcda1c788180" - }, - "vroom": { - "Package": "vroom", - "Version": "1.7.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit64", - "cli", - "cpp11", - "crayon", - "glue", - "hms", - "lifecycle", - "methods", - "progress", - "rlang", - "stats", - "tibble", - "tidyselect", - "tzdb", - "vctrs", - "withr" - ], - "Hash": "1e9494eda38f3418f71474363293da2a" - }, "whisker": { "Package": "whisker", "Version": "0.4.1", @@ -2090,19 +497,6 @@ ], "Hash": "cc2d62c76458d425210d1eb1478b30b4" }, - "xfun": { - "Package": "xfun", - "Version": "0.57", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "stats", - "tools" - ], - "Hash": "476c8908ae56baf122e69bb2c2d9f631" - }, "xml2": { "Package": "xml2", "Version": "1.5.2", @@ -2116,19 +510,6 @@ ], "Hash": "d8e98d08a4a4d03f5052acc6e6204b99" }, - "xtable": { - "Package": "xtable", - "Version": "1.8-8", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods", - "stats", - "utils" - ], - "Hash": "93b19c064862d315a828c7170d806453" - }, "yaml": { "Package": "yaml", "Version": "2.3.12", diff --git a/tests/testthat/test-insertStructure.R b/tests/testthat/test-insertStructure.R index a4b46b9..65d14d0 100644 --- a/tests/testthat/test-insertStructure.R +++ b/tests/testthat/test-insertStructure.R @@ -6,13 +6,14 @@ test_that("insertStructure works", { usethis::with_project(test_pkg_path, { insertStructure( - path = ".", + path = test_pkg_path, + # path = ".", n_obj = 3) }) # Expect installed packages expect_true(dir.exists(file.path(test_pkg_path, "renv"))) - # expect_true(file.exists(file.path(test_pkg_path, "renv.lock"))) + expect_true(file.exists(file.path(test_pkg_path, "renv.lock"))) installed_pkgs <- c( "omopgenerics", "PhenotypeR", From 0a82f715ddde188f2bb9f8fab07bdfff5728fb75 Mon Sep 17 00:00:00 2001 From: cebarboza Date: Wed, 1 Jul 2026 18:10:14 +0200 Subject: [PATCH 09/14] adding use this to temp project --- tests/testthat/test-insertStructure.R | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-insertStructure.R b/tests/testthat/test-insertStructure.R index 65d14d0..d1a0954 100644 --- a/tests/testthat/test-insertStructure.R +++ b/tests/testthat/test-insertStructure.R @@ -1,8 +1,15 @@ test_that("insertStructure works", { test_pkg_path <- withr::local_tempdir() - usethis::create_package(test_pkg_path, open = FALSE) - renv::init(project = test_pkg_path, bare = TRUE) + usethis::create_package( + test_pkg_path, + open = FALSE + ) + renv::init(project = test_pkg_path) + renv::install( + "usethis", + project = test_pkg_path + ) usethis::with_project(test_pkg_path, { insertStructure( From cbe5e7325ea968719ed83fc5df1350d05516b672 Mon Sep 17 00:00:00 2001 From: cebarboza Date: Wed, 1 Jul 2026 18:30:40 +0200 Subject: [PATCH 10/14] adding fonts libraries to linux for github actions --- .github/workflows/R-CMD-check.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 6b1d546..32f231f 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -37,6 +37,12 @@ jobs: r-version: ${{ matrix.config.r }} http-user-agent: ${{ matrix.config.http-user-agent }} + - name: Install Linux system libraries + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y libfontconfig1-dev libfreetype6-dev pkg-config + - uses: r-lib/actions/setup-r-dependencies@v2 with: extra-packages: any::rcmdcheck From 011a9dbcb000abbec854205a78d6f41e4f76d093 Mon Sep 17 00:00:00 2001 From: cebarboza Date: Thu, 2 Jul 2026 10:22:21 +0200 Subject: [PATCH 11/14] makevars for linux github actions fix --- .github/workflows/R-CMD-check.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 32f231f..2231d90 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -41,7 +41,20 @@ jobs: if: runner.os == 'Linux' run: | sudo apt-get update - sudo apt-get install -y libfontconfig1-dev libfreetype6-dev pkg-config + sudo apt-get install -y \ + libcairo2-dev \ + libfontconfig1-dev \ + libfreetype6-dev \ + pkg-config + + - name: Configure Linux Makevars for gdtools + if: runner.os == 'Linux' + run: | + mkdir -p ~/.R + cat <> ~/.R/Makevars + PKG_CPPFLAGS=$(pkg-config --cflags cairo freetype2 fontconfig) + PKG_LIBS=$(pkg-config --libs cairo freetype2 fontconfig) + EOF - uses: r-lib/actions/setup-r-dependencies@v2 with: From 3f8ef47e55103142b472b6fbf9c6ae98e2cfb0d1 Mon Sep 17 00:00:00 2001 From: cebarboza Date: Thu, 2 Jul 2026 10:28:49 +0200 Subject: [PATCH 12/14] cli makevars correction --- .github/workflows/R-CMD-check.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 2231d90..09ee98a 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -52,8 +52,9 @@ jobs: run: | mkdir -p ~/.R cat <> ~/.R/Makevars - PKG_CPPFLAGS=$(pkg-config --cflags cairo freetype2 fontconfig) - PKG_LIBS=$(pkg-config --libs cairo freetype2 fontconfig) + CPPFLAGS=$(pkg-config --cflags cairo freetype2 fontconfig) + LDFLAGS=$(pkg-config --libs-only-L cairo freetype2 fontconfig) + LDLIBS=$(pkg-config --libs-only-l cairo freetype2 fontconfig) EOF - uses: r-lib/actions/setup-r-dependencies@v2 From f891b30161b77fff6c96d2e40242f01424aed02c Mon Sep 17 00:00:00 2001 From: cebarboza Date: Thu, 2 Jul 2026 10:56:51 +0200 Subject: [PATCH 13/14] textshaping github actions fix --- .github/workflows/R-CMD-check.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 09ee98a..372b347 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -43,8 +43,10 @@ jobs: sudo apt-get update sudo apt-get install -y \ libcairo2-dev \ + libfribidi-dev \ libfontconfig1-dev \ libfreetype6-dev \ + libharfbuzz-dev \ pkg-config - name: Configure Linux Makevars for gdtools From 416394645d0a65a6ce1fa076c4bf931708811818 Mon Sep 17 00:00:00 2001 From: cebarboza Date: Fri, 3 Jul 2026 16:20:29 +0200 Subject: [PATCH 14/14] adding more headers for ragg --- .github/workflows/R-CMD-check.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 372b347..7e7eb59 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -47,6 +47,10 @@ jobs: libfontconfig1-dev \ libfreetype6-dev \ libharfbuzz-dev \ + libjpeg-dev \ + libpng-dev \ + libtiff5-dev \ + libwebp-dev \ pkg-config - name: Configure Linux Makevars for gdtools