From 106756324b7996cb22a5f430db23fd6596ea3521 Mon Sep 17 00:00:00 2001 From: Weber Date: Tue, 24 Mar 2026 15:51:34 -0700 Subject: [PATCH 01/43] get rid of misnamed test nlcd files --- tests/testthat/test-lc_nlcd.R | 20 -------------------- tests/testthat/test-sc_nlcd.R | 20 -------------------- 2 files changed, 40 deletions(-) delete mode 100644 tests/testthat/test-lc_nlcd.R delete mode 100644 tests/testthat/test-sc_nlcd.R diff --git a/tests/testthat/test-lc_nlcd.R b/tests/testthat/test-lc_nlcd.R deleted file mode 100644 index 74e1759..0000000 --- a/tests/testthat/test-lc_nlcd.R +++ /dev/null @@ -1,20 +0,0 @@ -context("Test that lc_nlcd is pulling in StreamCat API data") - - -test_that("lc_get_data for a sample COMID returns a data frame", { - testthat::skip_on_cran() - df <- lc_get_nlcd(year='2019', aoi='catchment', - comid='23783629,23794487,23812618') - expect_true(exists("df")) - expect_equal(nrow(df), 3) - expect_equal(ncol(df), 17) -}) - -test_that("lc_get_data for a county and ws metrics returns a data frame", { - testthat::skip_on_cran() - df <- lc_get_nlcd(year='2006, 2019', aoi='watershed', - comid='23794487',showAreaSqKm=TRUE, showPctFull=TRUE) - expect_true(exists("df")) - expect_equal(nrow(df), 1) - expect_equal(ncol(df), 36) -}) diff --git a/tests/testthat/test-sc_nlcd.R b/tests/testthat/test-sc_nlcd.R deleted file mode 100644 index da1634f..0000000 --- a/tests/testthat/test-sc_nlcd.R +++ /dev/null @@ -1,20 +0,0 @@ -context("Test that sc_nlcd is pulling in StreamCat API data") - - -test_that("sc_get_data for a sample COMID returns a data frame", { - testthat::skip_on_cran() - df <- sc_get_nlcd(year='2019', aoi='cat', - comid='179,1337,1337420') - expect_true(exists("df")) - expect_equal(nrow(df), 3) - expect_equal(ncol(df), 17) -}) - -test_that("sc_get_data for a county and ws metrics returns a data frame", { - testthat::skip_on_cran() - df <- sc_get_nlcd(year='2006, 2019', aoi='ws', - county='41003') - expect_true(exists("df")) - expect_equal(nrow(df), 632) - expect_equal(ncol(df), 33) -}) From 28ddcc942bdff1bf31fda8a60293bfc32bccbbc0 Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Mon, 11 May 2026 12:16:17 -0700 Subject: [PATCH 02/43] Lake watersheds (#89) * starting lake watershed function in lake_watersheds branch * get rid of misnamed test nlcd files * tinkering with lake watersheds * added lc_get_watershed function to get watershed polygons from S3 * added lc_get_watershed function with optimizations * added vignette section for lc_get_watershed * added vignette for lc_get_watershed * updated lc_get_watershed function and added a section in the LakeCat article to describe * added tictoc to suggests in Description * trying to get rid of geoarrow dependency issue * got rid of accidental draft code still in lc_get_data * fixed deprecated functions and NAMESPACE * fixed depreacted functions and NAMESPACE * updating get_params functions * added test coverage for new lc_get_watershed function --- .github/workflows/coverage.yaml | 1 + DESCRIPTION | 7 +- NAMESPACE | 3 +- R/lc_get_data.R | 84 ++++----- R/lc_get_params.R | 1 + R/lc_get_watershed.R | 227 +++++++++++++++++++++++++ R/sc_get_data.R | 5 +- R/sc_get_params.R | 1 + man/lc_get_nlcd.Rd | 17 +- man/sc_get_data.Rd | 2 +- man/sc_get_nlcd.Rd | 4 +- tests/testthat/test-lc_get_watershed.R | 11 ++ vignettes/Articles/LakeCat.Rmd | 45 +++++ 13 files changed, 327 insertions(+), 81 deletions(-) create mode 100644 R/lc_get_watershed.R create mode 100644 tests/testthat/test-lc_get_watershed.R diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 23f3c55..f717132 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -30,6 +30,7 @@ jobs: with: extra-packages: any::covr, any::xml2 needs: coverage + cache-version: 2 # Increment this to bust the cache - name: Test coverage run: | diff --git a/DESCRIPTION b/DESCRIPTION index 6fd162d..85b5059 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -52,7 +52,7 @@ Imports: patchwork, cowplot, tigris, - ggplot2 + ggplot2, Suggests: dplyr, mapview, @@ -67,7 +67,10 @@ Suggests: stringr, purrr, lifecycle, - tidyselect + tidyselect, + DBI, + duckdb, + tictoc, Encoding: UTF-8 URL: https://usepa.github.io/StreamCatTools/, https://github.com/USEPA/StreamCatTools BugReports: https://github.com/USEPA/StreamCatTools/issues diff --git a/NAMESPACE b/NAMESPACE index f332a1b..567224f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,7 +7,7 @@ export(lc_get_metric_names) export(lc_get_nlcd) export(lc_get_nni) export(lc_get_params) -export(lc_nlcd) +export(lc_get_watershed) export(lc_plotnni) export(sc_fullname) export(sc_get_comid) @@ -16,7 +16,6 @@ export(sc_get_metric_names) export(sc_get_nlcd) export(sc_get_nni) export(sc_get_params) -export(sc_nlcd) export(sc_plotnni) import(ggpattern) import(ggplot2) diff --git a/R/lc_get_data.R b/R/lc_get_data.R index e4aec98..16f2eea 100644 --- a/R/lc_get_data.R +++ b/R/lc_get_data.R @@ -207,7 +207,7 @@ lc_get_data <- function(comid = NULL, #' @examples #' \dontrun{ #' -#' df <- lc_nlcd(comid='23783629', year='2019', aoi='ws') # Will show a deprecation warning +#' df <- lc_get_nlcd(comid='23783629', year='2019', aoi='ws') # Will show a deprecation warning #' #' df <- lc_get_nlcd(comid='23783629', year='2019', aoi='ws') #' @@ -294,31 +294,6 @@ lc_get_nlcd <- function(year = '2019', return(final_df) } -#' @rdname lc_get_nlcd -#' @export -#' @keywords internal -lc_nlcd <- function(year = '2019', - comid = NULL, - aoi = NULL, - showAreaSqKm = NULL, - showPctFull = NULL, - state = NULL, - county = NULL, - region = NULL, - conus = NULL, - countOnly = NULL) { - lifecycle::deprecate_warn("0.10.0", "lc_nlcd()", "lc_get_nlcd()") - lc_get_nlcd(year = '2019', - comid = NULL, - aoi = NULL, - showAreaSqKm = NULL, - showPctFull = NULL, - state = NULL, - county = NULL, - region = NULL, - conus = NULL, - countOnly = NULL) -} #' @title Get NNI #' @@ -365,8 +340,8 @@ lc_nlcd <- function(year = '2019', #' } lc_get_nni <- function(year, aoi = NULL, comid = NULL, - showAreaSqKm = TRUE, showPctFull = NULL, - countOnly = NULL) { + showAreaSqKm = TRUE, showPctFull = NULL, + countOnly = NULL) { # year must be a character string. year_chr <- as.character(year) # split multiple years supplied as a single string into @@ -412,29 +387,29 @@ lc_get_nni <- function(year, aoi = NULL, comid = NULL, ) # Vector of NNI metric names. nni <- c( - 'n_leg_', - 'n_ags_', - 'n_ff_', - 'n_uf_', - 'n_cf_', - 'n_cr_', - 'n_hw_', - 'n_lw_', - 'p_leg_', - 'p_ags_', - 'p_ff_', - 'p_uf_', - 'p_cr_', - 'p_hw_', - 'p_lw_' - ) + 'n_leg_', + 'n_ags_', + 'n_ff_', + 'n_uf_', + 'n_cf_', + 'n_cr_', + 'n_hw_', + 'n_lw_', + 'p_leg_', + 'p_ags_', + 'p_ff_', + 'p_uf_', + 'p_cr_', + 'p_hw_', + 'p_lw_' + ) # Add n_dep for available years ndep_year_vec <- year_vec[!year_vec %in% c('1987', '1988', '1989')] ndep_comb <- expand.grid('n_dep_', ndep_year_vec) ndep_mets <- paste0(ndep_comb$Var1, - ndep_comb$Var2, - collapse = ",", - recycle0 = TRUE) + ndep_comb$Var2, + collapse = ",", + recycle0 = TRUE) # Add p_dep for available years pdep_year_vec <- year_vec[!year_vec %in% c('1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '2014', '2015', '2016', '2017')] @@ -447,17 +422,17 @@ lc_get_nni <- function(year, aoi = NULL, comid = NULL, ww_year_vec <- year_vec[year_vec %in% c('1988', '1990', '1992', '1996', '2000', '2004', '2008', '2012')] ww_comb <- expand.grid(c('p_usgsww_', 'n_usgsww_'), ww_year_vec) ww_mets <- paste0(ww_comb$Var1, - ww_comb$Var2, - collapse = ",", - recycle0 = TRUE) + ww_comb$Var2, + collapse = ",", + recycle0 = TRUE) # Create a data frame of all NNI Metric and year combinations. all_comb <- expand.grid(nni, year_vec) # Concatenate the NLCD metric name with the supplied year(s) to create # valid metric names to submit to the API. nni_mets <- paste0(all_comb$Var1, - all_comb$Var2, - collapse = ",", - recycle0 = TRUE) + all_comb$Var2, + collapse = ",", + recycle0 = TRUE) # Combine all NNI metrics nni_mets_all <- paste0(nni_mets, ",", ndep_mets, ",", pdep_mets, ",", ww_mets) @@ -472,5 +447,4 @@ lc_get_nni <- function(year, aoi = NULL, comid = NULL, ) # End of function. Return a data frame. return(final_df) -} - +} \ No newline at end of file diff --git a/R/lc_get_params.R b/R/lc_get_params.R index 22a3e1e..d7366e2 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -80,6 +80,7 @@ lc_get_params <- function(param = NULL) { } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) + params <- params |> dplyr::select(-fips_str) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] } diff --git a/R/lc_get_watershed.R b/R/lc_get_watershed.R new file mode 100644 index 0000000..cf1c902 --- /dev/null +++ b/R/lc_get_watershed.R @@ -0,0 +1,227 @@ +#' @title Get LakeCat Lake Watershed +#' +#' @description +#' Lookup function for a single COMID from S3 GeoParquet (optionally restricted to one HUC2). +#' Queries one COMID from an S3-hosted, HUC2-partitioned GeoParquet dataset and returns an sf object. +#' If `huc2` is provided, only that partition is scanned (fastest). If not, the function tries +#' a glob over all HUC2 partitions and falls back to a shallower pattern if needed. +#' The function: +#' - loads DuckDB httpfs (S3) extension, +#' - pushes an equality filter on `COMID` for row-group/file pruning, +#' - converts WKB geometry to sf with the CRS you provide (default EPSG:4326). +#' +#' @param comid Scalar COMID to query (numeric or character, required). +#' @param huc2 Optional two-digit HUC2 string (e.g., "01") to restrict search to one partition. +#' @param huc2_filter Optional character vector of HUC2s to read (e.g., c("01","05")) for multi-partition pruning. +#' @param bucket Character(1). S3 bucket (default "dmap-data-commons-ow"). +#' @param prefix Character(1). S3 prefix under the bucket (default "data/streamcat/LakeCatWatersheds/"). +#' @param region Character(1). S3 region (default "us-east-1"). +#' @param install_missing Logical. Install missing packages (duckdb, DBI, sf, wk) if needed (default FALSE). +#' @param keep_open Logical. Keep the DuckDB connection open (default FALSE). Note: the connection is not returned. +#' @param verbose Logical. Print progress messages (default TRUE). +#' @param progress Logical. Show a simple progress bar (default TRUE). +#' @param threads Integer or NULL. If set, `PRAGMA threads` for DuckDB (parallelism). +#' @param enable_object_cache Logical. Enable DuckDB object cache to speed repeated queries (default TRUE). +#' @param skip_describe Logical. Skip DESCRIBE step (default FALSE). +#' @param skip_counts Logical. Skip HUC2 counts step (default TRUE; no longer returned). +#' @param sf_crs Integer or character. CRS for the output sf object (default 4326). +#' +#' @return An sf object with zero or one+ rows (if multiple features share the same COMID). +#' @export + +lc_get_watershed <- function( + comid, + huc2 = NA_character_, + huc2_filter = NULL, + bucket = "dmap-data-commons-ow", + prefix = "data/streamcat/LakeCatWatersheds/", + region = "us-east-1", + install_missing = FALSE, + keep_open = FALSE, + verbose = TRUE, + progress = TRUE, + threads = 4, # default to moderate parallelism + enable_object_cache = TRUE, + skip_describe = FALSE, + skip_counts = TRUE, + sf_crs = 4326, + retries = 5, # NEW: retry count for transient timeouts + retry_base_delay = 0.5, # NEW: initial delay in seconds + retry_max_delay = 8, # NEW: cap delay per attempt + url_style = c("path", "virtual_hosted"), # NEW: allows changing URL style + s3_endpoint = NULL # NEW: custom endpoint (e.g., "s3.amazonaws.com") +) { + # --- COMID validation (single-value with warning if vector) --- + if (missing(comid) || length(comid) == 0L) stop("Argument 'comid' is required.") + if (length(comid) > 1L) { + warning("Currently the function only supports requesting one feature at a time by COMID; using the first value: ", + as.character(comid[1])) + comid <- comid[1] + } + if (is.na(comid)) stop("Argument 'comid' cannot be NA.") + comid_chr <- as.character(comid) + + # --- Packages --- + needed <- c("duckdb", "DBI", "sf", "wk") + have <- vapply(needed, requireNamespace, logical(1), quietly = TRUE) + if (!all(have)) { + missing <- needed[!have] + if (isTRUE(install_missing)) { + install.packages(missing, repos = "https://cloud.r-project.org") + have <- vapply(needed, requireNamespace, logical(1), quietly = TRUE) + if (!all(have)) stop("Could not load packages after installation: ", paste(needed[!have], collapse = ", ")) + } else { + stop("Missing required packages: ", paste(missing, collapse = ", "), + ". Set install_missing = TRUE to install automatically.") + } + } + + url_style <- match.arg(url_style) + msg <- function(...) if (isTRUE(verbose)) cat(sprintf("[%s] %s\n", format(Sys.time(), "%H:%M:%S"), paste0(...))) + + # --- Progress bar (coarse) --- + total_steps <- 6L + (!skip_describe) + (!skip_counts) + step <- 0L; pb <- NULL + bump <- function() { step <<- step + 1L; if (!is.null(pb)) utils::setTxtProgressBar(pb, step) } + if (isTRUE(progress)) { + pb <- utils::txtProgressBar(min = 0, max = total_steps, style = 3) + on.exit(try(close(pb), silent = TRUE), add = TRUE) + } + + msg("duckdb version: ", as.character(utils::packageVersion("duckdb"))); bump() + + # --- Connect (single controlled cleanup) --- + con <- DBI::dbConnect(duckdb::duckdb()) + if (!isTRUE(keep_open)) { + on.exit({ + valid <- tryCatch(DBI::dbIsValid(con), error = function(e) FALSE) + if (isTRUE(valid)) suppressWarnings(try(DBI::dbDisconnect(con, shutdown = TRUE), silent = TRUE)) + }, add = TRUE) + } + if (!is.null(threads)) DBI::dbExecute(con, sprintf("PRAGMA threads=%d;", as.integer(threads))) + bump() + + # --- Configure httpfs/S3 --- + msg("Loading and configuring httpfs ...") + DBI::dbExecute(con, "INSTALL httpfs;") + DBI::dbExecute(con, "LOAD httpfs;") + DBI::dbExecute(con, sprintf("SET s3_region = '%s';", region)) + DBI::dbExecute(con, "SET s3_use_ssl = true;") + DBI::dbExecute(con, sprintf("SET s3_url_style = '%s';", if (url_style == "path") "path" else "virtual_hosted")) + DBI::dbExecute(con, "SET s3_access_key_id = '';") + DBI::dbExecute(con, "SET s3_secret_access_key = '';") + DBI::dbExecute(con, "SET s3_session_token = '';") + if (!is.null(s3_endpoint)) { + # e.g., "s3.amazonaws.com" or a VPC endpoint; skip silently if not supported + try(DBI::dbExecute(con, sprintf("SET s3_endpoint = '%s';", s3_endpoint)), silent = TRUE) + } + if (isTRUE(enable_object_cache)) { + DBI::dbExecute(con, "SET enable_object_cache = true;") + } + # Optional secret (harmless; helps on some builds) + try(DBI::dbExecute(con, sprintf(" + CREATE OR REPLACE SECRET s3_public ( + TYPE S3, + PROVIDER CONFIG, + KEY_ID '', + SECRET '', + REGION '%s' + );", region)), silent = TRUE) + bump() + + # --- Retry helper for transient HTTP timeouts --- + sleep_time <- function(k) min(retry_max_delay, retry_base_delay * (2^(k - 1))) * runif(1, 0.9, 1.1) + db_get_query_retry <- function(sql) { + for (k in seq_len(retries)) { + out <- try(DBI::dbGetQuery(con, sql), silent = TRUE) + if (!inherits(out, "try-error")) return(out) + emsg <- conditionMessage(attr(out, "condition")) + # Only retry on network-ish timeouts; otherwise rethrow + retryable <- grepl("Timeout was reached", emsg, fixed = TRUE) || + grepl("Operation timed out", emsg, fixed = TRUE) || + grepl("Temporary failure in name resolution", emsg, fixed = TRUE) + if (!retryable || k == retries) { + stop(simpleError(emsg)) + } + wt <- sleep_time(k) + msg(sprintf("Transient S3 timeout; retry %d/%d in %.1fs ...", k, retries, wt)) + Sys.sleep(wt) + } + } + + # --- Build source (glob or restricted partitions) --- + norm_prefix <- paste0(sub("/+$", "", prefix), "/") + shallow_glob <- sprintf("s3://%s/%s*/*.parquet", bucket, norm_prefix) + deep_glob <- sprintf("s3://%s/%s**/*.parquet", bucket, norm_prefix) + + src_sql <- NULL + if (length(huc2_filter)) { + parts <- sprintf("s3://%s/%sHUC2=%s/*.parquet", bucket, norm_prefix, huc2_filter) + paths_sql <- paste0("[", paste(sprintf("'%s'", parts), collapse = ", "), "]") + src_sql <- sprintf("read_parquet(%s, hive_partitioning = true)", paths_sql) + } else { + pick_glob <- function(globs) { + for (g in globs) { + ok <- try({ + db_get_query_retry(sprintf("SELECT 1 FROM read_parquet('%s', hive_partitioning = true) LIMIT 1", g)) + TRUE + }, silent = TRUE) + if (isTRUE(ok)) return(g) + } + NULL + } + glob <- pick_glob(c(deep_glob, shallow_glob)) + if (is.null(glob)) { + stop("No Parquet files found under s3://", bucket, "/", norm_prefix, + " (checked patterns: ", deep_glob, " and ", shallow_glob, ").") + } + msg("Using glob: ", glob) + src_sql <- sprintf("read_parquet('%s', hive_partitioning = true)", glob) + } + bump() + + # --- Optional describe/counts (not returned) --- + if (!isTRUE(skip_describe)) { + msg("Describing schema ...") + invisible(db_get_query_retry(sprintf("DESCRIBE SELECT * FROM %s LIMIT 0", src_sql))) + } + bump() + if (!isTRUE(skip_counts)) { + msg("Counting rows per HUC2 ...") + invisible(db_get_query_retry(sprintf(" + SELECT HUC2, COUNT(*) AS n + FROM %s + GROUP BY HUC2 + ORDER BY HUC2 + ", src_sql))) + } + bump() + + # --- COMID query (with retries) --- + msg("Querying COMID = ", comid_chr, if (!is.na(huc2)) paste0(" within HUC2=", huc2) else "") + where <- sprintf("CAST(COMID AS VARCHAR) = '%s'", comid_chr) + if (!is.na(huc2)) where <- sprintf("%s AND HUC2 = '%s'", where, huc2) + sql <- sprintf("SELECT * FROM %s WHERE %s", src_sql, where) + res <- db_get_query_retry(sql) + msg("Rows returned: ", nrow(res)) + bump() + + # --- Convert to sf --- + geom_candidates <- c("geometry", "wkb_geometry", "geom", "wkb") + geom_col <- intersect(names(res), geom_candidates) + if (!length(geom_col)) { + stop("No geometry column found in result; checked: ", + paste(geom_candidates, collapse = ", "), + ". Ensure the dataset contains WKB geometry and uses one of these column names.") + } + gcol <- geom_col[1] + gval <- res[[gcol]] + if (inherits(gval, "blob")) gval <- unclass(gval) + if (is.raw(gval)) gval <- as.list(gval) + sfc <- if (length(gval) == 0L) sf::st_sfc(crs = sf_crs) else sf::st_as_sfc(wk::wkb(gval), crs = sf_crs) + data_no_geom <- res[, setdiff(names(res), gcol), drop = FALSE] + result_sf <- sf::st_sf(data_no_geom, geometry = sfc) |> + sf::st_set_crs(sf_crs) + + return(result_sf) +} diff --git a/R/sc_get_data.R b/R/sc_get_data.R index c7fffdf..ae8261f 100644 --- a/R/sc_get_data.R +++ b/R/sc_get_data.R @@ -240,7 +240,7 @@ sc_get_data <- function(comid = NULL, #' @examples #' \dontrun{ #' -#' df <- sc_nlcd(year='2001', aoi='cat',comid='179') # Will show a deprecation warning +#' df <- sc_get_nlcd(year='2001', aoi='cat',comid='179') # Will show a deprecation warning #' #' df <- sc_get_nlcd(year='2001', aoi='cat',comid='179,1337,1337420') #' @@ -249,7 +249,7 @@ sc_get_data <- function(comid = NULL, #' df <- sc_get_nlcd(year='2001', aoi='ws', region='Region01', #' countOnly=TRUE) #' -#' df <- sc_nlcd(year='2001', aoi='ws', region='Region01', +#' df <- sc_get_nlcd(year='2001', aoi='ws', region='Region01', #' showAreaSqKm=FALSE, showPctFull=TRUE) #' #' df <- sc_get_nlcd(year='2001, 2006', aoi='cat,ws', @@ -333,7 +333,6 @@ sc_get_nlcd <- function(year = '2019', } #' @rdname sc_get_nlcd -#' @export #' @keywords internal sc_nlcd <- function(year = '2019', comid = NULL, diff --git a/R/sc_get_params.R b/R/sc_get_params.R index afcf51e..efe4859 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -78,6 +78,7 @@ sc_get_params <- function(param = NULL) { } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) + params <- params |> dplyr::select(-fips_str) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] } diff --git a/man/lc_get_nlcd.Rd b/man/lc_get_nlcd.Rd index b69a1f7..c9c302c 100644 --- a/man/lc_get_nlcd.Rd +++ b/man/lc_get_nlcd.Rd @@ -2,7 +2,6 @@ % Please edit documentation in R/lc_get_data.R \name{lc_get_nlcd} \alias{lc_get_nlcd} -\alias{lc_nlcd} \title{Get NLCD Data} \usage{ lc_get_nlcd( @@ -17,19 +16,6 @@ lc_get_nlcd( conus = NULL, countOnly = NULL ) - -lc_nlcd( - year = "2019", - comid = NULL, - aoi = NULL, - showAreaSqKm = NULL, - showPctFull = NULL, - state = NULL, - county = NULL, - region = NULL, - conus = NULL, - countOnly = NULL -) } \arguments{ \item{year}{Years(s) of NLCD metrics to query. @@ -67,7 +53,7 @@ Function to specifically retrieve all NLCD metrics for a given year using the St \examples{ \dontrun{ -df <- lc_nlcd(comid='23783629', year='2019', aoi='ws') # Will show a deprecation warning +df <- lc_get_nlcd(comid='23783629', year='2019', aoi='ws') # Will show a deprecation warning df <- lc_get_nlcd(comid='23783629', year='2019', aoi='ws') @@ -84,4 +70,3 @@ comid='23783629,23794487,23812618') \author{ Marc Weber } -\keyword{internal} diff --git a/man/sc_get_data.Rd b/man/sc_get_data.Rd index 09bccc0..3d572fd 100644 --- a/man/sc_get_data.Rd +++ b/man/sc_get_data.Rd @@ -82,7 +82,7 @@ df <- sc_get_data(metric='pctgrs2006', aoi='ws', region='Region01') df <- sc_get_data(metric='pctwdwet2006', aoi='ws', county='41003') -df <- sc_get_data(metric='pcturbmd2006', aoi='wsrp100', +df <- sc_get_data(metric='pcturbmd2006', aoi='ws,rp100', comid='1337420') df <- sc_get_data(metric='pcturbmd2006,damdens', diff --git a/man/sc_get_nlcd.Rd b/man/sc_get_nlcd.Rd index a09c47c..1b1319d 100644 --- a/man/sc_get_nlcd.Rd +++ b/man/sc_get_nlcd.Rd @@ -82,7 +82,7 @@ Function to retrieve all NLCD metrics for a given year using the StreamCat API. \examples{ \dontrun{ -df <- sc_nlcd(year='2001', aoi='cat',comid='179') # Will show a deprecation warning +df <- sc_get_nlcd(year='2001', aoi='cat',comid='179') # Will show a deprecation warning df <- sc_get_nlcd(year='2001', aoi='cat',comid='179,1337,1337420') @@ -91,7 +91,7 @@ df <- sc_get_nlcd(year='2001', aoi='ws', region='Region01') df <- sc_get_nlcd(year='2001', aoi='ws', region='Region01', countOnly=TRUE) -df <- sc_nlcd(year='2001', aoi='ws', region='Region01', +df <- sc_get_nlcd(year='2001', aoi='ws', region='Region01', showAreaSqKm=FALSE, showPctFull=TRUE) df <- sc_get_nlcd(year='2001, 2006', aoi='cat,ws', diff --git a/tests/testthat/test-lc_get_watershed.R b/tests/testthat/test-lc_get_watershed.R new file mode 100644 index 0000000..8108ddb --- /dev/null +++ b/tests/testthat/test-lc_get_watershed.R @@ -0,0 +1,11 @@ +context("Test that lc_get_watershed is returning an sf object") + +test_that("lc_get_watershed is returning an sf object representing a lake watershed", { + testthat::skip_on_cran() + p <- lc_get_watershed(comid = 19334077, huc2 = "01",huc2_filter = "01", + threads = parallel::detectCores()) + expect_true(exists("p")) + expect_true(class(p)[1]=='sf') +}) + + diff --git a/vignettes/Articles/LakeCat.Rmd b/vignettes/Articles/LakeCat.Rmd index b6d1bdd..1bf7e69 100644 --- a/vignettes/Articles/LakeCat.Rmd +++ b/vignettes/Articles/LakeCat.Rmd @@ -114,3 +114,48 @@ In this example we access National Land Cover Dataset (NLCD) data for 2019, just df <- lc_get_nlcd(comid='23783629,23794487,23812618', year='2019', aoi='ws') knitr::kable(df) ``` + +## Get lake and lake watersheds as `sf` objects + +`StreamCatTools` includes a function `lc_get_watershed` that will return the watershed of any lake by COMID from an AWS S3 bucket of partitioned geoparquet files for all LakeCat lake watersheds (both on-network and off-network lakes). The watershed requested is returned as an `sf` object and uses `duckDB` as well as optional parallelization for faster data returns and specification of a specific HUC2 if known to reduce search time. **NOTE** `lc_get_watershed` currently only returns one watershed per request. This can be used in conjunction with `nhdplusTools` function `get_waterbodies` to map lake features for which `LakeCat` metrics are requested as shown below. + +```{r get_lake} +lake <- nhdplusTools::get_waterbodies(id = 19334077) +``` + +```{r get_watershed} +tictoc::tic() +ws <- lc_get_watershed(comid = 19334077) +tictoc::toc() +``` + +### Adding a HUC2 query parameter and using multi-threading speeds the process significantly +```{r get_lake_and_watershed_faster} +tictoc::tic() +ws <- lc_get_watershed(comid = 19334077, huc2 = "01",huc2_filter = "01", + threads = 2,retries = 5) +tictoc::toc() +``` + +### View lake with watershed +```{r view_lake_watershed} +m1 <- mapview::mapview(ws, + col.regions = "blue", + alpha.regions = 0.1, + color = "blue", + alpha = 0.8, + lwd = 2, + layer.name = "Watershed") + + +m2 <- mapview::mapview(lake, + col.regions = "blue", + alpha.regions = 0.5, + color = "blue", + alpha = 0.8, + layer.name = "Lake") + + +mapview::m1 + m2 +``` + From 39938c8e8f6d48f9aa523bdc7c881a238fa9a558 Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 13 May 2026 14:23:06 -0700 Subject: [PATCH 03/43] A few updates to clear warnings with merged PR for new lakecat watershed function --- DESCRIPTION | 1 + NEWS.md | 8 +++++ R/lc_get_params.R | 2 +- R/lc_get_watershed.R | 2 +- R/sc_get_params.R | 2 +- cran-comments.md | 15 ++++----- man/lc_get_watershed.Rd | 73 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 man/lc_get_watershed.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 85b5059..19d58c3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -71,6 +71,7 @@ Suggests: DBI, duckdb, tictoc, + stats, Encoding: UTF-8 URL: https://usepa.github.io/StreamCatTools/, https://github.com/USEPA/StreamCatTools BugReports: https://github.com/USEPA/StreamCatTools/issues diff --git a/NEWS.md b/NEWS.md index 40491ca..40241d8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,11 @@ +# StreamCatTools 0.11.0 + +- Adds new `lc_get_watershed` function to return a lake watershed as an `sf` + feature for a LakeCat (NHDPlusV2 Waterbody) COMID from an S3-hosted, + HUC2-partitioned GeoParquet dataset +- Uses optional HUC2 query as well as retries, multi-threading and `duckdb` + to speed up retrieval of spatial data from AWS S3 bucket + # StreamCatTools 0.10.0 - Adds new functions `sc_get_nni()` and `lc_get_nni()` for ease of access to diff --git a/R/lc_get_params.R b/R/lc_get_params.R index d7366e2..4d01fd1 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -80,7 +80,7 @@ lc_get_params <- function(param = NULL) { } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) - params <- params |> dplyr::select(-fips_str) + params <- params |> dplyr::select(params, -dplyr::any_of("fips_str")) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] } diff --git a/R/lc_get_watershed.R b/R/lc_get_watershed.R index cf1c902..01d4819 100644 --- a/R/lc_get_watershed.R +++ b/R/lc_get_watershed.R @@ -130,7 +130,7 @@ lc_get_watershed <- function( bump() # --- Retry helper for transient HTTP timeouts --- - sleep_time <- function(k) min(retry_max_delay, retry_base_delay * (2^(k - 1))) * runif(1, 0.9, 1.1) + sleep_time <- function(k) min(retry_max_delay, retry_base_delay * (2^(k - 1))) * stats::runif(1, 0.9, 1.1) db_get_query_retry <- function(sql) { for (k in seq_len(retries)) { out <- try(DBI::dbGetQuery(con, sql), silent = TRUE) diff --git a/R/sc_get_params.R b/R/sc_get_params.R index efe4859..2091ae6 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -78,7 +78,7 @@ sc_get_params <- function(param = NULL) { } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) - params <- params |> dplyr::select(-fips_str) + params <- params |> dplyr::select(params, -dplyr::any_of("fips_str")) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] } diff --git a/cran-comments.md b/cran-comments.md index 97e3f25..fa1d76e 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,11 +1,8 @@ -This is a patch update that: +This is a minor update that: -- Adds new functions `sc_get_nni()` and `lc_get_nni()` for ease of access to - National Nutrient Inventory data in StreamCat -- Adds new functions `sc_plot()` and `lc_plot` for plotting nitrogen and - phosphorus budgets for watersheds -- Adds a new article describing functions for plotting National Nutrient - Inventory data in StreamCat +- Adds new `lc_get_watershed` function to return a lake watershed as an `sf` + feature for a LakeCat (NHDPlusV2 Waterbody) COMID from an S3-hosted, + HUC2-partitioned GeoParquet dataset ------- @@ -16,8 +13,8 @@ This is a resubmission. ## R CMD check results Here is the output from `devtools::check()` on R Version R version 4.5.2, -devtools version 2.4.6, and Windows 11 x64 operating system +devtools version 2.5.0, and Windows 11 x64 operating system -Duration: 3m 55s +Duration: 2m 18.5s 0 errors ✔ | 0 warnings ✔ | 0 notes ✔ diff --git a/man/lc_get_watershed.Rd b/man/lc_get_watershed.Rd new file mode 100644 index 0000000..dd72eb1 --- /dev/null +++ b/man/lc_get_watershed.Rd @@ -0,0 +1,73 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/lc_get_watershed.R +\name{lc_get_watershed} +\alias{lc_get_watershed} +\title{Get LakeCat Lake Watershed} +\usage{ +lc_get_watershed( + comid, + huc2 = NA_character_, + huc2_filter = NULL, + bucket = "dmap-data-commons-ow", + prefix = "data/streamcat/LakeCatWatersheds/", + region = "us-east-1", + install_missing = FALSE, + keep_open = FALSE, + verbose = TRUE, + progress = TRUE, + threads = 4, + enable_object_cache = TRUE, + skip_describe = FALSE, + skip_counts = TRUE, + sf_crs = 4326, + retries = 5, + retry_base_delay = 0.5, + retry_max_delay = 8, + url_style = c("path", "virtual_hosted"), + s3_endpoint = NULL +) +} +\arguments{ +\item{comid}{Scalar COMID to query (numeric or character, required).} + +\item{huc2}{Optional two-digit HUC2 string (e.g., "01") to restrict search to one partition.} + +\item{huc2_filter}{Optional character vector of HUC2s to read (e.g., c("01","05")) for multi-partition pruning.} + +\item{bucket}{Character(1). S3 bucket (default "dmap-data-commons-ow").} + +\item{prefix}{Character(1). S3 prefix under the bucket (default "data/streamcat/LakeCatWatersheds/").} + +\item{region}{Character(1). S3 region (default "us-east-1").} + +\item{install_missing}{Logical. Install missing packages (duckdb, DBI, sf, wk) if needed (default FALSE).} + +\item{keep_open}{Logical. Keep the DuckDB connection open (default FALSE). Note: the connection is not returned.} + +\item{verbose}{Logical. Print progress messages (default TRUE).} + +\item{progress}{Logical. Show a simple progress bar (default TRUE).} + +\item{threads}{Integer or NULL. If set, `PRAGMA threads` for DuckDB (parallelism).} + +\item{enable_object_cache}{Logical. Enable DuckDB object cache to speed repeated queries (default TRUE).} + +\item{skip_describe}{Logical. Skip DESCRIBE step (default FALSE).} + +\item{skip_counts}{Logical. Skip HUC2 counts step (default TRUE; no longer returned).} + +\item{sf_crs}{Integer or character. CRS for the output sf object (default 4326).} +} +\value{ +An sf object with zero or one+ rows (if multiple features share the same COMID). +} +\description{ +Lookup function for a single COMID from S3 GeoParquet (optionally restricted to one HUC2). +Queries one COMID from an S3-hosted, HUC2-partitioned GeoParquet dataset and returns an sf object. +If `huc2` is provided, only that partition is scanned (fastest). If not, the function tries +a glob over all HUC2 partitions and falls back to a shallower pattern if needed. +The function: +- loads DuckDB httpfs (S3) extension, +- pushes an equality filter on `COMID` for row-group/file pruning, +- converts WKB geometry to sf with the CRS you provide (default EPSG:4326). +} From 6193c7991fef8467bdce59bd59f5092529487c21 Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 13 May 2026 14:26:27 -0700 Subject: [PATCH 04/43] typo in CRAN comments --- cran-comments.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cran-comments.md b/cran-comments.md index fa1d76e..0e8cf2d 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -12,7 +12,7 @@ This is a resubmission. ## R CMD check results -Here is the output from `devtools::check()` on R Version R version 4.5.2, +Here is the output from `devtools::check()` on R Version 4.5.2, devtools version 2.5.0, and Windows 11 x64 operating system Duration: 2m 18.5s From 40723a1894269deae851e8b1532b90d86ed53378 Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 13 May 2026 15:17:12 -0700 Subject: [PATCH 05/43] fixed a couple warnings --- R/lc_get_params.R | 10 +++++----- R/sc_get_params.R | 10 +++++----- R/sc_plot.R | 5 ++++- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/R/lc_get_params.R b/R/lc_get_params.R index 4d01fd1..85a5699 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -46,7 +46,7 @@ lc_get_params <- function(param = NULL) { } else if(param == 'variable_info') { params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) |> dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, @@ -57,14 +57,14 @@ lc_get_params <- function(param = NULL) { } else if(param == 'categories'){ params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) |> dplyr::select(INDICATOR_CATEGORY) params <- sort(unique(params$INDICATOR_CATEGORY)) } else if(param == 'datasets'){ params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) |> dplyr::select(DSNAME) params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) @@ -80,7 +80,7 @@ lc_get_params <- function(param = NULL) { } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) - params <- params |> dplyr::select(params, -dplyr::any_of("fips_str")) + params <- params |> dplyr::select(-dplyr::any_of("fips_str")) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] } @@ -168,7 +168,7 @@ lc_get_metric_names <- function(category = NULL, resp <- tryCatch({ params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) },error = function(e) { message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) diff --git a/R/sc_get_params.R b/R/sc_get_params.R index 2091ae6..95ced4b 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -44,7 +44,7 @@ sc_get_params <- function(param = NULL) { } else if(param == 'variable_info') { params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) |> dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, @@ -55,14 +55,14 @@ sc_get_params <- function(param = NULL) { } else if(param == 'categories'){ params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) |> dplyr::select(INDICATOR_CATEGORY) params <- sort(unique(params$INDICATOR_CATEGORY)) } else if(param == 'datasets'){ params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) |> dplyr::select(DSNAME) params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) @@ -78,7 +78,7 @@ sc_get_params <- function(param = NULL) { } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) - params <- params |> dplyr::select(params, -dplyr::any_of("fips_str")) + params <- params |> dplyr::select(-dplyr::any_of("fips_str")) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] } @@ -171,7 +171,7 @@ sc_get_metric_names <- function(category = NULL, resp <- tryCatch({ params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> - httr2::resp_body_string() |> + httr2::resp_body_raw() |> readr::read_csv(show_col_types = FALSE) },error = function(e) { message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) diff --git a/R/sc_plot.R b/R/sc_plot.R index 59ee018..5713f74 100644 --- a/R/sc_plot.R +++ b/R/sc_plot.R @@ -206,7 +206,10 @@ sc_plotnni <- function(comid, include.nue = FALSE, include.inset = TRUE){ #comid comidint <- as.integer(comid) flowline <- nhdplusTools::get_nhdplus(comid = comidint, realization = "flowline") - point <- sf::st_centroid(flowline) + point <- flowline |> + sf::st_geometry() |> + sf::st_centroid() |> + sf::st_as_sf() #create N bar plot nbar <- ggplot() + From 2b86804602a1c31b8a4a7fc2ede33c22a9a7023a Mon Sep 17 00:00:00 2001 From: Weber Date: Thu, 14 May 2026 10:33:39 -0700 Subject: [PATCH 06/43] A few final fixes for latest update --- DESCRIPTION | 1 + R/lc_get_data.R | 15 +++++++++++++++ R/lc_get_watershed.R | 9 ++++++++- man/lc_get_nlcd.Rd | 15 +++++++++++++++ man/lc_get_watershed.Rd | 12 ++++++++++++ 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 19d58c3..fd5aec4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -72,6 +72,7 @@ Suggests: duckdb, tictoc, stats, + wk Encoding: UTF-8 URL: https://usepa.github.io/StreamCatTools/, https://github.com/USEPA/StreamCatTools BugReports: https://github.com/USEPA/StreamCatTools/issues diff --git a/R/lc_get_data.R b/R/lc_get_data.R index 16f2eea..af6f99b 100644 --- a/R/lc_get_data.R +++ b/R/lc_get_data.R @@ -191,6 +191,21 @@ lc_get_data <- function(comid = NULL, #' @param comid Return metric information for specific COMIDs #' Syntax: comid=, #' +#' @param state Return metric information for COMIDs within a specific state. Use a state's abbreviation to +#' query for a given state. +#' Syntax: state=, +#' +#' @param county Return metric information for COMIDs within a specific county. +#' Users must use the FIPS code, not county name, as a way to disambiguate counties. +#' Syntax: county=, +#' +#' @param region Return metric information for COMIDs within a specified hydroregion. +#' Syntax: region=, +#' +#' @param conus Return all COMIDs in the conterminous United States. +#' The default value is false. +#' Values: true|false +#' #' @param showAreaSqKm Return the area in square kilometers of a given area of interest. #' The default value is false. #' Values: true|false diff --git a/R/lc_get_watershed.R b/R/lc_get_watershed.R index 01d4819..399b32b 100644 --- a/R/lc_get_watershed.R +++ b/R/lc_get_watershed.R @@ -25,6 +25,13 @@ #' @param skip_describe Logical. Skip DESCRIBE step (default FALSE). #' @param skip_counts Logical. Skip HUC2 counts step (default TRUE; no longer returned). #' @param sf_crs Integer or character. CRS for the output sf object (default 4326). +#' @param retries Integer. Number of retries for transient S3/HTTP errors (default 5). +#' @param retry_base_delay Numeric. Initial exponential backoff delay in seconds (default 0.5). +#' @param retry_max_delay Numeric. Maximum backoff delay per attempt in seconds (default 8). +#' @param url_style Character. S3 URL style used by DuckDB httpfs, one of "path" or "virtual_hosted". +#' Passed to `match.arg()`, default "path". +#' @param s3_endpoint Optional character(1). Custom S3 endpoint hostname (e.g., "s3.amazonaws.com"). +#' NULL uses the default for the selected region. #' #' @return An sf object with zero or one+ rows (if multiple features share the same COMID). #' @export @@ -67,7 +74,7 @@ lc_get_watershed <- function( if (!all(have)) { missing <- needed[!have] if (isTRUE(install_missing)) { - install.packages(missing, repos = "https://cloud.r-project.org") + utils::install.packages(missing, repos = "https://cloud.r-project.org") have <- vapply(needed, requireNamespace, logical(1), quietly = TRUE) if (!all(have)) stop("Could not load packages after installation: ", paste(needed[!have], collapse = ", ")) } else { diff --git a/man/lc_get_nlcd.Rd b/man/lc_get_nlcd.Rd index c9c302c..14aba5e 100644 --- a/man/lc_get_nlcd.Rd +++ b/man/lc_get_nlcd.Rd @@ -38,6 +38,21 @@ Values: true|false} \item{showPctFull}{Return the pctfull for each dataset. The default value is false. Values: true|false} +\item{state}{Return metric information for COMIDs within a specific state. Use a state's abbreviation to +query for a given state. +Syntax: state=,} + +\item{county}{Return metric information for COMIDs within a specific county. +Users must use the FIPS code, not county name, as a way to disambiguate counties. +Syntax: county=,} + +\item{region}{Return metric information for COMIDs within a specified hydroregion. +Syntax: region=,} + +\item{conus}{Return all COMIDs in the conterminous United States. +The default value is false. +Values: true|false} + \item{countOnly}{Return a CSV containing only the row count (ROWCOUNT) and the column count (COLUMNCOUNT) that the server expects to return in a request. The default value is false. Values: true|false} diff --git a/man/lc_get_watershed.Rd b/man/lc_get_watershed.Rd index dd72eb1..292777c 100644 --- a/man/lc_get_watershed.Rd +++ b/man/lc_get_watershed.Rd @@ -57,6 +57,18 @@ lc_get_watershed( \item{skip_counts}{Logical. Skip HUC2 counts step (default TRUE; no longer returned).} \item{sf_crs}{Integer or character. CRS for the output sf object (default 4326).} + +\item{retries}{Integer. Number of retries for transient S3/HTTP errors (default 5).} + +\item{retry_base_delay}{Numeric. Initial exponential backoff delay in seconds (default 0.5).} + +\item{retry_max_delay}{Numeric. Maximum backoff delay per attempt in seconds (default 8).} + +\item{url_style}{Character. S3 URL style used by DuckDB httpfs, one of "path" or "virtual_hosted". +Passed to `match.arg()`, default "path".} + +\item{s3_endpoint}{Optional character(1). Custom S3 endpoint hostname (e.g., "s3.amazonaws.com"). +NULL uses the default for the selected region.} } \value{ An sf object with zero or one+ rows (if multiple features share the same COMID). From 8cb6d3a66ee17cf026dc003581dc2b5e06cb959f Mon Sep 17 00:00:00 2001 From: Weber Date: Thu, 14 May 2026 14:41:10 -0700 Subject: [PATCH 07/43] version update in Description --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index fd5aec4..c804fdb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: StreamCatTools Type: Package Title: 'StreamCatTools' -Version: 0.10.0 +Version: 0.11.0 Authors@R: c(person(given = "Marc", family = "Weber", role = c("aut", "cre"), From 194d571084b5d7e06b7c4bb2b6811b16e32c7801 Mon Sep 17 00:00:00 2001 From: Weber Date: Fri, 22 May 2026 10:05:04 -0700 Subject: [PATCH 08/43] fix to LakeCat.Rmd from master branch --- vignettes/Articles/LakeCat.Rmd | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/vignettes/Articles/LakeCat.Rmd b/vignettes/Articles/LakeCat.Rmd index 1bf7e69..c095174 100644 --- a/vignettes/Articles/LakeCat.Rmd +++ b/vignettes/Articles/LakeCat.Rmd @@ -139,23 +139,19 @@ tictoc::toc() ### View lake with watershed ```{r view_lake_watershed} -m1 <- mapview::mapview(ws, - col.regions = "blue", - alpha.regions = 0.1, - color = "blue", - alpha = 0.8, - lwd = 2, - layer.name = "Watershed") +mapview::mapview(ws, + col.regions = "blue", + alpha.regions = 0.1, + color = "blue", + alpha = 0.8, + lwd = 2, + layer.name = "Watershed") + +mapview::mapview(lake, + col.regions = "blue", + alpha.regions = 0.5, + color = "blue", + alpha = 0.8, + layer.name = "Lake") - -m2 <- mapview::mapview(lake, - col.regions = "blue", - alpha.regions = 0.5, - color = "blue", - alpha = 0.8, - layer.name = "Lake") - - -mapview::m1 + m2 ``` From 6edce428b20f73c11181d13feaf3355103ff1f07 Mon Sep 17 00:00:00 2001 From: Weber Date: Fri, 22 May 2026 10:33:15 -0700 Subject: [PATCH 09/43] pkgdown updates --- docs/404.html | 2 +- docs/LICENSE.html | 2 +- docs/articles/Applications.html | 192 -- .../HomeButton-0.0.1/LICENSE | 7 - .../HomeButton-0.0.1/easy-button-src.min.js | 1 - .../HomeButton-0.0.1/glyphicons-21-home.png | Bin 1266 -> 0 bytes .../HomeButton-0.0.1/home-button.js | 40 - .../Proj4Leaflet-1.0.1/proj4leaflet.js | 272 -- .../basin-CSS-0.0.1/basin_home-button.css | 3 - .../clipboard-0.0.1/setClipboardText.js | 51 - .../figure-html/nars_ggplot-1.png | Bin 50652 -> 0 bytes ...wline_nldi___PCTIMP2011CAT_home-button.css | 3 - .../htmltools-fill-0.5.8.1/fill.css | 21 - .../htmlwidgets-1.6.1/htmlwidgets.js | 901 ------ .../htmlwidgets-1.6.2/htmlwidgets.js | 901 ------ .../htmlwidgets-1.6.4/htmlwidgets.js | 901 ------ .../leaflet-1.3.1/images/layers-2x.png | Bin 1259 -> 0 bytes .../leaflet-1.3.1/images/layers.png | Bin 696 -> 0 bytes .../leaflet-1.3.1/images/marker-icon-2x.png | Bin 2464 -> 0 bytes .../leaflet-1.3.1/images/marker-icon.png | Bin 1466 -> 0 bytes .../leaflet-1.3.1/images/marker-shadow.png | Bin 618 -> 0 bytes .../leaflet-1.3.1/leaflet.css | 636 ---- .../leaflet-1.3.1/leaflet.js | 5 - .../leaflet-binding-2.1.1/leaflet.js | 2785 ---------------- .../leaflet-binding-2.2.0/leaflet.js | 2789 ----------------- .../leaflet-binding-2.2.1/leaflet.js | 2789 ----------------- .../leaflet-binding-2.2.2/leaflet.js | 2787 ---------------- .../leaflet-binding-2.2.3/leaflet.js | 2787 ---------------- .../leaflet-providers_1.13.0.js | 1100 ------- .../leaflet-providers_1.9.0.js | 855 ----- .../leaflet-providers_2.0.0.js | 1178 ------- .../leaflet-providers-plugin.js | 3 - .../leaflet-providers-plugin.js | 3 - .../leaflet-providers-plugin.js | 3 - .../leaflet-providers-plugin.js | 3 - .../leaflet-providers-plugin.js | 3 - .../leafletfix-1.0.0/leafletfix.css | 36 - .../mapviewCSS-0.0.1/mapview-popup.css | 102 - .../mapviewCSS-0.0.1/mapview.css | 1 - .../proj4-2.6.2/proj4.min.js | 1 - .../rstudio_leaflet-1.3.1/images/1px.png | Bin 68 -> 0 bytes .../rstudio_leaflet-1.3.1/rstudio_leaflet.css | 41 - docs/articles/Articles/Applications.html | 6 +- docs/articles/Articles/Introduction.html | 16 +- docs/articles/Articles/LakeCat.html | 78 +- docs/articles/Articles/NNI.html | 2 +- .../Articles/NNI_files/figure-html/map1-1.png | Bin 161138 -> 161140 bytes .../Articles/NNI_files/figure-html/map2-1.png | Bin 144776 -> 144837 bytes .../Articles/NNI_files/figure-html/map3-1.png | Bin 165154 -> 165134 bytes docs/articles/Introduction.html | 2651 ---------------- .../HomeButton-0.0.1/LICENSE | 7 - .../HomeButton-0.0.1/easy-button-src.min.js | 1 - .../HomeButton-0.0.1/glyphicons-21-home.png | Bin 1266 -> 0 bytes .../HomeButton-0.0.1/home-button.css | 69 - .../HomeButton-0.0.1/home-button.js | 40 - .../Proj4Leaflet-1.0.1/proj4leaflet.js | 272 -- .../clipboard-0.0.1/setClipboardText.js | 51 - .../figure-html/Example Eight ggplot-1.png | Bin 5588 -> 0 bytes .../figure-html/Example_Eight_ggplot-1.png | Bin 39678 -> 0 bytes .../htmlwidgets-1.5.4/htmlwidgets.js | 903 ------ .../leaflet-1.3.1/images/layers-2x.png | Bin 1259 -> 0 bytes .../leaflet-1.3.1/images/layers.png | Bin 696 -> 0 bytes .../leaflet-1.3.1/images/marker-icon-2x.png | Bin 2464 -> 0 bytes .../leaflet-1.3.1/images/marker-icon.png | Bin 1466 -> 0 bytes .../leaflet-1.3.1/images/marker-shadow.png | Bin 618 -> 0 bytes .../leaflet-1.3.1/leaflet.css | 636 ---- .../leaflet-1.3.1/leaflet.js | 5 - .../leaflet-binding-2.1.1/leaflet.js | 2785 ---------------- .../leaflet-providers_1.9.0.js | 855 ----- .../leaflet-providers-plugin.js | 3 - .../leafletfix-1.0.0/leafletfix.css | 36 - .../mapviewCSS-0.0.1/mapview-popup.css | 102 - .../mapviewCSS-0.0.1/mapview.css | 1 - .../proj4-2.6.2/proj4.min.js | 1 - .../rstudio_leaflet-1.3.1/images/1px.png | Bin 68 -> 0 bytes .../rstudio_leaflet-1.3.1/rstudio_leaflet.css | 41 - docs/articles/LakeCat.html | 431 --- docs/articles/StartHere.html | 4 +- docs/articles/index.html | 2 +- docs/authors.html | 6 +- docs/deps/bootstrap-5.3.1/bootstrap.min.css | 2 +- docs/index.html | 2 +- docs/news/index.html | 7 +- docs/pkgdown.yml | 2 +- docs/reference/index.html | 16 +- docs/reference/lc_fullname.html | 2 +- docs/reference/lc_get_comid.html | 2 +- docs/reference/lc_get_data.html | 2 +- docs/reference/lc_get_metric_names.html | 2 +- docs/reference/lc_get_nlcd.html | 40 +- docs/reference/lc_get_nni.html | 2 +- docs/reference/lc_get_params.html | 2 +- docs/reference/lc_plotnni.html | 2 +- docs/reference/sc_fullname.html | 2 +- docs/reference/sc_get_comid.html | 2 +- docs/reference/sc_get_data.html | 4 +- docs/reference/sc_get_metric_names.html | 2 +- docs/reference/sc_get_nlcd.html | 6 +- docs/reference/sc_get_nni.html | 2 +- docs/reference/sc_get_params.html | 2 +- docs/reference/sc_plotnni.html | 2 +- docs/search.json | 2 +- docs/sitemap.xml | 5 +- 103 files changed, 166 insertions(+), 30154 deletions(-) delete mode 100644 docs/articles/Applications.html delete mode 100644 docs/articles/Applications_files/HomeButton-0.0.1/LICENSE delete mode 100644 docs/articles/Applications_files/HomeButton-0.0.1/easy-button-src.min.js delete mode 100644 docs/articles/Applications_files/HomeButton-0.0.1/glyphicons-21-home.png delete mode 100644 docs/articles/Applications_files/HomeButton-0.0.1/home-button.js delete mode 100644 docs/articles/Applications_files/Proj4Leaflet-1.0.1/proj4leaflet.js delete mode 100644 docs/articles/Applications_files/basin-CSS-0.0.1/basin_home-button.css delete mode 100644 docs/articles/Applications_files/clipboard-0.0.1/setClipboardText.js delete mode 100644 docs/articles/Applications_files/figure-html/nars_ggplot-1.png delete mode 100644 docs/articles/Applications_files/flowline_nldi___PCTIMP2011CAT-CSS-0.0.1/flowline_nldi___PCTIMP2011CAT_home-button.css delete mode 100644 docs/articles/Applications_files/htmltools-fill-0.5.8.1/fill.css delete mode 100644 docs/articles/Applications_files/htmlwidgets-1.6.1/htmlwidgets.js delete mode 100644 docs/articles/Applications_files/htmlwidgets-1.6.2/htmlwidgets.js delete mode 100644 docs/articles/Applications_files/htmlwidgets-1.6.4/htmlwidgets.js delete mode 100644 docs/articles/Applications_files/leaflet-1.3.1/images/layers-2x.png delete mode 100644 docs/articles/Applications_files/leaflet-1.3.1/images/layers.png delete mode 100644 docs/articles/Applications_files/leaflet-1.3.1/images/marker-icon-2x.png delete mode 100644 docs/articles/Applications_files/leaflet-1.3.1/images/marker-icon.png delete mode 100644 docs/articles/Applications_files/leaflet-1.3.1/images/marker-shadow.png delete mode 100644 docs/articles/Applications_files/leaflet-1.3.1/leaflet.css delete mode 100644 docs/articles/Applications_files/leaflet-1.3.1/leaflet.js delete mode 100644 docs/articles/Applications_files/leaflet-binding-2.1.1/leaflet.js delete mode 100644 docs/articles/Applications_files/leaflet-binding-2.2.0/leaflet.js delete mode 100644 docs/articles/Applications_files/leaflet-binding-2.2.1/leaflet.js delete mode 100644 docs/articles/Applications_files/leaflet-binding-2.2.2/leaflet.js delete mode 100644 docs/articles/Applications_files/leaflet-binding-2.2.3/leaflet.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-1.13.0/leaflet-providers_1.13.0.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-plugin-2.2.0/leaflet-providers-plugin.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-plugin-2.2.2/leaflet-providers-plugin.js delete mode 100644 docs/articles/Applications_files/leaflet-providers-plugin-2.2.3/leaflet-providers-plugin.js delete mode 100644 docs/articles/Applications_files/leafletfix-1.0.0/leafletfix.css delete mode 100644 docs/articles/Applications_files/mapviewCSS-0.0.1/mapview-popup.css delete mode 100644 docs/articles/Applications_files/mapviewCSS-0.0.1/mapview.css delete mode 100644 docs/articles/Applications_files/proj4-2.6.2/proj4.min.js delete mode 100644 docs/articles/Applications_files/rstudio_leaflet-1.3.1/images/1px.png delete mode 100644 docs/articles/Applications_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css delete mode 100644 docs/articles/Introduction.html delete mode 100644 docs/articles/Introduction_files/HomeButton-0.0.1/LICENSE delete mode 100644 docs/articles/Introduction_files/HomeButton-0.0.1/easy-button-src.min.js delete mode 100644 docs/articles/Introduction_files/HomeButton-0.0.1/glyphicons-21-home.png delete mode 100644 docs/articles/Introduction_files/HomeButton-0.0.1/home-button.css delete mode 100644 docs/articles/Introduction_files/HomeButton-0.0.1/home-button.js delete mode 100644 docs/articles/Introduction_files/Proj4Leaflet-1.0.1/proj4leaflet.js delete mode 100644 docs/articles/Introduction_files/clipboard-0.0.1/setClipboardText.js delete mode 100644 docs/articles/Introduction_files/figure-html/Example Eight ggplot-1.png delete mode 100644 docs/articles/Introduction_files/figure-html/Example_Eight_ggplot-1.png delete mode 100644 docs/articles/Introduction_files/htmlwidgets-1.5.4/htmlwidgets.js delete mode 100644 docs/articles/Introduction_files/leaflet-1.3.1/images/layers-2x.png delete mode 100644 docs/articles/Introduction_files/leaflet-1.3.1/images/layers.png delete mode 100644 docs/articles/Introduction_files/leaflet-1.3.1/images/marker-icon-2x.png delete mode 100644 docs/articles/Introduction_files/leaflet-1.3.1/images/marker-icon.png delete mode 100644 docs/articles/Introduction_files/leaflet-1.3.1/images/marker-shadow.png delete mode 100644 docs/articles/Introduction_files/leaflet-1.3.1/leaflet.css delete mode 100644 docs/articles/Introduction_files/leaflet-1.3.1/leaflet.js delete mode 100644 docs/articles/Introduction_files/leaflet-binding-2.1.1/leaflet.js delete mode 100644 docs/articles/Introduction_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js delete mode 100644 docs/articles/Introduction_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js delete mode 100644 docs/articles/Introduction_files/leafletfix-1.0.0/leafletfix.css delete mode 100644 docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview-popup.css delete mode 100644 docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview.css delete mode 100644 docs/articles/Introduction_files/proj4-2.6.2/proj4.min.js delete mode 100644 docs/articles/Introduction_files/rstudio_leaflet-1.3.1/images/1px.png delete mode 100644 docs/articles/Introduction_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css delete mode 100644 docs/articles/LakeCat.html diff --git a/docs/404.html b/docs/404.html index 30da3c0..c4f59c3 100644 --- a/docs/404.html +++ b/docs/404.html @@ -26,7 +26,7 @@ StreamCatTools - 0.10.0 + 0.11.0 - - - - - -
- - - - - - - - - - - -
-
- - - -
-

Plotting watershed data -

-

In this example we access a single variable for the Calapooia River -using sc_get_data function. We then use the -nhdplusTools library to grab flowlines and watershed for -the Calapooia, plot the selected StreamCat metric for the Calapooia -River and show the watershed.

-
-library(StreamCatTools)
-start_comid = 23763517
-nldi_feature <- list(featureSource = "comid", featureID = start_comid)
-
-flowline_nldi <- nhdplusTools::navigate_nldi(nldi_feature, mode = "UT", data_source = "flowlines", distance=5000)
-
-# get StreamCat metrics
-df <- sc_get_data(metric='pctimp2011', aoi='cat', comid=flowline_nldi$UT_flowlines$nhdplus_comid)
-
-# We can also pull out comids the following way:
-# comids <- paste(as.integer(flowline_nldi$UT_flowlines$nhdplus_comid), collapse=",",sep="")
-# df <- sc_get_data(metric='pctimp2011', aoi='cat', comid=comids)
-
-flowline_nldi <- flowline_nldi$UT_flowlines
-flowline_nldi$PCTIMP2011CAT <- df$pctimp2011cat[match(flowline_nldi$nhdplus_comid, df$comid)]
-
-basin <- nhdplusTools::get_nldi_basin(nldi_feature = nldi_feature)
-
-library(mapview)
-mapview::mapviewOptions(fgb=FALSE)
-mapview::mapview(basin, alpha.regions=.08) + mapview::mapview(flowline_nldi, zcol = "PCTIMP2011CAT", legend = TRUE)
-
- -
-
-

Working with NARS data -

-

In this example we demonstrate a data ‘mashup’ by grabbing NRSA data -from the EPA National Aquatic Resource Surveys (NARS) website directly -in R, pull particular StreamCat metrics for sites using -sc_get_data, and compare landscape metrics with other NRSA -metrics

-
-nrsa <- readr::read_csv("https://www.epa.gov/sites/production/files/2015-09/siteinfo_0.csv")
-
-dplyr::glimpse(nrsa)
-
-# Promote data frame to sf spatial points data frame
-nrsa_sf <- sf::st_as_sf(nrsa, coords = c("LON_DD83", "LAT_DD83"), crs = 4269)
-
-# Get COMIDs using nhdplusTools package
-# nrsa$COMID<- NA
-# for (i in 1:nrow(nrsa_sf)){
-#   print (i)
-#   nrsa_sf[i,'COMID'] <- discover_nhdplus_id(nrsa_sf[i,c('geometry')])
-# }
-load(system.file("extdata", "sample_nrsa_data.rda", package="StreamCatTools"))
-
-# get particular StreamCat data for all these NRSA sites
-# nrsa_sf$COMID <- as.character(nrsa_sf$COMID)
-comids <- nrsa_sf$COMID
-comids <- comids[!is.na(comids)]
-comids <- comids[c(1:700)]
-comids <- paste(comids,collapse=',')
-df <- sc_get_data(metric='pctcrop2006', aoi='ws', comid=comids)
-
-# glimpse(df)
-df$COMID <- as.integer(df$comid)
-nrsa_sf <- dplyr::left_join(nrsa_sf, df, by='COMID')
-
-# download mmi from NARS web page
-library(dplyr)
-library(ggplot2)
-mmi <- readr::read_csv("https://www.epa.gov/sites/production/files/2015-09/bentcond.csv")
-# dplyr::glimpse(mmi)
-
-# join mmi to NARS info data frame with StreamCat PctCrop metric
-nrsa_sf <- dplyr::left_join(nrsa_sf, mmi[,c('SITE_ID','BENT_MMI_COND')], by='SITE_ID')
-bxplt <- nrsa_sf %>% 
-  tidyr::drop_na(BENT_MMI_COND) %>%
-  ggplot2::ggplot(aes(x=pctcrop2006ws, y=BENT_MMI_COND))+
-  ggplot2::geom_boxplot()+
-  ggplot2::ggtitle('NRSA Benthic MMI versus % Crop in Watershed from 2006 NLCD')
-suppressWarnings(print(bxplt))
-

NRSA Benthic MMI versus  % Crop in Watershed from 2006 NLCD.

-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/Applications_files/HomeButton-0.0.1/LICENSE b/docs/articles/Applications_files/HomeButton-0.0.1/LICENSE deleted file mode 100644 index a1d3414..0000000 --- a/docs/articles/Applications_files/HomeButton-0.0.1/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (C) 2014 Daniel Montague - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/articles/Applications_files/HomeButton-0.0.1/easy-button-src.min.js b/docs/articles/Applications_files/HomeButton-0.0.1/easy-button-src.min.js deleted file mode 100644 index 8270ab1..0000000 --- a/docs/articles/Applications_files/HomeButton-0.0.1/easy-button-src.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){function a(a,c){this.title=a.title,this.stateName=a.stateName?a.stateName:"unnamed-state",this.icon=L.DomUtil.create("span",""),L.DomUtil.addClass(this.icon,"button-state state-"+this.stateName.replace(/(^\s*|\s*$)/g,"")),this.icon.innerHTML=b(a.icon),this.onClick=L.Util.bind(a.onClick?a.onClick:function(){},c)}function b(a){var b;return a.match(/[&;=<>"']/)?b=a:(a=a.replace(/(^\s*|\s*$)/g,""),b=L.DomUtil.create("span",""),0===a.indexOf("fa-")?L.DomUtil.addClass(b,"fa "+a):0===a.indexOf("glyphicon-")?L.DomUtil.addClass(b,"glyphicon "+a):L.DomUtil.addClass(b,a),b=b.outerHTML),b}L.Control.EasyBar=L.Control.extend({options:{position:"bottomright",id:null,leafletClasses:!0},initialize:function(a,b){b&&L.Util.setOptions(this,b),this._buildContainer(),this._buttons=[];for(var c=0;cON$&;6fSWRh9-@I3zNyhOC<&ctLxqMV0vb1x~h|g>2cE2B#o=wx%YN=W$Ip>E|dXx`2hhTAOu7a0=ZSw-I+y5K~U`&X z=T#qWtY0jb7D^n)m7AB`HhZ68_v!hQ?D@ivSANMA)a%mCxJO4YC7grfEdrV$?2|Tu zc<1fk$Rfwh&HJ4$?Y7oz6o(a<+f>G3!q6PIxI9iE+9niik-i_*_`iSpnFl_u@mKYh z)Jp1P;9uHJ$>#2Q2kmYn3-ilMU~z0S2O*&ljKd(x>~W1R{Mt;;)gliH6S`gFk4SY} z8=xMi1n8BjfTXGc467pRhM^g607a5@QBp-!5){?eBwJI!dGQa_=79D&>;+=_>^#xtfz zDTGO@HFF$glR~kQiDQ_EazzruFwd*7&S;xFq48Afth194u}!jgm?GAX-nl85)$ZAW zriK{J?2=&`6nSDKl7NIHq8TG47mOHl`_0s64TOOkqhbEF>DKt+(8qRF_o}KTRn2O> zAy9F)K@jh$b;n$jsuydf*ICPJ;&8N!_-w(mOb6{G^ycArtDhm<;<|n zD5Ee!BoCTn{U_M!GqH9(C6LBxCys;ZsB8>k8fSwz0rh$@8sN1SM1GVjU(dTa;Y(8g z9fBKa9D<@9w*M3sY%B~(H=%$P!xS{FiUnwzOhTrFO}M2SYLB1b@v+h!jWg4*Op+-f z8)>+QWeEug5nYgF<`P;aW=GsZmT6hAC-EYqh>=Zw8j#8KIsu(XfuB#19l)s1N+n>@ zgTsLGOZ{Lc8TcrUvPChU&cJ7YLOQ~V$2=D5W8*xvWIK|Jv*l!m*?N(`KklCX%mSZecl#^g z{_U49|I@v`aGBfwwfq-%B6Uu#Y+jgqZf(AFXYa(VucN&+?z@kT!<$#Q@(-n3%MX;V zR?hE#u=ho|{_yjIe=q(A&c2tv^~y_U_8(nX_V&5wIq87lSMTHV`Cq8%t-If@UVHyB DN350C diff --git a/docs/articles/Applications_files/HomeButton-0.0.1/home-button.js b/docs/articles/Applications_files/HomeButton-0.0.1/home-button.js deleted file mode 100644 index a7a8e7f..0000000 --- a/docs/articles/Applications_files/HomeButton-0.0.1/home-button.js +++ /dev/null @@ -1,40 +0,0 @@ -LeafletWidget.methods.addHomeButton = function (xmin, ymin, xmax, ymax, useext, - group, label, icon, position) { - - if (this.easyButton) { - this.easyButton.removeFrom(this); - } - - var bx = []; - if (useext) { - bx = [[ymin, xmin], [ymax, xmax]]; - } else { - bx = this.layerManager._groupContainers[group].getBounds(); - } - - var easyButton = new L.easyButton({ - position: position, - states: [{ - stateName: label, // name the state - icon: icon, // and define its properties - title: label, // like its title - onClick: function(btn, map){ - map.fitBounds(bx, {maxZoom: 18}); - btn.state(label); - } - }] - }); - - easyButton.addTo(this); - - this.currentEasyButton = easyButton; - -}; - - -LeafletWidget.methods.removeHomeButton = function () { - if (this.currentEasyButton) { - this.currentEasyButton.removeFrom(this); - this.currentEasyButton = null; - } -}; diff --git a/docs/articles/Applications_files/Proj4Leaflet-1.0.1/proj4leaflet.js b/docs/articles/Applications_files/Proj4Leaflet-1.0.1/proj4leaflet.js deleted file mode 100644 index 5ce8d47..0000000 --- a/docs/articles/Applications_files/Proj4Leaflet-1.0.1/proj4leaflet.js +++ /dev/null @@ -1,272 +0,0 @@ -(function (factory) { - var L, proj4; - if (typeof define === 'function' && define.amd) { - // AMD - define(['leaflet', 'proj4'], factory); - } else if (typeof module === 'object' && typeof module.exports === "object") { - // Node/CommonJS - L = require('leaflet'); - proj4 = require('proj4'); - module.exports = factory(L, proj4); - } else { - // Browser globals - if (typeof window.L === 'undefined' || typeof window.proj4 === 'undefined') - throw 'Leaflet and proj4 must be loaded first'; - factory(window.L, window.proj4); - } -}(function (L, proj4) { - if (proj4.__esModule && proj4.default) { - // If proj4 was bundled as an ES6 module, unwrap it to get - // to the actual main proj4 object. - // See discussion in https://github.com/kartena/Proj4Leaflet/pull/147 - proj4 = proj4.default; - } - - L.Proj = {}; - - L.Proj._isProj4Obj = function(a) { - return (typeof a.inverse !== 'undefined' && - typeof a.forward !== 'undefined'); - }; - - L.Proj.Projection = L.Class.extend({ - initialize: function(code, def, bounds) { - var isP4 = L.Proj._isProj4Obj(code); - this._proj = isP4 ? code : this._projFromCodeDef(code, def); - this.bounds = isP4 ? def : bounds; - }, - - project: function (latlng) { - var point = this._proj.forward([latlng.lng, latlng.lat]); - return new L.Point(point[0], point[1]); - }, - - unproject: function (point, unbounded) { - var point2 = this._proj.inverse([point.x, point.y]); - return new L.LatLng(point2[1], point2[0], unbounded); - }, - - _projFromCodeDef: function(code, def) { - if (def) { - proj4.defs(code, def); - } else if (proj4.defs[code] === undefined) { - var urn = code.split(':'); - if (urn.length > 3) { - code = urn[urn.length - 3] + ':' + urn[urn.length - 1]; - } - if (proj4.defs[code] === undefined) { - throw 'No projection definition for code ' + code; - } - } - - return proj4(code); - } - }); - - L.Proj.CRS = L.Class.extend({ - includes: L.CRS, - - options: { - transformation: new L.Transformation(1, 0, -1, 0) - }, - - initialize: function(a, b, c) { - var code, - proj, - def, - options; - - if (L.Proj._isProj4Obj(a)) { - proj = a; - code = proj.srsCode; - options = b || {}; - - this.projection = new L.Proj.Projection(proj, options.bounds); - } else { - code = a; - def = b; - options = c || {}; - this.projection = new L.Proj.Projection(code, def, options.bounds); - } - - L.Util.setOptions(this, options); - this.code = code; - this.transformation = this.options.transformation; - - if (this.options.origin) { - this.transformation = - new L.Transformation(1, -this.options.origin[0], - -1, this.options.origin[1]); - } - - if (this.options.scales) { - this._scales = this.options.scales; - } else if (this.options.resolutions) { - this._scales = []; - for (var i = this.options.resolutions.length - 1; i >= 0; i--) { - if (this.options.resolutions[i]) { - this._scales[i] = 1 / this.options.resolutions[i]; - } - } - } - - this.infinite = !this.options.bounds; - - }, - - scale: function(zoom) { - var iZoom = Math.floor(zoom), - baseScale, - nextScale, - scaleDiff, - zDiff; - if (zoom === iZoom) { - return this._scales[zoom]; - } else { - // Non-integer zoom, interpolate - baseScale = this._scales[iZoom]; - nextScale = this._scales[iZoom + 1]; - scaleDiff = nextScale - baseScale; - zDiff = (zoom - iZoom); - return baseScale + scaleDiff * zDiff; - } - }, - - zoom: function(scale) { - // Find closest number in this._scales, down - var downScale = this._closestElement(this._scales, scale), - downZoom = this._scales.indexOf(downScale), - nextScale, - nextZoom, - scaleDiff; - // Check if scale is downScale => return array index - if (scale === downScale) { - return downZoom; - } - if (downScale === undefined) { - return -Infinity; - } - // Interpolate - nextZoom = downZoom + 1; - nextScale = this._scales[nextZoom]; - if (nextScale === undefined) { - return Infinity; - } - scaleDiff = nextScale - downScale; - return (scale - downScale) / scaleDiff + downZoom; - }, - - distance: L.CRS.Earth.distance, - - R: L.CRS.Earth.R, - - /* Get the closest lowest element in an array */ - _closestElement: function(array, element) { - var low; - for (var i = array.length; i--;) { - if (array[i] <= element && (low === undefined || low < array[i])) { - low = array[i]; - } - } - return low; - } - }); - - L.Proj.GeoJSON = L.GeoJSON.extend({ - initialize: function(geojson, options) { - this._callLevel = 0; - L.GeoJSON.prototype.initialize.call(this, geojson, options); - }, - - addData: function(geojson) { - var crs; - - if (geojson) { - if (geojson.crs && geojson.crs.type === 'name') { - crs = new L.Proj.CRS(geojson.crs.properties.name); - } else if (geojson.crs && geojson.crs.type) { - crs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code); - } - - if (crs !== undefined) { - this.options.coordsToLatLng = function(coords) { - var point = L.point(coords[0], coords[1]); - return crs.projection.unproject(point); - }; - } - } - - // Base class' addData might call us recursively, but - // CRS shouldn't be cleared in that case, since CRS applies - // to the whole GeoJSON, inluding sub-features. - this._callLevel++; - try { - L.GeoJSON.prototype.addData.call(this, geojson); - } finally { - this._callLevel--; - if (this._callLevel === 0) { - delete this.options.coordsToLatLng; - } - } - } - }); - - L.Proj.geoJson = function(geojson, options) { - return new L.Proj.GeoJSON(geojson, options); - }; - - L.Proj.ImageOverlay = L.ImageOverlay.extend({ - initialize: function (url, bounds, options) { - L.ImageOverlay.prototype.initialize.call(this, url, null, options); - this._projectedBounds = bounds; - }, - - // Danger ahead: Overriding internal methods in Leaflet. - // Decided to do this rather than making a copy of L.ImageOverlay - // and doing very tiny modifications to it. - // Future will tell if this was wise or not. - _animateZoom: function (event) { - var scale = this._map.getZoomScale(event.zoom); - var northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y); - var offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center); - - L.DomUtil.setTransform(this._image, offset, scale); - }, - - _reset: function () { - var zoom = this._map.getZoom(); - var pixelOrigin = this._map.getPixelOrigin(); - var bounds = L.bounds( - this._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin), - this._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin) - ); - var size = bounds.getSize(); - - L.DomUtil.setPosition(this._image, bounds.min); - this._image.style.width = size.x + 'px'; - this._image.style.height = size.y + 'px'; - }, - - _projectedToNewLayerPoint: function (point, zoom, center) { - var viewHalf = this._map.getSize()._divideBy(2); - var newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round(); - var topLeft = newTopLeft.add(this._map._getMapPanePos()); - - return this._transform(point, zoom)._subtract(topLeft); - }, - - _transform: function (point, zoom) { - var crs = this._map.options.crs; - var transformation = crs.transformation; - var scale = crs.scale(zoom); - - return transformation.transform(point, scale); - } - }); - - L.Proj.imageOverlay = function (url, bounds, options) { - return new L.Proj.ImageOverlay(url, bounds, options); - }; - - return L.Proj; -})); diff --git a/docs/articles/Applications_files/basin-CSS-0.0.1/basin_home-button.css b/docs/articles/Applications_files/basin-CSS-0.0.1/basin_home-button.css deleted file mode 100644 index 8566711..0000000 --- a/docs/articles/Applications_files/basin-CSS-0.0.1/basin_home-button.css +++ /dev/null @@ -1,3 +0,0 @@ -.leaflet-bar button {background-color:#ffffff95;border:none;width:100%;height:20px;line-height:15px;font-size:85%;text-align:center;text-decoration:none;color:black;cursor:pointer;overflow-x:visible;overflow-y:hidden;opacity:0.25;background-position:50% 50%;background-repeat:no-repeat;display:inline-block} - - .leaflet-bar button:hover {background-color:#00ffff;text-decoration:underline;opacity:0.9} diff --git a/docs/articles/Applications_files/clipboard-0.0.1/setClipboardText.js b/docs/articles/Applications_files/clipboard-0.0.1/setClipboardText.js deleted file mode 100644 index 919477d..0000000 --- a/docs/articles/Applications_files/clipboard-0.0.1/setClipboardText.js +++ /dev/null @@ -1,51 +0,0 @@ -// taken from -// https://ourcodeworld.com/articles/read/143/how-to-copy-text-to-clipboard-with-javascript-easily -function setClipboardText(text) { - var id = 'mycustom-clipboard-textarea-hidden-id'; - var existsTextarea = document.getElementById(id); - - if (!existsTextarea) { - console.log('Creating textarea'); - var textarea = document.createElement('textarea'); - textarea.id = id; - // Place in top-left corner of screen regardless of scroll position. - textarea.style.position = 'fixed'; - textarea.style.top = 0; - textarea.style.left = 0; - - // Ensure it has a small width and height. Setting to 1px / 1em - // doesn't work as this gives a negative w/h on some browsers. - textarea.style.width = '1px'; - textarea.style.height = '1px'; - - // We don't need padding, reducing the size if it does flash render. - textarea.style.padding = 0; - - // Clean up any borders. - textarea.style.border = 'none'; - textarea.style.outline = 'none'; - textarea.style.boxShadow = 'none'; - - // Avoid flash of white box if rendered for any reason. - textarea.style.background = 'transparent'; - document.querySelector('body').appendChild(textarea); - console.log('The textarea now exists :)'); - existsTextarea = document.getElementById(id); - } else { - console.log('The textarea already exists :3'); - } - - existsTextarea.value = text; - existsTextarea.select(); - - try { - var status = document.execCommand('copy'); - if (!status) { - console.error('Cannot copy text'); - } else { - console.log('The text is now on the clipboard'); - } - } catch (err) { - console.log('Unable to copy.'); - } -} diff --git a/docs/articles/Applications_files/figure-html/nars_ggplot-1.png b/docs/articles/Applications_files/figure-html/nars_ggplot-1.png deleted file mode 100644 index 9cc8c3eb1ef0e420e4578115f1b71e51054bd80d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50652 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

WaLJpjY9ul=w_+^lq0NUubd)_wiKesFxrPuwAO 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 .html-fill-item { - /* Fill items can grow and shrink freely within - available vertical space in fillable container */ - flex: 1 1 auto; - min-height: 0; - min-width: 0; - } - .html-fill-container > :not(.html-fill-item) { - /* Prevent shrinking or growing of non-fill items */ - flex: 0 0 auto; - } -} diff --git a/docs/articles/Applications_files/htmlwidgets-1.6.1/htmlwidgets.js b/docs/articles/Applications_files/htmlwidgets-1.6.1/htmlwidgets.js deleted file mode 100644 index 1067d02..0000000 --- a/docs/articles/Applications_files/htmlwidgets-1.6.1/htmlwidgets.js +++ /dev/null @@ -1,901 +0,0 @@ -(function() { - // If window.HTMLWidgets is already defined, then use it; otherwise create a - // new object. This allows preceding code to set options that affect the - // initialization process (though none currently exist). - window.HTMLWidgets = window.HTMLWidgets || {}; - - // See if we're running in a viewer pane. If not, we're in a web browser. - var viewerMode = window.HTMLWidgets.viewerMode = - /\bviewer_pane=1\b/.test(window.location); - - // See if we're running in Shiny mode. If not, it's a static document. - // Note that static widgets can appear in both Shiny and static modes, but - // obviously, Shiny widgets can only appear in Shiny apps/documents. - var shinyMode = window.HTMLWidgets.shinyMode = - typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; - - // We can't count on jQuery being available, so we implement our own - // version if necessary. - function querySelectorAll(scope, selector) { - if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { - return scope.find(selector); - } - if (scope.querySelectorAll) { - return scope.querySelectorAll(selector); - } - } - - function asArray(value) { - if (value === null) - return []; - if ($.isArray(value)) - return value; - return [value]; - } - - // Implement jQuery's extend - function extend(target /*, ... */) { - if (arguments.length == 1) { - return target; - } - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - } - return target; - } - - // IE8 doesn't support Array.forEach. - function forEach(values, callback, thisArg) { - if (values.forEach) { - values.forEach(callback, thisArg); - } else { - for (var i = 0; i < values.length; i++) { - callback.call(thisArg, values[i], i, values); - } - } - } - - // Replaces the specified method with the return value of funcSource. - // - // Note that funcSource should not BE the new method, it should be a function - // that RETURNS the new method. funcSource receives a single argument that is - // the overridden method, it can be called from the new method. The overridden - // method can be called like a regular function, it has the target permanently - // bound to it so "this" will work correctly. - function overrideMethod(target, methodName, funcSource) { - var superFunc = target[methodName] || function() {}; - var superFuncBound = function() { - return superFunc.apply(target, arguments); - }; - target[methodName] = funcSource(superFuncBound); - } - - // Add a method to delegator that, when invoked, calls - // delegatee.methodName. If there is no such method on - // the delegatee, but there was one on delegator before - // delegateMethod was called, then the original version - // is invoked instead. - // For example: - // - // var a = { - // method1: function() { console.log('a1'); } - // method2: function() { console.log('a2'); } - // }; - // var b = { - // method1: function() { console.log('b1'); } - // }; - // delegateMethod(a, b, "method1"); - // delegateMethod(a, b, "method2"); - // a.method1(); - // a.method2(); - // - // The output would be "b1", "a2". - function delegateMethod(delegator, delegatee, methodName) { - var inherited = delegator[methodName]; - delegator[methodName] = function() { - var target = delegatee; - var method = delegatee[methodName]; - - // The method doesn't exist on the delegatee. Instead, - // call the method on the delegator, if it exists. - if (!method) { - target = delegator; - method = inherited; - } - - if (method) { - return method.apply(target, arguments); - } - }; - } - - // Implement a vague facsimilie of jQuery's data method - function elementData(el, name, value) { - if (arguments.length == 2) { - return el["htmlwidget_data_" + name]; - } else if (arguments.length == 3) { - el["htmlwidget_data_" + name] = value; - return el; - } else { - throw new Error("Wrong number of arguments for elementData: " + - arguments.length); - } - } - - // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex - function escapeRegExp(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - - function hasClass(el, className) { - var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); - return re.test(el.className); - } - - // elements - array (or array-like object) of HTML elements - // className - class name to test for - // include - if true, only return elements with given className; - // if false, only return elements *without* given className - function filterByClass(elements, className, include) { - var results = []; - for (var i = 0; i < elements.length; i++) { - if (hasClass(elements[i], className) == include) - results.push(elements[i]); - } - return results; - } - - function on(obj, eventName, func) { - if (obj.addEventListener) { - obj.addEventListener(eventName, func, false); - } else if (obj.attachEvent) { - obj.attachEvent(eventName, func); - } - } - - function off(obj, eventName, func) { - if (obj.removeEventListener) - obj.removeEventListener(eventName, func, false); - else if (obj.detachEvent) { - obj.detachEvent(eventName, func); - } - } - - // Translate array of values to top/right/bottom/left, as usual with - // the "padding" CSS property - // https://developer.mozilla.org/en-US/docs/Web/CSS/padding - function unpackPadding(value) { - if (typeof(value) === "number") - value = [value]; - if (value.length === 1) { - return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; - } - if (value.length === 2) { - return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; - } - if (value.length === 3) { - return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; - } - if (value.length === 4) { - return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; - } - } - - // Convert an unpacked padding object to a CSS value - function paddingToCss(paddingObj) { - return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; - } - - // Makes a number suitable for CSS - function px(x) { - if (typeof(x) === "number") - return x + "px"; - else - return x; - } - - // Retrieves runtime widget sizing information for an element. - // The return value is either null, or an object with fill, padding, - // defaultWidth, defaultHeight fields. - function sizingPolicy(el) { - var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); - if (!sizingEl) - return null; - var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); - if (viewerMode) { - return sp.viewer; - } else { - return sp.browser; - } - } - - // @param tasks Array of strings (or falsy value, in which case no-op). - // Each element must be a valid JavaScript expression that yields a - // function. Or, can be an array of objects with "code" and "data" - // properties; in this case, the "code" property should be a string - // of JS that's an expr that yields a function, and "data" should be - // an object that will be added as an additional argument when that - // function is called. - // @param target The object that will be "this" for each function - // execution. - // @param args Array of arguments to be passed to the functions. (The - // same arguments will be passed to all functions.) - function evalAndRun(tasks, target, args) { - if (tasks) { - forEach(tasks, function(task) { - var theseArgs = args; - if (typeof(task) === "object") { - theseArgs = theseArgs.concat([task.data]); - task = task.code; - } - var taskFunc = tryEval(task); - if (typeof(taskFunc) !== "function") { - throw new Error("Task must be a function! Source:\n" + task); - } - taskFunc.apply(target, theseArgs); - }); - } - } - - // Attempt eval() both with and without enclosing in parentheses. - // Note that enclosing coerces a function declaration into - // an expression that eval() can parse - // (otherwise, a SyntaxError is thrown) - function tryEval(code) { - var result = null; - try { - result = eval("(" + code + ")"); - } catch(error) { - if (!(error instanceof SyntaxError)) { - throw error; - } - try { - result = eval(code); - } catch(e) { - if (e instanceof SyntaxError) { - throw error; - } else { - throw e; - } - } - } - return result; - } - - function initSizing(el) { - var sizing = sizingPolicy(el); - if (!sizing) - return; - - var cel = document.getElementById("htmlwidget_container"); - if (!cel) - return; - - if (typeof(sizing.padding) !== "undefined") { - document.body.style.margin = "0"; - document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); - } - - if (sizing.fill) { - document.body.style.overflow = "hidden"; - document.body.style.width = "100%"; - document.body.style.height = "100%"; - document.documentElement.style.width = "100%"; - document.documentElement.style.height = "100%"; - cel.style.position = "absolute"; - var pad = unpackPadding(sizing.padding); - cel.style.top = pad.top + "px"; - cel.style.right = pad.right + "px"; - cel.style.bottom = pad.bottom + "px"; - cel.style.left = pad.left + "px"; - el.style.width = "100%"; - el.style.height = "100%"; - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - } - } - - // Default implementations for methods - var defaults = { - find: function(scope) { - return querySelectorAll(scope, "." + this.name); - }, - renderError: function(el, err) { - var $el = $(el); - - this.clearError(el); - - // Add all these error classes, as Shiny does - var errClass = "shiny-output-error"; - if (err.type !== null) { - // use the classes of the error condition as CSS class names - errClass = errClass + " " + $.map(asArray(err.type), function(type) { - return errClass + "-" + type; - }).join(" "); - } - errClass = errClass + " htmlwidgets-error"; - - // Is el inline or block? If inline or inline-block, just display:none it - // and add an inline error. - var display = $el.css("display"); - $el.data("restore-display-mode", display); - - if (display === "inline" || display === "inline-block") { - $el.hide(); - if (err.message !== "") { - var errorSpan = $("").addClass(errClass); - errorSpan.text(err.message); - $el.after(errorSpan); - } - } else if (display === "block") { - // If block, add an error just after the el, set visibility:none on the - // el, and position the error to be on top of the el. - // Mark it with a unique ID and CSS class so we can remove it later. - $el.css("visibility", "hidden"); - if (err.message !== "") { - var errorDiv = $("

").addClass(errClass).css("position", "absolute") - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - // setting width can push out the page size, forcing otherwise - // unnecessary scrollbars to appear and making it impossible for - // the element to shrink; so use max-width instead - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - errorDiv.text(err.message); - $el.after(errorDiv); - - // Really dumb way to keep the size/position of the error in sync with - // the parent element as the window is resized or whatever. - var intId = setInterval(function() { - if (!errorDiv[0].parentElement) { - clearInterval(intId); - return; - } - errorDiv - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - }, 500); - } - } - }, - clearError: function(el) { - var $el = $(el); - var display = $el.data("restore-display-mode"); - $el.data("restore-display-mode", null); - - if (display === "inline" || display === "inline-block") { - if (display) - $el.css("display", display); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } else if (display === "block"){ - $el.css("visibility", "inherit"); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } - }, - sizing: {} - }; - - // Called by widget bindings to register a new type of widget. The definition - // object can contain the following properties: - // - name (required) - A string indicating the binding name, which will be - // used by default as the CSS classname to look for. - // - initialize (optional) - A function(el) that will be called once per - // widget element; if a value is returned, it will be passed as the third - // value to renderValue. - // - renderValue (required) - A function(el, data, initValue) that will be - // called with data. Static contexts will cause this to be called once per - // element; Shiny apps will cause this to be called multiple times per - // element, as the data changes. - window.HTMLWidgets.widget = function(definition) { - if (!definition.name) { - throw new Error("Widget must have a name"); - } - if (!definition.type) { - throw new Error("Widget must have a type"); - } - // Currently we only support output widgets - if (definition.type !== "output") { - throw new Error("Unrecognized widget type '" + definition.type + "'"); - } - // TODO: Verify that .name is a valid CSS classname - - // Support new-style instance-bound definitions. Old-style class-bound - // definitions have one widget "object" per widget per type/class of - // widget; the renderValue and resize methods on such widget objects - // take el and instance arguments, because the widget object can't - // store them. New-style instance-bound definitions have one widget - // object per widget instance; the definition that's passed in doesn't - // provide renderValue or resize methods at all, just the single method - // factory(el, width, height) - // which returns an object that has renderValue(x) and resize(w, h). - // This enables a far more natural programming style for the widget - // author, who can store per-instance state using either OO-style - // instance fields or functional-style closure variables (I guess this - // is in contrast to what can only be called C-style pseudo-OO which is - // what we required before). - if (definition.factory) { - definition = createLegacyDefinitionAdapter(definition); - } - - if (!definition.renderValue) { - throw new Error("Widget must have a renderValue function"); - } - - // For static rendering (non-Shiny), use a simple widget registration - // scheme. We also use this scheme for Shiny apps/documents that also - // contain static widgets. - window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; - // Merge defaults into the definition; don't mutate the original definition. - var staticBinding = extend({}, defaults, definition); - overrideMethod(staticBinding, "find", function(superfunc) { - return function(scope) { - var results = superfunc(scope); - // Filter out Shiny outputs, we only want the static kind - return filterByClass(results, "html-widget-output", false); - }; - }); - window.HTMLWidgets.widgets.push(staticBinding); - - if (shinyMode) { - // Shiny is running. Register the definition with an output binding. - // The definition itself will not be the output binding, instead - // we will make an output binding object that delegates to the - // definition. This is because we foolishly used the same method - // name (renderValue) for htmlwidgets definition and Shiny bindings - // but they actually have quite different semantics (the Shiny - // bindings receive data that includes lots of metadata that it - // strips off before calling htmlwidgets renderValue). We can't - // just ignore the difference because in some widgets it's helpful - // to call this.renderValue() from inside of resize(), and if - // we're not delegating, then that call will go to the Shiny - // version instead of the htmlwidgets version. - - // Merge defaults with definition, without mutating either. - var bindingDef = extend({}, defaults, definition); - - // This object will be our actual Shiny binding. - var shinyBinding = new Shiny.OutputBinding(); - - // With a few exceptions, we'll want to simply use the bindingDef's - // version of methods if they are available, otherwise fall back to - // Shiny's defaults. NOTE: If Shiny's output bindings gain additional - // methods in the future, and we want them to be overrideable by - // HTMLWidget binding definitions, then we'll need to add them to this - // list. - delegateMethod(shinyBinding, bindingDef, "getId"); - delegateMethod(shinyBinding, bindingDef, "onValueChange"); - delegateMethod(shinyBinding, bindingDef, "onValueError"); - delegateMethod(shinyBinding, bindingDef, "renderError"); - delegateMethod(shinyBinding, bindingDef, "clearError"); - delegateMethod(shinyBinding, bindingDef, "showProgress"); - - // The find, renderValue, and resize are handled differently, because we - // want to actually decorate the behavior of the bindingDef methods. - - shinyBinding.find = function(scope) { - var results = bindingDef.find(scope); - - // Only return elements that are Shiny outputs, not static ones - var dynamicResults = results.filter(".html-widget-output"); - - // It's possible that whatever caused Shiny to think there might be - // new dynamic outputs, also caused there to be new static outputs. - // Since there might be lots of different htmlwidgets bindings, we - // schedule execution for later--no need to staticRender multiple - // times. - if (results.length !== dynamicResults.length) - scheduleStaticRender(); - - return dynamicResults; - }; - - // Wrap renderValue to handle initialization, which unfortunately isn't - // supported natively by Shiny at the time of this writing. - - shinyBinding.renderValue = function(el, data) { - Shiny.renderDependencies(data.deps); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var i = 0; data.evals && i < data.evals.length; i++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); - } - if (!bindingDef.renderOnNullValue) { - if (data.x === null) { - el.style.visibility = "hidden"; - return; - } else { - el.style.visibility = "inherit"; - } - } - if (!elementData(el, "initialized")) { - initSizing(el); - - elementData(el, "initialized", true); - if (bindingDef.initialize) { - var rect = el.getBoundingClientRect(); - var result = bindingDef.initialize(el, rect.width, rect.height); - elementData(el, "init_result", result); - } - } - bindingDef.renderValue(el, data.x, elementData(el, "init_result")); - evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); - }; - - // Only override resize if bindingDef implements it - if (bindingDef.resize) { - shinyBinding.resize = function(el, width, height) { - // Shiny can call resize before initialize/renderValue have been - // called, which doesn't make sense for widgets. - if (elementData(el, "initialized")) { - bindingDef.resize(el, width, height, elementData(el, "init_result")); - } - }; - } - - Shiny.outputBindings.register(shinyBinding, bindingDef.name); - } - }; - - var scheduleStaticRenderTimerId = null; - function scheduleStaticRender() { - if (!scheduleStaticRenderTimerId) { - scheduleStaticRenderTimerId = setTimeout(function() { - scheduleStaticRenderTimerId = null; - window.HTMLWidgets.staticRender(); - }, 1); - } - } - - // Render static widgets after the document finishes loading - // Statically render all elements that are of this widget's class - window.HTMLWidgets.staticRender = function() { - var bindings = window.HTMLWidgets.widgets || []; - forEach(bindings, function(binding) { - var matches = binding.find(document.documentElement); - forEach(matches, function(el) { - var sizeObj = initSizing(el, binding); - - var getSize = function(el) { - if (sizeObj) { - return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} - } else { - var rect = el.getBoundingClientRect(); - return {w: rect.width, h: rect.height} - } - }; - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - var size = getSize(el); - initResult = binding.initialize(el, size.w, size.h); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = getSize(el); - var resizeHandler = function(e) { - var size = getSize(el); - if (size.w === 0 && size.h === 0) - return; - if (size.w === lastSize.w && size.h === lastSize.h) - return; - lastSize = size; - binding.resize(el, size.w, size.h, initResult); - }; - - on(window, "resize", resizeHandler); - - // This is needed for cases where we're running in a Shiny - // app, but the widget itself is not a Shiny output, but - // rather a simple static widget. One example of this is - // an rmarkdown document that has runtime:shiny and widget - // that isn't in a render function. Shiny only knows to - // call resize handlers for Shiny outputs, not for static - // widgets, so we do it ourselves. - if (window.jQuery) { - window.jQuery(document).on( - "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", - resizeHandler - ); - window.jQuery(document).on( - "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", - resizeHandler - ); - } - - // This is needed for the specific case of ioslides, which - // flips slides between display:none and display:block. - // Ideally we would not have to have ioslide-specific code - // here, but rather have ioslides raise a generic event, - // but the rmarkdown package just went to CRAN so the - // window to getting that fixed may be long. - if (window.addEventListener) { - // It's OK to limit this to window.addEventListener - // browsers because ioslides itself only supports - // such browsers. - on(document, "slideenter", resizeHandler); - on(document, "slideleave", resizeHandler); - } - } - - var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); - if (scriptData) { - var data = JSON.parse(scriptData.textContent || scriptData.text); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var k = 0; data.evals && k < data.evals.length; k++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); - } - binding.renderValue(el, data.x, initResult); - evalAndRun(data.jsHooks.render, initResult, [el, data.x]); - } - }); - }); - - invokePostRenderHandlers(); - } - - - function has_jQuery3() { - if (!window.jQuery) { - return false; - } - var $version = window.jQuery.fn.jquery; - var $major_version = parseInt($version.split(".")[0]); - return $major_version >= 3; - } - - /* - / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's - / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now - / really means $(setTimeout(fn)). - / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous - / - / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny - / one tick later than it did before, which means staticRender() is - / called renderValue() earlier than (advanced) widget authors might be expecting. - / https://github.com/rstudio/shiny/issues/2630 - / - / For a concrete example, leaflet has some methods (e.g., updateBounds) - / which reference Shiny methods registered in initShiny (e.g., setInputValue). - / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to - / delay execution of those methods (until Shiny methods are ready) - / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 - / - / Ideally widget authors wouldn't need to use this setTimeout() hack that - / leaflet uses to call Shiny methods on a staticRender(). In the long run, - / the logic initShiny should be broken up so that method registration happens - / right away, but binding happens later. - */ - function maybeStaticRenderLater() { - if (shinyMode && has_jQuery3()) { - window.jQuery(window.HTMLWidgets.staticRender); - } else { - window.HTMLWidgets.staticRender(); - } - } - - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", function() { - document.removeEventListener("DOMContentLoaded", arguments.callee, false); - maybeStaticRenderLater(); - }, false); - } else if (document.attachEvent) { - document.attachEvent("onreadystatechange", function() { - if (document.readyState === "complete") { - document.detachEvent("onreadystatechange", arguments.callee); - maybeStaticRenderLater(); - } - }); - } - - - window.HTMLWidgets.getAttachmentUrl = function(depname, key) { - // If no key, default to the first item - if (typeof(key) === "undefined") - key = 1; - - var link = document.getElementById(depname + "-" + key + "-attachment"); - if (!link) { - throw new Error("Attachment " + depname + "/" + key + " not found in document"); - } - return link.getAttribute("href"); - }; - - window.HTMLWidgets.dataframeToD3 = function(df) { - var names = []; - var length; - for (var name in df) { - if (df.hasOwnProperty(name)) - names.push(name); - if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { - throw new Error("All fields must be arrays"); - } else if (typeof(length) !== "undefined" && length !== df[name].length) { - throw new Error("All fields must be arrays of the same length"); - } - length = df[name].length; - } - var results = []; - var item; - for (var row = 0; row < length; row++) { - item = {}; - for (var col = 0; col < names.length; col++) { - item[names[col]] = df[names[col]][row]; - } - results.push(item); - } - return results; - }; - - window.HTMLWidgets.transposeArray2D = function(array) { - if (array.length === 0) return array; - var newArray = array[0].map(function(col, i) { - return array.map(function(row) { - return row[i] - }) - }); - return newArray; - }; - // Split value at splitChar, but allow splitChar to be escaped - // using escapeChar. Any other characters escaped by escapeChar - // will be included as usual (including escapeChar itself). - function splitWithEscape(value, splitChar, escapeChar) { - var results = []; - var escapeMode = false; - var currentResult = ""; - for (var pos = 0; pos < value.length; pos++) { - if (!escapeMode) { - if (value[pos] === splitChar) { - results.push(currentResult); - currentResult = ""; - } else if (value[pos] === escapeChar) { - escapeMode = true; - } else { - currentResult += value[pos]; - } - } else { - currentResult += value[pos]; - escapeMode = false; - } - } - if (currentResult !== "") { - results.push(currentResult); - } - return results; - } - // Function authored by Yihui/JJ Allaire - window.HTMLWidgets.evaluateStringMember = function(o, member) { - var parts = splitWithEscape(member, '.', '\\'); - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i]; - // part may be a character or 'numeric' member name - if (o !== null && typeof o === "object" && part in o) { - if (i == (l - 1)) { // if we are at the end of the line then evalulate - if (typeof o[part] === "string") - o[part] = tryEval(o[part]); - } else { // otherwise continue to next embedded object - o = o[part]; - } - } - } - }; - - // Retrieve the HTMLWidget instance (i.e. the return value of an - // HTMLWidget binding's initialize() or factory() function) - // associated with an element, or null if none. - window.HTMLWidgets.getInstance = function(el) { - return elementData(el, "init_result"); - }; - - // Finds the first element in the scope that matches the selector, - // and returns the HTMLWidget instance (i.e. the return value of - // an HTMLWidget binding's initialize() or factory() function) - // associated with that element, if any. If no element matches the - // selector, or the first matching element has no HTMLWidget - // instance associated with it, then null is returned. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.find = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var el = scope.querySelector(selector); - if (el === null) { - return null; - } else { - return window.HTMLWidgets.getInstance(el); - } - }; - - // Finds all elements in the scope that match the selector, and - // returns the HTMLWidget instances (i.e. the return values of - // an HTMLWidget binding's initialize() or factory() function) - // associated with the elements, in an array. If elements that - // match the selector don't have an associated HTMLWidget - // instance, the returned array will contain nulls. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.findAll = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var nodes = scope.querySelectorAll(selector); - var results = []; - for (var i = 0; i < nodes.length; i++) { - results.push(window.HTMLWidgets.getInstance(nodes[i])); - } - return results; - }; - - var postRenderHandlers = []; - function invokePostRenderHandlers() { - while (postRenderHandlers.length) { - var handler = postRenderHandlers.shift(); - if (handler) { - handler(); - } - } - } - - // Register the given callback function to be invoked after the - // next time static widgets are rendered. - window.HTMLWidgets.addPostRenderHandler = function(callback) { - postRenderHandlers.push(callback); - }; - - // Takes a new-style instance-bound definition, and returns an - // old-style class-bound definition. This saves us from having - // to rewrite all the logic in this file to accomodate both - // types of definitions. - function createLegacyDefinitionAdapter(defn) { - var result = { - name: defn.name, - type: defn.type, - initialize: function(el, width, height) { - return defn.factory(el, width, height); - }, - renderValue: function(el, x, instance) { - return instance.renderValue(x); - }, - resize: function(el, width, height, instance) { - return instance.resize(width, height); - } - }; - - if (defn.find) - result.find = defn.find; - if (defn.renderError) - result.renderError = defn.renderError; - if (defn.clearError) - result.clearError = defn.clearError; - - return result; - } -})(); diff --git a/docs/articles/Applications_files/htmlwidgets-1.6.2/htmlwidgets.js b/docs/articles/Applications_files/htmlwidgets-1.6.2/htmlwidgets.js deleted file mode 100644 index 1067d02..0000000 --- a/docs/articles/Applications_files/htmlwidgets-1.6.2/htmlwidgets.js +++ /dev/null @@ -1,901 +0,0 @@ -(function() { - // If window.HTMLWidgets is already defined, then use it; otherwise create a - // new object. This allows preceding code to set options that affect the - // initialization process (though none currently exist). - window.HTMLWidgets = window.HTMLWidgets || {}; - - // See if we're running in a viewer pane. If not, we're in a web browser. - var viewerMode = window.HTMLWidgets.viewerMode = - /\bviewer_pane=1\b/.test(window.location); - - // See if we're running in Shiny mode. If not, it's a static document. - // Note that static widgets can appear in both Shiny and static modes, but - // obviously, Shiny widgets can only appear in Shiny apps/documents. - var shinyMode = window.HTMLWidgets.shinyMode = - typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; - - // We can't count on jQuery being available, so we implement our own - // version if necessary. - function querySelectorAll(scope, selector) { - if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { - return scope.find(selector); - } - if (scope.querySelectorAll) { - return scope.querySelectorAll(selector); - } - } - - function asArray(value) { - if (value === null) - return []; - if ($.isArray(value)) - return value; - return [value]; - } - - // Implement jQuery's extend - function extend(target /*, ... */) { - if (arguments.length == 1) { - return target; - } - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - } - return target; - } - - // IE8 doesn't support Array.forEach. - function forEach(values, callback, thisArg) { - if (values.forEach) { - values.forEach(callback, thisArg); - } else { - for (var i = 0; i < values.length; i++) { - callback.call(thisArg, values[i], i, values); - } - } - } - - // Replaces the specified method with the return value of funcSource. - // - // Note that funcSource should not BE the new method, it should be a function - // that RETURNS the new method. funcSource receives a single argument that is - // the overridden method, it can be called from the new method. The overridden - // method can be called like a regular function, it has the target permanently - // bound to it so "this" will work correctly. - function overrideMethod(target, methodName, funcSource) { - var superFunc = target[methodName] || function() {}; - var superFuncBound = function() { - return superFunc.apply(target, arguments); - }; - target[methodName] = funcSource(superFuncBound); - } - - // Add a method to delegator that, when invoked, calls - // delegatee.methodName. If there is no such method on - // the delegatee, but there was one on delegator before - // delegateMethod was called, then the original version - // is invoked instead. - // For example: - // - // var a = { - // method1: function() { console.log('a1'); } - // method2: function() { console.log('a2'); } - // }; - // var b = { - // method1: function() { console.log('b1'); } - // }; - // delegateMethod(a, b, "method1"); - // delegateMethod(a, b, "method2"); - // a.method1(); - // a.method2(); - // - // The output would be "b1", "a2". - function delegateMethod(delegator, delegatee, methodName) { - var inherited = delegator[methodName]; - delegator[methodName] = function() { - var target = delegatee; - var method = delegatee[methodName]; - - // The method doesn't exist on the delegatee. Instead, - // call the method on the delegator, if it exists. - if (!method) { - target = delegator; - method = inherited; - } - - if (method) { - return method.apply(target, arguments); - } - }; - } - - // Implement a vague facsimilie of jQuery's data method - function elementData(el, name, value) { - if (arguments.length == 2) { - return el["htmlwidget_data_" + name]; - } else if (arguments.length == 3) { - el["htmlwidget_data_" + name] = value; - return el; - } else { - throw new Error("Wrong number of arguments for elementData: " + - arguments.length); - } - } - - // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex - function escapeRegExp(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - - function hasClass(el, className) { - var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); - return re.test(el.className); - } - - // elements - array (or array-like object) of HTML elements - // className - class name to test for - // include - if true, only return elements with given className; - // if false, only return elements *without* given className - function filterByClass(elements, className, include) { - var results = []; - for (var i = 0; i < elements.length; i++) { - if (hasClass(elements[i], className) == include) - results.push(elements[i]); - } - return results; - } - - function on(obj, eventName, func) { - if (obj.addEventListener) { - obj.addEventListener(eventName, func, false); - } else if (obj.attachEvent) { - obj.attachEvent(eventName, func); - } - } - - function off(obj, eventName, func) { - if (obj.removeEventListener) - obj.removeEventListener(eventName, func, false); - else if (obj.detachEvent) { - obj.detachEvent(eventName, func); - } - } - - // Translate array of values to top/right/bottom/left, as usual with - // the "padding" CSS property - // https://developer.mozilla.org/en-US/docs/Web/CSS/padding - function unpackPadding(value) { - if (typeof(value) === "number") - value = [value]; - if (value.length === 1) { - return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; - } - if (value.length === 2) { - return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; - } - if (value.length === 3) { - return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; - } - if (value.length === 4) { - return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; - } - } - - // Convert an unpacked padding object to a CSS value - function paddingToCss(paddingObj) { - return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; - } - - // Makes a number suitable for CSS - function px(x) { - if (typeof(x) === "number") - return x + "px"; - else - return x; - } - - // Retrieves runtime widget sizing information for an element. - // The return value is either null, or an object with fill, padding, - // defaultWidth, defaultHeight fields. - function sizingPolicy(el) { - var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); - if (!sizingEl) - return null; - var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); - if (viewerMode) { - return sp.viewer; - } else { - return sp.browser; - } - } - - // @param tasks Array of strings (or falsy value, in which case no-op). - // Each element must be a valid JavaScript expression that yields a - // function. Or, can be an array of objects with "code" and "data" - // properties; in this case, the "code" property should be a string - // of JS that's an expr that yields a function, and "data" should be - // an object that will be added as an additional argument when that - // function is called. - // @param target The object that will be "this" for each function - // execution. - // @param args Array of arguments to be passed to the functions. (The - // same arguments will be passed to all functions.) - function evalAndRun(tasks, target, args) { - if (tasks) { - forEach(tasks, function(task) { - var theseArgs = args; - if (typeof(task) === "object") { - theseArgs = theseArgs.concat([task.data]); - task = task.code; - } - var taskFunc = tryEval(task); - if (typeof(taskFunc) !== "function") { - throw new Error("Task must be a function! Source:\n" + task); - } - taskFunc.apply(target, theseArgs); - }); - } - } - - // Attempt eval() both with and without enclosing in parentheses. - // Note that enclosing coerces a function declaration into - // an expression that eval() can parse - // (otherwise, a SyntaxError is thrown) - function tryEval(code) { - var result = null; - try { - result = eval("(" + code + ")"); - } catch(error) { - if (!(error instanceof SyntaxError)) { - throw error; - } - try { - result = eval(code); - } catch(e) { - if (e instanceof SyntaxError) { - throw error; - } else { - throw e; - } - } - } - return result; - } - - function initSizing(el) { - var sizing = sizingPolicy(el); - if (!sizing) - return; - - var cel = document.getElementById("htmlwidget_container"); - if (!cel) - return; - - if (typeof(sizing.padding) !== "undefined") { - document.body.style.margin = "0"; - document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); - } - - if (sizing.fill) { - document.body.style.overflow = "hidden"; - document.body.style.width = "100%"; - document.body.style.height = "100%"; - document.documentElement.style.width = "100%"; - document.documentElement.style.height = "100%"; - cel.style.position = "absolute"; - var pad = unpackPadding(sizing.padding); - cel.style.top = pad.top + "px"; - cel.style.right = pad.right + "px"; - cel.style.bottom = pad.bottom + "px"; - cel.style.left = pad.left + "px"; - el.style.width = "100%"; - el.style.height = "100%"; - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - } - } - - // Default implementations for methods - var defaults = { - find: function(scope) { - return querySelectorAll(scope, "." + this.name); - }, - renderError: function(el, err) { - var $el = $(el); - - this.clearError(el); - - // Add all these error classes, as Shiny does - var errClass = "shiny-output-error"; - if (err.type !== null) { - // use the classes of the error condition as CSS class names - errClass = errClass + " " + $.map(asArray(err.type), function(type) { - return errClass + "-" + type; - }).join(" "); - } - errClass = errClass + " htmlwidgets-error"; - - // Is el inline or block? If inline or inline-block, just display:none it - // and add an inline error. - var display = $el.css("display"); - $el.data("restore-display-mode", display); - - if (display === "inline" || display === "inline-block") { - $el.hide(); - if (err.message !== "") { - var errorSpan = $("").addClass(errClass); - errorSpan.text(err.message); - $el.after(errorSpan); - } - } else if (display === "block") { - // If block, add an error just after the el, set visibility:none on the - // el, and position the error to be on top of the el. - // Mark it with a unique ID and CSS class so we can remove it later. - $el.css("visibility", "hidden"); - if (err.message !== "") { - var errorDiv = $("
").addClass(errClass).css("position", "absolute") - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - // setting width can push out the page size, forcing otherwise - // unnecessary scrollbars to appear and making it impossible for - // the element to shrink; so use max-width instead - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - errorDiv.text(err.message); - $el.after(errorDiv); - - // Really dumb way to keep the size/position of the error in sync with - // the parent element as the window is resized or whatever. - var intId = setInterval(function() { - if (!errorDiv[0].parentElement) { - clearInterval(intId); - return; - } - errorDiv - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - }, 500); - } - } - }, - clearError: function(el) { - var $el = $(el); - var display = $el.data("restore-display-mode"); - $el.data("restore-display-mode", null); - - if (display === "inline" || display === "inline-block") { - if (display) - $el.css("display", display); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } else if (display === "block"){ - $el.css("visibility", "inherit"); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } - }, - sizing: {} - }; - - // Called by widget bindings to register a new type of widget. The definition - // object can contain the following properties: - // - name (required) - A string indicating the binding name, which will be - // used by default as the CSS classname to look for. - // - initialize (optional) - A function(el) that will be called once per - // widget element; if a value is returned, it will be passed as the third - // value to renderValue. - // - renderValue (required) - A function(el, data, initValue) that will be - // called with data. Static contexts will cause this to be called once per - // element; Shiny apps will cause this to be called multiple times per - // element, as the data changes. - window.HTMLWidgets.widget = function(definition) { - if (!definition.name) { - throw new Error("Widget must have a name"); - } - if (!definition.type) { - throw new Error("Widget must have a type"); - } - // Currently we only support output widgets - if (definition.type !== "output") { - throw new Error("Unrecognized widget type '" + definition.type + "'"); - } - // TODO: Verify that .name is a valid CSS classname - - // Support new-style instance-bound definitions. Old-style class-bound - // definitions have one widget "object" per widget per type/class of - // widget; the renderValue and resize methods on such widget objects - // take el and instance arguments, because the widget object can't - // store them. New-style instance-bound definitions have one widget - // object per widget instance; the definition that's passed in doesn't - // provide renderValue or resize methods at all, just the single method - // factory(el, width, height) - // which returns an object that has renderValue(x) and resize(w, h). - // This enables a far more natural programming style for the widget - // author, who can store per-instance state using either OO-style - // instance fields or functional-style closure variables (I guess this - // is in contrast to what can only be called C-style pseudo-OO which is - // what we required before). - if (definition.factory) { - definition = createLegacyDefinitionAdapter(definition); - } - - if (!definition.renderValue) { - throw new Error("Widget must have a renderValue function"); - } - - // For static rendering (non-Shiny), use a simple widget registration - // scheme. We also use this scheme for Shiny apps/documents that also - // contain static widgets. - window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; - // Merge defaults into the definition; don't mutate the original definition. - var staticBinding = extend({}, defaults, definition); - overrideMethod(staticBinding, "find", function(superfunc) { - return function(scope) { - var results = superfunc(scope); - // Filter out Shiny outputs, we only want the static kind - return filterByClass(results, "html-widget-output", false); - }; - }); - window.HTMLWidgets.widgets.push(staticBinding); - - if (shinyMode) { - // Shiny is running. Register the definition with an output binding. - // The definition itself will not be the output binding, instead - // we will make an output binding object that delegates to the - // definition. This is because we foolishly used the same method - // name (renderValue) for htmlwidgets definition and Shiny bindings - // but they actually have quite different semantics (the Shiny - // bindings receive data that includes lots of metadata that it - // strips off before calling htmlwidgets renderValue). We can't - // just ignore the difference because in some widgets it's helpful - // to call this.renderValue() from inside of resize(), and if - // we're not delegating, then that call will go to the Shiny - // version instead of the htmlwidgets version. - - // Merge defaults with definition, without mutating either. - var bindingDef = extend({}, defaults, definition); - - // This object will be our actual Shiny binding. - var shinyBinding = new Shiny.OutputBinding(); - - // With a few exceptions, we'll want to simply use the bindingDef's - // version of methods if they are available, otherwise fall back to - // Shiny's defaults. NOTE: If Shiny's output bindings gain additional - // methods in the future, and we want them to be overrideable by - // HTMLWidget binding definitions, then we'll need to add them to this - // list. - delegateMethod(shinyBinding, bindingDef, "getId"); - delegateMethod(shinyBinding, bindingDef, "onValueChange"); - delegateMethod(shinyBinding, bindingDef, "onValueError"); - delegateMethod(shinyBinding, bindingDef, "renderError"); - delegateMethod(shinyBinding, bindingDef, "clearError"); - delegateMethod(shinyBinding, bindingDef, "showProgress"); - - // The find, renderValue, and resize are handled differently, because we - // want to actually decorate the behavior of the bindingDef methods. - - shinyBinding.find = function(scope) { - var results = bindingDef.find(scope); - - // Only return elements that are Shiny outputs, not static ones - var dynamicResults = results.filter(".html-widget-output"); - - // It's possible that whatever caused Shiny to think there might be - // new dynamic outputs, also caused there to be new static outputs. - // Since there might be lots of different htmlwidgets bindings, we - // schedule execution for later--no need to staticRender multiple - // times. - if (results.length !== dynamicResults.length) - scheduleStaticRender(); - - return dynamicResults; - }; - - // Wrap renderValue to handle initialization, which unfortunately isn't - // supported natively by Shiny at the time of this writing. - - shinyBinding.renderValue = function(el, data) { - Shiny.renderDependencies(data.deps); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var i = 0; data.evals && i < data.evals.length; i++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); - } - if (!bindingDef.renderOnNullValue) { - if (data.x === null) { - el.style.visibility = "hidden"; - return; - } else { - el.style.visibility = "inherit"; - } - } - if (!elementData(el, "initialized")) { - initSizing(el); - - elementData(el, "initialized", true); - if (bindingDef.initialize) { - var rect = el.getBoundingClientRect(); - var result = bindingDef.initialize(el, rect.width, rect.height); - elementData(el, "init_result", result); - } - } - bindingDef.renderValue(el, data.x, elementData(el, "init_result")); - evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); - }; - - // Only override resize if bindingDef implements it - if (bindingDef.resize) { - shinyBinding.resize = function(el, width, height) { - // Shiny can call resize before initialize/renderValue have been - // called, which doesn't make sense for widgets. - if (elementData(el, "initialized")) { - bindingDef.resize(el, width, height, elementData(el, "init_result")); - } - }; - } - - Shiny.outputBindings.register(shinyBinding, bindingDef.name); - } - }; - - var scheduleStaticRenderTimerId = null; - function scheduleStaticRender() { - if (!scheduleStaticRenderTimerId) { - scheduleStaticRenderTimerId = setTimeout(function() { - scheduleStaticRenderTimerId = null; - window.HTMLWidgets.staticRender(); - }, 1); - } - } - - // Render static widgets after the document finishes loading - // Statically render all elements that are of this widget's class - window.HTMLWidgets.staticRender = function() { - var bindings = window.HTMLWidgets.widgets || []; - forEach(bindings, function(binding) { - var matches = binding.find(document.documentElement); - forEach(matches, function(el) { - var sizeObj = initSizing(el, binding); - - var getSize = function(el) { - if (sizeObj) { - return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} - } else { - var rect = el.getBoundingClientRect(); - return {w: rect.width, h: rect.height} - } - }; - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - var size = getSize(el); - initResult = binding.initialize(el, size.w, size.h); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = getSize(el); - var resizeHandler = function(e) { - var size = getSize(el); - if (size.w === 0 && size.h === 0) - return; - if (size.w === lastSize.w && size.h === lastSize.h) - return; - lastSize = size; - binding.resize(el, size.w, size.h, initResult); - }; - - on(window, "resize", resizeHandler); - - // This is needed for cases where we're running in a Shiny - // app, but the widget itself is not a Shiny output, but - // rather a simple static widget. One example of this is - // an rmarkdown document that has runtime:shiny and widget - // that isn't in a render function. Shiny only knows to - // call resize handlers for Shiny outputs, not for static - // widgets, so we do it ourselves. - if (window.jQuery) { - window.jQuery(document).on( - "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", - resizeHandler - ); - window.jQuery(document).on( - "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", - resizeHandler - ); - } - - // This is needed for the specific case of ioslides, which - // flips slides between display:none and display:block. - // Ideally we would not have to have ioslide-specific code - // here, but rather have ioslides raise a generic event, - // but the rmarkdown package just went to CRAN so the - // window to getting that fixed may be long. - if (window.addEventListener) { - // It's OK to limit this to window.addEventListener - // browsers because ioslides itself only supports - // such browsers. - on(document, "slideenter", resizeHandler); - on(document, "slideleave", resizeHandler); - } - } - - var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); - if (scriptData) { - var data = JSON.parse(scriptData.textContent || scriptData.text); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var k = 0; data.evals && k < data.evals.length; k++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); - } - binding.renderValue(el, data.x, initResult); - evalAndRun(data.jsHooks.render, initResult, [el, data.x]); - } - }); - }); - - invokePostRenderHandlers(); - } - - - function has_jQuery3() { - if (!window.jQuery) { - return false; - } - var $version = window.jQuery.fn.jquery; - var $major_version = parseInt($version.split(".")[0]); - return $major_version >= 3; - } - - /* - / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's - / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now - / really means $(setTimeout(fn)). - / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous - / - / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny - / one tick later than it did before, which means staticRender() is - / called renderValue() earlier than (advanced) widget authors might be expecting. - / https://github.com/rstudio/shiny/issues/2630 - / - / For a concrete example, leaflet has some methods (e.g., updateBounds) - / which reference Shiny methods registered in initShiny (e.g., setInputValue). - / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to - / delay execution of those methods (until Shiny methods are ready) - / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 - / - / Ideally widget authors wouldn't need to use this setTimeout() hack that - / leaflet uses to call Shiny methods on a staticRender(). In the long run, - / the logic initShiny should be broken up so that method registration happens - / right away, but binding happens later. - */ - function maybeStaticRenderLater() { - if (shinyMode && has_jQuery3()) { - window.jQuery(window.HTMLWidgets.staticRender); - } else { - window.HTMLWidgets.staticRender(); - } - } - - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", function() { - document.removeEventListener("DOMContentLoaded", arguments.callee, false); - maybeStaticRenderLater(); - }, false); - } else if (document.attachEvent) { - document.attachEvent("onreadystatechange", function() { - if (document.readyState === "complete") { - document.detachEvent("onreadystatechange", arguments.callee); - maybeStaticRenderLater(); - } - }); - } - - - window.HTMLWidgets.getAttachmentUrl = function(depname, key) { - // If no key, default to the first item - if (typeof(key) === "undefined") - key = 1; - - var link = document.getElementById(depname + "-" + key + "-attachment"); - if (!link) { - throw new Error("Attachment " + depname + "/" + key + " not found in document"); - } - return link.getAttribute("href"); - }; - - window.HTMLWidgets.dataframeToD3 = function(df) { - var names = []; - var length; - for (var name in df) { - if (df.hasOwnProperty(name)) - names.push(name); - if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { - throw new Error("All fields must be arrays"); - } else if (typeof(length) !== "undefined" && length !== df[name].length) { - throw new Error("All fields must be arrays of the same length"); - } - length = df[name].length; - } - var results = []; - var item; - for (var row = 0; row < length; row++) { - item = {}; - for (var col = 0; col < names.length; col++) { - item[names[col]] = df[names[col]][row]; - } - results.push(item); - } - return results; - }; - - window.HTMLWidgets.transposeArray2D = function(array) { - if (array.length === 0) return array; - var newArray = array[0].map(function(col, i) { - return array.map(function(row) { - return row[i] - }) - }); - return newArray; - }; - // Split value at splitChar, but allow splitChar to be escaped - // using escapeChar. Any other characters escaped by escapeChar - // will be included as usual (including escapeChar itself). - function splitWithEscape(value, splitChar, escapeChar) { - var results = []; - var escapeMode = false; - var currentResult = ""; - for (var pos = 0; pos < value.length; pos++) { - if (!escapeMode) { - if (value[pos] === splitChar) { - results.push(currentResult); - currentResult = ""; - } else if (value[pos] === escapeChar) { - escapeMode = true; - } else { - currentResult += value[pos]; - } - } else { - currentResult += value[pos]; - escapeMode = false; - } - } - if (currentResult !== "") { - results.push(currentResult); - } - return results; - } - // Function authored by Yihui/JJ Allaire - window.HTMLWidgets.evaluateStringMember = function(o, member) { - var parts = splitWithEscape(member, '.', '\\'); - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i]; - // part may be a character or 'numeric' member name - if (o !== null && typeof o === "object" && part in o) { - if (i == (l - 1)) { // if we are at the end of the line then evalulate - if (typeof o[part] === "string") - o[part] = tryEval(o[part]); - } else { // otherwise continue to next embedded object - o = o[part]; - } - } - } - }; - - // Retrieve the HTMLWidget instance (i.e. the return value of an - // HTMLWidget binding's initialize() or factory() function) - // associated with an element, or null if none. - window.HTMLWidgets.getInstance = function(el) { - return elementData(el, "init_result"); - }; - - // Finds the first element in the scope that matches the selector, - // and returns the HTMLWidget instance (i.e. the return value of - // an HTMLWidget binding's initialize() or factory() function) - // associated with that element, if any. If no element matches the - // selector, or the first matching element has no HTMLWidget - // instance associated with it, then null is returned. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.find = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var el = scope.querySelector(selector); - if (el === null) { - return null; - } else { - return window.HTMLWidgets.getInstance(el); - } - }; - - // Finds all elements in the scope that match the selector, and - // returns the HTMLWidget instances (i.e. the return values of - // an HTMLWidget binding's initialize() or factory() function) - // associated with the elements, in an array. If elements that - // match the selector don't have an associated HTMLWidget - // instance, the returned array will contain nulls. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.findAll = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var nodes = scope.querySelectorAll(selector); - var results = []; - for (var i = 0; i < nodes.length; i++) { - results.push(window.HTMLWidgets.getInstance(nodes[i])); - } - return results; - }; - - var postRenderHandlers = []; - function invokePostRenderHandlers() { - while (postRenderHandlers.length) { - var handler = postRenderHandlers.shift(); - if (handler) { - handler(); - } - } - } - - // Register the given callback function to be invoked after the - // next time static widgets are rendered. - window.HTMLWidgets.addPostRenderHandler = function(callback) { - postRenderHandlers.push(callback); - }; - - // Takes a new-style instance-bound definition, and returns an - // old-style class-bound definition. This saves us from having - // to rewrite all the logic in this file to accomodate both - // types of definitions. - function createLegacyDefinitionAdapter(defn) { - var result = { - name: defn.name, - type: defn.type, - initialize: function(el, width, height) { - return defn.factory(el, width, height); - }, - renderValue: function(el, x, instance) { - return instance.renderValue(x); - }, - resize: function(el, width, height, instance) { - return instance.resize(width, height); - } - }; - - if (defn.find) - result.find = defn.find; - if (defn.renderError) - result.renderError = defn.renderError; - if (defn.clearError) - result.clearError = defn.clearError; - - return result; - } -})(); diff --git a/docs/articles/Applications_files/htmlwidgets-1.6.4/htmlwidgets.js b/docs/articles/Applications_files/htmlwidgets-1.6.4/htmlwidgets.js deleted file mode 100644 index 1067d02..0000000 --- a/docs/articles/Applications_files/htmlwidgets-1.6.4/htmlwidgets.js +++ /dev/null @@ -1,901 +0,0 @@ -(function() { - // If window.HTMLWidgets is already defined, then use it; otherwise create a - // new object. This allows preceding code to set options that affect the - // initialization process (though none currently exist). - window.HTMLWidgets = window.HTMLWidgets || {}; - - // See if we're running in a viewer pane. If not, we're in a web browser. - var viewerMode = window.HTMLWidgets.viewerMode = - /\bviewer_pane=1\b/.test(window.location); - - // See if we're running in Shiny mode. If not, it's a static document. - // Note that static widgets can appear in both Shiny and static modes, but - // obviously, Shiny widgets can only appear in Shiny apps/documents. - var shinyMode = window.HTMLWidgets.shinyMode = - typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; - - // We can't count on jQuery being available, so we implement our own - // version if necessary. - function querySelectorAll(scope, selector) { - if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { - return scope.find(selector); - } - if (scope.querySelectorAll) { - return scope.querySelectorAll(selector); - } - } - - function asArray(value) { - if (value === null) - return []; - if ($.isArray(value)) - return value; - return [value]; - } - - // Implement jQuery's extend - function extend(target /*, ... */) { - if (arguments.length == 1) { - return target; - } - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - } - return target; - } - - // IE8 doesn't support Array.forEach. - function forEach(values, callback, thisArg) { - if (values.forEach) { - values.forEach(callback, thisArg); - } else { - for (var i = 0; i < values.length; i++) { - callback.call(thisArg, values[i], i, values); - } - } - } - - // Replaces the specified method with the return value of funcSource. - // - // Note that funcSource should not BE the new method, it should be a function - // that RETURNS the new method. funcSource receives a single argument that is - // the overridden method, it can be called from the new method. The overridden - // method can be called like a regular function, it has the target permanently - // bound to it so "this" will work correctly. - function overrideMethod(target, methodName, funcSource) { - var superFunc = target[methodName] || function() {}; - var superFuncBound = function() { - return superFunc.apply(target, arguments); - }; - target[methodName] = funcSource(superFuncBound); - } - - // Add a method to delegator that, when invoked, calls - // delegatee.methodName. If there is no such method on - // the delegatee, but there was one on delegator before - // delegateMethod was called, then the original version - // is invoked instead. - // For example: - // - // var a = { - // method1: function() { console.log('a1'); } - // method2: function() { console.log('a2'); } - // }; - // var b = { - // method1: function() { console.log('b1'); } - // }; - // delegateMethod(a, b, "method1"); - // delegateMethod(a, b, "method2"); - // a.method1(); - // a.method2(); - // - // The output would be "b1", "a2". - function delegateMethod(delegator, delegatee, methodName) { - var inherited = delegator[methodName]; - delegator[methodName] = function() { - var target = delegatee; - var method = delegatee[methodName]; - - // The method doesn't exist on the delegatee. Instead, - // call the method on the delegator, if it exists. - if (!method) { - target = delegator; - method = inherited; - } - - if (method) { - return method.apply(target, arguments); - } - }; - } - - // Implement a vague facsimilie of jQuery's data method - function elementData(el, name, value) { - if (arguments.length == 2) { - return el["htmlwidget_data_" + name]; - } else if (arguments.length == 3) { - el["htmlwidget_data_" + name] = value; - return el; - } else { - throw new Error("Wrong number of arguments for elementData: " + - arguments.length); - } - } - - // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex - function escapeRegExp(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - - function hasClass(el, className) { - var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); - return re.test(el.className); - } - - // elements - array (or array-like object) of HTML elements - // className - class name to test for - // include - if true, only return elements with given className; - // if false, only return elements *without* given className - function filterByClass(elements, className, include) { - var results = []; - for (var i = 0; i < elements.length; i++) { - if (hasClass(elements[i], className) == include) - results.push(elements[i]); - } - return results; - } - - function on(obj, eventName, func) { - if (obj.addEventListener) { - obj.addEventListener(eventName, func, false); - } else if (obj.attachEvent) { - obj.attachEvent(eventName, func); - } - } - - function off(obj, eventName, func) { - if (obj.removeEventListener) - obj.removeEventListener(eventName, func, false); - else if (obj.detachEvent) { - obj.detachEvent(eventName, func); - } - } - - // Translate array of values to top/right/bottom/left, as usual with - // the "padding" CSS property - // https://developer.mozilla.org/en-US/docs/Web/CSS/padding - function unpackPadding(value) { - if (typeof(value) === "number") - value = [value]; - if (value.length === 1) { - return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; - } - if (value.length === 2) { - return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; - } - if (value.length === 3) { - return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; - } - if (value.length === 4) { - return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; - } - } - - // Convert an unpacked padding object to a CSS value - function paddingToCss(paddingObj) { - return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; - } - - // Makes a number suitable for CSS - function px(x) { - if (typeof(x) === "number") - return x + "px"; - else - return x; - } - - // Retrieves runtime widget sizing information for an element. - // The return value is either null, or an object with fill, padding, - // defaultWidth, defaultHeight fields. - function sizingPolicy(el) { - var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); - if (!sizingEl) - return null; - var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); - if (viewerMode) { - return sp.viewer; - } else { - return sp.browser; - } - } - - // @param tasks Array of strings (or falsy value, in which case no-op). - // Each element must be a valid JavaScript expression that yields a - // function. Or, can be an array of objects with "code" and "data" - // properties; in this case, the "code" property should be a string - // of JS that's an expr that yields a function, and "data" should be - // an object that will be added as an additional argument when that - // function is called. - // @param target The object that will be "this" for each function - // execution. - // @param args Array of arguments to be passed to the functions. (The - // same arguments will be passed to all functions.) - function evalAndRun(tasks, target, args) { - if (tasks) { - forEach(tasks, function(task) { - var theseArgs = args; - if (typeof(task) === "object") { - theseArgs = theseArgs.concat([task.data]); - task = task.code; - } - var taskFunc = tryEval(task); - if (typeof(taskFunc) !== "function") { - throw new Error("Task must be a function! Source:\n" + task); - } - taskFunc.apply(target, theseArgs); - }); - } - } - - // Attempt eval() both with and without enclosing in parentheses. - // Note that enclosing coerces a function declaration into - // an expression that eval() can parse - // (otherwise, a SyntaxError is thrown) - function tryEval(code) { - var result = null; - try { - result = eval("(" + code + ")"); - } catch(error) { - if (!(error instanceof SyntaxError)) { - throw error; - } - try { - result = eval(code); - } catch(e) { - if (e instanceof SyntaxError) { - throw error; - } else { - throw e; - } - } - } - return result; - } - - function initSizing(el) { - var sizing = sizingPolicy(el); - if (!sizing) - return; - - var cel = document.getElementById("htmlwidget_container"); - if (!cel) - return; - - if (typeof(sizing.padding) !== "undefined") { - document.body.style.margin = "0"; - document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); - } - - if (sizing.fill) { - document.body.style.overflow = "hidden"; - document.body.style.width = "100%"; - document.body.style.height = "100%"; - document.documentElement.style.width = "100%"; - document.documentElement.style.height = "100%"; - cel.style.position = "absolute"; - var pad = unpackPadding(sizing.padding); - cel.style.top = pad.top + "px"; - cel.style.right = pad.right + "px"; - cel.style.bottom = pad.bottom + "px"; - cel.style.left = pad.left + "px"; - el.style.width = "100%"; - el.style.height = "100%"; - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - } - } - - // Default implementations for methods - var defaults = { - find: function(scope) { - return querySelectorAll(scope, "." + this.name); - }, - renderError: function(el, err) { - var $el = $(el); - - this.clearError(el); - - // Add all these error classes, as Shiny does - var errClass = "shiny-output-error"; - if (err.type !== null) { - // use the classes of the error condition as CSS class names - errClass = errClass + " " + $.map(asArray(err.type), function(type) { - return errClass + "-" + type; - }).join(" "); - } - errClass = errClass + " htmlwidgets-error"; - - // Is el inline or block? If inline or inline-block, just display:none it - // and add an inline error. - var display = $el.css("display"); - $el.data("restore-display-mode", display); - - if (display === "inline" || display === "inline-block") { - $el.hide(); - if (err.message !== "") { - var errorSpan = $("").addClass(errClass); - errorSpan.text(err.message); - $el.after(errorSpan); - } - } else if (display === "block") { - // If block, add an error just after the el, set visibility:none on the - // el, and position the error to be on top of the el. - // Mark it with a unique ID and CSS class so we can remove it later. - $el.css("visibility", "hidden"); - if (err.message !== "") { - var errorDiv = $("
").addClass(errClass).css("position", "absolute") - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - // setting width can push out the page size, forcing otherwise - // unnecessary scrollbars to appear and making it impossible for - // the element to shrink; so use max-width instead - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - errorDiv.text(err.message); - $el.after(errorDiv); - - // Really dumb way to keep the size/position of the error in sync with - // the parent element as the window is resized or whatever. - var intId = setInterval(function() { - if (!errorDiv[0].parentElement) { - clearInterval(intId); - return; - } - errorDiv - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - }, 500); - } - } - }, - clearError: function(el) { - var $el = $(el); - var display = $el.data("restore-display-mode"); - $el.data("restore-display-mode", null); - - if (display === "inline" || display === "inline-block") { - if (display) - $el.css("display", display); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } else if (display === "block"){ - $el.css("visibility", "inherit"); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } - }, - sizing: {} - }; - - // Called by widget bindings to register a new type of widget. The definition - // object can contain the following properties: - // - name (required) - A string indicating the binding name, which will be - // used by default as the CSS classname to look for. - // - initialize (optional) - A function(el) that will be called once per - // widget element; if a value is returned, it will be passed as the third - // value to renderValue. - // - renderValue (required) - A function(el, data, initValue) that will be - // called with data. Static contexts will cause this to be called once per - // element; Shiny apps will cause this to be called multiple times per - // element, as the data changes. - window.HTMLWidgets.widget = function(definition) { - if (!definition.name) { - throw new Error("Widget must have a name"); - } - if (!definition.type) { - throw new Error("Widget must have a type"); - } - // Currently we only support output widgets - if (definition.type !== "output") { - throw new Error("Unrecognized widget type '" + definition.type + "'"); - } - // TODO: Verify that .name is a valid CSS classname - - // Support new-style instance-bound definitions. Old-style class-bound - // definitions have one widget "object" per widget per type/class of - // widget; the renderValue and resize methods on such widget objects - // take el and instance arguments, because the widget object can't - // store them. New-style instance-bound definitions have one widget - // object per widget instance; the definition that's passed in doesn't - // provide renderValue or resize methods at all, just the single method - // factory(el, width, height) - // which returns an object that has renderValue(x) and resize(w, h). - // This enables a far more natural programming style for the widget - // author, who can store per-instance state using either OO-style - // instance fields or functional-style closure variables (I guess this - // is in contrast to what can only be called C-style pseudo-OO which is - // what we required before). - if (definition.factory) { - definition = createLegacyDefinitionAdapter(definition); - } - - if (!definition.renderValue) { - throw new Error("Widget must have a renderValue function"); - } - - // For static rendering (non-Shiny), use a simple widget registration - // scheme. We also use this scheme for Shiny apps/documents that also - // contain static widgets. - window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; - // Merge defaults into the definition; don't mutate the original definition. - var staticBinding = extend({}, defaults, definition); - overrideMethod(staticBinding, "find", function(superfunc) { - return function(scope) { - var results = superfunc(scope); - // Filter out Shiny outputs, we only want the static kind - return filterByClass(results, "html-widget-output", false); - }; - }); - window.HTMLWidgets.widgets.push(staticBinding); - - if (shinyMode) { - // Shiny is running. Register the definition with an output binding. - // The definition itself will not be the output binding, instead - // we will make an output binding object that delegates to the - // definition. This is because we foolishly used the same method - // name (renderValue) for htmlwidgets definition and Shiny bindings - // but they actually have quite different semantics (the Shiny - // bindings receive data that includes lots of metadata that it - // strips off before calling htmlwidgets renderValue). We can't - // just ignore the difference because in some widgets it's helpful - // to call this.renderValue() from inside of resize(), and if - // we're not delegating, then that call will go to the Shiny - // version instead of the htmlwidgets version. - - // Merge defaults with definition, without mutating either. - var bindingDef = extend({}, defaults, definition); - - // This object will be our actual Shiny binding. - var shinyBinding = new Shiny.OutputBinding(); - - // With a few exceptions, we'll want to simply use the bindingDef's - // version of methods if they are available, otherwise fall back to - // Shiny's defaults. NOTE: If Shiny's output bindings gain additional - // methods in the future, and we want them to be overrideable by - // HTMLWidget binding definitions, then we'll need to add them to this - // list. - delegateMethod(shinyBinding, bindingDef, "getId"); - delegateMethod(shinyBinding, bindingDef, "onValueChange"); - delegateMethod(shinyBinding, bindingDef, "onValueError"); - delegateMethod(shinyBinding, bindingDef, "renderError"); - delegateMethod(shinyBinding, bindingDef, "clearError"); - delegateMethod(shinyBinding, bindingDef, "showProgress"); - - // The find, renderValue, and resize are handled differently, because we - // want to actually decorate the behavior of the bindingDef methods. - - shinyBinding.find = function(scope) { - var results = bindingDef.find(scope); - - // Only return elements that are Shiny outputs, not static ones - var dynamicResults = results.filter(".html-widget-output"); - - // It's possible that whatever caused Shiny to think there might be - // new dynamic outputs, also caused there to be new static outputs. - // Since there might be lots of different htmlwidgets bindings, we - // schedule execution for later--no need to staticRender multiple - // times. - if (results.length !== dynamicResults.length) - scheduleStaticRender(); - - return dynamicResults; - }; - - // Wrap renderValue to handle initialization, which unfortunately isn't - // supported natively by Shiny at the time of this writing. - - shinyBinding.renderValue = function(el, data) { - Shiny.renderDependencies(data.deps); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var i = 0; data.evals && i < data.evals.length; i++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); - } - if (!bindingDef.renderOnNullValue) { - if (data.x === null) { - el.style.visibility = "hidden"; - return; - } else { - el.style.visibility = "inherit"; - } - } - if (!elementData(el, "initialized")) { - initSizing(el); - - elementData(el, "initialized", true); - if (bindingDef.initialize) { - var rect = el.getBoundingClientRect(); - var result = bindingDef.initialize(el, rect.width, rect.height); - elementData(el, "init_result", result); - } - } - bindingDef.renderValue(el, data.x, elementData(el, "init_result")); - evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); - }; - - // Only override resize if bindingDef implements it - if (bindingDef.resize) { - shinyBinding.resize = function(el, width, height) { - // Shiny can call resize before initialize/renderValue have been - // called, which doesn't make sense for widgets. - if (elementData(el, "initialized")) { - bindingDef.resize(el, width, height, elementData(el, "init_result")); - } - }; - } - - Shiny.outputBindings.register(shinyBinding, bindingDef.name); - } - }; - - var scheduleStaticRenderTimerId = null; - function scheduleStaticRender() { - if (!scheduleStaticRenderTimerId) { - scheduleStaticRenderTimerId = setTimeout(function() { - scheduleStaticRenderTimerId = null; - window.HTMLWidgets.staticRender(); - }, 1); - } - } - - // Render static widgets after the document finishes loading - // Statically render all elements that are of this widget's class - window.HTMLWidgets.staticRender = function() { - var bindings = window.HTMLWidgets.widgets || []; - forEach(bindings, function(binding) { - var matches = binding.find(document.documentElement); - forEach(matches, function(el) { - var sizeObj = initSizing(el, binding); - - var getSize = function(el) { - if (sizeObj) { - return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} - } else { - var rect = el.getBoundingClientRect(); - return {w: rect.width, h: rect.height} - } - }; - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - var size = getSize(el); - initResult = binding.initialize(el, size.w, size.h); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = getSize(el); - var resizeHandler = function(e) { - var size = getSize(el); - if (size.w === 0 && size.h === 0) - return; - if (size.w === lastSize.w && size.h === lastSize.h) - return; - lastSize = size; - binding.resize(el, size.w, size.h, initResult); - }; - - on(window, "resize", resizeHandler); - - // This is needed for cases where we're running in a Shiny - // app, but the widget itself is not a Shiny output, but - // rather a simple static widget. One example of this is - // an rmarkdown document that has runtime:shiny and widget - // that isn't in a render function. Shiny only knows to - // call resize handlers for Shiny outputs, not for static - // widgets, so we do it ourselves. - if (window.jQuery) { - window.jQuery(document).on( - "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", - resizeHandler - ); - window.jQuery(document).on( - "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", - resizeHandler - ); - } - - // This is needed for the specific case of ioslides, which - // flips slides between display:none and display:block. - // Ideally we would not have to have ioslide-specific code - // here, but rather have ioslides raise a generic event, - // but the rmarkdown package just went to CRAN so the - // window to getting that fixed may be long. - if (window.addEventListener) { - // It's OK to limit this to window.addEventListener - // browsers because ioslides itself only supports - // such browsers. - on(document, "slideenter", resizeHandler); - on(document, "slideleave", resizeHandler); - } - } - - var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); - if (scriptData) { - var data = JSON.parse(scriptData.textContent || scriptData.text); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var k = 0; data.evals && k < data.evals.length; k++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); - } - binding.renderValue(el, data.x, initResult); - evalAndRun(data.jsHooks.render, initResult, [el, data.x]); - } - }); - }); - - invokePostRenderHandlers(); - } - - - function has_jQuery3() { - if (!window.jQuery) { - return false; - } - var $version = window.jQuery.fn.jquery; - var $major_version = parseInt($version.split(".")[0]); - return $major_version >= 3; - } - - /* - / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's - / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now - / really means $(setTimeout(fn)). - / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous - / - / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny - / one tick later than it did before, which means staticRender() is - / called renderValue() earlier than (advanced) widget authors might be expecting. - / https://github.com/rstudio/shiny/issues/2630 - / - / For a concrete example, leaflet has some methods (e.g., updateBounds) - / which reference Shiny methods registered in initShiny (e.g., setInputValue). - / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to - / delay execution of those methods (until Shiny methods are ready) - / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 - / - / Ideally widget authors wouldn't need to use this setTimeout() hack that - / leaflet uses to call Shiny methods on a staticRender(). In the long run, - / the logic initShiny should be broken up so that method registration happens - / right away, but binding happens later. - */ - function maybeStaticRenderLater() { - if (shinyMode && has_jQuery3()) { - window.jQuery(window.HTMLWidgets.staticRender); - } else { - window.HTMLWidgets.staticRender(); - } - } - - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", function() { - document.removeEventListener("DOMContentLoaded", arguments.callee, false); - maybeStaticRenderLater(); - }, false); - } else if (document.attachEvent) { - document.attachEvent("onreadystatechange", function() { - if (document.readyState === "complete") { - document.detachEvent("onreadystatechange", arguments.callee); - maybeStaticRenderLater(); - } - }); - } - - - window.HTMLWidgets.getAttachmentUrl = function(depname, key) { - // If no key, default to the first item - if (typeof(key) === "undefined") - key = 1; - - var link = document.getElementById(depname + "-" + key + "-attachment"); - if (!link) { - throw new Error("Attachment " + depname + "/" + key + " not found in document"); - } - return link.getAttribute("href"); - }; - - window.HTMLWidgets.dataframeToD3 = function(df) { - var names = []; - var length; - for (var name in df) { - if (df.hasOwnProperty(name)) - names.push(name); - if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { - throw new Error("All fields must be arrays"); - } else if (typeof(length) !== "undefined" && length !== df[name].length) { - throw new Error("All fields must be arrays of the same length"); - } - length = df[name].length; - } - var results = []; - var item; - for (var row = 0; row < length; row++) { - item = {}; - for (var col = 0; col < names.length; col++) { - item[names[col]] = df[names[col]][row]; - } - results.push(item); - } - return results; - }; - - window.HTMLWidgets.transposeArray2D = function(array) { - if (array.length === 0) return array; - var newArray = array[0].map(function(col, i) { - return array.map(function(row) { - return row[i] - }) - }); - return newArray; - }; - // Split value at splitChar, but allow splitChar to be escaped - // using escapeChar. Any other characters escaped by escapeChar - // will be included as usual (including escapeChar itself). - function splitWithEscape(value, splitChar, escapeChar) { - var results = []; - var escapeMode = false; - var currentResult = ""; - for (var pos = 0; pos < value.length; pos++) { - if (!escapeMode) { - if (value[pos] === splitChar) { - results.push(currentResult); - currentResult = ""; - } else if (value[pos] === escapeChar) { - escapeMode = true; - } else { - currentResult += value[pos]; - } - } else { - currentResult += value[pos]; - escapeMode = false; - } - } - if (currentResult !== "") { - results.push(currentResult); - } - return results; - } - // Function authored by Yihui/JJ Allaire - window.HTMLWidgets.evaluateStringMember = function(o, member) { - var parts = splitWithEscape(member, '.', '\\'); - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i]; - // part may be a character or 'numeric' member name - if (o !== null && typeof o === "object" && part in o) { - if (i == (l - 1)) { // if we are at the end of the line then evalulate - if (typeof o[part] === "string") - o[part] = tryEval(o[part]); - } else { // otherwise continue to next embedded object - o = o[part]; - } - } - } - }; - - // Retrieve the HTMLWidget instance (i.e. the return value of an - // HTMLWidget binding's initialize() or factory() function) - // associated with an element, or null if none. - window.HTMLWidgets.getInstance = function(el) { - return elementData(el, "init_result"); - }; - - // Finds the first element in the scope that matches the selector, - // and returns the HTMLWidget instance (i.e. the return value of - // an HTMLWidget binding's initialize() or factory() function) - // associated with that element, if any. If no element matches the - // selector, or the first matching element has no HTMLWidget - // instance associated with it, then null is returned. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.find = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var el = scope.querySelector(selector); - if (el === null) { - return null; - } else { - return window.HTMLWidgets.getInstance(el); - } - }; - - // Finds all elements in the scope that match the selector, and - // returns the HTMLWidget instances (i.e. the return values of - // an HTMLWidget binding's initialize() or factory() function) - // associated with the elements, in an array. If elements that - // match the selector don't have an associated HTMLWidget - // instance, the returned array will contain nulls. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.findAll = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var nodes = scope.querySelectorAll(selector); - var results = []; - for (var i = 0; i < nodes.length; i++) { - results.push(window.HTMLWidgets.getInstance(nodes[i])); - } - return results; - }; - - var postRenderHandlers = []; - function invokePostRenderHandlers() { - while (postRenderHandlers.length) { - var handler = postRenderHandlers.shift(); - if (handler) { - handler(); - } - } - } - - // Register the given callback function to be invoked after the - // next time static widgets are rendered. - window.HTMLWidgets.addPostRenderHandler = function(callback) { - postRenderHandlers.push(callback); - }; - - // Takes a new-style instance-bound definition, and returns an - // old-style class-bound definition. This saves us from having - // to rewrite all the logic in this file to accomodate both - // types of definitions. - function createLegacyDefinitionAdapter(defn) { - var result = { - name: defn.name, - type: defn.type, - initialize: function(el, width, height) { - return defn.factory(el, width, height); - }, - renderValue: function(el, x, instance) { - return instance.renderValue(x); - }, - resize: function(el, width, height, instance) { - return instance.resize(width, height); - } - }; - - if (defn.find) - result.find = defn.find; - if (defn.renderError) - result.renderError = defn.renderError; - if (defn.clearError) - result.clearError = defn.clearError; - - return result; - } -})(); diff --git a/docs/articles/Applications_files/leaflet-1.3.1/images/layers-2x.png b/docs/articles/Applications_files/leaflet-1.3.1/images/layers-2x.png deleted file mode 100644 index 200c333dca9652ac4cba004d609e5af4eee168c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1259 zcmVFhCYNy;#0irRPomHqW|G1C*;4?@4#E?jH>?v@U%cy?3dQAc-DchXVErpOh~ z-jbon+tNbnl6hoEb;)TVk+%hTDDi_G%i3*RZ&15!$Fjr^f;Ke&A@|?=`2&+{zr+3a z{D*=t(`AXyS%X7N z%a#RZw6vD^t_rnM`L4E>m=U&R!A-&}nZIi$BOPvkhrCuUe@BN~-lRD)f44;J%TwgE zcze8u!PQ_NR7?o(NylLXVTfDO zxs5=@|GsYEsNo4M#nT%N!UE(?dnS)t2+{ELYAFp*3=iF=|EQnTp`#vlSXuGVraYo? z+RCzXo6h3qA8{KG?S4nE(lM+;Eb4nT3XV;7gcAxUi5m)`k5tv}cPy()8ZR3TLW3I- zAS^}cq-IJvL7a4RgR!yk@~RT%$lA7{L5ES*hyx)M4(yxI$Ub(4f)K|^v1>zvwQY!_ zIrWw8q9GS^!Dp~}+?mbnB6jDF8mVlbQ!jFKDY;w=7;XO{9bq7>LXGK24WA`;rL)_Z z)&j}pbV(;6gY;VMhbxgvn`X;6x}VUEE-7 z%)7j-%t8S=ZL3yc)HbXDAqJZvBTPoiW_A-+a8m3_Z?v{DN7Tnr#O_VUMT0UBt$;p` zDh6JbGHN8JJ*JN%y2%msb97@_S>9!%Egwk;?PEkU9ntz&3uR}%Fj5d$JHQbQb3}a{ zSzFT^#n=VInPpcAS}CNxj?_ zVscANk5Cfz(51EI1pz};AWWb|kgbYNb4wCEGUn3+eMUMV?1-{=I4TlmLJMot@rd07 zZuo2hk1ccu{YmGkcYdWAVdk{Z4Nm?^cTD&}jGm+Q1SYIXMwmG*oO*83&#>l%nbR`G zhh=lZ%xIb7kU3#;TBbfECrnC9P=-XpL|TG2BoZdj61*XiFbW8?1Z_wp%#;>${SUIy V$8qr;L*)Pf002ovPDHLkV1hYLS~36t diff --git a/docs/articles/Applications_files/leaflet-1.3.1/images/layers.png b/docs/articles/Applications_files/leaflet-1.3.1/images/layers.png deleted file mode 100644 index 1a72e5784b2b456eac5d7670738db80697af3377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 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 e-I|>x8~*?ZhF3snGbtJX0000cOl4 diff --git a/docs/articles/Applications_files/leaflet-1.3.1/images/marker-icon.png b/docs/articles/Applications_files/leaflet-1.3.1/images/marker-icon.png deleted file mode 100644 index 950edf24677ded147df13b26f91baa2b0fa70513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)P001cn1^@s6z>|W`000GnNklGNuHDcIX17Zdjl&3`L?0sTjIws<{((Dh&g-s0<@jYQyl?D*X^?%13;ml^gy> ziMrY_^1WI=(g@LMizu=zCoA>C`6|QEq1eV92k*7m>G65*&@&6)aC&e}G zI)pf-Za|N`DT&Cn1J|o`19mumxW~hiKiKyc-P`S@q)rdTo84@QI@;0yXrG%9uhI>A zG5QHb6s4=<6xy{1 z@NMxEkryp{LS44%z$3lP^cX!9+2-;CTt3wM4(k*#C{aiIiLuB>jJj;KPhPzIC00bL zU3a#;aJld94lCW=`4&aAy8M7PY=HQ>O%$YEP4c4UY#CRxfgbE~(|uiI=YS8q;O9y6 zmIkXzR`}p7ti|PrM3a}WMnR=3NVnWdAAR>b9X@)DKL6=YsvmH%?I24wdq?Gh54_;# z$?_LvgjEdspdQlft#4CQ z`2Zyvy?*)N1Ftw|{_hakhG9WjS?Az@I@+IZ8JbWewR!XUK4&6346+d#~gsE0SY(LX8&JfY>Aj)RxGy96nwhs2rv zzW6pTnMpFkDSkT*a*6Dx|u@ds6ISVn0@^RmIsKZ5Y;bazbc;tTSq(kg(=481ODrPyNB6n z-$+U}(w$m6U6H$w17Bw+wDaFIe~GvNMYvnw31MpY0eQKT9l>SU``8k7w4)z!GZKMI z#_cEKq7k~i%nlK@6c-K?+R;B#5$?T#YpKD`t_4bAs^#E+@5QW$@OX3*`;(#{U^d-vY)&xEE>n5lYl&T?Amke9$Lam@{1K@O ze*LXqlKQHiv=gx+V^Cbb2?z@ISBQ*3amF;9UJ3SBg(N|710TLamQmYZ&Qjn2LuO<* zCZlB4n%@pc&7NNnY1}x+NWpHlq`OJEo|`aYN9<`RBUB+79g;>dgb6YlfN#kGL?lO_ z!6~M^7sOnbsUkKk<@Ysie&`G>ruxH&Mgy&8;i=A zB9OO!xR{AyODw>DS-q5YM{0ExFEAzt zm>RdS+ssW(-8|?xr0(?$vBVB*%(xDLtq3Hf0I5yFm<_g=W2`QWAax{1rWVH=I!VrP zs(rTFX@W#t$hXNvbgX`gK&^w_YD;CQ!B@e0QbLIWaKAXQe2-kkloo;{iF#6}z!4=W zi$giRj1{ zt;2w`VSCF#WE&*ev7jpsC=6175@(~nTE2;7M-L((0bH@yG}-TB$R~WXd?tA$s3|%y zA`9$sA(>F%J3ioz<-LJl*^o1|w84l>HBR`>3l9c8$5Xr@xCiIQ7{x$fMCzOk_-M=% z+{a_Q#;42`#KfUte@$NT77uaTz?b-fBe)1s5XE$yA79fm?KqM^VgLXD07*qoM6N<$ Ef<_J(9smFU diff --git a/docs/articles/Applications_files/leaflet-1.3.1/leaflet.css b/docs/articles/Applications_files/leaflet-1.3.1/leaflet.css deleted file mode 100644 index d1b47a1..0000000 --- a/docs/articles/Applications_files/leaflet-1.3.1/leaflet.css +++ /dev/null @@ -1,636 +0,0 @@ -/* required styles */ - -.leaflet-pane, -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-tile-container, -.leaflet-pane > svg, -.leaflet-pane > canvas, -.leaflet-zoom-box, -.leaflet-image-layer, -.leaflet-layer { - position: absolute; - left: 0; - top: 0; - } -.leaflet-container { - overflow: hidden; - } -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-user-drag: none; - } -/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ -.leaflet-safari .leaflet-tile { - image-rendering: -webkit-optimize-contrast; - } -/* hack that prevents hw layers "stretching" when loading new tiles */ -.leaflet-safari .leaflet-tile-container { - width: 1600px; - height: 1600px; - -webkit-transform-origin: 0 0; - } -.leaflet-marker-icon, -.leaflet-marker-shadow { - display: block; - } -/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ -/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ -.leaflet-container .leaflet-overlay-pane svg, -.leaflet-container .leaflet-marker-pane img, -.leaflet-container .leaflet-shadow-pane img, -.leaflet-container .leaflet-tile-pane img, -.leaflet-container img.leaflet-image-layer { - max-width: none !important; - max-height: none !important; - } - -.leaflet-container.leaflet-touch-zoom { - -ms-touch-action: pan-x pan-y; - touch-action: pan-x pan-y; - } -.leaflet-container.leaflet-touch-drag { - -ms-touch-action: pinch-zoom; - /* Fallback for FF which doesn't support pinch-zoom */ - touch-action: none; - touch-action: pinch-zoom; -} -.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { - -ms-touch-action: none; - touch-action: none; -} -.leaflet-container { - -webkit-tap-highlight-color: transparent; -} -.leaflet-container a { - -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); -} -.leaflet-tile { - filter: inherit; - visibility: hidden; - } -.leaflet-tile-loaded { - visibility: inherit; - } -.leaflet-zoom-box { - width: 0; - height: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - z-index: 800; - } -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-pane { z-index: 400; } - -.leaflet-tile-pane { z-index: 200; } -.leaflet-overlay-pane { z-index: 400; } -.leaflet-shadow-pane { z-index: 500; } -.leaflet-marker-pane { z-index: 600; } -.leaflet-tooltip-pane { z-index: 650; } -.leaflet-popup-pane { z-index: 700; } - -.leaflet-map-pane canvas { z-index: 100; } -.leaflet-map-pane svg { z-index: 200; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 800; - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-tile { - will-change: opacity; - } -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } -.leaflet-zoom-animated { - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - will-change: transform; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-interactive { - cursor: pointer; - } -.leaflet-grab { - cursor: -webkit-grab; - cursor: -moz-grab; - } -.leaflet-crosshair, -.leaflet-crosshair .leaflet-interactive { - cursor: crosshair; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-grab, -.leaflet-dragging .leaflet-grab .leaflet-interactive, -.leaflet-dragging .leaflet-marker-draggable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - } - -/* marker & overlays interactivity */ -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-image-layer, -.leaflet-pane > svg path, -.leaflet-tile-container { - pointer-events: none; - } - -.leaflet-marker-icon.leaflet-interactive, -.leaflet-image-layer.leaflet-interactive, -.leaflet-pane > svg path.leaflet-interactive { - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline: 0; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-container a.leaflet-active { - outline: 2px solid orange; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a, -.leaflet-bar a:hover { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } -.leaflet-touch .leaflet-bar a:first-child { - border-top-left-radius: 2px; - border-top-right-radius: 2px; - } -.leaflet-touch .leaflet-bar a:last-child { - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; - } - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } - -.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { - font-size: 22px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(images/layers.png); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(images/layers-2x.png); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-scrollbar { - overflow-y: scroll; - overflow-x: hidden; - padding-right: 5px; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - -/* Default icon URLs */ -.leaflet-default-icon-path { - background-image: url(images/marker-icon.png); - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.7); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover { - text-decoration: underline; - } -.leaflet-container .leaflet-control-attribution, -.leaflet-container .leaflet-control-scale { - font-size: 11px; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - font-size: 11px; - white-space: nowrap; - overflow: hidden; - -moz-box-sizing: border-box; - box-sizing: border-box; - - background: #fff; - background: rgba(255, 255, 255, 0.5); - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - margin-bottom: 20px; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 19px; - line-height: 1.4; - } -.leaflet-popup-content p { - margin: 18px 0; - } -.leaflet-popup-tip-container { - width: 40px; - height: 20px; - position: absolute; - left: 50%; - margin-left: -20px; - overflow: hidden; - pointer-events: none; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - color: #333; - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - padding: 4px 4px 0 0; - border: none; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - color: #c3c3c3; - text-decoration: none; - font-weight: bold; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; - } -.leaflet-popup-scrolled { - overflow: auto; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } -.leaflet-oldie .leaflet-popup-tip-container { - margin-top: -1px; - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } - - -/* Tooltip */ -/* Base styles for the element that has a tooltip */ -.leaflet-tooltip { - position: absolute; - padding: 6px; - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - color: #222; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.4); - } -.leaflet-tooltip.leaflet-clickable { - cursor: pointer; - pointer-events: auto; - } -.leaflet-tooltip-top:before, -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - position: absolute; - pointer-events: none; - border: 6px solid transparent; - background: transparent; - content: ""; - } - -/* Directions */ - -.leaflet-tooltip-bottom { - margin-top: 6px; -} -.leaflet-tooltip-top { - margin-top: -6px; -} -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-top:before { - left: 50%; - margin-left: -6px; - } -.leaflet-tooltip-top:before { - bottom: 0; - margin-bottom: -12px; - border-top-color: #fff; - } -.leaflet-tooltip-bottom:before { - top: 0; - margin-top: -12px; - margin-left: -6px; - border-bottom-color: #fff; - } -.leaflet-tooltip-left { - margin-left: -6px; -} -.leaflet-tooltip-right { - margin-left: 6px; -} -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - top: 50%; - margin-top: -6px; - } -.leaflet-tooltip-left:before { - right: 0; - margin-right: -12px; - border-left-color: #fff; - } -.leaflet-tooltip-right:before { - left: 0; - margin-left: -12px; - border-right-color: #fff; - } diff --git a/docs/articles/Applications_files/leaflet-1.3.1/leaflet.js b/docs/articles/Applications_files/leaflet-1.3.1/leaflet.js deleted file mode 100644 index 4eca8af..0000000 --- a/docs/articles/Applications_files/leaflet-1.3.1/leaflet.js +++ /dev/null @@ -1,5 +0,0 @@ -/* @preserve - * Leaflet 1.3.1+Detached: ba6f97fff8647e724e4dfe66d2ed7da11f908989.ba6f97f, a JS library for interactive maps. https://leafletjs.com - * (c) 2010-2017 Vladimir Agafonkin, (c) 2010-2011 CloudMade - */ -!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";function i(t){var i,e,n,o;for(e=1,n=arguments.length;e=0}function I(t,i,e,n){return"touchstart"===i?O(t,e,n):"touchmove"===i?W(t,e,n):"touchend"===i&&H(t,e,n),this}function B(t,i,e){var n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(Qi,n,!1):"touchmove"===i?t.removeEventListener(te,n,!1):"touchend"===i&&(t.removeEventListener(ie,n,!1),t.removeEventListener(ee,n,!1)),this}function O(t,i,n){var o=e(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(ne.indexOf(t.target.tagName)<0))return;$(t)}j(t,i)});t["_leaflet_touchstart"+n]=o,t.addEventListener(Qi,o,!1),se||(document.documentElement.addEventListener(Qi,R,!0),document.documentElement.addEventListener(te,D,!0),document.documentElement.addEventListener(ie,N,!0),document.documentElement.addEventListener(ee,N,!0),se=!0)}function R(t){oe[t.pointerId]=t,re++}function D(t){oe[t.pointerId]&&(oe[t.pointerId]=t)}function N(t){delete oe[t.pointerId],re--}function j(t,i){t.touches=[];for(var e in oe)t.touches.push(oe[e]);t.changedTouches=[t],i(t)}function W(t,i,e){var n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&j(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(te,n,!1)}function H(t,i,e){var n=function(t){j(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(ie,n,!1),t.addEventListener(ee,n,!1)}function F(t,i,e){function n(t){var i;if(Ui){if(!Pi||"mouse"===t.pointerType)return;i=re}else i=t.touches.length;if(!(i>1)){var e=Date.now(),n=e-(s||e);r=t.touches?t.touches[0]:t,a=n>0&&n<=h,s=e}}function o(t){if(a&&!r.cancelBubble){if(Ui){if(!Pi||"mouse"===t.pointerType)return;var e,n,o={};for(n in r)e=r[n],o[n]=e&&e.bind?e.bind(r):e;r=o}r.type="dblclick",i(r),s=null}}var s,r,a=!1,h=250;return t[ue+ae+e]=n,t[ue+he+e]=o,t[ue+"dblclick"+e]=i,t.addEventListener(ae,n,!1),t.addEventListener(he,o,!1),t.addEventListener("dblclick",i,!1),this}function U(t,i){var e=t[ue+ae+i],n=t[ue+he+i],o=t[ue+"dblclick"+i];return t.removeEventListener(ae,e,!1),t.removeEventListener(he,n,!1),Pi||t.removeEventListener("dblclick",o,!1),this}function V(t,i,e,n){if("object"==typeof i)for(var o in i)G(t,o,i[o],e);else for(var s=0,r=(i=u(i)).length;s100&&n<500||t.target._simulatedClick&&!t._simulated?Q(t):(pi=e,i(t))}function rt(t){return"string"==typeof t?document.getElementById(t):t}function at(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function ht(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ut(t){var i=t.parentNode;i&&i.removeChild(t)}function lt(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ct(t){var i=t.parentNode;i.lastChild!==t&&i.appendChild(t)}function _t(t){var i=t.parentNode;i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function dt(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=gt(t);return e.length>0&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function pt(t,i){if(void 0!==t.classList)for(var e=u(i),n=0,o=e.length;nh&&(s=r,h=a);h>e&&(i[s]=1,Et(t,i,e,n,s),Et(t,i,e,s,o))}function kt(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;ni&&(e.push(t[n]),o=n);return oi.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function Ot(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Rt(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return u>0&&((o=((t.x-s)*a+(t.y-r)*h)/u)>1?(s=e.x,r=e.y):o>0&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new x(s,r)}function Dt(t){return!ei(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function Nt(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),Dt(t)}function jt(t,i,e){var n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o0?Math.floor(t):Math.ceil(t)};x.prototype={clone:function(){return new x(this.x,this.y)},add:function(t){return this.clone()._add(w(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(w(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new x(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new x(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=li(this.x),this.y=li(this.y),this},distanceTo:function(t){var i=(t=w(t)).x-this.x,e=t.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(t=w(t)).x===this.x&&t.y===this.y},contains:function(t){return t=w(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+a(this.x)+", "+a(this.y)+")"}},P.prototype={extend:function(t){return t=w(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new x((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new x(this.min.x,this.max.y)},getTopRight:function(){return new x(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t="number"==typeof t[0]||t instanceof x?w(t):b(t))instanceof P?(i=t.min,e=t.max):i=e=t,i.x>=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng1,Yi=!!document.createElement("canvas").getContext,Xi=!(!document.createElementNS||!E("svg").createSVGRect),Ji=!Xi&&function(){try{var t=document.createElement("div");t.innerHTML='';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}(),$i=(Object.freeze||Object)({ie:wi,ielt9:Li,edge:Pi,webkit:bi,android:Ti,android23:zi,androidStock:Ci,opera:Zi,chrome:Si,gecko:Ei,safari:ki,phantom:Ai,opera12:Ii,win:Bi,ie3d:Oi,webkit3d:Ri,gecko3d:Di,any3d:Ni,mobile:ji,mobileWebkit:Wi,mobileWebkit3d:Hi,msPointer:Fi,pointer:Ui,touch:Vi,mobileOpera:qi,mobileGecko:Gi,retina:Ki,canvas:Yi,svg:Xi,vml:Ji}),Qi=Fi?"MSPointerDown":"pointerdown",te=Fi?"MSPointerMove":"pointermove",ie=Fi?"MSPointerUp":"pointerup",ee=Fi?"MSPointerCancel":"pointercancel",ne=["INPUT","SELECT","OPTION"],oe={},se=!1,re=0,ae=Fi?"MSPointerDown":Ui?"pointerdown":"touchstart",he=Fi?"MSPointerUp":Ui?"pointerup":"touchend",ue="_leaflet_",le="_leaflet_events",ce=Bi&&Si?2*window.devicePixelRatio:Ei?window.devicePixelRatio:1,_e={},de=(Object.freeze||Object)({on:V,off:q,stopPropagation:Y,disableScrollPropagation:X,disableClickPropagation:J,preventDefault:$,stop:Q,getMousePosition:tt,getWheelDelta:it,fakeStop:et,skipped:nt,isExternalTarget:ot,addListener:V,removeListener:q}),pe=xt(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),me=xt(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),fe="webkitTransition"===me||"OTransition"===me?me+"End":"transitionend";if("onselectstart"in document)mi=function(){V(window,"selectstart",$)},fi=function(){q(window,"selectstart",$)};else{var ge=xt(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);mi=function(){if(ge){var t=document.documentElement.style;gi=t[ge],t[ge]="none"}},fi=function(){ge&&(document.documentElement.style[ge]=gi,gi=void 0)}}var ve,ye,xe=(Object.freeze||Object)({TRANSFORM:pe,TRANSITION:me,TRANSITION_END:fe,get:rt,getStyle:at,create:ht,remove:ut,empty:lt,toFront:ct,toBack:_t,hasClass:dt,addClass:pt,removeClass:mt,setClass:ft,getClass:gt,setOpacity:vt,testProp:xt,setTransform:wt,setPosition:Lt,getPosition:Pt,disableTextSelection:mi,enableTextSelection:fi,disableImageDrag:bt,enableImageDrag:Tt,preventOutline:zt,restoreOutline:Mt}),we=ui.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pt(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=f(this._animate,this),this._step()},_step:function(t){var i=+new Date-this._startTime,e=1e3*this._duration;ithis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,z(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},invalidateSize:function(t){if(!this._loaded)return this;t=i({animate:!1,pan:!0},!0===t?{animate:!0}:t);var n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var o=this.getSize(),s=n.divideBy(2).round(),r=o.divideBy(2).round(),a=s.subtract(r);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(e(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:n,newSize:o})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=i({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var n=e(this._handleGeolocationResponse,this),o=e(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,o,t):navigator.geolocation.getCurrentPosition(n,o,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new M(t.coords.latitude,t.coords.longitude),e=i.toBounds(t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)"number"==typeof t.coords[r]&&(s[r]=t.coords[r]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ut(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)ut(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=ht("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new T(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=z(t),e=w(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=b(this.project(a,n),this.project(r,n)).getSize(),l=Ni?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new x(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new P(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(C(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(w(t),i)},layerPointToLatLng:function(t){var i=w(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(C(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(C(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(z(t))},distance:function(t,i){return this.options.crs.distance(C(t),C(i))},containerPointToLayerPoint:function(t){return w(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return w(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(w(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(C(t)))},mouseEventToContainerPoint:function(t){return tt(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=rt(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");V(i,"scroll",this._onScroll,this),this._containerId=n(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&Ni,pt(t,"leaflet-container"+(Vi?" leaflet-touch":"")+(Ki?" leaflet-retina":"")+(Li?" leaflet-oldie":"")+(ki?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=at(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Lt(this._mapPane,new x(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(pt(t.markerPane,"leaflet-zoom-hide"),pt(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){Lt(this._mapPane,new x(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return g(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Lt(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[n(this._container)]=this;var i=t?q:V;i(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),Ni&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){g(this._resizeRequest),this._resizeRequest=f(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,o=[],s="mouseout"===i||"mouseover"===i,r=t.target||t.srcElement,a=!1;r;){if((e=this._targets[n(r)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){a=!0;break}if(e&&e.listens(i,!0)){if(s&&!ot(r,t))break;if(o.push(e),s)break}if(r===this._container)break;r=r.parentNode}return o.length||a||s||!ot(r,t)||(o=[this]),o},_handleDOMEvent:function(t){if(this._loaded&&!nt(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i||zt(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,n){if("click"===t.type){var o=i({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,e))).length){var s=n[0];"contextmenu"===e&&s.listens(e,!0)&&$(t);var r={originalEvent:t};if("keypress"!==t.type){var a=s.getLatLng&&(!s._radius||s._radius<=10);r.containerPoint=a?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPoint=this.containerPointToLayerPoint(r.containerPoint),r.latlng=a?s.getLatLng():this.layerPointToLatLng(r.layerPoint)}for(var h=0;h0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=Ni?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){mt(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var t=this._proxy=ht("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var i=pe,e=this._proxy.style[i];wt(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",function(){var t=this.getCenter(),i=this.getZoom();wt(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ut(this._proxy),delete this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(f(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,n,o){this._mapPane&&(n&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,pt(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:o}),setTimeout(e(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mt(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),f(function(){this._moveEnd(!0)},this))}}),Pe=v.extend({options:{position:"topright"},initialize:function(t){l(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return pt(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this},remove:function(){return this._map?(ut(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),be=function(t){return new Pe(t)};Le.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){function t(t,o){var s=e+t+" "+e+o;i[t+o]=ht("div",s,n)}var i=this._controlCorners={},e="leaflet-",n=this._controlContainer=ht("div",e+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ut(this._controlCorners[t]);ut(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Te=Pe.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(n(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),o=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=o):i=this._createRadioElement("leaflet-base-layers",o),this._layerControlInputs.push(i),i.layerId=n(t.layer),V(i,"click",this._onInputClick,this);var s=document.createElement("span");s.innerHTML=" "+t.name;var r=document.createElement("div");return e.appendChild(r),r.appendChild(i),r.appendChild(s),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ze=Pe.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=ht("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=ht("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),J(s),V(s,"click",Q),V(s,"click",o,this),V(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";mt(this._zoomInButton,i),mt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&pt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&pt(this._zoomInButton,i)}});Le.mergeOptions({zoomControl:!0}),Le.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new ze,this.addControl(this.zoomControl))});var Me=Pe.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i=ht("div","leaflet-control-scale"),e=this.options;return this._addScales(e,"leaflet-control-scale-line",i),t.on(e.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=ht("div",i,e)),t.imperial&&(this._iScale=ht("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1,i*e}}),Ce=Pe.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){l(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=ht("div","leaflet-control-attribution"),J(this._container);for(var i in t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Le.mergeOptions({attributionControl:!0}),Le.addInitHook(function(){this.options.attributionControl&&(new Ce).addTo(this)});Pe.Layers=Te,Pe.Zoom=ze,Pe.Scale=Me,Pe.Attribution=Ce,be.layers=function(t,i,e){return new Te(t,i,e)},be.zoom=function(t){return new ze(t)},be.scale=function(t){return new Me(t)},be.attribution=function(t){return new Ce(t)};var Ze=v.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Ze.addTo=function(t,i){return t.addHandler(i,this),this};var Se,Ee={Events:hi},ke=Vi?"touchstart mousedown":"mousedown",Ae={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},Ie={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},Be=ui.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){l(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(V(this._dragStartTarget,ke,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Be._dragging===this&&this.finishDrag(),q(this._dragStartTarget,ke,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!dt(this._element,"leaflet-zoom-anim")&&!(Be._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(Be._dragging=this,this._preventOutline&&zt(this._element),bt(),mi(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t;this._startPoint=new x(i.clientX,i.clientY),V(document,Ie[t.type],this._onMove,this),V(document,Ae[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new x(i.clientX,i.clientY).subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)1e-7;h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return new M(a*e,t.x*e/n)}},je=(Object.freeze||Object)({LonLat:De,Mercator:Ne,SphericalMercator:di}),We=i({},_i,{code:"EPSG:3395",projection:Ne,transformation:function(){var t=.5/(Math.PI*Ne.R);return S(t,.5,-t,.5)}()}),He=i({},_i,{code:"EPSG:4326",projection:De,transformation:S(1/180,1,-1/180,.5)}),Fe=i({},ci,{projection:De,transformation:S(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});ci.Earth=_i,ci.EPSG3395=We,ci.EPSG3857=vi,ci.EPSG900913=yi,ci.EPSG4326=He,ci.Simple=Fe;var Ue=ui.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[n(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[n(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});Le.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=n(t);return this._layers[i]?this:(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var i=n(t);return this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&n(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?ei(t)?t:[t]:[]).length;ithis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()i)return r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=C(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new T,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return Dt(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=Dt(t),n=0,o=t.length;n=2&&i[0]instanceof M&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){tn.prototype._setLatLngs.call(this,t),Dt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Dt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new x(i,i);if(t=new P(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;ot.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||tn.prototype._containsPoint.call(this,t,!0)}}),nn=qe.extend({initialize:function(t,i){l(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=ei(t)?t:t.features;if(o){for(i=0,e=o.length;i0?o:[i.src]}else{ei(this._url)||(this._url=[this._url]),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop;for(var a=0;ao?(i.height=o+"px",pt(t,"leaflet-popup-scrolled")):mt(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Lt(this._container,i.add(e))},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var t=this._map,i=parseInt(at(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new x(this._containerLeft,-e-this._containerBottom);o._add(Pt(this._container));var s=t.layerPointToContainerPoint(o),r=w(this.options.autoPanPadding),a=w(this.options.autoPanPaddingTopLeft||r),h=w(this.options.autoPanPaddingBottomRight||r),u=t.getSize(),l=0,c=0;s.x+n+h.x>u.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),Q(t)},_getAnchor:function(){return w(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Le.mergeOptions({closePopupOnClick:!0}),Le.include({openPopup:function(t,i,e){return t instanceof un||(t=new un(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Ue.include({bindPopup:function(t,i){return t instanceof un?(l(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new un(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){if(t instanceof Ue||(i=t,t=this),t instanceof qe)for(var e in this._layers){t=this._layers[e];break}return i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup._source=t,this._popup.update(),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Q(t),i instanceof Je?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var ln=hn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){hn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=hn.prototype.getEvents.call(this);return Vi&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ht("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=w(this.options.offset),u=this._getAnchor();"top"===s?t=t.add(w(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t=t.subtract(w(r/2-h.x,-h.y,!0)):"center"===s?t=t.subtract(w(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.xthis.options.maxZoom||en&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new x(o,s);r.z=e+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1this.options.maxZoom||void 0!==this.options.minZoom&&o1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new x(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort(function(t,i){return t.distanceTo(s)-i.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(_=0;_e.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return z(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new T(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new x(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(Ci||i.el.setAttribute("src",ni),ut(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pt(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=r,t.onmousemove=r,Li&&this.options.opacity<1&&vt(t,this.options.opacity),Ti&&!zi&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var n=this._getTilePos(t),o=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),e(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&f(e(this._tileReady,this,t,null,s)),Lt(s,n),this._tiles[o]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,n){if(this._map){i&&this.fire("tileerror",{error:i,tile:n,coords:t});var o=this._tileCoordsToKey(t);(n=this._tiles[o])&&(n.loaded=+new Date,this._map._fadeAnimated?(vt(n.el,0),g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this)):(n.active=!0,this._pruneTiles()),i||(pt(n.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),Li||!this._map._fadeAnimated?f(this._pruneTiles,this):setTimeout(e(this._pruneTiles,this),250)))}},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new x(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new P(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),dn=_n.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=l(this,i)).detectRetina&&Ki&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),Ti||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},createTile:function(t,i){var n=document.createElement("img");return V(n,"load",e(this._tileOnLoad,this,i,n)),V(n,"error",e(this._tileOnError,this,i,n)),this.options.crossOrigin&&(n.crossOrigin=""),n.alt="",n.setAttribute("role","presentation"),n.src=this.getTileUrl(t),n},getTileUrl:function(t){var e={r:Ki?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=n),e["-y"]=n}return _(this._url,i(e,this.options))},_tileOnLoad:function(t,i){Li?setTimeout(e(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom,e=this.options.zoomReverse,n=this.options.zoomOffset;return e&&(t=i-t),t+n},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=r,i.onerror=r,i.complete||(i.src=ni,ut(i),delete this._tiles[t]))}}),pn=dn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var n=i({},this.defaultWmsParams);for(var o in e)o in this.options||(n[o]=e[o]);var s=(e=l(this,e)).detectRetina&&Ki?2:1,r=this.getTileSize();n.width=r.x*s,n.height=r.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=b(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===He?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=L.TileLayer.prototype.getTileUrl.call(this,t);return a+c(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,e){return i(this.wmsParams,t),e||this.redraw(),this}});dn.WMS=pn,Yt.wms=function(t,i){return new pn(t,i)};var mn=Ue.extend({options:{padding:.1,tolerance:0},initialize:function(t){l(this,t),n(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&pt(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Pt(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),r=this._map.project(t,i).subtract(s),a=o.multiplyBy(-e).add(n).add(o).subtract(r);Ni?wt(this._container,a,e):Lt(this._container,a)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new P(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),fn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){mn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");V(t,"mousemove",o(this._onMouseMove,32,this),this),V(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),V(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){delete this._ctx,ut(this._container),q(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){this._redrawBounds=null;for(var t in this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers={},mn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=Ki?2:1;Lt(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",Ki&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){mn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[n(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[L.stamp(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(t.options.dashArray){var i,e=t.options.dashArray.split(","),n=[];for(i=0;i')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),vn={_initContainer:function(){this._container=ht("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(mn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=gn("shape");pt(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=gn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ut(i),t.removeInteractiveTarget(i),delete this._layers[n(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=gn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=ei(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=gn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){ct(t._container)},_bringToBack:function(t){_t(t._container)}},yn=Ji?gn:E,xn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=yn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=yn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ut(this._container),q(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){mn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),Lt(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=yn("path");t.options.className&&pt(i,t.options.className),t.options.interactive&&pt(i,"leaflet-interactive"),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ut(t._path),t.removeInteractiveTarget(t._path),delete this._layers[n(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,k(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){ct(t._path)},_bringToBack:function(t){_t(t._path)}});Ji&&xn.include(vn),Le.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this.options.preferCanvas&&Xt()||Jt()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=xn&&Jt({pane:t})||fn&&Xt({pane:t}),this._paneRenderers[t]=i),i}});var wn=en.extend({initialize:function(t,i){en.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=z(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});xn.create=yn,xn.pointsToPath=k,nn.geometryToLayer=Wt,nn.coordsToLatLng=Ht,nn.coordsToLatLngs=Ft,nn.latLngToCoords=Ut,nn.latLngsToCoords=Vt,nn.getFeature=qt,nn.asFeature=Gt,Le.mergeOptions({boxZoom:!0});var Ln=Ze.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){V(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){q(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ut(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),mi(),bt(),this._startPoint=this._map.mouseEventToContainerPoint(t),V(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ht("div","leaflet-zoom-box",this._container),pt(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new P(this._point,this._startPoint),e=i.getSize();Lt(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ut(this._box),mt(this._container,"leaflet-crosshair")),fi(),Tt(),q(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(e(this._resetState,this),0);var i=new T(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Le.addInitHook("addHandler","boxZoom",Ln),Le.mergeOptions({doubleClickZoom:!0});var Pn=Ze.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Le.addInitHook("addHandler","doubleClickZoom",Pn),Le.mergeOptions({dragging:!0,inertia:!zi,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var bn=Ze.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new Be(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pt(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){mt(this._map._container,"leaflet-grab"),mt(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=z(this._map.options.maxBounds);this._offsetLimit=b(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.xi.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)0?s:-s))-i;this._delta=0,this._startTime=null,r&&("center"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});Le.addInitHook("addHandler","scrollWheelZoom",zn),Le.mergeOptions({tap:!0,tapTolerance:15});var Mn=Ze.extend({addHooks:function(){V(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){q(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if($(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new x(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&pt(n,"leaflet-active"),this._holdTimeout=setTimeout(e(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),V(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),q(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&mt(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new x(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});Vi&&!Ui&&Le.addInitHook("addHandler","tap",Mn),Le.mergeOptions({touchZoom:Vi&&!zi,bounceAtZoomLimits:!0});var Cn=Ze.extend({addHooks:function(){pt(this._map._container,"leaflet-touch-zoom"),V(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){mt(this._map._container,"leaflet-touch-zoom"),q(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),V(document,"touchmove",this._onTouchMove,this),V(document,"touchend",this._onTouchEnd,this),$(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,n=i.mouseEventToContainerPoint(t.touches[0]),o=i.mouseEventToContainerPoint(t.touches[1]),s=n.distanceTo(o)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoomi.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var r=n._add(o)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),g(this._animRequest);var a=e(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=f(a,this,!0),$(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,g(this._animRequest),q(document,"touchmove",this._onTouchMove),q(document,"touchend",this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});Le.addInitHook("addHandler","touchZoom",Cn),Le.BoxZoom=Ln,Le.DoubleClickZoom=Pn,Le.Drag=bn,Le.Keyboard=Tn,Le.ScrollWheelZoom=zn,Le.Tap=Mn,Le.TouchZoom=Cn;var Zn=window.L;window.L=t,Object.freeze=$t,t.version="1.3.1+HEAD.ba6f97f",t.noConflict=function(){return window.L=Zn,this},t.Control=Pe,t.control=be,t.Browser=$i,t.Evented=ui,t.Mixin=Ee,t.Util=ai,t.Class=v,t.Handler=Ze,t.extend=i,t.bind=e,t.stamp=n,t.setOptions=l,t.DomEvent=de,t.DomUtil=xe,t.PosAnimation=we,t.Draggable=Be,t.LineUtil=Oe,t.PolyUtil=Re,t.Point=x,t.point=w,t.Bounds=P,t.bounds=b,t.Transformation=Z,t.transformation=S,t.Projection=je,t.LatLng=M,t.latLng=C,t.LatLngBounds=T,t.latLngBounds=z,t.CRS=ci,t.GeoJSON=nn,t.geoJSON=Kt,t.geoJson=sn,t.Layer=Ue,t.LayerGroup=Ve,t.layerGroup=function(t,i){return new Ve(t,i)},t.FeatureGroup=qe,t.featureGroup=function(t){return new qe(t)},t.ImageOverlay=rn,t.imageOverlay=function(t,i,e){return new rn(t,i,e)},t.VideoOverlay=an,t.videoOverlay=function(t,i,e){return new an(t,i,e)},t.DivOverlay=hn,t.Popup=un,t.popup=function(t,i){return new un(t,i)},t.Tooltip=ln,t.tooltip=function(t,i){return new ln(t,i)},t.Icon=Ge,t.icon=function(t){return new Ge(t)},t.DivIcon=cn,t.divIcon=function(t){return new cn(t)},t.Marker=Xe,t.marker=function(t,i){return new Xe(t,i)},t.TileLayer=dn,t.tileLayer=Yt,t.GridLayer=_n,t.gridLayer=function(t){return new _n(t)},t.SVG=xn,t.svg=Jt,t.Renderer=mn,t.Canvas=fn,t.canvas=Xt,t.Path=Je,t.CircleMarker=$e,t.circleMarker=function(t,i){return new $e(t,i)},t.Circle=Qe,t.circle=function(t,i,e){return new Qe(t,i,e)},t.Polyline=tn,t.polyline=function(t,i){return new tn(t,i)},t.Polygon=en,t.polygon=function(t,i){return new en(t,i)},t.Rectangle=wn,t.rectangle=function(t,i){return new wn(t,i)},t.Map=Le,t.map=function(t,i){return new Le(t,i)}}); \ No newline at end of file diff --git a/docs/articles/Applications_files/leaflet-binding-2.1.1/leaflet.js b/docs/articles/Applications_files/leaflet-binding-2.1.1/leaflet.js deleted file mode 100644 index 1eafcbe..0000000 --- a/docs/articles/Applications_files/leaflet-binding-2.1.1/leaflet.js +++ /dev/null @@ -1,2785 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); - var colIndex = -1; - - if (typeof col === "undefined") { - var rowData = {}; - this.colnames.forEach(function (name, i) { - rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; - }); - return rowData; - } else if (typeof col === "string") { - colIndex = this._colIndex(col); - } else if (typeof col === "number") { - colIndex = col; - } - - if (colIndex < 0 || colIndex > this.columns.length) { - if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); - } - - return this.columns[colIndex][row % this.columns[colIndex].length]; - } - }, { - key: "nrow", - value: function nrow() { - return this.effectiveLength; - } - }]); - - return DataFrame; -}(); - -exports["default"] = DataFrame; - - -},{"./util":17}],5:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// In RMarkdown's self-contained mode, we don't have a way to carry around the -// images that Leaflet needs but doesn't load into the page. Instead, we'll use -// the unpkg CDN. -if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { - _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; -} - - -},{"./global/leaflet":10}],6:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// add texxtsize, textOnly, and style -_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; -_leaflet2["default"].Tooltip.prototype.options.textOnly = false; -_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. - -var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; - -_leaflet2["default"].Tooltip.prototype._initLayout = function () { - initLayoutOriginal.call(this); - this._container.style.fontSize = this.options.textsize; - - if (this.options.textOnly) { - _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); - } - - if (this.options.style) { - for (var property in this.options.style) { - this._container.style[property] = this.options.style[property]; - } - } -}; - - -},{"./global/leaflet":10}],7:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var protocolRegex = /^\/\//; - -var upgrade_protocol = function upgrade_protocol(urlTemplate) { - if (protocolRegex.test(urlTemplate)) { - if (window.location.protocol === "file:") { - // if in a local file, support http - // http should auto upgrade if necessary - urlTemplate = "http:" + urlTemplate; - } - } - - return urlTemplate; -}; - -var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; - -_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerInitialize.call(this, urlTemplate, options); -}; - -var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; - -_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerWMSInitialize.call(this, urlTemplate, options); -}; - - -},{"./global/leaflet":10}],8:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.HTMLWidgets; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],9:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.jQuery; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],11:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L.Proj; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.Shiny; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],13:[function(require,module,exports){ -"use strict"; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _controlStore = require("./control-store"); - -var _controlStore2 = _interopRequireDefault(_controlStore); - -var _layerManager = require("./layer-manager"); - -var _layerManager2 = _interopRequireDefault(_layerManager); - -var _methods = require("./methods"); - -var _methods2 = _interopRequireDefault(_methods); - -require("./fixup-default-icon"); - -require("./fixup-default-tooltip"); - -require("./fixup-url-protocol"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -window.LeafletWidget = {}; -window.LeafletWidget.utils = {}; - -var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); - -window.LeafletWidget.DataFrame = _dataframe2["default"]; -window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; -window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. - -function updateBounds(map) { - var id = map.getContainer().id; - var bounds = map.getBounds(); - - _shiny2["default"].onInputChange(id + "_bounds", { - north: bounds.getNorthEast().lat, - east: bounds.getNorthEast().lng, - south: bounds.getSouthWest().lat, - west: bounds.getSouthWest().lng - }); - - _shiny2["default"].onInputChange(id + "_center", { - lng: map.getCenter().lng, - lat: map.getCenter().lat - }); - - _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); -} - -function preventUnintendedZoomOnScroll(map) { - // Prevent unwanted scroll capturing. Similar in purpose to - // https://github.com/CliffCloud/Leaflet.Sleep but with a - // different set of heuristics. - // The basic idea is that when a mousewheel/DOMMouseScroll - // event is seen, we disable scroll wheel zooming until the - // user moves their mouse cursor or clicks on the map. This - // is slightly trickier than just listening for mousemove, - // because mousemove is fired when the page is scrolled, - // even if the user did not physically move the mouse. We - // handle this by examining the mousemove event's screenX - // and screenY properties; if they change, we know it's a - // "true" move. - // lastScreen can never be null, but its x and y can. - var lastScreen = { - x: null, - y: null - }; - (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { - // Disable zooming (until the mouse moves or click) - map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. - - lastScreen = { - x: e.originalEvent.screenX, - y: e.originalEvent.screenY - }; - }); - (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { - // Did the mouse really move? - if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { - // It really moved. Enable zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - }); - (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { - // Clicking always enables zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - }); -} - -_htmlwidgets2["default"].widget({ - name: "leaflet", - type: "output", - factory: function factory(el, width, height) { - var map = null; - return { - // we need to store our map in our returned object. - getMap: function getMap() { - return map; - }, - renderValue: function renderValue(data) { - // Create an appropriate CRS Object if specified - if (data && data.options && data.options.crs) { - data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); - } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 - - - if (map) { - map.remove(); - - map = function () { - return; - }(); // undefine map - - } - - if (data.options.mapFactory && typeof data.options.mapFactory === "function") { - map = data.options.mapFactory(el, data.options); - } else { - map = _leaflet2["default"].map(el, data.options); - } - - preventUnintendedZoomOnScroll(map); // Store some state in the map object - - map.leafletr = { - // Has the map ever rendered successfully? - hasRendered: false, - // Data to be rendered when resize is called with area != 0 - pendingRenderData: null - }; // Check if the map is rendered statically (no output binding) - - if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { - map.id = el.id; // Store the map on the element so we can find it later by ID - - (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app - - map.on("click", function (e) { - _shiny2["default"].onInputChange(map.id + "_click", { - lat: e.latlng.lat, - lng: e.latlng.lng, - ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed - - }); - }); - var groupTimerId = null; - map.on("moveend", function (e) { - updateBounds(e.target); - }).on("layeradd layerremove", function (e) { - // If the layer that's coming or going is a group we created, tell - // the server. - if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { - // But to avoid chattiness, coalesce events - if (groupTimerId) { - clearTimeout(groupTimerId); - groupTimerId = null; - } - - groupTimerId = setTimeout(function () { - groupTimerId = null; - - _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); - }, 100); - } - }); - } - - this.doRenderValue(data, map); - }, - doRenderValue: function doRenderValue(data, map) { - // Leaflet does not behave well when you set up a bunch of layers when - // the map is not visible (width/height == 0). Popups get misaligned - // relative to their owning markers, and the fitBounds calculations - // are off. Therefore we wait until the map is actually showing to - // render the value (we rely on the resize() callback being invoked - // at the appropriate time). - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - map.leafletr.pendingRenderData = data; - return; - } - - map.leafletr.pendingRenderData = null; // Merge data options into defaults - - var options = _jquery2["default"].extend({ - zoomToLimits: "always" - }, data.options); - - if (!map.layerManager) { - map.controls = new _controlStore2["default"](map); - map.layerManager = new _layerManager2["default"](map); - } else { - map.controls.clear(); - map.layerManager.clear(); - } - - var explicitView = false; - - if (data.setView) { - explicitView = true; - map.setView.apply(map, data.setView); - } - - if (data.fitBounds) { - explicitView = true; - methods.fitBounds.apply(map, data.fitBounds); - } - - if (data.flyTo) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - map.flyTo.apply(map, data.flyTo); - } - - if (data.flyToBounds) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - methods.flyToBounds.apply(map, data.flyToBounds); - } - - if (data.options.center) { - explicitView = true; - } // Returns true if the zoomToLimits option says that the map should be - // zoomed to map elements. - - - function needsZoom() { - return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; - } - - if (!explicitView && needsZoom() && !map.getZoom()) { - if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { - // Use the natural limits of what's being drawn on the map - // If the size of the bounding box is 0, leaflet gets all weird - var pad = 0.006; - - if (data.limits.lat[0] === data.limits.lat[1]) { - data.limits.lat[0] = data.limits.lat[0] - pad; - data.limits.lat[1] = data.limits.lat[1] + pad; - } - - if (data.limits.lng[0] === data.limits.lng[1]) { - data.limits.lng[0] = data.limits.lng[0] - pad; - data.limits.lng[1] = data.limits.lng[1] + pad; - } - - map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); - } else { - map.fitWorld(); - } - } - - for (var i = 0; data.calls && i < data.calls.length; i++) { - var call = data.calls[i]; - if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); - } - - map.leafletr.hasRendered = true; - - if (_htmlwidgets2["default"].shinyMode) { - setTimeout(function () { - updateBounds(map); - }, 1); - } - }, - resize: function resize(width, height) { - if (map) { - map.invalidateSize(); - - if (map.leafletr.pendingRenderData) { - this.doRenderValue(map.leafletr.pendingRenderData, map); - } - } - } - }; - } -}); - -if (_htmlwidgets2["default"].shinyMode) { - _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { - var id = data.id; - var el = document.getElementById(id); - var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; - - if (!map) { - (0, _util.log)("Couldn't find map with id " + id); - return; - } // If the map has not rendered, stash the proposed `leafletProxy()` calls - // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. - // This is necessary if the map has not been rendered. - // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. - - - if (!map.leafletr.hasRendered) { - map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); - return; - } - - for (var i = 0; i < data.calls.length; i++) { - var call = data.calls[i]; - var args = call.args; - - for (var _i = 0; _i < call.evals.length; _i++) { - window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); - } - - if (call.dependencies) { - _shiny2["default"].renderDependencies(call.dependencies); - } - - if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); - } - }); -} - - -},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = undefined; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _util = require("./util"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var LayerManager = /*#__PURE__*/function () { - function LayerManager(map) { - _classCallCheck(this, LayerManager); - - this._map = map; // BEGIN layer indices - // {: {: layer}} - - this._byGroup = {}; // {: {: layer}} - - this._byCategory = {}; // {: layer} - - this._byLayerId = {}; // {: { - // "group": , - // "layerId": , - // "category": , - // "container": - // } - // } - - this._byStamp = {}; // {: {: [, , ...], ...}} - - this._byCrosstalkGroup = {}; // END layer indices - // {: L.layerGroup} - - this._categoryContainers = {}; // {: L.layerGroup} - - this._groupContainers = {}; - } - - _createClass(LayerManager, [{ - key: "addLayer", - value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { - var _this = this; - - // Was a group provided? - var hasId = typeof layerId === "string"; - var grouped = typeof group === "string"; - var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. - // We may overwrite this let before using it (i.e. if a group is assigned). - // This one liner creates the _categoryContainers[category] entry if it - // doesn't already exist. - - var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); - - var oldLayer = null; - - if (hasId) { - // First, remove any layer with the same category and layerId - var prefixedLayerId = this._layerIdKey(category, layerId); - - oldLayer = this._byLayerId[prefixedLayerId]; - - if (oldLayer) { - this._removeLayer(oldLayer); - } // Update layerId index - - - this._byLayerId[prefixedLayerId] = layer; - } // Update group index - - - if (grouped) { - this._byGroup[group] = this._byGroup[group] || {}; - this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer - // group; instead, use the group's layer group. - // This one liner creates the _groupContainers[group] entry if it doesn't - // already exist. - - container = this.getLayerGroup(group, true); - } // Update category index - - - this._byCategory[category] = this._byCategory[category] || {}; - this._byCategory[category][stamp] = layer; // Update stamp index - - var layerInfo = this._byStamp[stamp] = { - layer: layer, - group: group, - ctGroup: ctGroup, - ctKey: ctKey, - layerId: layerId, - category: category, - container: container, - hidden: false - }; // Update crosstalk group index - - if (ctGroup) { - if (layer.setStyle) { - // Need to save this info so we know what to set opacity to later - layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; - layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; - } - - var ctg = this._byCrosstalkGroup[ctGroup]; - - if (!ctg) { - ctg = this._byCrosstalkGroup[ctGroup] = {}; - var crosstalk = global.crosstalk; - - var handleFilter = function handleFilter(e) { - if (!e.value) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo = _this._byStamp[ctg[key]]; - - _this._setVisibility(_layerInfo, true); - } - } else { - var selectedKeys = {}; - - for (var _i = 0; _i < e.value.length; _i++) { - selectedKeys[e.value[_i]] = true; - } - - var _groupKeys = Object.keys(ctg); - - for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { - var _key = _groupKeys[_i2]; - var _layerInfo2 = _this._byStamp[ctg[_key]]; - - _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); - } - } - }; - - var filterHandle = new crosstalk.FilterHandle(ctGroup); - filterHandle.on("change", handleFilter); - - var handleSelection = function handleSelection(e) { - if (!e.value || !e.value.length) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo3 = _this._byStamp[ctg[key]]; - - _this._setOpacity(_layerInfo3, 1.0); - } - } else { - var selectedKeys = {}; - - for (var _i3 = 0; _i3 < e.value.length; _i3++) { - selectedKeys[e.value[_i3]] = true; - } - - var _groupKeys2 = Object.keys(ctg); - - for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { - var _key2 = _groupKeys2[_i4]; - var _layerInfo4 = _this._byStamp[ctg[_key2]]; - - _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); - } - } - }; - - var selHandle = new crosstalk.SelectionHandle(ctGroup); - selHandle.on("change", handleSelection); - setTimeout(function () { - handleFilter({ - value: filterHandle.filteredKeys - }); - handleSelection({ - value: selHandle.value - }); - }, 100); - } - - if (!ctg[ctKey]) ctg[ctKey] = []; - ctg[ctKey].push(stamp); - } // Add to container - - - if (!layerInfo.hidden) container.addLayer(layer); - return oldLayer; - } - }, { - key: "brush", - value: function brush(bounds, extraInfo) { - var _this2 = this; - - /* eslint-disable no-console */ - // For each Crosstalk group... - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - var ctg = _this2._byCrosstalkGroup[ctGroupName]; - var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple - // layers)... - - Object.keys(ctg).forEach(function (ctKey) { - // ...and for each layer... - ctg[ctKey].forEach(function (stamp) { - var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... - - if (layerInfo.layer.getLatLng) { - // ... and it's inside the selection bounds... - // TODO: Use pixel containment, not lat/lng containment - if (bounds.contains(layerInfo.layer.getLatLng())) { - // ...add the key to the selection. - selection.push(ctKey); - } - } - }); - }); - new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); - }); - } - }, { - key: "unbrush", - value: function unbrush(extraInfo) { - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); - }); - } - }, { - key: "_setVisibility", - value: function _setVisibility(layerInfo, visible) { - if (layerInfo.hidden ^ visible) { - return; - } else if (visible) { - layerInfo.container.addLayer(layerInfo.layer); - layerInfo.hidden = false; - } else { - layerInfo.container.removeLayer(layerInfo.layer); - layerInfo.hidden = true; - } - } - }, { - key: "_setOpacity", - value: function _setOpacity(layerInfo, opacity) { - if (layerInfo.layer.setOpacity) { - layerInfo.layer.setOpacity(opacity); - } else if (layerInfo.layer.setStyle) { - layerInfo.layer.setStyle({ - opacity: opacity * layerInfo.layer.options.origOpacity, - fillOpacity: opacity * layerInfo.layer.options.origFillOpacity - }); - } - } - }, { - key: "getLayer", - value: function getLayer(category, layerId) { - return this._byLayerId[this._layerIdKey(category, layerId)]; - } - }, { - key: "removeLayer", - value: function removeLayer(category, layerIds) { - var _this3 = this; - - // Find layer info - _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { - var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; - - if (layer) { - _this3._removeLayer(layer); - } - }); - } - }, { - key: "clearLayers", - value: function clearLayers(category) { - var _this4 = this; - - // Find all layers in _byCategory[category] - var catTable = this._byCategory[category]; - - if (!catTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(catTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this4._removeLayer(stamp); - }); - } - }, { - key: "getLayerGroup", - value: function getLayerGroup(group, ensureExists) { - var g = this._groupContainers[group]; - - if (ensureExists && !g) { - this._byGroup[group] = this._byGroup[group] || {}; - g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); - g.groupname = group; - g.addTo(this._map); - } - - return g; - } - }, { - key: "getGroupNameFromLayerGroup", - value: function getGroupNameFromLayerGroup(layerGroup) { - return layerGroup.groupname; - } - }, { - key: "getVisibleGroups", - value: function getVisibleGroups() { - var _this5 = this; - - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - if (_this5._map.hasLayer(v)) { - result.push(k); - } - }); - - return result; - } - }, { - key: "getAllGroupNames", - value: function getAllGroupNames() { - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - result.push(k); - }); - - return result; - } - }, { - key: "clearGroup", - value: function clearGroup(group) { - var _this6 = this; - - // Find all layers in _byGroup[group] - var groupTable = this._byGroup[group]; - - if (!groupTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(groupTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this6._removeLayer(stamp); - }); - } - }, { - key: "clear", - value: function clear() { - function clearLayerGroup(key, layerGroup) { - layerGroup.clearLayers(); - } // Clear all indices and layerGroups - - - this._byGroup = {}; - this._byCategory = {}; - this._byLayerId = {}; - this._byStamp = {}; - this._byCrosstalkGroup = {}; - - _jquery2["default"].each(this._categoryContainers, clearLayerGroup); - - this._categoryContainers = {}; - - _jquery2["default"].each(this._groupContainers, clearLayerGroup); - - this._groupContainers = {}; - } - }, { - key: "_removeLayer", - value: function _removeLayer(layer) { - var stamp; - - if (typeof layer === "string") { - stamp = layer; - } else { - stamp = _leaflet2["default"].Util.stamp(layer); - } - - var layerInfo = this._byStamp[stamp]; - - if (!layerInfo) { - return false; - } - - layerInfo.container.removeLayer(stamp); - - if (typeof layerInfo.group === "string") { - delete this._byGroup[layerInfo.group][stamp]; - } - - if (typeof layerInfo.layerId === "string") { - delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; - } - - delete this._byCategory[layerInfo.category][stamp]; - delete this._byStamp[stamp]; - - if (layerInfo.ctGroup) { - var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; - var layersForKey = ctGroup[layerInfo.ctKey]; - var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; - - if (idx >= 0) { - if (layersForKey.length === 1) { - delete ctGroup[layerInfo.ctKey]; - } else { - layersForKey.splice(idx, 1); - } - } - } - } - }, { - key: "_layerIdKey", - value: function _layerIdKey(category, layerId) { - return category + "\n" + layerId; - } - }]); - - return LayerManager; -}(); - -exports["default"] = LayerManager; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -var _mipmapper = require("./mipmapper"); - -var _mipmapper2 = _interopRequireDefault(_mipmapper); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var methods = {}; -exports["default"] = methods; - -function mouseHandler(mapId, layerId, group, eventName, extraInfo) { - return function (e) { - if (!_htmlwidgets2["default"].shinyMode) return; - var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; - - if (latLng) { - // retrieve only lat, lon values to remove prototype - // and extra parameters added by 3rd party modules - // these objects are for json serialization, not javascript - var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape - - - latLng = { - lat: latLngVal.lat, - lng: latLngVal.lng - }; - } - - var eventInfo = _jquery2["default"].extend({ - id: layerId, - ".nonce": Math.random() // force reactivity - - }, group !== null ? { - group: group - } : null, latLng, extraInfo); - - _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); - }; -} - -methods.mouseHandler = mouseHandler; - -methods.clearGroup = function (group) { - var _this = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { - _this.layerManager.clearGroup(v); - }); -}; - -methods.setView = function (center, zoom, options) { - this.setView(center, zoom, options); -}; - -methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { - this.fitBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.flyTo = function (center, zoom, options) { - this.flyTo(center, zoom, options); -}; - -methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { - this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { - this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); -}; - -methods.addPopups = function (lat, lng, popup, layerId, group, options) { - var _this2 = this; - - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); - - var _loop = function _loop(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); - - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(popup, "popup", thisId, thisGroup); - }).call(_this2); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop(i); - } -}; - -methods.removePopup = function (layerId) { - this.layerManager.removeLayer("popup", layerId); -}; - -methods.clearPopups = function () { - this.layerManager.clearLayers("popup"); -}; - -methods.addTiles = function (urlTemplate, layerId, group, options) { - this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); -}; - -methods.removeTiles = function (layerId) { - this.layerManager.removeLayer("tile", layerId); -}; - -methods.clearTiles = function () { - this.layerManager.clearLayers("tile"); -}; - -methods.addWMSTiles = function (baseUrl, layerId, group, options) { - if (options && options.crs) { - options.crs = (0, _crs_utils.getCRS)(options.crs); - } - - this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); -}; // Given: -// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} -// returns: -// ["a", "b", "a", "c"] - - -function unpackStrings(iconset) { - if (!iconset) { - return iconset; - } - - if (typeof iconset.index === "undefined") { - return iconset; - } - - iconset.data = (0, _util.asArray)(iconset.data); - iconset.index = (0, _util.asArray)(iconset.index); - return _jquery2["default"].map(iconset.index, function (e, i) { - return iconset.data[e]; - }); -} - -function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { - (function () { - var _this3 = this; - - var clusterGroup = this.layerManager.getLayer("cluster", clusterId), - cluster = clusterOptions !== null; - - if (cluster && !clusterGroup) { - clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); - - if (clusterOptions.freezeAtZoom) { - var freezeAtZoom = clusterOptions.freezeAtZoom; - delete clusterOptions.freezeAtZoom; - clusterGroup.freezeAtZoom(freezeAtZoom); - } - - clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); - } - - var extraInfo = cluster ? { - clusterId: clusterId - } : {}; - - var _loop2 = function _loop2(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var marker = markerFunc(df, i); - var thisId = df.get(i, "layerId"); - var thisGroup = cluster ? null : df.get(i, "group"); - - if (cluster) { - clusterGroup.clusterLayerStore.add(marker, thisId); - } else { - this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - } - - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - marker.bindPopup(popup, popupOptions); - } else { - marker.bindPopup(popup); - } - } - - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - if (labelOptions.permanent) { - marker.bindTooltip(label, labelOptions).openTooltip(); - } else { - marker.bindTooltip(label, labelOptions); - } - } else { - marker.bindTooltip(label); - } - } - - marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); - marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); - marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); - marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); - }).call(_this3); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop2(i); - } - - if (cluster) { - this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); - } - }).call(map); -} - -methods.addGenericMarkers = addMarkers; - -methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // Unpack icons - icon.iconUrl = unpackStrings(icon.iconUrl); - icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); - icon.shadowUrl = unpackStrings(icon.shadowUrl); - icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts.iconUrl) { - return new _leaflet2["default"].Icon.Default(); - } // Composite options (like points or sizes) are passed from R with each - // individual component as its own option. We need to combine them now - // into their composite form. - - - if (opts.iconWidth) { - opts.iconSize = [opts.iconWidth, opts.iconHeight]; - } - - if (opts.shadowWidth) { - opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; - } - - if (opts.iconAnchorX) { - opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; - } - - if (opts.shadowAnchorX) { - opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; - } - - if (opts.popupAnchorX) { - opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; - } - - return new _leaflet2["default"].Icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts) { - return new _leaflet2["default"].AwesomeMarkers.icon(); - } - - if (opts.squareMarker) { - opts.className = "awesome-marker awesome-marker-square"; - } - - return new _leaflet2["default"].AwesomeMarkers.icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -function addLayers(map, category, df, layerFunc) { - var _loop3 = function _loop3(i) { - (function () { - var layer = layerFunc(df, i); - - if (!_jquery2["default"].isEmptyObject(layer)) { - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - - if (layer.bindPopup) { - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - layer.bindPopup(popup, popupOptions); - } else { - layer.bindPopup(popup); - } - } - } - - if (layer.bindTooltip) { - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - layer.bindTooltip(label, labelOptions); - } else { - layer.bindTooltip(label); - } - } - } - - layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); - layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); - layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); - var highlightStyle = df.get(i, "highlightOptions"); - - if (!_jquery2["default"].isEmptyObject(highlightStyle)) { - var defaultStyle = {}; - - _jquery2["default"].each(highlightStyle, function (k, v) { - if (k != "bringToFront" && k != "sendToBack") { - if (df.get(i, k)) { - defaultStyle[k] = df.get(i, k); - } - } - }); - - layer.on("mouseover", function (e) { - this.setStyle(highlightStyle); - - if (highlightStyle.bringToFront) { - this.bringToFront(); - } - }); - layer.on("mouseout", function (e) { - this.setStyle(defaultStyle); - - if (highlightStyle.sendToBack) { - this.bringToBack(); - } - }); - } - } - }).call(map); - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop3(i); - } -} - -methods.addGenericLayers = addLayers; - -methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { - return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); - } else { - return null; - } - }); - } -}; - -methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); - }); - } -}; -/* - * @param lat Array of arrays of latitude coordinates for polylines - * @param lng Array of arrays of longitude coordinates for polylines - */ - - -methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - var shapes = df.get(i, "shapes"); - shapes = shapes.map(function (shape) { - return _htmlwidgets2["default"].dataframeToD3(shape[0]); - }); - - if (shapes.length > 1) { - return _leaflet2["default"].polyline(shapes, df.get(i)); - } else { - return _leaflet2["default"].polyline(shapes[0], df.get(i)); - } - }); - } -}; - -methods.removeMarker = function (layerId) { - this.layerManager.removeLayer("marker", layerId); -}; - -methods.clearMarkers = function () { - this.layerManager.clearLayers("marker"); -}; - -methods.removeMarkerCluster = function (layerId) { - this.layerManager.removeLayer("cluster", layerId); -}; - -methods.removeMarkerFromCluster = function (layerId, clusterId) { - var cluster = this.layerManager.getLayer("cluster", clusterId); - if (!cluster) return; - cluster.clusterLayerStore.remove(layerId); -}; - -methods.clearMarkerClusters = function () { - this.layerManager.clearLayers("cluster"); -}; - -methods.removeShape = function (layerId) { - this.layerManager.removeLayer("shape", layerId); -}; - -methods.clearShapes = function () { - this.layerManager.clearLayers("shape"); -}; - -methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { - return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); - } else { - return null; - } - }); -}; -/* - * @param lat Array of arrays of latitude coordinates for polygons - * @param lng Array of arrays of longitude coordinates for polygons - */ - - -methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - // This code used to use L.multiPolygon, but that caused - // double-click on a multipolygon to fail to zoom in on the - // map. Surprisingly, putting all the rings in a single - // polygon seems to still work; complicated multipolygons - // are still rendered correctly. - var shapes = df.get(i, "shapes").map(function (polygon) { - return polygon.map(_htmlwidgets2["default"].dataframeToD3); - }).reduce(function (acc, val) { - return acc.concat(val); - }, []); - return _leaflet2["default"].polygon(shapes, df.get(i)); - }); - } -}; - -methods.addGeoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(data, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties ? feature.properties.popup : null; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); - } - }); - - this.layerManager.addLayer(gjlayer, "geojson", layerId, group); -}; - -methods.removeGeoJSON = function (layerId) { - this.layerManager.removeLayer("geojson", layerId); -}; - -methods.clearGeoJSON = function () { - this.layerManager.clearLayers("geojson"); -}; - -methods.addTopoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(null, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties.popup; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); - } - }); - - global.omnivore.topojson.parse(data, null, gjlayer); - this.layerManager.addLayer(gjlayer, "topojson", layerId, group); -}; - -methods.removeTopoJSON = function (layerId) { - this.layerManager.removeLayer("topojson", layerId); -}; - -methods.clearTopoJSON = function () { - this.layerManager.clearLayers("topojson"); -}; - -methods.addControl = function (html, position, layerId, classes) { - function onAdd(map) { - var div = _leaflet2["default"].DomUtil.create("div", classes); - - if (typeof layerId !== "undefined" && layerId !== null) { - div.setAttribute("id", layerId); - } - - this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to - // not be, when a static leaflet widget is included as part of the shiny - // UI directly (not through leafletOutput or uiOutput). In this case we - // don't do the normal Shiny stuff as that will all happen when Shiny - // itself loads and binds the entire doc. - - if (window.Shiny && _shiny2["default"].initializeInputs) { - _shiny2["default"].renderHtml(html, this._div); - - _shiny2["default"].initializeInputs(this._div); - - _shiny2["default"].bindAll(this._div); - } else { - this._div.innerHTML = html; - } - - return this._div; - } - - function onRemove(map) { - if (window.Shiny && _shiny2["default"].unbindAll) { - _shiny2["default"].unbindAll(this._div); - } - } - - var Control = _leaflet2["default"].Control.extend({ - options: { - position: position - }, - onAdd: onAdd, - onRemove: onRemove - }); - - this.controls.add(new Control(), layerId, html); -}; - -methods.addCustomControl = function (control, layerId) { - this.controls.add(control, layerId); -}; - -methods.removeControl = function (layerId) { - this.controls.remove(layerId); -}; - -methods.getControl = function (layerId) { - this.controls.get(layerId); -}; - -methods.clearControls = function () { - this.controls.clear(); -}; - -methods.addLegend = function (options) { - var legend = _leaflet2["default"].control({ - position: options.position - }); - - var gradSpan; - - legend.onAdd = function (map) { - var div = _leaflet2["default"].DomUtil.create("div", options.className), - colors = options.colors, - labels = options.labels, - legendHTML = ""; - - if (options.type === "numeric") { - // # Formatting constants. - var singleBinHeight = 20; // The distance between tick marks, in px - - var vMargin = 8; // If 1st tick mark starts at top of gradient, how - // many extra px are needed for the top half of the - // 1st label? (ditto for last tick mark/label) - - var tickWidth = 4; // How wide should tick marks be, in px? - - var labelPadding = 6; // How much distance to reserve for tick mark? - // (Must be >= tickWidth) - // # Derived formatting parameters. - // What's the height of a single bin, in percentage (of gradient height)? - // It might not just be 1/(n-1), if the gradient extends past the tick - // marks (which can be the case for pretty cut points). - - var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? - - var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top - // of the gradient? - - var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; - gradSpan = (0, _jquery2["default"])("").css({ - "background": "linear-gradient(" + colors + ")", - "opacity": options.opacity, - "height": totalHeight + "px", - "width": "18px", - "display": "block", - "margin-top": vMargin + "px" - }); - var leftDiv = (0, _jquery2["default"])("
").css("float", "left"), - rightDiv = (0, _jquery2["default"])("
").css("float", "left"); - leftDiv.append(gradSpan); - (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
")); // Have to attach the div to the body at this early point, so that the - // svg text getComputedTextLength() actually works, below. - - document.body.appendChild(div); - var ns = "http://www.w3.org/2000/svg"; - var svg = document.createElementNS(ns, "svg"); - rightDiv.append(svg); - var g = document.createElementNS(ns, "g"); - (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); - svg.appendChild(g); // max label width needed to set width of svg, and right-justify text - - var maxLblWidth = 0; // Create tick marks and labels - - _jquery2["default"].each(labels, function (i, label) { - var y = tickOffset + i * singleBinHeight + 0.5; - var thisLabel = document.createElementNS(ns, "text"); - (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); - g.appendChild(thisLabel); - maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); - var thisTick = document.createElementNS(ns, "line"); - (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); - g.appendChild(thisTick); - }); // Now that we know the max label width, we can right-justify - - - (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for - - (0, _jquery2["default"])(svg).css({ - width: maxLblWidth + labelPadding + "px", - height: totalHeight + vMargin * 2 + "px" - }); - - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - (0, _jquery2["default"])(div).append("
" + options.na_label + "
"); - } - } else { - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - colors.push(options.na_color); - labels.push(options.na_label); - } - - for (var i = 0; i < colors.length; i++) { - legendHTML += " " + labels[i] + "
"; - } - - div.innerHTML = legendHTML; - } - - if (options.title) (0, _jquery2["default"])(div).prepend("
" + options.title + "
"); - return div; - }; - - if (options.group) { - // Auto generate a layerID if not provided - if (!options.layerId) { - options.layerId = _leaflet2["default"].Util.stamp(legend); - } - - var map = this; - map.on("overlayadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("overlayremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - map.on("groupadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("groupremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - } - - this.controls.add(legend, options.layerId); -}; - -methods.addLayersControl = function (baseGroups, overlayGroups, options) { - var _this4 = this; - - // Only allow one layers control at a time - methods.removeLayersControl.call(this); - var firstLayer = true; - var base = {}; - - _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one - - if (_this4.hasLayer(layer)) { - if (firstLayer) { - firstLayer = false; - } else { - _this4.removeLayer(layer); - } - } - } - }); - - var overlay = {}; - - _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - overlay[g] = layer; - } - }); - - this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); - this.addControl(this.currentLayersControl); -}; - -methods.removeLayersControl = function () { - if (this.currentLayersControl) { - this.removeControl(this.currentLayersControl); - this.currentLayersControl = null; - } -}; - -methods.addScaleBar = function (options) { - // Only allow one scale bar at a time - methods.removeScaleBar.call(this); - - var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); - - this.currentScaleBar = scaleBar; -}; - -methods.removeScaleBar = function () { - if (this.currentScaleBar) { - this.currentScaleBar.remove(); - this.currentScaleBar = null; - } -}; - -methods.hideGroup = function (group) { - var _this5 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this5.layerManager.getLayerGroup(g, true); - - if (layer) { - _this5.removeLayer(layer); - } - }); -}; - -methods.showGroup = function (group) { - var _this6 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this6.layerManager.getLayerGroup(g, true); - - if (layer) { - _this6.addLayer(layer); - } - }); -}; - -function setupShowHideGroupsOnZoom(map) { - if (map.leafletr._hasInitializedShowHideGroups) { - return; - } - - map.leafletr._hasInitializedShowHideGroups = true; - - function setVisibility(layer, visible, group) { - if (visible !== map.hasLayer(layer)) { - if (visible) { - map.addLayer(layer); - map.fire("groupadd", { - "name": group, - "layer": layer - }); - } else { - map.removeLayer(layer); - map.fire("groupremove", { - "name": group, - "layer": layer - }); - } - } - } - - function showHideGroupsOnZoom() { - if (!map.layerManager) return; - var zoom = map.getZoom(); - map.layerManager.getAllGroupNames().forEach(function (group) { - var layer = map.layerManager.getLayerGroup(group, false); - - if (layer && typeof layer.zoomLevels !== "undefined") { - setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); - } - }); - } - - map.showHideGroupsOnZoom = showHideGroupsOnZoom; - map.on("zoomend", showHideGroupsOnZoom); -} - -methods.setGroupOptions = function (group, options) { - var _this7 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels - - - if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { - layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); - } - }); - - setupShowHideGroupsOnZoom(this); - this.showHideGroupsOnZoom(); -}; - -methods.addRasterImage = function (uri, bounds, opacity, attribution, layerId, group) { - // uri is a data URI containing an image. We want to paint this image as a - // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. - // We can't simply use ImageOverlay, as it uses bilinear scaling which looks - // awful as you zoom in (and sometimes shifts positions or disappears). - // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. - // First, some helper functions. - // degree2tile converts latitude, longitude, and zoom to x and y tile - // numbers. The tile numbers returned can be non-integral, as there's no - // reason to expect that the lat/lng inputs are exactly on the border of two - // tiles. - // - // We'll use this to convert the bounds we got from the server, into coords - // in tile-space at a given zoom level. Note that once we do the conversion, - // we don't to do any more trigonometry to convert between pixel coordinates - // and tile coordinates; the source image pixel coords, destination canvas - // pixel coords, and tile coords all can be scaled linearly. - function degree2tile(lat, lng, zoom) { - // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames - var latRad = lat * Math.PI / 180; - var n = Math.pow(2, zoom); - var x = (lng + 180) / 360 * n; - var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; - return { - x: x, - y: y - }; - } // Given a range [from,to) and either one or two numbers, returns true if - // there is any overlap between [x,x1) and the range--or if x1 is omitted, - // then returns true if x is within [from,to). - - - function overlap(from, to, x, - /* optional */ - x1) { - if (arguments.length == 3) x1 = x; - return x < to && x1 >= from; - } - - function getCanvasSmoothingProperty(ctx) { - var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; - - for (var i = 0; i < candidates.length; i++) { - if (typeof ctx[candidates[i]] !== "undefined") { - return candidates[i]; - } - } - - return null; - } // Our general strategy is to: - // 1. Load the data URI in an Image() object, so we can get its pixel - // dimensions and the underlying image data. (We could have done this - // by not encoding as PNG at all but just send an array of RGBA values - // from the server, but that would inflate the JSON too much.) - // 2. Create a hidden canvas that we use just to extract the image data - // from the Image (using Context2D.getImageData()). - // 3. Create a TileLayer.Canvas and add it to the map. - // We want to synchronously create and attach the TileLayer.Canvas (so an - // immediate call to clearRasters() will be respected, for example), but - // Image loads its data asynchronously. Fortunately we can resolve this - // by putting TileLayer.Canvas into async mode, which will let us create - // and attach the layer but have it wait until the image is loaded before - // it actually draws anything. - // These are the variables that we will populate once the image is loaded. - - - var imgData = null; // 1d row-major array, four [0-255] integers per pixel - - var imgDataMipMapper = null; - var w = null; // image width in pixels - - var h = null; // image height in pixels - // We'll use this array to store callbacks that need to be invoked once - // imgData, w, and h have been resolved. - - var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data - // is available. - - function getImageData(callback) { - if (imgData != null) { - // Must not invoke the callback immediately; it's too confusing and - // fragile to have a function invoke the callback *either* immediately - // or in the future. Better to be consistent here. - setTimeout(function () { - callback(imgData, w, h, imgDataMipMapper); - }, 0); - } else { - imgDataCallbacks.push(callback); - } - } - - var img = new Image(); - - img.onload = function () { - // Save size - w = img.width; - h = img.height; // Create a dummy canvas to extract the image data - - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = w; - imgDataCanvas.height = h; - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0); // Save the image data. - - imgData = imgDataCtx.getImageData(0, 0, w, h).data; - imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. - - document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. - - for (var i = 0; i < imgDataCallbacks.length; i++) { - imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); - } - - imgDataCallbacks = []; - }; - - img.src = uri; - - var canvasTiles = _leaflet2["default"].gridLayer({ - opacity: opacity, - attribution: attribution, - detectRetina: true, - async: true - }); // NOTE: The done() function MUST NOT be invoked until after the current - // tick; done() looks in Leaflet's tile cache for the current tile, and - // since it's still being constructed, it won't be found. - - - canvasTiles.createTile = function (tilePoint, done) { - var zoom = tilePoint.z; - - var canvas = _leaflet2["default"].DomUtil.create("canvas"); - - var error; // setup tile width and height according to the options - - var size = this.getTileSize(); - canvas.width = size.x; - canvas.height = size.y; - getImageData(function (imgData, w, h, mipmapper) { - try { - // The Context2D we'll being drawing onto. It's always 256x256. - var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into - // x/y tile coordinates. This is essentially doing a spherical mercator - // projection, then multiplying by 2^zoom. - - var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); - var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. - - var extent = { - x: bottomRight.x - topLeft.x, - y: bottomRight.y - topLeft.y - }; // Short circuit if tile is totally disjoint from image. - - if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; - if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. - // If the linear resolution (in either direction) of the image is less than 256px - // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in - // scaling. - - var imgRes = { - x: w / extent.x, - y: h / extent.y - }; // We can do the actual drawing in one of three ways: - // - Call drawImage(). This is easy and fast, and results in smooth - // interpolation (bilinear?). This is what we want when we are - // reducing the image from its native size. - // - Call drawImage() with imageSmoothingEnabled=false. This is easy - // and fast and gives us nearest-neighbor interpolation, which is what - // we want when enlarging the image. However, it's unsupported on many - // browsers (including QtWebkit). - // - Do a manual nearest-neighbor interpolation. This is what we'll fall - // back to when enlarging, and imageSmoothingEnabled isn't supported. - // In theory it's slower, but still pretty fast on my machine, and the - // results look the same AFAICT. - // Is imageSmoothingEnabled supported? If so, we can let canvas do - // nearest-neighbor interpolation for us. - - var smoothingProperty = getCanvasSmoothingProperty(ctx); - - if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { - // Use built-in scaling - // Turn off anti-aliasing if necessary - if (smoothingProperty) { - ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; - } // Don't necessarily draw with the full-size image; if we're - // downscaling, use the mipmapper to get a pre-downscaled image - // (see comments on Mipmapper class for why this matters). - - - mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { - // It's possible that the image will go off the edge of the canvas-- - // that's OK, the canvas should clip appropriately. - ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert - // to rel pixel coords - (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just - // convert from size in tile coords straight to pixels - extent.x * 256, extent.y * 256); - }); - } else { - // Use manual nearest-neighbor interpolation - // Calculate the source image pixel coordinates that correspond with - // the top-left and bottom-right of this tile. (If the source image - // only partially overlaps the tile, we use max/min to limit the - // sourceStart/End to only reflect the overlapping portion.) - var sourceStart = { - x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), - y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) - }; - var sourceEnd = { - x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), - y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) - }; // The size, in dest pixels, that each source pixel should occupy. - // This might be greater or less than 1 (e.g. if x and y resolution - // are very different). - - var pixelSize = { - x: 256 / imgRes.x, - y: 256 / imgRes.y - }; // For each pixel in the source image that overlaps the tile... - - for (var row = sourceStart.y; row < sourceEnd.y; row++) { - for (var col = sourceStart.x; col < sourceEnd.x; col++) { - // ...extract the pixel data... - var i = (row * w + col) * 4; - var r = imgData[i]; - var g = imgData[i + 1]; - var b = imgData[i + 2]; - var a = imgData[i + 3]; - ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image - // where it should be drawn... - - var pixelPos = { - x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, - y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 - }; // ...and draw a rectangle there. - - ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from - // causing overlap between this rect and its neighbors. The - // minuend is the location of the next pixel, while the - // subtrahend is the position of the current pixel (to turn an - // absolute coordinate to a width/height). Yes, I had to look - // up minuend and subtrahend. - Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); - } - } - } - } catch (e) { - error = e; - } finally { - done(error, canvas); - } - }); - return canvas; - }; - - this.layerManager.addLayer(canvasTiles, "image", layerId, group); -}; - -methods.removeImage = function (layerId) { - this.layerManager.removeLayer("image", layerId); -}; - -methods.clearImages = function () { - this.layerManager.clearLayers("image"); -}; - -methods.addMeasure = function (options) { - // if a measureControl already exists, then remove it and - // replace with a new one - methods.removeMeasure.call(this); - this.measureControl = _leaflet2["default"].control.measure(options); - this.addControl(this.measureControl); -}; - -methods.removeMeasure = function () { - if (this.measureControl) { - this.removeControl(this.measureControl); - this.measureControl = null; - } -}; - -methods.addSelect = function (ctGroup) { - var _this8 = this; - - methods.removeSelect.call(this); - this._selectButton = _leaflet2["default"].easyButton({ - states: [{ - stateName: "select-inactive", - icon: "ion-qr-scanner", - title: "Make a selection", - onClick: function onClick(btn, map) { - btn.state("select-active"); - _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); - - if (ctGroup) { - var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); - selectionHandle.on("change", function (e) { - if (e.sender !== selectionHandle) { - if (_this8._locationFilter) { - _this8._locationFilter.disable(); - - btn.state("select-inactive"); - } - } - }); - - var handler = function handler(e) { - _this8.layerManager.brush(_this8._locationFilter.getBounds(), { - sender: selectionHandle - }); - }; - - _this8._locationFilter.on("enabled", handler); - - _this8._locationFilter.on("change", handler); - - _this8._locationFilter.on("disabled", function () { - selectionHandle.close(); - _this8._locationFilter = null; - }); - } - - _this8._locationFilter.addTo(map); - } - }, { - stateName: "select-active", - icon: "ion-close-round", - title: "Dismiss selection", - onClick: function onClick(btn, map) { - btn.state("select-inactive"); - - _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections - - - _this8.layerManager.unbrush(); - } - }] - }); - - this._selectButton.addTo(this); -}; - -methods.removeSelect = function () { - if (this._locationFilter) { - this._locationFilter.disable(); - } - - if (this._selectButton) { - this.removeControl(this._selectButton); - this._selectButton = null; - } -}; - -methods.createMapPane = function (name, zIndex) { - this.createPane(name); - this.getPane(name).style.zIndex = zIndex; -}; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// This class simulates a mipmap, which shrinks images by powers of two. This -// stepwise reduction results in "pixel-perfect downscaling" (where every -// pixel of the original image has some contribution to the downscaled image) -// as opposed to a single-step downscaling which will discard a lot of data -// (and with sparse images at small scales can give very surprising results). -var Mipmapper = /*#__PURE__*/function () { - function Mipmapper(img) { - _classCallCheck(this, Mipmapper); - - this._layers = [img]; - } // The various functions on this class take a callback function BUT MAY OR MAY - // NOT actually behave asynchronously. - - - _createClass(Mipmapper, [{ - key: "getBySize", - value: function getBySize(desiredWidth, desiredHeight, callback) { - var _this = this; - - var i = 0; - var lastImg = this._layers[0]; - - var testNext = function testNext() { - _this.getByIndex(i, function (img) { - // If current image is invalid (i.e. too small to be rendered) or - // it's smaller than what we wanted, return the last known good image. - if (!img || img.width < desiredWidth || img.height < desiredHeight) { - callback(lastImg); - return; - } else { - lastImg = img; - i++; - testNext(); - return; - } - }); - }; - - testNext(); - } - }, { - key: "getByIndex", - value: function getByIndex(i, callback) { - var _this2 = this; - - if (this._layers[i]) { - callback(this._layers[i]); - return; - } - - this.getByIndex(i - 1, function (prevImg) { - if (!prevImg) { - // prevImg could not be calculated (too small, possibly) - callback(null); - return; - } - - if (prevImg.width < 2 || prevImg.height < 2) { - // Can't reduce this image any further - callback(null); - return; - } // If reduce ever becomes truly asynchronous, we should stuff a promise or - // something into this._layers[i] before calling this.reduce(), to prevent - // redundant reduce operations from happening. - - - _this2.reduce(prevImg, function (reducedImg) { - _this2._layers[i] = reducedImg; - callback(reducedImg); - return; - }); - }); - } - }, { - key: "reduce", - value: function reduce(img, callback) { - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = Math.ceil(img.width / 2); - imgDataCanvas.height = Math.ceil(img.height / 2); - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - - try { - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); - callback(imgDataCanvas); - } finally { - document.body.removeChild(imgDataCanvas); - } - } - }]); - - return Mipmapper; -}(); - -exports["default"] = Mipmapper; - - -},{}],17:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.log = log; -exports.recycle = recycle; -exports.asArray = asArray; - -function log(message) { - /* eslint-disable no-console */ - if (console && console.log) console.log(message); - /* eslint-enable no-console */ -} - -function recycle(values, length, inPlace) { - if (length === 0 && !inPlace) return []; - - if (!(values instanceof Array)) { - if (inPlace) { - throw new Error("Can't do in-place recycling of a non-Array value"); - } - - values = [values]; - } - - if (typeof length === "undefined") length = values.length; - var dest = inPlace ? values : []; - var origLength = values.length; - - while (dest.length < length) { - dest.push(values[dest.length % origLength]); - } - - if (dest.length > length) { - dest.splice(length, dest.length - length); - } - - return dest; -} - -function asArray(value) { - if (value instanceof Array) return value;else return [value]; -} - - -},{}]},{},[13]); diff --git a/docs/articles/Applications_files/leaflet-binding-2.2.0/leaflet.js b/docs/articles/Applications_files/leaflet-binding-2.2.0/leaflet.js deleted file mode 100644 index c8e7e5e..0000000 --- a/docs/articles/Applications_files/leaflet-binding-2.2.0/leaflet.js +++ /dev/null @@ -1,2789 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); - var colIndex = -1; - - if (typeof col === "undefined") { - var rowData = {}; - this.colnames.forEach(function (name, i) { - rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; - }); - return rowData; - } else if (typeof col === "string") { - colIndex = this._colIndex(col); - } else if (typeof col === "number") { - colIndex = col; - } - - if (colIndex < 0 || colIndex > this.columns.length) { - if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); - } - - return this.columns[colIndex][row % this.columns[colIndex].length]; - } - }, { - key: "nrow", - value: function nrow() { - return this.effectiveLength; - } - }]); - - return DataFrame; -}(); - -exports["default"] = DataFrame; - - -},{"./util":17}],5:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// In RMarkdown's self-contained mode, we don't have a way to carry around the -// images that Leaflet needs but doesn't load into the page. Instead, we'll use -// the unpkg CDN. -if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { - _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; -} - - -},{"./global/leaflet":10}],6:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// add texxtsize, textOnly, and style -_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; -_leaflet2["default"].Tooltip.prototype.options.textOnly = false; -_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. - -var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; - -_leaflet2["default"].Tooltip.prototype._initLayout = function () { - initLayoutOriginal.call(this); - this._container.style.fontSize = this.options.textsize; - - if (this.options.textOnly) { - _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); - } - - if (this.options.style) { - for (var property in this.options.style) { - this._container.style[property] = this.options.style[property]; - } - } -}; - - -},{"./global/leaflet":10}],7:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var protocolRegex = /^\/\//; - -var upgrade_protocol = function upgrade_protocol(urlTemplate) { - if (protocolRegex.test(urlTemplate)) { - if (window.location.protocol === "file:") { - // if in a local file, support http - // http should auto upgrade if necessary - urlTemplate = "http:" + urlTemplate; - } - } - - return urlTemplate; -}; - -var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; - -_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerInitialize.call(this, urlTemplate, options); -}; - -var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; - -_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerWMSInitialize.call(this, urlTemplate, options); -}; - - -},{"./global/leaflet":10}],8:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.HTMLWidgets; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],9:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.jQuery; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],11:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L.Proj; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.Shiny; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],13:[function(require,module,exports){ -"use strict"; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _controlStore = require("./control-store"); - -var _controlStore2 = _interopRequireDefault(_controlStore); - -var _layerManager = require("./layer-manager"); - -var _layerManager2 = _interopRequireDefault(_layerManager); - -var _methods = require("./methods"); - -var _methods2 = _interopRequireDefault(_methods); - -require("./fixup-default-icon"); - -require("./fixup-default-tooltip"); - -require("./fixup-url-protocol"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -window.LeafletWidget = {}; -window.LeafletWidget.utils = {}; - -var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); - -window.LeafletWidget.DataFrame = _dataframe2["default"]; -window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; -window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. - -function updateBounds(map) { - var id = map.getContainer().id; - var bounds = map.getBounds(); - - _shiny2["default"].onInputChange(id + "_bounds", { - north: bounds.getNorthEast().lat, - east: bounds.getNorthEast().lng, - south: bounds.getSouthWest().lat, - west: bounds.getSouthWest().lng - }); - - _shiny2["default"].onInputChange(id + "_center", { - lng: map.getCenter().lng, - lat: map.getCenter().lat - }); - - _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); -} - -function preventUnintendedZoomOnScroll(map) { - // Prevent unwanted scroll capturing. Similar in purpose to - // https://github.com/CliffCloud/Leaflet.Sleep but with a - // different set of heuristics. - // The basic idea is that when a mousewheel/DOMMouseScroll - // event is seen, we disable scroll wheel zooming until the - // user moves their mouse cursor or clicks on the map. This - // is slightly trickier than just listening for mousemove, - // because mousemove is fired when the page is scrolled, - // even if the user did not physically move the mouse. We - // handle this by examining the mousemove event's screenX - // and screenY properties; if they change, we know it's a - // "true" move. - // lastScreen can never be null, but its x and y can. - var lastScreen = { - x: null, - y: null - }; - (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { - // Disable zooming (until the mouse moves or click) - map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. - - lastScreen = { - x: e.originalEvent.screenX, - y: e.originalEvent.screenY - }; - }); - (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { - // Did the mouse really move? - if (map.options.scrollWheelZoom) { - if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { - // It really moved. Enable zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - } - }); - (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { - // Clicking always enables zooming. - if (map.options.scrollWheelZoom) { - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - }); -} - -_htmlwidgets2["default"].widget({ - name: "leaflet", - type: "output", - factory: function factory(el, width, height) { - var map = null; - return { - // we need to store our map in our returned object. - getMap: function getMap() { - return map; - }, - renderValue: function renderValue(data) { - // Create an appropriate CRS Object if specified - if (data && data.options && data.options.crs) { - data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); - } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 - - - if (map) { - map.remove(); - - map = function () { - return; - }(); // undefine map - - } - - if (data.options.mapFactory && typeof data.options.mapFactory === "function") { - map = data.options.mapFactory(el, data.options); - } else { - map = _leaflet2["default"].map(el, data.options); - } - - preventUnintendedZoomOnScroll(map); // Store some state in the map object - - map.leafletr = { - // Has the map ever rendered successfully? - hasRendered: false, - // Data to be rendered when resize is called with area != 0 - pendingRenderData: null - }; // Check if the map is rendered statically (no output binding) - - if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { - map.id = el.id; // Store the map on the element so we can find it later by ID - - (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app - - map.on("click", function (e) { - _shiny2["default"].onInputChange(map.id + "_click", { - lat: e.latlng.lat, - lng: e.latlng.lng, - ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed - - }); - }); - var groupTimerId = null; - map.on("moveend", function (e) { - updateBounds(e.target); - }).on("layeradd layerremove", function (e) { - // If the layer that's coming or going is a group we created, tell - // the server. - if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { - // But to avoid chattiness, coalesce events - if (groupTimerId) { - clearTimeout(groupTimerId); - groupTimerId = null; - } - - groupTimerId = setTimeout(function () { - groupTimerId = null; - - _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); - }, 100); - } - }); - } - - this.doRenderValue(data, map); - }, - doRenderValue: function doRenderValue(data, map) { - // Leaflet does not behave well when you set up a bunch of layers when - // the map is not visible (width/height == 0). Popups get misaligned - // relative to their owning markers, and the fitBounds calculations - // are off. Therefore we wait until the map is actually showing to - // render the value (we rely on the resize() callback being invoked - // at the appropriate time). - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - map.leafletr.pendingRenderData = data; - return; - } - - map.leafletr.pendingRenderData = null; // Merge data options into defaults - - var options = _jquery2["default"].extend({ - zoomToLimits: "always" - }, data.options); - - if (!map.layerManager) { - map.controls = new _controlStore2["default"](map); - map.layerManager = new _layerManager2["default"](map); - } else { - map.controls.clear(); - map.layerManager.clear(); - } - - var explicitView = false; - - if (data.setView) { - explicitView = true; - map.setView.apply(map, data.setView); - } - - if (data.fitBounds) { - explicitView = true; - methods.fitBounds.apply(map, data.fitBounds); - } - - if (data.flyTo) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - map.flyTo.apply(map, data.flyTo); - } - - if (data.flyToBounds) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - methods.flyToBounds.apply(map, data.flyToBounds); - } - - if (data.options.center) { - explicitView = true; - } // Returns true if the zoomToLimits option says that the map should be - // zoomed to map elements. - - - function needsZoom() { - return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; - } - - if (!explicitView && needsZoom() && !map.getZoom()) { - if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { - // Use the natural limits of what's being drawn on the map - // If the size of the bounding box is 0, leaflet gets all weird - var pad = 0.006; - - if (data.limits.lat[0] === data.limits.lat[1]) { - data.limits.lat[0] = data.limits.lat[0] - pad; - data.limits.lat[1] = data.limits.lat[1] + pad; - } - - if (data.limits.lng[0] === data.limits.lng[1]) { - data.limits.lng[0] = data.limits.lng[0] - pad; - data.limits.lng[1] = data.limits.lng[1] + pad; - } - - map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); - } else { - map.fitWorld(); - } - } - - for (var i = 0; data.calls && i < data.calls.length; i++) { - var call = data.calls[i]; - if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); - } - - map.leafletr.hasRendered = true; - - if (_htmlwidgets2["default"].shinyMode) { - setTimeout(function () { - updateBounds(map); - }, 1); - } - }, - resize: function resize(width, height) { - if (map) { - map.invalidateSize(); - - if (map.leafletr.pendingRenderData) { - this.doRenderValue(map.leafletr.pendingRenderData, map); - } - } - } - }; - } -}); - -if (_htmlwidgets2["default"].shinyMode) { - _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { - var id = data.id; - var el = document.getElementById(id); - var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; - - if (!map) { - (0, _util.log)("Couldn't find map with id " + id); - return; - } // If the map has not rendered, stash the proposed `leafletProxy()` calls - // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. - // This is necessary if the map has not been rendered. - // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. - - - if (!map.leafletr.hasRendered) { - map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); - return; - } - - for (var i = 0; i < data.calls.length; i++) { - var call = data.calls[i]; - var args = call.args; - - for (var _i = 0; _i < call.evals.length; _i++) { - window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); - } - - if (call.dependencies) { - _shiny2["default"].renderDependencies(call.dependencies); - } - - if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); - } - }); -} - - -},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = undefined; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _util = require("./util"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var LayerManager = /*#__PURE__*/function () { - function LayerManager(map) { - _classCallCheck(this, LayerManager); - - this._map = map; // BEGIN layer indices - // {: {: layer}} - - this._byGroup = {}; // {: {: layer}} - - this._byCategory = {}; // {: layer} - - this._byLayerId = {}; // {: { - // "group": , - // "layerId": , - // "category": , - // "container": - // } - // } - - this._byStamp = {}; // {: {: [, , ...], ...}} - - this._byCrosstalkGroup = {}; // END layer indices - // {: L.layerGroup} - - this._categoryContainers = {}; // {: L.layerGroup} - - this._groupContainers = {}; - } - - _createClass(LayerManager, [{ - key: "addLayer", - value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { - var _this = this; - - // Was a group provided? - var hasId = typeof layerId === "string"; - var grouped = typeof group === "string"; - var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. - // We may overwrite this let before using it (i.e. if a group is assigned). - // This one liner creates the _categoryContainers[category] entry if it - // doesn't already exist. - - var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); - - var oldLayer = null; - - if (hasId) { - // First, remove any layer with the same category and layerId - var prefixedLayerId = this._layerIdKey(category, layerId); - - oldLayer = this._byLayerId[prefixedLayerId]; - - if (oldLayer) { - this._removeLayer(oldLayer); - } // Update layerId index - - - this._byLayerId[prefixedLayerId] = layer; - } // Update group index - - - if (grouped) { - this._byGroup[group] = this._byGroup[group] || {}; - this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer - // group; instead, use the group's layer group. - // This one liner creates the _groupContainers[group] entry if it doesn't - // already exist. - - container = this.getLayerGroup(group, true); - } // Update category index - - - this._byCategory[category] = this._byCategory[category] || {}; - this._byCategory[category][stamp] = layer; // Update stamp index - - var layerInfo = this._byStamp[stamp] = { - layer: layer, - group: group, - ctGroup: ctGroup, - ctKey: ctKey, - layerId: layerId, - category: category, - container: container, - hidden: false - }; // Update crosstalk group index - - if (ctGroup) { - if (layer.setStyle) { - // Need to save this info so we know what to set opacity to later - layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; - layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; - } - - var ctg = this._byCrosstalkGroup[ctGroup]; - - if (!ctg) { - ctg = this._byCrosstalkGroup[ctGroup] = {}; - var crosstalk = global.crosstalk; - - var handleFilter = function handleFilter(e) { - if (!e.value) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo = _this._byStamp[ctg[key]]; - - _this._setVisibility(_layerInfo, true); - } - } else { - var selectedKeys = {}; - - for (var _i = 0; _i < e.value.length; _i++) { - selectedKeys[e.value[_i]] = true; - } - - var _groupKeys = Object.keys(ctg); - - for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { - var _key = _groupKeys[_i2]; - var _layerInfo2 = _this._byStamp[ctg[_key]]; - - _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); - } - } - }; - - var filterHandle = new crosstalk.FilterHandle(ctGroup); - filterHandle.on("change", handleFilter); - - var handleSelection = function handleSelection(e) { - if (!e.value || !e.value.length) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo3 = _this._byStamp[ctg[key]]; - - _this._setOpacity(_layerInfo3, 1.0); - } - } else { - var selectedKeys = {}; - - for (var _i3 = 0; _i3 < e.value.length; _i3++) { - selectedKeys[e.value[_i3]] = true; - } - - var _groupKeys2 = Object.keys(ctg); - - for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { - var _key2 = _groupKeys2[_i4]; - var _layerInfo4 = _this._byStamp[ctg[_key2]]; - - _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); - } - } - }; - - var selHandle = new crosstalk.SelectionHandle(ctGroup); - selHandle.on("change", handleSelection); - setTimeout(function () { - handleFilter({ - value: filterHandle.filteredKeys - }); - handleSelection({ - value: selHandle.value - }); - }, 100); - } - - if (!ctg[ctKey]) ctg[ctKey] = []; - ctg[ctKey].push(stamp); - } // Add to container - - - if (!layerInfo.hidden) container.addLayer(layer); - return oldLayer; - } - }, { - key: "brush", - value: function brush(bounds, extraInfo) { - var _this2 = this; - - /* eslint-disable no-console */ - // For each Crosstalk group... - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - var ctg = _this2._byCrosstalkGroup[ctGroupName]; - var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple - // layers)... - - Object.keys(ctg).forEach(function (ctKey) { - // ...and for each layer... - ctg[ctKey].forEach(function (stamp) { - var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... - - if (layerInfo.layer.getLatLng) { - // ... and it's inside the selection bounds... - // TODO: Use pixel containment, not lat/lng containment - if (bounds.contains(layerInfo.layer.getLatLng())) { - // ...add the key to the selection. - selection.push(ctKey); - } - } - }); - }); - new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); - }); - } - }, { - key: "unbrush", - value: function unbrush(extraInfo) { - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); - }); - } - }, { - key: "_setVisibility", - value: function _setVisibility(layerInfo, visible) { - if (layerInfo.hidden ^ visible) { - return; - } else if (visible) { - layerInfo.container.addLayer(layerInfo.layer); - layerInfo.hidden = false; - } else { - layerInfo.container.removeLayer(layerInfo.layer); - layerInfo.hidden = true; - } - } - }, { - key: "_setOpacity", - value: function _setOpacity(layerInfo, opacity) { - if (layerInfo.layer.setOpacity) { - layerInfo.layer.setOpacity(opacity); - } else if (layerInfo.layer.setStyle) { - layerInfo.layer.setStyle({ - opacity: opacity * layerInfo.layer.options.origOpacity, - fillOpacity: opacity * layerInfo.layer.options.origFillOpacity - }); - } - } - }, { - key: "getLayer", - value: function getLayer(category, layerId) { - return this._byLayerId[this._layerIdKey(category, layerId)]; - } - }, { - key: "removeLayer", - value: function removeLayer(category, layerIds) { - var _this3 = this; - - // Find layer info - _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { - var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; - - if (layer) { - _this3._removeLayer(layer); - } - }); - } - }, { - key: "clearLayers", - value: function clearLayers(category) { - var _this4 = this; - - // Find all layers in _byCategory[category] - var catTable = this._byCategory[category]; - - if (!catTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(catTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this4._removeLayer(stamp); - }); - } - }, { - key: "getLayerGroup", - value: function getLayerGroup(group, ensureExists) { - var g = this._groupContainers[group]; - - if (ensureExists && !g) { - this._byGroup[group] = this._byGroup[group] || {}; - g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); - g.groupname = group; - g.addTo(this._map); - } - - return g; - } - }, { - key: "getGroupNameFromLayerGroup", - value: function getGroupNameFromLayerGroup(layerGroup) { - return layerGroup.groupname; - } - }, { - key: "getVisibleGroups", - value: function getVisibleGroups() { - var _this5 = this; - - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - if (_this5._map.hasLayer(v)) { - result.push(k); - } - }); - - return result; - } - }, { - key: "getAllGroupNames", - value: function getAllGroupNames() { - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - result.push(k); - }); - - return result; - } - }, { - key: "clearGroup", - value: function clearGroup(group) { - var _this6 = this; - - // Find all layers in _byGroup[group] - var groupTable = this._byGroup[group]; - - if (!groupTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(groupTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this6._removeLayer(stamp); - }); - } - }, { - key: "clear", - value: function clear() { - function clearLayerGroup(key, layerGroup) { - layerGroup.clearLayers(); - } // Clear all indices and layerGroups - - - this._byGroup = {}; - this._byCategory = {}; - this._byLayerId = {}; - this._byStamp = {}; - this._byCrosstalkGroup = {}; - - _jquery2["default"].each(this._categoryContainers, clearLayerGroup); - - this._categoryContainers = {}; - - _jquery2["default"].each(this._groupContainers, clearLayerGroup); - - this._groupContainers = {}; - } - }, { - key: "_removeLayer", - value: function _removeLayer(layer) { - var stamp; - - if (typeof layer === "string") { - stamp = layer; - } else { - stamp = _leaflet2["default"].Util.stamp(layer); - } - - var layerInfo = this._byStamp[stamp]; - - if (!layerInfo) { - return false; - } - - layerInfo.container.removeLayer(stamp); - - if (typeof layerInfo.group === "string") { - delete this._byGroup[layerInfo.group][stamp]; - } - - if (typeof layerInfo.layerId === "string") { - delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; - } - - delete this._byCategory[layerInfo.category][stamp]; - delete this._byStamp[stamp]; - - if (layerInfo.ctGroup) { - var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; - var layersForKey = ctGroup[layerInfo.ctKey]; - var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; - - if (idx >= 0) { - if (layersForKey.length === 1) { - delete ctGroup[layerInfo.ctKey]; - } else { - layersForKey.splice(idx, 1); - } - } - } - } - }, { - key: "_layerIdKey", - value: function _layerIdKey(category, layerId) { - return category + "\n" + layerId; - } - }]); - - return LayerManager; -}(); - -exports["default"] = LayerManager; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -var _mipmapper = require("./mipmapper"); - -var _mipmapper2 = _interopRequireDefault(_mipmapper); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var methods = {}; -exports["default"] = methods; - -function mouseHandler(mapId, layerId, group, eventName, extraInfo) { - return function (e) { - if (!_htmlwidgets2["default"].shinyMode) return; - var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; - - if (latLng) { - // retrieve only lat, lon values to remove prototype - // and extra parameters added by 3rd party modules - // these objects are for json serialization, not javascript - var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape - - - latLng = { - lat: latLngVal.lat, - lng: latLngVal.lng - }; - } - - var eventInfo = _jquery2["default"].extend({ - id: layerId, - ".nonce": Math.random() // force reactivity - - }, group !== null ? { - group: group - } : null, latLng, extraInfo); - - _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); - }; -} - -methods.mouseHandler = mouseHandler; - -methods.clearGroup = function (group) { - var _this = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { - _this.layerManager.clearGroup(v); - }); -}; - -methods.setView = function (center, zoom, options) { - this.setView(center, zoom, options); -}; - -methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { - this.fitBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.flyTo = function (center, zoom, options) { - this.flyTo(center, zoom, options); -}; - -methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { - this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { - this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); -}; - -methods.addPopups = function (lat, lng, popup, layerId, group, options) { - var _this2 = this; - - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); - - var _loop = function _loop(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); - - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(popup, "popup", thisId, thisGroup); - }).call(_this2); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop(i); - } -}; - -methods.removePopup = function (layerId) { - this.layerManager.removeLayer("popup", layerId); -}; - -methods.clearPopups = function () { - this.layerManager.clearLayers("popup"); -}; - -methods.addTiles = function (urlTemplate, layerId, group, options) { - this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); -}; - -methods.removeTiles = function (layerId) { - this.layerManager.removeLayer("tile", layerId); -}; - -methods.clearTiles = function () { - this.layerManager.clearLayers("tile"); -}; - -methods.addWMSTiles = function (baseUrl, layerId, group, options) { - if (options && options.crs) { - options.crs = (0, _crs_utils.getCRS)(options.crs); - } - - this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); -}; // Given: -// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} -// returns: -// ["a", "b", "a", "c"] - - -function unpackStrings(iconset) { - if (!iconset) { - return iconset; - } - - if (typeof iconset.index === "undefined") { - return iconset; - } - - iconset.data = (0, _util.asArray)(iconset.data); - iconset.index = (0, _util.asArray)(iconset.index); - return _jquery2["default"].map(iconset.index, function (e, i) { - return iconset.data[e]; - }); -} - -function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { - (function () { - var _this3 = this; - - var clusterGroup = this.layerManager.getLayer("cluster", clusterId), - cluster = clusterOptions !== null; - - if (cluster && !clusterGroup) { - clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); - - if (clusterOptions.freezeAtZoom) { - var freezeAtZoom = clusterOptions.freezeAtZoom; - delete clusterOptions.freezeAtZoom; - clusterGroup.freezeAtZoom(freezeAtZoom); - } - - clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); - } - - var extraInfo = cluster ? { - clusterId: clusterId - } : {}; - - var _loop2 = function _loop2(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var marker = markerFunc(df, i); - var thisId = df.get(i, "layerId"); - var thisGroup = cluster ? null : df.get(i, "group"); - - if (cluster) { - clusterGroup.clusterLayerStore.add(marker, thisId); - } else { - this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - } - - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - marker.bindPopup(popup, popupOptions); - } else { - marker.bindPopup(popup); - } - } - - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - if (labelOptions.permanent) { - marker.bindTooltip(label, labelOptions).openTooltip(); - } else { - marker.bindTooltip(label, labelOptions); - } - } else { - marker.bindTooltip(label); - } - } - - marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); - marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); - marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); - marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); - }).call(_this3); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop2(i); - } - - if (cluster) { - this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); - } - }).call(map); -} - -methods.addGenericMarkers = addMarkers; - -methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // Unpack icons - icon.iconUrl = unpackStrings(icon.iconUrl); - icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); - icon.shadowUrl = unpackStrings(icon.shadowUrl); - icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts.iconUrl) { - return new _leaflet2["default"].Icon.Default(); - } // Composite options (like points or sizes) are passed from R with each - // individual component as its own option. We need to combine them now - // into their composite form. - - - if (opts.iconWidth) { - opts.iconSize = [opts.iconWidth, opts.iconHeight]; - } - - if (opts.shadowWidth) { - opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; - } - - if (opts.iconAnchorX) { - opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; - } - - if (opts.shadowAnchorX) { - opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; - } - - if (opts.popupAnchorX) { - opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; - } - - return new _leaflet2["default"].Icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts) { - return new _leaflet2["default"].AwesomeMarkers.icon(); - } - - if (opts.squareMarker) { - opts.className = "awesome-marker awesome-marker-square"; - } - - return new _leaflet2["default"].AwesomeMarkers.icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -function addLayers(map, category, df, layerFunc) { - var _loop3 = function _loop3(i) { - (function () { - var layer = layerFunc(df, i); - - if (!_jquery2["default"].isEmptyObject(layer)) { - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - - if (layer.bindPopup) { - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - layer.bindPopup(popup, popupOptions); - } else { - layer.bindPopup(popup); - } - } - } - - if (layer.bindTooltip) { - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - layer.bindTooltip(label, labelOptions); - } else { - layer.bindTooltip(label); - } - } - } - - layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); - layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); - layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); - var highlightStyle = df.get(i, "highlightOptions"); - - if (!_jquery2["default"].isEmptyObject(highlightStyle)) { - var defaultStyle = {}; - - _jquery2["default"].each(highlightStyle, function (k, v) { - if (k != "bringToFront" && k != "sendToBack") { - if (df.get(i, k)) { - defaultStyle[k] = df.get(i, k); - } - } - }); - - layer.on("mouseover", function (e) { - this.setStyle(highlightStyle); - - if (highlightStyle.bringToFront) { - this.bringToFront(); - } - }); - layer.on("mouseout", function (e) { - this.setStyle(defaultStyle); - - if (highlightStyle.sendToBack) { - this.bringToBack(); - } - }); - } - } - }).call(map); - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop3(i); - } -} - -methods.addGenericLayers = addLayers; - -methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { - return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); - } else { - return null; - } - }); - } -}; - -methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); - }); - } -}; -/* - * @param lat Array of arrays of latitude coordinates for polylines - * @param lng Array of arrays of longitude coordinates for polylines - */ - - -methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - var shapes = df.get(i, "shapes"); - shapes = shapes.map(function (shape) { - return _htmlwidgets2["default"].dataframeToD3(shape[0]); - }); - - if (shapes.length > 1) { - return _leaflet2["default"].polyline(shapes, df.get(i)); - } else { - return _leaflet2["default"].polyline(shapes[0], df.get(i)); - } - }); - } -}; - -methods.removeMarker = function (layerId) { - this.layerManager.removeLayer("marker", layerId); -}; - -methods.clearMarkers = function () { - this.layerManager.clearLayers("marker"); -}; - -methods.removeMarkerCluster = function (layerId) { - this.layerManager.removeLayer("cluster", layerId); -}; - -methods.removeMarkerFromCluster = function (layerId, clusterId) { - var cluster = this.layerManager.getLayer("cluster", clusterId); - if (!cluster) return; - cluster.clusterLayerStore.remove(layerId); -}; - -methods.clearMarkerClusters = function () { - this.layerManager.clearLayers("cluster"); -}; - -methods.removeShape = function (layerId) { - this.layerManager.removeLayer("shape", layerId); -}; - -methods.clearShapes = function () { - this.layerManager.clearLayers("shape"); -}; - -methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { - return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); - } else { - return null; - } - }); -}; -/* - * @param lat Array of arrays of latitude coordinates for polygons - * @param lng Array of arrays of longitude coordinates for polygons - */ - - -methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - // This code used to use L.multiPolygon, but that caused - // double-click on a multipolygon to fail to zoom in on the - // map. Surprisingly, putting all the rings in a single - // polygon seems to still work; complicated multipolygons - // are still rendered correctly. - var shapes = df.get(i, "shapes").map(function (polygon) { - return polygon.map(_htmlwidgets2["default"].dataframeToD3); - }).reduce(function (acc, val) { - return acc.concat(val); - }, []); - return _leaflet2["default"].polygon(shapes, df.get(i)); - }); - } -}; - -methods.addGeoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(data, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties ? feature.properties.popup : null; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); - } - }); - - this.layerManager.addLayer(gjlayer, "geojson", layerId, group); -}; - -methods.removeGeoJSON = function (layerId) { - this.layerManager.removeLayer("geojson", layerId); -}; - -methods.clearGeoJSON = function () { - this.layerManager.clearLayers("geojson"); -}; - -methods.addTopoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(null, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties.popup; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); - } - }); - - global.omnivore.topojson.parse(data, null, gjlayer); - this.layerManager.addLayer(gjlayer, "topojson", layerId, group); -}; - -methods.removeTopoJSON = function (layerId) { - this.layerManager.removeLayer("topojson", layerId); -}; - -methods.clearTopoJSON = function () { - this.layerManager.clearLayers("topojson"); -}; - -methods.addControl = function (html, position, layerId, classes) { - function onAdd(map) { - var div = _leaflet2["default"].DomUtil.create("div", classes); - - if (typeof layerId !== "undefined" && layerId !== null) { - div.setAttribute("id", layerId); - } - - this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to - // not be, when a static leaflet widget is included as part of the shiny - // UI directly (not through leafletOutput or uiOutput). In this case we - // don't do the normal Shiny stuff as that will all happen when Shiny - // itself loads and binds the entire doc. - - if (window.Shiny && _shiny2["default"].initializeInputs) { - _shiny2["default"].renderHtml(html, this._div); - - _shiny2["default"].initializeInputs(this._div); - - _shiny2["default"].bindAll(this._div); - } else { - this._div.innerHTML = html; - } - - return this._div; - } - - function onRemove(map) { - if (window.Shiny && _shiny2["default"].unbindAll) { - _shiny2["default"].unbindAll(this._div); - } - } - - var Control = _leaflet2["default"].Control.extend({ - options: { - position: position - }, - onAdd: onAdd, - onRemove: onRemove - }); - - this.controls.add(new Control(), layerId, html); -}; - -methods.addCustomControl = function (control, layerId) { - this.controls.add(control, layerId); -}; - -methods.removeControl = function (layerId) { - this.controls.remove(layerId); -}; - -methods.getControl = function (layerId) { - this.controls.get(layerId); -}; - -methods.clearControls = function () { - this.controls.clear(); -}; - -methods.addLegend = function (options) { - var legend = _leaflet2["default"].control({ - position: options.position - }); - - var gradSpan; - - legend.onAdd = function (map) { - var div = _leaflet2["default"].DomUtil.create("div", options.className), - colors = options.colors, - labels = options.labels, - legendHTML = ""; - - if (options.type === "numeric") { - // # Formatting constants. - var singleBinHeight = 20; // The distance between tick marks, in px - - var vMargin = 8; // If 1st tick mark starts at top of gradient, how - // many extra px are needed for the top half of the - // 1st label? (ditto for last tick mark/label) - - var tickWidth = 4; // How wide should tick marks be, in px? - - var labelPadding = 6; // How much distance to reserve for tick mark? - // (Must be >= tickWidth) - // # Derived formatting parameters. - // What's the height of a single bin, in percentage (of gradient height)? - // It might not just be 1/(n-1), if the gradient extends past the tick - // marks (which can be the case for pretty cut points). - - var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? - - var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top - // of the gradient? - - var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; - gradSpan = (0, _jquery2["default"])("").css({ - "background": "linear-gradient(" + colors + ")", - "opacity": options.opacity, - "height": totalHeight + "px", - "width": "18px", - "display": "block", - "margin-top": vMargin + "px" - }); - var leftDiv = (0, _jquery2["default"])("
").css("float", "left"), - rightDiv = (0, _jquery2["default"])("
").css("float", "left"); - leftDiv.append(gradSpan); - (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
")); // Have to attach the div to the body at this early point, so that the - // svg text getComputedTextLength() actually works, below. - - document.body.appendChild(div); - var ns = "http://www.w3.org/2000/svg"; - var svg = document.createElementNS(ns, "svg"); - rightDiv.append(svg); - var g = document.createElementNS(ns, "g"); - (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); - svg.appendChild(g); // max label width needed to set width of svg, and right-justify text - - var maxLblWidth = 0; // Create tick marks and labels - - _jquery2["default"].each(labels, function (i, label) { - var y = tickOffset + i * singleBinHeight + 0.5; - var thisLabel = document.createElementNS(ns, "text"); - (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); - g.appendChild(thisLabel); - maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); - var thisTick = document.createElementNS(ns, "line"); - (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); - g.appendChild(thisTick); - }); // Now that we know the max label width, we can right-justify - - - (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for - - (0, _jquery2["default"])(svg).css({ - width: maxLblWidth + labelPadding + "px", - height: totalHeight + vMargin * 2 + "px" - }); - - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - (0, _jquery2["default"])(div).append("
" + options.na_label + "
"); - } - } else { - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - colors.push(options.na_color); - labels.push(options.na_label); - } - - for (var i = 0; i < colors.length; i++) { - legendHTML += " " + labels[i] + "
"; - } - - div.innerHTML = legendHTML; - } - - if (options.title) (0, _jquery2["default"])(div).prepend("
" + options.title + "
"); - return div; - }; - - if (options.group) { - // Auto generate a layerID if not provided - if (!options.layerId) { - options.layerId = _leaflet2["default"].Util.stamp(legend); - } - - var map = this; - map.on("overlayadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("overlayremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - map.on("groupadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("groupremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - } - - this.controls.add(legend, options.layerId); -}; - -methods.addLayersControl = function (baseGroups, overlayGroups, options) { - var _this4 = this; - - // Only allow one layers control at a time - methods.removeLayersControl.call(this); - var firstLayer = true; - var base = {}; - - _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one - - if (_this4.hasLayer(layer)) { - if (firstLayer) { - firstLayer = false; - } else { - _this4.removeLayer(layer); - } - } - } - }); - - var overlay = {}; - - _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - overlay[g] = layer; - } - }); - - this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); - this.addControl(this.currentLayersControl); -}; - -methods.removeLayersControl = function () { - if (this.currentLayersControl) { - this.removeControl(this.currentLayersControl); - this.currentLayersControl = null; - } -}; - -methods.addScaleBar = function (options) { - // Only allow one scale bar at a time - methods.removeScaleBar.call(this); - - var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); - - this.currentScaleBar = scaleBar; -}; - -methods.removeScaleBar = function () { - if (this.currentScaleBar) { - this.currentScaleBar.remove(); - this.currentScaleBar = null; - } -}; - -methods.hideGroup = function (group) { - var _this5 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this5.layerManager.getLayerGroup(g, true); - - if (layer) { - _this5.removeLayer(layer); - } - }); -}; - -methods.showGroup = function (group) { - var _this6 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this6.layerManager.getLayerGroup(g, true); - - if (layer) { - _this6.addLayer(layer); - } - }); -}; - -function setupShowHideGroupsOnZoom(map) { - if (map.leafletr._hasInitializedShowHideGroups) { - return; - } - - map.leafletr._hasInitializedShowHideGroups = true; - - function setVisibility(layer, visible, group) { - if (visible !== map.hasLayer(layer)) { - if (visible) { - map.addLayer(layer); - map.fire("groupadd", { - "name": group, - "layer": layer - }); - } else { - map.removeLayer(layer); - map.fire("groupremove", { - "name": group, - "layer": layer - }); - } - } - } - - function showHideGroupsOnZoom() { - if (!map.layerManager) return; - var zoom = map.getZoom(); - map.layerManager.getAllGroupNames().forEach(function (group) { - var layer = map.layerManager.getLayerGroup(group, false); - - if (layer && typeof layer.zoomLevels !== "undefined") { - setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); - } - }); - } - - map.showHideGroupsOnZoom = showHideGroupsOnZoom; - map.on("zoomend", showHideGroupsOnZoom); -} - -methods.setGroupOptions = function (group, options) { - var _this7 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels - - - if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { - layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); - } - }); - - setupShowHideGroupsOnZoom(this); - this.showHideGroupsOnZoom(); -}; - -methods.addRasterImage = function (uri, bounds, opacity, attribution, layerId, group) { - // uri is a data URI containing an image. We want to paint this image as a - // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. - // We can't simply use ImageOverlay, as it uses bilinear scaling which looks - // awful as you zoom in (and sometimes shifts positions or disappears). - // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. - // First, some helper functions. - // degree2tile converts latitude, longitude, and zoom to x and y tile - // numbers. The tile numbers returned can be non-integral, as there's no - // reason to expect that the lat/lng inputs are exactly on the border of two - // tiles. - // - // We'll use this to convert the bounds we got from the server, into coords - // in tile-space at a given zoom level. Note that once we do the conversion, - // we don't to do any more trigonometry to convert between pixel coordinates - // and tile coordinates; the source image pixel coords, destination canvas - // pixel coords, and tile coords all can be scaled linearly. - function degree2tile(lat, lng, zoom) { - // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames - var latRad = lat * Math.PI / 180; - var n = Math.pow(2, zoom); - var x = (lng + 180) / 360 * n; - var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; - return { - x: x, - y: y - }; - } // Given a range [from,to) and either one or two numbers, returns true if - // there is any overlap between [x,x1) and the range--or if x1 is omitted, - // then returns true if x is within [from,to). - - - function overlap(from, to, x, - /* optional */ - x1) { - if (arguments.length == 3) x1 = x; - return x < to && x1 >= from; - } - - function getCanvasSmoothingProperty(ctx) { - var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; - - for (var i = 0; i < candidates.length; i++) { - if (typeof ctx[candidates[i]] !== "undefined") { - return candidates[i]; - } - } - - return null; - } // Our general strategy is to: - // 1. Load the data URI in an Image() object, so we can get its pixel - // dimensions and the underlying image data. (We could have done this - // by not encoding as PNG at all but just send an array of RGBA values - // from the server, but that would inflate the JSON too much.) - // 2. Create a hidden canvas that we use just to extract the image data - // from the Image (using Context2D.getImageData()). - // 3. Create a TileLayer.Canvas and add it to the map. - // We want to synchronously create and attach the TileLayer.Canvas (so an - // immediate call to clearRasters() will be respected, for example), but - // Image loads its data asynchronously. Fortunately we can resolve this - // by putting TileLayer.Canvas into async mode, which will let us create - // and attach the layer but have it wait until the image is loaded before - // it actually draws anything. - // These are the variables that we will populate once the image is loaded. - - - var imgData = null; // 1d row-major array, four [0-255] integers per pixel - - var imgDataMipMapper = null; - var w = null; // image width in pixels - - var h = null; // image height in pixels - // We'll use this array to store callbacks that need to be invoked once - // imgData, w, and h have been resolved. - - var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data - // is available. - - function getImageData(callback) { - if (imgData != null) { - // Must not invoke the callback immediately; it's too confusing and - // fragile to have a function invoke the callback *either* immediately - // or in the future. Better to be consistent here. - setTimeout(function () { - callback(imgData, w, h, imgDataMipMapper); - }, 0); - } else { - imgDataCallbacks.push(callback); - } - } - - var img = new Image(); - - img.onload = function () { - // Save size - w = img.width; - h = img.height; // Create a dummy canvas to extract the image data - - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = w; - imgDataCanvas.height = h; - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0); // Save the image data. - - imgData = imgDataCtx.getImageData(0, 0, w, h).data; - imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. - - document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. - - for (var i = 0; i < imgDataCallbacks.length; i++) { - imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); - } - - imgDataCallbacks = []; - }; - - img.src = uri; - - var canvasTiles = _leaflet2["default"].gridLayer({ - opacity: opacity, - attribution: attribution, - detectRetina: true, - async: true - }); // NOTE: The done() function MUST NOT be invoked until after the current - // tick; done() looks in Leaflet's tile cache for the current tile, and - // since it's still being constructed, it won't be found. - - - canvasTiles.createTile = function (tilePoint, done) { - var zoom = tilePoint.z; - - var canvas = _leaflet2["default"].DomUtil.create("canvas"); - - var error; // setup tile width and height according to the options - - var size = this.getTileSize(); - canvas.width = size.x; - canvas.height = size.y; - getImageData(function (imgData, w, h, mipmapper) { - try { - // The Context2D we'll being drawing onto. It's always 256x256. - var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into - // x/y tile coordinates. This is essentially doing a spherical mercator - // projection, then multiplying by 2^zoom. - - var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); - var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. - - var extent = { - x: bottomRight.x - topLeft.x, - y: bottomRight.y - topLeft.y - }; // Short circuit if tile is totally disjoint from image. - - if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; - if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. - // If the linear resolution (in either direction) of the image is less than 256px - // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in - // scaling. - - var imgRes = { - x: w / extent.x, - y: h / extent.y - }; // We can do the actual drawing in one of three ways: - // - Call drawImage(). This is easy and fast, and results in smooth - // interpolation (bilinear?). This is what we want when we are - // reducing the image from its native size. - // - Call drawImage() with imageSmoothingEnabled=false. This is easy - // and fast and gives us nearest-neighbor interpolation, which is what - // we want when enlarging the image. However, it's unsupported on many - // browsers (including QtWebkit). - // - Do a manual nearest-neighbor interpolation. This is what we'll fall - // back to when enlarging, and imageSmoothingEnabled isn't supported. - // In theory it's slower, but still pretty fast on my machine, and the - // results look the same AFAICT. - // Is imageSmoothingEnabled supported? If so, we can let canvas do - // nearest-neighbor interpolation for us. - - var smoothingProperty = getCanvasSmoothingProperty(ctx); - - if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { - // Use built-in scaling - // Turn off anti-aliasing if necessary - if (smoothingProperty) { - ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; - } // Don't necessarily draw with the full-size image; if we're - // downscaling, use the mipmapper to get a pre-downscaled image - // (see comments on Mipmapper class for why this matters). - - - mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { - // It's possible that the image will go off the edge of the canvas-- - // that's OK, the canvas should clip appropriately. - ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert - // to rel pixel coords - (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just - // convert from size in tile coords straight to pixels - extent.x * 256, extent.y * 256); - }); - } else { - // Use manual nearest-neighbor interpolation - // Calculate the source image pixel coordinates that correspond with - // the top-left and bottom-right of this tile. (If the source image - // only partially overlaps the tile, we use max/min to limit the - // sourceStart/End to only reflect the overlapping portion.) - var sourceStart = { - x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), - y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) - }; - var sourceEnd = { - x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), - y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) - }; // The size, in dest pixels, that each source pixel should occupy. - // This might be greater or less than 1 (e.g. if x and y resolution - // are very different). - - var pixelSize = { - x: 256 / imgRes.x, - y: 256 / imgRes.y - }; // For each pixel in the source image that overlaps the tile... - - for (var row = sourceStart.y; row < sourceEnd.y; row++) { - for (var col = sourceStart.x; col < sourceEnd.x; col++) { - // ...extract the pixel data... - var i = (row * w + col) * 4; - var r = imgData[i]; - var g = imgData[i + 1]; - var b = imgData[i + 2]; - var a = imgData[i + 3]; - ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image - // where it should be drawn... - - var pixelPos = { - x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, - y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 - }; // ...and draw a rectangle there. - - ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from - // causing overlap between this rect and its neighbors. The - // minuend is the location of the next pixel, while the - // subtrahend is the position of the current pixel (to turn an - // absolute coordinate to a width/height). Yes, I had to look - // up minuend and subtrahend. - Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); - } - } - } - } catch (e) { - error = e; - } finally { - done(error, canvas); - } - }); - return canvas; - }; - - this.layerManager.addLayer(canvasTiles, "image", layerId, group); -}; - -methods.removeImage = function (layerId) { - this.layerManager.removeLayer("image", layerId); -}; - -methods.clearImages = function () { - this.layerManager.clearLayers("image"); -}; - -methods.addMeasure = function (options) { - // if a measureControl already exists, then remove it and - // replace with a new one - methods.removeMeasure.call(this); - this.measureControl = _leaflet2["default"].control.measure(options); - this.addControl(this.measureControl); -}; - -methods.removeMeasure = function () { - if (this.measureControl) { - this.removeControl(this.measureControl); - this.measureControl = null; - } -}; - -methods.addSelect = function (ctGroup) { - var _this8 = this; - - methods.removeSelect.call(this); - this._selectButton = _leaflet2["default"].easyButton({ - states: [{ - stateName: "select-inactive", - icon: "ion-qr-scanner", - title: "Make a selection", - onClick: function onClick(btn, map) { - btn.state("select-active"); - _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); - - if (ctGroup) { - var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); - selectionHandle.on("change", function (e) { - if (e.sender !== selectionHandle) { - if (_this8._locationFilter) { - _this8._locationFilter.disable(); - - btn.state("select-inactive"); - } - } - }); - - var handler = function handler(e) { - _this8.layerManager.brush(_this8._locationFilter.getBounds(), { - sender: selectionHandle - }); - }; - - _this8._locationFilter.on("enabled", handler); - - _this8._locationFilter.on("change", handler); - - _this8._locationFilter.on("disabled", function () { - selectionHandle.close(); - _this8._locationFilter = null; - }); - } - - _this8._locationFilter.addTo(map); - } - }, { - stateName: "select-active", - icon: "ion-close-round", - title: "Dismiss selection", - onClick: function onClick(btn, map) { - btn.state("select-inactive"); - - _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections - - - _this8.layerManager.unbrush(); - } - }] - }); - - this._selectButton.addTo(this); -}; - -methods.removeSelect = function () { - if (this._locationFilter) { - this._locationFilter.disable(); - } - - if (this._selectButton) { - this.removeControl(this._selectButton); - this._selectButton = null; - } -}; - -methods.createMapPane = function (name, zIndex) { - this.createPane(name); - this.getPane(name).style.zIndex = zIndex; -}; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// This class simulates a mipmap, which shrinks images by powers of two. This -// stepwise reduction results in "pixel-perfect downscaling" (where every -// pixel of the original image has some contribution to the downscaled image) -// as opposed to a single-step downscaling which will discard a lot of data -// (and with sparse images at small scales can give very surprising results). -var Mipmapper = /*#__PURE__*/function () { - function Mipmapper(img) { - _classCallCheck(this, Mipmapper); - - this._layers = [img]; - } // The various functions on this class take a callback function BUT MAY OR MAY - // NOT actually behave asynchronously. - - - _createClass(Mipmapper, [{ - key: "getBySize", - value: function getBySize(desiredWidth, desiredHeight, callback) { - var _this = this; - - var i = 0; - var lastImg = this._layers[0]; - - var testNext = function testNext() { - _this.getByIndex(i, function (img) { - // If current image is invalid (i.e. too small to be rendered) or - // it's smaller than what we wanted, return the last known good image. - if (!img || img.width < desiredWidth || img.height < desiredHeight) { - callback(lastImg); - return; - } else { - lastImg = img; - i++; - testNext(); - return; - } - }); - }; - - testNext(); - } - }, { - key: "getByIndex", - value: function getByIndex(i, callback) { - var _this2 = this; - - if (this._layers[i]) { - callback(this._layers[i]); - return; - } - - this.getByIndex(i - 1, function (prevImg) { - if (!prevImg) { - // prevImg could not be calculated (too small, possibly) - callback(null); - return; - } - - if (prevImg.width < 2 || prevImg.height < 2) { - // Can't reduce this image any further - callback(null); - return; - } // If reduce ever becomes truly asynchronous, we should stuff a promise or - // something into this._layers[i] before calling this.reduce(), to prevent - // redundant reduce operations from happening. - - - _this2.reduce(prevImg, function (reducedImg) { - _this2._layers[i] = reducedImg; - callback(reducedImg); - return; - }); - }); - } - }, { - key: "reduce", - value: function reduce(img, callback) { - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = Math.ceil(img.width / 2); - imgDataCanvas.height = Math.ceil(img.height / 2); - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - - try { - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); - callback(imgDataCanvas); - } finally { - document.body.removeChild(imgDataCanvas); - } - } - }]); - - return Mipmapper; -}(); - -exports["default"] = Mipmapper; - - -},{}],17:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.log = log; -exports.recycle = recycle; -exports.asArray = asArray; - -function log(message) { - /* eslint-disable no-console */ - if (console && console.log) console.log(message); - /* eslint-enable no-console */ -} - -function recycle(values, length, inPlace) { - if (length === 0 && !inPlace) return []; - - if (!(values instanceof Array)) { - if (inPlace) { - throw new Error("Can't do in-place recycling of a non-Array value"); - } - - values = [values]; - } - - if (typeof length === "undefined") length = values.length; - var dest = inPlace ? values : []; - var origLength = values.length; - - while (dest.length < length) { - dest.push(values[dest.length % origLength]); - } - - if (dest.length > length) { - dest.splice(length, dest.length - length); - } - - return dest; -} - -function asArray(value) { - if (value instanceof Array) return value;else return [value]; -} - - -},{}]},{},[13]); diff --git a/docs/articles/Applications_files/leaflet-binding-2.2.1/leaflet.js b/docs/articles/Applications_files/leaflet-binding-2.2.1/leaflet.js deleted file mode 100644 index c8e7e5e..0000000 --- a/docs/articles/Applications_files/leaflet-binding-2.2.1/leaflet.js +++ /dev/null @@ -1,2789 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); - var colIndex = -1; - - if (typeof col === "undefined") { - var rowData = {}; - this.colnames.forEach(function (name, i) { - rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; - }); - return rowData; - } else if (typeof col === "string") { - colIndex = this._colIndex(col); - } else if (typeof col === "number") { - colIndex = col; - } - - if (colIndex < 0 || colIndex > this.columns.length) { - if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); - } - - return this.columns[colIndex][row % this.columns[colIndex].length]; - } - }, { - key: "nrow", - value: function nrow() { - return this.effectiveLength; - } - }]); - - return DataFrame; -}(); - -exports["default"] = DataFrame; - - -},{"./util":17}],5:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// In RMarkdown's self-contained mode, we don't have a way to carry around the -// images that Leaflet needs but doesn't load into the page. Instead, we'll use -// the unpkg CDN. -if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { - _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; -} - - -},{"./global/leaflet":10}],6:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// add texxtsize, textOnly, and style -_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; -_leaflet2["default"].Tooltip.prototype.options.textOnly = false; -_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. - -var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; - -_leaflet2["default"].Tooltip.prototype._initLayout = function () { - initLayoutOriginal.call(this); - this._container.style.fontSize = this.options.textsize; - - if (this.options.textOnly) { - _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); - } - - if (this.options.style) { - for (var property in this.options.style) { - this._container.style[property] = this.options.style[property]; - } - } -}; - - -},{"./global/leaflet":10}],7:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var protocolRegex = /^\/\//; - -var upgrade_protocol = function upgrade_protocol(urlTemplate) { - if (protocolRegex.test(urlTemplate)) { - if (window.location.protocol === "file:") { - // if in a local file, support http - // http should auto upgrade if necessary - urlTemplate = "http:" + urlTemplate; - } - } - - return urlTemplate; -}; - -var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; - -_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerInitialize.call(this, urlTemplate, options); -}; - -var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; - -_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerWMSInitialize.call(this, urlTemplate, options); -}; - - -},{"./global/leaflet":10}],8:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.HTMLWidgets; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],9:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.jQuery; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],11:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L.Proj; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.Shiny; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],13:[function(require,module,exports){ -"use strict"; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _controlStore = require("./control-store"); - -var _controlStore2 = _interopRequireDefault(_controlStore); - -var _layerManager = require("./layer-manager"); - -var _layerManager2 = _interopRequireDefault(_layerManager); - -var _methods = require("./methods"); - -var _methods2 = _interopRequireDefault(_methods); - -require("./fixup-default-icon"); - -require("./fixup-default-tooltip"); - -require("./fixup-url-protocol"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -window.LeafletWidget = {}; -window.LeafletWidget.utils = {}; - -var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); - -window.LeafletWidget.DataFrame = _dataframe2["default"]; -window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; -window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. - -function updateBounds(map) { - var id = map.getContainer().id; - var bounds = map.getBounds(); - - _shiny2["default"].onInputChange(id + "_bounds", { - north: bounds.getNorthEast().lat, - east: bounds.getNorthEast().lng, - south: bounds.getSouthWest().lat, - west: bounds.getSouthWest().lng - }); - - _shiny2["default"].onInputChange(id + "_center", { - lng: map.getCenter().lng, - lat: map.getCenter().lat - }); - - _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); -} - -function preventUnintendedZoomOnScroll(map) { - // Prevent unwanted scroll capturing. Similar in purpose to - // https://github.com/CliffCloud/Leaflet.Sleep but with a - // different set of heuristics. - // The basic idea is that when a mousewheel/DOMMouseScroll - // event is seen, we disable scroll wheel zooming until the - // user moves their mouse cursor or clicks on the map. This - // is slightly trickier than just listening for mousemove, - // because mousemove is fired when the page is scrolled, - // even if the user did not physically move the mouse. We - // handle this by examining the mousemove event's screenX - // and screenY properties; if they change, we know it's a - // "true" move. - // lastScreen can never be null, but its x and y can. - var lastScreen = { - x: null, - y: null - }; - (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { - // Disable zooming (until the mouse moves or click) - map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. - - lastScreen = { - x: e.originalEvent.screenX, - y: e.originalEvent.screenY - }; - }); - (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { - // Did the mouse really move? - if (map.options.scrollWheelZoom) { - if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { - // It really moved. Enable zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - } - }); - (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { - // Clicking always enables zooming. - if (map.options.scrollWheelZoom) { - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - }); -} - -_htmlwidgets2["default"].widget({ - name: "leaflet", - type: "output", - factory: function factory(el, width, height) { - var map = null; - return { - // we need to store our map in our returned object. - getMap: function getMap() { - return map; - }, - renderValue: function renderValue(data) { - // Create an appropriate CRS Object if specified - if (data && data.options && data.options.crs) { - data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); - } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 - - - if (map) { - map.remove(); - - map = function () { - return; - }(); // undefine map - - } - - if (data.options.mapFactory && typeof data.options.mapFactory === "function") { - map = data.options.mapFactory(el, data.options); - } else { - map = _leaflet2["default"].map(el, data.options); - } - - preventUnintendedZoomOnScroll(map); // Store some state in the map object - - map.leafletr = { - // Has the map ever rendered successfully? - hasRendered: false, - // Data to be rendered when resize is called with area != 0 - pendingRenderData: null - }; // Check if the map is rendered statically (no output binding) - - if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { - map.id = el.id; // Store the map on the element so we can find it later by ID - - (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app - - map.on("click", function (e) { - _shiny2["default"].onInputChange(map.id + "_click", { - lat: e.latlng.lat, - lng: e.latlng.lng, - ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed - - }); - }); - var groupTimerId = null; - map.on("moveend", function (e) { - updateBounds(e.target); - }).on("layeradd layerremove", function (e) { - // If the layer that's coming or going is a group we created, tell - // the server. - if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { - // But to avoid chattiness, coalesce events - if (groupTimerId) { - clearTimeout(groupTimerId); - groupTimerId = null; - } - - groupTimerId = setTimeout(function () { - groupTimerId = null; - - _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); - }, 100); - } - }); - } - - this.doRenderValue(data, map); - }, - doRenderValue: function doRenderValue(data, map) { - // Leaflet does not behave well when you set up a bunch of layers when - // the map is not visible (width/height == 0). Popups get misaligned - // relative to their owning markers, and the fitBounds calculations - // are off. Therefore we wait until the map is actually showing to - // render the value (we rely on the resize() callback being invoked - // at the appropriate time). - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - map.leafletr.pendingRenderData = data; - return; - } - - map.leafletr.pendingRenderData = null; // Merge data options into defaults - - var options = _jquery2["default"].extend({ - zoomToLimits: "always" - }, data.options); - - if (!map.layerManager) { - map.controls = new _controlStore2["default"](map); - map.layerManager = new _layerManager2["default"](map); - } else { - map.controls.clear(); - map.layerManager.clear(); - } - - var explicitView = false; - - if (data.setView) { - explicitView = true; - map.setView.apply(map, data.setView); - } - - if (data.fitBounds) { - explicitView = true; - methods.fitBounds.apply(map, data.fitBounds); - } - - if (data.flyTo) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - map.flyTo.apply(map, data.flyTo); - } - - if (data.flyToBounds) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - methods.flyToBounds.apply(map, data.flyToBounds); - } - - if (data.options.center) { - explicitView = true; - } // Returns true if the zoomToLimits option says that the map should be - // zoomed to map elements. - - - function needsZoom() { - return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; - } - - if (!explicitView && needsZoom() && !map.getZoom()) { - if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { - // Use the natural limits of what's being drawn on the map - // If the size of the bounding box is 0, leaflet gets all weird - var pad = 0.006; - - if (data.limits.lat[0] === data.limits.lat[1]) { - data.limits.lat[0] = data.limits.lat[0] - pad; - data.limits.lat[1] = data.limits.lat[1] + pad; - } - - if (data.limits.lng[0] === data.limits.lng[1]) { - data.limits.lng[0] = data.limits.lng[0] - pad; - data.limits.lng[1] = data.limits.lng[1] + pad; - } - - map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); - } else { - map.fitWorld(); - } - } - - for (var i = 0; data.calls && i < data.calls.length; i++) { - var call = data.calls[i]; - if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); - } - - map.leafletr.hasRendered = true; - - if (_htmlwidgets2["default"].shinyMode) { - setTimeout(function () { - updateBounds(map); - }, 1); - } - }, - resize: function resize(width, height) { - if (map) { - map.invalidateSize(); - - if (map.leafletr.pendingRenderData) { - this.doRenderValue(map.leafletr.pendingRenderData, map); - } - } - } - }; - } -}); - -if (_htmlwidgets2["default"].shinyMode) { - _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { - var id = data.id; - var el = document.getElementById(id); - var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; - - if (!map) { - (0, _util.log)("Couldn't find map with id " + id); - return; - } // If the map has not rendered, stash the proposed `leafletProxy()` calls - // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. - // This is necessary if the map has not been rendered. - // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. - - - if (!map.leafletr.hasRendered) { - map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); - return; - } - - for (var i = 0; i < data.calls.length; i++) { - var call = data.calls[i]; - var args = call.args; - - for (var _i = 0; _i < call.evals.length; _i++) { - window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); - } - - if (call.dependencies) { - _shiny2["default"].renderDependencies(call.dependencies); - } - - if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); - } - }); -} - - -},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = undefined; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _util = require("./util"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var LayerManager = /*#__PURE__*/function () { - function LayerManager(map) { - _classCallCheck(this, LayerManager); - - this._map = map; // BEGIN layer indices - // {: {: layer}} - - this._byGroup = {}; // {: {: layer}} - - this._byCategory = {}; // {: layer} - - this._byLayerId = {}; // {: { - // "group": , - // "layerId": , - // "category": , - // "container": - // } - // } - - this._byStamp = {}; // {: {: [, , ...], ...}} - - this._byCrosstalkGroup = {}; // END layer indices - // {: L.layerGroup} - - this._categoryContainers = {}; // {: L.layerGroup} - - this._groupContainers = {}; - } - - _createClass(LayerManager, [{ - key: "addLayer", - value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { - var _this = this; - - // Was a group provided? - var hasId = typeof layerId === "string"; - var grouped = typeof group === "string"; - var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. - // We may overwrite this let before using it (i.e. if a group is assigned). - // This one liner creates the _categoryContainers[category] entry if it - // doesn't already exist. - - var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); - - var oldLayer = null; - - if (hasId) { - // First, remove any layer with the same category and layerId - var prefixedLayerId = this._layerIdKey(category, layerId); - - oldLayer = this._byLayerId[prefixedLayerId]; - - if (oldLayer) { - this._removeLayer(oldLayer); - } // Update layerId index - - - this._byLayerId[prefixedLayerId] = layer; - } // Update group index - - - if (grouped) { - this._byGroup[group] = this._byGroup[group] || {}; - this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer - // group; instead, use the group's layer group. - // This one liner creates the _groupContainers[group] entry if it doesn't - // already exist. - - container = this.getLayerGroup(group, true); - } // Update category index - - - this._byCategory[category] = this._byCategory[category] || {}; - this._byCategory[category][stamp] = layer; // Update stamp index - - var layerInfo = this._byStamp[stamp] = { - layer: layer, - group: group, - ctGroup: ctGroup, - ctKey: ctKey, - layerId: layerId, - category: category, - container: container, - hidden: false - }; // Update crosstalk group index - - if (ctGroup) { - if (layer.setStyle) { - // Need to save this info so we know what to set opacity to later - layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; - layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; - } - - var ctg = this._byCrosstalkGroup[ctGroup]; - - if (!ctg) { - ctg = this._byCrosstalkGroup[ctGroup] = {}; - var crosstalk = global.crosstalk; - - var handleFilter = function handleFilter(e) { - if (!e.value) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo = _this._byStamp[ctg[key]]; - - _this._setVisibility(_layerInfo, true); - } - } else { - var selectedKeys = {}; - - for (var _i = 0; _i < e.value.length; _i++) { - selectedKeys[e.value[_i]] = true; - } - - var _groupKeys = Object.keys(ctg); - - for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { - var _key = _groupKeys[_i2]; - var _layerInfo2 = _this._byStamp[ctg[_key]]; - - _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); - } - } - }; - - var filterHandle = new crosstalk.FilterHandle(ctGroup); - filterHandle.on("change", handleFilter); - - var handleSelection = function handleSelection(e) { - if (!e.value || !e.value.length) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo3 = _this._byStamp[ctg[key]]; - - _this._setOpacity(_layerInfo3, 1.0); - } - } else { - var selectedKeys = {}; - - for (var _i3 = 0; _i3 < e.value.length; _i3++) { - selectedKeys[e.value[_i3]] = true; - } - - var _groupKeys2 = Object.keys(ctg); - - for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { - var _key2 = _groupKeys2[_i4]; - var _layerInfo4 = _this._byStamp[ctg[_key2]]; - - _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); - } - } - }; - - var selHandle = new crosstalk.SelectionHandle(ctGroup); - selHandle.on("change", handleSelection); - setTimeout(function () { - handleFilter({ - value: filterHandle.filteredKeys - }); - handleSelection({ - value: selHandle.value - }); - }, 100); - } - - if (!ctg[ctKey]) ctg[ctKey] = []; - ctg[ctKey].push(stamp); - } // Add to container - - - if (!layerInfo.hidden) container.addLayer(layer); - return oldLayer; - } - }, { - key: "brush", - value: function brush(bounds, extraInfo) { - var _this2 = this; - - /* eslint-disable no-console */ - // For each Crosstalk group... - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - var ctg = _this2._byCrosstalkGroup[ctGroupName]; - var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple - // layers)... - - Object.keys(ctg).forEach(function (ctKey) { - // ...and for each layer... - ctg[ctKey].forEach(function (stamp) { - var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... - - if (layerInfo.layer.getLatLng) { - // ... and it's inside the selection bounds... - // TODO: Use pixel containment, not lat/lng containment - if (bounds.contains(layerInfo.layer.getLatLng())) { - // ...add the key to the selection. - selection.push(ctKey); - } - } - }); - }); - new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); - }); - } - }, { - key: "unbrush", - value: function unbrush(extraInfo) { - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); - }); - } - }, { - key: "_setVisibility", - value: function _setVisibility(layerInfo, visible) { - if (layerInfo.hidden ^ visible) { - return; - } else if (visible) { - layerInfo.container.addLayer(layerInfo.layer); - layerInfo.hidden = false; - } else { - layerInfo.container.removeLayer(layerInfo.layer); - layerInfo.hidden = true; - } - } - }, { - key: "_setOpacity", - value: function _setOpacity(layerInfo, opacity) { - if (layerInfo.layer.setOpacity) { - layerInfo.layer.setOpacity(opacity); - } else if (layerInfo.layer.setStyle) { - layerInfo.layer.setStyle({ - opacity: opacity * layerInfo.layer.options.origOpacity, - fillOpacity: opacity * layerInfo.layer.options.origFillOpacity - }); - } - } - }, { - key: "getLayer", - value: function getLayer(category, layerId) { - return this._byLayerId[this._layerIdKey(category, layerId)]; - } - }, { - key: "removeLayer", - value: function removeLayer(category, layerIds) { - var _this3 = this; - - // Find layer info - _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { - var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; - - if (layer) { - _this3._removeLayer(layer); - } - }); - } - }, { - key: "clearLayers", - value: function clearLayers(category) { - var _this4 = this; - - // Find all layers in _byCategory[category] - var catTable = this._byCategory[category]; - - if (!catTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(catTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this4._removeLayer(stamp); - }); - } - }, { - key: "getLayerGroup", - value: function getLayerGroup(group, ensureExists) { - var g = this._groupContainers[group]; - - if (ensureExists && !g) { - this._byGroup[group] = this._byGroup[group] || {}; - g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); - g.groupname = group; - g.addTo(this._map); - } - - return g; - } - }, { - key: "getGroupNameFromLayerGroup", - value: function getGroupNameFromLayerGroup(layerGroup) { - return layerGroup.groupname; - } - }, { - key: "getVisibleGroups", - value: function getVisibleGroups() { - var _this5 = this; - - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - if (_this5._map.hasLayer(v)) { - result.push(k); - } - }); - - return result; - } - }, { - key: "getAllGroupNames", - value: function getAllGroupNames() { - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - result.push(k); - }); - - return result; - } - }, { - key: "clearGroup", - value: function clearGroup(group) { - var _this6 = this; - - // Find all layers in _byGroup[group] - var groupTable = this._byGroup[group]; - - if (!groupTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(groupTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this6._removeLayer(stamp); - }); - } - }, { - key: "clear", - value: function clear() { - function clearLayerGroup(key, layerGroup) { - layerGroup.clearLayers(); - } // Clear all indices and layerGroups - - - this._byGroup = {}; - this._byCategory = {}; - this._byLayerId = {}; - this._byStamp = {}; - this._byCrosstalkGroup = {}; - - _jquery2["default"].each(this._categoryContainers, clearLayerGroup); - - this._categoryContainers = {}; - - _jquery2["default"].each(this._groupContainers, clearLayerGroup); - - this._groupContainers = {}; - } - }, { - key: "_removeLayer", - value: function _removeLayer(layer) { - var stamp; - - if (typeof layer === "string") { - stamp = layer; - } else { - stamp = _leaflet2["default"].Util.stamp(layer); - } - - var layerInfo = this._byStamp[stamp]; - - if (!layerInfo) { - return false; - } - - layerInfo.container.removeLayer(stamp); - - if (typeof layerInfo.group === "string") { - delete this._byGroup[layerInfo.group][stamp]; - } - - if (typeof layerInfo.layerId === "string") { - delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; - } - - delete this._byCategory[layerInfo.category][stamp]; - delete this._byStamp[stamp]; - - if (layerInfo.ctGroup) { - var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; - var layersForKey = ctGroup[layerInfo.ctKey]; - var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; - - if (idx >= 0) { - if (layersForKey.length === 1) { - delete ctGroup[layerInfo.ctKey]; - } else { - layersForKey.splice(idx, 1); - } - } - } - } - }, { - key: "_layerIdKey", - value: function _layerIdKey(category, layerId) { - return category + "\n" + layerId; - } - }]); - - return LayerManager; -}(); - -exports["default"] = LayerManager; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -var _mipmapper = require("./mipmapper"); - -var _mipmapper2 = _interopRequireDefault(_mipmapper); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var methods = {}; -exports["default"] = methods; - -function mouseHandler(mapId, layerId, group, eventName, extraInfo) { - return function (e) { - if (!_htmlwidgets2["default"].shinyMode) return; - var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; - - if (latLng) { - // retrieve only lat, lon values to remove prototype - // and extra parameters added by 3rd party modules - // these objects are for json serialization, not javascript - var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape - - - latLng = { - lat: latLngVal.lat, - lng: latLngVal.lng - }; - } - - var eventInfo = _jquery2["default"].extend({ - id: layerId, - ".nonce": Math.random() // force reactivity - - }, group !== null ? { - group: group - } : null, latLng, extraInfo); - - _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); - }; -} - -methods.mouseHandler = mouseHandler; - -methods.clearGroup = function (group) { - var _this = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { - _this.layerManager.clearGroup(v); - }); -}; - -methods.setView = function (center, zoom, options) { - this.setView(center, zoom, options); -}; - -methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { - this.fitBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.flyTo = function (center, zoom, options) { - this.flyTo(center, zoom, options); -}; - -methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { - this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { - this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); -}; - -methods.addPopups = function (lat, lng, popup, layerId, group, options) { - var _this2 = this; - - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); - - var _loop = function _loop(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); - - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(popup, "popup", thisId, thisGroup); - }).call(_this2); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop(i); - } -}; - -methods.removePopup = function (layerId) { - this.layerManager.removeLayer("popup", layerId); -}; - -methods.clearPopups = function () { - this.layerManager.clearLayers("popup"); -}; - -methods.addTiles = function (urlTemplate, layerId, group, options) { - this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); -}; - -methods.removeTiles = function (layerId) { - this.layerManager.removeLayer("tile", layerId); -}; - -methods.clearTiles = function () { - this.layerManager.clearLayers("tile"); -}; - -methods.addWMSTiles = function (baseUrl, layerId, group, options) { - if (options && options.crs) { - options.crs = (0, _crs_utils.getCRS)(options.crs); - } - - this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); -}; // Given: -// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} -// returns: -// ["a", "b", "a", "c"] - - -function unpackStrings(iconset) { - if (!iconset) { - return iconset; - } - - if (typeof iconset.index === "undefined") { - return iconset; - } - - iconset.data = (0, _util.asArray)(iconset.data); - iconset.index = (0, _util.asArray)(iconset.index); - return _jquery2["default"].map(iconset.index, function (e, i) { - return iconset.data[e]; - }); -} - -function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { - (function () { - var _this3 = this; - - var clusterGroup = this.layerManager.getLayer("cluster", clusterId), - cluster = clusterOptions !== null; - - if (cluster && !clusterGroup) { - clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); - - if (clusterOptions.freezeAtZoom) { - var freezeAtZoom = clusterOptions.freezeAtZoom; - delete clusterOptions.freezeAtZoom; - clusterGroup.freezeAtZoom(freezeAtZoom); - } - - clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); - } - - var extraInfo = cluster ? { - clusterId: clusterId - } : {}; - - var _loop2 = function _loop2(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var marker = markerFunc(df, i); - var thisId = df.get(i, "layerId"); - var thisGroup = cluster ? null : df.get(i, "group"); - - if (cluster) { - clusterGroup.clusterLayerStore.add(marker, thisId); - } else { - this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - } - - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - marker.bindPopup(popup, popupOptions); - } else { - marker.bindPopup(popup); - } - } - - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - if (labelOptions.permanent) { - marker.bindTooltip(label, labelOptions).openTooltip(); - } else { - marker.bindTooltip(label, labelOptions); - } - } else { - marker.bindTooltip(label); - } - } - - marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); - marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); - marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); - marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); - }).call(_this3); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop2(i); - } - - if (cluster) { - this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); - } - }).call(map); -} - -methods.addGenericMarkers = addMarkers; - -methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // Unpack icons - icon.iconUrl = unpackStrings(icon.iconUrl); - icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); - icon.shadowUrl = unpackStrings(icon.shadowUrl); - icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts.iconUrl) { - return new _leaflet2["default"].Icon.Default(); - } // Composite options (like points or sizes) are passed from R with each - // individual component as its own option. We need to combine them now - // into their composite form. - - - if (opts.iconWidth) { - opts.iconSize = [opts.iconWidth, opts.iconHeight]; - } - - if (opts.shadowWidth) { - opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; - } - - if (opts.iconAnchorX) { - opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; - } - - if (opts.shadowAnchorX) { - opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; - } - - if (opts.popupAnchorX) { - opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; - } - - return new _leaflet2["default"].Icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts) { - return new _leaflet2["default"].AwesomeMarkers.icon(); - } - - if (opts.squareMarker) { - opts.className = "awesome-marker awesome-marker-square"; - } - - return new _leaflet2["default"].AwesomeMarkers.icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -function addLayers(map, category, df, layerFunc) { - var _loop3 = function _loop3(i) { - (function () { - var layer = layerFunc(df, i); - - if (!_jquery2["default"].isEmptyObject(layer)) { - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - - if (layer.bindPopup) { - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - layer.bindPopup(popup, popupOptions); - } else { - layer.bindPopup(popup); - } - } - } - - if (layer.bindTooltip) { - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - layer.bindTooltip(label, labelOptions); - } else { - layer.bindTooltip(label); - } - } - } - - layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); - layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); - layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); - var highlightStyle = df.get(i, "highlightOptions"); - - if (!_jquery2["default"].isEmptyObject(highlightStyle)) { - var defaultStyle = {}; - - _jquery2["default"].each(highlightStyle, function (k, v) { - if (k != "bringToFront" && k != "sendToBack") { - if (df.get(i, k)) { - defaultStyle[k] = df.get(i, k); - } - } - }); - - layer.on("mouseover", function (e) { - this.setStyle(highlightStyle); - - if (highlightStyle.bringToFront) { - this.bringToFront(); - } - }); - layer.on("mouseout", function (e) { - this.setStyle(defaultStyle); - - if (highlightStyle.sendToBack) { - this.bringToBack(); - } - }); - } - } - }).call(map); - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop3(i); - } -} - -methods.addGenericLayers = addLayers; - -methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { - return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); - } else { - return null; - } - }); - } -}; - -methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); - }); - } -}; -/* - * @param lat Array of arrays of latitude coordinates for polylines - * @param lng Array of arrays of longitude coordinates for polylines - */ - - -methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - var shapes = df.get(i, "shapes"); - shapes = shapes.map(function (shape) { - return _htmlwidgets2["default"].dataframeToD3(shape[0]); - }); - - if (shapes.length > 1) { - return _leaflet2["default"].polyline(shapes, df.get(i)); - } else { - return _leaflet2["default"].polyline(shapes[0], df.get(i)); - } - }); - } -}; - -methods.removeMarker = function (layerId) { - this.layerManager.removeLayer("marker", layerId); -}; - -methods.clearMarkers = function () { - this.layerManager.clearLayers("marker"); -}; - -methods.removeMarkerCluster = function (layerId) { - this.layerManager.removeLayer("cluster", layerId); -}; - -methods.removeMarkerFromCluster = function (layerId, clusterId) { - var cluster = this.layerManager.getLayer("cluster", clusterId); - if (!cluster) return; - cluster.clusterLayerStore.remove(layerId); -}; - -methods.clearMarkerClusters = function () { - this.layerManager.clearLayers("cluster"); -}; - -methods.removeShape = function (layerId) { - this.layerManager.removeLayer("shape", layerId); -}; - -methods.clearShapes = function () { - this.layerManager.clearLayers("shape"); -}; - -methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { - return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); - } else { - return null; - } - }); -}; -/* - * @param lat Array of arrays of latitude coordinates for polygons - * @param lng Array of arrays of longitude coordinates for polygons - */ - - -methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - // This code used to use L.multiPolygon, but that caused - // double-click on a multipolygon to fail to zoom in on the - // map. Surprisingly, putting all the rings in a single - // polygon seems to still work; complicated multipolygons - // are still rendered correctly. - var shapes = df.get(i, "shapes").map(function (polygon) { - return polygon.map(_htmlwidgets2["default"].dataframeToD3); - }).reduce(function (acc, val) { - return acc.concat(val); - }, []); - return _leaflet2["default"].polygon(shapes, df.get(i)); - }); - } -}; - -methods.addGeoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(data, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties ? feature.properties.popup : null; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); - } - }); - - this.layerManager.addLayer(gjlayer, "geojson", layerId, group); -}; - -methods.removeGeoJSON = function (layerId) { - this.layerManager.removeLayer("geojson", layerId); -}; - -methods.clearGeoJSON = function () { - this.layerManager.clearLayers("geojson"); -}; - -methods.addTopoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(null, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties.popup; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); - } - }); - - global.omnivore.topojson.parse(data, null, gjlayer); - this.layerManager.addLayer(gjlayer, "topojson", layerId, group); -}; - -methods.removeTopoJSON = function (layerId) { - this.layerManager.removeLayer("topojson", layerId); -}; - -methods.clearTopoJSON = function () { - this.layerManager.clearLayers("topojson"); -}; - -methods.addControl = function (html, position, layerId, classes) { - function onAdd(map) { - var div = _leaflet2["default"].DomUtil.create("div", classes); - - if (typeof layerId !== "undefined" && layerId !== null) { - div.setAttribute("id", layerId); - } - - this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to - // not be, when a static leaflet widget is included as part of the shiny - // UI directly (not through leafletOutput or uiOutput). In this case we - // don't do the normal Shiny stuff as that will all happen when Shiny - // itself loads and binds the entire doc. - - if (window.Shiny && _shiny2["default"].initializeInputs) { - _shiny2["default"].renderHtml(html, this._div); - - _shiny2["default"].initializeInputs(this._div); - - _shiny2["default"].bindAll(this._div); - } else { - this._div.innerHTML = html; - } - - return this._div; - } - - function onRemove(map) { - if (window.Shiny && _shiny2["default"].unbindAll) { - _shiny2["default"].unbindAll(this._div); - } - } - - var Control = _leaflet2["default"].Control.extend({ - options: { - position: position - }, - onAdd: onAdd, - onRemove: onRemove - }); - - this.controls.add(new Control(), layerId, html); -}; - -methods.addCustomControl = function (control, layerId) { - this.controls.add(control, layerId); -}; - -methods.removeControl = function (layerId) { - this.controls.remove(layerId); -}; - -methods.getControl = function (layerId) { - this.controls.get(layerId); -}; - -methods.clearControls = function () { - this.controls.clear(); -}; - -methods.addLegend = function (options) { - var legend = _leaflet2["default"].control({ - position: options.position - }); - - var gradSpan; - - legend.onAdd = function (map) { - var div = _leaflet2["default"].DomUtil.create("div", options.className), - colors = options.colors, - labels = options.labels, - legendHTML = ""; - - if (options.type === "numeric") { - // # Formatting constants. - var singleBinHeight = 20; // The distance between tick marks, in px - - var vMargin = 8; // If 1st tick mark starts at top of gradient, how - // many extra px are needed for the top half of the - // 1st label? (ditto for last tick mark/label) - - var tickWidth = 4; // How wide should tick marks be, in px? - - var labelPadding = 6; // How much distance to reserve for tick mark? - // (Must be >= tickWidth) - // # Derived formatting parameters. - // What's the height of a single bin, in percentage (of gradient height)? - // It might not just be 1/(n-1), if the gradient extends past the tick - // marks (which can be the case for pretty cut points). - - var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? - - var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top - // of the gradient? - - var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; - gradSpan = (0, _jquery2["default"])("").css({ - "background": "linear-gradient(" + colors + ")", - "opacity": options.opacity, - "height": totalHeight + "px", - "width": "18px", - "display": "block", - "margin-top": vMargin + "px" - }); - var leftDiv = (0, _jquery2["default"])("
").css("float", "left"), - rightDiv = (0, _jquery2["default"])("
").css("float", "left"); - leftDiv.append(gradSpan); - (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
")); // Have to attach the div to the body at this early point, so that the - // svg text getComputedTextLength() actually works, below. - - document.body.appendChild(div); - var ns = "http://www.w3.org/2000/svg"; - var svg = document.createElementNS(ns, "svg"); - rightDiv.append(svg); - var g = document.createElementNS(ns, "g"); - (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); - svg.appendChild(g); // max label width needed to set width of svg, and right-justify text - - var maxLblWidth = 0; // Create tick marks and labels - - _jquery2["default"].each(labels, function (i, label) { - var y = tickOffset + i * singleBinHeight + 0.5; - var thisLabel = document.createElementNS(ns, "text"); - (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); - g.appendChild(thisLabel); - maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); - var thisTick = document.createElementNS(ns, "line"); - (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); - g.appendChild(thisTick); - }); // Now that we know the max label width, we can right-justify - - - (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for - - (0, _jquery2["default"])(svg).css({ - width: maxLblWidth + labelPadding + "px", - height: totalHeight + vMargin * 2 + "px" - }); - - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - (0, _jquery2["default"])(div).append("
" + options.na_label + "
"); - } - } else { - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - colors.push(options.na_color); - labels.push(options.na_label); - } - - for (var i = 0; i < colors.length; i++) { - legendHTML += " " + labels[i] + "
"; - } - - div.innerHTML = legendHTML; - } - - if (options.title) (0, _jquery2["default"])(div).prepend("
" + options.title + "
"); - return div; - }; - - if (options.group) { - // Auto generate a layerID if not provided - if (!options.layerId) { - options.layerId = _leaflet2["default"].Util.stamp(legend); - } - - var map = this; - map.on("overlayadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("overlayremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - map.on("groupadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("groupremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - } - - this.controls.add(legend, options.layerId); -}; - -methods.addLayersControl = function (baseGroups, overlayGroups, options) { - var _this4 = this; - - // Only allow one layers control at a time - methods.removeLayersControl.call(this); - var firstLayer = true; - var base = {}; - - _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one - - if (_this4.hasLayer(layer)) { - if (firstLayer) { - firstLayer = false; - } else { - _this4.removeLayer(layer); - } - } - } - }); - - var overlay = {}; - - _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - overlay[g] = layer; - } - }); - - this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); - this.addControl(this.currentLayersControl); -}; - -methods.removeLayersControl = function () { - if (this.currentLayersControl) { - this.removeControl(this.currentLayersControl); - this.currentLayersControl = null; - } -}; - -methods.addScaleBar = function (options) { - // Only allow one scale bar at a time - methods.removeScaleBar.call(this); - - var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); - - this.currentScaleBar = scaleBar; -}; - -methods.removeScaleBar = function () { - if (this.currentScaleBar) { - this.currentScaleBar.remove(); - this.currentScaleBar = null; - } -}; - -methods.hideGroup = function (group) { - var _this5 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this5.layerManager.getLayerGroup(g, true); - - if (layer) { - _this5.removeLayer(layer); - } - }); -}; - -methods.showGroup = function (group) { - var _this6 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this6.layerManager.getLayerGroup(g, true); - - if (layer) { - _this6.addLayer(layer); - } - }); -}; - -function setupShowHideGroupsOnZoom(map) { - if (map.leafletr._hasInitializedShowHideGroups) { - return; - } - - map.leafletr._hasInitializedShowHideGroups = true; - - function setVisibility(layer, visible, group) { - if (visible !== map.hasLayer(layer)) { - if (visible) { - map.addLayer(layer); - map.fire("groupadd", { - "name": group, - "layer": layer - }); - } else { - map.removeLayer(layer); - map.fire("groupremove", { - "name": group, - "layer": layer - }); - } - } - } - - function showHideGroupsOnZoom() { - if (!map.layerManager) return; - var zoom = map.getZoom(); - map.layerManager.getAllGroupNames().forEach(function (group) { - var layer = map.layerManager.getLayerGroup(group, false); - - if (layer && typeof layer.zoomLevels !== "undefined") { - setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); - } - }); - } - - map.showHideGroupsOnZoom = showHideGroupsOnZoom; - map.on("zoomend", showHideGroupsOnZoom); -} - -methods.setGroupOptions = function (group, options) { - var _this7 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels - - - if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { - layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); - } - }); - - setupShowHideGroupsOnZoom(this); - this.showHideGroupsOnZoom(); -}; - -methods.addRasterImage = function (uri, bounds, opacity, attribution, layerId, group) { - // uri is a data URI containing an image. We want to paint this image as a - // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. - // We can't simply use ImageOverlay, as it uses bilinear scaling which looks - // awful as you zoom in (and sometimes shifts positions or disappears). - // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. - // First, some helper functions. - // degree2tile converts latitude, longitude, and zoom to x and y tile - // numbers. The tile numbers returned can be non-integral, as there's no - // reason to expect that the lat/lng inputs are exactly on the border of two - // tiles. - // - // We'll use this to convert the bounds we got from the server, into coords - // in tile-space at a given zoom level. Note that once we do the conversion, - // we don't to do any more trigonometry to convert between pixel coordinates - // and tile coordinates; the source image pixel coords, destination canvas - // pixel coords, and tile coords all can be scaled linearly. - function degree2tile(lat, lng, zoom) { - // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames - var latRad = lat * Math.PI / 180; - var n = Math.pow(2, zoom); - var x = (lng + 180) / 360 * n; - var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; - return { - x: x, - y: y - }; - } // Given a range [from,to) and either one or two numbers, returns true if - // there is any overlap between [x,x1) and the range--or if x1 is omitted, - // then returns true if x is within [from,to). - - - function overlap(from, to, x, - /* optional */ - x1) { - if (arguments.length == 3) x1 = x; - return x < to && x1 >= from; - } - - function getCanvasSmoothingProperty(ctx) { - var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; - - for (var i = 0; i < candidates.length; i++) { - if (typeof ctx[candidates[i]] !== "undefined") { - return candidates[i]; - } - } - - return null; - } // Our general strategy is to: - // 1. Load the data URI in an Image() object, so we can get its pixel - // dimensions and the underlying image data. (We could have done this - // by not encoding as PNG at all but just send an array of RGBA values - // from the server, but that would inflate the JSON too much.) - // 2. Create a hidden canvas that we use just to extract the image data - // from the Image (using Context2D.getImageData()). - // 3. Create a TileLayer.Canvas and add it to the map. - // We want to synchronously create and attach the TileLayer.Canvas (so an - // immediate call to clearRasters() will be respected, for example), but - // Image loads its data asynchronously. Fortunately we can resolve this - // by putting TileLayer.Canvas into async mode, which will let us create - // and attach the layer but have it wait until the image is loaded before - // it actually draws anything. - // These are the variables that we will populate once the image is loaded. - - - var imgData = null; // 1d row-major array, four [0-255] integers per pixel - - var imgDataMipMapper = null; - var w = null; // image width in pixels - - var h = null; // image height in pixels - // We'll use this array to store callbacks that need to be invoked once - // imgData, w, and h have been resolved. - - var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data - // is available. - - function getImageData(callback) { - if (imgData != null) { - // Must not invoke the callback immediately; it's too confusing and - // fragile to have a function invoke the callback *either* immediately - // or in the future. Better to be consistent here. - setTimeout(function () { - callback(imgData, w, h, imgDataMipMapper); - }, 0); - } else { - imgDataCallbacks.push(callback); - } - } - - var img = new Image(); - - img.onload = function () { - // Save size - w = img.width; - h = img.height; // Create a dummy canvas to extract the image data - - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = w; - imgDataCanvas.height = h; - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0); // Save the image data. - - imgData = imgDataCtx.getImageData(0, 0, w, h).data; - imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. - - document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. - - for (var i = 0; i < imgDataCallbacks.length; i++) { - imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); - } - - imgDataCallbacks = []; - }; - - img.src = uri; - - var canvasTiles = _leaflet2["default"].gridLayer({ - opacity: opacity, - attribution: attribution, - detectRetina: true, - async: true - }); // NOTE: The done() function MUST NOT be invoked until after the current - // tick; done() looks in Leaflet's tile cache for the current tile, and - // since it's still being constructed, it won't be found. - - - canvasTiles.createTile = function (tilePoint, done) { - var zoom = tilePoint.z; - - var canvas = _leaflet2["default"].DomUtil.create("canvas"); - - var error; // setup tile width and height according to the options - - var size = this.getTileSize(); - canvas.width = size.x; - canvas.height = size.y; - getImageData(function (imgData, w, h, mipmapper) { - try { - // The Context2D we'll being drawing onto. It's always 256x256. - var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into - // x/y tile coordinates. This is essentially doing a spherical mercator - // projection, then multiplying by 2^zoom. - - var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); - var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. - - var extent = { - x: bottomRight.x - topLeft.x, - y: bottomRight.y - topLeft.y - }; // Short circuit if tile is totally disjoint from image. - - if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; - if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. - // If the linear resolution (in either direction) of the image is less than 256px - // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in - // scaling. - - var imgRes = { - x: w / extent.x, - y: h / extent.y - }; // We can do the actual drawing in one of three ways: - // - Call drawImage(). This is easy and fast, and results in smooth - // interpolation (bilinear?). This is what we want when we are - // reducing the image from its native size. - // - Call drawImage() with imageSmoothingEnabled=false. This is easy - // and fast and gives us nearest-neighbor interpolation, which is what - // we want when enlarging the image. However, it's unsupported on many - // browsers (including QtWebkit). - // - Do a manual nearest-neighbor interpolation. This is what we'll fall - // back to when enlarging, and imageSmoothingEnabled isn't supported. - // In theory it's slower, but still pretty fast on my machine, and the - // results look the same AFAICT. - // Is imageSmoothingEnabled supported? If so, we can let canvas do - // nearest-neighbor interpolation for us. - - var smoothingProperty = getCanvasSmoothingProperty(ctx); - - if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { - // Use built-in scaling - // Turn off anti-aliasing if necessary - if (smoothingProperty) { - ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; - } // Don't necessarily draw with the full-size image; if we're - // downscaling, use the mipmapper to get a pre-downscaled image - // (see comments on Mipmapper class for why this matters). - - - mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { - // It's possible that the image will go off the edge of the canvas-- - // that's OK, the canvas should clip appropriately. - ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert - // to rel pixel coords - (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just - // convert from size in tile coords straight to pixels - extent.x * 256, extent.y * 256); - }); - } else { - // Use manual nearest-neighbor interpolation - // Calculate the source image pixel coordinates that correspond with - // the top-left and bottom-right of this tile. (If the source image - // only partially overlaps the tile, we use max/min to limit the - // sourceStart/End to only reflect the overlapping portion.) - var sourceStart = { - x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), - y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) - }; - var sourceEnd = { - x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), - y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) - }; // The size, in dest pixels, that each source pixel should occupy. - // This might be greater or less than 1 (e.g. if x and y resolution - // are very different). - - var pixelSize = { - x: 256 / imgRes.x, - y: 256 / imgRes.y - }; // For each pixel in the source image that overlaps the tile... - - for (var row = sourceStart.y; row < sourceEnd.y; row++) { - for (var col = sourceStart.x; col < sourceEnd.x; col++) { - // ...extract the pixel data... - var i = (row * w + col) * 4; - var r = imgData[i]; - var g = imgData[i + 1]; - var b = imgData[i + 2]; - var a = imgData[i + 3]; - ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image - // where it should be drawn... - - var pixelPos = { - x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, - y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 - }; // ...and draw a rectangle there. - - ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from - // causing overlap between this rect and its neighbors. The - // minuend is the location of the next pixel, while the - // subtrahend is the position of the current pixel (to turn an - // absolute coordinate to a width/height). Yes, I had to look - // up minuend and subtrahend. - Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); - } - } - } - } catch (e) { - error = e; - } finally { - done(error, canvas); - } - }); - return canvas; - }; - - this.layerManager.addLayer(canvasTiles, "image", layerId, group); -}; - -methods.removeImage = function (layerId) { - this.layerManager.removeLayer("image", layerId); -}; - -methods.clearImages = function () { - this.layerManager.clearLayers("image"); -}; - -methods.addMeasure = function (options) { - // if a measureControl already exists, then remove it and - // replace with a new one - methods.removeMeasure.call(this); - this.measureControl = _leaflet2["default"].control.measure(options); - this.addControl(this.measureControl); -}; - -methods.removeMeasure = function () { - if (this.measureControl) { - this.removeControl(this.measureControl); - this.measureControl = null; - } -}; - -methods.addSelect = function (ctGroup) { - var _this8 = this; - - methods.removeSelect.call(this); - this._selectButton = _leaflet2["default"].easyButton({ - states: [{ - stateName: "select-inactive", - icon: "ion-qr-scanner", - title: "Make a selection", - onClick: function onClick(btn, map) { - btn.state("select-active"); - _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); - - if (ctGroup) { - var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); - selectionHandle.on("change", function (e) { - if (e.sender !== selectionHandle) { - if (_this8._locationFilter) { - _this8._locationFilter.disable(); - - btn.state("select-inactive"); - } - } - }); - - var handler = function handler(e) { - _this8.layerManager.brush(_this8._locationFilter.getBounds(), { - sender: selectionHandle - }); - }; - - _this8._locationFilter.on("enabled", handler); - - _this8._locationFilter.on("change", handler); - - _this8._locationFilter.on("disabled", function () { - selectionHandle.close(); - _this8._locationFilter = null; - }); - } - - _this8._locationFilter.addTo(map); - } - }, { - stateName: "select-active", - icon: "ion-close-round", - title: "Dismiss selection", - onClick: function onClick(btn, map) { - btn.state("select-inactive"); - - _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections - - - _this8.layerManager.unbrush(); - } - }] - }); - - this._selectButton.addTo(this); -}; - -methods.removeSelect = function () { - if (this._locationFilter) { - this._locationFilter.disable(); - } - - if (this._selectButton) { - this.removeControl(this._selectButton); - this._selectButton = null; - } -}; - -methods.createMapPane = function (name, zIndex) { - this.createPane(name); - this.getPane(name).style.zIndex = zIndex; -}; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// This class simulates a mipmap, which shrinks images by powers of two. This -// stepwise reduction results in "pixel-perfect downscaling" (where every -// pixel of the original image has some contribution to the downscaled image) -// as opposed to a single-step downscaling which will discard a lot of data -// (and with sparse images at small scales can give very surprising results). -var Mipmapper = /*#__PURE__*/function () { - function Mipmapper(img) { - _classCallCheck(this, Mipmapper); - - this._layers = [img]; - } // The various functions on this class take a callback function BUT MAY OR MAY - // NOT actually behave asynchronously. - - - _createClass(Mipmapper, [{ - key: "getBySize", - value: function getBySize(desiredWidth, desiredHeight, callback) { - var _this = this; - - var i = 0; - var lastImg = this._layers[0]; - - var testNext = function testNext() { - _this.getByIndex(i, function (img) { - // If current image is invalid (i.e. too small to be rendered) or - // it's smaller than what we wanted, return the last known good image. - if (!img || img.width < desiredWidth || img.height < desiredHeight) { - callback(lastImg); - return; - } else { - lastImg = img; - i++; - testNext(); - return; - } - }); - }; - - testNext(); - } - }, { - key: "getByIndex", - value: function getByIndex(i, callback) { - var _this2 = this; - - if (this._layers[i]) { - callback(this._layers[i]); - return; - } - - this.getByIndex(i - 1, function (prevImg) { - if (!prevImg) { - // prevImg could not be calculated (too small, possibly) - callback(null); - return; - } - - if (prevImg.width < 2 || prevImg.height < 2) { - // Can't reduce this image any further - callback(null); - return; - } // If reduce ever becomes truly asynchronous, we should stuff a promise or - // something into this._layers[i] before calling this.reduce(), to prevent - // redundant reduce operations from happening. - - - _this2.reduce(prevImg, function (reducedImg) { - _this2._layers[i] = reducedImg; - callback(reducedImg); - return; - }); - }); - } - }, { - key: "reduce", - value: function reduce(img, callback) { - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = Math.ceil(img.width / 2); - imgDataCanvas.height = Math.ceil(img.height / 2); - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - - try { - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); - callback(imgDataCanvas); - } finally { - document.body.removeChild(imgDataCanvas); - } - } - }]); - - return Mipmapper; -}(); - -exports["default"] = Mipmapper; - - -},{}],17:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.log = log; -exports.recycle = recycle; -exports.asArray = asArray; - -function log(message) { - /* eslint-disable no-console */ - if (console && console.log) console.log(message); - /* eslint-enable no-console */ -} - -function recycle(values, length, inPlace) { - if (length === 0 && !inPlace) return []; - - if (!(values instanceof Array)) { - if (inPlace) { - throw new Error("Can't do in-place recycling of a non-Array value"); - } - - values = [values]; - } - - if (typeof length === "undefined") length = values.length; - var dest = inPlace ? values : []; - var origLength = values.length; - - while (dest.length < length) { - dest.push(values[dest.length % origLength]); - } - - if (dest.length > length) { - dest.splice(length, dest.length - length); - } - - return dest; -} - -function asArray(value) { - if (value instanceof Array) return value;else return [value]; -} - - -},{}]},{},[13]); diff --git a/docs/articles/Applications_files/leaflet-binding-2.2.2/leaflet.js b/docs/articles/Applications_files/leaflet-binding-2.2.2/leaflet.js deleted file mode 100644 index 79dbe71..0000000 --- a/docs/articles/Applications_files/leaflet-binding-2.2.2/leaflet.js +++ /dev/null @@ -1,2787 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); - var colIndex = -1; - - if (typeof col === "undefined") { - var rowData = {}; - this.colnames.forEach(function (name, i) { - rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; - }); - return rowData; - } else if (typeof col === "string") { - colIndex = this._colIndex(col); - } else if (typeof col === "number") { - colIndex = col; - } - - if (colIndex < 0 || colIndex > this.columns.length) { - if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); - } - - return this.columns[colIndex][row % this.columns[colIndex].length]; - } - }, { - key: "nrow", - value: function nrow() { - return this.effectiveLength; - } - }]); - - return DataFrame; -}(); - -exports["default"] = DataFrame; - - -},{"./util":17}],5:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// In RMarkdown's self-contained mode, we don't have a way to carry around the -// images that Leaflet needs but doesn't load into the page. Instead, we'll use -// the unpkg CDN. -if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { - _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; -} - - -},{"./global/leaflet":10}],6:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// add texxtsize, textOnly, and style -_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; -_leaflet2["default"].Tooltip.prototype.options.textOnly = false; -_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. - -var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; - -_leaflet2["default"].Tooltip.prototype._initLayout = function () { - initLayoutOriginal.call(this); - this._container.style.fontSize = this.options.textsize; - - if (this.options.textOnly) { - _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); - } - - if (this.options.style) { - for (var property in this.options.style) { - this._container.style[property] = this.options.style[property]; - } - } -}; - - -},{"./global/leaflet":10}],7:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var protocolRegex = /^\/\//; - -var upgrade_protocol = function upgrade_protocol(urlTemplate) { - if (protocolRegex.test(urlTemplate)) { - if (window.location.protocol === "file:") { - // if in a local file, support http - // http should auto upgrade if necessary - urlTemplate = "http:" + urlTemplate; - } - } - - return urlTemplate; -}; - -var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; - -_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerInitialize.call(this, urlTemplate, options); -}; - -var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; - -_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerWMSInitialize.call(this, urlTemplate, options); -}; - - -},{"./global/leaflet":10}],8:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.HTMLWidgets; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],9:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.jQuery; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],11:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L.Proj; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.Shiny; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],13:[function(require,module,exports){ -"use strict"; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _controlStore = require("./control-store"); - -var _controlStore2 = _interopRequireDefault(_controlStore); - -var _layerManager = require("./layer-manager"); - -var _layerManager2 = _interopRequireDefault(_layerManager); - -var _methods = require("./methods"); - -var _methods2 = _interopRequireDefault(_methods); - -require("./fixup-default-icon"); - -require("./fixup-default-tooltip"); - -require("./fixup-url-protocol"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -window.LeafletWidget = {}; -window.LeafletWidget.utils = {}; - -var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); - -window.LeafletWidget.DataFrame = _dataframe2["default"]; -window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; -window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. - -function updateBounds(map) { - var id = map.getContainer().id; - var bounds = map.getBounds(); - - _shiny2["default"].onInputChange(id + "_bounds", { - north: bounds.getNorthEast().lat, - east: bounds.getNorthEast().lng, - south: bounds.getSouthWest().lat, - west: bounds.getSouthWest().lng - }); - - _shiny2["default"].onInputChange(id + "_center", { - lng: map.getCenter().lng, - lat: map.getCenter().lat - }); - - _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); -} - -function preventUnintendedZoomOnScroll(map) { - // Prevent unwanted scroll capturing. Similar in purpose to - // https://github.com/CliffCloud/Leaflet.Sleep but with a - // different set of heuristics. - // The basic idea is that when a mousewheel/DOMMouseScroll - // event is seen, we disable scroll wheel zooming until the - // user moves their mouse cursor or clicks on the map. This - // is slightly trickier than just listening for mousemove, - // because mousemove is fired when the page is scrolled, - // even if the user did not physically move the mouse. We - // handle this by examining the mousemove event's screenX - // and screenY properties; if they change, we know it's a - // "true" move. - // lastScreen can never be null, but its x and y can. - var lastScreen = { - x: null, - y: null - }; - (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { - // Disable zooming (until the mouse moves or click) - map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. - - lastScreen = { - x: e.originalEvent.screenX, - y: e.originalEvent.screenY - }; - }); - (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { - // Did the mouse really move? - if (map.options.scrollWheelZoom) { - if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { - // It really moved. Enable zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - } - }); - (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { - // Clicking always enables zooming. - if (map.options.scrollWheelZoom) { - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - }); -} - -_htmlwidgets2["default"].widget({ - name: "leaflet", - type: "output", - factory: function factory(el, width, height) { - var map = null; - return { - // we need to store our map in our returned object. - getMap: function getMap() { - return map; - }, - renderValue: function renderValue(data) { - // Create an appropriate CRS Object if specified - if (data && data.options && data.options.crs) { - data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); - } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 - - - if (map) { - map.remove(); - - map = function () { - return; - }(); // undefine map - - } - - if (data.options.mapFactory && typeof data.options.mapFactory === "function") { - map = data.options.mapFactory(el, data.options); - } else { - map = _leaflet2["default"].map(el, data.options); - } - - preventUnintendedZoomOnScroll(map); // Store some state in the map object - - map.leafletr = { - // Has the map ever rendered successfully? - hasRendered: false, - // Data to be rendered when resize is called with area != 0 - pendingRenderData: null - }; // Check if the map is rendered statically (no output binding) - - if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { - map.id = el.id; // Store the map on the element so we can find it later by ID - - (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app - - map.on("click", function (e) { - _shiny2["default"].onInputChange(map.id + "_click", { - lat: e.latlng.lat, - lng: e.latlng.lng, - ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed - - }); - }); - var groupTimerId = null; - map.on("moveend", function (e) { - updateBounds(e.target); - }).on("layeradd layerremove", function (e) { - // If the layer that's coming or going is a group we created, tell - // the server. - if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { - // But to avoid chattiness, coalesce events - if (groupTimerId) { - clearTimeout(groupTimerId); - groupTimerId = null; - } - - groupTimerId = setTimeout(function () { - groupTimerId = null; - - _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); - }, 100); - } - }); - } - - this.doRenderValue(data, map); - }, - doRenderValue: function doRenderValue(data, map) { - // Leaflet does not behave well when you set up a bunch of layers when - // the map is not visible (width/height == 0). Popups get misaligned - // relative to their owning markers, and the fitBounds calculations - // are off. Therefore we wait until the map is actually showing to - // render the value (we rely on the resize() callback being invoked - // at the appropriate time). - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - map.leafletr.pendingRenderData = data; - return; - } - - map.leafletr.pendingRenderData = null; // Merge data options into defaults - - var options = _jquery2["default"].extend({ - zoomToLimits: "always" - }, data.options); - - if (!map.layerManager) { - map.controls = new _controlStore2["default"](map); - map.layerManager = new _layerManager2["default"](map); - } else { - map.controls.clear(); - map.layerManager.clear(); - } - - var explicitView = false; - - if (data.setView) { - explicitView = true; - map.setView.apply(map, data.setView); - } - - if (data.fitBounds) { - explicitView = true; - methods.fitBounds.apply(map, data.fitBounds); - } - - if (data.flyTo) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - map.flyTo.apply(map, data.flyTo); - } - - if (data.flyToBounds) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - methods.flyToBounds.apply(map, data.flyToBounds); - } - - if (data.options.center) { - explicitView = true; - } // Returns true if the zoomToLimits option says that the map should be - // zoomed to map elements. - - - function needsZoom() { - return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; - } - - if (!explicitView && needsZoom() && !map.getZoom()) { - if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { - // Use the natural limits of what's being drawn on the map - // If the size of the bounding box is 0, leaflet gets all weird - var pad = 0.006; - - if (data.limits.lat[0] === data.limits.lat[1]) { - data.limits.lat[0] = data.limits.lat[0] - pad; - data.limits.lat[1] = data.limits.lat[1] + pad; - } - - if (data.limits.lng[0] === data.limits.lng[1]) { - data.limits.lng[0] = data.limits.lng[0] - pad; - data.limits.lng[1] = data.limits.lng[1] + pad; - } - - map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); - } else { - map.fitWorld(); - } - } - - for (var i = 0; data.calls && i < data.calls.length; i++) { - var call = data.calls[i]; - if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); - } - - map.leafletr.hasRendered = true; - - if (_htmlwidgets2["default"].shinyMode) { - setTimeout(function () { - updateBounds(map); - }, 1); - } - }, - resize: function resize(width, height) { - if (map) { - map.invalidateSize(); - - if (map.leafletr.pendingRenderData) { - this.doRenderValue(map.leafletr.pendingRenderData, map); - } - } - } - }; - } -}); - -if (_htmlwidgets2["default"].shinyMode) { - _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { - var id = data.id; - var el = document.getElementById(id); - var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; - - if (!map) { - (0, _util.log)("Couldn't find map with id " + id); - return; - } // If the map has not rendered, stash the proposed `leafletProxy()` calls - // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. - // This is necessary if the map has not been rendered. - // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. - - - if (!map.leafletr.hasRendered) { - map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); - return; - } - - for (var i = 0; i < data.calls.length; i++) { - var call = data.calls[i]; - var args = call.args; - - for (var _i = 0; _i < call.evals.length; _i++) { - window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); - } - - if (call.dependencies) { - _shiny2["default"].renderDependencies(call.dependencies); - } - - if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); - } - }); -} - - -},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = undefined; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _util = require("./util"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var LayerManager = /*#__PURE__*/function () { - function LayerManager(map) { - _classCallCheck(this, LayerManager); - - this._map = map; // BEGIN layer indices - // {: {: layer}} - - this._byGroup = {}; // {: {: layer}} - - this._byCategory = {}; // {: layer} - - this._byLayerId = {}; // {: { - // "group": , - // "layerId": , - // "category": , - // "container": - // } - // } - - this._byStamp = {}; // {: {: [, , ...], ...}} - - this._byCrosstalkGroup = {}; // END layer indices - // {: L.layerGroup} - - this._categoryContainers = {}; // {: L.layerGroup} - - this._groupContainers = {}; - } - - _createClass(LayerManager, [{ - key: "addLayer", - value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { - var _this = this; - - // Was a group provided? - var hasId = typeof layerId === "string"; - var grouped = typeof group === "string"; - var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. - // We may overwrite this let before using it (i.e. if a group is assigned). - // This one liner creates the _categoryContainers[category] entry if it - // doesn't already exist. - - var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); - - var oldLayer = null; - - if (hasId) { - // First, remove any layer with the same category and layerId - var prefixedLayerId = this._layerIdKey(category, layerId); - - oldLayer = this._byLayerId[prefixedLayerId]; - - if (oldLayer) { - this._removeLayer(oldLayer); - } // Update layerId index - - - this._byLayerId[prefixedLayerId] = layer; - } // Update group index - - - if (grouped) { - this._byGroup[group] = this._byGroup[group] || {}; - this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer - // group; instead, use the group's layer group. - // This one liner creates the _groupContainers[group] entry if it doesn't - // already exist. - - container = this.getLayerGroup(group, true); - } // Update category index - - - this._byCategory[category] = this._byCategory[category] || {}; - this._byCategory[category][stamp] = layer; // Update stamp index - - var layerInfo = this._byStamp[stamp] = { - layer: layer, - group: group, - ctGroup: ctGroup, - ctKey: ctKey, - layerId: layerId, - category: category, - container: container, - hidden: false - }; // Update crosstalk group index - - if (ctGroup) { - if (layer.setStyle) { - // Need to save this info so we know what to set opacity to later - layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; - layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; - } - - var ctg = this._byCrosstalkGroup[ctGroup]; - - if (!ctg) { - ctg = this._byCrosstalkGroup[ctGroup] = {}; - var crosstalk = global.crosstalk; - - var handleFilter = function handleFilter(e) { - if (!e.value) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo = _this._byStamp[ctg[key]]; - - _this._setVisibility(_layerInfo, true); - } - } else { - var selectedKeys = {}; - - for (var _i = 0; _i < e.value.length; _i++) { - selectedKeys[e.value[_i]] = true; - } - - var _groupKeys = Object.keys(ctg); - - for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { - var _key = _groupKeys[_i2]; - var _layerInfo2 = _this._byStamp[ctg[_key]]; - - _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); - } - } - }; - - var filterHandle = new crosstalk.FilterHandle(ctGroup); - filterHandle.on("change", handleFilter); - - var handleSelection = function handleSelection(e) { - if (!e.value || !e.value.length) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo3 = _this._byStamp[ctg[key]]; - - _this._setOpacity(_layerInfo3, 1.0); - } - } else { - var selectedKeys = {}; - - for (var _i3 = 0; _i3 < e.value.length; _i3++) { - selectedKeys[e.value[_i3]] = true; - } - - var _groupKeys2 = Object.keys(ctg); - - for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { - var _key2 = _groupKeys2[_i4]; - var _layerInfo4 = _this._byStamp[ctg[_key2]]; - - _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); - } - } - }; - - var selHandle = new crosstalk.SelectionHandle(ctGroup); - selHandle.on("change", handleSelection); - setTimeout(function () { - handleFilter({ - value: filterHandle.filteredKeys - }); - handleSelection({ - value: selHandle.value - }); - }, 100); - } - - if (!ctg[ctKey]) ctg[ctKey] = []; - ctg[ctKey].push(stamp); - } // Add to container - - - if (!layerInfo.hidden) container.addLayer(layer); - return oldLayer; - } - }, { - key: "brush", - value: function brush(bounds, extraInfo) { - var _this2 = this; - - /* eslint-disable no-console */ - // For each Crosstalk group... - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - var ctg = _this2._byCrosstalkGroup[ctGroupName]; - var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple - // layers)... - - Object.keys(ctg).forEach(function (ctKey) { - // ...and for each layer... - ctg[ctKey].forEach(function (stamp) { - var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... - - if (layerInfo.layer.getLatLng) { - // ... and it's inside the selection bounds... - // TODO: Use pixel containment, not lat/lng containment - if (bounds.contains(layerInfo.layer.getLatLng())) { - // ...add the key to the selection. - selection.push(ctKey); - } - } - }); - }); - new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); - }); - } - }, { - key: "unbrush", - value: function unbrush(extraInfo) { - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); - }); - } - }, { - key: "_setVisibility", - value: function _setVisibility(layerInfo, visible) { - if (layerInfo.hidden ^ visible) { - return; - } else if (visible) { - layerInfo.container.addLayer(layerInfo.layer); - layerInfo.hidden = false; - } else { - layerInfo.container.removeLayer(layerInfo.layer); - layerInfo.hidden = true; - } - } - }, { - key: "_setOpacity", - value: function _setOpacity(layerInfo, opacity) { - if (layerInfo.layer.setOpacity) { - layerInfo.layer.setOpacity(opacity); - } else if (layerInfo.layer.setStyle) { - layerInfo.layer.setStyle({ - opacity: opacity * layerInfo.layer.options.origOpacity, - fillOpacity: opacity * layerInfo.layer.options.origFillOpacity - }); - } - } - }, { - key: "getLayer", - value: function getLayer(category, layerId) { - return this._byLayerId[this._layerIdKey(category, layerId)]; - } - }, { - key: "removeLayer", - value: function removeLayer(category, layerIds) { - var _this3 = this; - - // Find layer info - _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { - var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; - - if (layer) { - _this3._removeLayer(layer); - } - }); - } - }, { - key: "clearLayers", - value: function clearLayers(category) { - var _this4 = this; - - // Find all layers in _byCategory[category] - var catTable = this._byCategory[category]; - - if (!catTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(catTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this4._removeLayer(stamp); - }); - } - }, { - key: "getLayerGroup", - value: function getLayerGroup(group, ensureExists) { - var g = this._groupContainers[group]; - - if (ensureExists && !g) { - this._byGroup[group] = this._byGroup[group] || {}; - g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); - g.groupname = group; - g.addTo(this._map); - } - - return g; - } - }, { - key: "getGroupNameFromLayerGroup", - value: function getGroupNameFromLayerGroup(layerGroup) { - return layerGroup.groupname; - } - }, { - key: "getVisibleGroups", - value: function getVisibleGroups() { - var _this5 = this; - - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - if (_this5._map.hasLayer(v)) { - result.push(k); - } - }); - - return result; - } - }, { - key: "getAllGroupNames", - value: function getAllGroupNames() { - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - result.push(k); - }); - - return result; - } - }, { - key: "clearGroup", - value: function clearGroup(group) { - var _this6 = this; - - // Find all layers in _byGroup[group] - var groupTable = this._byGroup[group]; - - if (!groupTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(groupTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this6._removeLayer(stamp); - }); - } - }, { - key: "clear", - value: function clear() { - function clearLayerGroup(key, layerGroup) { - layerGroup.clearLayers(); - } // Clear all indices and layerGroups - - - this._byGroup = {}; - this._byCategory = {}; - this._byLayerId = {}; - this._byStamp = {}; - this._byCrosstalkGroup = {}; - - _jquery2["default"].each(this._categoryContainers, clearLayerGroup); - - this._categoryContainers = {}; - - _jquery2["default"].each(this._groupContainers, clearLayerGroup); - - this._groupContainers = {}; - } - }, { - key: "_removeLayer", - value: function _removeLayer(layer) { - var stamp; - - if (typeof layer === "string") { - stamp = layer; - } else { - stamp = _leaflet2["default"].Util.stamp(layer); - } - - var layerInfo = this._byStamp[stamp]; - - if (!layerInfo) { - return false; - } - - layerInfo.container.removeLayer(stamp); - - if (typeof layerInfo.group === "string") { - delete this._byGroup[layerInfo.group][stamp]; - } - - if (typeof layerInfo.layerId === "string") { - delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; - } - - delete this._byCategory[layerInfo.category][stamp]; - delete this._byStamp[stamp]; - - if (layerInfo.ctGroup) { - var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; - var layersForKey = ctGroup[layerInfo.ctKey]; - var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; - - if (idx >= 0) { - if (layersForKey.length === 1) { - delete ctGroup[layerInfo.ctKey]; - } else { - layersForKey.splice(idx, 1); - } - } - } - } - }, { - key: "_layerIdKey", - value: function _layerIdKey(category, layerId) { - return category + "\n" + layerId; - } - }]); - - return LayerManager; -}(); - -exports["default"] = LayerManager; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -var _mipmapper = require("./mipmapper"); - -var _mipmapper2 = _interopRequireDefault(_mipmapper); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var methods = {}; -exports["default"] = methods; - -function mouseHandler(mapId, layerId, group, eventName, extraInfo) { - return function (e) { - if (!_htmlwidgets2["default"].shinyMode) return; - var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; - - if (latLng) { - // retrieve only lat, lon values to remove prototype - // and extra parameters added by 3rd party modules - // these objects are for json serialization, not javascript - var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape - - - latLng = { - lat: latLngVal.lat, - lng: latLngVal.lng - }; - } - - var eventInfo = _jquery2["default"].extend({ - id: layerId, - ".nonce": Math.random() // force reactivity - - }, group !== null ? { - group: group - } : null, latLng, extraInfo); - - _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); - }; -} - -methods.mouseHandler = mouseHandler; - -methods.clearGroup = function (group) { - var _this = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { - _this.layerManager.clearGroup(v); - }); -}; - -methods.setView = function (center, zoom, options) { - this.setView(center, zoom, options); -}; - -methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { - this.fitBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.flyTo = function (center, zoom, options) { - this.flyTo(center, zoom, options); -}; - -methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { - this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { - this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); -}; - -methods.addPopups = function (lat, lng, popup, layerId, group, options) { - var _this2 = this; - - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); - - var _loop = function _loop(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); - - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(popup, "popup", thisId, thisGroup); - }).call(_this2); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop(i); - } -}; - -methods.removePopup = function (layerId) { - this.layerManager.removeLayer("popup", layerId); -}; - -methods.clearPopups = function () { - this.layerManager.clearLayers("popup"); -}; - -methods.addTiles = function (urlTemplate, layerId, group, options) { - this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); -}; - -methods.removeTiles = function (layerId) { - this.layerManager.removeLayer("tile", layerId); -}; - -methods.clearTiles = function () { - this.layerManager.clearLayers("tile"); -}; - -methods.addWMSTiles = function (baseUrl, layerId, group, options) { - if (options && options.crs) { - options.crs = (0, _crs_utils.getCRS)(options.crs); - } - - this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); -}; // Given: -// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} -// returns: -// ["a", "b", "a", "c"] - - -function unpackStrings(iconset) { - if (!iconset) { - return iconset; - } - - if (typeof iconset.index === "undefined") { - return iconset; - } - - iconset.data = (0, _util.asArray)(iconset.data); - iconset.index = (0, _util.asArray)(iconset.index); - return _jquery2["default"].map(iconset.index, function (e, i) { - return iconset.data[e]; - }); -} - -function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { - (function () { - var _this3 = this; - - var clusterGroup = this.layerManager.getLayer("cluster", clusterId), - cluster = clusterOptions !== null; - - if (cluster && !clusterGroup) { - clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); - - if (clusterOptions.freezeAtZoom) { - var freezeAtZoom = clusterOptions.freezeAtZoom; - delete clusterOptions.freezeAtZoom; - clusterGroup.freezeAtZoom(freezeAtZoom); - } - - clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); - } - - var extraInfo = cluster ? { - clusterId: clusterId - } : {}; - - var _loop2 = function _loop2(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var marker = markerFunc(df, i); - var thisId = df.get(i, "layerId"); - var thisGroup = cluster ? null : df.get(i, "group"); - - if (cluster) { - clusterGroup.clusterLayerStore.add(marker, thisId); - } else { - this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - } - - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - marker.bindPopup(popup, popupOptions); - } else { - marker.bindPopup(popup); - } - } - - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - if (labelOptions.permanent) { - marker.bindTooltip(label, labelOptions).openTooltip(); - } else { - marker.bindTooltip(label, labelOptions); - } - } else { - marker.bindTooltip(label); - } - } - - marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); - marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); - marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); - marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); - }).call(_this3); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop2(i); - } - - if (cluster) { - this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); - } - }).call(map); -} - -methods.addGenericMarkers = addMarkers; - -methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // Unpack icons - icon.iconUrl = unpackStrings(icon.iconUrl); - icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); - icon.shadowUrl = unpackStrings(icon.shadowUrl); - icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts.iconUrl) { - return new _leaflet2["default"].Icon.Default(); - } // Composite options (like points or sizes) are passed from R with each - // individual component as its own option. We need to combine them now - // into their composite form. - - - if (opts.iconWidth) { - opts.iconSize = [opts.iconWidth, opts.iconHeight]; - } - - if (opts.shadowWidth) { - opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; - } - - if (opts.iconAnchorX) { - opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; - } - - if (opts.shadowAnchorX) { - opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; - } - - if (opts.popupAnchorX) { - opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; - } - - return new _leaflet2["default"].Icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts) { - return new _leaflet2["default"].AwesomeMarkers.icon(); - } - - if (opts.squareMarker) { - opts.className = "awesome-marker awesome-marker-square"; - } - - return new _leaflet2["default"].AwesomeMarkers.icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -function addLayers(map, category, df, layerFunc) { - var _loop3 = function _loop3(i) { - (function () { - var layer = layerFunc(df, i); - - if (!_jquery2["default"].isEmptyObject(layer)) { - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - - if (layer.bindPopup) { - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - layer.bindPopup(popup, popupOptions); - } else { - layer.bindPopup(popup); - } - } - } - - if (layer.bindTooltip) { - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - layer.bindTooltip(label, labelOptions); - } else { - layer.bindTooltip(label); - } - } - } - - layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); - layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); - layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); - var highlightStyle = df.get(i, "highlightOptions"); - - if (!_jquery2["default"].isEmptyObject(highlightStyle)) { - var defaultStyle = {}; - - _jquery2["default"].each(highlightStyle, function (k, v) { - if (k != "bringToFront" && k != "sendToBack") { - if (df.get(i, k)) { - defaultStyle[k] = df.get(i, k); - } - } - }); - - layer.on("mouseover", function (e) { - this.setStyle(highlightStyle); - - if (highlightStyle.bringToFront) { - this.bringToFront(); - } - }); - layer.on("mouseout", function (e) { - this.setStyle(defaultStyle); - - if (highlightStyle.sendToBack) { - this.bringToBack(); - } - }); - } - } - }).call(map); - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop3(i); - } -} - -methods.addGenericLayers = addLayers; - -methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { - return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); - } else { - return null; - } - }); - } -}; - -methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); - }); - } -}; -/* - * @param lat Array of arrays of latitude coordinates for polylines - * @param lng Array of arrays of longitude coordinates for polylines - */ - - -methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - var shapes = df.get(i, "shapes"); - shapes = shapes.map(function (shape) { - return _htmlwidgets2["default"].dataframeToD3(shape[0]); - }); - - if (shapes.length > 1) { - return _leaflet2["default"].polyline(shapes, df.get(i)); - } else { - return _leaflet2["default"].polyline(shapes[0], df.get(i)); - } - }); - } -}; - -methods.removeMarker = function (layerId) { - this.layerManager.removeLayer("marker", layerId); -}; - -methods.clearMarkers = function () { - this.layerManager.clearLayers("marker"); -}; - -methods.removeMarkerCluster = function (layerId) { - this.layerManager.removeLayer("cluster", layerId); -}; - -methods.removeMarkerFromCluster = function (layerId, clusterId) { - var cluster = this.layerManager.getLayer("cluster", clusterId); - if (!cluster) return; - cluster.clusterLayerStore.remove(layerId); -}; - -methods.clearMarkerClusters = function () { - this.layerManager.clearLayers("cluster"); -}; - -methods.removeShape = function (layerId) { - this.layerManager.removeLayer("shape", layerId); -}; - -methods.clearShapes = function () { - this.layerManager.clearLayers("shape"); -}; - -methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { - return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); - } else { - return null; - } - }); -}; -/* - * @param lat Array of arrays of latitude coordinates for polygons - * @param lng Array of arrays of longitude coordinates for polygons - */ - - -methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - // This code used to use L.multiPolygon, but that caused - // double-click on a multipolygon to fail to zoom in on the - // map. Surprisingly, putting all the rings in a single - // polygon seems to still work; complicated multipolygons - // are still rendered correctly. - var shapes = df.get(i, "shapes").map(function (polygon) { - return polygon.map(_htmlwidgets2["default"].dataframeToD3); - }).reduce(function (acc, val) { - return acc.concat(val); - }, []); - return _leaflet2["default"].polygon(shapes, df.get(i)); - }); - } -}; - -methods.addGeoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(data, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties ? feature.properties.popup : null; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); - } - }); - - this.layerManager.addLayer(gjlayer, "geojson", layerId, group); -}; - -methods.removeGeoJSON = function (layerId) { - this.layerManager.removeLayer("geojson", layerId); -}; - -methods.clearGeoJSON = function () { - this.layerManager.clearLayers("geojson"); -}; - -methods.addTopoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(null, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties.popup; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); - } - }); - - global.omnivore.topojson.parse(data, null, gjlayer); - this.layerManager.addLayer(gjlayer, "topojson", layerId, group); -}; - -methods.removeTopoJSON = function (layerId) { - this.layerManager.removeLayer("topojson", layerId); -}; - -methods.clearTopoJSON = function () { - this.layerManager.clearLayers("topojson"); -}; - -methods.addControl = function (html, position, layerId, classes) { - function onAdd(map) { - var div = _leaflet2["default"].DomUtil.create("div", classes); - - if (typeof layerId !== "undefined" && layerId !== null) { - div.setAttribute("id", layerId); - } - - this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to - // not be, when a static leaflet widget is included as part of the shiny - // UI directly (not through leafletOutput or uiOutput). In this case we - // don't do the normal Shiny stuff as that will all happen when Shiny - // itself loads and binds the entire doc. - - if (window.Shiny && _shiny2["default"].initializeInputs) { - _shiny2["default"].renderHtml(html, this._div); - - _shiny2["default"].initializeInputs(this._div); - - _shiny2["default"].bindAll(this._div); - } else { - this._div.innerHTML = html; - } - - return this._div; - } - - function onRemove(map) { - if (window.Shiny && _shiny2["default"].unbindAll) { - _shiny2["default"].unbindAll(this._div); - } - } - - var Control = _leaflet2["default"].Control.extend({ - options: { - position: position - }, - onAdd: onAdd, - onRemove: onRemove - }); - - this.controls.add(new Control(), layerId, html); -}; - -methods.addCustomControl = function (control, layerId) { - this.controls.add(control, layerId); -}; - -methods.removeControl = function (layerId) { - this.controls.remove(layerId); -}; - -methods.getControl = function (layerId) { - this.controls.get(layerId); -}; - -methods.clearControls = function () { - this.controls.clear(); -}; - -methods.addLegend = function (options) { - var legend = _leaflet2["default"].control({ - position: options.position - }); - - var gradSpan; - - legend.onAdd = function (map) { - var div = _leaflet2["default"].DomUtil.create("div", options.className), - colors = options.colors, - labels = options.labels, - legendHTML = ""; - - if (options.type === "numeric") { - // # Formatting constants. - var singleBinHeight = 20; // The distance between tick marks, in px - - var vMargin = 8; // If 1st tick mark starts at top of gradient, how - // many extra px are needed for the top half of the - // 1st label? (ditto for last tick mark/label) - - var tickWidth = 4; // How wide should tick marks be, in px? - - var labelPadding = 6; // How much distance to reserve for tick mark? - // (Must be >= tickWidth) - // # Derived formatting parameters. - // What's the height of a single bin, in percentage (of gradient height)? - // It might not just be 1/(n-1), if the gradient extends past the tick - // marks (which can be the case for pretty cut points). - - var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? - - var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top - // of the gradient? - - var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; - gradSpan = (0, _jquery2["default"])("").css({ - "background": "linear-gradient(" + colors + ")", - "opacity": options.opacity, - "height": totalHeight + "px", - "width": "18px", - "display": "block", - "margin-top": vMargin + "px" - }); - var leftDiv = (0, _jquery2["default"])("
").css("float", "left"), - rightDiv = (0, _jquery2["default"])("
").css("float", "left"); - leftDiv.append(gradSpan); - (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
")); // Have to attach the div to the body at this early point, so that the - // svg text getComputedTextLength() actually works, below. - - document.body.appendChild(div); - var ns = "http://www.w3.org/2000/svg"; - var svg = document.createElementNS(ns, "svg"); - rightDiv.append(svg); - var g = document.createElementNS(ns, "g"); - (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); - svg.appendChild(g); // max label width needed to set width of svg, and right-justify text - - var maxLblWidth = 0; // Create tick marks and labels - - _jquery2["default"].each(labels, function (i, label) { - var y = tickOffset + i * singleBinHeight + 0.5; - var thisLabel = document.createElementNS(ns, "text"); - (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); - g.appendChild(thisLabel); - maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); - var thisTick = document.createElementNS(ns, "line"); - (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); - g.appendChild(thisTick); - }); // Now that we know the max label width, we can right-justify - - - (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for - - (0, _jquery2["default"])(svg).css({ - width: maxLblWidth + labelPadding + "px", - height: totalHeight + vMargin * 2 + "px" - }); - - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - (0, _jquery2["default"])(div).append("
" + options.na_label + "
"); - } - } else { - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - colors.push(options.na_color); - labels.push(options.na_label); - } - - for (var i = 0; i < colors.length; i++) { - legendHTML += " " + labels[i] + "
"; - } - - div.innerHTML = legendHTML; - } - - if (options.title) (0, _jquery2["default"])(div).prepend("
" + options.title + "
"); - return div; - }; - - if (options.group) { - // Auto generate a layerID if not provided - if (!options.layerId) { - options.layerId = _leaflet2["default"].Util.stamp(legend); - } - - var map = this; - map.on("overlayadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("overlayremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - map.on("groupadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("groupremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - } - - this.controls.add(legend, options.layerId); -}; - -methods.addLayersControl = function (baseGroups, overlayGroups, options) { - var _this4 = this; - - // Only allow one layers control at a time - methods.removeLayersControl.call(this); - var firstLayer = true; - var base = {}; - - _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one - - if (_this4.hasLayer(layer)) { - if (firstLayer) { - firstLayer = false; - } else { - _this4.removeLayer(layer); - } - } - } - }); - - var overlay = {}; - - _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - overlay[g] = layer; - } - }); - - this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); - this.addControl(this.currentLayersControl); -}; - -methods.removeLayersControl = function () { - if (this.currentLayersControl) { - this.removeControl(this.currentLayersControl); - this.currentLayersControl = null; - } -}; - -methods.addScaleBar = function (options) { - // Only allow one scale bar at a time - methods.removeScaleBar.call(this); - - var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); - - this.currentScaleBar = scaleBar; -}; - -methods.removeScaleBar = function () { - if (this.currentScaleBar) { - this.currentScaleBar.remove(); - this.currentScaleBar = null; - } -}; - -methods.hideGroup = function (group) { - var _this5 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this5.layerManager.getLayerGroup(g, true); - - if (layer) { - _this5.removeLayer(layer); - } - }); -}; - -methods.showGroup = function (group) { - var _this6 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this6.layerManager.getLayerGroup(g, true); - - if (layer) { - _this6.addLayer(layer); - } - }); -}; - -function setupShowHideGroupsOnZoom(map) { - if (map.leafletr._hasInitializedShowHideGroups) { - return; - } - - map.leafletr._hasInitializedShowHideGroups = true; - - function setVisibility(layer, visible, group) { - if (visible !== map.hasLayer(layer)) { - if (visible) { - map.addLayer(layer); - map.fire("groupadd", { - "name": group, - "layer": layer - }); - } else { - map.removeLayer(layer); - map.fire("groupremove", { - "name": group, - "layer": layer - }); - } - } - } - - function showHideGroupsOnZoom() { - if (!map.layerManager) return; - var zoom = map.getZoom(); - map.layerManager.getAllGroupNames().forEach(function (group) { - var layer = map.layerManager.getLayerGroup(group, false); - - if (layer && typeof layer.zoomLevels !== "undefined") { - setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); - } - }); - } - - map.showHideGroupsOnZoom = showHideGroupsOnZoom; - map.on("zoomend", showHideGroupsOnZoom); -} - -methods.setGroupOptions = function (group, options) { - var _this7 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels - - - if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { - layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); - } - }); - - setupShowHideGroupsOnZoom(this); - this.showHideGroupsOnZoom(); -}; - -methods.addRasterImage = function (uri, bounds, layerId, group, options) { - // uri is a data URI containing an image. We want to paint this image as a - // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. - // We can't simply use ImageOverlay, as it uses bilinear scaling which looks - // awful as you zoom in (and sometimes shifts positions or disappears). - // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. - // First, some helper functions. - // degree2tile converts latitude, longitude, and zoom to x and y tile - // numbers. The tile numbers returned can be non-integral, as there's no - // reason to expect that the lat/lng inputs are exactly on the border of two - // tiles. - // - // We'll use this to convert the bounds we got from the server, into coords - // in tile-space at a given zoom level. Note that once we do the conversion, - // we don't to do any more trigonometry to convert between pixel coordinates - // and tile coordinates; the source image pixel coords, destination canvas - // pixel coords, and tile coords all can be scaled linearly. - function degree2tile(lat, lng, zoom) { - // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames - var latRad = lat * Math.PI / 180; - var n = Math.pow(2, zoom); - var x = (lng + 180) / 360 * n; - var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; - return { - x: x, - y: y - }; - } // Given a range [from,to) and either one or two numbers, returns true if - // there is any overlap between [x,x1) and the range--or if x1 is omitted, - // then returns true if x is within [from,to). - - - function overlap(from, to, x, - /* optional */ - x1) { - if (arguments.length == 3) x1 = x; - return x < to && x1 >= from; - } - - function getCanvasSmoothingProperty(ctx) { - var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; - - for (var i = 0; i < candidates.length; i++) { - if (typeof ctx[candidates[i]] !== "undefined") { - return candidates[i]; - } - } - - return null; - } // Our general strategy is to: - // 1. Load the data URI in an Image() object, so we can get its pixel - // dimensions and the underlying image data. (We could have done this - // by not encoding as PNG at all but just send an array of RGBA values - // from the server, but that would inflate the JSON too much.) - // 2. Create a hidden canvas that we use just to extract the image data - // from the Image (using Context2D.getImageData()). - // 3. Create a TileLayer.Canvas and add it to the map. - // We want to synchronously create and attach the TileLayer.Canvas (so an - // immediate call to clearRasters() will be respected, for example), but - // Image loads its data asynchronously. Fortunately we can resolve this - // by putting TileLayer.Canvas into async mode, which will let us create - // and attach the layer but have it wait until the image is loaded before - // it actually draws anything. - // These are the variables that we will populate once the image is loaded. - - - var imgData = null; // 1d row-major array, four [0-255] integers per pixel - - var imgDataMipMapper = null; - var w = null; // image width in pixels - - var h = null; // image height in pixels - // We'll use this array to store callbacks that need to be invoked once - // imgData, w, and h have been resolved. - - var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data - // is available. - - function getImageData(callback) { - if (imgData != null) { - // Must not invoke the callback immediately; it's too confusing and - // fragile to have a function invoke the callback *either* immediately - // or in the future. Better to be consistent here. - setTimeout(function () { - callback(imgData, w, h, imgDataMipMapper); - }, 0); - } else { - imgDataCallbacks.push(callback); - } - } - - var img = new Image(); - - img.onload = function () { - // Save size - w = img.width; - h = img.height; // Create a dummy canvas to extract the image data - - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = w; - imgDataCanvas.height = h; - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0); // Save the image data. - - imgData = imgDataCtx.getImageData(0, 0, w, h).data; - imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. - - document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. - - for (var i = 0; i < imgDataCallbacks.length; i++) { - imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); - } - - imgDataCallbacks = []; - }; - - img.src = uri; - - var canvasTiles = _leaflet2["default"].gridLayer(Object.assign({}, options, { - detectRetina: true, - async: true - })); // NOTE: The done() function MUST NOT be invoked until after the current - // tick; done() looks in Leaflet's tile cache for the current tile, and - // since it's still being constructed, it won't be found. - - - canvasTiles.createTile = function (tilePoint, done) { - var zoom = tilePoint.z; - - var canvas = _leaflet2["default"].DomUtil.create("canvas"); - - var error; // setup tile width and height according to the options - - var size = this.getTileSize(); - canvas.width = size.x; - canvas.height = size.y; - getImageData(function (imgData, w, h, mipmapper) { - try { - // The Context2D we'll being drawing onto. It's always 256x256. - var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into - // x/y tile coordinates. This is essentially doing a spherical mercator - // projection, then multiplying by 2^zoom. - - var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); - var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. - - var extent = { - x: bottomRight.x - topLeft.x, - y: bottomRight.y - topLeft.y - }; // Short circuit if tile is totally disjoint from image. - - if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; - if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. - // If the linear resolution (in either direction) of the image is less than 256px - // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in - // scaling. - - var imgRes = { - x: w / extent.x, - y: h / extent.y - }; // We can do the actual drawing in one of three ways: - // - Call drawImage(). This is easy and fast, and results in smooth - // interpolation (bilinear?). This is what we want when we are - // reducing the image from its native size. - // - Call drawImage() with imageSmoothingEnabled=false. This is easy - // and fast and gives us nearest-neighbor interpolation, which is what - // we want when enlarging the image. However, it's unsupported on many - // browsers (including QtWebkit). - // - Do a manual nearest-neighbor interpolation. This is what we'll fall - // back to when enlarging, and imageSmoothingEnabled isn't supported. - // In theory it's slower, but still pretty fast on my machine, and the - // results look the same AFAICT. - // Is imageSmoothingEnabled supported? If so, we can let canvas do - // nearest-neighbor interpolation for us. - - var smoothingProperty = getCanvasSmoothingProperty(ctx); - - if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { - // Use built-in scaling - // Turn off anti-aliasing if necessary - if (smoothingProperty) { - ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; - } // Don't necessarily draw with the full-size image; if we're - // downscaling, use the mipmapper to get a pre-downscaled image - // (see comments on Mipmapper class for why this matters). - - - mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { - // It's possible that the image will go off the edge of the canvas-- - // that's OK, the canvas should clip appropriately. - ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert - // to rel pixel coords - (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just - // convert from size in tile coords straight to pixels - extent.x * 256, extent.y * 256); - }); - } else { - // Use manual nearest-neighbor interpolation - // Calculate the source image pixel coordinates that correspond with - // the top-left and bottom-right of this tile. (If the source image - // only partially overlaps the tile, we use max/min to limit the - // sourceStart/End to only reflect the overlapping portion.) - var sourceStart = { - x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), - y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) - }; - var sourceEnd = { - x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), - y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) - }; // The size, in dest pixels, that each source pixel should occupy. - // This might be greater or less than 1 (e.g. if x and y resolution - // are very different). - - var pixelSize = { - x: 256 / imgRes.x, - y: 256 / imgRes.y - }; // For each pixel in the source image that overlaps the tile... - - for (var row = sourceStart.y; row < sourceEnd.y; row++) { - for (var col = sourceStart.x; col < sourceEnd.x; col++) { - // ...extract the pixel data... - var i = (row * w + col) * 4; - var r = imgData[i]; - var g = imgData[i + 1]; - var b = imgData[i + 2]; - var a = imgData[i + 3]; - ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image - // where it should be drawn... - - var pixelPos = { - x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, - y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 - }; // ...and draw a rectangle there. - - ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from - // causing overlap between this rect and its neighbors. The - // minuend is the location of the next pixel, while the - // subtrahend is the position of the current pixel (to turn an - // absolute coordinate to a width/height). Yes, I had to look - // up minuend and subtrahend. - Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); - } - } - } - } catch (e) { - error = e; - } finally { - done(error, canvas); - } - }); - return canvas; - }; - - this.layerManager.addLayer(canvasTiles, "image", layerId, group); -}; - -methods.removeImage = function (layerId) { - this.layerManager.removeLayer("image", layerId); -}; - -methods.clearImages = function () { - this.layerManager.clearLayers("image"); -}; - -methods.addMeasure = function (options) { - // if a measureControl already exists, then remove it and - // replace with a new one - methods.removeMeasure.call(this); - this.measureControl = _leaflet2["default"].control.measure(options); - this.addControl(this.measureControl); -}; - -methods.removeMeasure = function () { - if (this.measureControl) { - this.removeControl(this.measureControl); - this.measureControl = null; - } -}; - -methods.addSelect = function (ctGroup) { - var _this8 = this; - - methods.removeSelect.call(this); - this._selectButton = _leaflet2["default"].easyButton({ - states: [{ - stateName: "select-inactive", - icon: "ion-qr-scanner", - title: "Make a selection", - onClick: function onClick(btn, map) { - btn.state("select-active"); - _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); - - if (ctGroup) { - var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); - selectionHandle.on("change", function (e) { - if (e.sender !== selectionHandle) { - if (_this8._locationFilter) { - _this8._locationFilter.disable(); - - btn.state("select-inactive"); - } - } - }); - - var handler = function handler(e) { - _this8.layerManager.brush(_this8._locationFilter.getBounds(), { - sender: selectionHandle - }); - }; - - _this8._locationFilter.on("enabled", handler); - - _this8._locationFilter.on("change", handler); - - _this8._locationFilter.on("disabled", function () { - selectionHandle.close(); - _this8._locationFilter = null; - }); - } - - _this8._locationFilter.addTo(map); - } - }, { - stateName: "select-active", - icon: "ion-close-round", - title: "Dismiss selection", - onClick: function onClick(btn, map) { - btn.state("select-inactive"); - - _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections - - - _this8.layerManager.unbrush(); - } - }] - }); - - this._selectButton.addTo(this); -}; - -methods.removeSelect = function () { - if (this._locationFilter) { - this._locationFilter.disable(); - } - - if (this._selectButton) { - this.removeControl(this._selectButton); - this._selectButton = null; - } -}; - -methods.createMapPane = function (name, zIndex) { - this.createPane(name); - this.getPane(name).style.zIndex = zIndex; -}; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// This class simulates a mipmap, which shrinks images by powers of two. This -// stepwise reduction results in "pixel-perfect downscaling" (where every -// pixel of the original image has some contribution to the downscaled image) -// as opposed to a single-step downscaling which will discard a lot of data -// (and with sparse images at small scales can give very surprising results). -var Mipmapper = /*#__PURE__*/function () { - function Mipmapper(img) { - _classCallCheck(this, Mipmapper); - - this._layers = [img]; - } // The various functions on this class take a callback function BUT MAY OR MAY - // NOT actually behave asynchronously. - - - _createClass(Mipmapper, [{ - key: "getBySize", - value: function getBySize(desiredWidth, desiredHeight, callback) { - var _this = this; - - var i = 0; - var lastImg = this._layers[0]; - - var testNext = function testNext() { - _this.getByIndex(i, function (img) { - // If current image is invalid (i.e. too small to be rendered) or - // it's smaller than what we wanted, return the last known good image. - if (!img || img.width < desiredWidth || img.height < desiredHeight) { - callback(lastImg); - return; - } else { - lastImg = img; - i++; - testNext(); - return; - } - }); - }; - - testNext(); - } - }, { - key: "getByIndex", - value: function getByIndex(i, callback) { - var _this2 = this; - - if (this._layers[i]) { - callback(this._layers[i]); - return; - } - - this.getByIndex(i - 1, function (prevImg) { - if (!prevImg) { - // prevImg could not be calculated (too small, possibly) - callback(null); - return; - } - - if (prevImg.width < 2 || prevImg.height < 2) { - // Can't reduce this image any further - callback(null); - return; - } // If reduce ever becomes truly asynchronous, we should stuff a promise or - // something into this._layers[i] before calling this.reduce(), to prevent - // redundant reduce operations from happening. - - - _this2.reduce(prevImg, function (reducedImg) { - _this2._layers[i] = reducedImg; - callback(reducedImg); - return; - }); - }); - } - }, { - key: "reduce", - value: function reduce(img, callback) { - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = Math.ceil(img.width / 2); - imgDataCanvas.height = Math.ceil(img.height / 2); - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - - try { - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); - callback(imgDataCanvas); - } finally { - document.body.removeChild(imgDataCanvas); - } - } - }]); - - return Mipmapper; -}(); - -exports["default"] = Mipmapper; - - -},{}],17:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.log = log; -exports.recycle = recycle; -exports.asArray = asArray; - -function log(message) { - /* eslint-disable no-console */ - if (console && console.log) console.log(message); - /* eslint-enable no-console */ -} - -function recycle(values, length, inPlace) { - if (length === 0 && !inPlace) return []; - - if (!(values instanceof Array)) { - if (inPlace) { - throw new Error("Can't do in-place recycling of a non-Array value"); - } - - values = [values]; - } - - if (typeof length === "undefined") length = values.length; - var dest = inPlace ? values : []; - var origLength = values.length; - - while (dest.length < length) { - dest.push(values[dest.length % origLength]); - } - - if (dest.length > length) { - dest.splice(length, dest.length - length); - } - - return dest; -} - -function asArray(value) { - if (value instanceof Array) return value;else return [value]; -} - - -},{}]},{},[13]); diff --git a/docs/articles/Applications_files/leaflet-binding-2.2.3/leaflet.js b/docs/articles/Applications_files/leaflet-binding-2.2.3/leaflet.js deleted file mode 100644 index 79dbe71..0000000 --- a/docs/articles/Applications_files/leaflet-binding-2.2.3/leaflet.js +++ /dev/null @@ -1,2787 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); - var colIndex = -1; - - if (typeof col === "undefined") { - var rowData = {}; - this.colnames.forEach(function (name, i) { - rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; - }); - return rowData; - } else if (typeof col === "string") { - colIndex = this._colIndex(col); - } else if (typeof col === "number") { - colIndex = col; - } - - if (colIndex < 0 || colIndex > this.columns.length) { - if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); - } - - return this.columns[colIndex][row % this.columns[colIndex].length]; - } - }, { - key: "nrow", - value: function nrow() { - return this.effectiveLength; - } - }]); - - return DataFrame; -}(); - -exports["default"] = DataFrame; - - -},{"./util":17}],5:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// In RMarkdown's self-contained mode, we don't have a way to carry around the -// images that Leaflet needs but doesn't load into the page. Instead, we'll use -// the unpkg CDN. -if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { - _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; -} - - -},{"./global/leaflet":10}],6:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// add texxtsize, textOnly, and style -_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; -_leaflet2["default"].Tooltip.prototype.options.textOnly = false; -_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. - -var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; - -_leaflet2["default"].Tooltip.prototype._initLayout = function () { - initLayoutOriginal.call(this); - this._container.style.fontSize = this.options.textsize; - - if (this.options.textOnly) { - _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); - } - - if (this.options.style) { - for (var property in this.options.style) { - this._container.style[property] = this.options.style[property]; - } - } -}; - - -},{"./global/leaflet":10}],7:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var protocolRegex = /^\/\//; - -var upgrade_protocol = function upgrade_protocol(urlTemplate) { - if (protocolRegex.test(urlTemplate)) { - if (window.location.protocol === "file:") { - // if in a local file, support http - // http should auto upgrade if necessary - urlTemplate = "http:" + urlTemplate; - } - } - - return urlTemplate; -}; - -var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; - -_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerInitialize.call(this, urlTemplate, options); -}; - -var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; - -_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerWMSInitialize.call(this, urlTemplate, options); -}; - - -},{"./global/leaflet":10}],8:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.HTMLWidgets; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],9:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.jQuery; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],11:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L.Proj; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.Shiny; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],13:[function(require,module,exports){ -"use strict"; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _controlStore = require("./control-store"); - -var _controlStore2 = _interopRequireDefault(_controlStore); - -var _layerManager = require("./layer-manager"); - -var _layerManager2 = _interopRequireDefault(_layerManager); - -var _methods = require("./methods"); - -var _methods2 = _interopRequireDefault(_methods); - -require("./fixup-default-icon"); - -require("./fixup-default-tooltip"); - -require("./fixup-url-protocol"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -window.LeafletWidget = {}; -window.LeafletWidget.utils = {}; - -var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); - -window.LeafletWidget.DataFrame = _dataframe2["default"]; -window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; -window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. - -function updateBounds(map) { - var id = map.getContainer().id; - var bounds = map.getBounds(); - - _shiny2["default"].onInputChange(id + "_bounds", { - north: bounds.getNorthEast().lat, - east: bounds.getNorthEast().lng, - south: bounds.getSouthWest().lat, - west: bounds.getSouthWest().lng - }); - - _shiny2["default"].onInputChange(id + "_center", { - lng: map.getCenter().lng, - lat: map.getCenter().lat - }); - - _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); -} - -function preventUnintendedZoomOnScroll(map) { - // Prevent unwanted scroll capturing. Similar in purpose to - // https://github.com/CliffCloud/Leaflet.Sleep but with a - // different set of heuristics. - // The basic idea is that when a mousewheel/DOMMouseScroll - // event is seen, we disable scroll wheel zooming until the - // user moves their mouse cursor or clicks on the map. This - // is slightly trickier than just listening for mousemove, - // because mousemove is fired when the page is scrolled, - // even if the user did not physically move the mouse. We - // handle this by examining the mousemove event's screenX - // and screenY properties; if they change, we know it's a - // "true" move. - // lastScreen can never be null, but its x and y can. - var lastScreen = { - x: null, - y: null - }; - (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { - // Disable zooming (until the mouse moves or click) - map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. - - lastScreen = { - x: e.originalEvent.screenX, - y: e.originalEvent.screenY - }; - }); - (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { - // Did the mouse really move? - if (map.options.scrollWheelZoom) { - if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { - // It really moved. Enable zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - } - }); - (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { - // Clicking always enables zooming. - if (map.options.scrollWheelZoom) { - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - }); -} - -_htmlwidgets2["default"].widget({ - name: "leaflet", - type: "output", - factory: function factory(el, width, height) { - var map = null; - return { - // we need to store our map in our returned object. - getMap: function getMap() { - return map; - }, - renderValue: function renderValue(data) { - // Create an appropriate CRS Object if specified - if (data && data.options && data.options.crs) { - data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); - } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 - - - if (map) { - map.remove(); - - map = function () { - return; - }(); // undefine map - - } - - if (data.options.mapFactory && typeof data.options.mapFactory === "function") { - map = data.options.mapFactory(el, data.options); - } else { - map = _leaflet2["default"].map(el, data.options); - } - - preventUnintendedZoomOnScroll(map); // Store some state in the map object - - map.leafletr = { - // Has the map ever rendered successfully? - hasRendered: false, - // Data to be rendered when resize is called with area != 0 - pendingRenderData: null - }; // Check if the map is rendered statically (no output binding) - - if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { - map.id = el.id; // Store the map on the element so we can find it later by ID - - (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app - - map.on("click", function (e) { - _shiny2["default"].onInputChange(map.id + "_click", { - lat: e.latlng.lat, - lng: e.latlng.lng, - ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed - - }); - }); - var groupTimerId = null; - map.on("moveend", function (e) { - updateBounds(e.target); - }).on("layeradd layerremove", function (e) { - // If the layer that's coming or going is a group we created, tell - // the server. - if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { - // But to avoid chattiness, coalesce events - if (groupTimerId) { - clearTimeout(groupTimerId); - groupTimerId = null; - } - - groupTimerId = setTimeout(function () { - groupTimerId = null; - - _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); - }, 100); - } - }); - } - - this.doRenderValue(data, map); - }, - doRenderValue: function doRenderValue(data, map) { - // Leaflet does not behave well when you set up a bunch of layers when - // the map is not visible (width/height == 0). Popups get misaligned - // relative to their owning markers, and the fitBounds calculations - // are off. Therefore we wait until the map is actually showing to - // render the value (we rely on the resize() callback being invoked - // at the appropriate time). - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - map.leafletr.pendingRenderData = data; - return; - } - - map.leafletr.pendingRenderData = null; // Merge data options into defaults - - var options = _jquery2["default"].extend({ - zoomToLimits: "always" - }, data.options); - - if (!map.layerManager) { - map.controls = new _controlStore2["default"](map); - map.layerManager = new _layerManager2["default"](map); - } else { - map.controls.clear(); - map.layerManager.clear(); - } - - var explicitView = false; - - if (data.setView) { - explicitView = true; - map.setView.apply(map, data.setView); - } - - if (data.fitBounds) { - explicitView = true; - methods.fitBounds.apply(map, data.fitBounds); - } - - if (data.flyTo) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - map.flyTo.apply(map, data.flyTo); - } - - if (data.flyToBounds) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - methods.flyToBounds.apply(map, data.flyToBounds); - } - - if (data.options.center) { - explicitView = true; - } // Returns true if the zoomToLimits option says that the map should be - // zoomed to map elements. - - - function needsZoom() { - return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; - } - - if (!explicitView && needsZoom() && !map.getZoom()) { - if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { - // Use the natural limits of what's being drawn on the map - // If the size of the bounding box is 0, leaflet gets all weird - var pad = 0.006; - - if (data.limits.lat[0] === data.limits.lat[1]) { - data.limits.lat[0] = data.limits.lat[0] - pad; - data.limits.lat[1] = data.limits.lat[1] + pad; - } - - if (data.limits.lng[0] === data.limits.lng[1]) { - data.limits.lng[0] = data.limits.lng[0] - pad; - data.limits.lng[1] = data.limits.lng[1] + pad; - } - - map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); - } else { - map.fitWorld(); - } - } - - for (var i = 0; data.calls && i < data.calls.length; i++) { - var call = data.calls[i]; - if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); - } - - map.leafletr.hasRendered = true; - - if (_htmlwidgets2["default"].shinyMode) { - setTimeout(function () { - updateBounds(map); - }, 1); - } - }, - resize: function resize(width, height) { - if (map) { - map.invalidateSize(); - - if (map.leafletr.pendingRenderData) { - this.doRenderValue(map.leafletr.pendingRenderData, map); - } - } - } - }; - } -}); - -if (_htmlwidgets2["default"].shinyMode) { - _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { - var id = data.id; - var el = document.getElementById(id); - var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; - - if (!map) { - (0, _util.log)("Couldn't find map with id " + id); - return; - } // If the map has not rendered, stash the proposed `leafletProxy()` calls - // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. - // This is necessary if the map has not been rendered. - // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. - - - if (!map.leafletr.hasRendered) { - map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); - return; - } - - for (var i = 0; i < data.calls.length; i++) { - var call = data.calls[i]; - var args = call.args; - - for (var _i = 0; _i < call.evals.length; _i++) { - window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); - } - - if (call.dependencies) { - _shiny2["default"].renderDependencies(call.dependencies); - } - - if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); - } - }); -} - - -},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = undefined; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _util = require("./util"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var LayerManager = /*#__PURE__*/function () { - function LayerManager(map) { - _classCallCheck(this, LayerManager); - - this._map = map; // BEGIN layer indices - // {: {: layer}} - - this._byGroup = {}; // {: {: layer}} - - this._byCategory = {}; // {: layer} - - this._byLayerId = {}; // {: { - // "group": , - // "layerId": , - // "category": , - // "container": - // } - // } - - this._byStamp = {}; // {: {: [, , ...], ...}} - - this._byCrosstalkGroup = {}; // END layer indices - // {: L.layerGroup} - - this._categoryContainers = {}; // {: L.layerGroup} - - this._groupContainers = {}; - } - - _createClass(LayerManager, [{ - key: "addLayer", - value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { - var _this = this; - - // Was a group provided? - var hasId = typeof layerId === "string"; - var grouped = typeof group === "string"; - var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. - // We may overwrite this let before using it (i.e. if a group is assigned). - // This one liner creates the _categoryContainers[category] entry if it - // doesn't already exist. - - var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); - - var oldLayer = null; - - if (hasId) { - // First, remove any layer with the same category and layerId - var prefixedLayerId = this._layerIdKey(category, layerId); - - oldLayer = this._byLayerId[prefixedLayerId]; - - if (oldLayer) { - this._removeLayer(oldLayer); - } // Update layerId index - - - this._byLayerId[prefixedLayerId] = layer; - } // Update group index - - - if (grouped) { - this._byGroup[group] = this._byGroup[group] || {}; - this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer - // group; instead, use the group's layer group. - // This one liner creates the _groupContainers[group] entry if it doesn't - // already exist. - - container = this.getLayerGroup(group, true); - } // Update category index - - - this._byCategory[category] = this._byCategory[category] || {}; - this._byCategory[category][stamp] = layer; // Update stamp index - - var layerInfo = this._byStamp[stamp] = { - layer: layer, - group: group, - ctGroup: ctGroup, - ctKey: ctKey, - layerId: layerId, - category: category, - container: container, - hidden: false - }; // Update crosstalk group index - - if (ctGroup) { - if (layer.setStyle) { - // Need to save this info so we know what to set opacity to later - layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; - layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; - } - - var ctg = this._byCrosstalkGroup[ctGroup]; - - if (!ctg) { - ctg = this._byCrosstalkGroup[ctGroup] = {}; - var crosstalk = global.crosstalk; - - var handleFilter = function handleFilter(e) { - if (!e.value) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo = _this._byStamp[ctg[key]]; - - _this._setVisibility(_layerInfo, true); - } - } else { - var selectedKeys = {}; - - for (var _i = 0; _i < e.value.length; _i++) { - selectedKeys[e.value[_i]] = true; - } - - var _groupKeys = Object.keys(ctg); - - for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { - var _key = _groupKeys[_i2]; - var _layerInfo2 = _this._byStamp[ctg[_key]]; - - _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); - } - } - }; - - var filterHandle = new crosstalk.FilterHandle(ctGroup); - filterHandle.on("change", handleFilter); - - var handleSelection = function handleSelection(e) { - if (!e.value || !e.value.length) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo3 = _this._byStamp[ctg[key]]; - - _this._setOpacity(_layerInfo3, 1.0); - } - } else { - var selectedKeys = {}; - - for (var _i3 = 0; _i3 < e.value.length; _i3++) { - selectedKeys[e.value[_i3]] = true; - } - - var _groupKeys2 = Object.keys(ctg); - - for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { - var _key2 = _groupKeys2[_i4]; - var _layerInfo4 = _this._byStamp[ctg[_key2]]; - - _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); - } - } - }; - - var selHandle = new crosstalk.SelectionHandle(ctGroup); - selHandle.on("change", handleSelection); - setTimeout(function () { - handleFilter({ - value: filterHandle.filteredKeys - }); - handleSelection({ - value: selHandle.value - }); - }, 100); - } - - if (!ctg[ctKey]) ctg[ctKey] = []; - ctg[ctKey].push(stamp); - } // Add to container - - - if (!layerInfo.hidden) container.addLayer(layer); - return oldLayer; - } - }, { - key: "brush", - value: function brush(bounds, extraInfo) { - var _this2 = this; - - /* eslint-disable no-console */ - // For each Crosstalk group... - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - var ctg = _this2._byCrosstalkGroup[ctGroupName]; - var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple - // layers)... - - Object.keys(ctg).forEach(function (ctKey) { - // ...and for each layer... - ctg[ctKey].forEach(function (stamp) { - var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... - - if (layerInfo.layer.getLatLng) { - // ... and it's inside the selection bounds... - // TODO: Use pixel containment, not lat/lng containment - if (bounds.contains(layerInfo.layer.getLatLng())) { - // ...add the key to the selection. - selection.push(ctKey); - } - } - }); - }); - new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); - }); - } - }, { - key: "unbrush", - value: function unbrush(extraInfo) { - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); - }); - } - }, { - key: "_setVisibility", - value: function _setVisibility(layerInfo, visible) { - if (layerInfo.hidden ^ visible) { - return; - } else if (visible) { - layerInfo.container.addLayer(layerInfo.layer); - layerInfo.hidden = false; - } else { - layerInfo.container.removeLayer(layerInfo.layer); - layerInfo.hidden = true; - } - } - }, { - key: "_setOpacity", - value: function _setOpacity(layerInfo, opacity) { - if (layerInfo.layer.setOpacity) { - layerInfo.layer.setOpacity(opacity); - } else if (layerInfo.layer.setStyle) { - layerInfo.layer.setStyle({ - opacity: opacity * layerInfo.layer.options.origOpacity, - fillOpacity: opacity * layerInfo.layer.options.origFillOpacity - }); - } - } - }, { - key: "getLayer", - value: function getLayer(category, layerId) { - return this._byLayerId[this._layerIdKey(category, layerId)]; - } - }, { - key: "removeLayer", - value: function removeLayer(category, layerIds) { - var _this3 = this; - - // Find layer info - _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { - var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; - - if (layer) { - _this3._removeLayer(layer); - } - }); - } - }, { - key: "clearLayers", - value: function clearLayers(category) { - var _this4 = this; - - // Find all layers in _byCategory[category] - var catTable = this._byCategory[category]; - - if (!catTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(catTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this4._removeLayer(stamp); - }); - } - }, { - key: "getLayerGroup", - value: function getLayerGroup(group, ensureExists) { - var g = this._groupContainers[group]; - - if (ensureExists && !g) { - this._byGroup[group] = this._byGroup[group] || {}; - g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); - g.groupname = group; - g.addTo(this._map); - } - - return g; - } - }, { - key: "getGroupNameFromLayerGroup", - value: function getGroupNameFromLayerGroup(layerGroup) { - return layerGroup.groupname; - } - }, { - key: "getVisibleGroups", - value: function getVisibleGroups() { - var _this5 = this; - - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - if (_this5._map.hasLayer(v)) { - result.push(k); - } - }); - - return result; - } - }, { - key: "getAllGroupNames", - value: function getAllGroupNames() { - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - result.push(k); - }); - - return result; - } - }, { - key: "clearGroup", - value: function clearGroup(group) { - var _this6 = this; - - // Find all layers in _byGroup[group] - var groupTable = this._byGroup[group]; - - if (!groupTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(groupTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this6._removeLayer(stamp); - }); - } - }, { - key: "clear", - value: function clear() { - function clearLayerGroup(key, layerGroup) { - layerGroup.clearLayers(); - } // Clear all indices and layerGroups - - - this._byGroup = {}; - this._byCategory = {}; - this._byLayerId = {}; - this._byStamp = {}; - this._byCrosstalkGroup = {}; - - _jquery2["default"].each(this._categoryContainers, clearLayerGroup); - - this._categoryContainers = {}; - - _jquery2["default"].each(this._groupContainers, clearLayerGroup); - - this._groupContainers = {}; - } - }, { - key: "_removeLayer", - value: function _removeLayer(layer) { - var stamp; - - if (typeof layer === "string") { - stamp = layer; - } else { - stamp = _leaflet2["default"].Util.stamp(layer); - } - - var layerInfo = this._byStamp[stamp]; - - if (!layerInfo) { - return false; - } - - layerInfo.container.removeLayer(stamp); - - if (typeof layerInfo.group === "string") { - delete this._byGroup[layerInfo.group][stamp]; - } - - if (typeof layerInfo.layerId === "string") { - delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; - } - - delete this._byCategory[layerInfo.category][stamp]; - delete this._byStamp[stamp]; - - if (layerInfo.ctGroup) { - var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; - var layersForKey = ctGroup[layerInfo.ctKey]; - var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; - - if (idx >= 0) { - if (layersForKey.length === 1) { - delete ctGroup[layerInfo.ctKey]; - } else { - layersForKey.splice(idx, 1); - } - } - } - } - }, { - key: "_layerIdKey", - value: function _layerIdKey(category, layerId) { - return category + "\n" + layerId; - } - }]); - - return LayerManager; -}(); - -exports["default"] = LayerManager; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -var _mipmapper = require("./mipmapper"); - -var _mipmapper2 = _interopRequireDefault(_mipmapper); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var methods = {}; -exports["default"] = methods; - -function mouseHandler(mapId, layerId, group, eventName, extraInfo) { - return function (e) { - if (!_htmlwidgets2["default"].shinyMode) return; - var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; - - if (latLng) { - // retrieve only lat, lon values to remove prototype - // and extra parameters added by 3rd party modules - // these objects are for json serialization, not javascript - var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape - - - latLng = { - lat: latLngVal.lat, - lng: latLngVal.lng - }; - } - - var eventInfo = _jquery2["default"].extend({ - id: layerId, - ".nonce": Math.random() // force reactivity - - }, group !== null ? { - group: group - } : null, latLng, extraInfo); - - _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); - }; -} - -methods.mouseHandler = mouseHandler; - -methods.clearGroup = function (group) { - var _this = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { - _this.layerManager.clearGroup(v); - }); -}; - -methods.setView = function (center, zoom, options) { - this.setView(center, zoom, options); -}; - -methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { - this.fitBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.flyTo = function (center, zoom, options) { - this.flyTo(center, zoom, options); -}; - -methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { - this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { - this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); -}; - -methods.addPopups = function (lat, lng, popup, layerId, group, options) { - var _this2 = this; - - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); - - var _loop = function _loop(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); - - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(popup, "popup", thisId, thisGroup); - }).call(_this2); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop(i); - } -}; - -methods.removePopup = function (layerId) { - this.layerManager.removeLayer("popup", layerId); -}; - -methods.clearPopups = function () { - this.layerManager.clearLayers("popup"); -}; - -methods.addTiles = function (urlTemplate, layerId, group, options) { - this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); -}; - -methods.removeTiles = function (layerId) { - this.layerManager.removeLayer("tile", layerId); -}; - -methods.clearTiles = function () { - this.layerManager.clearLayers("tile"); -}; - -methods.addWMSTiles = function (baseUrl, layerId, group, options) { - if (options && options.crs) { - options.crs = (0, _crs_utils.getCRS)(options.crs); - } - - this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); -}; // Given: -// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} -// returns: -// ["a", "b", "a", "c"] - - -function unpackStrings(iconset) { - if (!iconset) { - return iconset; - } - - if (typeof iconset.index === "undefined") { - return iconset; - } - - iconset.data = (0, _util.asArray)(iconset.data); - iconset.index = (0, _util.asArray)(iconset.index); - return _jquery2["default"].map(iconset.index, function (e, i) { - return iconset.data[e]; - }); -} - -function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { - (function () { - var _this3 = this; - - var clusterGroup = this.layerManager.getLayer("cluster", clusterId), - cluster = clusterOptions !== null; - - if (cluster && !clusterGroup) { - clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); - - if (clusterOptions.freezeAtZoom) { - var freezeAtZoom = clusterOptions.freezeAtZoom; - delete clusterOptions.freezeAtZoom; - clusterGroup.freezeAtZoom(freezeAtZoom); - } - - clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); - } - - var extraInfo = cluster ? { - clusterId: clusterId - } : {}; - - var _loop2 = function _loop2(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var marker = markerFunc(df, i); - var thisId = df.get(i, "layerId"); - var thisGroup = cluster ? null : df.get(i, "group"); - - if (cluster) { - clusterGroup.clusterLayerStore.add(marker, thisId); - } else { - this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - } - - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - marker.bindPopup(popup, popupOptions); - } else { - marker.bindPopup(popup); - } - } - - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - if (labelOptions.permanent) { - marker.bindTooltip(label, labelOptions).openTooltip(); - } else { - marker.bindTooltip(label, labelOptions); - } - } else { - marker.bindTooltip(label); - } - } - - marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); - marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); - marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); - marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); - }).call(_this3); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop2(i); - } - - if (cluster) { - this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); - } - }).call(map); -} - -methods.addGenericMarkers = addMarkers; - -methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // Unpack icons - icon.iconUrl = unpackStrings(icon.iconUrl); - icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); - icon.shadowUrl = unpackStrings(icon.shadowUrl); - icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts.iconUrl) { - return new _leaflet2["default"].Icon.Default(); - } // Composite options (like points or sizes) are passed from R with each - // individual component as its own option. We need to combine them now - // into their composite form. - - - if (opts.iconWidth) { - opts.iconSize = [opts.iconWidth, opts.iconHeight]; - } - - if (opts.shadowWidth) { - opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; - } - - if (opts.iconAnchorX) { - opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; - } - - if (opts.shadowAnchorX) { - opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; - } - - if (opts.popupAnchorX) { - opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; - } - - return new _leaflet2["default"].Icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts) { - return new _leaflet2["default"].AwesomeMarkers.icon(); - } - - if (opts.squareMarker) { - opts.className = "awesome-marker awesome-marker-square"; - } - - return new _leaflet2["default"].AwesomeMarkers.icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -function addLayers(map, category, df, layerFunc) { - var _loop3 = function _loop3(i) { - (function () { - var layer = layerFunc(df, i); - - if (!_jquery2["default"].isEmptyObject(layer)) { - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - - if (layer.bindPopup) { - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - layer.bindPopup(popup, popupOptions); - } else { - layer.bindPopup(popup); - } - } - } - - if (layer.bindTooltip) { - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - layer.bindTooltip(label, labelOptions); - } else { - layer.bindTooltip(label); - } - } - } - - layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); - layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); - layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); - var highlightStyle = df.get(i, "highlightOptions"); - - if (!_jquery2["default"].isEmptyObject(highlightStyle)) { - var defaultStyle = {}; - - _jquery2["default"].each(highlightStyle, function (k, v) { - if (k != "bringToFront" && k != "sendToBack") { - if (df.get(i, k)) { - defaultStyle[k] = df.get(i, k); - } - } - }); - - layer.on("mouseover", function (e) { - this.setStyle(highlightStyle); - - if (highlightStyle.bringToFront) { - this.bringToFront(); - } - }); - layer.on("mouseout", function (e) { - this.setStyle(defaultStyle); - - if (highlightStyle.sendToBack) { - this.bringToBack(); - } - }); - } - } - }).call(map); - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop3(i); - } -} - -methods.addGenericLayers = addLayers; - -methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { - return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); - } else { - return null; - } - }); - } -}; - -methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); - }); - } -}; -/* - * @param lat Array of arrays of latitude coordinates for polylines - * @param lng Array of arrays of longitude coordinates for polylines - */ - - -methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - var shapes = df.get(i, "shapes"); - shapes = shapes.map(function (shape) { - return _htmlwidgets2["default"].dataframeToD3(shape[0]); - }); - - if (shapes.length > 1) { - return _leaflet2["default"].polyline(shapes, df.get(i)); - } else { - return _leaflet2["default"].polyline(shapes[0], df.get(i)); - } - }); - } -}; - -methods.removeMarker = function (layerId) { - this.layerManager.removeLayer("marker", layerId); -}; - -methods.clearMarkers = function () { - this.layerManager.clearLayers("marker"); -}; - -methods.removeMarkerCluster = function (layerId) { - this.layerManager.removeLayer("cluster", layerId); -}; - -methods.removeMarkerFromCluster = function (layerId, clusterId) { - var cluster = this.layerManager.getLayer("cluster", clusterId); - if (!cluster) return; - cluster.clusterLayerStore.remove(layerId); -}; - -methods.clearMarkerClusters = function () { - this.layerManager.clearLayers("cluster"); -}; - -methods.removeShape = function (layerId) { - this.layerManager.removeLayer("shape", layerId); -}; - -methods.clearShapes = function () { - this.layerManager.clearLayers("shape"); -}; - -methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { - return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); - } else { - return null; - } - }); -}; -/* - * @param lat Array of arrays of latitude coordinates for polygons - * @param lng Array of arrays of longitude coordinates for polygons - */ - - -methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - // This code used to use L.multiPolygon, but that caused - // double-click on a multipolygon to fail to zoom in on the - // map. Surprisingly, putting all the rings in a single - // polygon seems to still work; complicated multipolygons - // are still rendered correctly. - var shapes = df.get(i, "shapes").map(function (polygon) { - return polygon.map(_htmlwidgets2["default"].dataframeToD3); - }).reduce(function (acc, val) { - return acc.concat(val); - }, []); - return _leaflet2["default"].polygon(shapes, df.get(i)); - }); - } -}; - -methods.addGeoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(data, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties ? feature.properties.popup : null; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); - } - }); - - this.layerManager.addLayer(gjlayer, "geojson", layerId, group); -}; - -methods.removeGeoJSON = function (layerId) { - this.layerManager.removeLayer("geojson", layerId); -}; - -methods.clearGeoJSON = function () { - this.layerManager.clearLayers("geojson"); -}; - -methods.addTopoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(null, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties.popup; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); - } - }); - - global.omnivore.topojson.parse(data, null, gjlayer); - this.layerManager.addLayer(gjlayer, "topojson", layerId, group); -}; - -methods.removeTopoJSON = function (layerId) { - this.layerManager.removeLayer("topojson", layerId); -}; - -methods.clearTopoJSON = function () { - this.layerManager.clearLayers("topojson"); -}; - -methods.addControl = function (html, position, layerId, classes) { - function onAdd(map) { - var div = _leaflet2["default"].DomUtil.create("div", classes); - - if (typeof layerId !== "undefined" && layerId !== null) { - div.setAttribute("id", layerId); - } - - this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to - // not be, when a static leaflet widget is included as part of the shiny - // UI directly (not through leafletOutput or uiOutput). In this case we - // don't do the normal Shiny stuff as that will all happen when Shiny - // itself loads and binds the entire doc. - - if (window.Shiny && _shiny2["default"].initializeInputs) { - _shiny2["default"].renderHtml(html, this._div); - - _shiny2["default"].initializeInputs(this._div); - - _shiny2["default"].bindAll(this._div); - } else { - this._div.innerHTML = html; - } - - return this._div; - } - - function onRemove(map) { - if (window.Shiny && _shiny2["default"].unbindAll) { - _shiny2["default"].unbindAll(this._div); - } - } - - var Control = _leaflet2["default"].Control.extend({ - options: { - position: position - }, - onAdd: onAdd, - onRemove: onRemove - }); - - this.controls.add(new Control(), layerId, html); -}; - -methods.addCustomControl = function (control, layerId) { - this.controls.add(control, layerId); -}; - -methods.removeControl = function (layerId) { - this.controls.remove(layerId); -}; - -methods.getControl = function (layerId) { - this.controls.get(layerId); -}; - -methods.clearControls = function () { - this.controls.clear(); -}; - -methods.addLegend = function (options) { - var legend = _leaflet2["default"].control({ - position: options.position - }); - - var gradSpan; - - legend.onAdd = function (map) { - var div = _leaflet2["default"].DomUtil.create("div", options.className), - colors = options.colors, - labels = options.labels, - legendHTML = ""; - - if (options.type === "numeric") { - // # Formatting constants. - var singleBinHeight = 20; // The distance between tick marks, in px - - var vMargin = 8; // If 1st tick mark starts at top of gradient, how - // many extra px are needed for the top half of the - // 1st label? (ditto for last tick mark/label) - - var tickWidth = 4; // How wide should tick marks be, in px? - - var labelPadding = 6; // How much distance to reserve for tick mark? - // (Must be >= tickWidth) - // # Derived formatting parameters. - // What's the height of a single bin, in percentage (of gradient height)? - // It might not just be 1/(n-1), if the gradient extends past the tick - // marks (which can be the case for pretty cut points). - - var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? - - var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top - // of the gradient? - - var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; - gradSpan = (0, _jquery2["default"])("").css({ - "background": "linear-gradient(" + colors + ")", - "opacity": options.opacity, - "height": totalHeight + "px", - "width": "18px", - "display": "block", - "margin-top": vMargin + "px" - }); - var leftDiv = (0, _jquery2["default"])("
").css("float", "left"), - rightDiv = (0, _jquery2["default"])("
").css("float", "left"); - leftDiv.append(gradSpan); - (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
")); // Have to attach the div to the body at this early point, so that the - // svg text getComputedTextLength() actually works, below. - - document.body.appendChild(div); - var ns = "http://www.w3.org/2000/svg"; - var svg = document.createElementNS(ns, "svg"); - rightDiv.append(svg); - var g = document.createElementNS(ns, "g"); - (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); - svg.appendChild(g); // max label width needed to set width of svg, and right-justify text - - var maxLblWidth = 0; // Create tick marks and labels - - _jquery2["default"].each(labels, function (i, label) { - var y = tickOffset + i * singleBinHeight + 0.5; - var thisLabel = document.createElementNS(ns, "text"); - (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); - g.appendChild(thisLabel); - maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); - var thisTick = document.createElementNS(ns, "line"); - (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); - g.appendChild(thisTick); - }); // Now that we know the max label width, we can right-justify - - - (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for - - (0, _jquery2["default"])(svg).css({ - width: maxLblWidth + labelPadding + "px", - height: totalHeight + vMargin * 2 + "px" - }); - - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - (0, _jquery2["default"])(div).append("
" + options.na_label + "
"); - } - } else { - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - colors.push(options.na_color); - labels.push(options.na_label); - } - - for (var i = 0; i < colors.length; i++) { - legendHTML += " " + labels[i] + "
"; - } - - div.innerHTML = legendHTML; - } - - if (options.title) (0, _jquery2["default"])(div).prepend("
" + options.title + "
"); - return div; - }; - - if (options.group) { - // Auto generate a layerID if not provided - if (!options.layerId) { - options.layerId = _leaflet2["default"].Util.stamp(legend); - } - - var map = this; - map.on("overlayadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("overlayremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - map.on("groupadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("groupremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - } - - this.controls.add(legend, options.layerId); -}; - -methods.addLayersControl = function (baseGroups, overlayGroups, options) { - var _this4 = this; - - // Only allow one layers control at a time - methods.removeLayersControl.call(this); - var firstLayer = true; - var base = {}; - - _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one - - if (_this4.hasLayer(layer)) { - if (firstLayer) { - firstLayer = false; - } else { - _this4.removeLayer(layer); - } - } - } - }); - - var overlay = {}; - - _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - overlay[g] = layer; - } - }); - - this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); - this.addControl(this.currentLayersControl); -}; - -methods.removeLayersControl = function () { - if (this.currentLayersControl) { - this.removeControl(this.currentLayersControl); - this.currentLayersControl = null; - } -}; - -methods.addScaleBar = function (options) { - // Only allow one scale bar at a time - methods.removeScaleBar.call(this); - - var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); - - this.currentScaleBar = scaleBar; -}; - -methods.removeScaleBar = function () { - if (this.currentScaleBar) { - this.currentScaleBar.remove(); - this.currentScaleBar = null; - } -}; - -methods.hideGroup = function (group) { - var _this5 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this5.layerManager.getLayerGroup(g, true); - - if (layer) { - _this5.removeLayer(layer); - } - }); -}; - -methods.showGroup = function (group) { - var _this6 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this6.layerManager.getLayerGroup(g, true); - - if (layer) { - _this6.addLayer(layer); - } - }); -}; - -function setupShowHideGroupsOnZoom(map) { - if (map.leafletr._hasInitializedShowHideGroups) { - return; - } - - map.leafletr._hasInitializedShowHideGroups = true; - - function setVisibility(layer, visible, group) { - if (visible !== map.hasLayer(layer)) { - if (visible) { - map.addLayer(layer); - map.fire("groupadd", { - "name": group, - "layer": layer - }); - } else { - map.removeLayer(layer); - map.fire("groupremove", { - "name": group, - "layer": layer - }); - } - } - } - - function showHideGroupsOnZoom() { - if (!map.layerManager) return; - var zoom = map.getZoom(); - map.layerManager.getAllGroupNames().forEach(function (group) { - var layer = map.layerManager.getLayerGroup(group, false); - - if (layer && typeof layer.zoomLevels !== "undefined") { - setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); - } - }); - } - - map.showHideGroupsOnZoom = showHideGroupsOnZoom; - map.on("zoomend", showHideGroupsOnZoom); -} - -methods.setGroupOptions = function (group, options) { - var _this7 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels - - - if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { - layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); - } - }); - - setupShowHideGroupsOnZoom(this); - this.showHideGroupsOnZoom(); -}; - -methods.addRasterImage = function (uri, bounds, layerId, group, options) { - // uri is a data URI containing an image. We want to paint this image as a - // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. - // We can't simply use ImageOverlay, as it uses bilinear scaling which looks - // awful as you zoom in (and sometimes shifts positions or disappears). - // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. - // First, some helper functions. - // degree2tile converts latitude, longitude, and zoom to x and y tile - // numbers. The tile numbers returned can be non-integral, as there's no - // reason to expect that the lat/lng inputs are exactly on the border of two - // tiles. - // - // We'll use this to convert the bounds we got from the server, into coords - // in tile-space at a given zoom level. Note that once we do the conversion, - // we don't to do any more trigonometry to convert between pixel coordinates - // and tile coordinates; the source image pixel coords, destination canvas - // pixel coords, and tile coords all can be scaled linearly. - function degree2tile(lat, lng, zoom) { - // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames - var latRad = lat * Math.PI / 180; - var n = Math.pow(2, zoom); - var x = (lng + 180) / 360 * n; - var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; - return { - x: x, - y: y - }; - } // Given a range [from,to) and either one or two numbers, returns true if - // there is any overlap between [x,x1) and the range--or if x1 is omitted, - // then returns true if x is within [from,to). - - - function overlap(from, to, x, - /* optional */ - x1) { - if (arguments.length == 3) x1 = x; - return x < to && x1 >= from; - } - - function getCanvasSmoothingProperty(ctx) { - var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; - - for (var i = 0; i < candidates.length; i++) { - if (typeof ctx[candidates[i]] !== "undefined") { - return candidates[i]; - } - } - - return null; - } // Our general strategy is to: - // 1. Load the data URI in an Image() object, so we can get its pixel - // dimensions and the underlying image data. (We could have done this - // by not encoding as PNG at all but just send an array of RGBA values - // from the server, but that would inflate the JSON too much.) - // 2. Create a hidden canvas that we use just to extract the image data - // from the Image (using Context2D.getImageData()). - // 3. Create a TileLayer.Canvas and add it to the map. - // We want to synchronously create and attach the TileLayer.Canvas (so an - // immediate call to clearRasters() will be respected, for example), but - // Image loads its data asynchronously. Fortunately we can resolve this - // by putting TileLayer.Canvas into async mode, which will let us create - // and attach the layer but have it wait until the image is loaded before - // it actually draws anything. - // These are the variables that we will populate once the image is loaded. - - - var imgData = null; // 1d row-major array, four [0-255] integers per pixel - - var imgDataMipMapper = null; - var w = null; // image width in pixels - - var h = null; // image height in pixels - // We'll use this array to store callbacks that need to be invoked once - // imgData, w, and h have been resolved. - - var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data - // is available. - - function getImageData(callback) { - if (imgData != null) { - // Must not invoke the callback immediately; it's too confusing and - // fragile to have a function invoke the callback *either* immediately - // or in the future. Better to be consistent here. - setTimeout(function () { - callback(imgData, w, h, imgDataMipMapper); - }, 0); - } else { - imgDataCallbacks.push(callback); - } - } - - var img = new Image(); - - img.onload = function () { - // Save size - w = img.width; - h = img.height; // Create a dummy canvas to extract the image data - - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = w; - imgDataCanvas.height = h; - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0); // Save the image data. - - imgData = imgDataCtx.getImageData(0, 0, w, h).data; - imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. - - document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. - - for (var i = 0; i < imgDataCallbacks.length; i++) { - imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); - } - - imgDataCallbacks = []; - }; - - img.src = uri; - - var canvasTiles = _leaflet2["default"].gridLayer(Object.assign({}, options, { - detectRetina: true, - async: true - })); // NOTE: The done() function MUST NOT be invoked until after the current - // tick; done() looks in Leaflet's tile cache for the current tile, and - // since it's still being constructed, it won't be found. - - - canvasTiles.createTile = function (tilePoint, done) { - var zoom = tilePoint.z; - - var canvas = _leaflet2["default"].DomUtil.create("canvas"); - - var error; // setup tile width and height according to the options - - var size = this.getTileSize(); - canvas.width = size.x; - canvas.height = size.y; - getImageData(function (imgData, w, h, mipmapper) { - try { - // The Context2D we'll being drawing onto. It's always 256x256. - var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into - // x/y tile coordinates. This is essentially doing a spherical mercator - // projection, then multiplying by 2^zoom. - - var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); - var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. - - var extent = { - x: bottomRight.x - topLeft.x, - y: bottomRight.y - topLeft.y - }; // Short circuit if tile is totally disjoint from image. - - if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; - if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. - // If the linear resolution (in either direction) of the image is less than 256px - // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in - // scaling. - - var imgRes = { - x: w / extent.x, - y: h / extent.y - }; // We can do the actual drawing in one of three ways: - // - Call drawImage(). This is easy and fast, and results in smooth - // interpolation (bilinear?). This is what we want when we are - // reducing the image from its native size. - // - Call drawImage() with imageSmoothingEnabled=false. This is easy - // and fast and gives us nearest-neighbor interpolation, which is what - // we want when enlarging the image. However, it's unsupported on many - // browsers (including QtWebkit). - // - Do a manual nearest-neighbor interpolation. This is what we'll fall - // back to when enlarging, and imageSmoothingEnabled isn't supported. - // In theory it's slower, but still pretty fast on my machine, and the - // results look the same AFAICT. - // Is imageSmoothingEnabled supported? If so, we can let canvas do - // nearest-neighbor interpolation for us. - - var smoothingProperty = getCanvasSmoothingProperty(ctx); - - if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { - // Use built-in scaling - // Turn off anti-aliasing if necessary - if (smoothingProperty) { - ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; - } // Don't necessarily draw with the full-size image; if we're - // downscaling, use the mipmapper to get a pre-downscaled image - // (see comments on Mipmapper class for why this matters). - - - mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { - // It's possible that the image will go off the edge of the canvas-- - // that's OK, the canvas should clip appropriately. - ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert - // to rel pixel coords - (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just - // convert from size in tile coords straight to pixels - extent.x * 256, extent.y * 256); - }); - } else { - // Use manual nearest-neighbor interpolation - // Calculate the source image pixel coordinates that correspond with - // the top-left and bottom-right of this tile. (If the source image - // only partially overlaps the tile, we use max/min to limit the - // sourceStart/End to only reflect the overlapping portion.) - var sourceStart = { - x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), - y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) - }; - var sourceEnd = { - x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), - y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) - }; // The size, in dest pixels, that each source pixel should occupy. - // This might be greater or less than 1 (e.g. if x and y resolution - // are very different). - - var pixelSize = { - x: 256 / imgRes.x, - y: 256 / imgRes.y - }; // For each pixel in the source image that overlaps the tile... - - for (var row = sourceStart.y; row < sourceEnd.y; row++) { - for (var col = sourceStart.x; col < sourceEnd.x; col++) { - // ...extract the pixel data... - var i = (row * w + col) * 4; - var r = imgData[i]; - var g = imgData[i + 1]; - var b = imgData[i + 2]; - var a = imgData[i + 3]; - ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image - // where it should be drawn... - - var pixelPos = { - x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, - y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 - }; // ...and draw a rectangle there. - - ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from - // causing overlap between this rect and its neighbors. The - // minuend is the location of the next pixel, while the - // subtrahend is the position of the current pixel (to turn an - // absolute coordinate to a width/height). Yes, I had to look - // up minuend and subtrahend. - Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); - } - } - } - } catch (e) { - error = e; - } finally { - done(error, canvas); - } - }); - return canvas; - }; - - this.layerManager.addLayer(canvasTiles, "image", layerId, group); -}; - -methods.removeImage = function (layerId) { - this.layerManager.removeLayer("image", layerId); -}; - -methods.clearImages = function () { - this.layerManager.clearLayers("image"); -}; - -methods.addMeasure = function (options) { - // if a measureControl already exists, then remove it and - // replace with a new one - methods.removeMeasure.call(this); - this.measureControl = _leaflet2["default"].control.measure(options); - this.addControl(this.measureControl); -}; - -methods.removeMeasure = function () { - if (this.measureControl) { - this.removeControl(this.measureControl); - this.measureControl = null; - } -}; - -methods.addSelect = function (ctGroup) { - var _this8 = this; - - methods.removeSelect.call(this); - this._selectButton = _leaflet2["default"].easyButton({ - states: [{ - stateName: "select-inactive", - icon: "ion-qr-scanner", - title: "Make a selection", - onClick: function onClick(btn, map) { - btn.state("select-active"); - _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); - - if (ctGroup) { - var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); - selectionHandle.on("change", function (e) { - if (e.sender !== selectionHandle) { - if (_this8._locationFilter) { - _this8._locationFilter.disable(); - - btn.state("select-inactive"); - } - } - }); - - var handler = function handler(e) { - _this8.layerManager.brush(_this8._locationFilter.getBounds(), { - sender: selectionHandle - }); - }; - - _this8._locationFilter.on("enabled", handler); - - _this8._locationFilter.on("change", handler); - - _this8._locationFilter.on("disabled", function () { - selectionHandle.close(); - _this8._locationFilter = null; - }); - } - - _this8._locationFilter.addTo(map); - } - }, { - stateName: "select-active", - icon: "ion-close-round", - title: "Dismiss selection", - onClick: function onClick(btn, map) { - btn.state("select-inactive"); - - _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections - - - _this8.layerManager.unbrush(); - } - }] - }); - - this._selectButton.addTo(this); -}; - -methods.removeSelect = function () { - if (this._locationFilter) { - this._locationFilter.disable(); - } - - if (this._selectButton) { - this.removeControl(this._selectButton); - this._selectButton = null; - } -}; - -methods.createMapPane = function (name, zIndex) { - this.createPane(name); - this.getPane(name).style.zIndex = zIndex; -}; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// This class simulates a mipmap, which shrinks images by powers of two. This -// stepwise reduction results in "pixel-perfect downscaling" (where every -// pixel of the original image has some contribution to the downscaled image) -// as opposed to a single-step downscaling which will discard a lot of data -// (and with sparse images at small scales can give very surprising results). -var Mipmapper = /*#__PURE__*/function () { - function Mipmapper(img) { - _classCallCheck(this, Mipmapper); - - this._layers = [img]; - } // The various functions on this class take a callback function BUT MAY OR MAY - // NOT actually behave asynchronously. - - - _createClass(Mipmapper, [{ - key: "getBySize", - value: function getBySize(desiredWidth, desiredHeight, callback) { - var _this = this; - - var i = 0; - var lastImg = this._layers[0]; - - var testNext = function testNext() { - _this.getByIndex(i, function (img) { - // If current image is invalid (i.e. too small to be rendered) or - // it's smaller than what we wanted, return the last known good image. - if (!img || img.width < desiredWidth || img.height < desiredHeight) { - callback(lastImg); - return; - } else { - lastImg = img; - i++; - testNext(); - return; - } - }); - }; - - testNext(); - } - }, { - key: "getByIndex", - value: function getByIndex(i, callback) { - var _this2 = this; - - if (this._layers[i]) { - callback(this._layers[i]); - return; - } - - this.getByIndex(i - 1, function (prevImg) { - if (!prevImg) { - // prevImg could not be calculated (too small, possibly) - callback(null); - return; - } - - if (prevImg.width < 2 || prevImg.height < 2) { - // Can't reduce this image any further - callback(null); - return; - } // If reduce ever becomes truly asynchronous, we should stuff a promise or - // something into this._layers[i] before calling this.reduce(), to prevent - // redundant reduce operations from happening. - - - _this2.reduce(prevImg, function (reducedImg) { - _this2._layers[i] = reducedImg; - callback(reducedImg); - return; - }); - }); - } - }, { - key: "reduce", - value: function reduce(img, callback) { - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = Math.ceil(img.width / 2); - imgDataCanvas.height = Math.ceil(img.height / 2); - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - - try { - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); - callback(imgDataCanvas); - } finally { - document.body.removeChild(imgDataCanvas); - } - } - }]); - - return Mipmapper; -}(); - -exports["default"] = Mipmapper; - - -},{}],17:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.log = log; -exports.recycle = recycle; -exports.asArray = asArray; - -function log(message) { - /* eslint-disable no-console */ - if (console && console.log) console.log(message); - /* eslint-enable no-console */ -} - -function recycle(values, length, inPlace) { - if (length === 0 && !inPlace) return []; - - if (!(values instanceof Array)) { - if (inPlace) { - throw new Error("Can't do in-place recycling of a non-Array value"); - } - - values = [values]; - } - - if (typeof length === "undefined") length = values.length; - var dest = inPlace ? values : []; - var origLength = values.length; - - while (dest.length < length) { - dest.push(values[dest.length % origLength]); - } - - if (dest.length > length) { - dest.splice(length, dest.length - length); - } - - return dest; -} - -function asArray(value) { - if (value instanceof Array) return value;else return [value]; -} - - -},{}]},{},[13]); diff --git a/docs/articles/Applications_files/leaflet-providers-1.13.0/leaflet-providers_1.13.0.js b/docs/articles/Applications_files/leaflet-providers-1.13.0/leaflet-providers_1.13.0.js deleted file mode 100644 index e9986a9..0000000 --- a/docs/articles/Applications_files/leaflet-providers-1.13.0/leaflet-providers_1.13.0.js +++ /dev/null @@ -1,1100 +0,0 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['leaflet'], factory); - } else if (typeof modules === 'object' && module.exports) { - // define a Common JS module that relies on 'leaflet' - module.exports = factory(require('leaflet')); - } else { - // Assume Leaflet is loaded into global object L already - factory(L); - } -}(this, function (L) { - 'use strict'; - - L.TileLayer.Provider = L.TileLayer.extend({ - initialize: function (arg, options) { - var providers = L.TileLayer.Provider.providers; - - var parts = arg.split('.'); - - var providerName = parts[0]; - var variantName = parts[1]; - - if (!providers[providerName]) { - throw 'No such provider (' + providerName + ')'; - } - - var provider = { - url: providers[providerName].url, - options: providers[providerName].options - }; - - // overwrite values in provider from variant. - if (variantName && 'variants' in providers[providerName]) { - if (!(variantName in providers[providerName].variants)) { - throw 'No such variant of ' + providerName + ' (' + variantName + ')'; - } - var variant = providers[providerName].variants[variantName]; - var variantOptions; - if (typeof variant === 'string') { - variantOptions = { - variant: variant - }; - } else { - variantOptions = variant.options; - } - provider = { - url: variant.url || provider.url, - options: L.Util.extend({}, provider.options, variantOptions) - }; - } - - // replace attribution placeholders with their values from toplevel provider attribution, - // recursively - var attributionReplacer = function (attr) { - if (attr.indexOf('{attribution.') === -1) { - return attr; - } - return attr.replace(/\{attribution.(\w*)\}/g, - function (match, attributionName) { - return attributionReplacer(providers[attributionName].options.attribution); - } - ); - }; - provider.options.attribution = attributionReplacer(provider.options.attribution); - - // Compute final options combining provider options with any user overrides - var layerOpts = L.Util.extend({}, provider.options, options); - L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts); - } - }); - - /** - * Definition of providers. - * see http://leafletjs.com/reference.html#tilelayer for options in the options map. - */ - - L.TileLayer.Provider.providers = { - OpenStreetMap: { - url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: - '© OpenStreetMap contributors' - }, - variants: { - Mapnik: {}, - DE: { - url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', - options: { - maxZoom: 18 - } - }, - CH: { - url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - bounds: [[45, 5], [48, 11]] - } - }, - France: { - url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: '© OpenStreetMap France | {attribution.OpenStreetMap}' - } - }, - HOT: { - url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap}, ' + - 'Tiles style by Humanitarian OpenStreetMap Team ' + - 'hosted by OpenStreetMap France' - } - }, - BZH: { - url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', - options: { - attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', - bounds: [[46.2, -5.5], [50, 0.7]] - } - } - } - }, - OpenSeaMap: { - url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', - options: { - attribution: 'Map data: © OpenSeaMap contributors' - } - }, - OPNVKarte: { - url: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map memomaps.de CC-BY-SA, map data {attribution.OpenStreetMap}' - } - }, - OpenTopoMap: { - url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: {attribution.OpenStreetMap}, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' - } - }, - OpenRailwayMap: { - url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenRailwayMap (CC-BY-SA)' - } - }, - OpenFireMap: { - url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenFireMap (CC-BY-SA)' - } - }, - SafeCast: { - url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', - options: { - maxZoom: 16, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © SafeCast (CC-BY-SA)' - } - }, - Stadia: { - url: 'https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png', - options: { - maxZoom: 20, - attribution: '© Stadia Maps, © OpenMapTiles © OpenStreetMap contributors' - }, - variants: { - AlidadeSmooth: { - url: 'https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png' - }, - AlidadeSmoothDark: { - url: 'https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}{r}.png' - }, - OSMBright: { - url: 'https://tiles.stadiamaps.com/tiles/osm_bright/{z}/{x}/{y}{r}.png' - }, - Outdoors: { - url: 'https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}{r}.png' - } - } - }, - Thunderforest: { - url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}', - options: { - attribution: - '© Thunderforest, {attribution.OpenStreetMap}', - variant: 'cycle', - apikey: '', - maxZoom: 22 - }, - variants: { - OpenCycleMap: 'cycle', - Transport: { - options: { - variant: 'transport' - } - }, - TransportDark: { - options: { - variant: 'transport-dark' - } - }, - SpinalMap: { - options: { - variant: 'spinal-map' - } - }, - Landscape: 'landscape', - Outdoors: 'outdoors', - Pioneer: 'pioneer', - MobileAtlas: 'mobile-atlas', - Neighbourhood: 'neighbourhood' - } - }, - CyclOSM: { - url: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: 'CyclOSM | Map data: {attribution.OpenStreetMap}' - } - }, - Hydda: { - url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - variant: 'full', - attribution: 'Tiles courtesy of OpenStreetMap Sweden — Map data {attribution.OpenStreetMap}' - }, - variants: { - Full: 'full', - Base: 'base', - RoadsAndLabels: 'roads_and_labels' - } - }, - Jawg: { - url: 'https://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}', - options: { - attribution: - '© JawgMaps ' + - '{attribution.OpenStreetMap}', - minZoom: 0, - maxZoom: 22, - subdomains: 'abcd', - variant: 'jawg-terrain', - // Get your own Jawg access token here : https://www.jawg.io/lab/ - // NB : this is a demonstration key that comes with no guarantee - accessToken: '', - }, - variants: { - Streets: 'jawg-streets', - Terrain: 'jawg-terrain', - Sunny: 'jawg-sunny', - Dark: 'jawg-dark', - Light: 'jawg-light', - Matrix: 'jawg-matrix' - } - }, - MapBox: { - url: 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}', - options: { - attribution: - '© Mapbox ' + - '{attribution.OpenStreetMap} ' + - 'Improve this map', - tileSize: 512, - maxZoom: 18, - zoomOffset: -1, - id: 'mapbox/streets-v11', - accessToken: '', - } - }, - MapTiler: { - url: 'https://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}', - options: { - attribution: - '© MapTiler © OpenStreetMap contributors', - variant: 'streets', - ext: 'png', - key: '', - tileSize: 512, - zoomOffset: -1, - minZoom: 0, - maxZoom: 21 - }, - variants: { - Streets: 'streets', - Basic: 'basic', - Bright: 'bright', - Pastel: 'pastel', - Positron: 'positron', - Hybrid: { - options: { - variant: 'hybrid', - ext: 'jpg' - } - }, - Toner: 'toner', - Topo: 'topo', - Voyager: 'voyager' - } - }, - Stamen: { - url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}', - options: { - attribution: - 'Map tiles by Stamen Design, ' + - 'CC BY 3.0 — ' + - 'Map data {attribution.OpenStreetMap}', - subdomains: 'abcd', - minZoom: 0, - maxZoom: 20, - variant: 'toner', - ext: 'png' - }, - variants: { - Toner: 'toner', - TonerBackground: 'toner-background', - TonerHybrid: 'toner-hybrid', - TonerLines: 'toner-lines', - TonerLabels: 'toner-labels', - TonerLite: 'toner-lite', - Watercolor: { - url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}', - options: { - variant: 'watercolor', - ext: 'jpg', - minZoom: 1, - maxZoom: 16 - } - }, - Terrain: { - options: { - variant: 'terrain', - minZoom: 0, - maxZoom: 18 - } - }, - TerrainBackground: { - options: { - variant: 'terrain-background', - minZoom: 0, - maxZoom: 18 - } - }, - TerrainLabels: { - options: { - variant: 'terrain-labels', - minZoom: 0, - maxZoom: 18 - } - }, - TopOSMRelief: { - url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}', - options: { - variant: 'toposm-color-relief', - ext: 'jpg', - bounds: [[22, -132], [51, -56]] - } - }, - TopOSMFeatures: { - options: { - variant: 'toposm-features', - bounds: [[22, -132], [51, -56]], - opacity: 0.9 - } - } - } - }, - TomTom: { - url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}', - options: { - variant: 'basic', - maxZoom: 22, - attribution: - '© 1992 - ' + new Date().getFullYear() + ' TomTom. ', - subdomains: 'abcd', - style: 'main', - ext: 'png', - apikey: '', - }, - variants: { - Basic: 'basic', - Hybrid: 'hybrid', - Labels: 'labels' - } - }, - Esri: { - url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}', - options: { - variant: 'World_Street_Map', - attribution: 'Tiles © Esri' - }, - variants: { - WorldStreetMap: { - options: { - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012' - } - }, - DeLorme: { - options: { - variant: 'Specialty/DeLorme_World_Base_Map', - minZoom: 1, - maxZoom: 11, - attribution: '{attribution.Esri} — Copyright: ©2012 DeLorme' - } - }, - WorldTopoMap: { - options: { - variant: 'World_Topo_Map', - attribution: - '{attribution.Esri} — ' + - 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' - } - }, - WorldImagery: { - options: { - variant: 'World_Imagery', - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' - } - }, - WorldTerrain: { - options: { - variant: 'World_Terrain_Base', - maxZoom: 13, - attribution: - '{attribution.Esri} — ' + - 'Source: USGS, Esri, TANA, DeLorme, and NPS' - } - }, - WorldShadedRelief: { - options: { - variant: 'World_Shaded_Relief', - maxZoom: 13, - attribution: '{attribution.Esri} — Source: Esri' - } - }, - WorldPhysical: { - options: { - variant: 'World_Physical_Map', - maxZoom: 8, - attribution: '{attribution.Esri} — Source: US National Park Service' - } - }, - OceanBasemap: { - options: { - variant: 'Ocean_Basemap', - maxZoom: 13, - attribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri' - } - }, - NatGeoWorldMap: { - options: { - variant: 'NatGeo_World_Map', - maxZoom: 16, - attribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC' - } - }, - WorldGrayCanvas: { - options: { - variant: 'Canvas/World_Light_Gray_Base', - maxZoom: 16, - attribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ' - } - } - } - }, - OpenWeatherMap: { - url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}', - options: { - maxZoom: 19, - attribution: 'Map data © OpenWeatherMap', - apiKey: '', - opacity: 0.5 - }, - variants: { - Clouds: 'clouds', - CloudsClassic: 'clouds_cls', - Precipitation: 'precipitation', - PrecipitationClassic: 'precipitation_cls', - Rain: 'rain', - RainClassic: 'rain_cls', - Pressure: 'pressure', - PressureContour: 'pressure_cntr', - Wind: 'wind', - Temperature: 'temp', - Snow: 'snow' - } - }, - HERE: { - /* - * HERE maps, formerly Nokia maps. - * These basemaps are free, but you need an api id and app key. Please sign up at - * https://developer.here.com/plans - */ - url: - 'https://{s}.{base}.maps.api.here.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'app_id={app_id}&app_code={app_code}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - 'app_id': '', - 'app_code': '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalDayTraffic: { - options: { - variant: 'normal.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - hybridDayTraffic: { - options: { - variant: 'hybrid.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - HEREv3: { - /* - * HERE maps API Version 3. - * These basemaps are free, but you need an API key. Please sign up at - * https://developer.here.com/plans - * Version 3 deprecates the app_id and app_code access in favor of apiKey - * - * Supported access methods as of 2019/12/21: - * @see https://developer.here.com/faqs#access-control-1--how-do-you-control-access-to-here-location-services - */ - url: - 'https://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'apiKey={apiKey}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - apiKey: '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - FreeMapSK: { - url: 'https://{s}.freemap.sk/T/{z}/{x}/{y}.jpeg', - options: { - minZoom: 8, - maxZoom: 16, - subdomains: 'abcd', - bounds: [[47.204642, 15.996093], [49.830896, 22.576904]], - attribution: - '{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 Freemap.sk' - } - }, - MtbMap: { - url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap} & USGS' - } - }, - CartoDB: { - url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png', - options: { - attribution: '{attribution.OpenStreetMap} © CARTO', - subdomains: 'abcd', - maxZoom: 20, - variant: 'light_all' - }, - variants: { - Positron: 'light_all', - PositronNoLabels: 'light_nolabels', - PositronOnlyLabels: 'light_only_labels', - DarkMatter: 'dark_all', - DarkMatterNoLabels: 'dark_nolabels', - DarkMatterOnlyLabels: 'dark_only_labels', - Voyager: 'rastertiles/voyager', - VoyagerNoLabels: 'rastertiles/voyager_nolabels', - VoyagerOnlyLabels: 'rastertiles/voyager_only_labels', - VoyagerLabelsUnder: 'rastertiles/voyager_labels_under' - } - }, - HikeBike: { - url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: '{attribution.OpenStreetMap}', - variant: 'hikebike' - }, - variants: { - HikeBike: {}, - HillShading: { - options: { - maxZoom: 15, - variant: 'hillshading' - } - } - } - }, - BasemapAT: { - url: 'https://maps{s}.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}', - options: { - maxZoom: 19, - attribution: 'Datenquelle: basemap.at', - subdomains: ['', '1', '2', '3', '4'], - type: 'normal', - format: 'png', - bounds: [[46.358770, 8.782379], [49.037872, 17.189532]], - variant: 'geolandbasemap' - }, - variants: { - basemap: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'geolandbasemap' - } - }, - grau: 'bmapgrau', - overlay: 'bmapoverlay', - terrain: { - options: { - variant: 'bmapgelaende', - type: 'grau', - format: 'jpeg' - } - }, - surface: { - options: { - variant: 'bmapoberflaeche', - type: 'grau', - format: 'jpeg' - } - }, - highdpi: { - options: { - variant: 'bmaphidpi', - format: 'jpeg' - } - }, - orthofoto: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'bmaporthofoto30cm', - format: 'jpeg' - } - } - } - }, - nlmaps: { - url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png', - options: { - minZoom: 6, - maxZoom: 19, - bounds: [[50.5, 3.25], [54, 7.6]], - attribution: 'Kaartgegevens © Kadaster' - }, - variants: { - 'standaard': 'brtachtergrondkaart', - 'pastel': 'brtachtergrondkaartpastel', - 'grijs': 'brtachtergrondkaartgrijs', - 'luchtfoto': { - 'url': 'https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg', - } - } - }, - NASAGIBS: { - url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}', - options: { - attribution: - 'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' + - '(ESDIS) with funding provided by NASA/HQ.', - bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]], - minZoom: 1, - maxZoom: 9, - format: 'jpg', - time: '', - tilematrixset: 'GoogleMapsCompatible_Level' - }, - variants: { - ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor', - ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367', - ViirsEarthAtNight2012: { - options: { - variant: 'VIIRS_CityLights_2012', - maxZoom: 8 - } - }, - ModisTerraLSTDay: { - options: { - variant: 'MODIS_Terra_Land_Surface_Temp_Day', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - }, - ModisTerraSnowCover: { - options: { - variant: 'MODIS_Terra_NDSI_Snow_Cover', - format: 'png', - maxZoom: 8, - opacity: 0.75 - } - }, - ModisTerraAOD: { - options: { - variant: 'MODIS_Terra_Aerosol', - format: 'png', - maxZoom: 6, - opacity: 0.75 - } - }, - ModisTerraChlorophyll: { - options: { - variant: 'MODIS_Terra_Chlorophyll_A', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - } - } - }, - NLS: { - // NLS maps are copyright National library of Scotland. - // http://maps.nls.uk/projects/api/index.html - // Please contact NLS for anything other than non-commercial low volume usage - // - // Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s - // z0-9 - 1:1m - // z10-11 - quarter inch (1:253440) - // z12-18 - one inch (1:63360) - url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg', - options: { - attribution: 'National Library of Scotland Historic Maps', - bounds: [[49.6, -12], [61.7, 3]], - minZoom: 1, - maxZoom: 18, - subdomains: '0123', - } - }, - JusticeMap: { - // Justice Map (http://www.justicemap.org/) - // Visualize race and income data for your community, county and country. - // Includes tools for data journalists, bloggers and community activists. - url: 'https://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png', - options: { - attribution: 'Justice Map', - // one of 'county', 'tract', 'block' - size: 'county', - // Bounds for USA, including Alaska and Hawaii - bounds: [[14, -180], [72, -56]] - }, - variants: { - income: 'income', - americanIndian: 'indian', - asian: 'asian', - black: 'black', - hispanic: 'hispanic', - multi: 'multi', - nonWhite: 'nonwhite', - white: 'white', - plurality: 'plural' - } - }, - GeoportailFrance: { - url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', - options: { - attribution: 'Geoportail France', - bounds: [[-75, -180], [81, 180]], - minZoom: 2, - maxZoom: 18, - // Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/ - // NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee - apikey: 'choisirgeoportail', - format: 'image/png', - style: 'normal', - variant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2' - }, - variants: { - plan: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', - parcels: { - options: { - variant: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS', - style: 'PCI vecteur', - maxZoom: 20 - } - }, - orthos: { - options: { - maxZoom: 19, - format: 'image/jpeg', - variant: 'ORTHOIMAGERY.ORTHOPHOTOS' - } - } - } - }, - OneMapSG: { - url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png', - options: { - variant: 'Default', - minZoom: 11, - maxZoom: 18, - bounds: [[1.56073, 104.11475], [1.16, 103.502]], - attribution: ' New OneMap | Map data © contributors, Singapore Land Authority' - }, - variants: { - Default: 'Default', - Night: 'Night', - Original: 'Original', - Grey: 'Grey', - LandLot: 'LandLot' - } - }, - USGS: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', - options: { - maxZoom: 20, - attribution: 'Tiles courtesy of the U.S. Geological Survey' - }, - variants: { - USTopo: {}, - USImagery: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}' - }, - USImageryTopo: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}' - } - } - }, - WaymarkedTrails: { - url: 'https://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © waymarkedtrails.org (CC-BY-SA)' - }, - variants: { - hiking: 'hiking', - cycling: 'cycling', - mtb: 'mtb', - slopes: 'slopes', - riding: 'riding', - skating: 'skating' - } - }, - OpenAIP: { - url: 'https://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}', - options: { - attribution: 'openAIP Data (CC-BY-NC-SA)', - ext: 'png', - minZoom: 4, - maxZoom: 14, - tms: true, - detectRetina: true, - subdomains: '12' - } - }, - OpenSnowMap: { - url: 'https://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.png', - options: { - minZoom: 9, - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} & ODbL, © www.opensnowmap.org CC-BY-SA' - }, - variants: { - pistes: 'pistes', - } - }, - AzureMaps: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}'+ - '&subscription-key={subscriptionKey}', - options: { - attribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview for details.', - apiVersion: '2.0', - variant: 'microsoft.imagery', - subscriptionKey: '', - language: 'en-US', - }, - variants: { - MicrosoftImagery: 'microsoft.imagery', - MicrosoftBaseDarkGrey: 'microsoft.base.darkgrey', - MicrosoftBaseRoad: 'microsoft.base.road', - MicrosoftBaseHybridRoad: 'microsoft.base.hybrid.road', - MicrosoftTerraMain: 'microsoft.terra.main', - MicrosoftWeatherInfraredMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview#uri-parameters for details.', - variant: 'microsoft.weather.infrared.main', - }, - }, - MicrosoftWeatherRadarMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview#uri-parameters for details.', - variant: 'microsoft.weather.radar.main', - }, - } - }, - } - }; - - L.tileLayer.provider = function (provider, options) { - return new L.TileLayer.Provider(provider, options); - }; - - return L; -})); diff --git a/docs/articles/Applications_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js b/docs/articles/Applications_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js deleted file mode 100644 index e842c82..0000000 --- a/docs/articles/Applications_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js +++ /dev/null @@ -1,855 +0,0 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['leaflet'], factory); - } else if (typeof modules === 'object' && module.exports) { - // define a Common JS module that relies on 'leaflet' - module.exports = factory(require('leaflet')); - } else { - // Assume Leaflet is loaded into global object L already - factory(L); - } -}(this, function (L) { - 'use strict'; - - L.TileLayer.Provider = L.TileLayer.extend({ - initialize: function (arg, options) { - var providers = L.TileLayer.Provider.providers; - - var parts = arg.split('.'); - - var providerName = parts[0]; - var variantName = parts[1]; - - if (!providers[providerName]) { - throw 'No such provider (' + providerName + ')'; - } - - var provider = { - url: providers[providerName].url, - options: providers[providerName].options - }; - - // overwrite values in provider from variant. - if (variantName && 'variants' in providers[providerName]) { - if (!(variantName in providers[providerName].variants)) { - throw 'No such variant of ' + providerName + ' (' + variantName + ')'; - } - var variant = providers[providerName].variants[variantName]; - var variantOptions; - if (typeof variant === 'string') { - variantOptions = { - variant: variant - }; - } else { - variantOptions = variant.options; - } - provider = { - url: variant.url || provider.url, - options: L.Util.extend({}, provider.options, variantOptions) - }; - } - - // replace attribution placeholders with their values from toplevel provider attribution, - // recursively - var attributionReplacer = function (attr) { - if (attr.indexOf('{attribution.') === -1) { - return attr; - } - return attr.replace(/\{attribution.(\w*)\}/g, - function (match, attributionName) { - return attributionReplacer(providers[attributionName].options.attribution); - } - ); - }; - provider.options.attribution = attributionReplacer(provider.options.attribution); - - // Compute final options combining provider options with any user overrides - var layerOpts = L.Util.extend({}, provider.options, options); - L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts); - } - }); - - /** - * Definition of providers. - * see http://leafletjs.com/reference.html#tilelayer for options in the options map. - */ - - L.TileLayer.Provider.providers = { - OpenStreetMap: { - url: '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: - '© OpenStreetMap contributors' - }, - variants: { - Mapnik: {}, - DE: { - url: '//{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', - options: { - maxZoom: 18 - } - }, - CH: { - url: '//tile.osm.ch/switzerland/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - bounds: [[45, 5], [48, 11]] - } - }, - France: { - url: '//{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: '© Openstreetmap France | {attribution.OpenStreetMap}' - } - }, - HOT: { - url: '//{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap}, ' + - 'Tiles style by Humanitarian OpenStreetMap Team ' + - 'hosted by OpenStreetMap France' - } - }, - BZH: { - url: '//tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', - options: { - attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', - bounds: [[46.2, -5.5], [50, 0.7]] - } - } - } - }, - OpenSeaMap: { - url: '//tiles.openseamap.org/seamark/{z}/{x}/{y}.png', - options: { - attribution: 'Map data: © OpenSeaMap contributors' - } - }, - OpenPtMap: { - url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: © OpenPtMap contributors' - } - }, - OpenTopoMap: { - url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: {attribution.OpenStreetMap}, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' - } - }, - OpenRailwayMap: { - url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenRailwayMap (CC-BY-SA)' - } - }, - OpenFireMap: { - url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenFireMap (CC-BY-SA)' - } - }, - SafeCast: { - url: '//s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', - options: { - maxZoom: 16, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © SafeCast (CC-BY-SA)' - } - }, - Thunderforest: { - url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}', - options: { - attribution: - '© Thunderforest, {attribution.OpenStreetMap}', - variant: 'cycle', - apikey: '', - maxZoom: 22 - }, - variants: { - OpenCycleMap: 'cycle', - Transport: { - options: { - variant: 'transport' - } - }, - TransportDark: { - options: { - variant: 'transport-dark' - } - }, - SpinalMap: { - options: { - variant: 'spinal-map' - } - }, - Landscape: 'landscape', - Outdoors: 'outdoors', - Pioneer: 'pioneer', - MobileAtlas: 'mobile-atlas', - Neighbourhood: 'neighbourhood' - } - }, - OpenMapSurfer: { - url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - variant: 'roads', - attribution: 'Imagery from GIScience Research Group @ University of Heidelberg | Map data ' - }, - variants: { - Roads: { - options: { - variant: 'roads', - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - }, - Hybrid: { - options: { - variant: 'hybrid', - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - }, - AdminBounds: { - options: { - variant: 'adminb', - maxZoom: 18, - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - }, - ContourLines: { - options: { - variant: 'asterc', - maxZoom: 18, - minZoom: 13, - attribution: '{attribution.OpenMapSurfer} ASTER GDEM' - } - }, - Hillshade: { - options: { - variant: 'asterh', - maxZoom: 18, - attribution: '{attribution.OpenMapSurfer} ASTER GDEM, SRTM' - } - }, - ElementsAtRisk: { - options: { - variant: 'elements_at_risk', - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - } - } - }, - Hydda: { - url: '//{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - variant: 'full', - attribution: 'Tiles courtesy of OpenStreetMap Sweden — Map data {attribution.OpenStreetMap}' - }, - variants: { - Full: 'full', - Base: 'base', - RoadsAndLabels: 'roads_and_labels' - } - }, - MapBox: { - url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}', - options: { - attribution: - '© Mapbox ' + - '{attribution.OpenStreetMap} ' + - 'Improve this map', - subdomains: 'abcd', - id: 'mapbox.streets', - accessToken: '', - } - }, - Stamen: { - url: '//stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}', - options: { - attribution: - 'Map tiles by Stamen Design, ' + - 'CC BY 3.0 — ' + - 'Map data {attribution.OpenStreetMap}', - subdomains: 'abcd', - minZoom: 0, - maxZoom: 20, - variant: 'toner', - ext: 'png' - }, - variants: { - Toner: 'toner', - TonerBackground: 'toner-background', - TonerHybrid: 'toner-hybrid', - TonerLines: 'toner-lines', - TonerLabels: 'toner-labels', - TonerLite: 'toner-lite', - Watercolor: { - url: '//stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}', - options: { - variant: 'watercolor', - ext: 'jpg', - minZoom: 1, - maxZoom: 16 - } - }, - Terrain: { - options: { - variant: 'terrain', - minZoom: 0, - maxZoom: 18 - } - }, - TerrainBackground: { - options: { - variant: 'terrain-background', - minZoom: 0, - maxZoom: 18 - } - }, - TerrainLabels: { - options: { - variant: 'terrain-labels', - minZoom: 0, - maxZoom: 18 - } - }, - TopOSMRelief: { - url: '//stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}', - options: { - variant: 'toposm-color-relief', - ext: 'jpg', - bounds: [[22, -132], [51, -56]] - } - }, - TopOSMFeatures: { - options: { - variant: 'toposm-features', - bounds: [[22, -132], [51, -56]], - opacity: 0.9 - } - } - } - }, - TomTom: { - url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}', - options: { - variant: 'basic', - maxZoom: 22, - attribution: - '© 1992 - ' + new Date().getFullYear() + ' TomTom. ', - subdomains: 'abcd', - style: 'main', - ext: 'png', - apikey: '', - }, - variants: { - Basic: 'basic', - Hybrid: 'hybrid', - Labels: 'labels' - } - }, - Esri: { - url: '//server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}', - options: { - variant: 'World_Street_Map', - attribution: 'Tiles © Esri' - }, - variants: { - WorldStreetMap: { - options: { - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012' - } - }, - DeLorme: { - options: { - variant: 'Specialty/DeLorme_World_Base_Map', - minZoom: 1, - maxZoom: 11, - attribution: '{attribution.Esri} — Copyright: ©2012 DeLorme' - } - }, - WorldTopoMap: { - options: { - variant: 'World_Topo_Map', - attribution: - '{attribution.Esri} — ' + - 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' - } - }, - WorldImagery: { - options: { - variant: 'World_Imagery', - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' - } - }, - WorldTerrain: { - options: { - variant: 'World_Terrain_Base', - maxZoom: 13, - attribution: - '{attribution.Esri} — ' + - 'Source: USGS, Esri, TANA, DeLorme, and NPS' - } - }, - WorldShadedRelief: { - options: { - variant: 'World_Shaded_Relief', - maxZoom: 13, - attribution: '{attribution.Esri} — Source: Esri' - } - }, - WorldPhysical: { - options: { - variant: 'World_Physical_Map', - maxZoom: 8, - attribution: '{attribution.Esri} — Source: US National Park Service' - } - }, - OceanBasemap: { - options: { - variant: 'Ocean_Basemap', - maxZoom: 13, - attribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri' - } - }, - NatGeoWorldMap: { - options: { - variant: 'NatGeo_World_Map', - maxZoom: 16, - attribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC' - } - }, - WorldGrayCanvas: { - options: { - variant: 'Canvas/World_Light_Gray_Base', - maxZoom: 16, - attribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ' - } - } - } - }, - OpenWeatherMap: { - url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}', - options: { - maxZoom: 19, - attribution: 'Map data © OpenWeatherMap', - apiKey:'', - opacity: 0.5 - }, - variants: { - Clouds: 'clouds', - CloudsClassic: 'clouds_cls', - Precipitation: 'precipitation', - PrecipitationClassic: 'precipitation_cls', - Rain: 'rain', - RainClassic: 'rain_cls', - Pressure: 'pressure', - PressureContour: 'pressure_cntr', - Wind: 'wind', - Temperature: 'temp', - Snow: 'snow' - } - }, - HERE: { - /* - * HERE maps, formerly Nokia maps. - * These basemaps are free, but you need an API key. Please sign up at - * https://developer.here.com/plans - */ - url: - 'https://{s}.{base}.maps.api.here.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'app_id={app_id}&app_code={app_code}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - 'app_id': '', - 'app_code': '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalDayTraffic: { - options: { - variant: 'normal.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - hybridDayTraffic: { - options: { - variant: 'hybrid.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - FreeMapSK: { - url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg', - options: { - minZoom: 8, - maxZoom: 16, - subdomains: '1234', - bounds: [[47.204642, 15.996093], [49.830896, 22.576904]], - attribution: - '{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 Freemap.sk' - } - }, - MtbMap: { - url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap} & USGS' - } - }, - CartoDB: { - url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png', - options: { - attribution: '{attribution.OpenStreetMap} © CARTO', - subdomains: 'abcd', - maxZoom: 19, - variant: 'light_all' - }, - variants: { - Positron: 'light_all', - PositronNoLabels: 'light_nolabels', - PositronOnlyLabels: 'light_only_labels', - DarkMatter: 'dark_all', - DarkMatterNoLabels: 'dark_nolabels', - DarkMatterOnlyLabels: 'dark_only_labels', - Voyager: 'rastertiles/voyager', - VoyagerNoLabels: 'rastertiles/voyager_nolabels', - VoyagerOnlyLabels: 'rastertiles/voyager_only_labels', - VoyagerLabelsUnder: 'rastertiles/voyager_labels_under' - } - }, - HikeBike: { - url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: '{attribution.OpenStreetMap}', - variant: 'hikebike' - }, - variants: { - HikeBike: {}, - HillShading: { - options: { - maxZoom: 15, - variant: 'hillshading' - } - } - } - }, - BasemapAT: { - url: '//maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}', - options: { - maxZoom: 19, - attribution: 'Datenquelle: basemap.at', - subdomains: ['', '1', '2', '3', '4'], - format: 'png', - bounds: [[46.358770, 8.782379], [49.037872, 17.189532]], - variant: 'geolandbasemap' - }, - variants: { - basemap: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'geolandbasemap' - } - }, - grau: 'bmapgrau', - overlay: 'bmapoverlay', - highdpi: { - options: { - variant: 'bmaphidpi', - format: 'jpeg' - } - }, - orthofoto: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'bmaporthofoto30cm', - format: 'jpeg' - } - } - } - }, - nlmaps: { - url: '//geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png', - options: { - minZoom: 6, - maxZoom: 19, - bounds: [[50.5, 3.25], [54, 7.6]], - attribution: 'Kaartgegevens © Kadaster' - }, - variants: { - 'standaard': 'brtachtergrondkaart', - 'pastel': 'brtachtergrondkaartpastel', - 'grijs': 'brtachtergrondkaartgrijs', - 'luchtfoto': { - 'url': '//geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png', - } - } - }, - NASAGIBS: { - url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}', - options: { - attribution: - 'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' + - '(ESDIS) with funding provided by NASA/HQ.', - bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]], - minZoom: 1, - maxZoom: 9, - format: 'jpg', - time: '', - tilematrixset: 'GoogleMapsCompatible_Level' - }, - variants: { - ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor', - ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367', - ViirsEarthAtNight2012: { - options: { - variant: 'VIIRS_CityLights_2012', - maxZoom: 8 - } - }, - ModisTerraLSTDay: { - options: { - variant: 'MODIS_Terra_Land_Surface_Temp_Day', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - }, - ModisTerraSnowCover: { - options: { - variant: 'MODIS_Terra_Snow_Cover', - format: 'png', - maxZoom: 8, - opacity: 0.75 - } - }, - ModisTerraAOD: { - options: { - variant: 'MODIS_Terra_Aerosol', - format: 'png', - maxZoom: 6, - opacity: 0.75 - } - }, - ModisTerraChlorophyll: { - options: { - variant: 'MODIS_Terra_Chlorophyll_A', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - } - } - }, - NLS: { - // NLS maps are copyright National library of Scotland. - // http://maps.nls.uk/projects/api/index.html - // Please contact NLS for anything other than non-commercial low volume usage - // - // Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s - // z0-9 - 1:1m - // z10-11 - quarter inch (1:253440) - // z12-18 - one inch (1:63360) - url: '//nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg', - options: { - attribution: 'National Library of Scotland Historic Maps', - bounds: [[49.6, -12], [61.7, 3]], - minZoom: 1, - maxZoom: 18, - subdomains: '0123', - } - }, - JusticeMap: { - // Justice Map (http://www.justicemap.org/) - // Visualize race and income data for your community, county and country. - // Includes tools for data journalists, bloggers and community activists. - url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png', - options: { - attribution: 'Justice Map', - // one of 'county', 'tract', 'block' - size: 'county', - // Bounds for USA, including Alaska and Hawaii - bounds: [[14, -180], [72, -56]] - }, - variants: { - income: 'income', - americanIndian: 'indian', - asian: 'asian', - black: 'black', - hispanic: 'hispanic', - multi: 'multi', - nonWhite: 'nonwhite', - white: 'white', - plurality: 'plural' - } - }, - Wikimedia: { - url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png', - options: { - attribution: 'Wikimedia', - minZoom: 1, - maxZoom: 19 - } - }, - GeoportailFrance: { - url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', - options: { - attribution: 'Geoportail France', - bounds: [[-75, -180], [81, 180]], - minZoom: 2, - maxZoom: 18, - // Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/ - // NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee - apikey: 'choisirgeoportail', - format: 'image/jpeg', - style : 'normal', - variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD' - }, - variants: { - parcels: { - options : { - variant: 'CADASTRALPARCELS.PARCELS', - maxZoom: 20, - style : 'bdparcellaire', - format: 'image/png' - } - }, - ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS', - maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD', - orthos: { - options: { - maxZoom: 19, - variant: 'ORTHOIMAGERY.ORTHOPHOTOS' - } - } - } - }, - OneMapSG: { - url: '//maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png', - options: { - variant: 'Default', - minZoom: 11, - maxZoom: 18, - bounds: [[1.56073, 104.11475], [1.16, 103.502]], - attribution: ' New OneMap | Map data © contributors, Singapore Land Authority' - }, - variants: { - Default: 'Default', - Night: 'Night', - Original: 'Original', - Grey: 'Grey', - LandLot: 'LandLot' - } - } - }; - - L.tileLayer.provider = function (provider, options) { - return new L.TileLayer.Provider(provider, options); - }; - - return L; -})); diff --git a/docs/articles/Applications_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js b/docs/articles/Applications_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js deleted file mode 100644 index bcde1ed..0000000 --- a/docs/articles/Applications_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js +++ /dev/null @@ -1,1178 +0,0 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['leaflet'], factory); - } else if (typeof modules === 'object' && module.exports) { - // define a Common JS module that relies on 'leaflet' - module.exports = factory(require('leaflet')); - } else { - // Assume Leaflet is loaded into global object L already - factory(L); - } -}(this, function (L) { - 'use strict'; - - L.TileLayer.Provider = L.TileLayer.extend({ - initialize: function (arg, options) { - var providers = L.TileLayer.Provider.providers; - - var parts = arg.split('.'); - - var providerName = parts[0]; - var variantName = parts[1]; - - if (!providers[providerName]) { - throw 'No such provider (' + providerName + ')'; - } - - var provider = { - url: providers[providerName].url, - options: providers[providerName].options - }; - - // overwrite values in provider from variant. - if (variantName && 'variants' in providers[providerName]) { - if (!(variantName in providers[providerName].variants)) { - throw 'No such variant of ' + providerName + ' (' + variantName + ')'; - } - var variant = providers[providerName].variants[variantName]; - var variantOptions; - if (typeof variant === 'string') { - variantOptions = { - variant: variant - }; - } else { - variantOptions = variant.options; - } - provider = { - url: variant.url || provider.url, - options: L.Util.extend({}, provider.options, variantOptions) - }; - } - - // replace attribution placeholders with their values from toplevel provider attribution, - // recursively - var attributionReplacer = function (attr) { - if (attr.indexOf('{attribution.') === -1) { - return attr; - } - return attr.replace(/\{attribution.(\w*)\}/g, - function (match, attributionName) { - return attributionReplacer(providers[attributionName].options.attribution); - } - ); - }; - provider.options.attribution = attributionReplacer(provider.options.attribution); - - // Compute final options combining provider options with any user overrides - var layerOpts = L.Util.extend({}, provider.options, options); - L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts); - } - }); - - /** - * Definition of providers. - * see http://leafletjs.com/reference.html#tilelayer for options in the options map. - */ - - L.TileLayer.Provider.providers = { - OpenStreetMap: { - url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: - '© OpenStreetMap contributors' - }, - variants: { - Mapnik: {}, - DE: { - url: 'https://tile.openstreetmap.de/{z}/{x}/{y}.png', - options: { - maxZoom: 18 - } - }, - CH: { - url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - bounds: [[45, 5], [48, 11]] - } - }, - France: { - url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: '© OpenStreetMap France | {attribution.OpenStreetMap}' - } - }, - HOT: { - url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap}, ' + - 'Tiles style by Humanitarian OpenStreetMap Team ' + - 'hosted by OpenStreetMap France' - } - }, - BZH: { - url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', - options: { - attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', - bounds: [[46.2, -5.5], [50, 0.7]] - } - } - } - }, - MapTilesAPI: { - url: 'https://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}', - options: { - attribution: - '© MapTiles API, {attribution.OpenStreetMap}', - variant: 'en/map/v1', - // Get your own MapTiles API access token here : https://www.maptilesapi.com/ - // NB : this is a demonstration key that comes with no guarantee and not to be used in production - apikey: '', - maxZoom: 19 - }, - variants: { - OSMEnglish: { - options: { - variant: 'en/map/v1' - } - }, - OSMFrancais: { - options: { - variant: 'fr/map/v1' - } - }, - OSMEspagnol: { - options: { - variant: 'es/map/v1' - } - } - } - }, - OpenSeaMap: { - url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', - options: { - attribution: 'Map data: © OpenSeaMap contributors' - } - }, - OPNVKarte: { - url: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map memomaps.de CC-BY-SA, map data {attribution.OpenStreetMap}' - } - }, - OpenTopoMap: { - url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: {attribution.OpenStreetMap}, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' - } - }, - OpenRailwayMap: { - url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenRailwayMap (CC-BY-SA)' - } - }, - OpenFireMap: { - url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenFireMap (CC-BY-SA)' - } - }, - SafeCast: { - url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', - options: { - maxZoom: 16, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © SafeCast (CC-BY-SA)' - } - }, - Stadia: { - url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}', - options: { - minZoom: 0, - maxZoom: 20, - attribution: - '© Stadia Maps ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'alidade_smooth', - ext: 'png' - }, - variants: { - AlidadeSmooth: 'alidade_smooth', - AlidadeSmoothDark: 'alidade_smooth_dark', - OSMBright: 'osm_bright', - Outdoors: 'outdoors', - StamenToner: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner' - } - }, - StamenTonerBackground: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_background' - } - }, - StamenTonerLines: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_lines' - } - }, - StamenTonerLabels: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_labels' - } - }, - StamenTonerLite: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_lite' - } - }, - StamenWatercolor: { - url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}.{ext}', - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_watercolor', - ext: 'jpg', - minZoom: 1, - maxZoom: 16 - } - }, - StamenTerrain: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainBackground: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_background', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainLabels: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_labels', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainLines: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_lines', - minZoom: 0, - maxZoom: 18 - } - } - } - }, - Thunderforest: { - url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}', - options: { - attribution: - '© Thunderforest, {attribution.OpenStreetMap}', - variant: 'cycle', - apikey: '', - maxZoom: 22 - }, - variants: { - OpenCycleMap: 'cycle', - Transport: { - options: { - variant: 'transport' - } - }, - TransportDark: { - options: { - variant: 'transport-dark' - } - }, - SpinalMap: { - options: { - variant: 'spinal-map' - } - }, - Landscape: 'landscape', - Outdoors: 'outdoors', - Pioneer: 'pioneer', - MobileAtlas: 'mobile-atlas', - Neighbourhood: 'neighbourhood' - } - }, - CyclOSM: { - url: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: 'CyclOSM | Map data: {attribution.OpenStreetMap}' - } - }, - Jawg: { - url: 'https://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}', - options: { - attribution: - '© JawgMaps ' + - '{attribution.OpenStreetMap}', - minZoom: 0, - maxZoom: 22, - subdomains: 'abcd', - variant: 'jawg-terrain', - // Get your own Jawg access token here : https://www.jawg.io/lab/ - // NB : this is a demonstration key that comes with no guarantee - accessToken: '', - }, - variants: { - Streets: 'jawg-streets', - Terrain: 'jawg-terrain', - Sunny: 'jawg-sunny', - Dark: 'jawg-dark', - Light: 'jawg-light', - Matrix: 'jawg-matrix' - } - }, - MapBox: { - url: 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}', - options: { - attribution: - '© Mapbox ' + - '{attribution.OpenStreetMap} ' + - 'Improve this map', - tileSize: 512, - maxZoom: 18, - zoomOffset: -1, - id: 'mapbox/streets-v11', - accessToken: '', - } - }, - MapTiler: { - url: 'https://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}', - options: { - attribution: - '© MapTiler © OpenStreetMap contributors', - variant: 'streets', - ext: 'png', - key: '', - tileSize: 512, - zoomOffset: -1, - minZoom: 0, - maxZoom: 21 - }, - variants: { - Streets: 'streets', - Basic: 'basic', - Bright: 'bright', - Pastel: 'pastel', - Positron: 'positron', - Hybrid: { - options: { - variant: 'hybrid', - ext: 'jpg' - } - }, - Toner: 'toner', - Topo: 'topo', - Voyager: 'voyager' - } - }, - TomTom: { - url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}', - options: { - variant: 'basic', - maxZoom: 22, - attribution: - '© 1992 - ' + new Date().getFullYear() + ' TomTom. ', - subdomains: 'abcd', - style: 'main', - ext: 'png', - apikey: '', - }, - variants: { - Basic: 'basic', - Hybrid: 'hybrid', - Labels: 'labels' - } - }, - Esri: { - url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}', - options: { - variant: 'World_Street_Map', - attribution: 'Tiles © Esri' - }, - variants: { - WorldStreetMap: { - options: { - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012' - } - }, - DeLorme: { - options: { - variant: 'Specialty/DeLorme_World_Base_Map', - minZoom: 1, - maxZoom: 11, - attribution: '{attribution.Esri} — Copyright: ©2012 DeLorme' - } - }, - WorldTopoMap: { - options: { - variant: 'World_Topo_Map', - attribution: - '{attribution.Esri} — ' + - 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' - } - }, - WorldImagery: { - options: { - variant: 'World_Imagery', - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' - } - }, - WorldTerrain: { - options: { - variant: 'World_Terrain_Base', - maxZoom: 13, - attribution: - '{attribution.Esri} — ' + - 'Source: USGS, Esri, TANA, DeLorme, and NPS' - } - }, - WorldShadedRelief: { - options: { - variant: 'World_Shaded_Relief', - maxZoom: 13, - attribution: '{attribution.Esri} — Source: Esri' - } - }, - WorldPhysical: { - options: { - variant: 'World_Physical_Map', - maxZoom: 8, - attribution: '{attribution.Esri} — Source: US National Park Service' - } - }, - OceanBasemap: { - options: { - variant: 'Ocean/World_Ocean_Base', - maxZoom: 13, - attribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri' - } - }, - NatGeoWorldMap: { - options: { - variant: 'NatGeo_World_Map', - maxZoom: 16, - attribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC' - } - }, - WorldGrayCanvas: { - options: { - variant: 'Canvas/World_Light_Gray_Base', - maxZoom: 16, - attribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ' - } - } - } - }, - OpenWeatherMap: { - url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}', - options: { - maxZoom: 19, - attribution: 'Map data © OpenWeatherMap', - apiKey: '', - opacity: 0.5 - }, - variants: { - Clouds: 'clouds', - CloudsClassic: 'clouds_cls', - Precipitation: 'precipitation', - PrecipitationClassic: 'precipitation_cls', - Rain: 'rain', - RainClassic: 'rain_cls', - Pressure: 'pressure', - PressureContour: 'pressure_cntr', - Wind: 'wind', - Temperature: 'temp', - Snow: 'snow' - } - }, - HERE: { - /* - * HERE maps, formerly Nokia maps. - * These basemaps are free, but you need an api id and app key. Please sign up at - * https://developer.here.com/plans - */ - url: - 'https://{s}.{base}.maps.api.here.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'app_id={app_id}&app_code={app_code}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - 'app_id': '', - 'app_code': '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalDayTraffic: { - options: { - variant: 'normal.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - hybridDayTraffic: { - options: { - variant: 'hybrid.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - HEREv3: { - /* - * HERE maps API Version 3. - * These basemaps are free, but you need an API key. Please sign up at - * https://developer.here.com/plans - * Version 3 deprecates the app_id and app_code access in favor of apiKey - * - * Supported access methods as of 2019/12/21: - * @see https://developer.here.com/faqs#access-control-1--how-do-you-control-access-to-here-location-services - */ - url: - 'https://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'apiKey={apiKey}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - apiKey: '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - FreeMapSK: { - url: 'https://{s}.freemap.sk/T/{z}/{x}/{y}.jpeg', - options: { - minZoom: 8, - maxZoom: 16, - subdomains: 'abcd', - bounds: [[47.204642, 15.996093], [49.830896, 22.576904]], - attribution: - '{attribution.OpenStreetMap}, visualization CC-By-SA 2.0 Freemap.sk' - } - }, - MtbMap: { - url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap} & USGS' - } - }, - CartoDB: { - url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png', - options: { - attribution: '{attribution.OpenStreetMap} © CARTO', - subdomains: 'abcd', - maxZoom: 20, - variant: 'light_all' - }, - variants: { - Positron: 'light_all', - PositronNoLabels: 'light_nolabels', - PositronOnlyLabels: 'light_only_labels', - DarkMatter: 'dark_all', - DarkMatterNoLabels: 'dark_nolabels', - DarkMatterOnlyLabels: 'dark_only_labels', - Voyager: 'rastertiles/voyager', - VoyagerNoLabels: 'rastertiles/voyager_nolabels', - VoyagerOnlyLabels: 'rastertiles/voyager_only_labels', - VoyagerLabelsUnder: 'rastertiles/voyager_labels_under' - } - }, - HikeBike: { - url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: '{attribution.OpenStreetMap}', - variant: 'hikebike' - }, - variants: { - HikeBike: {}, - HillShading: { - options: { - maxZoom: 15, - variant: 'hillshading' - } - } - } - }, - BasemapAT: { - url: 'https://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}', - options: { - maxZoom: 19, - attribution: 'Datenquelle: basemap.at', - type: 'normal', - format: 'png', - bounds: [[46.358770, 8.782379], [49.037872, 17.189532]], - variant: 'geolandbasemap' - }, - variants: { - basemap: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'geolandbasemap' - } - }, - grau: 'bmapgrau', - overlay: 'bmapoverlay', - terrain: { - options: { - variant: 'bmapgelaende', - type: 'grau', - format: 'jpeg' - } - }, - surface: { - options: { - variant: 'bmapoberflaeche', - type: 'grau', - format: 'jpeg' - } - }, - highdpi: { - options: { - variant: 'bmaphidpi', - format: 'jpeg' - } - }, - orthofoto: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'bmaporthofoto30cm', - format: 'jpeg' - } - } - } - }, - nlmaps: { - url: 'https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.png', - options: { - minZoom: 6, - maxZoom: 19, - bounds: [[50.5, 3.25], [54, 7.6]], - attribution: 'Kaartgegevens © Kadaster' - }, - variants: { - 'standaard': 'standaard', - 'pastel': 'pastel', - 'grijs': 'grijs', - 'water': 'water', - 'luchtfoto': { - 'url': 'https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg', - } - } - }, - NASAGIBS: { - url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}', - options: { - attribution: - 'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' + - '(ESDIS) with funding provided by NASA/HQ.', - bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]], - minZoom: 1, - maxZoom: 9, - format: 'jpg', - time: '', - tilematrixset: 'GoogleMapsCompatible_Level' - }, - variants: { - ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor', - ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367', - ViirsEarthAtNight2012: { - options: { - variant: 'VIIRS_CityLights_2012', - maxZoom: 8 - } - }, - ModisTerraLSTDay: { - options: { - variant: 'MODIS_Terra_Land_Surface_Temp_Day', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - }, - ModisTerraSnowCover: { - options: { - variant: 'MODIS_Terra_NDSI_Snow_Cover', - format: 'png', - maxZoom: 8, - opacity: 0.75 - } - }, - ModisTerraAOD: { - options: { - variant: 'MODIS_Terra_Aerosol', - format: 'png', - maxZoom: 6, - opacity: 0.75 - } - }, - ModisTerraChlorophyll: { - options: { - variant: 'MODIS_Terra_Chlorophyll_A', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - } - } - }, - NLS: { - // NLS maps are copyright National library of Scotland. - // http://maps.nls.uk/projects/api/index.html - // Please contact NLS for anything other than non-commercial low volume usage - // - // Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s - // z0-9 - 1:1m - // z10-11 - quarter inch (1:253440) - // z12-18 - one inch (1:63360) - url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg', - options: { - attribution: 'National Library of Scotland Historic Maps', - bounds: [[49.6, -12], [61.7, 3]], - minZoom: 1, - maxZoom: 18, - subdomains: '0123', - } - }, - JusticeMap: { - // Justice Map (http://www.justicemap.org/) - // Visualize race and income data for your community, county and country. - // Includes tools for data journalists, bloggers and community activists. - url: 'https://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png', - options: { - attribution: 'Justice Map', - // one of 'county', 'tract', 'block' - size: 'county', - // Bounds for USA, including Alaska and Hawaii - bounds: [[14, -180], [72, -56]] - }, - variants: { - income: 'income', - americanIndian: 'indian', - asian: 'asian', - black: 'black', - hispanic: 'hispanic', - multi: 'multi', - nonWhite: 'nonwhite', - white: 'white', - plurality: 'plural' - } - }, - GeoportailFrance: { - url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', - options: { - attribution: 'Geoportail France', - bounds: [[-75, -180], [81, 180]], - minZoom: 2, - maxZoom: 18, - // Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/ - // NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee - apikey: 'choisirgeoportail', - format: 'image/png', - style: 'normal', - variant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2' - }, - variants: { - plan: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', - parcels: { - options: { - variant: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS', - style: 'PCI vecteur', - maxZoom: 20 - } - }, - orthos: { - options: { - maxZoom: 19, - format: 'image/jpeg', - variant: 'ORTHOIMAGERY.ORTHOPHOTOS' - } - } - } - }, - OneMapSG: { - url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png', - options: { - variant: 'Default', - minZoom: 11, - maxZoom: 18, - bounds: [[1.56073, 104.11475], [1.16, 103.502]], - attribution: ' New OneMap | Map data © contributors, Singapore Land Authority' - }, - variants: { - Default: 'Default', - Night: 'Night', - Original: 'Original', - Grey: 'Grey', - LandLot: 'LandLot' - } - }, - USGS: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', - options: { - maxZoom: 20, - attribution: 'Tiles courtesy of the U.S. Geological Survey' - }, - variants: { - USTopo: {}, - USImagery: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}' - }, - USImageryTopo: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}' - } - } - }, - WaymarkedTrails: { - url: 'https://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © waymarkedtrails.org (CC-BY-SA)' - }, - variants: { - hiking: 'hiking', - cycling: 'cycling', - mtb: 'mtb', - slopes: 'slopes', - riding: 'riding', - skating: 'skating' - } - }, - OpenAIP: { - url: 'https://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}', - options: { - attribution: 'openAIP Data (CC-BY-NC-SA)', - ext: 'png', - minZoom: 4, - maxZoom: 14, - tms: true, - detectRetina: true, - subdomains: '12' - } - }, - OpenSnowMap: { - url: 'https://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.png', - options: { - minZoom: 9, - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} & ODbL, © www.opensnowmap.org CC-BY-SA' - }, - variants: { - pistes: 'pistes', - } - }, - AzureMaps: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}'+ - '&subscription-key={subscriptionKey}', - options: { - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.', - apiVersion: '2.0', - variant: 'microsoft.imagery', - subscriptionKey: '', - language: 'en-US', - }, - variants: { - MicrosoftImagery: 'microsoft.imagery', - MicrosoftBaseDarkGrey: 'microsoft.base.darkgrey', - MicrosoftBaseRoad: 'microsoft.base.road', - MicrosoftBaseHybridRoad: 'microsoft.base.hybrid.road', - MicrosoftTerraMain: 'microsoft.terra.main', - MicrosoftWeatherInfraredMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', - variant: 'microsoft.weather.infrared.main', - }, - }, - MicrosoftWeatherRadarMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', - variant: 'microsoft.weather.radar.main', - }, - } - }, - }, - SwissFederalGeoportal: { - url: 'https://wmts.geo.admin.ch/1.0.0/{variant}/default/current/3857/{z}/{x}/{y}.jpeg', - options: { - attribution: '© swisstopo', - minZoom: 2, - maxZoom: 18, - bounds: [[45.398181, 5.140242], [48.230651, 11.47757]] - }, - variants: { - NationalMapColor: 'ch.swisstopo.pixelkarte-farbe', - NationalMapGrey: 'ch.swisstopo.pixelkarte-grau', - SWISSIMAGE: { - options: { - variant: 'ch.swisstopo.swissimage', - maxZoom: 19 - } - } - } - } - }; - - L.tileLayer.provider = function (provider, options) { - return new L.TileLayer.Provider(provider, options); - }; - - return L; -})); diff --git a/docs/articles/Applications_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js b/docs/articles/Applications_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js deleted file mode 100644 index 82cd630..0000000 --- a/docs/articles/Applications_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js +++ /dev/null @@ -1,3 +0,0 @@ -LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { - this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); -}; diff --git a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.0/leaflet-providers-plugin.js b/docs/articles/Applications_files/leaflet-providers-plugin-2.2.0/leaflet-providers-plugin.js deleted file mode 100644 index 82cd630..0000000 --- a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.0/leaflet-providers-plugin.js +++ /dev/null @@ -1,3 +0,0 @@ -LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { - this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); -}; diff --git a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js b/docs/articles/Applications_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js deleted file mode 100644 index 82cd630..0000000 --- a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js +++ /dev/null @@ -1,3 +0,0 @@ -LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { - this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); -}; diff --git a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.2/leaflet-providers-plugin.js b/docs/articles/Applications_files/leaflet-providers-plugin-2.2.2/leaflet-providers-plugin.js deleted file mode 100644 index 82cd630..0000000 --- a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.2/leaflet-providers-plugin.js +++ /dev/null @@ -1,3 +0,0 @@ -LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { - this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); -}; diff --git a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.3/leaflet-providers-plugin.js b/docs/articles/Applications_files/leaflet-providers-plugin-2.2.3/leaflet-providers-plugin.js deleted file mode 100644 index 82cd630..0000000 --- a/docs/articles/Applications_files/leaflet-providers-plugin-2.2.3/leaflet-providers-plugin.js +++ /dev/null @@ -1,3 +0,0 @@ -LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { - this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); -}; diff --git a/docs/articles/Applications_files/leafletfix-1.0.0/leafletfix.css b/docs/articles/Applications_files/leafletfix-1.0.0/leafletfix.css deleted file mode 100644 index 466d868..0000000 --- a/docs/articles/Applications_files/leafletfix-1.0.0/leafletfix.css +++ /dev/null @@ -1,36 +0,0 @@ -/* Work around CSS properties introduced on img by bootstrap */ -img.leaflet-tile { - padding: 0; - margin: 0; - border-radius: 0; - border: none; -} -.leaflet .info { - padding: 6px 8px; - font: 14px/16px Arial, Helvetica, sans-serif; - background: white; - background: rgba(255,255,255,0.8); - box-shadow: 0 0 15px rgba(0,0,0,0.2); - border-radius: 5px; -} -.leaflet .legend { - line-height: 18px; - color: #555; -} -.leaflet .legend svg text { - fill: #555; -} -.leaflet .legend svg line { - stroke: #555; -} -.leaflet .legend i { - width: 18px; - height: 18px; - margin-right: 4px; - opacity: 0.7; - display: inline-block; - vertical-align: top; - /*For IE 7*/ - zoom: 1; - *display: inline; -} diff --git a/docs/articles/Applications_files/mapviewCSS-0.0.1/mapview-popup.css b/docs/articles/Applications_files/mapviewCSS-0.0.1/mapview-popup.css deleted file mode 100644 index ead6a8e..0000000 --- a/docs/articles/Applications_files/mapviewCSS-0.0.1/mapview-popup.css +++ /dev/null @@ -1,102 +0,0 @@ -/* table class css */ -table.mapview-popup { - overflow: scroll; - width: auto; - height: auto; - border-collapse: collapse; -} - -/* -table.mapview-popup tr:first-child td { - background: #A8E6A8; -} -*/ - -table.mapview-popup tr:nth-child(even) { - background: #D1E0FF; -} - -table.mapview-popup tr:nth-child(odd) { - background: #ebf1ff; -} - -table.mapview-popup, th, td { - border-bottom: 1px solid #ffffff; -} - -/* -table.tab tr:hover { - background: #00ffff; -} -*/ - - -/* general leaflet popup css '*/ -.leaflet-popup-content { - margin: 1px 1px 1px 1px; - line-height: 1.5; - overflow-y: auto; - overflow-x: scoll; -} - -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: -20px; - padding: 3px 0 0 0; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - font-weight: bold; - color: #c3c3c3; - text-decoration: none; - background: transparent; -} - -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; -} - -.leaflet-popup-content-wrapper, .leaflet-popup-tip { - padding: 1px; - -webkit-border-radius: 0; - border-radius: 0; - background: #ffffff; /*#4c4c4c;*/ - box-shadow: 0 3px 14px rgba(0,0,0,0.4); -} - - -div::-webkit-scrollbar { - width: 5px; - height: 5px; -} -div::-webkit-scrollbar-button { - width: 0; - height: 0; -} -div::-webkit-scrollbar-thumb { - background: #666666; - border: 0 none #ffffff; - border-radius: 0; -} -div::-webkit-scrollbar-thumb:hover { - background: #333333; -} -div::-webkit-scrollbar-thumb:active { - background: #333333; -} -div::-webkit-scrollbar-track { - background: #e1e1e1; - border: 0 none #ffffff; - border-radius: 50px; -} -div::-webkit-scrollbar-track:hover { - background: #e1e1e1; -} -div::-webkit-scrollbar-track:active { - background: #e1e1e1; -} -div::-webkit-scrollbar-corner { - background: transparent; -} diff --git a/docs/articles/Applications_files/mapviewCSS-0.0.1/mapview.css b/docs/articles/Applications_files/mapviewCSS-0.0.1/mapview.css deleted file mode 100644 index ac08791..0000000 --- a/docs/articles/Applications_files/mapviewCSS-0.0.1/mapview.css +++ /dev/null @@ -1 +0,0 @@ -.leaflet-control br {clear: both;} diff --git a/docs/articles/Applications_files/proj4-2.6.2/proj4.min.js b/docs/articles/Applications_files/proj4-2.6.2/proj4.min.js deleted file mode 100644 index 99865a5..0000000 --- a/docs/articles/Applications_files/proj4-2.6.2/proj4.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):t.proj4=s()}(this,function(){"use strict";function k(t,s){if(t[s])return t[s];for(var i,a=Object.keys(t),h=s.toLowerCase().replace(H,""),e=-1;++eMath.PI&&(r-=2*Math.PI),h=Math.sin(o),n=Math.cos(o),e=h*h,{x:((a=i/Math.sqrt(1-s*e))+l)*n*Math.cos(r),y:(a+l)*n*Math.sin(r),z:(a*(1-s)+l)*h}}function c(t,s,i,a){var h,e,n,r,o,l,M,c,u,f,m,p,d,y=t.x,_=t.y,x=t.z?t.z:0,g=Math.sqrt(y*y+_*_),b=Math.sqrt(y*y+_*_+x*x);if(g/i<1e-12){if(p=0,b/i<1e-12)return d=-a,{x:t.x,y:t.y,z:t.z}}else p=Math.atan2(_,y);for(h=x/b,l=(e=g/b)*(1-s)*(n=1/Math.sqrt(1-s*(2-s)*e*e)),M=h*n,m=0;m++,r=s*(o=i/Math.sqrt(1-s*M*M))/(o+(d=g*l+x*M-o*(1-s*M*M))),f=(u=h*(n=1/Math.sqrt(1-r*(2-r)*e*e)))*l-(c=e*(1-r)*n)*M,l=c,M=u,1e-24=this.text.length)return;t=this.text[this.place++]}switch(this.state){case K:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},e.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if($.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},e.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=K)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=K,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},e.prototype.number=function(t){if(!tt.test(t)){if($.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},e.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},e.prototype.keyword=function(t){if(Y.test(t))this.word+=t;else{if("["===t){var s=[];return s.push(this.word),this.level++,null===this.root?this.root=s:this.currentObject.push(s),this.stack.push(this.currentObject),this.currentObject=s,void(this.state=K)}if(!$.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},e.prototype.neutral=function(t){if(Z.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(tt.test(t))return this.word=t,void(this.state=3);if(!$.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},e.prototype.output=function(){for(;this.placeD?Math.tan(i):0,c=Math.pow(M,2),u=Math.pow(c,2),f=1-this.es*Math.pow(h,2);n/=Math.sqrt(f);var m=Gt(i,h,e,this.en),p=this.a*(this.k0*n*(1+r/6*(1-c+o+r/20*(5-18*c+u+14*o-58*c*o+r/42*(61+179*u-u*c-479*c)))))+this.x0,d=this.a*(this.k0*(m-this.ml0+h*a*n/2*(1+r/12*(5-c+9*o+4*l+r/30*(61+u-58*c+270*o-330*c*o+r/56*(1385+543*u-u*c-3111*c))))))+this.y0}else{var y=e*Math.sin(a);if(Math.abs(Math.abs(y)-1)D?Math.tan(s):0,e=this.ep2*Math.pow(a,2),n=Math.pow(e,2),r=Math.pow(h,2),o=Math.pow(r,2),l=1-this.es*Math.pow(i,2),M=_*Math.sqrt(l)/this.k0,u=s-(l*=h)*(c=Math.pow(M,2))/(1-this.es)*.5*(1-c/12*(5+3*r-9*e*r+e-4*n-c/30*(61+90*r-252*e*r+45*o+46*e-c/56*(1385+3633*r+4095*o+1574*o*r)))),nt(this.long0+M*(1-c/6*(1+2*r+e-c/20*(5+28*r+24*o+8*e*r+6*e-c/42*(61+662*r+1320*o+720*o*r))))/a)):(u=z*et(x),0)):(p=.5*((m=Math.exp(_/this.k0))-1/m),d=this.lat0+x/this.k0,y=Math.cos(d),l=Math.sqrt((1-Math.pow(y,2))/(1+Math.pow(p,2))),u=Math.asin(l),x<0&&(u=-u),0==p&&0===y?0:nt(Math.atan2(p,y)+this.long0)),t.x=f,t.y=u,t},names:["Transverse_Mercator","Transverse Mercator","tmerc"]},is={init:function(){if(void 0===this.es||this.es<=0)throw new Error("incorrect elliptical usage");this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),s=t/(2-t),i=s;this.cgb[0]=s*(2+s*(-2/3+s*(s*(116/45+s*(26/45+-2854/675*s))-2))),this.cbg[0]=s*(s*(2/3+s*(4/3+s*(-82/45+s*(32/45+4642/4725*s))))-2),i*=s,this.cgb[1]=i*(7/3+s*(s*(-227/45+s*(2704/315+2323/945*s))-1.6)),this.cbg[1]=i*(5/3+s*(-16/15+s*(-13/9+s*(904/315+-1522/945*s)))),i*=s,this.cgb[2]=i*(56/15+s*(-136/35+s*(-1262/105+73814/2835*s))),this.cbg[2]=i*(-26/15+s*(34/21+s*(1.6+-12686/2835*s))),i*=s,this.cgb[3]=i*(4279/630+s*(-332/35+-399572/14175*s)),this.cbg[3]=i*(1237/630+s*(-24832/14175*s-2.4)),i*=s,this.cgb[4]=i*(4174/315+-144838/6237*s),this.cbg[4]=i*(-734/315+109598/31185*s),i*=s,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(s,2),this.Qn=this.k0/(1+s)*(1+i*(.25+i*(1/64+i/256))),this.utg[0]=s*(s*(2/3+s*(-37/96+s*(1/360+s*(81/512+-96199/604800*s))))-.5),this.gtu[0]=s*(.5+s*(-2/3+s*(5/16+s*(41/180+s*(-127/288+7891/37800*s))))),this.utg[1]=i*(-1/48+s*(-1/15+s*(437/1440+s*(-46/105+1118711/3870720*s)))),this.gtu[1]=i*(13/48+s*(s*(557/1440+s*(281/630+-1983433/1935360*s))-.6)),i*=s,this.utg[2]=i*(-17/480+s*(37/840+s*(209/4480+-5569/90720*s))),this.gtu[2]=i*(61/240+s*(-103/140+s*(15061/26880+167603/181440*s))),i*=s,this.utg[3]=i*(-4397/161280+s*(11/504+830251/7257600*s)),this.gtu[3]=i*(49561/161280+s*(-179/168+6601661/7257600*s)),i*=s,this.utg[4]=i*(-4583/161280+108847/3991680*s),this.gtu[4]=i*(34729/80640+-3418889/1995840*s),i*=s,this.utg[5]=-.03233083094085698*i,this.gtu[5]=.6650675310896665*i;var a=Tt(this.cbg,this.lat0);this.Zb=-this.Qn*(a+function(t,s){for(var i,a=2*Math.cos(s),h=t.length-1,e=t[h],n=0;0<=--h;)i=a*e-n+t[h],n=e,e=i;return Math.sin(s)*i}(this.gtu,2*a))},forward:function(t){var s=nt(t.x-this.long0),i=t.y,i=Tt(this.cbg,i),a=Math.sin(i),h=Math.cos(i),e=Math.sin(s),n=Math.cos(s);i=Math.atan2(a,n*h),s=Math.atan2(e*h,Rt(a,h*n)),s=Lt(Math.tan(s));var r,o,l=Dt(this.gtu,2*i,2*s);return i+=l[0],s+=l[1],o=Math.abs(s)<=2.623395162778?(r=this.a*(this.Qn*s)+this.x0,this.a*(this.Qn*i+this.Zb)+this.y0):r=1/0,t.x=r,t.y=o,t},inverse:function(t){var s,i,a,h,e,n,r,o=(t.x-this.x0)*(1/this.a),l=(t.y-this.y0)*(1/this.a);return l=(l-this.Zb)/this.Qn,o/=this.Qn,r=Math.abs(o)<=2.623395162778?(l+=(s=Dt(this.utg,2*l,2*o))[0],o+=s[1],o=Math.atan(zt(o)),i=Math.sin(l),a=Math.cos(l),h=Math.sin(o),e=Math.cos(o),l=Math.atan2(i*e,Rt(h,e*a)),o=Math.atan2(h,e*a),n=nt(o+this.long0),Tt(this.cgb,l)):n=1/0,t.x=n,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc"]},as={init:function(){var t=function(t,s){if(void 0===t){if((t=Math.floor(30*(nt(s)+Math.PI)/Math.PI)+1)<0)return 0;if(60D?this.ns=Math.log(a/r)/Math.log(h/o):this.ns=s,isNaN(this.ns)&&(this.ns=s),this.f0=a/(this.ns*Math.pow(h,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic"))},forward:function(t){var s=t.x,i=t.y;Math.abs(2*Math.abs(i)-Math.PI)<=D&&(i=et(i)*(z-2*D));var a,h,e=Math.abs(Math.abs(i)-z);if(DD?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var s=t.x,i=t.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var a=Vt(this.e3,this.sin_phi,this.cos_phi),h=this.a*Math.sqrt(this.c-this.ns0*a)/this.ns0,e=this.ns0*nt(s-this.long0),n=h*Math.sin(e)+this.x0,r=this.rh-h*Math.cos(e)+this.y0;return t.x=n,t.y=r,t},inverse:function(t){var s,i,a,h,e,n;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,a=0<=this.ns0?(s=Math.sqrt(t.x*t.x+t.y*t.y),1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),-1),(h=0)!==s&&(h=Math.atan2(a*t.x,a*t.y)),a=s*this.ns0/this.a,n=this.sphere?Math.asin((this.c-a*a)/(2*this.ns0)):(i=(this.c-a*a)/this.ns0,this.phi1z(this.e3,i)),e=nt(h/this.ns0+this.long0),t.x=e,t.y=n,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,s){var i,a,h,e,n=Zt(.5*s);if(tMath.PI&&(a=Math.PI),i=(2*s+Math.sin(2*s))/Math.PI,12*z*this.a)return;return i=s/this.a,a=Math.sin(i),h=Math.cos(i),e=this.long0,Math.abs(s)<=D?n=this.lat0:(n=Zt(h*this.sin_p12+t.y*a*this.cos_p12/s),r=Math.abs(this.lat0)-z,e=nt(Math.abs(r)<=D?0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y):this.long0+Math.atan2(t.x*a,s*this.cos_p12*h-t.y*this.sin_p12*a))),t.x=e,t.y=n,t}return o=Ft(this.es),l=Qt(this.es),M=Wt(this.es),c=Xt(this.es),Math.abs(this.sin_p12-1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((u-s)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,-1*t.y))):Math.abs(this.sin_p12+1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((s-u)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,t.y))):(s=Math.sqrt(t.x*t.x+t.y*t.y),p=Math.atan2(t.x,t.y),f=Ht(this.a,this.e,this.sin_p12),d=Math.cos(p),_=-(y=this.e*this.cos_p12*d)*y/(1-this.es),x=3*this.es*(1-_)*this.sin_p12*this.cos_p12*d/(1-this.es),v=1-_*(b=(g=s/f)-_*(1+_)*Math.pow(g,3)/6-x*(1+3*_)*Math.pow(g,4)/24)*b/2-g*b*b*b/6,m=Math.asin(this.sin_p12*Math.cos(b)+this.cos_p12*Math.sin(b)*d),e=nt(this.long0+Math.asin(Math.sin(p)*Math.sin(b)/Math.cos(m))),w=Math.sin(m),n=Math.atan2((w-this.es*v*this.sin_p12)*Math.tan(m),w*(1-this.es))),t.x=e,t.y=n,t},names:["Azimuthal_Equidistant","aeqd"]},Ps={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var s,i,a,h=t.x,e=t.y,n=nt(h-this.long0),r=Math.sin(e),o=Math.cos(e),l=Math.cos(n);return(0<(s=this.sin_p14*r+this.cos_p14*o*l)||Math.abs(s)<=D)&&(i=this.a*o*Math.sin(n),a=this.y0+this.a*(this.cos_p14*r-this.sin_p14*o*l)),t.x=i,t.y=a,t},inverse:function(t){var s,i,a,h,e,n,r;return t.x-=this.x0,t.y-=this.y0,s=Math.sqrt(t.x*t.x+t.y*t.y),i=Zt(s/this.a),a=Math.sin(i),h=Math.cos(i),n=this.long0,Math.abs(s)<=D?r=this.lat0:(r=Zt(h*this.sin_p14+t.y*a*this.cos_p14/s),e=Math.abs(this.lat0)-z,n=Math.abs(e)<=D?nt(0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y)):nt(this.long0+Math.atan2(t.x*a,s*this.cos_p14*h-t.y*this.sin_p14*a))),t.x=n,t.y=r,t},names:["ortho"]},Ss=1,Ns=2,ks=3,Es=4,qs=5,Is=6,Os=1,As=2,Gs=3,js=4,zs={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=z-U/2?this.face=qs:this.lat0<=-(z-U/2)?this.face=Is:Math.abs(this.long0)<=U?this.face=Ss:Math.abs(this.long0)<=z+U?this.face=0=Math.abs(t.y)?y.value=Os:0<=t.y&&t.y>=Math.abs(t.x)?(y.value=As,s-=z):t.x<0&&-t.x>=Math.abs(t.y)?(y.value=Gs,s=s<0?s+Q:s-Q):(y.value=js,s+=z),c=Q/12*Math.tan(s),e=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),n=Math.atan(e),(r=1-(a=Math.cos(s))*a*(h=Math.tan(i))*h*(1-Math.cos(Math.atan(1/Math.cos(n)))))<-1?r=-1:1a.y)--s;else{if(!(Ls[s+1][0]<=a.y))break;++s}var h=Ls[s],i=function(t,s,i,a){for(var h=s;a;--a){var e=t(h);if(h-=e,Math.abs(e)Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/docs/articles/Applications_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css b/docs/articles/Applications_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css deleted file mode 100644 index c10d2f1..0000000 --- a/docs/articles/Applications_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css +++ /dev/null @@ -1,41 +0,0 @@ -.leaflet-tooltip.leaflet-tooltip-text-only, -.leaflet-tooltip.leaflet-tooltip-text-only:before, -.leaflet-tooltip.leaflet-tooltip-text-only:after { - background: none; - border: none; - box-shadow: none; -} - -.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-left { - margin-left: 5px; -} - -.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-right { - margin-left: -5px; -} - -.leaflet-tooltip:after { - border-right: 6px solid transparent; - /* right: -16px; */ -} - -.leaflet-popup-pane .leaflet-popup-tip-container { - /* when the tooltip container is clicked, it is closed */ - pointer-events: all; - /* tooltips should display the "hand" icon, just like .leaflet-interactive*/ - cursor: pointer; -} - -/* have the widget be displayed in the right 'layer' */ -.leaflet-map-pane { - z-index: auto; -} - -/* Add missing rule from leaflet for img. -This complete existing leaflet.css. -Fix for https://github.com/rstudio/rmarkdown/issues/1949 */ -.leaflet-container .leaflet-right-pane img, -.leaflet-container .leaflet-left-pane img { - max-width: none !important; - max-height: none !important; -} diff --git a/docs/articles/Articles/Applications.html b/docs/articles/Articles/Applications.html index e5267ea..bf76a12 100644 --- a/docs/articles/Articles/Applications.html +++ b/docs/articles/Articles/Applications.html @@ -25,7 +25,7 @@ StreamCatTools - 0.10.0 + 0.11.0
- +

Working with NARS data diff --git a/docs/articles/Articles/Introduction.html b/docs/articles/Articles/Introduction.html index abe6b21..62a3602 100644 --- a/docs/articles/Articles/Introduction.html +++ b/docs/articles/Articles/Introduction.html @@ -25,7 +25,7 @@ StreamCatTools - 0.10.0 + 0.11.0

+#> fips state county_name +#> 752 01001 AL Autauga County +#> 713 01003 AL Baldwin County +#> 655 01005 AL Barbour County +#> 755 01007 AL Bibb County +#> 748 01009 AL Blount County +#> 656 01011 AL Bullock County

Filter metric information by criteria diff --git a/docs/articles/Articles/LakeCat.html b/docs/articles/Articles/LakeCat.html index 8f6a6a5..b9bd9ad 100644 --- a/docs/articles/Articles/LakeCat.html +++ b/docs/articles/Articles/LakeCat.html @@ -25,7 +25,7 @@ StreamCatTools - 0.10.0 + 0.11.0 - - - - -

-
- - - - -
-
- - - -
-

Installing and loading StreamCatTools -

-

To install, currently you need to install from GitHub using -devtools

-
-library(devtools)
-install_github('USEPA/StreamCatTools')
-

After installing load the library

- -
-
-

Background -

-

The StreamCatTools package was designed to simplify the -use of StreamCat -data in R, leveraging the new API for -StreamCat.

-
-
-

StreamCat API -

-

We can pull data into R from the StreamCat -API by simply passing a URL to extract from json. We have to -hard-wire parameters though and are limited in the number of records -returned through a GET request.

-
-res <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics?name=fert&areaOfInterest=cat&comid=179")
-res$items
-#>   fertws fertcat comid
-#> 1  1.438   1.438   179
-
-
-

List API parameters -

-

List StreamCat parameters: Get a list of available StreamCat values -for certain parameters using the sc_get_params function via -the API

-
-region_params <- sc_get_params(param='aoi')
-
-name_params <- sc_get_params(param='metric_names')
-
-print(paste0('region parameters are: ', paste(region_params,collapse = ', ')))
-#> [1] "region parameters are: cat, catrp100, other, ws, wsrp100"
-print(paste0('A selection of available StreamCat metrics include: ',paste(name_params[1:10],collapse = ', ')))
-#> [1] "A selection of available StreamCat metrics include: agkffact, al2o3, bankfulldepth, bankfullwidth, bfi, canaldens, cao, cbnf, chem, clay"
-

We can also see what metrics are available for what areas of interest -and what years using the sc_get_params function (which -returns a tibble of information about StreamCat metrics):

-
-var_info <- sc_get_params(param='variable_info')
-head(var_info)
-#> # A tibble: 6 × 13
-#>   category     metric aoi   year  short_description long_description units  dsid
-#>   <chr>        <chr>  <chr> <chr> <chr>             <chr>            <chr> <dbl>
-#> 1 Anthropogen… NABD_… Cat,… NA    NABD Dam Density  Density of geor… Coun…    33
-#> 2 Anthropogen… NABD_… Cat,… NA    NABD NID Reservo… Volume all rese… Cubi…    33
-#> 3 Anthropogen… NABD_… Cat,… NA    NABD Normal Rese… Volume all rese… Cubi…    33
-#> 4 Natural      Preci… Cat,… NA    Surplus Precipit… This dataset re… Kilo…    75
-#> 5 Soils        Rckde… Cat,… NA    Mean Bedrock Dep… Mean depth (cm)… Cent…    56
-#> 6 Soils        agkff… Cat,… NA    Ag Soil Erodibil… Mean of STATSGO… Unit…    28
-#> # ℹ 5 more variables: dataset <chr>, source_name <chr>, source_URL <chr>,
-#> #   ACTIVE <dbl>, DSNAME <chr>
-

We can look up the display name or names for a metric using the -sc_fullname function via the API

-
-metric='pcthbwet2011'
-fullname <- sc_fullname(metric)
-fullname
-#> [1] "Herbaceous Wetland Percentage 2011"
-
-metric='pctdecid2019,fert'
-fullname <- sc_fullname(metric)
-fullname
-#> character(0)
-

We can additionally get a data frame of state FIPS codes, -abbreviations and names, and the same information for counties as well -using sc_get_params:

-
-states <- sc_get_params(param='state')
-head(states)
-#>    st_fips st_abbr     st_name
-#> 30      01      AL     Alabama
-#> 8       04      AZ     Arizona
-#> 25      05      AR    Arkansas
-#> 6       06      CA  California
-#> 15      08      CO    Colorado
-#> 50      09      CT Connecticut
-
-counties <- sc_get_params(param='county')
-head(counties)
-#>      fips state    county_name
-#> 752 01001    AL Autauga County
-#> 713 01003    AL Baldwin County
-#> 655 01005    AL Barbour County
-#> 755 01007    AL    Bibb County
-#> 748 01009    AL  Blount County
-#> 656 01011    AL Bullock County
-
-
-

Filter metric information by criteria -

-

We can also filter metric names and information by the metric -year(s), the indicator categories for metrics, the metric data set -names, or the Areas of Interest the metrics are available for.

-
-metrics <- sc_get_metric_names(category = c('Deposition','Climate'),aoi=c('Cat','Ws'))
-head(metrics)
-#> # A tibble: 6 × 9
-#>   Category Metric AOI   Year  Short_Name Metric_Description Units Source Dataset
-#>   <chr>    <chr>  <chr> <chr> <chr>      <chr>              <chr> <chr>  <chr>  
-#> 1 Climate  bfi[A… Cat,… NA    Base Flow… Base flow is the … Perc… USGS … Base F…
-#> 2 Deposit… inorg… Cat,… 2008  Mean Annu… Annual gradient m… Kilo… NADP   NADP   
-#> 3 Deposit… nh4[Y… Cat,… 2008  Mean annu… Annual gradient m… Kilo… NADP   NADP   
-#> 4 Deposit… no3[Y… Cat,… 2008  Mean Annu… Annual gradient m… Kilo… NADP   NADP   
-#> 5 Climate  preci… Cat,… NA    30-year M… PRISM climate dat… Mill… PRISM  PRISM  
-#> 6 Climate  preci… Cat,… 1991… 30-year M… PRISM climate dat… Mill… PRISM  PRISM
-
-
-

Get data for COMIDs -

-

In this example we access several variables, for several areas of -interest, and for several COMIDs using the sc_get_data -function. Loads data into a tibble we can view.

-
-df <- sc_get_data(metric='pcturbmd2006,damdens,tridens', aoi='rp100cat,cat,ws', comid='179,1337,1337420')
-knitr::kable(df)
- --------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidtridenswsdamdenscatpcturbmd2006cattridenscatpcturbmd2006wsdamdensws
179000.0000.000.0000
1337000.0700.070.0000
1337420000.0000.010.0329
-
-
-

Get data for county -

-

In this example we access a couple variables at the watershed scale -for the area of interest of a county (Benton County in this case) using -the sc_get_data function.

-
-df <- sc_get_data(metric='pctwdwet2006', aoi='ws', county='41003')
-knitr::kable(head(df))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctwdwet2006ws
237629611.11
237629850.84
237629151.14
237629591.14
237629671.10
237627611.72
-
-
-

Get all metrics for COMIDs or an Area of Interest -

-

We can also get all StreamCat metrics for a set of COMIDs or an area -of interest. Please do not request metric=‘all’ and aoi=‘conus’ -in order not to overload requests to the server. Requesting metric=‘all’ -for a state or multiple states or hydroregions will also take a long -time to process.

-
-df <- sc_get_data(comid='179', aoi='cat', metric='all')
-knitr::kable(head(df))
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctburnarea1984catpctburnarea1985catpctburnarea1986catpctburnarea1987catpctmodsev1993catpcthighsev1993catpctincvegresp1993catpctnonprocmask1993catpctundsev1996catpctlowsev1996catpctburnarea1988catpctburnarea1989catpctburnarea1990catpctburnarea1991catpctburnarea1992catpctburnarea1993catpctburnarea1994catpctburnarea1995catpctburnarea1996catpctburnarea1997catpctburnarea1998catpctburnarea1999catpctburnarea2000catpctburnarea2001catpctburnarea2002catpctburnarea2003catpctburnarea2004catpctburnarea2005catpctburnarea2006catpctburnarea2007catpctburnarea2008catpctburnarea2009catpctburnarea2010catpctburnarea2011catpctburnarea2012catpctburnarea2013catpctburnarea2014catpctburnarea2015catpctburnarea2016catpctburnarea2017catpctburnarea2018catpctlowsev1993catpctmodsev1996catpcthighsev1996catpctincvegresp1996catpctnonprocmask1996catpctundsev1998catpctlowsev1998catpctmodsev1998catpcthighsev1998catpctincvegresp1998catpctnonprocmask1998catpctundsev2004catpctlowsev2004catpctmodsev2004catpcthighsev2004catpctincvegresp2004catpctnonprocmask2004catpctundsev2007catpctlowsev2007catpctmodsev2007catpcthighsev2007catpctincvegresp2007catpctnonprocmask2007catpctundsev2008catpctlowsev2008catpctmodsev2008catpcthighsev2008catpctincvegresp2008catpctnonprocmask2008catpctundsev2010catpctlowsev2010catpctmodsev2010catpcthighsev2010catpctincvegresp2010catpctnonprocmask2010catpctundsev2011catpctlowsev2011catpctmodsev2011catpcthighsev2011catpctincvegresp2011catpctnonprocmask2011catpctundsev2016catpctlowsev2016catpctundsev1984catpctlowsev1984catpctmodsev1984catpcthighsev1984catpctincvegresp1984catpctnonprocmask1984catsepticcatpctundsev1986catpctlowsev1986catpctmodsev1986catpcthighsev1986catpctincvegresp1986catpctnonprocmask1986catpctundsev1989catpctlowsev1989catpctmodsev1989catpcthighsev1989catpctincvegresp1989catpctnonprocmask1989catpctundsev1994catpctlowsev1994catpctmodsev1994catpcthighsev1994catpctincvegresp1994catpctnonprocmask1994catpctundsev1997catpctlowsev1997catpctmodsev1997catpcthighsev1997catpctincvegresp1997catpctnonprocmask1997catpctundsev2001catpctlowsev2001catpctmodsev2001catpcthighsev2001catpctincvegresp2001catpctnonprocmask2001catpctundsev2009catpctlowsev2009catpctmodsev2009catpcthighsev2009catpctincvegresp2009catpctnonprocmask2009catpctundsev2012catpctlowsev2012catpctmodsev2012catpcthighsev2012catpctincvegresp2012catpctnonprocmask2012catpctundsev2018catpctlowsev2018catpctmodsev2018catpcthighsev2018catpctincvegresp2018catpctnonprocmask2018catpctagslphigh2006catpctagslpmid2008catpctagslpmid2004catpctagslphigh2004catpctagslpmid2006catpctagslphigh2008catpctagslpmid2011catpctagslphigh2011catpctagdrainagecatnsurpcatnanicatpctbl2008catpctconif2008catpctcrop2008catpctdecid2008catpctgrs2008catpcthay2008catpcthbwet2008catpctice2008catpctmxfst2008catpctow2008catpctshrb2008catpcturbhi2008catpcturblo2008catpcturbmd2008catpcturbop2008catpctwdwet2008catpctundsev2006catpctlowsev2006catpctmodsev2006catpcthighsev2006catpctincvegresp2006catpctnonprocmask2006catrockncatpctundsev2015catpctlowsev2015catpctmodsev2015catpcthighsev2015catpctincvegresp2015catpctnonprocmask2015catwdrw_ldcatpctagslpmid2001catpctagslphigh2001catpctimp2001catpctimp2004catpctimp2006catpctimp2008catpctimp2011catpctimp2013catpctimp2016catpctimp2019catpctbl2004catpctconif2004catpctcrop2004catpctdecid2004catpctgrs2004catpcthay2004catpcthbwet2004catpctice2004catpctmxfst2004catpctow2004catpctshrb2004catpcturbhi2004catpcturblo2004catpcturbmd2004catpcturbop2004catpctwdwet2004catpctbl2019catpctconif2019catpctcrop2019catpctdecid2019catpctgrs2019catpcthay2019catpcthbwet2019catpctice2019catpctmxfst2019catpctow2019catpctshrb2019catpcturbhi2019catpcturblo2019catpcturbmd2019catpcturbop2019catpctwdwet2019catwetindexcatpctundsev1987catpctlowsev1987catpctmodsev1987catpcthighsev1987catpctincvegresp1987catpctnonprocmask1987catpctundsev1990catpctlowsev1990catpctmodsev1990catpcthighsev1990catpctincvegresp1990catpctnonprocmask1990catpctundsev1991catpctlowsev1991catpctmodsev1991catpcthighsev1991catpctincvegresp1991catpctnonprocmask1991catpctundsev1995catpctlowsev1995catpctmodsev1995catpcthighsev1995catpctincvegresp1995catpctnonprocmask1995catpctundsev1999catpctlowsev1999catpctmodsev1999catpcthighsev1999catpctincvegresp1999catpctnonprocmask1999catpctundsev2002catpctlowsev2002catpctmodsev2002catpcthighsev2002catpctincvegresp2002catpctnonprocmask2002catpctundsev2013catpctlowsev2013catpctmodsev2013catpcthighsev2013catpctincvegresp2013catpctnonprocmask2013catpctundsev2014catpctlowsev2014catpctundsev2003catpctlowsev2003catpctmodsev2003catpcthighsev2003catpctincvegresp2003catpctnonprocmask2003catpctundsev2005catpctlowsev2005catpctmodsev2005catpcthighsev2005catpctincvegresp2005catpctnonprocmask2005catpctmodsev2014catpcthighsev2014catpctincvegresp2014catpctnonprocmask2014catpctmodsev2016catpcthighsev2016catpctincvegresp2016catpctnonprocmask2016catpctundsev2017catpctlowsev2017catpctmodsev2017catpcthighsev2017catpctincvegresp2017catpctnonprocmask2017catwaterinputcatwwtpmajordenscatwwtpminordenscatwwtpalldenscatpctimpslphigh2001catpctimpslphigh2004catpctimpslphigh2006catpctimpslphigh2008catpctimpslphigh2011catpctimpslphigh2013catpctimpslphigh2016catpctimpslphigh2019catpctimpslpmid2001catpctimpslpmid2004catpctimpslpmid2006catpctimpslpmid2008catpctimpslpmid2011catpctimpslpmid2013catpctimpslpmid2016catpctimpslpmid2019catpctundsev2000catpctlowsev2000catpctmodsev2000catpcthighsev2000catpctincvegresp2000catpctnonprocmask2000catsio2catcompstrgthcatpctfire2001catagkffactcatpctwdwet2011catcoalminedenscatelevcatpcturbop2006catpcturbhi2001cathydcatno32008catpctalluvcoastcatfe2o3catpcturblo2011catcbnfcatpctconif2006catpctgrs2001catpctfire2008catpctsallakecatpctcoastcrscatncatpctfire2003catpctglactilloamcatpctfire2010catomcatpctwatercatpctow2011catpctice2011catpctwdwet2001cattmean2008catpctfire2000catpctcrop2001catpctextruvolcatpcturbmd2011catpctfire2006catpctow2001catpcthbwet2001catna2ocatpctglactilcrscattmean2009catdamdenscatpctdecid2011catsedcatchemcatmanurecatpctow2006catpctbl2001catsn2008catpctnonagintrodmanagvegcatpcthydriccatpctfire2005catpctconif2011catpctcarbresidcattmean8110catcaocatpctbl2011catkffactcatpctglaclakecrscatpctmxfst2011catk2ocatpctice2006catpcteolfinecatpcturbhi2006catprecip8110catpcthay2006catpctsiliciccatpctwdwet2006catpctfire2007catrdcrscatnabd_denscatpctice2001catdamnidstorcatprecip2009catpcturbmd2006cattridenscatpctglactilclaycatwtdepcatpestic1997catpcteolcrscatpctmxfst2001catpermcattempcatpopden2010catpcturbhi2011catal2o3catpcturblo2001catbficatpctmxfst2006catconncatpcthay2011cattmax8110catinorgnwetdep2008catnabd_nrmstorcathuden2010catscatp2o5catpctshrb2006catdamnrmstorcatnh42008catmgocatpctgrs2011catpctalkintruvolcatpctglaclakefinecatpcturblo2006catpctshrb2011catcanaldenscatpcturbmd2001cathabtcatnabd_nidstorcatpctbl2006catfertcatnpdesdenscattmin8110catpcthay2001catminedenscatpctconif2001catsuperfunddenscatpcturbop2011catpctfire2002catpcthbwet2011catrdcrsslpwtdcatpctdecid2006catpctshrb2001catprecip2008catsandcatpctfire2009catclaycatpcturbop2001catpctdecid2001catpctcrop2006catpctnoncarbresidcatrunoffcatpctgrs2006catpctcolluvsedcatrckdepcathydrlcondcatpcthbwet2006catrddenscatpctcrop2011catpctconif2016catpctfire2004catpctcrop2016catpctdecid2016catpctgrs2016catpcthay2016catpcthbwet2016catpctice2016catpctmxfst2016catpctow2016catpctshrb2016catpcturbhi2016catpcturblo2016catpcturbmd2016catpcturbop2016catpctwdwet2016catsw_fluxcatpctundsev1985catpctlowsev1985catpctmodsev1985catpcthighsev1985catpctincvegresp1985catpctnonprocmask1985catpctundsev1992catpctlowsev1992catpctmodsev1992catpcthighsev1992catpctincvegresp1992catpctnonprocmask1992catpctundsev1988catpctlowsev1988catpctmodsev1988catpcthighsev1988catpctbl2013catpctconif2013catpctcrop2013catpctdecid2013catpctgrs2013catpcthay2013catpcthbwet2013catpctice2013catpctmxfst2013catpctow2013catpctshrb2013catpcturbhi2013catpcturblo2013catpcturbmd2013catpcturbop2013catpctwdwet2013catpctbl2016catpctincvegresp1988catpctnonprocmask1988catpctundsev1993catpctfrstloss2001catpctfrstloss2002catpctfrstloss2003catpctfrstloss2004catpctfrstloss2005catpctfrstloss2006catpctfrstloss2007catpctfrstloss2008catpctfrstloss2009catpctfrstloss2010catpctfrstloss2011catpctfrstloss2012catpctfrstloss2013catprecip9120cattmax9120cattmean9120cattmin9120catpctagslpmid2013catpctagslphigh2013catpctagslpmid2016catpctagslphigh2016catpctagslpmid2019catpctagslphigh2019catn_usgsww_1978catn_usgsww_1980catn_usgsww_1982catn_usgsww_1984catn_usgsww_1986catn_usgsww_1988catn_usgsww_1990catn_usgsww_1992catn_usgsww_1994catn_usgsww_1996catn_usgsww_1998catn_usgsww_2000catn_usgsww_2002catn_usgsww_2004catn_usgsww_2006catn_usgsww_2008catn_usgsww_2010catn_usgsww_2012catn_leg_1987catn_leg_1988catn_leg_1989catn_leg_1990catn_leg_1991catn_leg_1992catn_leg_1993catn_leg_1994catn_leg_1995catn_leg_1996catn_leg_1997catn_leg_1998catn_leg_1999catn_leg_2000catn_leg_2001catn_leg_2002catn_leg_2003catn_leg_2004catn_leg_2005catn_leg_2006catn_leg_2007catn_leg_2008catn_leg_2009catn_leg_2011catn_leg_2012catn_leg_2013catn_leg_2014catn_leg_2015catn_leg_2016catn_leg_2017catp_leg_1987catp_leg_1988catp_leg_1989catp_leg_1990catp_leg_1991catp_leg_1992catp_leg_1993catp_leg_1994catp_leg_1995catp_leg_1996catp_leg_1997catp_leg_1998catp_leg_1999catp_leg_2000catp_leg_2001catp_leg_2002catp_leg_2003catp_leg_2004catp_leg_2005catp_leg_2006catp_leg_2007catp_leg_2008catp_leg_2009catp_leg_2011catp_leg_2012catp_leg_2013catp_leg_2014catp_leg_2015catp_leg_2016catp_leg_2017cat
1790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.11700000000000000000000000000000000000000000000000003.173.1703.1703.17002102.5611675.83704.891.523.870.051.091.04049.060.050.91000037.5200000088.29950000000.44133.1700000000004.891.523.850.131.091.09049.040.130.89000037.3904.911.543.70.351.090.71049.5400.25000037.9878.249400000000000000000000000000000000000000000000000000000000000000000000001.34e-05000NANANANANANANANA0000000000000064.3313169.63660NA37.570196.1233000.9986.379905.509100.05064.890.230008e-040100012.2870100.1036.895.03242801.5200001.951.077204.85296603.80.99584250.97200.080342.14520004.8904.8851177.94530NA049.161.05570001059.0781.09037.29000001108.38600049.2178440.52718048.765.1308480.99831228.874548010.27605249.0111.0910.595722.465305.9104250.01610.15451.0101.32132.28830.130000.81000.997001.4380-0.82636141.2204.890000.9403.80.731254.53922.33772014.3537103.821.5206460.080134.99830.20441.240.52761.524.9101.543.870.051.090.71049.6700.25000037.9133875000000000000000004.891.523.770.051.090.76049.700.38000037.8500000.71000.350.030000000.2301152.67810.565345.015274-0.53622763.1703.1703.1700000000000000000008016.3748243.7978542.0238787.9559007.6979287.5829438.6079722.9059996.04610686.6911330.8812057.6512981.1513353.1613811.0514472.3615211.2916194.8717547.0719142.332061122116.8223411.3724590.5424772.6925101.0725575.926197.0726964.9627879.6911011.9111171.6211383.8511564.1311738.3411915.3612000.9512203.1312392.8912464.9412537.0512605.3812721.5212932.7513172.613492.1513836.8614248.7914793.0515395.8115956.2616542.5217068.5817624.0417758.0317917.1518101.4618310.9118545.6118805.58
-
-
-

Get NLCD data -

-

In this example we access National Land Cover Dataset (NLCD) data for -2001, just at the catchment level for several COMIDs using the -sc_nlcd function. Loads data into a tibble we can view.

-
-df <- sc_nlcd(year='2001', aoi='cat',
-              comid='179,1337,1337420')
-knitr::kable(df)
- ------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpcturbhi2001catpctgrs2001catpctwdwet2001catpctcrop2001catpctow2001catpcthbwet2001catpctbl2001catpctice2001catpctmxfst2001catpcturblo2001catpcturbmd2001catpcthay2001catpctconif2001catpctshrb2001catpcturbop2001catpctdecid2001cat
17900.2336.891.520.01.950.00048.760.0001.224.890.730.003.82
133701.6020.750.000.10.560.28051.550.2402.835.650.663.9811.79
133742000.870.950.000.01.640.0003.770.4000.114.063.381.7783.06
-

We can also pass a couple years for a different area of interest for -another region like a county.

-
-df <- sc_nlcd(year='2006, 2019', aoi='ws',
-              county='41003')
-knitr::kable(head(df))
- ----------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctbl2019wspctconif2019wspctcrop2019wspctdecid2019wspctgrs2019wspcthay2019wspcthbwet2019wspctice2019wspctmxfst2019wspctow2019wspctshrb2019wspcturbhi2019wspcturblo2019wspcturbmd2019wspcturbop2019wspctwdwet2019wspctice2006wspctmxfst2006wspctcrop2006wspcthay2006wspcturbop2006wspctbl2006wspctconif2006wspctwdwet2006wspctgrs2006wspcturbhi2006wspcturbmd2006wspctshrb2006wspcthbwet2006wspctdecid2006wspcturblo2006wspctow2006ws
237629610.0136.684.651.031.5133.283.4407.320.083.990.101.690.303.462.4605.853.0035.583.440.0126.931.115.740.090.2310.784.790.661.670.11
237629850.0051.521.581.032.2120.060.8409.140.046.060.051.460.244.601.1807.161.0521.164.620.0137.510.848.440.040.1915.781.220.511.440.04
237629150.0155.830.011.582.746.600.40018.610.057.450.010.600.144.651.33019.100.016.874.630.0149.771.144.710.010.1211.150.581.270.580.05
237629590.0136.294.661.021.5033.723.5107.240.093.950.101.680.303.432.5105.793.0236.013.410.0126.641.145.680.090.2310.664.880.661.660.12
237629670.0138.813.541.041.6031.713.4907.530.094.300.091.650.293.402.4705.982.4233.493.390.0128.481.106.200.080.2311.364.860.641.640.13
237627610.0057.440.401.903.082.450.27020.770.016.650.000.310.074.891.76019.150.052.844.910.0038.131.727.950.000.0423.530.311.060.290.01
-
-
-

Get COMIDs -

-

In this example we use the sc_get_comid function to find -COMIDs for USGS stream gages we load into R. We use a .csv file with -coordinate columns and a known coordinate reference system.

-
-gages = readr::read_csv(system.file("extdata","Gages_flowdata.csv", package = "StreamCatTools"),show_col_types = FALSE)
-# we'll just grab a few variables to keep things simple
-gages <- gages[,c('SOURCE_FEA','STATION_NM','LON_SITE','LAT_SITE')]
-gages_coms <- sc_get_comid(gages, xcoord='LON_SITE',                   ycoord='LAT_SITE', crsys=4269)
-
-# Add the COMID we found back to gages data frame
-gages$COMID <- strsplit(gages_coms, ",")[[1]]
-df <- sc_get_data(metric='huden2010', aoi='ws', comid=gages_coms)
-df$COMID <- as.character(df$comid)
-gages <- dplyr::left_join(gages, df, by='COMID')
-knitr::kable(head(gages))
-
-
-

Get data for a hydroregion -

-

In this example we access a couple watershed-only metrics for a -particular NHDPlus hydroregion using the sc_get_data -function.

-
-df <- sc_get_data(metric='pctwdwet2006', aoi='ws', region='Region17')
-knitr::kable(head(df))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctwdwet2006ws
229886110.99
241143110.29
241143090.27
241162390.42
229886390.00
229887110.02
-
-
-

Get data for CONUS -

-

In this example we access a metric for conus using the -sc_get_data function - this is shown for demonstration but -not run as it takes a bit of time

-
-# df <- sc_get_data(metric='om', aoi='ws', conus='true')
-# knitr::kable(head(df))
-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/Introduction_files/HomeButton-0.0.1/LICENSE b/docs/articles/Introduction_files/HomeButton-0.0.1/LICENSE deleted file mode 100644 index a1d3414..0000000 --- a/docs/articles/Introduction_files/HomeButton-0.0.1/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (C) 2014 Daniel Montague - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/articles/Introduction_files/HomeButton-0.0.1/easy-button-src.min.js b/docs/articles/Introduction_files/HomeButton-0.0.1/easy-button-src.min.js deleted file mode 100644 index 8270ab1..0000000 --- a/docs/articles/Introduction_files/HomeButton-0.0.1/easy-button-src.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){function a(a,c){this.title=a.title,this.stateName=a.stateName?a.stateName:"unnamed-state",this.icon=L.DomUtil.create("span",""),L.DomUtil.addClass(this.icon,"button-state state-"+this.stateName.replace(/(^\s*|\s*$)/g,"")),this.icon.innerHTML=b(a.icon),this.onClick=L.Util.bind(a.onClick?a.onClick:function(){},c)}function b(a){var b;return a.match(/[&;=<>"']/)?b=a:(a=a.replace(/(^\s*|\s*$)/g,""),b=L.DomUtil.create("span",""),0===a.indexOf("fa-")?L.DomUtil.addClass(b,"fa "+a):0===a.indexOf("glyphicon-")?L.DomUtil.addClass(b,"glyphicon "+a):L.DomUtil.addClass(b,a),b=b.outerHTML),b}L.Control.EasyBar=L.Control.extend({options:{position:"bottomright",id:null,leafletClasses:!0},initialize:function(a,b){b&&L.Util.setOptions(this,b),this._buildContainer(),this._buttons=[];for(var c=0;cON$&;6fSWRh9-@I3zNyhOC<&ctLxqMV0vb1x~h|g>2cE2B#o=wx%YN=W$Ip>E|dXx`2hhTAOu7a0=ZSw-I+y5K~U`&X z=T#qWtY0jb7D^n)m7AB`HhZ68_v!hQ?D@ivSANMA)a%mCxJO4YC7grfEdrV$?2|Tu zc<1fk$Rfwh&HJ4$?Y7oz6o(a<+f>G3!q6PIxI9iE+9niik-i_*_`iSpnFl_u@mKYh z)Jp1P;9uHJ$>#2Q2kmYn3-ilMU~z0S2O*&ljKd(x>~W1R{Mt;;)gliH6S`gFk4SY} z8=xMi1n8BjfTXGc467pRhM^g607a5@QBp-!5){?eBwJI!dGQa_=79D&>;+=_>^#xtfz zDTGO@HFF$glR~kQiDQ_EazzruFwd*7&S;xFq48Afth194u}!jgm?GAX-nl85)$ZAW zriK{J?2=&`6nSDKl7NIHq8TG47mOHl`_0s64TOOkqhbEF>DKt+(8qRF_o}KTRn2O> zAy9F)K@jh$b;n$jsuydf*ICPJ;&8N!_-w(mOb6{G^ycArtDhm<;<|n zD5Ee!BoCTn{U_M!GqH9(C6LBxCys;ZsB8>k8fSwz0rh$@8sN1SM1GVjU(dTa;Y(8g z9fBKa9D<@9w*M3sY%B~(H=%$P!xS{FiUnwzOhTrFO}M2SYLB1b@v+h!jWg4*Op+-f z8)>+QWeEug5nYgF<`P;aW=GsZmT6hAC-EYqh>=Zw8j#8KIsu(XfuB#19l)s1N+n>@ zgTsLGOZ{Lc8TcrUvPChU&cJ7YLOQ~V$2=D5W8*xvWIK|Jv*l!m*?N(`KklCX%mSZecl#^g z{_U49|I@v`aGBfwwfq-%B6Uu#Y+jgqZf(AFXYa(VucN&+?z@kT!<$#Q@(-n3%MX;V zR?hE#u=ho|{_yjIe=q(A&c2tv^~y_U_8(nX_V&5wIq87lSMTHV`Cq8%t-If@UVHyB DN350C diff --git a/docs/articles/Introduction_files/HomeButton-0.0.1/home-button.css b/docs/articles/Introduction_files/HomeButton-0.0.1/home-button.css deleted file mode 100644 index 030bc3c..0000000 --- a/docs/articles/Introduction_files/HomeButton-0.0.1/home-button.css +++ /dev/null @@ -1,69 +0,0 @@ -.leaflet-bar button/*, -.leaflet-bar button:hover*/ { - background-color: rgba(255,255,255, 0.95) /*#fff*/; - border: none; - width: 100%; - height: 20px; - line-height: 15px; - font-size: 85%; - /*display: block;*/ - text-align: center; - text-decoration: none; - color: black; - cursor: pointer; - overflow-x: visible; - overflow-y: hidden; - opacity: 0.25; - filter: alpha(opacity = 25); - background-position: 50% 50%; - background-repeat: no-repeat; - display: inline-block; -} - -.leaflet-bar button:hover { - background-color: #00ffff; /* #909090 */; - text-decoration: underline; - opacity: 0.9; - filter: alpha(opacity=90); -} - -/* uncomment this to get rid of button borders, this also removes border from zoom buttons -.leaflet-touch .leaflet-bar { - border: none; -} - -/*.leaflet-bar button:first-of-type { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} - -.leaflet-bar button:last-of-type { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - border-bottom: none; -} - -.leaflet-bar.disabled, -.leaflet-bar button.disabled { - cursor: default; - pointer-events: none; - opacity: .4; -} - -.easy-button-button .button-state{ - display: block; - width: 100%; - height: 100%; - position: relative; -} - - -/*.leaflet-touch .leaflet-bar button { - width: 100%; - height: 20px; - line-height: 18px; - overflow-y: hidden; - opacity: .5; - filter: alpha(opacity=50); - white-space: nowrap; -}*/ diff --git a/docs/articles/Introduction_files/HomeButton-0.0.1/home-button.js b/docs/articles/Introduction_files/HomeButton-0.0.1/home-button.js deleted file mode 100644 index a7a8e7f..0000000 --- a/docs/articles/Introduction_files/HomeButton-0.0.1/home-button.js +++ /dev/null @@ -1,40 +0,0 @@ -LeafletWidget.methods.addHomeButton = function (xmin, ymin, xmax, ymax, useext, - group, label, icon, position) { - - if (this.easyButton) { - this.easyButton.removeFrom(this); - } - - var bx = []; - if (useext) { - bx = [[ymin, xmin], [ymax, xmax]]; - } else { - bx = this.layerManager._groupContainers[group].getBounds(); - } - - var easyButton = new L.easyButton({ - position: position, - states: [{ - stateName: label, // name the state - icon: icon, // and define its properties - title: label, // like its title - onClick: function(btn, map){ - map.fitBounds(bx, {maxZoom: 18}); - btn.state(label); - } - }] - }); - - easyButton.addTo(this); - - this.currentEasyButton = easyButton; - -}; - - -LeafletWidget.methods.removeHomeButton = function () { - if (this.currentEasyButton) { - this.currentEasyButton.removeFrom(this); - this.currentEasyButton = null; - } -}; diff --git a/docs/articles/Introduction_files/Proj4Leaflet-1.0.1/proj4leaflet.js b/docs/articles/Introduction_files/Proj4Leaflet-1.0.1/proj4leaflet.js deleted file mode 100644 index 5ce8d47..0000000 --- a/docs/articles/Introduction_files/Proj4Leaflet-1.0.1/proj4leaflet.js +++ /dev/null @@ -1,272 +0,0 @@ -(function (factory) { - var L, proj4; - if (typeof define === 'function' && define.amd) { - // AMD - define(['leaflet', 'proj4'], factory); - } else if (typeof module === 'object' && typeof module.exports === "object") { - // Node/CommonJS - L = require('leaflet'); - proj4 = require('proj4'); - module.exports = factory(L, proj4); - } else { - // Browser globals - if (typeof window.L === 'undefined' || typeof window.proj4 === 'undefined') - throw 'Leaflet and proj4 must be loaded first'; - factory(window.L, window.proj4); - } -}(function (L, proj4) { - if (proj4.__esModule && proj4.default) { - // If proj4 was bundled as an ES6 module, unwrap it to get - // to the actual main proj4 object. - // See discussion in https://github.com/kartena/Proj4Leaflet/pull/147 - proj4 = proj4.default; - } - - L.Proj = {}; - - L.Proj._isProj4Obj = function(a) { - return (typeof a.inverse !== 'undefined' && - typeof a.forward !== 'undefined'); - }; - - L.Proj.Projection = L.Class.extend({ - initialize: function(code, def, bounds) { - var isP4 = L.Proj._isProj4Obj(code); - this._proj = isP4 ? code : this._projFromCodeDef(code, def); - this.bounds = isP4 ? def : bounds; - }, - - project: function (latlng) { - var point = this._proj.forward([latlng.lng, latlng.lat]); - return new L.Point(point[0], point[1]); - }, - - unproject: function (point, unbounded) { - var point2 = this._proj.inverse([point.x, point.y]); - return new L.LatLng(point2[1], point2[0], unbounded); - }, - - _projFromCodeDef: function(code, def) { - if (def) { - proj4.defs(code, def); - } else if (proj4.defs[code] === undefined) { - var urn = code.split(':'); - if (urn.length > 3) { - code = urn[urn.length - 3] + ':' + urn[urn.length - 1]; - } - if (proj4.defs[code] === undefined) { - throw 'No projection definition for code ' + code; - } - } - - return proj4(code); - } - }); - - L.Proj.CRS = L.Class.extend({ - includes: L.CRS, - - options: { - transformation: new L.Transformation(1, 0, -1, 0) - }, - - initialize: function(a, b, c) { - var code, - proj, - def, - options; - - if (L.Proj._isProj4Obj(a)) { - proj = a; - code = proj.srsCode; - options = b || {}; - - this.projection = new L.Proj.Projection(proj, options.bounds); - } else { - code = a; - def = b; - options = c || {}; - this.projection = new L.Proj.Projection(code, def, options.bounds); - } - - L.Util.setOptions(this, options); - this.code = code; - this.transformation = this.options.transformation; - - if (this.options.origin) { - this.transformation = - new L.Transformation(1, -this.options.origin[0], - -1, this.options.origin[1]); - } - - if (this.options.scales) { - this._scales = this.options.scales; - } else if (this.options.resolutions) { - this._scales = []; - for (var i = this.options.resolutions.length - 1; i >= 0; i--) { - if (this.options.resolutions[i]) { - this._scales[i] = 1 / this.options.resolutions[i]; - } - } - } - - this.infinite = !this.options.bounds; - - }, - - scale: function(zoom) { - var iZoom = Math.floor(zoom), - baseScale, - nextScale, - scaleDiff, - zDiff; - if (zoom === iZoom) { - return this._scales[zoom]; - } else { - // Non-integer zoom, interpolate - baseScale = this._scales[iZoom]; - nextScale = this._scales[iZoom + 1]; - scaleDiff = nextScale - baseScale; - zDiff = (zoom - iZoom); - return baseScale + scaleDiff * zDiff; - } - }, - - zoom: function(scale) { - // Find closest number in this._scales, down - var downScale = this._closestElement(this._scales, scale), - downZoom = this._scales.indexOf(downScale), - nextScale, - nextZoom, - scaleDiff; - // Check if scale is downScale => return array index - if (scale === downScale) { - return downZoom; - } - if (downScale === undefined) { - return -Infinity; - } - // Interpolate - nextZoom = downZoom + 1; - nextScale = this._scales[nextZoom]; - if (nextScale === undefined) { - return Infinity; - } - scaleDiff = nextScale - downScale; - return (scale - downScale) / scaleDiff + downZoom; - }, - - distance: L.CRS.Earth.distance, - - R: L.CRS.Earth.R, - - /* Get the closest lowest element in an array */ - _closestElement: function(array, element) { - var low; - for (var i = array.length; i--;) { - if (array[i] <= element && (low === undefined || low < array[i])) { - low = array[i]; - } - } - return low; - } - }); - - L.Proj.GeoJSON = L.GeoJSON.extend({ - initialize: function(geojson, options) { - this._callLevel = 0; - L.GeoJSON.prototype.initialize.call(this, geojson, options); - }, - - addData: function(geojson) { - var crs; - - if (geojson) { - if (geojson.crs && geojson.crs.type === 'name') { - crs = new L.Proj.CRS(geojson.crs.properties.name); - } else if (geojson.crs && geojson.crs.type) { - crs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code); - } - - if (crs !== undefined) { - this.options.coordsToLatLng = function(coords) { - var point = L.point(coords[0], coords[1]); - return crs.projection.unproject(point); - }; - } - } - - // Base class' addData might call us recursively, but - // CRS shouldn't be cleared in that case, since CRS applies - // to the whole GeoJSON, inluding sub-features. - this._callLevel++; - try { - L.GeoJSON.prototype.addData.call(this, geojson); - } finally { - this._callLevel--; - if (this._callLevel === 0) { - delete this.options.coordsToLatLng; - } - } - } - }); - - L.Proj.geoJson = function(geojson, options) { - return new L.Proj.GeoJSON(geojson, options); - }; - - L.Proj.ImageOverlay = L.ImageOverlay.extend({ - initialize: function (url, bounds, options) { - L.ImageOverlay.prototype.initialize.call(this, url, null, options); - this._projectedBounds = bounds; - }, - - // Danger ahead: Overriding internal methods in Leaflet. - // Decided to do this rather than making a copy of L.ImageOverlay - // and doing very tiny modifications to it. - // Future will tell if this was wise or not. - _animateZoom: function (event) { - var scale = this._map.getZoomScale(event.zoom); - var northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y); - var offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center); - - L.DomUtil.setTransform(this._image, offset, scale); - }, - - _reset: function () { - var zoom = this._map.getZoom(); - var pixelOrigin = this._map.getPixelOrigin(); - var bounds = L.bounds( - this._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin), - this._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin) - ); - var size = bounds.getSize(); - - L.DomUtil.setPosition(this._image, bounds.min); - this._image.style.width = size.x + 'px'; - this._image.style.height = size.y + 'px'; - }, - - _projectedToNewLayerPoint: function (point, zoom, center) { - var viewHalf = this._map.getSize()._divideBy(2); - var newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round(); - var topLeft = newTopLeft.add(this._map._getMapPanePos()); - - return this._transform(point, zoom)._subtract(topLeft); - }, - - _transform: function (point, zoom) { - var crs = this._map.options.crs; - var transformation = crs.transformation; - var scale = crs.scale(zoom); - - return transformation.transform(point, scale); - } - }); - - L.Proj.imageOverlay = function (url, bounds, options) { - return new L.Proj.ImageOverlay(url, bounds, options); - }; - - return L.Proj; -})); diff --git a/docs/articles/Introduction_files/clipboard-0.0.1/setClipboardText.js b/docs/articles/Introduction_files/clipboard-0.0.1/setClipboardText.js deleted file mode 100644 index 919477d..0000000 --- a/docs/articles/Introduction_files/clipboard-0.0.1/setClipboardText.js +++ /dev/null @@ -1,51 +0,0 @@ -// taken from -// https://ourcodeworld.com/articles/read/143/how-to-copy-text-to-clipboard-with-javascript-easily -function setClipboardText(text) { - var id = 'mycustom-clipboard-textarea-hidden-id'; - var existsTextarea = document.getElementById(id); - - if (!existsTextarea) { - console.log('Creating textarea'); - var textarea = document.createElement('textarea'); - textarea.id = id; - // Place in top-left corner of screen regardless of scroll position. - textarea.style.position = 'fixed'; - textarea.style.top = 0; - textarea.style.left = 0; - - // Ensure it has a small width and height. Setting to 1px / 1em - // doesn't work as this gives a negative w/h on some browsers. - textarea.style.width = '1px'; - textarea.style.height = '1px'; - - // We don't need padding, reducing the size if it does flash render. - textarea.style.padding = 0; - - // Clean up any borders. - textarea.style.border = 'none'; - textarea.style.outline = 'none'; - textarea.style.boxShadow = 'none'; - - // Avoid flash of white box if rendered for any reason. - textarea.style.background = 'transparent'; - document.querySelector('body').appendChild(textarea); - console.log('The textarea now exists :)'); - existsTextarea = document.getElementById(id); - } else { - console.log('The textarea already exists :3'); - } - - existsTextarea.value = text; - existsTextarea.select(); - - try { - var status = document.execCommand('copy'); - if (!status) { - console.error('Cannot copy text'); - } else { - console.log('The text is now on the clipboard'); - } - } catch (err) { - console.log('Unable to copy.'); - } -} diff --git a/docs/articles/Introduction_files/figure-html/Example Eight ggplot-1.png b/docs/articles/Introduction_files/figure-html/Example Eight ggplot-1.png deleted file mode 100644 index 25e53080ff7540dc5e886e3fdaa91ec2e1c2a46c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5588 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 diff --git a/docs/articles/Introduction_files/figure-html/Example_Eight_ggplot-1.png b/docs/articles/Introduction_files/figure-html/Example_Eight_ggplot-1.png deleted file mode 100644 index d3e5e0be449ca976f5af6a3c441695ebb4663375..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39678 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 diff --git a/docs/articles/Introduction_files/htmlwidgets-1.5.4/htmlwidgets.js b/docs/articles/Introduction_files/htmlwidgets-1.5.4/htmlwidgets.js deleted file mode 100644 index da8b236..0000000 --- a/docs/articles/Introduction_files/htmlwidgets-1.5.4/htmlwidgets.js +++ /dev/null @@ -1,903 +0,0 @@ -(function() { - // If window.HTMLWidgets is already defined, then use it; otherwise create a - // new object. This allows preceding code to set options that affect the - // initialization process (though none currently exist). - window.HTMLWidgets = window.HTMLWidgets || {}; - - // See if we're running in a viewer pane. If not, we're in a web browser. - var viewerMode = window.HTMLWidgets.viewerMode = - /\bviewer_pane=1\b/.test(window.location); - - // See if we're running in Shiny mode. If not, it's a static document. - // Note that static widgets can appear in both Shiny and static modes, but - // obviously, Shiny widgets can only appear in Shiny apps/documents. - var shinyMode = window.HTMLWidgets.shinyMode = - typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; - - // We can't count on jQuery being available, so we implement our own - // version if necessary. - function querySelectorAll(scope, selector) { - if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { - return scope.find(selector); - } - if (scope.querySelectorAll) { - return scope.querySelectorAll(selector); - } - } - - function asArray(value) { - if (value === null) - return []; - if ($.isArray(value)) - return value; - return [value]; - } - - // Implement jQuery's extend - function extend(target /*, ... */) { - if (arguments.length == 1) { - return target; - } - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - } - return target; - } - - // IE8 doesn't support Array.forEach. - function forEach(values, callback, thisArg) { - if (values.forEach) { - values.forEach(callback, thisArg); - } else { - for (var i = 0; i < values.length; i++) { - callback.call(thisArg, values[i], i, values); - } - } - } - - // Replaces the specified method with the return value of funcSource. - // - // Note that funcSource should not BE the new method, it should be a function - // that RETURNS the new method. funcSource receives a single argument that is - // the overridden method, it can be called from the new method. The overridden - // method can be called like a regular function, it has the target permanently - // bound to it so "this" will work correctly. - function overrideMethod(target, methodName, funcSource) { - var superFunc = target[methodName] || function() {}; - var superFuncBound = function() { - return superFunc.apply(target, arguments); - }; - target[methodName] = funcSource(superFuncBound); - } - - // Add a method to delegator that, when invoked, calls - // delegatee.methodName. If there is no such method on - // the delegatee, but there was one on delegator before - // delegateMethod was called, then the original version - // is invoked instead. - // For example: - // - // var a = { - // method1: function() { console.log('a1'); } - // method2: function() { console.log('a2'); } - // }; - // var b = { - // method1: function() { console.log('b1'); } - // }; - // delegateMethod(a, b, "method1"); - // delegateMethod(a, b, "method2"); - // a.method1(); - // a.method2(); - // - // The output would be "b1", "a2". - function delegateMethod(delegator, delegatee, methodName) { - var inherited = delegator[methodName]; - delegator[methodName] = function() { - var target = delegatee; - var method = delegatee[methodName]; - - // The method doesn't exist on the delegatee. Instead, - // call the method on the delegator, if it exists. - if (!method) { - target = delegator; - method = inherited; - } - - if (method) { - return method.apply(target, arguments); - } - }; - } - - // Implement a vague facsimilie of jQuery's data method - function elementData(el, name, value) { - if (arguments.length == 2) { - return el["htmlwidget_data_" + name]; - } else if (arguments.length == 3) { - el["htmlwidget_data_" + name] = value; - return el; - } else { - throw new Error("Wrong number of arguments for elementData: " + - arguments.length); - } - } - - // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex - function escapeRegExp(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - - function hasClass(el, className) { - var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); - return re.test(el.className); - } - - // elements - array (or array-like object) of HTML elements - // className - class name to test for - // include - if true, only return elements with given className; - // if false, only return elements *without* given className - function filterByClass(elements, className, include) { - var results = []; - for (var i = 0; i < elements.length; i++) { - if (hasClass(elements[i], className) == include) - results.push(elements[i]); - } - return results; - } - - function on(obj, eventName, func) { - if (obj.addEventListener) { - obj.addEventListener(eventName, func, false); - } else if (obj.attachEvent) { - obj.attachEvent(eventName, func); - } - } - - function off(obj, eventName, func) { - if (obj.removeEventListener) - obj.removeEventListener(eventName, func, false); - else if (obj.detachEvent) { - obj.detachEvent(eventName, func); - } - } - - // Translate array of values to top/right/bottom/left, as usual with - // the "padding" CSS property - // https://developer.mozilla.org/en-US/docs/Web/CSS/padding - function unpackPadding(value) { - if (typeof(value) === "number") - value = [value]; - if (value.length === 1) { - return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; - } - if (value.length === 2) { - return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; - } - if (value.length === 3) { - return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; - } - if (value.length === 4) { - return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; - } - } - - // Convert an unpacked padding object to a CSS value - function paddingToCss(paddingObj) { - return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; - } - - // Makes a number suitable for CSS - function px(x) { - if (typeof(x) === "number") - return x + "px"; - else - return x; - } - - // Retrieves runtime widget sizing information for an element. - // The return value is either null, or an object with fill, padding, - // defaultWidth, defaultHeight fields. - function sizingPolicy(el) { - var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); - if (!sizingEl) - return null; - var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); - if (viewerMode) { - return sp.viewer; - } else { - return sp.browser; - } - } - - // @param tasks Array of strings (or falsy value, in which case no-op). - // Each element must be a valid JavaScript expression that yields a - // function. Or, can be an array of objects with "code" and "data" - // properties; in this case, the "code" property should be a string - // of JS that's an expr that yields a function, and "data" should be - // an object that will be added as an additional argument when that - // function is called. - // @param target The object that will be "this" for each function - // execution. - // @param args Array of arguments to be passed to the functions. (The - // same arguments will be passed to all functions.) - function evalAndRun(tasks, target, args) { - if (tasks) { - forEach(tasks, function(task) { - var theseArgs = args; - if (typeof(task) === "object") { - theseArgs = theseArgs.concat([task.data]); - task = task.code; - } - var taskFunc = tryEval(task); - if (typeof(taskFunc) !== "function") { - throw new Error("Task must be a function! Source:\n" + task); - } - taskFunc.apply(target, theseArgs); - }); - } - } - - // Attempt eval() both with and without enclosing in parentheses. - // Note that enclosing coerces a function declaration into - // an expression that eval() can parse - // (otherwise, a SyntaxError is thrown) - function tryEval(code) { - var result = null; - try { - result = eval("(" + code + ")"); - } catch(error) { - if (!(error instanceof SyntaxError)) { - throw error; - } - try { - result = eval(code); - } catch(e) { - if (e instanceof SyntaxError) { - throw error; - } else { - throw e; - } - } - } - return result; - } - - function initSizing(el) { - var sizing = sizingPolicy(el); - if (!sizing) - return; - - var cel = document.getElementById("htmlwidget_container"); - if (!cel) - return; - - if (typeof(sizing.padding) !== "undefined") { - document.body.style.margin = "0"; - document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); - } - - if (sizing.fill) { - document.body.style.overflow = "hidden"; - document.body.style.width = "100%"; - document.body.style.height = "100%"; - document.documentElement.style.width = "100%"; - document.documentElement.style.height = "100%"; - if (cel) { - cel.style.position = "absolute"; - var pad = unpackPadding(sizing.padding); - cel.style.top = pad.top + "px"; - cel.style.right = pad.right + "px"; - cel.style.bottom = pad.bottom + "px"; - cel.style.left = pad.left + "px"; - el.style.width = "100%"; - el.style.height = "100%"; - } - - return { - getWidth: function() { return cel.offsetWidth; }, - getHeight: function() { return cel.offsetHeight; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return el.offsetWidth; }, - getHeight: function() { return el.offsetHeight; } - }; - } - } - - // Default implementations for methods - var defaults = { - find: function(scope) { - return querySelectorAll(scope, "." + this.name); - }, - renderError: function(el, err) { - var $el = $(el); - - this.clearError(el); - - // Add all these error classes, as Shiny does - var errClass = "shiny-output-error"; - if (err.type !== null) { - // use the classes of the error condition as CSS class names - errClass = errClass + " " + $.map(asArray(err.type), function(type) { - return errClass + "-" + type; - }).join(" "); - } - errClass = errClass + " htmlwidgets-error"; - - // Is el inline or block? If inline or inline-block, just display:none it - // and add an inline error. - var display = $el.css("display"); - $el.data("restore-display-mode", display); - - if (display === "inline" || display === "inline-block") { - $el.hide(); - if (err.message !== "") { - var errorSpan = $("").addClass(errClass); - errorSpan.text(err.message); - $el.after(errorSpan); - } - } else if (display === "block") { - // If block, add an error just after the el, set visibility:none on the - // el, and position the error to be on top of the el. - // Mark it with a unique ID and CSS class so we can remove it later. - $el.css("visibility", "hidden"); - if (err.message !== "") { - var errorDiv = $("

").addClass(errClass).css("position", "absolute") - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - // setting width can push out the page size, forcing otherwise - // unnecessary scrollbars to appear and making it impossible for - // the element to shrink; so use max-width instead - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - errorDiv.text(err.message); - $el.after(errorDiv); - - // Really dumb way to keep the size/position of the error in sync with - // the parent element as the window is resized or whatever. - var intId = setInterval(function() { - if (!errorDiv[0].parentElement) { - clearInterval(intId); - return; - } - errorDiv - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - }, 500); - } - } - }, - clearError: function(el) { - var $el = $(el); - var display = $el.data("restore-display-mode"); - $el.data("restore-display-mode", null); - - if (display === "inline" || display === "inline-block") { - if (display) - $el.css("display", display); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } else if (display === "block"){ - $el.css("visibility", "inherit"); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } - }, - sizing: {} - }; - - // Called by widget bindings to register a new type of widget. The definition - // object can contain the following properties: - // - name (required) - A string indicating the binding name, which will be - // used by default as the CSS classname to look for. - // - initialize (optional) - A function(el) that will be called once per - // widget element; if a value is returned, it will be passed as the third - // value to renderValue. - // - renderValue (required) - A function(el, data, initValue) that will be - // called with data. Static contexts will cause this to be called once per - // element; Shiny apps will cause this to be called multiple times per - // element, as the data changes. - window.HTMLWidgets.widget = function(definition) { - if (!definition.name) { - throw new Error("Widget must have a name"); - } - if (!definition.type) { - throw new Error("Widget must have a type"); - } - // Currently we only support output widgets - if (definition.type !== "output") { - throw new Error("Unrecognized widget type '" + definition.type + "'"); - } - // TODO: Verify that .name is a valid CSS classname - - // Support new-style instance-bound definitions. Old-style class-bound - // definitions have one widget "object" per widget per type/class of - // widget; the renderValue and resize methods on such widget objects - // take el and instance arguments, because the widget object can't - // store them. New-style instance-bound definitions have one widget - // object per widget instance; the definition that's passed in doesn't - // provide renderValue or resize methods at all, just the single method - // factory(el, width, height) - // which returns an object that has renderValue(x) and resize(w, h). - // This enables a far more natural programming style for the widget - // author, who can store per-instance state using either OO-style - // instance fields or functional-style closure variables (I guess this - // is in contrast to what can only be called C-style pseudo-OO which is - // what we required before). - if (definition.factory) { - definition = createLegacyDefinitionAdapter(definition); - } - - if (!definition.renderValue) { - throw new Error("Widget must have a renderValue function"); - } - - // For static rendering (non-Shiny), use a simple widget registration - // scheme. We also use this scheme for Shiny apps/documents that also - // contain static widgets. - window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; - // Merge defaults into the definition; don't mutate the original definition. - var staticBinding = extend({}, defaults, definition); - overrideMethod(staticBinding, "find", function(superfunc) { - return function(scope) { - var results = superfunc(scope); - // Filter out Shiny outputs, we only want the static kind - return filterByClass(results, "html-widget-output", false); - }; - }); - window.HTMLWidgets.widgets.push(staticBinding); - - if (shinyMode) { - // Shiny is running. Register the definition with an output binding. - // The definition itself will not be the output binding, instead - // we will make an output binding object that delegates to the - // definition. This is because we foolishly used the same method - // name (renderValue) for htmlwidgets definition and Shiny bindings - // but they actually have quite different semantics (the Shiny - // bindings receive data that includes lots of metadata that it - // strips off before calling htmlwidgets renderValue). We can't - // just ignore the difference because in some widgets it's helpful - // to call this.renderValue() from inside of resize(), and if - // we're not delegating, then that call will go to the Shiny - // version instead of the htmlwidgets version. - - // Merge defaults with definition, without mutating either. - var bindingDef = extend({}, defaults, definition); - - // This object will be our actual Shiny binding. - var shinyBinding = new Shiny.OutputBinding(); - - // With a few exceptions, we'll want to simply use the bindingDef's - // version of methods if they are available, otherwise fall back to - // Shiny's defaults. NOTE: If Shiny's output bindings gain additional - // methods in the future, and we want them to be overrideable by - // HTMLWidget binding definitions, then we'll need to add them to this - // list. - delegateMethod(shinyBinding, bindingDef, "getId"); - delegateMethod(shinyBinding, bindingDef, "onValueChange"); - delegateMethod(shinyBinding, bindingDef, "onValueError"); - delegateMethod(shinyBinding, bindingDef, "renderError"); - delegateMethod(shinyBinding, bindingDef, "clearError"); - delegateMethod(shinyBinding, bindingDef, "showProgress"); - - // The find, renderValue, and resize are handled differently, because we - // want to actually decorate the behavior of the bindingDef methods. - - shinyBinding.find = function(scope) { - var results = bindingDef.find(scope); - - // Only return elements that are Shiny outputs, not static ones - var dynamicResults = results.filter(".html-widget-output"); - - // It's possible that whatever caused Shiny to think there might be - // new dynamic outputs, also caused there to be new static outputs. - // Since there might be lots of different htmlwidgets bindings, we - // schedule execution for later--no need to staticRender multiple - // times. - if (results.length !== dynamicResults.length) - scheduleStaticRender(); - - return dynamicResults; - }; - - // Wrap renderValue to handle initialization, which unfortunately isn't - // supported natively by Shiny at the time of this writing. - - shinyBinding.renderValue = function(el, data) { - Shiny.renderDependencies(data.deps); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var i = 0; data.evals && i < data.evals.length; i++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); - } - if (!bindingDef.renderOnNullValue) { - if (data.x === null) { - el.style.visibility = "hidden"; - return; - } else { - el.style.visibility = "inherit"; - } - } - if (!elementData(el, "initialized")) { - initSizing(el); - - elementData(el, "initialized", true); - if (bindingDef.initialize) { - var result = bindingDef.initialize(el, el.offsetWidth, - el.offsetHeight); - elementData(el, "init_result", result); - } - } - bindingDef.renderValue(el, data.x, elementData(el, "init_result")); - evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); - }; - - // Only override resize if bindingDef implements it - if (bindingDef.resize) { - shinyBinding.resize = function(el, width, height) { - // Shiny can call resize before initialize/renderValue have been - // called, which doesn't make sense for widgets. - if (elementData(el, "initialized")) { - bindingDef.resize(el, width, height, elementData(el, "init_result")); - } - }; - } - - Shiny.outputBindings.register(shinyBinding, bindingDef.name); - } - }; - - var scheduleStaticRenderTimerId = null; - function scheduleStaticRender() { - if (!scheduleStaticRenderTimerId) { - scheduleStaticRenderTimerId = setTimeout(function() { - scheduleStaticRenderTimerId = null; - window.HTMLWidgets.staticRender(); - }, 1); - } - } - - // Render static widgets after the document finishes loading - // Statically render all elements that are of this widget's class - window.HTMLWidgets.staticRender = function() { - var bindings = window.HTMLWidgets.widgets || []; - forEach(bindings, function(binding) { - var matches = binding.find(document.documentElement); - forEach(matches, function(el) { - var sizeObj = initSizing(el, binding); - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - initResult = binding.initialize(el, - sizeObj ? sizeObj.getWidth() : el.offsetWidth, - sizeObj ? sizeObj.getHeight() : el.offsetHeight - ); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = { - w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, - h: sizeObj ? sizeObj.getHeight() : el.offsetHeight - }; - var resizeHandler = function(e) { - var size = { - w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, - h: sizeObj ? sizeObj.getHeight() : el.offsetHeight - }; - if (size.w === 0 && size.h === 0) - return; - if (size.w === lastSize.w && size.h === lastSize.h) - return; - lastSize = size; - binding.resize(el, size.w, size.h, initResult); - }; - - on(window, "resize", resizeHandler); - - // This is needed for cases where we're running in a Shiny - // app, but the widget itself is not a Shiny output, but - // rather a simple static widget. One example of this is - // an rmarkdown document that has runtime:shiny and widget - // that isn't in a render function. Shiny only knows to - // call resize handlers for Shiny outputs, not for static - // widgets, so we do it ourselves. - if (window.jQuery) { - window.jQuery(document).on( - "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", - resizeHandler - ); - window.jQuery(document).on( - "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", - resizeHandler - ); - } - - // This is needed for the specific case of ioslides, which - // flips slides between display:none and display:block. - // Ideally we would not have to have ioslide-specific code - // here, but rather have ioslides raise a generic event, - // but the rmarkdown package just went to CRAN so the - // window to getting that fixed may be long. - if (window.addEventListener) { - // It's OK to limit this to window.addEventListener - // browsers because ioslides itself only supports - // such browsers. - on(document, "slideenter", resizeHandler); - on(document, "slideleave", resizeHandler); - } - } - - var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); - if (scriptData) { - var data = JSON.parse(scriptData.textContent || scriptData.text); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var k = 0; data.evals && k < data.evals.length; k++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); - } - binding.renderValue(el, data.x, initResult); - evalAndRun(data.jsHooks.render, initResult, [el, data.x]); - } - }); - }); - - invokePostRenderHandlers(); - } - - - function has_jQuery3() { - if (!window.jQuery) { - return false; - } - var $version = window.jQuery.fn.jquery; - var $major_version = parseInt($version.split(".")[0]); - return $major_version >= 3; - } - - /* - / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's - / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now - / really means $(setTimeout(fn)). - / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous - / - / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny - / one tick later than it did before, which means staticRender() is - / called renderValue() earlier than (advanced) widget authors might be expecting. - / https://github.com/rstudio/shiny/issues/2630 - / - / For a concrete example, leaflet has some methods (e.g., updateBounds) - / which reference Shiny methods registered in initShiny (e.g., setInputValue). - / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to - / delay execution of those methods (until Shiny methods are ready) - / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 - / - / Ideally widget authors wouldn't need to use this setTimeout() hack that - / leaflet uses to call Shiny methods on a staticRender(). In the long run, - / the logic initShiny should be broken up so that method registration happens - / right away, but binding happens later. - */ - function maybeStaticRenderLater() { - if (shinyMode && has_jQuery3()) { - window.jQuery(window.HTMLWidgets.staticRender); - } else { - window.HTMLWidgets.staticRender(); - } - } - - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", function() { - document.removeEventListener("DOMContentLoaded", arguments.callee, false); - maybeStaticRenderLater(); - }, false); - } else if (document.attachEvent) { - document.attachEvent("onreadystatechange", function() { - if (document.readyState === "complete") { - document.detachEvent("onreadystatechange", arguments.callee); - maybeStaticRenderLater(); - } - }); - } - - - window.HTMLWidgets.getAttachmentUrl = function(depname, key) { - // If no key, default to the first item - if (typeof(key) === "undefined") - key = 1; - - var link = document.getElementById(depname + "-" + key + "-attachment"); - if (!link) { - throw new Error("Attachment " + depname + "/" + key + " not found in document"); - } - return link.getAttribute("href"); - }; - - window.HTMLWidgets.dataframeToD3 = function(df) { - var names = []; - var length; - for (var name in df) { - if (df.hasOwnProperty(name)) - names.push(name); - if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { - throw new Error("All fields must be arrays"); - } else if (typeof(length) !== "undefined" && length !== df[name].length) { - throw new Error("All fields must be arrays of the same length"); - } - length = df[name].length; - } - var results = []; - var item; - for (var row = 0; row < length; row++) { - item = {}; - for (var col = 0; col < names.length; col++) { - item[names[col]] = df[names[col]][row]; - } - results.push(item); - } - return results; - }; - - window.HTMLWidgets.transposeArray2D = function(array) { - if (array.length === 0) return array; - var newArray = array[0].map(function(col, i) { - return array.map(function(row) { - return row[i] - }) - }); - return newArray; - }; - // Split value at splitChar, but allow splitChar to be escaped - // using escapeChar. Any other characters escaped by escapeChar - // will be included as usual (including escapeChar itself). - function splitWithEscape(value, splitChar, escapeChar) { - var results = []; - var escapeMode = false; - var currentResult = ""; - for (var pos = 0; pos < value.length; pos++) { - if (!escapeMode) { - if (value[pos] === splitChar) { - results.push(currentResult); - currentResult = ""; - } else if (value[pos] === escapeChar) { - escapeMode = true; - } else { - currentResult += value[pos]; - } - } else { - currentResult += value[pos]; - escapeMode = false; - } - } - if (currentResult !== "") { - results.push(currentResult); - } - return results; - } - // Function authored by Yihui/JJ Allaire - window.HTMLWidgets.evaluateStringMember = function(o, member) { - var parts = splitWithEscape(member, '.', '\\'); - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i]; - // part may be a character or 'numeric' member name - if (o !== null && typeof o === "object" && part in o) { - if (i == (l - 1)) { // if we are at the end of the line then evalulate - if (typeof o[part] === "string") - o[part] = tryEval(o[part]); - } else { // otherwise continue to next embedded object - o = o[part]; - } - } - } - }; - - // Retrieve the HTMLWidget instance (i.e. the return value of an - // HTMLWidget binding's initialize() or factory() function) - // associated with an element, or null if none. - window.HTMLWidgets.getInstance = function(el) { - return elementData(el, "init_result"); - }; - - // Finds the first element in the scope that matches the selector, - // and returns the HTMLWidget instance (i.e. the return value of - // an HTMLWidget binding's initialize() or factory() function) - // associated with that element, if any. If no element matches the - // selector, or the first matching element has no HTMLWidget - // instance associated with it, then null is returned. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.find = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var el = scope.querySelector(selector); - if (el === null) { - return null; - } else { - return window.HTMLWidgets.getInstance(el); - } - }; - - // Finds all elements in the scope that match the selector, and - // returns the HTMLWidget instances (i.e. the return values of - // an HTMLWidget binding's initialize() or factory() function) - // associated with the elements, in an array. If elements that - // match the selector don't have an associated HTMLWidget - // instance, the returned array will contain nulls. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.findAll = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var nodes = scope.querySelectorAll(selector); - var results = []; - for (var i = 0; i < nodes.length; i++) { - results.push(window.HTMLWidgets.getInstance(nodes[i])); - } - return results; - }; - - var postRenderHandlers = []; - function invokePostRenderHandlers() { - while (postRenderHandlers.length) { - var handler = postRenderHandlers.shift(); - if (handler) { - handler(); - } - } - } - - // Register the given callback function to be invoked after the - // next time static widgets are rendered. - window.HTMLWidgets.addPostRenderHandler = function(callback) { - postRenderHandlers.push(callback); - }; - - // Takes a new-style instance-bound definition, and returns an - // old-style class-bound definition. This saves us from having - // to rewrite all the logic in this file to accomodate both - // types of definitions. - function createLegacyDefinitionAdapter(defn) { - var result = { - name: defn.name, - type: defn.type, - initialize: function(el, width, height) { - return defn.factory(el, width, height); - }, - renderValue: function(el, x, instance) { - return instance.renderValue(x); - }, - resize: function(el, width, height, instance) { - return instance.resize(width, height); - } - }; - - if (defn.find) - result.find = defn.find; - if (defn.renderError) - result.renderError = defn.renderError; - if (defn.clearError) - result.clearError = defn.clearError; - - return result; - } -})(); - diff --git a/docs/articles/Introduction_files/leaflet-1.3.1/images/layers-2x.png b/docs/articles/Introduction_files/leaflet-1.3.1/images/layers-2x.png deleted file mode 100644 index 200c333dca9652ac4cba004d609e5af4eee168c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1259 zcmVFhCYNy;#0irRPomHqW|G1C*;4?@4#E?jH>?v@U%cy?3dQAc-DchXVErpOh~ z-jbon+tNbnl6hoEb;)TVk+%hTDDi_G%i3*RZ&15!$Fjr^f;Ke&A@|?=`2&+{zr+3a z{D*=t(`AXyS%X7N z%a#RZw6vD^t_rnM`L4E>m=U&R!A-&}nZIi$BOPvkhrCuUe@BN~-lRD)f44;J%TwgE zcze8u!PQ_NR7?o(NylLXVTfDO zxs5=@|GsYEsNo4M#nT%N!UE(?dnS)t2+{ELYAFp*3=iF=|EQnTp`#vlSXuGVraYo? z+RCzXo6h3qA8{KG?S4nE(lM+;Eb4nT3XV;7gcAxUi5m)`k5tv}cPy()8ZR3TLW3I- zAS^}cq-IJvL7a4RgR!yk@~RT%$lA7{L5ES*hyx)M4(yxI$Ub(4f)K|^v1>zvwQY!_ zIrWw8q9GS^!Dp~}+?mbnB6jDF8mVlbQ!jFKDY;w=7;XO{9bq7>LXGK24WA`;rL)_Z z)&j}pbV(;6gY;VMhbxgvn`X;6x}VUEE-7 z%)7j-%t8S=ZL3yc)HbXDAqJZvBTPoiW_A-+a8m3_Z?v{DN7Tnr#O_VUMT0UBt$;p` zDh6JbGHN8JJ*JN%y2%msb97@_S>9!%Egwk;?PEkU9ntz&3uR}%Fj5d$JHQbQb3}a{ zSzFT^#n=VInPpcAS}CNxj?_ zVscANk5Cfz(51EI1pz};AWWb|kgbYNb4wCEGUn3+eMUMV?1-{=I4TlmLJMot@rd07 zZuo2hk1ccu{YmGkcYdWAVdk{Z4Nm?^cTD&}jGm+Q1SYIXMwmG*oO*83&#>l%nbR`G zhh=lZ%xIb7kU3#;TBbfECrnC9P=-XpL|TG2BoZdj61*XiFbW8?1Z_wp%#;>${SUIy V$8qr;L*)Pf002ovPDHLkV1hYLS~36t diff --git a/docs/articles/Introduction_files/leaflet-1.3.1/images/layers.png b/docs/articles/Introduction_files/leaflet-1.3.1/images/layers.png deleted file mode 100644 index 1a72e5784b2b456eac5d7670738db80697af3377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 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 e-I|>x8~*?ZhF3snGbtJX0000cOl4 diff --git a/docs/articles/Introduction_files/leaflet-1.3.1/images/marker-icon.png b/docs/articles/Introduction_files/leaflet-1.3.1/images/marker-icon.png deleted file mode 100644 index 950edf24677ded147df13b26f91baa2b0fa70513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)P001cn1^@s6z>|W`000GnNklGNuHDcIX17Zdjl&3`L?0sTjIws<{((Dh&g-s0<@jYQyl?D*X^?%13;ml^gy> ziMrY_^1WI=(g@LMizu=zCoA>C`6|QEq1eV92k*7m>G65*&@&6)aC&e}G zI)pf-Za|N`DT&Cn1J|o`19mumxW~hiKiKyc-P`S@q)rdTo84@QI@;0yXrG%9uhI>A zG5QHb6s4=<6xy{1 z@NMxEkryp{LS44%z$3lP^cX!9+2-;CTt3wM4(k*#C{aiIiLuB>jJj;KPhPzIC00bL zU3a#;aJld94lCW=`4&aAy8M7PY=HQ>O%$YEP4c4UY#CRxfgbE~(|uiI=YS8q;O9y6 zmIkXzR`}p7ti|PrM3a}WMnR=3NVnWdAAR>b9X@)DKL6=YsvmH%?I24wdq?Gh54_;# z$?_LvgjEdspdQlft#4CQ z`2Zyvy?*)N1Ftw|{_hakhG9WjS?Az@I@+IZ8JbWewR!XUK4&6346+d#~gsE0SY(LX8&JfY>Aj)RxGy96nwhs2rv zzW6pTnMpFkDSkT*a*6Dx|u@ds6ISVn0@^RmIsKZ5Y;bazbc;tTSq(kg(=481ODrPyNB6n z-$+U}(w$m6U6H$w17Bw+wDaFIe~GvNMYvnw31MpY0eQKT9l>SU``8k7w4)z!GZKMI z#_cEKq7k~i%nlK@6c-K?+R;B#5$?T#YpKD`t_4bAs^#E+@5QW$@OX3*`;(#{U^d-vY)&xEE>n5lYl&T?Amke9$Lam@{1K@O ze*LXqlKQHiv=gx+V^Cbb2?z@ISBQ*3amF;9UJ3SBg(N|710TLamQmYZ&Qjn2LuO<* zCZlB4n%@pc&7NNnY1}x+NWpHlq`OJEo|`aYN9<`RBUB+79g;>dgb6YlfN#kGL?lO_ z!6~M^7sOnbsUkKk<@Ysie&`G>ruxH&Mgy&8;i=A zB9OO!xR{AyODw>DS-q5YM{0ExFEAzt zm>RdS+ssW(-8|?xr0(?$vBVB*%(xDLtq3Hf0I5yFm<_g=W2`QWAax{1rWVH=I!VrP zs(rTFX@W#t$hXNvbgX`gK&^w_YD;CQ!B@e0QbLIWaKAXQe2-kkloo;{iF#6}z!4=W zi$giRj1{ zt;2w`VSCF#WE&*ev7jpsC=6175@(~nTE2;7M-L((0bH@yG}-TB$R~WXd?tA$s3|%y zA`9$sA(>F%J3ioz<-LJl*^o1|w84l>HBR`>3l9c8$5Xr@xCiIQ7{x$fMCzOk_-M=% z+{a_Q#;42`#KfUte@$NT77uaTz?b-fBe)1s5XE$yA79fm?KqM^VgLXD07*qoM6N<$ Ef<_J(9smFU diff --git a/docs/articles/Introduction_files/leaflet-1.3.1/leaflet.css b/docs/articles/Introduction_files/leaflet-1.3.1/leaflet.css deleted file mode 100644 index d1b47a1..0000000 --- a/docs/articles/Introduction_files/leaflet-1.3.1/leaflet.css +++ /dev/null @@ -1,636 +0,0 @@ -/* required styles */ - -.leaflet-pane, -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-tile-container, -.leaflet-pane > svg, -.leaflet-pane > canvas, -.leaflet-zoom-box, -.leaflet-image-layer, -.leaflet-layer { - position: absolute; - left: 0; - top: 0; - } -.leaflet-container { - overflow: hidden; - } -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-user-drag: none; - } -/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ -.leaflet-safari .leaflet-tile { - image-rendering: -webkit-optimize-contrast; - } -/* hack that prevents hw layers "stretching" when loading new tiles */ -.leaflet-safari .leaflet-tile-container { - width: 1600px; - height: 1600px; - -webkit-transform-origin: 0 0; - } -.leaflet-marker-icon, -.leaflet-marker-shadow { - display: block; - } -/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ -/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ -.leaflet-container .leaflet-overlay-pane svg, -.leaflet-container .leaflet-marker-pane img, -.leaflet-container .leaflet-shadow-pane img, -.leaflet-container .leaflet-tile-pane img, -.leaflet-container img.leaflet-image-layer { - max-width: none !important; - max-height: none !important; - } - -.leaflet-container.leaflet-touch-zoom { - -ms-touch-action: pan-x pan-y; - touch-action: pan-x pan-y; - } -.leaflet-container.leaflet-touch-drag { - -ms-touch-action: pinch-zoom; - /* Fallback for FF which doesn't support pinch-zoom */ - touch-action: none; - touch-action: pinch-zoom; -} -.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { - -ms-touch-action: none; - touch-action: none; -} -.leaflet-container { - -webkit-tap-highlight-color: transparent; -} -.leaflet-container a { - -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); -} -.leaflet-tile { - filter: inherit; - visibility: hidden; - } -.leaflet-tile-loaded { - visibility: inherit; - } -.leaflet-zoom-box { - width: 0; - height: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - z-index: 800; - } -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-pane { z-index: 400; } - -.leaflet-tile-pane { z-index: 200; } -.leaflet-overlay-pane { z-index: 400; } -.leaflet-shadow-pane { z-index: 500; } -.leaflet-marker-pane { z-index: 600; } -.leaflet-tooltip-pane { z-index: 650; } -.leaflet-popup-pane { z-index: 700; } - -.leaflet-map-pane canvas { z-index: 100; } -.leaflet-map-pane svg { z-index: 200; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 800; - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-tile { - will-change: opacity; - } -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } -.leaflet-zoom-animated { - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - will-change: transform; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-interactive { - cursor: pointer; - } -.leaflet-grab { - cursor: -webkit-grab; - cursor: -moz-grab; - } -.leaflet-crosshair, -.leaflet-crosshair .leaflet-interactive { - cursor: crosshair; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-grab, -.leaflet-dragging .leaflet-grab .leaflet-interactive, -.leaflet-dragging .leaflet-marker-draggable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - } - -/* marker & overlays interactivity */ -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-image-layer, -.leaflet-pane > svg path, -.leaflet-tile-container { - pointer-events: none; - } - -.leaflet-marker-icon.leaflet-interactive, -.leaflet-image-layer.leaflet-interactive, -.leaflet-pane > svg path.leaflet-interactive { - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline: 0; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-container a.leaflet-active { - outline: 2px solid orange; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a, -.leaflet-bar a:hover { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } -.leaflet-touch .leaflet-bar a:first-child { - border-top-left-radius: 2px; - border-top-right-radius: 2px; - } -.leaflet-touch .leaflet-bar a:last-child { - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; - } - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } - -.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { - font-size: 22px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(images/layers.png); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(images/layers-2x.png); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-scrollbar { - overflow-y: scroll; - overflow-x: hidden; - padding-right: 5px; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - -/* Default icon URLs */ -.leaflet-default-icon-path { - background-image: url(images/marker-icon.png); - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.7); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover { - text-decoration: underline; - } -.leaflet-container .leaflet-control-attribution, -.leaflet-container .leaflet-control-scale { - font-size: 11px; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - font-size: 11px; - white-space: nowrap; - overflow: hidden; - -moz-box-sizing: border-box; - box-sizing: border-box; - - background: #fff; - background: rgba(255, 255, 255, 0.5); - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - margin-bottom: 20px; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 19px; - line-height: 1.4; - } -.leaflet-popup-content p { - margin: 18px 0; - } -.leaflet-popup-tip-container { - width: 40px; - height: 20px; - position: absolute; - left: 50%; - margin-left: -20px; - overflow: hidden; - pointer-events: none; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - color: #333; - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - padding: 4px 4px 0 0; - border: none; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - color: #c3c3c3; - text-decoration: none; - font-weight: bold; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; - } -.leaflet-popup-scrolled { - overflow: auto; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } -.leaflet-oldie .leaflet-popup-tip-container { - margin-top: -1px; - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } - - -/* Tooltip */ -/* Base styles for the element that has a tooltip */ -.leaflet-tooltip { - position: absolute; - padding: 6px; - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - color: #222; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.4); - } -.leaflet-tooltip.leaflet-clickable { - cursor: pointer; - pointer-events: auto; - } -.leaflet-tooltip-top:before, -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - position: absolute; - pointer-events: none; - border: 6px solid transparent; - background: transparent; - content: ""; - } - -/* Directions */ - -.leaflet-tooltip-bottom { - margin-top: 6px; -} -.leaflet-tooltip-top { - margin-top: -6px; -} -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-top:before { - left: 50%; - margin-left: -6px; - } -.leaflet-tooltip-top:before { - bottom: 0; - margin-bottom: -12px; - border-top-color: #fff; - } -.leaflet-tooltip-bottom:before { - top: 0; - margin-top: -12px; - margin-left: -6px; - border-bottom-color: #fff; - } -.leaflet-tooltip-left { - margin-left: -6px; -} -.leaflet-tooltip-right { - margin-left: 6px; -} -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - top: 50%; - margin-top: -6px; - } -.leaflet-tooltip-left:before { - right: 0; - margin-right: -12px; - border-left-color: #fff; - } -.leaflet-tooltip-right:before { - left: 0; - margin-left: -12px; - border-right-color: #fff; - } diff --git a/docs/articles/Introduction_files/leaflet-1.3.1/leaflet.js b/docs/articles/Introduction_files/leaflet-1.3.1/leaflet.js deleted file mode 100644 index 4eca8af..0000000 --- a/docs/articles/Introduction_files/leaflet-1.3.1/leaflet.js +++ /dev/null @@ -1,5 +0,0 @@ -/* @preserve - * Leaflet 1.3.1+Detached: ba6f97fff8647e724e4dfe66d2ed7da11f908989.ba6f97f, a JS library for interactive maps. https://leafletjs.com - * (c) 2010-2017 Vladimir Agafonkin, (c) 2010-2011 CloudMade - */ -!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";function i(t){var i,e,n,o;for(e=1,n=arguments.length;e=0}function I(t,i,e,n){return"touchstart"===i?O(t,e,n):"touchmove"===i?W(t,e,n):"touchend"===i&&H(t,e,n),this}function B(t,i,e){var n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(Qi,n,!1):"touchmove"===i?t.removeEventListener(te,n,!1):"touchend"===i&&(t.removeEventListener(ie,n,!1),t.removeEventListener(ee,n,!1)),this}function O(t,i,n){var o=e(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(ne.indexOf(t.target.tagName)<0))return;$(t)}j(t,i)});t["_leaflet_touchstart"+n]=o,t.addEventListener(Qi,o,!1),se||(document.documentElement.addEventListener(Qi,R,!0),document.documentElement.addEventListener(te,D,!0),document.documentElement.addEventListener(ie,N,!0),document.documentElement.addEventListener(ee,N,!0),se=!0)}function R(t){oe[t.pointerId]=t,re++}function D(t){oe[t.pointerId]&&(oe[t.pointerId]=t)}function N(t){delete oe[t.pointerId],re--}function j(t,i){t.touches=[];for(var e in oe)t.touches.push(oe[e]);t.changedTouches=[t],i(t)}function W(t,i,e){var n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&j(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(te,n,!1)}function H(t,i,e){var n=function(t){j(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(ie,n,!1),t.addEventListener(ee,n,!1)}function F(t,i,e){function n(t){var i;if(Ui){if(!Pi||"mouse"===t.pointerType)return;i=re}else i=t.touches.length;if(!(i>1)){var e=Date.now(),n=e-(s||e);r=t.touches?t.touches[0]:t,a=n>0&&n<=h,s=e}}function o(t){if(a&&!r.cancelBubble){if(Ui){if(!Pi||"mouse"===t.pointerType)return;var e,n,o={};for(n in r)e=r[n],o[n]=e&&e.bind?e.bind(r):e;r=o}r.type="dblclick",i(r),s=null}}var s,r,a=!1,h=250;return t[ue+ae+e]=n,t[ue+he+e]=o,t[ue+"dblclick"+e]=i,t.addEventListener(ae,n,!1),t.addEventListener(he,o,!1),t.addEventListener("dblclick",i,!1),this}function U(t,i){var e=t[ue+ae+i],n=t[ue+he+i],o=t[ue+"dblclick"+i];return t.removeEventListener(ae,e,!1),t.removeEventListener(he,n,!1),Pi||t.removeEventListener("dblclick",o,!1),this}function V(t,i,e,n){if("object"==typeof i)for(var o in i)G(t,o,i[o],e);else for(var s=0,r=(i=u(i)).length;s100&&n<500||t.target._simulatedClick&&!t._simulated?Q(t):(pi=e,i(t))}function rt(t){return"string"==typeof t?document.getElementById(t):t}function at(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function ht(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ut(t){var i=t.parentNode;i&&i.removeChild(t)}function lt(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ct(t){var i=t.parentNode;i.lastChild!==t&&i.appendChild(t)}function _t(t){var i=t.parentNode;i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function dt(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=gt(t);return e.length>0&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function pt(t,i){if(void 0!==t.classList)for(var e=u(i),n=0,o=e.length;nh&&(s=r,h=a);h>e&&(i[s]=1,Et(t,i,e,n,s),Et(t,i,e,s,o))}function kt(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;ni&&(e.push(t[n]),o=n);return oi.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function Ot(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Rt(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return u>0&&((o=((t.x-s)*a+(t.y-r)*h)/u)>1?(s=e.x,r=e.y):o>0&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new x(s,r)}function Dt(t){return!ei(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function Nt(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),Dt(t)}function jt(t,i,e){var n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o0?Math.floor(t):Math.ceil(t)};x.prototype={clone:function(){return new x(this.x,this.y)},add:function(t){return this.clone()._add(w(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(w(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new x(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new x(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=li(this.x),this.y=li(this.y),this},distanceTo:function(t){var i=(t=w(t)).x-this.x,e=t.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(t=w(t)).x===this.x&&t.y===this.y},contains:function(t){return t=w(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+a(this.x)+", "+a(this.y)+")"}},P.prototype={extend:function(t){return t=w(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new x((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new x(this.min.x,this.max.y)},getTopRight:function(){return new x(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t="number"==typeof t[0]||t instanceof x?w(t):b(t))instanceof P?(i=t.min,e=t.max):i=e=t,i.x>=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng1,Yi=!!document.createElement("canvas").getContext,Xi=!(!document.createElementNS||!E("svg").createSVGRect),Ji=!Xi&&function(){try{var t=document.createElement("div");t.innerHTML='';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}(),$i=(Object.freeze||Object)({ie:wi,ielt9:Li,edge:Pi,webkit:bi,android:Ti,android23:zi,androidStock:Ci,opera:Zi,chrome:Si,gecko:Ei,safari:ki,phantom:Ai,opera12:Ii,win:Bi,ie3d:Oi,webkit3d:Ri,gecko3d:Di,any3d:Ni,mobile:ji,mobileWebkit:Wi,mobileWebkit3d:Hi,msPointer:Fi,pointer:Ui,touch:Vi,mobileOpera:qi,mobileGecko:Gi,retina:Ki,canvas:Yi,svg:Xi,vml:Ji}),Qi=Fi?"MSPointerDown":"pointerdown",te=Fi?"MSPointerMove":"pointermove",ie=Fi?"MSPointerUp":"pointerup",ee=Fi?"MSPointerCancel":"pointercancel",ne=["INPUT","SELECT","OPTION"],oe={},se=!1,re=0,ae=Fi?"MSPointerDown":Ui?"pointerdown":"touchstart",he=Fi?"MSPointerUp":Ui?"pointerup":"touchend",ue="_leaflet_",le="_leaflet_events",ce=Bi&&Si?2*window.devicePixelRatio:Ei?window.devicePixelRatio:1,_e={},de=(Object.freeze||Object)({on:V,off:q,stopPropagation:Y,disableScrollPropagation:X,disableClickPropagation:J,preventDefault:$,stop:Q,getMousePosition:tt,getWheelDelta:it,fakeStop:et,skipped:nt,isExternalTarget:ot,addListener:V,removeListener:q}),pe=xt(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),me=xt(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),fe="webkitTransition"===me||"OTransition"===me?me+"End":"transitionend";if("onselectstart"in document)mi=function(){V(window,"selectstart",$)},fi=function(){q(window,"selectstart",$)};else{var ge=xt(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);mi=function(){if(ge){var t=document.documentElement.style;gi=t[ge],t[ge]="none"}},fi=function(){ge&&(document.documentElement.style[ge]=gi,gi=void 0)}}var ve,ye,xe=(Object.freeze||Object)({TRANSFORM:pe,TRANSITION:me,TRANSITION_END:fe,get:rt,getStyle:at,create:ht,remove:ut,empty:lt,toFront:ct,toBack:_t,hasClass:dt,addClass:pt,removeClass:mt,setClass:ft,getClass:gt,setOpacity:vt,testProp:xt,setTransform:wt,setPosition:Lt,getPosition:Pt,disableTextSelection:mi,enableTextSelection:fi,disableImageDrag:bt,enableImageDrag:Tt,preventOutline:zt,restoreOutline:Mt}),we=ui.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pt(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=f(this._animate,this),this._step()},_step:function(t){var i=+new Date-this._startTime,e=1e3*this._duration;ithis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,z(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},invalidateSize:function(t){if(!this._loaded)return this;t=i({animate:!1,pan:!0},!0===t?{animate:!0}:t);var n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var o=this.getSize(),s=n.divideBy(2).round(),r=o.divideBy(2).round(),a=s.subtract(r);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(e(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:n,newSize:o})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=i({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var n=e(this._handleGeolocationResponse,this),o=e(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,o,t):navigator.geolocation.getCurrentPosition(n,o,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new M(t.coords.latitude,t.coords.longitude),e=i.toBounds(t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)"number"==typeof t.coords[r]&&(s[r]=t.coords[r]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ut(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)ut(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=ht("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new T(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=z(t),e=w(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=b(this.project(a,n),this.project(r,n)).getSize(),l=Ni?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new x(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new P(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(C(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(w(t),i)},layerPointToLatLng:function(t){var i=w(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(C(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(C(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(z(t))},distance:function(t,i){return this.options.crs.distance(C(t),C(i))},containerPointToLayerPoint:function(t){return w(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return w(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(w(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(C(t)))},mouseEventToContainerPoint:function(t){return tt(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=rt(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");V(i,"scroll",this._onScroll,this),this._containerId=n(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&Ni,pt(t,"leaflet-container"+(Vi?" leaflet-touch":"")+(Ki?" leaflet-retina":"")+(Li?" leaflet-oldie":"")+(ki?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=at(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Lt(this._mapPane,new x(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(pt(t.markerPane,"leaflet-zoom-hide"),pt(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){Lt(this._mapPane,new x(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return g(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Lt(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[n(this._container)]=this;var i=t?q:V;i(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),Ni&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){g(this._resizeRequest),this._resizeRequest=f(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,o=[],s="mouseout"===i||"mouseover"===i,r=t.target||t.srcElement,a=!1;r;){if((e=this._targets[n(r)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){a=!0;break}if(e&&e.listens(i,!0)){if(s&&!ot(r,t))break;if(o.push(e),s)break}if(r===this._container)break;r=r.parentNode}return o.length||a||s||!ot(r,t)||(o=[this]),o},_handleDOMEvent:function(t){if(this._loaded&&!nt(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i||zt(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,n){if("click"===t.type){var o=i({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,e))).length){var s=n[0];"contextmenu"===e&&s.listens(e,!0)&&$(t);var r={originalEvent:t};if("keypress"!==t.type){var a=s.getLatLng&&(!s._radius||s._radius<=10);r.containerPoint=a?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPoint=this.containerPointToLayerPoint(r.containerPoint),r.latlng=a?s.getLatLng():this.layerPointToLatLng(r.layerPoint)}for(var h=0;h0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=Ni?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){mt(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var t=this._proxy=ht("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var i=pe,e=this._proxy.style[i];wt(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",function(){var t=this.getCenter(),i=this.getZoom();wt(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ut(this._proxy),delete this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(f(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,n,o){this._mapPane&&(n&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,pt(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:o}),setTimeout(e(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mt(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),f(function(){this._moveEnd(!0)},this))}}),Pe=v.extend({options:{position:"topright"},initialize:function(t){l(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return pt(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this},remove:function(){return this._map?(ut(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),be=function(t){return new Pe(t)};Le.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){function t(t,o){var s=e+t+" "+e+o;i[t+o]=ht("div",s,n)}var i=this._controlCorners={},e="leaflet-",n=this._controlContainer=ht("div",e+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ut(this._controlCorners[t]);ut(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Te=Pe.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(n(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),o=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=o):i=this._createRadioElement("leaflet-base-layers",o),this._layerControlInputs.push(i),i.layerId=n(t.layer),V(i,"click",this._onInputClick,this);var s=document.createElement("span");s.innerHTML=" "+t.name;var r=document.createElement("div");return e.appendChild(r),r.appendChild(i),r.appendChild(s),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ze=Pe.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=ht("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=ht("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),J(s),V(s,"click",Q),V(s,"click",o,this),V(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";mt(this._zoomInButton,i),mt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&pt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&pt(this._zoomInButton,i)}});Le.mergeOptions({zoomControl:!0}),Le.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new ze,this.addControl(this.zoomControl))});var Me=Pe.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i=ht("div","leaflet-control-scale"),e=this.options;return this._addScales(e,"leaflet-control-scale-line",i),t.on(e.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=ht("div",i,e)),t.imperial&&(this._iScale=ht("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1,i*e}}),Ce=Pe.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){l(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=ht("div","leaflet-control-attribution"),J(this._container);for(var i in t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Le.mergeOptions({attributionControl:!0}),Le.addInitHook(function(){this.options.attributionControl&&(new Ce).addTo(this)});Pe.Layers=Te,Pe.Zoom=ze,Pe.Scale=Me,Pe.Attribution=Ce,be.layers=function(t,i,e){return new Te(t,i,e)},be.zoom=function(t){return new ze(t)},be.scale=function(t){return new Me(t)},be.attribution=function(t){return new Ce(t)};var Ze=v.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Ze.addTo=function(t,i){return t.addHandler(i,this),this};var Se,Ee={Events:hi},ke=Vi?"touchstart mousedown":"mousedown",Ae={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},Ie={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},Be=ui.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){l(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(V(this._dragStartTarget,ke,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Be._dragging===this&&this.finishDrag(),q(this._dragStartTarget,ke,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!dt(this._element,"leaflet-zoom-anim")&&!(Be._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(Be._dragging=this,this._preventOutline&&zt(this._element),bt(),mi(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t;this._startPoint=new x(i.clientX,i.clientY),V(document,Ie[t.type],this._onMove,this),V(document,Ae[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new x(i.clientX,i.clientY).subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)1e-7;h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return new M(a*e,t.x*e/n)}},je=(Object.freeze||Object)({LonLat:De,Mercator:Ne,SphericalMercator:di}),We=i({},_i,{code:"EPSG:3395",projection:Ne,transformation:function(){var t=.5/(Math.PI*Ne.R);return S(t,.5,-t,.5)}()}),He=i({},_i,{code:"EPSG:4326",projection:De,transformation:S(1/180,1,-1/180,.5)}),Fe=i({},ci,{projection:De,transformation:S(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});ci.Earth=_i,ci.EPSG3395=We,ci.EPSG3857=vi,ci.EPSG900913=yi,ci.EPSG4326=He,ci.Simple=Fe;var Ue=ui.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[n(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[n(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});Le.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=n(t);return this._layers[i]?this:(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var i=n(t);return this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&n(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?ei(t)?t:[t]:[]).length;ithis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()i)return r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=C(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new T,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return Dt(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=Dt(t),n=0,o=t.length;n=2&&i[0]instanceof M&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){tn.prototype._setLatLngs.call(this,t),Dt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Dt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new x(i,i);if(t=new P(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;ot.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||tn.prototype._containsPoint.call(this,t,!0)}}),nn=qe.extend({initialize:function(t,i){l(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=ei(t)?t:t.features;if(o){for(i=0,e=o.length;i0?o:[i.src]}else{ei(this._url)||(this._url=[this._url]),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop;for(var a=0;ao?(i.height=o+"px",pt(t,"leaflet-popup-scrolled")):mt(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Lt(this._container,i.add(e))},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var t=this._map,i=parseInt(at(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new x(this._containerLeft,-e-this._containerBottom);o._add(Pt(this._container));var s=t.layerPointToContainerPoint(o),r=w(this.options.autoPanPadding),a=w(this.options.autoPanPaddingTopLeft||r),h=w(this.options.autoPanPaddingBottomRight||r),u=t.getSize(),l=0,c=0;s.x+n+h.x>u.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),Q(t)},_getAnchor:function(){return w(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Le.mergeOptions({closePopupOnClick:!0}),Le.include({openPopup:function(t,i,e){return t instanceof un||(t=new un(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Ue.include({bindPopup:function(t,i){return t instanceof un?(l(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new un(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){if(t instanceof Ue||(i=t,t=this),t instanceof qe)for(var e in this._layers){t=this._layers[e];break}return i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup._source=t,this._popup.update(),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Q(t),i instanceof Je?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var ln=hn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){hn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=hn.prototype.getEvents.call(this);return Vi&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ht("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=w(this.options.offset),u=this._getAnchor();"top"===s?t=t.add(w(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t=t.subtract(w(r/2-h.x,-h.y,!0)):"center"===s?t=t.subtract(w(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.xthis.options.maxZoom||en&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new x(o,s);r.z=e+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1this.options.maxZoom||void 0!==this.options.minZoom&&o1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new x(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort(function(t,i){return t.distanceTo(s)-i.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(_=0;_e.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return z(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new T(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new x(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(Ci||i.el.setAttribute("src",ni),ut(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pt(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=r,t.onmousemove=r,Li&&this.options.opacity<1&&vt(t,this.options.opacity),Ti&&!zi&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var n=this._getTilePos(t),o=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),e(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&f(e(this._tileReady,this,t,null,s)),Lt(s,n),this._tiles[o]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,n){if(this._map){i&&this.fire("tileerror",{error:i,tile:n,coords:t});var o=this._tileCoordsToKey(t);(n=this._tiles[o])&&(n.loaded=+new Date,this._map._fadeAnimated?(vt(n.el,0),g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this)):(n.active=!0,this._pruneTiles()),i||(pt(n.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),Li||!this._map._fadeAnimated?f(this._pruneTiles,this):setTimeout(e(this._pruneTiles,this),250)))}},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new x(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new P(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),dn=_n.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=l(this,i)).detectRetina&&Ki&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),Ti||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},createTile:function(t,i){var n=document.createElement("img");return V(n,"load",e(this._tileOnLoad,this,i,n)),V(n,"error",e(this._tileOnError,this,i,n)),this.options.crossOrigin&&(n.crossOrigin=""),n.alt="",n.setAttribute("role","presentation"),n.src=this.getTileUrl(t),n},getTileUrl:function(t){var e={r:Ki?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=n),e["-y"]=n}return _(this._url,i(e,this.options))},_tileOnLoad:function(t,i){Li?setTimeout(e(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom,e=this.options.zoomReverse,n=this.options.zoomOffset;return e&&(t=i-t),t+n},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=r,i.onerror=r,i.complete||(i.src=ni,ut(i),delete this._tiles[t]))}}),pn=dn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var n=i({},this.defaultWmsParams);for(var o in e)o in this.options||(n[o]=e[o]);var s=(e=l(this,e)).detectRetina&&Ki?2:1,r=this.getTileSize();n.width=r.x*s,n.height=r.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=b(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===He?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=L.TileLayer.prototype.getTileUrl.call(this,t);return a+c(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,e){return i(this.wmsParams,t),e||this.redraw(),this}});dn.WMS=pn,Yt.wms=function(t,i){return new pn(t,i)};var mn=Ue.extend({options:{padding:.1,tolerance:0},initialize:function(t){l(this,t),n(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&pt(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Pt(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),r=this._map.project(t,i).subtract(s),a=o.multiplyBy(-e).add(n).add(o).subtract(r);Ni?wt(this._container,a,e):Lt(this._container,a)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new P(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),fn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){mn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");V(t,"mousemove",o(this._onMouseMove,32,this),this),V(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),V(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){delete this._ctx,ut(this._container),q(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){this._redrawBounds=null;for(var t in this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers={},mn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=Ki?2:1;Lt(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",Ki&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){mn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[n(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[L.stamp(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(t.options.dashArray){var i,e=t.options.dashArray.split(","),n=[];for(i=0;i')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),vn={_initContainer:function(){this._container=ht("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(mn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=gn("shape");pt(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=gn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ut(i),t.removeInteractiveTarget(i),delete this._layers[n(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=gn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=ei(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=gn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){ct(t._container)},_bringToBack:function(t){_t(t._container)}},yn=Ji?gn:E,xn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=yn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=yn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ut(this._container),q(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){mn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),Lt(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=yn("path");t.options.className&&pt(i,t.options.className),t.options.interactive&&pt(i,"leaflet-interactive"),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ut(t._path),t.removeInteractiveTarget(t._path),delete this._layers[n(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,k(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){ct(t._path)},_bringToBack:function(t){_t(t._path)}});Ji&&xn.include(vn),Le.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this.options.preferCanvas&&Xt()||Jt()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=xn&&Jt({pane:t})||fn&&Xt({pane:t}),this._paneRenderers[t]=i),i}});var wn=en.extend({initialize:function(t,i){en.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=z(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});xn.create=yn,xn.pointsToPath=k,nn.geometryToLayer=Wt,nn.coordsToLatLng=Ht,nn.coordsToLatLngs=Ft,nn.latLngToCoords=Ut,nn.latLngsToCoords=Vt,nn.getFeature=qt,nn.asFeature=Gt,Le.mergeOptions({boxZoom:!0});var Ln=Ze.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){V(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){q(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ut(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),mi(),bt(),this._startPoint=this._map.mouseEventToContainerPoint(t),V(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ht("div","leaflet-zoom-box",this._container),pt(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new P(this._point,this._startPoint),e=i.getSize();Lt(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ut(this._box),mt(this._container,"leaflet-crosshair")),fi(),Tt(),q(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(e(this._resetState,this),0);var i=new T(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Le.addInitHook("addHandler","boxZoom",Ln),Le.mergeOptions({doubleClickZoom:!0});var Pn=Ze.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Le.addInitHook("addHandler","doubleClickZoom",Pn),Le.mergeOptions({dragging:!0,inertia:!zi,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var bn=Ze.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new Be(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pt(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){mt(this._map._container,"leaflet-grab"),mt(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=z(this._map.options.maxBounds);this._offsetLimit=b(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.xi.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)0?s:-s))-i;this._delta=0,this._startTime=null,r&&("center"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});Le.addInitHook("addHandler","scrollWheelZoom",zn),Le.mergeOptions({tap:!0,tapTolerance:15});var Mn=Ze.extend({addHooks:function(){V(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){q(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if($(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new x(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&pt(n,"leaflet-active"),this._holdTimeout=setTimeout(e(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),V(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),q(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&mt(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new x(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});Vi&&!Ui&&Le.addInitHook("addHandler","tap",Mn),Le.mergeOptions({touchZoom:Vi&&!zi,bounceAtZoomLimits:!0});var Cn=Ze.extend({addHooks:function(){pt(this._map._container,"leaflet-touch-zoom"),V(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){mt(this._map._container,"leaflet-touch-zoom"),q(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),V(document,"touchmove",this._onTouchMove,this),V(document,"touchend",this._onTouchEnd,this),$(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,n=i.mouseEventToContainerPoint(t.touches[0]),o=i.mouseEventToContainerPoint(t.touches[1]),s=n.distanceTo(o)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoomi.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var r=n._add(o)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),g(this._animRequest);var a=e(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=f(a,this,!0),$(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,g(this._animRequest),q(document,"touchmove",this._onTouchMove),q(document,"touchend",this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});Le.addInitHook("addHandler","touchZoom",Cn),Le.BoxZoom=Ln,Le.DoubleClickZoom=Pn,Le.Drag=bn,Le.Keyboard=Tn,Le.ScrollWheelZoom=zn,Le.Tap=Mn,Le.TouchZoom=Cn;var Zn=window.L;window.L=t,Object.freeze=$t,t.version="1.3.1+HEAD.ba6f97f",t.noConflict=function(){return window.L=Zn,this},t.Control=Pe,t.control=be,t.Browser=$i,t.Evented=ui,t.Mixin=Ee,t.Util=ai,t.Class=v,t.Handler=Ze,t.extend=i,t.bind=e,t.stamp=n,t.setOptions=l,t.DomEvent=de,t.DomUtil=xe,t.PosAnimation=we,t.Draggable=Be,t.LineUtil=Oe,t.PolyUtil=Re,t.Point=x,t.point=w,t.Bounds=P,t.bounds=b,t.Transformation=Z,t.transformation=S,t.Projection=je,t.LatLng=M,t.latLng=C,t.LatLngBounds=T,t.latLngBounds=z,t.CRS=ci,t.GeoJSON=nn,t.geoJSON=Kt,t.geoJson=sn,t.Layer=Ue,t.LayerGroup=Ve,t.layerGroup=function(t,i){return new Ve(t,i)},t.FeatureGroup=qe,t.featureGroup=function(t){return new qe(t)},t.ImageOverlay=rn,t.imageOverlay=function(t,i,e){return new rn(t,i,e)},t.VideoOverlay=an,t.videoOverlay=function(t,i,e){return new an(t,i,e)},t.DivOverlay=hn,t.Popup=un,t.popup=function(t,i){return new un(t,i)},t.Tooltip=ln,t.tooltip=function(t,i){return new ln(t,i)},t.Icon=Ge,t.icon=function(t){return new Ge(t)},t.DivIcon=cn,t.divIcon=function(t){return new cn(t)},t.Marker=Xe,t.marker=function(t,i){return new Xe(t,i)},t.TileLayer=dn,t.tileLayer=Yt,t.GridLayer=_n,t.gridLayer=function(t){return new _n(t)},t.SVG=xn,t.svg=Jt,t.Renderer=mn,t.Canvas=fn,t.canvas=Xt,t.Path=Je,t.CircleMarker=$e,t.circleMarker=function(t,i){return new $e(t,i)},t.Circle=Qe,t.circle=function(t,i,e){return new Qe(t,i,e)},t.Polyline=tn,t.polyline=function(t,i){return new tn(t,i)},t.Polygon=en,t.polygon=function(t,i){return new en(t,i)},t.Rectangle=wn,t.rectangle=function(t,i){return new wn(t,i)},t.Map=Le,t.map=function(t,i){return new Le(t,i)}}); \ No newline at end of file diff --git a/docs/articles/Introduction_files/leaflet-binding-2.1.1/leaflet.js b/docs/articles/Introduction_files/leaflet-binding-2.1.1/leaflet.js deleted file mode 100644 index 1eafcbe..0000000 --- a/docs/articles/Introduction_files/leaflet-binding-2.1.1/leaflet.js +++ /dev/null @@ -1,2785 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); - var colIndex = -1; - - if (typeof col === "undefined") { - var rowData = {}; - this.colnames.forEach(function (name, i) { - rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; - }); - return rowData; - } else if (typeof col === "string") { - colIndex = this._colIndex(col); - } else if (typeof col === "number") { - colIndex = col; - } - - if (colIndex < 0 || colIndex > this.columns.length) { - if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); - } - - return this.columns[colIndex][row % this.columns[colIndex].length]; - } - }, { - key: "nrow", - value: function nrow() { - return this.effectiveLength; - } - }]); - - return DataFrame; -}(); - -exports["default"] = DataFrame; - - -},{"./util":17}],5:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// In RMarkdown's self-contained mode, we don't have a way to carry around the -// images that Leaflet needs but doesn't load into the page. Instead, we'll use -// the unpkg CDN. -if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { - _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; -} - - -},{"./global/leaflet":10}],6:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// add texxtsize, textOnly, and style -_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; -_leaflet2["default"].Tooltip.prototype.options.textOnly = false; -_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. - -var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; - -_leaflet2["default"].Tooltip.prototype._initLayout = function () { - initLayoutOriginal.call(this); - this._container.style.fontSize = this.options.textsize; - - if (this.options.textOnly) { - _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); - } - - if (this.options.style) { - for (var property in this.options.style) { - this._container.style[property] = this.options.style[property]; - } - } -}; - - -},{"./global/leaflet":10}],7:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var protocolRegex = /^\/\//; - -var upgrade_protocol = function upgrade_protocol(urlTemplate) { - if (protocolRegex.test(urlTemplate)) { - if (window.location.protocol === "file:") { - // if in a local file, support http - // http should auto upgrade if necessary - urlTemplate = "http:" + urlTemplate; - } - } - - return urlTemplate; -}; - -var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; - -_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerInitialize.call(this, urlTemplate, options); -}; - -var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; - -_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerWMSInitialize.call(this, urlTemplate, options); -}; - - -},{"./global/leaflet":10}],8:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.HTMLWidgets; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],9:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.jQuery; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],11:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L.Proj; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.Shiny; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],13:[function(require,module,exports){ -"use strict"; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _controlStore = require("./control-store"); - -var _controlStore2 = _interopRequireDefault(_controlStore); - -var _layerManager = require("./layer-manager"); - -var _layerManager2 = _interopRequireDefault(_layerManager); - -var _methods = require("./methods"); - -var _methods2 = _interopRequireDefault(_methods); - -require("./fixup-default-icon"); - -require("./fixup-default-tooltip"); - -require("./fixup-url-protocol"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -window.LeafletWidget = {}; -window.LeafletWidget.utils = {}; - -var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); - -window.LeafletWidget.DataFrame = _dataframe2["default"]; -window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; -window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. - -function updateBounds(map) { - var id = map.getContainer().id; - var bounds = map.getBounds(); - - _shiny2["default"].onInputChange(id + "_bounds", { - north: bounds.getNorthEast().lat, - east: bounds.getNorthEast().lng, - south: bounds.getSouthWest().lat, - west: bounds.getSouthWest().lng - }); - - _shiny2["default"].onInputChange(id + "_center", { - lng: map.getCenter().lng, - lat: map.getCenter().lat - }); - - _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); -} - -function preventUnintendedZoomOnScroll(map) { - // Prevent unwanted scroll capturing. Similar in purpose to - // https://github.com/CliffCloud/Leaflet.Sleep but with a - // different set of heuristics. - // The basic idea is that when a mousewheel/DOMMouseScroll - // event is seen, we disable scroll wheel zooming until the - // user moves their mouse cursor or clicks on the map. This - // is slightly trickier than just listening for mousemove, - // because mousemove is fired when the page is scrolled, - // even if the user did not physically move the mouse. We - // handle this by examining the mousemove event's screenX - // and screenY properties; if they change, we know it's a - // "true" move. - // lastScreen can never be null, but its x and y can. - var lastScreen = { - x: null, - y: null - }; - (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { - // Disable zooming (until the mouse moves or click) - map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. - - lastScreen = { - x: e.originalEvent.screenX, - y: e.originalEvent.screenY - }; - }); - (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { - // Did the mouse really move? - if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { - // It really moved. Enable zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - }); - (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { - // Clicking always enables zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - }); -} - -_htmlwidgets2["default"].widget({ - name: "leaflet", - type: "output", - factory: function factory(el, width, height) { - var map = null; - return { - // we need to store our map in our returned object. - getMap: function getMap() { - return map; - }, - renderValue: function renderValue(data) { - // Create an appropriate CRS Object if specified - if (data && data.options && data.options.crs) { - data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); - } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 - - - if (map) { - map.remove(); - - map = function () { - return; - }(); // undefine map - - } - - if (data.options.mapFactory && typeof data.options.mapFactory === "function") { - map = data.options.mapFactory(el, data.options); - } else { - map = _leaflet2["default"].map(el, data.options); - } - - preventUnintendedZoomOnScroll(map); // Store some state in the map object - - map.leafletr = { - // Has the map ever rendered successfully? - hasRendered: false, - // Data to be rendered when resize is called with area != 0 - pendingRenderData: null - }; // Check if the map is rendered statically (no output binding) - - if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { - map.id = el.id; // Store the map on the element so we can find it later by ID - - (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app - - map.on("click", function (e) { - _shiny2["default"].onInputChange(map.id + "_click", { - lat: e.latlng.lat, - lng: e.latlng.lng, - ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed - - }); - }); - var groupTimerId = null; - map.on("moveend", function (e) { - updateBounds(e.target); - }).on("layeradd layerremove", function (e) { - // If the layer that's coming or going is a group we created, tell - // the server. - if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { - // But to avoid chattiness, coalesce events - if (groupTimerId) { - clearTimeout(groupTimerId); - groupTimerId = null; - } - - groupTimerId = setTimeout(function () { - groupTimerId = null; - - _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); - }, 100); - } - }); - } - - this.doRenderValue(data, map); - }, - doRenderValue: function doRenderValue(data, map) { - // Leaflet does not behave well when you set up a bunch of layers when - // the map is not visible (width/height == 0). Popups get misaligned - // relative to their owning markers, and the fitBounds calculations - // are off. Therefore we wait until the map is actually showing to - // render the value (we rely on the resize() callback being invoked - // at the appropriate time). - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - map.leafletr.pendingRenderData = data; - return; - } - - map.leafletr.pendingRenderData = null; // Merge data options into defaults - - var options = _jquery2["default"].extend({ - zoomToLimits: "always" - }, data.options); - - if (!map.layerManager) { - map.controls = new _controlStore2["default"](map); - map.layerManager = new _layerManager2["default"](map); - } else { - map.controls.clear(); - map.layerManager.clear(); - } - - var explicitView = false; - - if (data.setView) { - explicitView = true; - map.setView.apply(map, data.setView); - } - - if (data.fitBounds) { - explicitView = true; - methods.fitBounds.apply(map, data.fitBounds); - } - - if (data.flyTo) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - map.flyTo.apply(map, data.flyTo); - } - - if (data.flyToBounds) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - methods.flyToBounds.apply(map, data.flyToBounds); - } - - if (data.options.center) { - explicitView = true; - } // Returns true if the zoomToLimits option says that the map should be - // zoomed to map elements. - - - function needsZoom() { - return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; - } - - if (!explicitView && needsZoom() && !map.getZoom()) { - if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { - // Use the natural limits of what's being drawn on the map - // If the size of the bounding box is 0, leaflet gets all weird - var pad = 0.006; - - if (data.limits.lat[0] === data.limits.lat[1]) { - data.limits.lat[0] = data.limits.lat[0] - pad; - data.limits.lat[1] = data.limits.lat[1] + pad; - } - - if (data.limits.lng[0] === data.limits.lng[1]) { - data.limits.lng[0] = data.limits.lng[0] - pad; - data.limits.lng[1] = data.limits.lng[1] + pad; - } - - map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); - } else { - map.fitWorld(); - } - } - - for (var i = 0; data.calls && i < data.calls.length; i++) { - var call = data.calls[i]; - if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); - } - - map.leafletr.hasRendered = true; - - if (_htmlwidgets2["default"].shinyMode) { - setTimeout(function () { - updateBounds(map); - }, 1); - } - }, - resize: function resize(width, height) { - if (map) { - map.invalidateSize(); - - if (map.leafletr.pendingRenderData) { - this.doRenderValue(map.leafletr.pendingRenderData, map); - } - } - } - }; - } -}); - -if (_htmlwidgets2["default"].shinyMode) { - _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { - var id = data.id; - var el = document.getElementById(id); - var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; - - if (!map) { - (0, _util.log)("Couldn't find map with id " + id); - return; - } // If the map has not rendered, stash the proposed `leafletProxy()` calls - // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. - // This is necessary if the map has not been rendered. - // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. - - - if (!map.leafletr.hasRendered) { - map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); - return; - } - - for (var i = 0; i < data.calls.length; i++) { - var call = data.calls[i]; - var args = call.args; - - for (var _i = 0; _i < call.evals.length; _i++) { - window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); - } - - if (call.dependencies) { - _shiny2["default"].renderDependencies(call.dependencies); - } - - if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); - } - }); -} - - -},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = undefined; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _util = require("./util"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var LayerManager = /*#__PURE__*/function () { - function LayerManager(map) { - _classCallCheck(this, LayerManager); - - this._map = map; // BEGIN layer indices - // {: {: layer}} - - this._byGroup = {}; // {: {: layer}} - - this._byCategory = {}; // {: layer} - - this._byLayerId = {}; // {: { - // "group": , - // "layerId": , - // "category": , - // "container": - // } - // } - - this._byStamp = {}; // {: {: [, , ...], ...}} - - this._byCrosstalkGroup = {}; // END layer indices - // {: L.layerGroup} - - this._categoryContainers = {}; // {: L.layerGroup} - - this._groupContainers = {}; - } - - _createClass(LayerManager, [{ - key: "addLayer", - value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { - var _this = this; - - // Was a group provided? - var hasId = typeof layerId === "string"; - var grouped = typeof group === "string"; - var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. - // We may overwrite this let before using it (i.e. if a group is assigned). - // This one liner creates the _categoryContainers[category] entry if it - // doesn't already exist. - - var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); - - var oldLayer = null; - - if (hasId) { - // First, remove any layer with the same category and layerId - var prefixedLayerId = this._layerIdKey(category, layerId); - - oldLayer = this._byLayerId[prefixedLayerId]; - - if (oldLayer) { - this._removeLayer(oldLayer); - } // Update layerId index - - - this._byLayerId[prefixedLayerId] = layer; - } // Update group index - - - if (grouped) { - this._byGroup[group] = this._byGroup[group] || {}; - this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer - // group; instead, use the group's layer group. - // This one liner creates the _groupContainers[group] entry if it doesn't - // already exist. - - container = this.getLayerGroup(group, true); - } // Update category index - - - this._byCategory[category] = this._byCategory[category] || {}; - this._byCategory[category][stamp] = layer; // Update stamp index - - var layerInfo = this._byStamp[stamp] = { - layer: layer, - group: group, - ctGroup: ctGroup, - ctKey: ctKey, - layerId: layerId, - category: category, - container: container, - hidden: false - }; // Update crosstalk group index - - if (ctGroup) { - if (layer.setStyle) { - // Need to save this info so we know what to set opacity to later - layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; - layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; - } - - var ctg = this._byCrosstalkGroup[ctGroup]; - - if (!ctg) { - ctg = this._byCrosstalkGroup[ctGroup] = {}; - var crosstalk = global.crosstalk; - - var handleFilter = function handleFilter(e) { - if (!e.value) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo = _this._byStamp[ctg[key]]; - - _this._setVisibility(_layerInfo, true); - } - } else { - var selectedKeys = {}; - - for (var _i = 0; _i < e.value.length; _i++) { - selectedKeys[e.value[_i]] = true; - } - - var _groupKeys = Object.keys(ctg); - - for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { - var _key = _groupKeys[_i2]; - var _layerInfo2 = _this._byStamp[ctg[_key]]; - - _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); - } - } - }; - - var filterHandle = new crosstalk.FilterHandle(ctGroup); - filterHandle.on("change", handleFilter); - - var handleSelection = function handleSelection(e) { - if (!e.value || !e.value.length) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo3 = _this._byStamp[ctg[key]]; - - _this._setOpacity(_layerInfo3, 1.0); - } - } else { - var selectedKeys = {}; - - for (var _i3 = 0; _i3 < e.value.length; _i3++) { - selectedKeys[e.value[_i3]] = true; - } - - var _groupKeys2 = Object.keys(ctg); - - for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { - var _key2 = _groupKeys2[_i4]; - var _layerInfo4 = _this._byStamp[ctg[_key2]]; - - _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); - } - } - }; - - var selHandle = new crosstalk.SelectionHandle(ctGroup); - selHandle.on("change", handleSelection); - setTimeout(function () { - handleFilter({ - value: filterHandle.filteredKeys - }); - handleSelection({ - value: selHandle.value - }); - }, 100); - } - - if (!ctg[ctKey]) ctg[ctKey] = []; - ctg[ctKey].push(stamp); - } // Add to container - - - if (!layerInfo.hidden) container.addLayer(layer); - return oldLayer; - } - }, { - key: "brush", - value: function brush(bounds, extraInfo) { - var _this2 = this; - - /* eslint-disable no-console */ - // For each Crosstalk group... - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - var ctg = _this2._byCrosstalkGroup[ctGroupName]; - var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple - // layers)... - - Object.keys(ctg).forEach(function (ctKey) { - // ...and for each layer... - ctg[ctKey].forEach(function (stamp) { - var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... - - if (layerInfo.layer.getLatLng) { - // ... and it's inside the selection bounds... - // TODO: Use pixel containment, not lat/lng containment - if (bounds.contains(layerInfo.layer.getLatLng())) { - // ...add the key to the selection. - selection.push(ctKey); - } - } - }); - }); - new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); - }); - } - }, { - key: "unbrush", - value: function unbrush(extraInfo) { - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); - }); - } - }, { - key: "_setVisibility", - value: function _setVisibility(layerInfo, visible) { - if (layerInfo.hidden ^ visible) { - return; - } else if (visible) { - layerInfo.container.addLayer(layerInfo.layer); - layerInfo.hidden = false; - } else { - layerInfo.container.removeLayer(layerInfo.layer); - layerInfo.hidden = true; - } - } - }, { - key: "_setOpacity", - value: function _setOpacity(layerInfo, opacity) { - if (layerInfo.layer.setOpacity) { - layerInfo.layer.setOpacity(opacity); - } else if (layerInfo.layer.setStyle) { - layerInfo.layer.setStyle({ - opacity: opacity * layerInfo.layer.options.origOpacity, - fillOpacity: opacity * layerInfo.layer.options.origFillOpacity - }); - } - } - }, { - key: "getLayer", - value: function getLayer(category, layerId) { - return this._byLayerId[this._layerIdKey(category, layerId)]; - } - }, { - key: "removeLayer", - value: function removeLayer(category, layerIds) { - var _this3 = this; - - // Find layer info - _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { - var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; - - if (layer) { - _this3._removeLayer(layer); - } - }); - } - }, { - key: "clearLayers", - value: function clearLayers(category) { - var _this4 = this; - - // Find all layers in _byCategory[category] - var catTable = this._byCategory[category]; - - if (!catTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(catTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this4._removeLayer(stamp); - }); - } - }, { - key: "getLayerGroup", - value: function getLayerGroup(group, ensureExists) { - var g = this._groupContainers[group]; - - if (ensureExists && !g) { - this._byGroup[group] = this._byGroup[group] || {}; - g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); - g.groupname = group; - g.addTo(this._map); - } - - return g; - } - }, { - key: "getGroupNameFromLayerGroup", - value: function getGroupNameFromLayerGroup(layerGroup) { - return layerGroup.groupname; - } - }, { - key: "getVisibleGroups", - value: function getVisibleGroups() { - var _this5 = this; - - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - if (_this5._map.hasLayer(v)) { - result.push(k); - } - }); - - return result; - } - }, { - key: "getAllGroupNames", - value: function getAllGroupNames() { - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - result.push(k); - }); - - return result; - } - }, { - key: "clearGroup", - value: function clearGroup(group) { - var _this6 = this; - - // Find all layers in _byGroup[group] - var groupTable = this._byGroup[group]; - - if (!groupTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(groupTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this6._removeLayer(stamp); - }); - } - }, { - key: "clear", - value: function clear() { - function clearLayerGroup(key, layerGroup) { - layerGroup.clearLayers(); - } // Clear all indices and layerGroups - - - this._byGroup = {}; - this._byCategory = {}; - this._byLayerId = {}; - this._byStamp = {}; - this._byCrosstalkGroup = {}; - - _jquery2["default"].each(this._categoryContainers, clearLayerGroup); - - this._categoryContainers = {}; - - _jquery2["default"].each(this._groupContainers, clearLayerGroup); - - this._groupContainers = {}; - } - }, { - key: "_removeLayer", - value: function _removeLayer(layer) { - var stamp; - - if (typeof layer === "string") { - stamp = layer; - } else { - stamp = _leaflet2["default"].Util.stamp(layer); - } - - var layerInfo = this._byStamp[stamp]; - - if (!layerInfo) { - return false; - } - - layerInfo.container.removeLayer(stamp); - - if (typeof layerInfo.group === "string") { - delete this._byGroup[layerInfo.group][stamp]; - } - - if (typeof layerInfo.layerId === "string") { - delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; - } - - delete this._byCategory[layerInfo.category][stamp]; - delete this._byStamp[stamp]; - - if (layerInfo.ctGroup) { - var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; - var layersForKey = ctGroup[layerInfo.ctKey]; - var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; - - if (idx >= 0) { - if (layersForKey.length === 1) { - delete ctGroup[layerInfo.ctKey]; - } else { - layersForKey.splice(idx, 1); - } - } - } - } - }, { - key: "_layerIdKey", - value: function _layerIdKey(category, layerId) { - return category + "\n" + layerId; - } - }]); - - return LayerManager; -}(); - -exports["default"] = LayerManager; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -var _mipmapper = require("./mipmapper"); - -var _mipmapper2 = _interopRequireDefault(_mipmapper); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var methods = {}; -exports["default"] = methods; - -function mouseHandler(mapId, layerId, group, eventName, extraInfo) { - return function (e) { - if (!_htmlwidgets2["default"].shinyMode) return; - var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; - - if (latLng) { - // retrieve only lat, lon values to remove prototype - // and extra parameters added by 3rd party modules - // these objects are for json serialization, not javascript - var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape - - - latLng = { - lat: latLngVal.lat, - lng: latLngVal.lng - }; - } - - var eventInfo = _jquery2["default"].extend({ - id: layerId, - ".nonce": Math.random() // force reactivity - - }, group !== null ? { - group: group - } : null, latLng, extraInfo); - - _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); - }; -} - -methods.mouseHandler = mouseHandler; - -methods.clearGroup = function (group) { - var _this = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { - _this.layerManager.clearGroup(v); - }); -}; - -methods.setView = function (center, zoom, options) { - this.setView(center, zoom, options); -}; - -methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { - this.fitBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.flyTo = function (center, zoom, options) { - this.flyTo(center, zoom, options); -}; - -methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { - this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { - this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); -}; - -methods.addPopups = function (lat, lng, popup, layerId, group, options) { - var _this2 = this; - - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); - - var _loop = function _loop(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); - - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(popup, "popup", thisId, thisGroup); - }).call(_this2); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop(i); - } -}; - -methods.removePopup = function (layerId) { - this.layerManager.removeLayer("popup", layerId); -}; - -methods.clearPopups = function () { - this.layerManager.clearLayers("popup"); -}; - -methods.addTiles = function (urlTemplate, layerId, group, options) { - this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); -}; - -methods.removeTiles = function (layerId) { - this.layerManager.removeLayer("tile", layerId); -}; - -methods.clearTiles = function () { - this.layerManager.clearLayers("tile"); -}; - -methods.addWMSTiles = function (baseUrl, layerId, group, options) { - if (options && options.crs) { - options.crs = (0, _crs_utils.getCRS)(options.crs); - } - - this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); -}; // Given: -// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} -// returns: -// ["a", "b", "a", "c"] - - -function unpackStrings(iconset) { - if (!iconset) { - return iconset; - } - - if (typeof iconset.index === "undefined") { - return iconset; - } - - iconset.data = (0, _util.asArray)(iconset.data); - iconset.index = (0, _util.asArray)(iconset.index); - return _jquery2["default"].map(iconset.index, function (e, i) { - return iconset.data[e]; - }); -} - -function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { - (function () { - var _this3 = this; - - var clusterGroup = this.layerManager.getLayer("cluster", clusterId), - cluster = clusterOptions !== null; - - if (cluster && !clusterGroup) { - clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); - - if (clusterOptions.freezeAtZoom) { - var freezeAtZoom = clusterOptions.freezeAtZoom; - delete clusterOptions.freezeAtZoom; - clusterGroup.freezeAtZoom(freezeAtZoom); - } - - clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); - } - - var extraInfo = cluster ? { - clusterId: clusterId - } : {}; - - var _loop2 = function _loop2(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var marker = markerFunc(df, i); - var thisId = df.get(i, "layerId"); - var thisGroup = cluster ? null : df.get(i, "group"); - - if (cluster) { - clusterGroup.clusterLayerStore.add(marker, thisId); - } else { - this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - } - - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - marker.bindPopup(popup, popupOptions); - } else { - marker.bindPopup(popup); - } - } - - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - if (labelOptions.permanent) { - marker.bindTooltip(label, labelOptions).openTooltip(); - } else { - marker.bindTooltip(label, labelOptions); - } - } else { - marker.bindTooltip(label); - } - } - - marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); - marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); - marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); - marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); - }).call(_this3); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop2(i); - } - - if (cluster) { - this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); - } - }).call(map); -} - -methods.addGenericMarkers = addMarkers; - -methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // Unpack icons - icon.iconUrl = unpackStrings(icon.iconUrl); - icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); - icon.shadowUrl = unpackStrings(icon.shadowUrl); - icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts.iconUrl) { - return new _leaflet2["default"].Icon.Default(); - } // Composite options (like points or sizes) are passed from R with each - // individual component as its own option. We need to combine them now - // into their composite form. - - - if (opts.iconWidth) { - opts.iconSize = [opts.iconWidth, opts.iconHeight]; - } - - if (opts.shadowWidth) { - opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; - } - - if (opts.iconAnchorX) { - opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; - } - - if (opts.shadowAnchorX) { - opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; - } - - if (opts.popupAnchorX) { - opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; - } - - return new _leaflet2["default"].Icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts) { - return new _leaflet2["default"].AwesomeMarkers.icon(); - } - - if (opts.squareMarker) { - opts.className = "awesome-marker awesome-marker-square"; - } - - return new _leaflet2["default"].AwesomeMarkers.icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -function addLayers(map, category, df, layerFunc) { - var _loop3 = function _loop3(i) { - (function () { - var layer = layerFunc(df, i); - - if (!_jquery2["default"].isEmptyObject(layer)) { - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - - if (layer.bindPopup) { - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - layer.bindPopup(popup, popupOptions); - } else { - layer.bindPopup(popup); - } - } - } - - if (layer.bindTooltip) { - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - layer.bindTooltip(label, labelOptions); - } else { - layer.bindTooltip(label); - } - } - } - - layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); - layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); - layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); - var highlightStyle = df.get(i, "highlightOptions"); - - if (!_jquery2["default"].isEmptyObject(highlightStyle)) { - var defaultStyle = {}; - - _jquery2["default"].each(highlightStyle, function (k, v) { - if (k != "bringToFront" && k != "sendToBack") { - if (df.get(i, k)) { - defaultStyle[k] = df.get(i, k); - } - } - }); - - layer.on("mouseover", function (e) { - this.setStyle(highlightStyle); - - if (highlightStyle.bringToFront) { - this.bringToFront(); - } - }); - layer.on("mouseout", function (e) { - this.setStyle(defaultStyle); - - if (highlightStyle.sendToBack) { - this.bringToBack(); - } - }); - } - } - }).call(map); - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop3(i); - } -} - -methods.addGenericLayers = addLayers; - -methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { - return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); - } else { - return null; - } - }); - } -}; - -methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); - }); - } -}; -/* - * @param lat Array of arrays of latitude coordinates for polylines - * @param lng Array of arrays of longitude coordinates for polylines - */ - - -methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - var shapes = df.get(i, "shapes"); - shapes = shapes.map(function (shape) { - return _htmlwidgets2["default"].dataframeToD3(shape[0]); - }); - - if (shapes.length > 1) { - return _leaflet2["default"].polyline(shapes, df.get(i)); - } else { - return _leaflet2["default"].polyline(shapes[0], df.get(i)); - } - }); - } -}; - -methods.removeMarker = function (layerId) { - this.layerManager.removeLayer("marker", layerId); -}; - -methods.clearMarkers = function () { - this.layerManager.clearLayers("marker"); -}; - -methods.removeMarkerCluster = function (layerId) { - this.layerManager.removeLayer("cluster", layerId); -}; - -methods.removeMarkerFromCluster = function (layerId, clusterId) { - var cluster = this.layerManager.getLayer("cluster", clusterId); - if (!cluster) return; - cluster.clusterLayerStore.remove(layerId); -}; - -methods.clearMarkerClusters = function () { - this.layerManager.clearLayers("cluster"); -}; - -methods.removeShape = function (layerId) { - this.layerManager.removeLayer("shape", layerId); -}; - -methods.clearShapes = function () { - this.layerManager.clearLayers("shape"); -}; - -methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { - return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); - } else { - return null; - } - }); -}; -/* - * @param lat Array of arrays of latitude coordinates for polygons - * @param lng Array of arrays of longitude coordinates for polygons - */ - - -methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - // This code used to use L.multiPolygon, but that caused - // double-click on a multipolygon to fail to zoom in on the - // map. Surprisingly, putting all the rings in a single - // polygon seems to still work; complicated multipolygons - // are still rendered correctly. - var shapes = df.get(i, "shapes").map(function (polygon) { - return polygon.map(_htmlwidgets2["default"].dataframeToD3); - }).reduce(function (acc, val) { - return acc.concat(val); - }, []); - return _leaflet2["default"].polygon(shapes, df.get(i)); - }); - } -}; - -methods.addGeoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(data, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties ? feature.properties.popup : null; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); - } - }); - - this.layerManager.addLayer(gjlayer, "geojson", layerId, group); -}; - -methods.removeGeoJSON = function (layerId) { - this.layerManager.removeLayer("geojson", layerId); -}; - -methods.clearGeoJSON = function () { - this.layerManager.clearLayers("geojson"); -}; - -methods.addTopoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(null, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties.popup; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); - } - }); - - global.omnivore.topojson.parse(data, null, gjlayer); - this.layerManager.addLayer(gjlayer, "topojson", layerId, group); -}; - -methods.removeTopoJSON = function (layerId) { - this.layerManager.removeLayer("topojson", layerId); -}; - -methods.clearTopoJSON = function () { - this.layerManager.clearLayers("topojson"); -}; - -methods.addControl = function (html, position, layerId, classes) { - function onAdd(map) { - var div = _leaflet2["default"].DomUtil.create("div", classes); - - if (typeof layerId !== "undefined" && layerId !== null) { - div.setAttribute("id", layerId); - } - - this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to - // not be, when a static leaflet widget is included as part of the shiny - // UI directly (not through leafletOutput or uiOutput). In this case we - // don't do the normal Shiny stuff as that will all happen when Shiny - // itself loads and binds the entire doc. - - if (window.Shiny && _shiny2["default"].initializeInputs) { - _shiny2["default"].renderHtml(html, this._div); - - _shiny2["default"].initializeInputs(this._div); - - _shiny2["default"].bindAll(this._div); - } else { - this._div.innerHTML = html; - } - - return this._div; - } - - function onRemove(map) { - if (window.Shiny && _shiny2["default"].unbindAll) { - _shiny2["default"].unbindAll(this._div); - } - } - - var Control = _leaflet2["default"].Control.extend({ - options: { - position: position - }, - onAdd: onAdd, - onRemove: onRemove - }); - - this.controls.add(new Control(), layerId, html); -}; - -methods.addCustomControl = function (control, layerId) { - this.controls.add(control, layerId); -}; - -methods.removeControl = function (layerId) { - this.controls.remove(layerId); -}; - -methods.getControl = function (layerId) { - this.controls.get(layerId); -}; - -methods.clearControls = function () { - this.controls.clear(); -}; - -methods.addLegend = function (options) { - var legend = _leaflet2["default"].control({ - position: options.position - }); - - var gradSpan; - - legend.onAdd = function (map) { - var div = _leaflet2["default"].DomUtil.create("div", options.className), - colors = options.colors, - labels = options.labels, - legendHTML = ""; - - if (options.type === "numeric") { - // # Formatting constants. - var singleBinHeight = 20; // The distance between tick marks, in px - - var vMargin = 8; // If 1st tick mark starts at top of gradient, how - // many extra px are needed for the top half of the - // 1st label? (ditto for last tick mark/label) - - var tickWidth = 4; // How wide should tick marks be, in px? - - var labelPadding = 6; // How much distance to reserve for tick mark? - // (Must be >= tickWidth) - // # Derived formatting parameters. - // What's the height of a single bin, in percentage (of gradient height)? - // It might not just be 1/(n-1), if the gradient extends past the tick - // marks (which can be the case for pretty cut points). - - var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? - - var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top - // of the gradient? - - var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; - gradSpan = (0, _jquery2["default"])("").css({ - "background": "linear-gradient(" + colors + ")", - "opacity": options.opacity, - "height": totalHeight + "px", - "width": "18px", - "display": "block", - "margin-top": vMargin + "px" - }); - var leftDiv = (0, _jquery2["default"])("
").css("float", "left"), - rightDiv = (0, _jquery2["default"])("
").css("float", "left"); - leftDiv.append(gradSpan); - (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
")); // Have to attach the div to the body at this early point, so that the - // svg text getComputedTextLength() actually works, below. - - document.body.appendChild(div); - var ns = "http://www.w3.org/2000/svg"; - var svg = document.createElementNS(ns, "svg"); - rightDiv.append(svg); - var g = document.createElementNS(ns, "g"); - (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); - svg.appendChild(g); // max label width needed to set width of svg, and right-justify text - - var maxLblWidth = 0; // Create tick marks and labels - - _jquery2["default"].each(labels, function (i, label) { - var y = tickOffset + i * singleBinHeight + 0.5; - var thisLabel = document.createElementNS(ns, "text"); - (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); - g.appendChild(thisLabel); - maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); - var thisTick = document.createElementNS(ns, "line"); - (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); - g.appendChild(thisTick); - }); // Now that we know the max label width, we can right-justify - - - (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for - - (0, _jquery2["default"])(svg).css({ - width: maxLblWidth + labelPadding + "px", - height: totalHeight + vMargin * 2 + "px" - }); - - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - (0, _jquery2["default"])(div).append("
" + options.na_label + "
"); - } - } else { - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - colors.push(options.na_color); - labels.push(options.na_label); - } - - for (var i = 0; i < colors.length; i++) { - legendHTML += " " + labels[i] + "
"; - } - - div.innerHTML = legendHTML; - } - - if (options.title) (0, _jquery2["default"])(div).prepend("
" + options.title + "
"); - return div; - }; - - if (options.group) { - // Auto generate a layerID if not provided - if (!options.layerId) { - options.layerId = _leaflet2["default"].Util.stamp(legend); - } - - var map = this; - map.on("overlayadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("overlayremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - map.on("groupadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("groupremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - } - - this.controls.add(legend, options.layerId); -}; - -methods.addLayersControl = function (baseGroups, overlayGroups, options) { - var _this4 = this; - - // Only allow one layers control at a time - methods.removeLayersControl.call(this); - var firstLayer = true; - var base = {}; - - _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one - - if (_this4.hasLayer(layer)) { - if (firstLayer) { - firstLayer = false; - } else { - _this4.removeLayer(layer); - } - } - } - }); - - var overlay = {}; - - _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - overlay[g] = layer; - } - }); - - this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); - this.addControl(this.currentLayersControl); -}; - -methods.removeLayersControl = function () { - if (this.currentLayersControl) { - this.removeControl(this.currentLayersControl); - this.currentLayersControl = null; - } -}; - -methods.addScaleBar = function (options) { - // Only allow one scale bar at a time - methods.removeScaleBar.call(this); - - var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); - - this.currentScaleBar = scaleBar; -}; - -methods.removeScaleBar = function () { - if (this.currentScaleBar) { - this.currentScaleBar.remove(); - this.currentScaleBar = null; - } -}; - -methods.hideGroup = function (group) { - var _this5 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this5.layerManager.getLayerGroup(g, true); - - if (layer) { - _this5.removeLayer(layer); - } - }); -}; - -methods.showGroup = function (group) { - var _this6 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this6.layerManager.getLayerGroup(g, true); - - if (layer) { - _this6.addLayer(layer); - } - }); -}; - -function setupShowHideGroupsOnZoom(map) { - if (map.leafletr._hasInitializedShowHideGroups) { - return; - } - - map.leafletr._hasInitializedShowHideGroups = true; - - function setVisibility(layer, visible, group) { - if (visible !== map.hasLayer(layer)) { - if (visible) { - map.addLayer(layer); - map.fire("groupadd", { - "name": group, - "layer": layer - }); - } else { - map.removeLayer(layer); - map.fire("groupremove", { - "name": group, - "layer": layer - }); - } - } - } - - function showHideGroupsOnZoom() { - if (!map.layerManager) return; - var zoom = map.getZoom(); - map.layerManager.getAllGroupNames().forEach(function (group) { - var layer = map.layerManager.getLayerGroup(group, false); - - if (layer && typeof layer.zoomLevels !== "undefined") { - setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); - } - }); - } - - map.showHideGroupsOnZoom = showHideGroupsOnZoom; - map.on("zoomend", showHideGroupsOnZoom); -} - -methods.setGroupOptions = function (group, options) { - var _this7 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels - - - if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { - layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); - } - }); - - setupShowHideGroupsOnZoom(this); - this.showHideGroupsOnZoom(); -}; - -methods.addRasterImage = function (uri, bounds, opacity, attribution, layerId, group) { - // uri is a data URI containing an image. We want to paint this image as a - // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. - // We can't simply use ImageOverlay, as it uses bilinear scaling which looks - // awful as you zoom in (and sometimes shifts positions or disappears). - // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. - // First, some helper functions. - // degree2tile converts latitude, longitude, and zoom to x and y tile - // numbers. The tile numbers returned can be non-integral, as there's no - // reason to expect that the lat/lng inputs are exactly on the border of two - // tiles. - // - // We'll use this to convert the bounds we got from the server, into coords - // in tile-space at a given zoom level. Note that once we do the conversion, - // we don't to do any more trigonometry to convert between pixel coordinates - // and tile coordinates; the source image pixel coords, destination canvas - // pixel coords, and tile coords all can be scaled linearly. - function degree2tile(lat, lng, zoom) { - // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames - var latRad = lat * Math.PI / 180; - var n = Math.pow(2, zoom); - var x = (lng + 180) / 360 * n; - var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; - return { - x: x, - y: y - }; - } // Given a range [from,to) and either one or two numbers, returns true if - // there is any overlap between [x,x1) and the range--or if x1 is omitted, - // then returns true if x is within [from,to). - - - function overlap(from, to, x, - /* optional */ - x1) { - if (arguments.length == 3) x1 = x; - return x < to && x1 >= from; - } - - function getCanvasSmoothingProperty(ctx) { - var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; - - for (var i = 0; i < candidates.length; i++) { - if (typeof ctx[candidates[i]] !== "undefined") { - return candidates[i]; - } - } - - return null; - } // Our general strategy is to: - // 1. Load the data URI in an Image() object, so we can get its pixel - // dimensions and the underlying image data. (We could have done this - // by not encoding as PNG at all but just send an array of RGBA values - // from the server, but that would inflate the JSON too much.) - // 2. Create a hidden canvas that we use just to extract the image data - // from the Image (using Context2D.getImageData()). - // 3. Create a TileLayer.Canvas and add it to the map. - // We want to synchronously create and attach the TileLayer.Canvas (so an - // immediate call to clearRasters() will be respected, for example), but - // Image loads its data asynchronously. Fortunately we can resolve this - // by putting TileLayer.Canvas into async mode, which will let us create - // and attach the layer but have it wait until the image is loaded before - // it actually draws anything. - // These are the variables that we will populate once the image is loaded. - - - var imgData = null; // 1d row-major array, four [0-255] integers per pixel - - var imgDataMipMapper = null; - var w = null; // image width in pixels - - var h = null; // image height in pixels - // We'll use this array to store callbacks that need to be invoked once - // imgData, w, and h have been resolved. - - var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data - // is available. - - function getImageData(callback) { - if (imgData != null) { - // Must not invoke the callback immediately; it's too confusing and - // fragile to have a function invoke the callback *either* immediately - // or in the future. Better to be consistent here. - setTimeout(function () { - callback(imgData, w, h, imgDataMipMapper); - }, 0); - } else { - imgDataCallbacks.push(callback); - } - } - - var img = new Image(); - - img.onload = function () { - // Save size - w = img.width; - h = img.height; // Create a dummy canvas to extract the image data - - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = w; - imgDataCanvas.height = h; - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0); // Save the image data. - - imgData = imgDataCtx.getImageData(0, 0, w, h).data; - imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. - - document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. - - for (var i = 0; i < imgDataCallbacks.length; i++) { - imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); - } - - imgDataCallbacks = []; - }; - - img.src = uri; - - var canvasTiles = _leaflet2["default"].gridLayer({ - opacity: opacity, - attribution: attribution, - detectRetina: true, - async: true - }); // NOTE: The done() function MUST NOT be invoked until after the current - // tick; done() looks in Leaflet's tile cache for the current tile, and - // since it's still being constructed, it won't be found. - - - canvasTiles.createTile = function (tilePoint, done) { - var zoom = tilePoint.z; - - var canvas = _leaflet2["default"].DomUtil.create("canvas"); - - var error; // setup tile width and height according to the options - - var size = this.getTileSize(); - canvas.width = size.x; - canvas.height = size.y; - getImageData(function (imgData, w, h, mipmapper) { - try { - // The Context2D we'll being drawing onto. It's always 256x256. - var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into - // x/y tile coordinates. This is essentially doing a spherical mercator - // projection, then multiplying by 2^zoom. - - var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); - var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. - - var extent = { - x: bottomRight.x - topLeft.x, - y: bottomRight.y - topLeft.y - }; // Short circuit if tile is totally disjoint from image. - - if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; - if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. - // If the linear resolution (in either direction) of the image is less than 256px - // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in - // scaling. - - var imgRes = { - x: w / extent.x, - y: h / extent.y - }; // We can do the actual drawing in one of three ways: - // - Call drawImage(). This is easy and fast, and results in smooth - // interpolation (bilinear?). This is what we want when we are - // reducing the image from its native size. - // - Call drawImage() with imageSmoothingEnabled=false. This is easy - // and fast and gives us nearest-neighbor interpolation, which is what - // we want when enlarging the image. However, it's unsupported on many - // browsers (including QtWebkit). - // - Do a manual nearest-neighbor interpolation. This is what we'll fall - // back to when enlarging, and imageSmoothingEnabled isn't supported. - // In theory it's slower, but still pretty fast on my machine, and the - // results look the same AFAICT. - // Is imageSmoothingEnabled supported? If so, we can let canvas do - // nearest-neighbor interpolation for us. - - var smoothingProperty = getCanvasSmoothingProperty(ctx); - - if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { - // Use built-in scaling - // Turn off anti-aliasing if necessary - if (smoothingProperty) { - ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; - } // Don't necessarily draw with the full-size image; if we're - // downscaling, use the mipmapper to get a pre-downscaled image - // (see comments on Mipmapper class for why this matters). - - - mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { - // It's possible that the image will go off the edge of the canvas-- - // that's OK, the canvas should clip appropriately. - ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert - // to rel pixel coords - (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just - // convert from size in tile coords straight to pixels - extent.x * 256, extent.y * 256); - }); - } else { - // Use manual nearest-neighbor interpolation - // Calculate the source image pixel coordinates that correspond with - // the top-left and bottom-right of this tile. (If the source image - // only partially overlaps the tile, we use max/min to limit the - // sourceStart/End to only reflect the overlapping portion.) - var sourceStart = { - x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), - y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) - }; - var sourceEnd = { - x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), - y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) - }; // The size, in dest pixels, that each source pixel should occupy. - // This might be greater or less than 1 (e.g. if x and y resolution - // are very different). - - var pixelSize = { - x: 256 / imgRes.x, - y: 256 / imgRes.y - }; // For each pixel in the source image that overlaps the tile... - - for (var row = sourceStart.y; row < sourceEnd.y; row++) { - for (var col = sourceStart.x; col < sourceEnd.x; col++) { - // ...extract the pixel data... - var i = (row * w + col) * 4; - var r = imgData[i]; - var g = imgData[i + 1]; - var b = imgData[i + 2]; - var a = imgData[i + 3]; - ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image - // where it should be drawn... - - var pixelPos = { - x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, - y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 - }; // ...and draw a rectangle there. - - ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from - // causing overlap between this rect and its neighbors. The - // minuend is the location of the next pixel, while the - // subtrahend is the position of the current pixel (to turn an - // absolute coordinate to a width/height). Yes, I had to look - // up minuend and subtrahend. - Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); - } - } - } - } catch (e) { - error = e; - } finally { - done(error, canvas); - } - }); - return canvas; - }; - - this.layerManager.addLayer(canvasTiles, "image", layerId, group); -}; - -methods.removeImage = function (layerId) { - this.layerManager.removeLayer("image", layerId); -}; - -methods.clearImages = function () { - this.layerManager.clearLayers("image"); -}; - -methods.addMeasure = function (options) { - // if a measureControl already exists, then remove it and - // replace with a new one - methods.removeMeasure.call(this); - this.measureControl = _leaflet2["default"].control.measure(options); - this.addControl(this.measureControl); -}; - -methods.removeMeasure = function () { - if (this.measureControl) { - this.removeControl(this.measureControl); - this.measureControl = null; - } -}; - -methods.addSelect = function (ctGroup) { - var _this8 = this; - - methods.removeSelect.call(this); - this._selectButton = _leaflet2["default"].easyButton({ - states: [{ - stateName: "select-inactive", - icon: "ion-qr-scanner", - title: "Make a selection", - onClick: function onClick(btn, map) { - btn.state("select-active"); - _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); - - if (ctGroup) { - var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); - selectionHandle.on("change", function (e) { - if (e.sender !== selectionHandle) { - if (_this8._locationFilter) { - _this8._locationFilter.disable(); - - btn.state("select-inactive"); - } - } - }); - - var handler = function handler(e) { - _this8.layerManager.brush(_this8._locationFilter.getBounds(), { - sender: selectionHandle - }); - }; - - _this8._locationFilter.on("enabled", handler); - - _this8._locationFilter.on("change", handler); - - _this8._locationFilter.on("disabled", function () { - selectionHandle.close(); - _this8._locationFilter = null; - }); - } - - _this8._locationFilter.addTo(map); - } - }, { - stateName: "select-active", - icon: "ion-close-round", - title: "Dismiss selection", - onClick: function onClick(btn, map) { - btn.state("select-inactive"); - - _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections - - - _this8.layerManager.unbrush(); - } - }] - }); - - this._selectButton.addTo(this); -}; - -methods.removeSelect = function () { - if (this._locationFilter) { - this._locationFilter.disable(); - } - - if (this._selectButton) { - this.removeControl(this._selectButton); - this._selectButton = null; - } -}; - -methods.createMapPane = function (name, zIndex) { - this.createPane(name); - this.getPane(name).style.zIndex = zIndex; -}; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// This class simulates a mipmap, which shrinks images by powers of two. This -// stepwise reduction results in "pixel-perfect downscaling" (where every -// pixel of the original image has some contribution to the downscaled image) -// as opposed to a single-step downscaling which will discard a lot of data -// (and with sparse images at small scales can give very surprising results). -var Mipmapper = /*#__PURE__*/function () { - function Mipmapper(img) { - _classCallCheck(this, Mipmapper); - - this._layers = [img]; - } // The various functions on this class take a callback function BUT MAY OR MAY - // NOT actually behave asynchronously. - - - _createClass(Mipmapper, [{ - key: "getBySize", - value: function getBySize(desiredWidth, desiredHeight, callback) { - var _this = this; - - var i = 0; - var lastImg = this._layers[0]; - - var testNext = function testNext() { - _this.getByIndex(i, function (img) { - // If current image is invalid (i.e. too small to be rendered) or - // it's smaller than what we wanted, return the last known good image. - if (!img || img.width < desiredWidth || img.height < desiredHeight) { - callback(lastImg); - return; - } else { - lastImg = img; - i++; - testNext(); - return; - } - }); - }; - - testNext(); - } - }, { - key: "getByIndex", - value: function getByIndex(i, callback) { - var _this2 = this; - - if (this._layers[i]) { - callback(this._layers[i]); - return; - } - - this.getByIndex(i - 1, function (prevImg) { - if (!prevImg) { - // prevImg could not be calculated (too small, possibly) - callback(null); - return; - } - - if (prevImg.width < 2 || prevImg.height < 2) { - // Can't reduce this image any further - callback(null); - return; - } // If reduce ever becomes truly asynchronous, we should stuff a promise or - // something into this._layers[i] before calling this.reduce(), to prevent - // redundant reduce operations from happening. - - - _this2.reduce(prevImg, function (reducedImg) { - _this2._layers[i] = reducedImg; - callback(reducedImg); - return; - }); - }); - } - }, { - key: "reduce", - value: function reduce(img, callback) { - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = Math.ceil(img.width / 2); - imgDataCanvas.height = Math.ceil(img.height / 2); - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - - try { - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); - callback(imgDataCanvas); - } finally { - document.body.removeChild(imgDataCanvas); - } - } - }]); - - return Mipmapper; -}(); - -exports["default"] = Mipmapper; - - -},{}],17:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.log = log; -exports.recycle = recycle; -exports.asArray = asArray; - -function log(message) { - /* eslint-disable no-console */ - if (console && console.log) console.log(message); - /* eslint-enable no-console */ -} - -function recycle(values, length, inPlace) { - if (length === 0 && !inPlace) return []; - - if (!(values instanceof Array)) { - if (inPlace) { - throw new Error("Can't do in-place recycling of a non-Array value"); - } - - values = [values]; - } - - if (typeof length === "undefined") length = values.length; - var dest = inPlace ? values : []; - var origLength = values.length; - - while (dest.length < length) { - dest.push(values[dest.length % origLength]); - } - - if (dest.length > length) { - dest.splice(length, dest.length - length); - } - - return dest; -} - -function asArray(value) { - if (value instanceof Array) return value;else return [value]; -} - - -},{}]},{},[13]); diff --git a/docs/articles/Introduction_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js b/docs/articles/Introduction_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js deleted file mode 100644 index e842c82..0000000 --- a/docs/articles/Introduction_files/leaflet-providers-1.9.0/leaflet-providers_1.9.0.js +++ /dev/null @@ -1,855 +0,0 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['leaflet'], factory); - } else if (typeof modules === 'object' && module.exports) { - // define a Common JS module that relies on 'leaflet' - module.exports = factory(require('leaflet')); - } else { - // Assume Leaflet is loaded into global object L already - factory(L); - } -}(this, function (L) { - 'use strict'; - - L.TileLayer.Provider = L.TileLayer.extend({ - initialize: function (arg, options) { - var providers = L.TileLayer.Provider.providers; - - var parts = arg.split('.'); - - var providerName = parts[0]; - var variantName = parts[1]; - - if (!providers[providerName]) { - throw 'No such provider (' + providerName + ')'; - } - - var provider = { - url: providers[providerName].url, - options: providers[providerName].options - }; - - // overwrite values in provider from variant. - if (variantName && 'variants' in providers[providerName]) { - if (!(variantName in providers[providerName].variants)) { - throw 'No such variant of ' + providerName + ' (' + variantName + ')'; - } - var variant = providers[providerName].variants[variantName]; - var variantOptions; - if (typeof variant === 'string') { - variantOptions = { - variant: variant - }; - } else { - variantOptions = variant.options; - } - provider = { - url: variant.url || provider.url, - options: L.Util.extend({}, provider.options, variantOptions) - }; - } - - // replace attribution placeholders with their values from toplevel provider attribution, - // recursively - var attributionReplacer = function (attr) { - if (attr.indexOf('{attribution.') === -1) { - return attr; - } - return attr.replace(/\{attribution.(\w*)\}/g, - function (match, attributionName) { - return attributionReplacer(providers[attributionName].options.attribution); - } - ); - }; - provider.options.attribution = attributionReplacer(provider.options.attribution); - - // Compute final options combining provider options with any user overrides - var layerOpts = L.Util.extend({}, provider.options, options); - L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts); - } - }); - - /** - * Definition of providers. - * see http://leafletjs.com/reference.html#tilelayer for options in the options map. - */ - - L.TileLayer.Provider.providers = { - OpenStreetMap: { - url: '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: - '© OpenStreetMap contributors' - }, - variants: { - Mapnik: {}, - DE: { - url: '//{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', - options: { - maxZoom: 18 - } - }, - CH: { - url: '//tile.osm.ch/switzerland/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - bounds: [[45, 5], [48, 11]] - } - }, - France: { - url: '//{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: '© Openstreetmap France | {attribution.OpenStreetMap}' - } - }, - HOT: { - url: '//{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap}, ' + - 'Tiles style by Humanitarian OpenStreetMap Team ' + - 'hosted by OpenStreetMap France' - } - }, - BZH: { - url: '//tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', - options: { - attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', - bounds: [[46.2, -5.5], [50, 0.7]] - } - } - } - }, - OpenSeaMap: { - url: '//tiles.openseamap.org/seamark/{z}/{x}/{y}.png', - options: { - attribution: 'Map data: © OpenSeaMap contributors' - } - }, - OpenPtMap: { - url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: © OpenPtMap contributors' - } - }, - OpenTopoMap: { - url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: {attribution.OpenStreetMap}, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' - } - }, - OpenRailwayMap: { - url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenRailwayMap (CC-BY-SA)' - } - }, - OpenFireMap: { - url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenFireMap (CC-BY-SA)' - } - }, - SafeCast: { - url: '//s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', - options: { - maxZoom: 16, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © SafeCast (CC-BY-SA)' - } - }, - Thunderforest: { - url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}', - options: { - attribution: - '© Thunderforest, {attribution.OpenStreetMap}', - variant: 'cycle', - apikey: '', - maxZoom: 22 - }, - variants: { - OpenCycleMap: 'cycle', - Transport: { - options: { - variant: 'transport' - } - }, - TransportDark: { - options: { - variant: 'transport-dark' - } - }, - SpinalMap: { - options: { - variant: 'spinal-map' - } - }, - Landscape: 'landscape', - Outdoors: 'outdoors', - Pioneer: 'pioneer', - MobileAtlas: 'mobile-atlas', - Neighbourhood: 'neighbourhood' - } - }, - OpenMapSurfer: { - url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - variant: 'roads', - attribution: 'Imagery from GIScience Research Group @ University of Heidelberg | Map data ' - }, - variants: { - Roads: { - options: { - variant: 'roads', - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - }, - Hybrid: { - options: { - variant: 'hybrid', - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - }, - AdminBounds: { - options: { - variant: 'adminb', - maxZoom: 18, - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - }, - ContourLines: { - options: { - variant: 'asterc', - maxZoom: 18, - minZoom: 13, - attribution: '{attribution.OpenMapSurfer} ASTER GDEM' - } - }, - Hillshade: { - options: { - variant: 'asterh', - maxZoom: 18, - attribution: '{attribution.OpenMapSurfer} ASTER GDEM, SRTM' - } - }, - ElementsAtRisk: { - options: { - variant: 'elements_at_risk', - attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}' - } - } - } - }, - Hydda: { - url: '//{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - variant: 'full', - attribution: 'Tiles courtesy of OpenStreetMap Sweden — Map data {attribution.OpenStreetMap}' - }, - variants: { - Full: 'full', - Base: 'base', - RoadsAndLabels: 'roads_and_labels' - } - }, - MapBox: { - url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}', - options: { - attribution: - '© Mapbox ' + - '{attribution.OpenStreetMap} ' + - 'Improve this map', - subdomains: 'abcd', - id: 'mapbox.streets', - accessToken: '', - } - }, - Stamen: { - url: '//stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}', - options: { - attribution: - 'Map tiles by Stamen Design, ' + - 'CC BY 3.0 — ' + - 'Map data {attribution.OpenStreetMap}', - subdomains: 'abcd', - minZoom: 0, - maxZoom: 20, - variant: 'toner', - ext: 'png' - }, - variants: { - Toner: 'toner', - TonerBackground: 'toner-background', - TonerHybrid: 'toner-hybrid', - TonerLines: 'toner-lines', - TonerLabels: 'toner-labels', - TonerLite: 'toner-lite', - Watercolor: { - url: '//stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}', - options: { - variant: 'watercolor', - ext: 'jpg', - minZoom: 1, - maxZoom: 16 - } - }, - Terrain: { - options: { - variant: 'terrain', - minZoom: 0, - maxZoom: 18 - } - }, - TerrainBackground: { - options: { - variant: 'terrain-background', - minZoom: 0, - maxZoom: 18 - } - }, - TerrainLabels: { - options: { - variant: 'terrain-labels', - minZoom: 0, - maxZoom: 18 - } - }, - TopOSMRelief: { - url: '//stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}', - options: { - variant: 'toposm-color-relief', - ext: 'jpg', - bounds: [[22, -132], [51, -56]] - } - }, - TopOSMFeatures: { - options: { - variant: 'toposm-features', - bounds: [[22, -132], [51, -56]], - opacity: 0.9 - } - } - } - }, - TomTom: { - url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}', - options: { - variant: 'basic', - maxZoom: 22, - attribution: - '© 1992 - ' + new Date().getFullYear() + ' TomTom. ', - subdomains: 'abcd', - style: 'main', - ext: 'png', - apikey: '', - }, - variants: { - Basic: 'basic', - Hybrid: 'hybrid', - Labels: 'labels' - } - }, - Esri: { - url: '//server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}', - options: { - variant: 'World_Street_Map', - attribution: 'Tiles © Esri' - }, - variants: { - WorldStreetMap: { - options: { - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012' - } - }, - DeLorme: { - options: { - variant: 'Specialty/DeLorme_World_Base_Map', - minZoom: 1, - maxZoom: 11, - attribution: '{attribution.Esri} — Copyright: ©2012 DeLorme' - } - }, - WorldTopoMap: { - options: { - variant: 'World_Topo_Map', - attribution: - '{attribution.Esri} — ' + - 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' - } - }, - WorldImagery: { - options: { - variant: 'World_Imagery', - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' - } - }, - WorldTerrain: { - options: { - variant: 'World_Terrain_Base', - maxZoom: 13, - attribution: - '{attribution.Esri} — ' + - 'Source: USGS, Esri, TANA, DeLorme, and NPS' - } - }, - WorldShadedRelief: { - options: { - variant: 'World_Shaded_Relief', - maxZoom: 13, - attribution: '{attribution.Esri} — Source: Esri' - } - }, - WorldPhysical: { - options: { - variant: 'World_Physical_Map', - maxZoom: 8, - attribution: '{attribution.Esri} — Source: US National Park Service' - } - }, - OceanBasemap: { - options: { - variant: 'Ocean_Basemap', - maxZoom: 13, - attribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri' - } - }, - NatGeoWorldMap: { - options: { - variant: 'NatGeo_World_Map', - maxZoom: 16, - attribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC' - } - }, - WorldGrayCanvas: { - options: { - variant: 'Canvas/World_Light_Gray_Base', - maxZoom: 16, - attribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ' - } - } - } - }, - OpenWeatherMap: { - url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}', - options: { - maxZoom: 19, - attribution: 'Map data © OpenWeatherMap', - apiKey:'', - opacity: 0.5 - }, - variants: { - Clouds: 'clouds', - CloudsClassic: 'clouds_cls', - Precipitation: 'precipitation', - PrecipitationClassic: 'precipitation_cls', - Rain: 'rain', - RainClassic: 'rain_cls', - Pressure: 'pressure', - PressureContour: 'pressure_cntr', - Wind: 'wind', - Temperature: 'temp', - Snow: 'snow' - } - }, - HERE: { - /* - * HERE maps, formerly Nokia maps. - * These basemaps are free, but you need an API key. Please sign up at - * https://developer.here.com/plans - */ - url: - 'https://{s}.{base}.maps.api.here.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'app_id={app_id}&app_code={app_code}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - 'app_id': '', - 'app_code': '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalDayTraffic: { - options: { - variant: 'normal.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - hybridDayTraffic: { - options: { - variant: 'hybrid.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - FreeMapSK: { - url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg', - options: { - minZoom: 8, - maxZoom: 16, - subdomains: '1234', - bounds: [[47.204642, 15.996093], [49.830896, 22.576904]], - attribution: - '{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 Freemap.sk' - } - }, - MtbMap: { - url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap} & USGS' - } - }, - CartoDB: { - url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png', - options: { - attribution: '{attribution.OpenStreetMap} © CARTO', - subdomains: 'abcd', - maxZoom: 19, - variant: 'light_all' - }, - variants: { - Positron: 'light_all', - PositronNoLabels: 'light_nolabels', - PositronOnlyLabels: 'light_only_labels', - DarkMatter: 'dark_all', - DarkMatterNoLabels: 'dark_nolabels', - DarkMatterOnlyLabels: 'dark_only_labels', - Voyager: 'rastertiles/voyager', - VoyagerNoLabels: 'rastertiles/voyager_nolabels', - VoyagerOnlyLabels: 'rastertiles/voyager_only_labels', - VoyagerLabelsUnder: 'rastertiles/voyager_labels_under' - } - }, - HikeBike: { - url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: '{attribution.OpenStreetMap}', - variant: 'hikebike' - }, - variants: { - HikeBike: {}, - HillShading: { - options: { - maxZoom: 15, - variant: 'hillshading' - } - } - } - }, - BasemapAT: { - url: '//maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}', - options: { - maxZoom: 19, - attribution: 'Datenquelle: basemap.at', - subdomains: ['', '1', '2', '3', '4'], - format: 'png', - bounds: [[46.358770, 8.782379], [49.037872, 17.189532]], - variant: 'geolandbasemap' - }, - variants: { - basemap: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'geolandbasemap' - } - }, - grau: 'bmapgrau', - overlay: 'bmapoverlay', - highdpi: { - options: { - variant: 'bmaphidpi', - format: 'jpeg' - } - }, - orthofoto: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'bmaporthofoto30cm', - format: 'jpeg' - } - } - } - }, - nlmaps: { - url: '//geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png', - options: { - minZoom: 6, - maxZoom: 19, - bounds: [[50.5, 3.25], [54, 7.6]], - attribution: 'Kaartgegevens © Kadaster' - }, - variants: { - 'standaard': 'brtachtergrondkaart', - 'pastel': 'brtachtergrondkaartpastel', - 'grijs': 'brtachtergrondkaartgrijs', - 'luchtfoto': { - 'url': '//geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png', - } - } - }, - NASAGIBS: { - url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}', - options: { - attribution: - 'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' + - '(ESDIS) with funding provided by NASA/HQ.', - bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]], - minZoom: 1, - maxZoom: 9, - format: 'jpg', - time: '', - tilematrixset: 'GoogleMapsCompatible_Level' - }, - variants: { - ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor', - ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367', - ViirsEarthAtNight2012: { - options: { - variant: 'VIIRS_CityLights_2012', - maxZoom: 8 - } - }, - ModisTerraLSTDay: { - options: { - variant: 'MODIS_Terra_Land_Surface_Temp_Day', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - }, - ModisTerraSnowCover: { - options: { - variant: 'MODIS_Terra_Snow_Cover', - format: 'png', - maxZoom: 8, - opacity: 0.75 - } - }, - ModisTerraAOD: { - options: { - variant: 'MODIS_Terra_Aerosol', - format: 'png', - maxZoom: 6, - opacity: 0.75 - } - }, - ModisTerraChlorophyll: { - options: { - variant: 'MODIS_Terra_Chlorophyll_A', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - } - } - }, - NLS: { - // NLS maps are copyright National library of Scotland. - // http://maps.nls.uk/projects/api/index.html - // Please contact NLS for anything other than non-commercial low volume usage - // - // Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s - // z0-9 - 1:1m - // z10-11 - quarter inch (1:253440) - // z12-18 - one inch (1:63360) - url: '//nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg', - options: { - attribution: 'National Library of Scotland Historic Maps', - bounds: [[49.6, -12], [61.7, 3]], - minZoom: 1, - maxZoom: 18, - subdomains: '0123', - } - }, - JusticeMap: { - // Justice Map (http://www.justicemap.org/) - // Visualize race and income data for your community, county and country. - // Includes tools for data journalists, bloggers and community activists. - url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png', - options: { - attribution: 'Justice Map', - // one of 'county', 'tract', 'block' - size: 'county', - // Bounds for USA, including Alaska and Hawaii - bounds: [[14, -180], [72, -56]] - }, - variants: { - income: 'income', - americanIndian: 'indian', - asian: 'asian', - black: 'black', - hispanic: 'hispanic', - multi: 'multi', - nonWhite: 'nonwhite', - white: 'white', - plurality: 'plural' - } - }, - Wikimedia: { - url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png', - options: { - attribution: 'Wikimedia', - minZoom: 1, - maxZoom: 19 - } - }, - GeoportailFrance: { - url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', - options: { - attribution: 'Geoportail France', - bounds: [[-75, -180], [81, 180]], - minZoom: 2, - maxZoom: 18, - // Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/ - // NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee - apikey: 'choisirgeoportail', - format: 'image/jpeg', - style : 'normal', - variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD' - }, - variants: { - parcels: { - options : { - variant: 'CADASTRALPARCELS.PARCELS', - maxZoom: 20, - style : 'bdparcellaire', - format: 'image/png' - } - }, - ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS', - maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD', - orthos: { - options: { - maxZoom: 19, - variant: 'ORTHOIMAGERY.ORTHOPHOTOS' - } - } - } - }, - OneMapSG: { - url: '//maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png', - options: { - variant: 'Default', - minZoom: 11, - maxZoom: 18, - bounds: [[1.56073, 104.11475], [1.16, 103.502]], - attribution: ' New OneMap | Map data © contributors, Singapore Land Authority' - }, - variants: { - Default: 'Default', - Night: 'Night', - Original: 'Original', - Grey: 'Grey', - LandLot: 'LandLot' - } - } - }; - - L.tileLayer.provider = function (provider, options) { - return new L.TileLayer.Provider(provider, options); - }; - - return L; -})); diff --git a/docs/articles/Introduction_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js b/docs/articles/Introduction_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js deleted file mode 100644 index 82cd630..0000000 --- a/docs/articles/Introduction_files/leaflet-providers-plugin-2.1.1/leaflet-providers-plugin.js +++ /dev/null @@ -1,3 +0,0 @@ -LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { - this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); -}; diff --git a/docs/articles/Introduction_files/leafletfix-1.0.0/leafletfix.css b/docs/articles/Introduction_files/leafletfix-1.0.0/leafletfix.css deleted file mode 100644 index 3ae60ff..0000000 --- a/docs/articles/Introduction_files/leafletfix-1.0.0/leafletfix.css +++ /dev/null @@ -1,36 +0,0 @@ -/* Work around CSS properties introduced on img by bootstrap */ -img.leaflet-tile { - padding: 0; - margin: 0; - border-radius: 0; - border: none; -} -.info { - padding: 6px 8px; - font: 14px/16px Arial, Helvetica, sans-serif; - background: white; - background: rgba(255,255,255,0.8); - box-shadow: 0 0 15px rgba(0,0,0,0.2); - border-radius: 5px; -} -.legend { - line-height: 18px; - color: #555; -} -.legend svg text { - fill: #555; -} -.legend svg line { - stroke: #555; -} -.legend i { - width: 18px; - height: 18px; - margin-right: 4px; - opacity: 0.7; - display: inline-block; - vertical-align: top; - /*For IE 7*/ - zoom: 1; - *display: inline; -} diff --git a/docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview-popup.css b/docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview-popup.css deleted file mode 100644 index ead6a8e..0000000 --- a/docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview-popup.css +++ /dev/null @@ -1,102 +0,0 @@ -/* table class css */ -table.mapview-popup { - overflow: scroll; - width: auto; - height: auto; - border-collapse: collapse; -} - -/* -table.mapview-popup tr:first-child td { - background: #A8E6A8; -} -*/ - -table.mapview-popup tr:nth-child(even) { - background: #D1E0FF; -} - -table.mapview-popup tr:nth-child(odd) { - background: #ebf1ff; -} - -table.mapview-popup, th, td { - border-bottom: 1px solid #ffffff; -} - -/* -table.tab tr:hover { - background: #00ffff; -} -*/ - - -/* general leaflet popup css '*/ -.leaflet-popup-content { - margin: 1px 1px 1px 1px; - line-height: 1.5; - overflow-y: auto; - overflow-x: scoll; -} - -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: -20px; - padding: 3px 0 0 0; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - font-weight: bold; - color: #c3c3c3; - text-decoration: none; - background: transparent; -} - -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; -} - -.leaflet-popup-content-wrapper, .leaflet-popup-tip { - padding: 1px; - -webkit-border-radius: 0; - border-radius: 0; - background: #ffffff; /*#4c4c4c;*/ - box-shadow: 0 3px 14px rgba(0,0,0,0.4); -} - - -div::-webkit-scrollbar { - width: 5px; - height: 5px; -} -div::-webkit-scrollbar-button { - width: 0; - height: 0; -} -div::-webkit-scrollbar-thumb { - background: #666666; - border: 0 none #ffffff; - border-radius: 0; -} -div::-webkit-scrollbar-thumb:hover { - background: #333333; -} -div::-webkit-scrollbar-thumb:active { - background: #333333; -} -div::-webkit-scrollbar-track { - background: #e1e1e1; - border: 0 none #ffffff; - border-radius: 50px; -} -div::-webkit-scrollbar-track:hover { - background: #e1e1e1; -} -div::-webkit-scrollbar-track:active { - background: #e1e1e1; -} -div::-webkit-scrollbar-corner { - background: transparent; -} diff --git a/docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview.css b/docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview.css deleted file mode 100644 index ac08791..0000000 --- a/docs/articles/Introduction_files/mapviewCSS-0.0.1/mapview.css +++ /dev/null @@ -1 +0,0 @@ -.leaflet-control br {clear: both;} diff --git a/docs/articles/Introduction_files/proj4-2.6.2/proj4.min.js b/docs/articles/Introduction_files/proj4-2.6.2/proj4.min.js deleted file mode 100644 index 99865a5..0000000 --- a/docs/articles/Introduction_files/proj4-2.6.2/proj4.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):t.proj4=s()}(this,function(){"use strict";function k(t,s){if(t[s])return t[s];for(var i,a=Object.keys(t),h=s.toLowerCase().replace(H,""),e=-1;++eMath.PI&&(r-=2*Math.PI),h=Math.sin(o),n=Math.cos(o),e=h*h,{x:((a=i/Math.sqrt(1-s*e))+l)*n*Math.cos(r),y:(a+l)*n*Math.sin(r),z:(a*(1-s)+l)*h}}function c(t,s,i,a){var h,e,n,r,o,l,M,c,u,f,m,p,d,y=t.x,_=t.y,x=t.z?t.z:0,g=Math.sqrt(y*y+_*_),b=Math.sqrt(y*y+_*_+x*x);if(g/i<1e-12){if(p=0,b/i<1e-12)return d=-a,{x:t.x,y:t.y,z:t.z}}else p=Math.atan2(_,y);for(h=x/b,l=(e=g/b)*(1-s)*(n=1/Math.sqrt(1-s*(2-s)*e*e)),M=h*n,m=0;m++,r=s*(o=i/Math.sqrt(1-s*M*M))/(o+(d=g*l+x*M-o*(1-s*M*M))),f=(u=h*(n=1/Math.sqrt(1-r*(2-r)*e*e)))*l-(c=e*(1-r)*n)*M,l=c,M=u,1e-24=this.text.length)return;t=this.text[this.place++]}switch(this.state){case K:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},e.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if($.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},e.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=K)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=K,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},e.prototype.number=function(t){if(!tt.test(t)){if($.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},e.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},e.prototype.keyword=function(t){if(Y.test(t))this.word+=t;else{if("["===t){var s=[];return s.push(this.word),this.level++,null===this.root?this.root=s:this.currentObject.push(s),this.stack.push(this.currentObject),this.currentObject=s,void(this.state=K)}if(!$.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},e.prototype.neutral=function(t){if(Z.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(tt.test(t))return this.word=t,void(this.state=3);if(!$.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},e.prototype.output=function(){for(;this.placeD?Math.tan(i):0,c=Math.pow(M,2),u=Math.pow(c,2),f=1-this.es*Math.pow(h,2);n/=Math.sqrt(f);var m=Gt(i,h,e,this.en),p=this.a*(this.k0*n*(1+r/6*(1-c+o+r/20*(5-18*c+u+14*o-58*c*o+r/42*(61+179*u-u*c-479*c)))))+this.x0,d=this.a*(this.k0*(m-this.ml0+h*a*n/2*(1+r/12*(5-c+9*o+4*l+r/30*(61+u-58*c+270*o-330*c*o+r/56*(1385+543*u-u*c-3111*c))))))+this.y0}else{var y=e*Math.sin(a);if(Math.abs(Math.abs(y)-1)D?Math.tan(s):0,e=this.ep2*Math.pow(a,2),n=Math.pow(e,2),r=Math.pow(h,2),o=Math.pow(r,2),l=1-this.es*Math.pow(i,2),M=_*Math.sqrt(l)/this.k0,u=s-(l*=h)*(c=Math.pow(M,2))/(1-this.es)*.5*(1-c/12*(5+3*r-9*e*r+e-4*n-c/30*(61+90*r-252*e*r+45*o+46*e-c/56*(1385+3633*r+4095*o+1574*o*r)))),nt(this.long0+M*(1-c/6*(1+2*r+e-c/20*(5+28*r+24*o+8*e*r+6*e-c/42*(61+662*r+1320*o+720*o*r))))/a)):(u=z*et(x),0)):(p=.5*((m=Math.exp(_/this.k0))-1/m),d=this.lat0+x/this.k0,y=Math.cos(d),l=Math.sqrt((1-Math.pow(y,2))/(1+Math.pow(p,2))),u=Math.asin(l),x<0&&(u=-u),0==p&&0===y?0:nt(Math.atan2(p,y)+this.long0)),t.x=f,t.y=u,t},names:["Transverse_Mercator","Transverse Mercator","tmerc"]},is={init:function(){if(void 0===this.es||this.es<=0)throw new Error("incorrect elliptical usage");this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),s=t/(2-t),i=s;this.cgb[0]=s*(2+s*(-2/3+s*(s*(116/45+s*(26/45+-2854/675*s))-2))),this.cbg[0]=s*(s*(2/3+s*(4/3+s*(-82/45+s*(32/45+4642/4725*s))))-2),i*=s,this.cgb[1]=i*(7/3+s*(s*(-227/45+s*(2704/315+2323/945*s))-1.6)),this.cbg[1]=i*(5/3+s*(-16/15+s*(-13/9+s*(904/315+-1522/945*s)))),i*=s,this.cgb[2]=i*(56/15+s*(-136/35+s*(-1262/105+73814/2835*s))),this.cbg[2]=i*(-26/15+s*(34/21+s*(1.6+-12686/2835*s))),i*=s,this.cgb[3]=i*(4279/630+s*(-332/35+-399572/14175*s)),this.cbg[3]=i*(1237/630+s*(-24832/14175*s-2.4)),i*=s,this.cgb[4]=i*(4174/315+-144838/6237*s),this.cbg[4]=i*(-734/315+109598/31185*s),i*=s,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(s,2),this.Qn=this.k0/(1+s)*(1+i*(.25+i*(1/64+i/256))),this.utg[0]=s*(s*(2/3+s*(-37/96+s*(1/360+s*(81/512+-96199/604800*s))))-.5),this.gtu[0]=s*(.5+s*(-2/3+s*(5/16+s*(41/180+s*(-127/288+7891/37800*s))))),this.utg[1]=i*(-1/48+s*(-1/15+s*(437/1440+s*(-46/105+1118711/3870720*s)))),this.gtu[1]=i*(13/48+s*(s*(557/1440+s*(281/630+-1983433/1935360*s))-.6)),i*=s,this.utg[2]=i*(-17/480+s*(37/840+s*(209/4480+-5569/90720*s))),this.gtu[2]=i*(61/240+s*(-103/140+s*(15061/26880+167603/181440*s))),i*=s,this.utg[3]=i*(-4397/161280+s*(11/504+830251/7257600*s)),this.gtu[3]=i*(49561/161280+s*(-179/168+6601661/7257600*s)),i*=s,this.utg[4]=i*(-4583/161280+108847/3991680*s),this.gtu[4]=i*(34729/80640+-3418889/1995840*s),i*=s,this.utg[5]=-.03233083094085698*i,this.gtu[5]=.6650675310896665*i;var a=Tt(this.cbg,this.lat0);this.Zb=-this.Qn*(a+function(t,s){for(var i,a=2*Math.cos(s),h=t.length-1,e=t[h],n=0;0<=--h;)i=a*e-n+t[h],n=e,e=i;return Math.sin(s)*i}(this.gtu,2*a))},forward:function(t){var s=nt(t.x-this.long0),i=t.y,i=Tt(this.cbg,i),a=Math.sin(i),h=Math.cos(i),e=Math.sin(s),n=Math.cos(s);i=Math.atan2(a,n*h),s=Math.atan2(e*h,Rt(a,h*n)),s=Lt(Math.tan(s));var r,o,l=Dt(this.gtu,2*i,2*s);return i+=l[0],s+=l[1],o=Math.abs(s)<=2.623395162778?(r=this.a*(this.Qn*s)+this.x0,this.a*(this.Qn*i+this.Zb)+this.y0):r=1/0,t.x=r,t.y=o,t},inverse:function(t){var s,i,a,h,e,n,r,o=(t.x-this.x0)*(1/this.a),l=(t.y-this.y0)*(1/this.a);return l=(l-this.Zb)/this.Qn,o/=this.Qn,r=Math.abs(o)<=2.623395162778?(l+=(s=Dt(this.utg,2*l,2*o))[0],o+=s[1],o=Math.atan(zt(o)),i=Math.sin(l),a=Math.cos(l),h=Math.sin(o),e=Math.cos(o),l=Math.atan2(i*e,Rt(h,e*a)),o=Math.atan2(h,e*a),n=nt(o+this.long0),Tt(this.cgb,l)):n=1/0,t.x=n,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc"]},as={init:function(){var t=function(t,s){if(void 0===t){if((t=Math.floor(30*(nt(s)+Math.PI)/Math.PI)+1)<0)return 0;if(60D?this.ns=Math.log(a/r)/Math.log(h/o):this.ns=s,isNaN(this.ns)&&(this.ns=s),this.f0=a/(this.ns*Math.pow(h,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic"))},forward:function(t){var s=t.x,i=t.y;Math.abs(2*Math.abs(i)-Math.PI)<=D&&(i=et(i)*(z-2*D));var a,h,e=Math.abs(Math.abs(i)-z);if(DD?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var s=t.x,i=t.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var a=Vt(this.e3,this.sin_phi,this.cos_phi),h=this.a*Math.sqrt(this.c-this.ns0*a)/this.ns0,e=this.ns0*nt(s-this.long0),n=h*Math.sin(e)+this.x0,r=this.rh-h*Math.cos(e)+this.y0;return t.x=n,t.y=r,t},inverse:function(t){var s,i,a,h,e,n;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,a=0<=this.ns0?(s=Math.sqrt(t.x*t.x+t.y*t.y),1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),-1),(h=0)!==s&&(h=Math.atan2(a*t.x,a*t.y)),a=s*this.ns0/this.a,n=this.sphere?Math.asin((this.c-a*a)/(2*this.ns0)):(i=(this.c-a*a)/this.ns0,this.phi1z(this.e3,i)),e=nt(h/this.ns0+this.long0),t.x=e,t.y=n,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,s){var i,a,h,e,n=Zt(.5*s);if(tMath.PI&&(a=Math.PI),i=(2*s+Math.sin(2*s))/Math.PI,12*z*this.a)return;return i=s/this.a,a=Math.sin(i),h=Math.cos(i),e=this.long0,Math.abs(s)<=D?n=this.lat0:(n=Zt(h*this.sin_p12+t.y*a*this.cos_p12/s),r=Math.abs(this.lat0)-z,e=nt(Math.abs(r)<=D?0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y):this.long0+Math.atan2(t.x*a,s*this.cos_p12*h-t.y*this.sin_p12*a))),t.x=e,t.y=n,t}return o=Ft(this.es),l=Qt(this.es),M=Wt(this.es),c=Xt(this.es),Math.abs(this.sin_p12-1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((u-s)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,-1*t.y))):Math.abs(this.sin_p12+1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((s-u)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,t.y))):(s=Math.sqrt(t.x*t.x+t.y*t.y),p=Math.atan2(t.x,t.y),f=Ht(this.a,this.e,this.sin_p12),d=Math.cos(p),_=-(y=this.e*this.cos_p12*d)*y/(1-this.es),x=3*this.es*(1-_)*this.sin_p12*this.cos_p12*d/(1-this.es),v=1-_*(b=(g=s/f)-_*(1+_)*Math.pow(g,3)/6-x*(1+3*_)*Math.pow(g,4)/24)*b/2-g*b*b*b/6,m=Math.asin(this.sin_p12*Math.cos(b)+this.cos_p12*Math.sin(b)*d),e=nt(this.long0+Math.asin(Math.sin(p)*Math.sin(b)/Math.cos(m))),w=Math.sin(m),n=Math.atan2((w-this.es*v*this.sin_p12)*Math.tan(m),w*(1-this.es))),t.x=e,t.y=n,t},names:["Azimuthal_Equidistant","aeqd"]},Ps={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var s,i,a,h=t.x,e=t.y,n=nt(h-this.long0),r=Math.sin(e),o=Math.cos(e),l=Math.cos(n);return(0<(s=this.sin_p14*r+this.cos_p14*o*l)||Math.abs(s)<=D)&&(i=this.a*o*Math.sin(n),a=this.y0+this.a*(this.cos_p14*r-this.sin_p14*o*l)),t.x=i,t.y=a,t},inverse:function(t){var s,i,a,h,e,n,r;return t.x-=this.x0,t.y-=this.y0,s=Math.sqrt(t.x*t.x+t.y*t.y),i=Zt(s/this.a),a=Math.sin(i),h=Math.cos(i),n=this.long0,Math.abs(s)<=D?r=this.lat0:(r=Zt(h*this.sin_p14+t.y*a*this.cos_p14/s),e=Math.abs(this.lat0)-z,n=Math.abs(e)<=D?nt(0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y)):nt(this.long0+Math.atan2(t.x*a,s*this.cos_p14*h-t.y*this.sin_p14*a))),t.x=n,t.y=r,t},names:["ortho"]},Ss=1,Ns=2,ks=3,Es=4,qs=5,Is=6,Os=1,As=2,Gs=3,js=4,zs={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=z-U/2?this.face=qs:this.lat0<=-(z-U/2)?this.face=Is:Math.abs(this.long0)<=U?this.face=Ss:Math.abs(this.long0)<=z+U?this.face=0=Math.abs(t.y)?y.value=Os:0<=t.y&&t.y>=Math.abs(t.x)?(y.value=As,s-=z):t.x<0&&-t.x>=Math.abs(t.y)?(y.value=Gs,s=s<0?s+Q:s-Q):(y.value=js,s+=z),c=Q/12*Math.tan(s),e=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),n=Math.atan(e),(r=1-(a=Math.cos(s))*a*(h=Math.tan(i))*h*(1-Math.cos(Math.atan(1/Math.cos(n)))))<-1?r=-1:1a.y)--s;else{if(!(Ls[s+1][0]<=a.y))break;++s}var h=Ls[s],i=function(t,s,i,a){for(var h=s;a;--a){var e=t(h);if(h-=e,Math.abs(e)Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/docs/articles/Introduction_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css b/docs/articles/Introduction_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css deleted file mode 100644 index c10d2f1..0000000 --- a/docs/articles/Introduction_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css +++ /dev/null @@ -1,41 +0,0 @@ -.leaflet-tooltip.leaflet-tooltip-text-only, -.leaflet-tooltip.leaflet-tooltip-text-only:before, -.leaflet-tooltip.leaflet-tooltip-text-only:after { - background: none; - border: none; - box-shadow: none; -} - -.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-left { - margin-left: 5px; -} - -.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-right { - margin-left: -5px; -} - -.leaflet-tooltip:after { - border-right: 6px solid transparent; - /* right: -16px; */ -} - -.leaflet-popup-pane .leaflet-popup-tip-container { - /* when the tooltip container is clicked, it is closed */ - pointer-events: all; - /* tooltips should display the "hand" icon, just like .leaflet-interactive*/ - cursor: pointer; -} - -/* have the widget be displayed in the right 'layer' */ -.leaflet-map-pane { - z-index: auto; -} - -/* Add missing rule from leaflet for img. -This complete existing leaflet.css. -Fix for https://github.com/rstudio/rmarkdown/issues/1949 */ -.leaflet-container .leaflet-right-pane img, -.leaflet-container .leaflet-left-pane img { - max-width: none !important; - max-height: none !important; -} diff --git a/docs/articles/LakeCat.html b/docs/articles/LakeCat.html deleted file mode 100644 index 44c67aa..0000000 --- a/docs/articles/LakeCat.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - -Working with LakeCat data • StreamCatTools - - - - - - - - - - - - - Skip to contents - - -
- - - - -
-
- - - -
-

Accessing and working with LakeCat -

-

The StreamCatTools package was designed to simplify the -use of StreamCat -data in R, leveraging the new API for -StreamCat. We now have functionality in the StreamCat API -for accessing and working with LakeCat data and have added functions in -StreamCatTools to access LakeCata data in R using the -API.

-

We can actually pull data into R from LakeCat by simply passing a URL -to extract from json. We have to hard-wire parameters and are limited in -the number of records returned through a GET request.

-
-res <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics?name=pcturbmd2006&areaOfInterest=cat&comid=22538788")
-res$items
-
-
-

List LakeCat API parameters -

-

List LakeCat parameters: Get a list of available LakeCat values for -certain parameters using the lc_get_params function (right -now just metric names and areas of interest for this function) via the -API

-
-library(StreamCatTools)
-region_params <- lc_get_params(param='aoi')
-
-name_params <- lc_get_params(param='metric_names')
-
-print(paste0('region parameters are: ', paste(region_params,collapse = ', ')))
-#> [1] "region parameters are: cat, ws"
-print(paste0('A selection of available LakrCat metrics include: ',paste(name_params[1:10],collapse = ', ')))
-#> [1] "A selection of available LakrCat metrics include: agkffact, al2o3, bfi, canaldens, cao, cbnf, clay, coalminedens, compstrgth, damdens"
-

We can also see what metrics are available for what areas of interest -and what years using the sc_get_params function (which -returns a tibble of information about StreamCat metrics):

-
-var_info <- lc_get_params(param='variable_info')
-head(var_info)
-#> # A tibble: 6 × 13
-#>   category     metric aoi   year  short_description long_description units  dsid
-#>   <chr>        <chr>  <chr> <chr> <chr>             <chr>            <chr> <dbl>
-#> 1 Soils        agkff… Cat,… NA    Ag Soil Erodibil… Mean of STATSGO… Unit…    10
-#> 2 Natural      al2o3… Cat,… NA    Mean Lithologica… Mean % of litho… Perc…    11
-#> 3 Base         areas… Ws    NA    Watershed Area S… Watershed area … Squa…    NA
-#> 4 Climate      bfi[A… Cat,… NA    Base Flow Index   Base flow is th… Perc…    12
-#> 5 Anthropogen… canal… Cat,… NA    Canal Density     Density of NHDP… Kilo…    13
-#> 6 Natural      cao[A… Cat,… NA    Mean Lithologica… Mean % of litho… Perc…    11
-#> # ℹ 5 more variables: dataset <chr>, source_name <chr>, source_URL <chr>,
-#> #   ACTIVE <dbl>, DSNAME <chr>
-

Look up the display name or names for a metric using the -lc_fullname function via the API

-
-metric='pcthbwet2016'
-fullname <- lc_fullname(metric)
-fullname
-#> [1] "Herbaceous Wetland Percentage 2016"
-
-metric=c('pctdecid2019','fert')
-fullname <- lc_fullname(metric)
-fullname
-#> [1] "Deciduous Forest Percentage 2019"                   
-#> [2] "Synthetic Nitrogen Fertilizer Application Mean Rate"
-
-
-

Filter metric information by criteria -

-

We can also filter metric names and information by the metric -year(s), the indicator categories for metrics, the metric data set -names, or the Areas of Interest the metrics are available for.

-
-metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), aoi=c('Cat','Ws'))
-head(metrics)
-#> # A tibble: 6 × 9
-#>   Category Metric AOI   Year  Short_Name Metric_Description Units Source Dataset
-#>   <chr>    <chr>  <chr> <chr> <chr>      <chr>              <chr> <chr>  <chr>  
-#> 1 Natural  al2o3… Cat,… NA    Mean Lith… Mean % of litholo… Perc… USGS … USGS G…
-#> 2 Anthrop… canal… Cat,… NA    Canal Den… Density of NHDPlu… Kilo… Falco… Canal …
-#> 3 Natural  cao[A… Cat,… NA    Mean Lith… Mean % of litholo… Perc… USGS … USGS G…
-#> 4 Anthrop… cbnf[… Cat,… NA    Cultivate… Mean rate of biol… Kilo… Envir… Agricu…
-#> 5 Anthrop… coalm… Cat,… NA    Coal Mine… Density of coal m… Coun… USGS … Coal M…
-#> 6 Natural  comps… Cat,… NA    Mean Lith… Mean lithological… Perc… USGS … USGS G…
-
-
-

Get Waterbody COMIDs -

-

In this example we use the lc_get_comid function to find -COMIDs for a set of example lake locations we load into -R.lc_get_comid is just a simple wrapper for -get_waterbodies in the nhdplusTools R -package. We can then use the COMIDs we derive for our lake locations to -get LakeCat metrics for these lakes as we show in after this.

-
-dd <- data.frame(x = c(-89.198,-114.125,-122.044),
-                 y = c(45.502,47.877,43.730)) |> 
-  sf::st_as_sf(coords = c('x', 'y'), crs = 4326)
-    
-comids <- lc_get_comid(dd)
-
-
-

Get data for COMIDs -

-

In this example we access several variables, for several areas of -interest, and for several COMIDs using the lc_get_data -function. We’ll show using both the COMIDS we derived with -lc_get_comid function in previous chunk as well as with -known COMIDS for NHDPlus waterbodies. Loads data into a tibble we can -view.

-
-df <- lc_get_data(metric='pcturbmd2006,damdens', aoi='cat,ws', comid=comids)
-knitr::kable(df)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comiddamdenscatdamdenswspcturbmd2006catpcturbmd2006ws
237562980.00000000.00000000.02932280.0293228
1200540650.00000000.00072700.43481810.1451495
1671208630.02439860.02439860.20860780.2086078
-
-df <- lc_get_data(metric='pcturbmd2006,damdens', aoi='cat,ws', comid='23783629,23794487,23812618')
-knitr::kable(df)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comiddamdenscatdamdenswspcturbmd2006catpcturbmd2006ws
237836290.01920970.00088750.20919420.0213267
237944870.00000000.24332680.19582250.8832762
238126180.03208520.00714550.01155070.0032155
-
-
-

Get data for county -

-

In this example we access a couple variables at the watershed scale -for the area of interest of a county (Benton County in this case) using -the sc_get_data function.

-
-df <- lc_get_data(metric='pctwdwet2006', aoi='ws', county='41003')
-knitr::kable(head(df))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctwdwet2006ws
237689450.1662971
237689870.0000000
238881560.4161465
237688950.1344990
237690071.0194538
237689470.5524862
-
-
-

Get NLCD data -

-

In this example we access National Land Cover Dataset (NLCD) data for -2019, just at the catchment level for several COMIDs using the -lc_nlcd function. Loads data into a tibble we can view.

-
-df <- lc_nlcd(comid='23783629,23794487,23812618', year='2019', aoi='ws')
-knitr::kable(df)
- ------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctbl2019wspctconif2019wspctcrop2019wspctdecid2019wspctgrs2019wspcthay2019wspcthbwet2019wspctice2019wspctmxfst2019wspctow2019wspctshrb2019wspcturbhi2019wspcturblo2019wspcturbmd2019wspcturbop2019wspctwdwet2019ws
237836291.560127482.84179310.000000.06270223.36794870.00079880.02284440.23187850.10647401.5000619.20037480.00279560.08386920.02324380.82175870.1733297
237944870.00000000.401489231.644651.81765090.116796842.309657611.91327830.00000003.08781661.7446530.20439450.26279293.67180091.01467261.63515590.1751953
238126180.000643184.93025590.000000.06238060.92413360.00000000.54984980.00000000.00321554.1119765.29849450.00000000.05337720.00321551.87141872.1910391
-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/StartHere.html b/docs/articles/StartHere.html index a7b4954..6c60d10 100644 --- a/docs/articles/StartHere.html +++ b/docs/articles/StartHere.html @@ -25,7 +25,7 @@ StreamCatTools - 0.10.0 + 0.11.0

After installing load the library

diff --git a/docs/articles/index.html b/docs/articles/index.html index 073df35..141e897 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -7,7 +7,7 @@ StreamCatTools - 0.10.0 + 0.11.0
diff --git a/docs/deps/bootstrap-5.3.1/bootstrap.min.css b/docs/deps/bootstrap-5.3.1/bootstrap.min.css index b8a510c..bf26103 100644 --- a/docs/deps/bootstrap-5.3.1/bootstrap.min.css +++ b/docs/deps/bootstrap-5.3.1/bootstrap.min.css @@ -2,4 +2,4 @@ * Bootstrap v5.3.1 (https://getbootstrap.com/) * Copyright 2011-2023 The Bootstrap Authors * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme="light"]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #dee2e6;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 222,226,230;--bs-primary-rgb: 13,110,253;--bs-secondary-rgb: 108,117,125;--bs-success-rgb: 25,135,84;--bs-info-rgb: 13,202,240;--bs-warning-rgb: 255,193,7;--bs-danger-rgb: 220,53,69;--bs-light-rgb: 248,249,250;--bs-dark-rgb: 33,37,41;--bs-primary-text-emphasis: #052c65;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #cfe2ff;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #9ec5fe;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255,255,255;--bs-black-rgb: 0,0,0;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33,37,41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255,255,255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0,0,0;--bs-secondary-color: rgba(33,37,41,0.75);--bs-secondary-color-rgb: 33,37,41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233,236,239;--bs-tertiary-color: rgba(33,37,41,0.5);--bs-tertiary-color-rgb: 33,37,41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248,249,250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13,110,253;--bs-link-decoration: underline;--bs-link-hover-color: #0a58ca;--bs-link-hover-color-rgb: 10,88,202;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0,0,0,0.175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0,0,0,0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0,0,0,0.075);--bs-focus-ring-width: .25rem;--bs-focus-ring-opacity: .25;--bs-focus-ring-color: rgba(13,110,253,0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme="dark"]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222,226,230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33,37,41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255,255,255;--bs-secondary-color: rgba(222,226,230,0.75);--bs-secondary-color-rgb: 222,226,230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52,58,64;--bs-tertiary-color: rgba(222,226,230,0.5);--bs-tertiary-color-rgb: 222,226,230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43,48,53;--bs-primary-text-emphasis: #6ea8fe;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #031633;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #084298;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #6ea8fe;--bs-link-hover-color: #8bb9fe;--bs-link-color-rgb: 110,168,254;--bs-link-hover-color-rgb: 139,185,254;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-border-color: #495057;--bs-border-color-translucent: rgba(255,255,255,0.15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em;color:RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator{display:none !important}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;-webkit-flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-body-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #bacbe6;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme="dark"] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type="checkbox"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type="checkbox"],.shiny-input-container .checkbox input:checked[type="checkbox"],.shiny-input-container .checkbox-inline input:checked[type="checkbox"],.shiny-input-container .radio input:checked[type="checkbox"],.shiny-input-container .radio-inline input:checked[type="checkbox"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"],.shiny-input-container .checkbox input:checked[type="radio"],.shiny-input-container .checkbox-inline input:checked[type="radio"],.shiny-input-container .radio input:checked[type="radio"],.shiny-input-container .radio-inline input:checked[type="radio"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline input[type="checkbox"]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255,255,255,0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4),.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189,192,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49,132,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130,138,145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60,153,110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11,172,204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217,164,6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225,83,97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211,212,213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66,70,73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222,226,230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13,110,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108,117,125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25,135,84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13,202,240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255,193,7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220,53,69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248,249,250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33,37,41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49,132,253;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255,255,255,0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n + 3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: .125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar,:where([data-bs-theme="light"]) .navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833,37,41,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out}.navbar{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,:where([data-bs-theme="dark"]) .navbar,.navbar[data-bs-theme="dark"]{--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.55);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.75);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.25);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}:where(.navbar[data-bs-theme="dark"] .navbar-toggler-icon){--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme="dark"] :where(.navbar:not([data-bs-theme="light"]) .navbar-toggler-icon){--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar[data-bs-theme="light"]{--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15)}.navbar[data-bs-theme="light"] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833,37,41,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #86b7fe;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme="dark"] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: .5;--bs-btn-close-hover-opacity: .75;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme="dark"] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme="dark"] .carousel .carousel-control-prev-icon,[data-bs-theme="dark"] .carousel .carousel-control-next-icon,[data-bs-theme="dark"].carousel .carousel-control-prev-icon,[data-bs-theme="dark"].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target],[data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme="dark"] .carousel .carousel-caption,[data-bs-theme="dark"].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-offcanvas-transition: transform .3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(229,232,235, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(229,232,235, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10,88,202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10,88,202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86,94,100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86,94,100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20,108,67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20,108,67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61,213,243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61,213,243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255,205,57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255,205,57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176,42,55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176,42,55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249,250,251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249,250,251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26,30,33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26,30,33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:0.2s ease-in-out transform}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,0.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,0.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: .1}.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25{--bs-link-opacity: .25}.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50{--bs-link-opacity: .5}.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75{--bs-link-opacity: .75}.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: .1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25{--bs-link-underline-opacity: .25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50{--bs-link-underline-opacity: .5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75{--bs-link-underline-opacity: .75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media (min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.table th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre,.bslib-gap-spacing>.shiny-html-output>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-html-output>.form-group,.bslib-gap-spacing>.shiny-html-output>p,.bslib-gap-spacing>.shiny-html-output>pre,.bslib-gap-spacing>.shiny-panel-conditional>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-panel-conditional>.form-group,.bslib-gap-spacing>.shiny-panel-conditional>p,.bslib-gap-spacing>.shiny-panel-conditional>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #0d6efd}.bg-primary{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}.row>main{max-width:50rem}@media (max-width: 767.98px){.row>main{overflow-wrap:break-word;hyphens:auto}}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar{background:RGBA(var(--bs-body-color-rgb), 0.1);background:color-mix(in oklab, color-mix(in oklab, var(--bs-body-bg) 95%, var(--bs-primary)) 95%, var(--bs-body-color));line-height:initial}.nav-item .nav-link{border-radius:.375rem}.nav-item.active .nav-link{background:RGBA(var(--bs-body-color-rgb), 0.1)}.nav-item .nav-link:hover{background:RGBA(var(--bs-primary-rgb), 0.1)}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}input[type="search"]{width:12rem}[aria-labelledby=dropdown-lightswitch] span.fa{opacity:0.5}@media (max-width: 991.98px){.algolia-autocomplete,input[type="search"],#navbar .dropdown-menu{width:100%}#navbar .dropdown-item{white-space:normal}input[type="search"]{margin:0.25rem 0}}.dropdown-menu{max-height:280px;overflow-y:auto}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:RGBA(var(--bs-body-color-rgb), 0.8)}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 767.98px){.row>aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:RGBA(var(--bs-body-color-rgb), 0.1);border-color:var(--bs-border-color);border-radius:.375rem}.row>aside h2:first-child,.row>aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:RGBA(var(--bs-primary-rgb), 0.1)}#toc>.nav a.nav-link.active{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;padding-top:1rem;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:RGBA(var(--bs-body-color-rgb), 0.8);display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dl{margin-bottom:0}dd{padding-left:1.5rem;margin-bottom:0.25rem}h2,.h2{font-size:1.75rem;margin-top:1.5rem}h3,.h3{font-size:1.25rem;margin-top:1rem;font-weight:bold}h4,.h4{font-size:1.1rem;font-weight:bold}h5,.h5{font-size:1rem;font-weight:bold}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:2px;vertical-align:top;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h2:target .anchor,.h2:target .anchor,h3:hover .anchor,.h3:hover .anchor,h3:target .anchor,.h3:target .anchor,h4:hover .anchor,.h4:hover .anchor,h4:target .anchor,.h4:target .anchor,h5:hover .anchor,.h5:hover .anchor,h5:target .anchor,.h5:target .anchor,h6:hover .anchor,.h6:hover .anchor,h6:target .anchor,.h6:target .anchor,dt:hover .anchor,dt:target .anchor{display:inline-block}dt:target,dt:target+dd{border-left:0.25rem solid var(--bs-primary);margin-left:-0.75rem}dt:target{padding-left:0.5rem}dt:target+dd{padding-left:2rem}.orcid{color:#A6CE39;margin-right:4px}.ror{height:16px;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a[href='#main']{position:absolute;margin:4px;padding:0.75rem;background-color:var(--bs-body-bg);text-decoration:none;z-index:2000}.lifecycle{color:var(--bs-secondary-color);background-color:var(--bs-secondary-bg);border-radius:5px}.lifecycle-stable{background-color:#108001;color:var(--bs-white)}.lifecycle-superseded{background-color:#074080;color:var(--bs-white)}.lifecycle-experimental,.lifecycle-deprecated{background-color:#fd8008;color:var(--bs-black)}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px RGBA(var(--bs-body-color-rgb), 0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}[data-bs-theme="dark"] pre,[data-bs-theme="dark"] code{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}[data-bs-theme="dark"] pre code{background:transparent}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:0.75rem}pre div.gt-table{white-space:normal;margin-top:1rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:RGBA(var(--bs-body-color-rgb), 0.6)}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}[data-bs-theme="dark"] pre img{opacity:0.66;transition:opacity 250ms ease-in-out}[data-bs-theme="dark"] pre img:hover,[data-bs-theme="dark"] pre img:focus,[data-bs-theme="dark"] pre img:active{opacity:1}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, RGBA(var(--bs-info-rgb), 0.2), RGBA(var(--bs-info-rgb), 0.7) 95%, RGBA(var(--bs-info-rgb), 0.1))}.algolia-autocomplete .aa-dropdown-menu{margin-top:0.5rem;padding:0.5rem 0.25rem;width:MAX(100%, 20rem);max-height:50vh;overflow-y:auto;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;font-size:1rem;padding:0.5rem 0.25rem;line-height:1.3}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:hover{background-color:var(--bs-tertiary-bg);color:var(--bs-body-color)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-details{text-decoration:underline;display:inline}span.smallcaps{font-variant:small-caps}ul.task-list{list-style:none}ul.task-list li input[type="checkbox"]{width:0.8em;margin:0 0.8em 0.2em -1em;vertical-align:middle}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:0.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:0.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:0.5em}figure>figcaption.quarto-float-caption-top{margin-top:0.5em}:root{--mermaid-bg-color: transparent;--mermaid-edge-color: var(--bs-secondary);--mermaid-fg-color: var(--bs-body-color);--mermaid-fg-color--lighter: RGBA(var(--bs-body-color-rgb), 0.9);--mermaid-fg-color--lightest: RGBA(var(--bs-body-color-rgb), 0.8);--mermaid-font-family: var(--bs-body-font-family);--mermaid-label-bg-color: var(--bs-primary);--mermaid-label-fg-color: var(--bs-body-color);--mermaid-node-bg-color: RGBA(var(--bs-primary-rgb), 0.1);--mermaid-node-fg-color: var(--bs-primary)}[data-bs-theme="dark"] img.r-plt,[data-bs-theme="dark"] pre .r-plt.img img,[data-bs-theme="dark"] .cell-output-display img,[data-bs-theme="dark"] .html-widget{filter:invert(100%) hue-rotate(180deg)}[data-bs-theme="dark"] .no-invert-dark-mode img.r-plt,[data-bs-theme="dark"] .no-invert-dark-mode pre .r-plt.img img,[data-bs-theme="dark"] .no-invert-dark-mode .cell-output-display img,[data-bs-theme="dark"] .no-invert-dark-mode .html-widget{filter:invert(100%) hue-rotate(180deg)}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} + */:root,[data-bs-theme="light"]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #dee2e6;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 222,226,230;--bs-primary-rgb: 13,110,253;--bs-secondary-rgb: 108,117,125;--bs-success-rgb: 25,135,84;--bs-info-rgb: 13,202,240;--bs-warning-rgb: 255,193,7;--bs-danger-rgb: 220,53,69;--bs-light-rgb: 248,249,250;--bs-dark-rgb: 33,37,41;--bs-primary-text-emphasis: #052c65;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #cfe2ff;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #9ec5fe;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255,255,255;--bs-black-rgb: 0,0,0;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33,37,41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255,255,255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0,0,0;--bs-secondary-color: rgba(33,37,41,0.75);--bs-secondary-color-rgb: 33,37,41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233,236,239;--bs-tertiary-color: rgba(33,37,41,0.5);--bs-tertiary-color-rgb: 33,37,41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248,249,250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13,110,253;--bs-link-decoration: underline;--bs-link-hover-color: #0a58ca;--bs-link-hover-color-rgb: 10,88,202;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0,0,0,0.175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0,0,0,0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0,0,0,0.075);--bs-focus-ring-width: .25rem;--bs-focus-ring-opacity: .25;--bs-focus-ring-color: rgba(13,110,253,0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme="dark"]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222,226,230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33,37,41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255,255,255;--bs-secondary-color: rgba(222,226,230,0.75);--bs-secondary-color-rgb: 222,226,230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52,58,64;--bs-tertiary-color: rgba(222,226,230,0.5);--bs-tertiary-color-rgb: 222,226,230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43,48,53;--bs-primary-text-emphasis: #6ea8fe;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #031633;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #084298;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #6ea8fe;--bs-link-hover-color: #8bb9fe;--bs-link-color-rgb: 110,168,254;--bs-link-hover-color-rgb: 139,185,254;--bs-code-color: RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));--bs-border-color: #495057;--bs-border-color-translucent: rgba(255,255,255,0.15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em;color:RGB(var(--bs-emphasis-color-rgb, 0, 0, 0));background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:RGBA(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.04);border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator{display:none !important}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;-webkit-flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-body-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #bacbe6;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme="dark"] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type="checkbox"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type="checkbox"],.shiny-input-container .checkbox input:checked[type="checkbox"],.shiny-input-container .checkbox-inline input:checked[type="checkbox"],.shiny-input-container .radio input:checked[type="checkbox"],.shiny-input-container .radio-inline input:checked[type="checkbox"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"],.shiny-input-container .checkbox input:checked[type="radio"],.shiny-input-container .checkbox-inline input:checked[type="radio"],.shiny-input-container .radio input:checked[type="radio"],.shiny-input-container .radio-inline input:checked[type="radio"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline input[type="checkbox"]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255,255,255,0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4),.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189,192,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49,132,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130,138,145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60,153,110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11,172,204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217,164,6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225,83,97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211,212,213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66,70,73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222,226,230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13,110,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108,117,125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25,135,84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13,202,240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255,193,7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220,53,69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248,249,250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33,37,41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49,132,253;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255,255,255,0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n + 3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: .125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar,:where([data-bs-theme="light"]) .navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833,37,41,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out}.navbar{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,:where([data-bs-theme="dark"]) .navbar,.navbar[data-bs-theme="dark"]{--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.55);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.75);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.25);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}:where(.navbar[data-bs-theme="dark"] .navbar-toggler-icon){--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme="dark"] :where(.navbar:not([data-bs-theme="light"]) .navbar-toggler-icon){--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar[data-bs-theme="light"]{--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15)}.navbar[data-bs-theme="light"] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833,37,41,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #86b7fe;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme="dark"] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: .5;--bs-btn-close-hover-opacity: .75;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme="dark"] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme="dark"] .carousel .carousel-control-prev-icon,[data-bs-theme="dark"] .carousel .carousel-control-next-icon,[data-bs-theme="dark"].carousel .carousel-control-prev-icon,[data-bs-theme="dark"].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target],[data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme="dark"] .carousel .carousel-caption,[data-bs-theme="dark"].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-offcanvas-transition: transform .3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(229,232,235, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(229,232,235, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10,88,202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10,88,202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86,94,100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86,94,100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20,108,67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20,108,67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61,213,243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61,213,243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255,205,57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255,205,57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176,42,55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176,42,55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249,250,251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249,250,251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26,30,33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26,30,33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:0.2s ease-in-out transform}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,0.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,0.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: .1}.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25{--bs-link-opacity: .25}.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50{--bs-link-opacity: .5}.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75{--bs-link-opacity: .75}.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: .1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25{--bs-link-underline-opacity: .25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50{--bs-link-underline-opacity: .5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75{--bs-link-underline-opacity: .75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media (min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.table th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre,.bslib-gap-spacing>.shiny-html-output>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-html-output>.form-group,.bslib-gap-spacing>.shiny-html-output>p,.bslib-gap-spacing>.shiny-html-output>pre,.bslib-gap-spacing>.shiny-panel-conditional>.bslib-mb-spacing,.bslib-gap-spacing>.shiny-panel-conditional>.form-group,.bslib-gap-spacing>.shiny-panel-conditional>p,.bslib-gap-spacing>.shiny-panel-conditional>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.nav-link[disabled]{display:none !important}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #0d6efd}.bg-primary{--bslib-color-bg: #0d6efd;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}.row>main{max-width:50rem}@media (max-width: 767.98px){.row>main{overflow-wrap:break-word;hyphens:auto}}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar{background:RGBA(var(--bs-body-color-rgb), 0.1);background:color-mix(in oklab, color-mix(in oklab, var(--bs-body-bg) 95%, var(--bs-primary)) 95%, var(--bs-body-color));line-height:initial}.nav-item .nav-link{border-radius:.375rem}.nav-item.active .nav-link{background:RGBA(var(--bs-body-color-rgb), 0.1)}.nav-item .nav-link:hover{background:RGBA(var(--bs-primary-rgb), 0.1)}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}input[type="search"]{width:12rem}[aria-labelledby=dropdown-lightswitch] span.fa{opacity:0.5}@media (max-width: 991.98px){.algolia-autocomplete,input[type="search"],#navbar .dropdown-menu{width:100%}#navbar .dropdown-item{white-space:normal}input[type="search"]{margin:0.25rem 0}}.dropdown-menu{max-height:280px;overflow-y:auto}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:RGBA(var(--bs-body-color-rgb), 0.8)}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 767.98px){.row>aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:RGBA(var(--bs-body-color-rgb), 0.1);border-color:var(--bs-border-color);border-radius:.375rem}.row>aside h2:first-child,.row>aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:RGBA(var(--bs-primary-rgb), 0.1)}#toc>.nav a.nav-link.active{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;padding-top:1rem;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:RGBA(var(--bs-body-color-rgb), 0.8);display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid var(--bs-border-color);padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dl{margin-bottom:0}dd{padding-left:1.5rem;margin-bottom:0.25rem}h2,.h2{font-size:1.75rem;margin-top:1.5rem}h3,.h3{font-size:1.25rem;margin-top:1rem;font-weight:bold}h4,.h4{font-size:1.1rem;font-weight:bold}h5,.h5{font-size:1rem;font-weight:bold}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:2px;vertical-align:top;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h2:target .anchor,.h2:target .anchor,h3:hover .anchor,.h3:hover .anchor,h3:target .anchor,.h3:target .anchor,h4:hover .anchor,.h4:hover .anchor,h4:target .anchor,.h4:target .anchor,h5:hover .anchor,.h5:hover .anchor,h5:target .anchor,.h5:target .anchor,h6:hover .anchor,.h6:hover .anchor,h6:target .anchor,.h6:target .anchor,dt:hover .anchor,dt:target .anchor{display:inline-block}dt:target,dt:target+dd{border-left:0.25rem solid var(--bs-primary);margin-left:-0.75rem}dt:target{padding-left:0.5rem}dt:target+dd{padding-left:2rem}.orcid{color:#A6CE39;margin-right:4px}.ror{height:16px;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a[href='#main']{position:absolute;margin:4px;padding:0.75rem;background-color:var(--bs-body-bg);text-decoration:none;z-index:2000}.lifecycle{color:var(--bs-secondary-color);background-color:var(--bs-secondary-bg);border-radius:5px}.lifecycle-stable{background-color:#108001;color:var(--bs-white)}.lifecycle-superseded{background-color:#074080;color:var(--bs-white)}.lifecycle-experimental,.lifecycle-deprecated{background-color:#fd8008;color:var(--bs-black)}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px RGBA(var(--bs-body-color-rgb), 0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}[data-bs-theme="dark"] pre,[data-bs-theme="dark"] code{background-color:RGBA(var(--bs-body-color-rgb), 0.1)}[data-bs-theme="dark"] pre code{background:transparent}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:0.75rem}pre div.gt-table{white-space:normal;margin-top:1rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:RGBA(var(--bs-body-color-rgb), 0.6)}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}[data-bs-theme="dark"] pre img{opacity:0.66;transition:opacity 250ms ease-in-out}[data-bs-theme="dark"] pre img:hover,[data-bs-theme="dark"] pre img:focus,[data-bs-theme="dark"] pre img:active{opacity:1}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, RGBA(var(--bs-info-rgb), 0.2), RGBA(var(--bs-info-rgb), 0.7) 95%, RGBA(var(--bs-info-rgb), 0.1))}.algolia-autocomplete .aa-dropdown-menu{margin-top:0.5rem;padding:0.5rem 0.25rem;width:MAX(100%, 20rem);max-height:50vh;overflow-y:auto;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;font-size:1rem;padding:0.5rem 0.25rem;line-height:1.3}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:hover{background-color:var(--bs-tertiary-bg);color:var(--bs-body-color)}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-details{text-decoration:underline;display:inline}span.smallcaps{font-variant:small-caps}ul.task-list{list-style:none}ul.task-list li input[type="checkbox"]{width:0.8em;margin:0 0.8em 0.2em -1em;vertical-align:middle}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:0.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:0.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:0.5em}figure>figcaption.quarto-float-caption-top{margin-top:0.5em}:root{--mermaid-bg-color: transparent;--mermaid-edge-color: var(--bs-secondary);--mermaid-fg-color: var(--bs-body-color);--mermaid-fg-color--lighter: RGBA(var(--bs-body-color-rgb), 0.9);--mermaid-fg-color--lightest: RGBA(var(--bs-body-color-rgb), 0.8);--mermaid-font-family: var(--bs-body-font-family);--mermaid-label-bg-color: var(--bs-primary);--mermaid-label-fg-color: var(--bs-body-color);--mermaid-node-bg-color: RGBA(var(--bs-primary-rgb), 0.1);--mermaid-node-fg-color: var(--bs-primary)}[data-bs-theme="dark"] img.r-plt,[data-bs-theme="dark"] pre .r-plt.img img,[data-bs-theme="dark"] .cell-output-display img,[data-bs-theme="dark"] .html-widget{filter:invert(100%) hue-rotate(180deg)}[data-bs-theme="dark"] .no-invert-dark-mode img.r-plt,[data-bs-theme="dark"] .no-invert-dark-mode pre .r-plt.img img,[data-bs-theme="dark"] .no-invert-dark-mode .cell-output-display img,[data-bs-theme="dark"] .no-invert-dark-mode .html-widget{filter:invert(100%) hue-rotate(180deg)}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} diff --git a/docs/index.html b/docs/index.html index 069d2fc..616177a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -28,7 +28,7 @@ StreamCatTools - 0.10.0 + 0.11.0
+
+

StreamCatTools 0.11.0

CRAN release: 2026-05-14

+
  • Adds new lc_get_watershed function to return a lake watershed as an sf feature for a LakeCat (NHDPlusV2 Waterbody) COMID from an S3-hosted, HUC2-partitioned GeoParquet dataset
  • +
  • Uses optional HUC2 query as well as retries, multi-threading and duckdb to speed up retrieval of spatial data from AWS S3 bucket
  • +

StreamCatTools 0.10.0

CRAN release: 2026-01-30

  • Adds new functions sc_get_nni() and lc_get_nni() for ease of access to National Nutrient Inventory data in StreamCat
  • diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index af1ec45..70f0484 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -7,7 +7,7 @@ articles: Articles/LakeCat: Articles/LakeCat.html Articles/NNI: Articles/NNI.html StartHere: StartHere.html -last_built: 2026-03-16T23:22Z +last_built: 2026-05-22T17:20Z urls: reference: https://usepa.github.io/StreamCatTools/reference article: https://usepa.github.io/StreamCatTools/articles diff --git a/docs/reference/index.html b/docs/reference/index.html index bdc3934..c73cf33 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -7,7 +7,7 @@ StreamCatTools - 0.10.0 + 0.11.0
@@ -113,6 +100,29 @@

Argumentsstate +

Return metric information for COMIDs within a specific state. Use a state's abbreviation to +query for a given state. +Syntax: state=<state1>,<state2>

+ + +
county
+

Return metric information for COMIDs within a specific county. +Users must use the FIPS code, not county name, as a way to disambiguate counties. +Syntax: county=<county1>,<county1>

+ + +
region
+

Return metric information for COMIDs within a specified hydroregion. +Syntax: region=<regionid1>,<regionid2>

+ + +
conus
+

Return all COMIDs in the conterminous United States. +The default value is false. +Values: true|false

+ +
countOnly

Return a CSV containing only the row count (ROWCOUNT) and the column count (COLUMNCOUNT) that the server expects to return in a request. The default value is false. @@ -132,7 +142,7 @@

Author<

Examples

if (FALSE) { # \dontrun{
 
-df <- lc_nlcd(comid='23783629', year='2019', aoi='ws')  # Will show a deprecation warning
+df <- lc_get_nlcd(comid='23783629', year='2019', aoi='ws')  # Will show a deprecation warning
 
 df <- lc_get_nlcd(comid='23783629', year='2019', aoi='ws')
 
diff --git a/docs/reference/lc_get_nni.html b/docs/reference/lc_get_nni.html
index e8867ef..46a94d1 100644
--- a/docs/reference/lc_get_nni.html
+++ b/docs/reference/lc_get_nni.html
@@ -7,7 +7,7 @@
 
     StreamCatTools
 
-    0.10.0
+    0.11.0
 
 
     
-
-    
-
-
-  
-
-
-
- -Content not found. Please use links in the navbar. - -
-
- - -
- - - -
-
- - - - - - - diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html deleted file mode 100644 index 3801337..0000000 --- a/docs/LICENSE-text.html +++ /dev/null @@ -1,189 +0,0 @@ - -License • StreamCatTools - Skip to contents - - -
-
-
- -
Creative Commons Legal Code
-
-CC0 1.0 Universal
-
-    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
-    LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
-    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
-    INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
-    REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
-    PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
-    THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
-    HEREUNDER.
-
-Statement of Purpose
-
-The laws of most jurisdictions throughout the world automatically confer
-exclusive Copyright and Related Rights (defined below) upon the creator
-and subsequent owner(s) (each and all, an "owner") of an original work of
-authorship and/or a database (each, a "Work").
-
-Certain owners wish to permanently relinquish those rights to a Work for
-the purpose of contributing to a commons of creative, cultural and
-scientific works ("Commons") that the public can reliably and without fear
-of later claims of infringement build upon, modify, incorporate in other
-works, reuse and redistribute as freely as possible in any form whatsoever
-and for any purposes, including without limitation commercial purposes.
-These owners may contribute to the Commons to promote the ideal of a free
-culture and the further production of creative, cultural and scientific
-works, or to gain reputation or greater distribution for their Work in
-part through the use and efforts of others.
-
-For these and/or other purposes and motivations, and without any
-expectation of additional consideration or compensation, the person
-associating CC0 with a Work (the "Affirmer"), to the extent that he or she
-is an owner of Copyright and Related Rights in the Work, voluntarily
-elects to apply CC0 to the Work and publicly distribute the Work under its
-terms, with knowledge of his or her Copyright and Related Rights in the
-Work and the meaning and intended legal effect of CC0 on those rights.
-
-1. Copyright and Related Rights. A Work made available under CC0 may be
-protected by copyright and related or neighboring rights ("Copyright and
-Related Rights"). Copyright and Related Rights include, but are not
-limited to, the following:
-
-  i. the right to reproduce, adapt, distribute, perform, display,
-     communicate, and translate a Work;
- ii. moral rights retained by the original author(s) and/or performer(s);
-iii. publicity and privacy rights pertaining to a person's image or
-     likeness depicted in a Work;
- iv. rights protecting against unfair competition in regards to a Work,
-     subject to the limitations in paragraph 4(a), below;
-  v. rights protecting the extraction, dissemination, use and reuse of data
-     in a Work;
- vi. database rights (such as those arising under Directive 96/9/EC of the
-     European Parliament and of the Council of 11 March 1996 on the legal
-     protection of databases, and under any national implementation
-     thereof, including any amended or successor version of such
-     directive); and
-vii. other similar, equivalent or corresponding rights throughout the
-     world based on applicable law or treaty, and any national
-     implementations thereof.
-
-2. Waiver. To the greatest extent permitted by, but not in contravention
-of, applicable law, Affirmer hereby overtly, fully, permanently,
-irrevocably and unconditionally waives, abandons, and surrenders all of
-Affirmer's Copyright and Related Rights and associated claims and causes
-of action, whether now known or unknown (including existing as well as
-future claims and causes of action), in the Work (i) in all territories
-worldwide, (ii) for the maximum duration provided by applicable law or
-treaty (including future time extensions), (iii) in any current or future
-medium and for any number of copies, and (iv) for any purpose whatsoever,
-including without limitation commercial, advertising or promotional
-purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
-member of the public at large and to the detriment of Affirmer's heirs and
-successors, fully intending that such Waiver shall not be subject to
-revocation, rescission, cancellation, termination, or any other legal or
-equitable action to disrupt the quiet enjoyment of the Work by the public
-as contemplated by Affirmer's express Statement of Purpose.
-
-3. Public License Fallback. Should any part of the Waiver for any reason
-be judged legally invalid or ineffective under applicable law, then the
-Waiver shall be preserved to the maximum extent permitted taking into
-account Affirmer's express Statement of Purpose. In addition, to the
-extent the Waiver is so judged Affirmer hereby grants to each affected
-person a royalty-free, non transferable, non sublicensable, non exclusive,
-irrevocable and unconditional license to exercise Affirmer's Copyright and
-Related Rights in the Work (i) in all territories worldwide, (ii) for the
-maximum duration provided by applicable law or treaty (including future
-time extensions), (iii) in any current or future medium and for any number
-of copies, and (iv) for any purpose whatsoever, including without
-limitation commercial, advertising or promotional purposes (the
-"License"). The License shall be deemed effective as of the date CC0 was
-applied by Affirmer to the Work. Should any part of the License for any
-reason be judged legally invalid or ineffective under applicable law, such
-partial invalidity or ineffectiveness shall not invalidate the remainder
-of the License, and in such case Affirmer hereby affirms that he or she
-will not (i) exercise any of his or her remaining Copyright and Related
-Rights in the Work or (ii) assert any associated claims and causes of
-action with respect to the Work, in either case contrary to Affirmer's
-express Statement of Purpose.
-
-4. Limitations and Disclaimers.
-
- a. No trademark or patent rights held by Affirmer are waived, abandoned,
-    surrendered, licensed or otherwise affected by this document.
- b. Affirmer offers the Work as-is and makes no representations or
-    warranties of any kind concerning the Work, express, implied,
-    statutory or otherwise, including without limitation warranties of
-    title, merchantability, fitness for a particular purpose, non
-    infringement, or the absence of latent or other defects, accuracy, or
-    the present or absence of errors, whether or not discoverable, all to
-    the greatest extent permissible under applicable law.
- c. Affirmer disclaims responsibility for clearing rights of other persons
-    that may apply to the Work or any use thereof, including without
-    limitation any person's Copyright and Related Rights in the Work.
-    Further, Affirmer disclaims responsibility for obtaining any necessary
-    consents, permissions or other rights required for any use of the
-    Work.
- d. Affirmer understands and acknowledges that Creative Commons is not a
-    party to this document and has no duty or obligation with respect to
-    this CC0 or use of the Work.
-
- -
- - -
- - - -
- - - - - - - diff --git a/docs/LICENSE.html b/docs/LICENSE.html deleted file mode 100644 index 7220c33..0000000 --- a/docs/LICENSE.html +++ /dev/null @@ -1,96 +0,0 @@ - -CC0 1.0 Universal • StreamCatTools - Skip to contents - - -
-
-
- - -
-

creative commons

-
-
- -

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN “AS-IS” BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER.

-
-

Statement of Purpose

-

The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an “owner”) of an original work of authorship and/or a database (each, a “Work”).

-

Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works (“Commons”) that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.

-

For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the “Affirmer”), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.

-
  1. -

    Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights (“Copyright and Related Rights”). Copyright and Related Rights include, but are not limited to, the following:

    -
    1. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;

    2. -
    3. moral rights retained by the original author(s) and/or performer(s);

    4. -
    5. publicity and privacy rights pertaining to a person’s image or likeness depicted in a Work;

    6. -
    7. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;

    8. -
    9. rights protecting the extraction, dissemination, use and reuse of data in a Work;

    10. -
    11. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and

    12. -
    13. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.

    14. -
  2. -
  3. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “Waiver”). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer’s heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer’s express Statement of Purpose.

  4. -
  5. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer’s express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer’s Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “License”). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer’s express Statement of Purpose.

  6. -
  7. -

    Limitations and Disclaimers.

    -
    1. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.

    2. -
    3. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.

    4. -
    5. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person’s Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.

    6. -
    7. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.

    8. -
  8. -
-
- - -
- - -
- - - -
- - - - - - - diff --git a/docs/apple-touch-icon-120x120.png b/docs/apple-touch-icon-120x120.png deleted file mode 100644 index 2edc0d30a3b426f52e2194a347d226e7217b71bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21507 zcmV)zK#{+RP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 diff --git a/docs/apple-touch-icon-180x180.png b/docs/apple-touch-icon-180x180.png deleted file mode 100644 index 506338a333c1b3f5d63d0c65c56176e789f0374e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17051 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 NWF-|Ps>BR~{vVJO6=whd diff --git a/docs/apple-touch-icon-60x60.png b/docs/apple-touch-icon-60x60.png deleted file mode 100644 index d54929b14dbacaf218158d70f44bfb153b547691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6955 zcmV+`8`R{9P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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஢+_C5MkCe1hqHwFRO#Dk7V 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 - - - - - - -Applications • StreamCatTools - - - - - - - - - - - - - Skip to contents - - -

- - - - - - - - - - - -
-
- - - -
-

Plotting watershed data -

-

In this example we access a single variable for the Calapooia River -using sc_get_data function. We then use the -nhdplusTools library to grab flowlines and watershed for -the Calapooia, plot the selected StreamCat metric for the Calapooia -River and show the watershed.

-
-library(StreamCatTools)
-start_comid = 23763517
-nldi_feature <- list(featureSource = "comid", featureID = start_comid)
-
-flowline_nldi <- nhdplusTools::navigate_nldi(nldi_feature, mode = "UT", data_source = "flowlines", distance=5000)
-
-# get StreamCat metrics
-df <- sc_get_data(metric='pctimp2011', aoi='cat', comid=flowline_nldi$UT_flowlines$nhdplus_comid)
-
-# We can also pull out comids the following way:
-# comids <- paste(as.integer(flowline_nldi$UT_flowlines$nhdplus_comid), collapse=",",sep="")
-# df <- sc_get_data(metric='pctimp2011', aoi='cat', comid=comids)
-
-flowline_nldi <- flowline_nldi$UT_flowlines
-flowline_nldi$PCTIMP2011CAT <- df$pctimp2011cat[match(flowline_nldi$nhdplus_comid, df$comid)]
-
-basin <- nhdplusTools::get_nldi_basin(nldi_feature = nldi_feature)   
-
-library(mapview)
-mapview::mapviewOptions(fgb=FALSE)
-mapview::mapview(basin, alpha.regions=.08) + mapview::mapview(flowline_nldi, zcol = "PCTIMP2011CAT", legend = TRUE)
-
- -
-
-

Working with NARS data -

-

In this example we demonstrate a data ‘mashup’ by grabbing NRSA data -from the EPA National Aquatic Resource Surveys (NARS) website directly -in R, pull particular StreamCat metrics for sites using -sc_get_data, and compare landscape metrics with other NRSA -metrics

-
-nrsa <- readr::read_csv("https://www.epa.gov/sites/production/files/2015-09/siteinfo_0.csv")
-
-dplyr::glimpse(nrsa)
-
-# Promote data frame to sf spatial points data frame
-nrsa_sf <- sf::st_as_sf(nrsa, coords = c("LON_DD83", "LAT_DD83"), crs = 4269)
-
-# Get COMIDs using nhdplusTools package
-# nrsa$COMID<- NA
-# for (i in 1:nrow(nrsa_sf)){
-#   print (i)
-#   nrsa_sf[i,'COMID'] <- discover_nhdplus_id(nrsa_sf[i,c('geometry')])
-# }
-load(system.file("extdata", "sample_nrsa_data.rda", package="StreamCatTools"))
-
-# get particular StreamCat data for all these NRSA sites
-# nrsa_sf$COMID <- as.character(nrsa_sf$COMID)
-comids <- nrsa_sf$COMID
-comids <- comids[!is.na(comids)]
-comids <- comids[c(1:700)]
-comids <- paste(comids,collapse=',')
-df <- sc_get_data(metric='pctcrop2006', aoi='ws', comid=comids)
-
-# glimpse(df)
-df$COMID <- as.integer(df$comid)
-nrsa_sf <- dplyr::left_join(nrsa_sf, df, by='COMID')
-
-# download mmi from NARS web page
-library(dplyr)
-library(ggplot2)
-mmi <- readr::read_csv("https://www.epa.gov/sites/production/files/2015-09/bentcond.csv")
-# dplyr::glimpse(mmi)
-
-# join mmi to NARS info data frame with StreamCat PctCrop metric
-nrsa_sf <- dplyr::left_join(nrsa_sf, mmi[,c('SITE_ID','BENT_MMI_COND')], by='SITE_ID')
-bxplt <- nrsa_sf |> 
-  tidyr::drop_na(BENT_MMI_COND)  |> 
-  ggplot2::ggplot(aes(x=pctcrop2006ws, y=BENT_MMI_COND))+
-  ggplot2::geom_boxplot()+
-  ggplot2::ggtitle('NRSA Benthic MMI versus % Crop in Watershed from 2006 NLCD')
-suppressWarnings(print(bxplt))
-

NRSA Benthic MMI versus  % Crop in Watershed from 2006 NLCD.

-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/Articles/Applications_files/HomeButton-0.0.1/LICENSE b/docs/articles/Articles/Applications_files/HomeButton-0.0.1/LICENSE deleted file mode 100644 index a1d3414..0000000 --- a/docs/articles/Articles/Applications_files/HomeButton-0.0.1/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (C) 2014 Daniel Montague - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/articles/Articles/Applications_files/HomeButton-0.0.1/easy-button-src.min.js b/docs/articles/Articles/Applications_files/HomeButton-0.0.1/easy-button-src.min.js deleted file mode 100644 index 8270ab1..0000000 --- a/docs/articles/Articles/Applications_files/HomeButton-0.0.1/easy-button-src.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){function a(a,c){this.title=a.title,this.stateName=a.stateName?a.stateName:"unnamed-state",this.icon=L.DomUtil.create("span",""),L.DomUtil.addClass(this.icon,"button-state state-"+this.stateName.replace(/(^\s*|\s*$)/g,"")),this.icon.innerHTML=b(a.icon),this.onClick=L.Util.bind(a.onClick?a.onClick:function(){},c)}function b(a){var b;return a.match(/[&;=<>"']/)?b=a:(a=a.replace(/(^\s*|\s*$)/g,""),b=L.DomUtil.create("span",""),0===a.indexOf("fa-")?L.DomUtil.addClass(b,"fa "+a):0===a.indexOf("glyphicon-")?L.DomUtil.addClass(b,"glyphicon "+a):L.DomUtil.addClass(b,a),b=b.outerHTML),b}L.Control.EasyBar=L.Control.extend({options:{position:"bottomright",id:null,leafletClasses:!0},initialize:function(a,b){b&&L.Util.setOptions(this,b),this._buildContainer(),this._buttons=[];for(var c=0;cON$&;6fSWRh9-@I3zNyhOC<&ctLxqMV0vb1x~h|g>2cE2B#o=wx%YN=W$Ip>E|dXx`2hhTAOu7a0=ZSw-I+y5K~U`&X z=T#qWtY0jb7D^n)m7AB`HhZ68_v!hQ?D@ivSANMA)a%mCxJO4YC7grfEdrV$?2|Tu zc<1fk$Rfwh&HJ4$?Y7oz6o(a<+f>G3!q6PIxI9iE+9niik-i_*_`iSpnFl_u@mKYh z)Jp1P;9uHJ$>#2Q2kmYn3-ilMU~z0S2O*&ljKd(x>~W1R{Mt;;)gliH6S`gFk4SY} z8=xMi1n8BjfTXGc467pRhM^g607a5@QBp-!5){?eBwJI!dGQa_=79D&>;+=_>^#xtfz zDTGO@HFF$glR~kQiDQ_EazzruFwd*7&S;xFq48Afth194u}!jgm?GAX-nl85)$ZAW zriK{J?2=&`6nSDKl7NIHq8TG47mOHl`_0s64TOOkqhbEF>DKt+(8qRF_o}KTRn2O> zAy9F)K@jh$b;n$jsuydf*ICPJ;&8N!_-w(mOb6{G^ycArtDhm<;<|n zD5Ee!BoCTn{U_M!GqH9(C6LBxCys;ZsB8>k8fSwz0rh$@8sN1SM1GVjU(dTa;Y(8g z9fBKa9D<@9w*M3sY%B~(H=%$P!xS{FiUnwzOhTrFO}M2SYLB1b@v+h!jWg4*Op+-f z8)>+QWeEug5nYgF<`P;aW=GsZmT6hAC-EYqh>=Zw8j#8KIsu(XfuB#19l)s1N+n>@ zgTsLGOZ{Lc8TcrUvPChU&cJ7YLOQ~V$2=D5W8*xvWIK|Jv*l!m*?N(`KklCX%mSZecl#^g z{_U49|I@v`aGBfwwfq-%B6Uu#Y+jgqZf(AFXYa(VucN&+?z@kT!<$#Q@(-n3%MX;V zR?hE#u=ho|{_yjIe=q(A&c2tv^~y_U_8(nX_V&5wIq87lSMTHV`Cq8%t-If@UVHyB DN350C diff --git a/docs/articles/Articles/Applications_files/HomeButton-0.0.1/home-button.js b/docs/articles/Articles/Applications_files/HomeButton-0.0.1/home-button.js deleted file mode 100644 index a7a8e7f..0000000 --- a/docs/articles/Articles/Applications_files/HomeButton-0.0.1/home-button.js +++ /dev/null @@ -1,40 +0,0 @@ -LeafletWidget.methods.addHomeButton = function (xmin, ymin, xmax, ymax, useext, - group, label, icon, position) { - - if (this.easyButton) { - this.easyButton.removeFrom(this); - } - - var bx = []; - if (useext) { - bx = [[ymin, xmin], [ymax, xmax]]; - } else { - bx = this.layerManager._groupContainers[group].getBounds(); - } - - var easyButton = new L.easyButton({ - position: position, - states: [{ - stateName: label, // name the state - icon: icon, // and define its properties - title: label, // like its title - onClick: function(btn, map){ - map.fitBounds(bx, {maxZoom: 18}); - btn.state(label); - } - }] - }); - - easyButton.addTo(this); - - this.currentEasyButton = easyButton; - -}; - - -LeafletWidget.methods.removeHomeButton = function () { - if (this.currentEasyButton) { - this.currentEasyButton.removeFrom(this); - this.currentEasyButton = null; - } -}; diff --git a/docs/articles/Articles/Applications_files/Proj4Leaflet-1.0.1/proj4leaflet.js b/docs/articles/Articles/Applications_files/Proj4Leaflet-1.0.1/proj4leaflet.js deleted file mode 100644 index 5ce8d47..0000000 --- a/docs/articles/Articles/Applications_files/Proj4Leaflet-1.0.1/proj4leaflet.js +++ /dev/null @@ -1,272 +0,0 @@ -(function (factory) { - var L, proj4; - if (typeof define === 'function' && define.amd) { - // AMD - define(['leaflet', 'proj4'], factory); - } else if (typeof module === 'object' && typeof module.exports === "object") { - // Node/CommonJS - L = require('leaflet'); - proj4 = require('proj4'); - module.exports = factory(L, proj4); - } else { - // Browser globals - if (typeof window.L === 'undefined' || typeof window.proj4 === 'undefined') - throw 'Leaflet and proj4 must be loaded first'; - factory(window.L, window.proj4); - } -}(function (L, proj4) { - if (proj4.__esModule && proj4.default) { - // If proj4 was bundled as an ES6 module, unwrap it to get - // to the actual main proj4 object. - // See discussion in https://github.com/kartena/Proj4Leaflet/pull/147 - proj4 = proj4.default; - } - - L.Proj = {}; - - L.Proj._isProj4Obj = function(a) { - return (typeof a.inverse !== 'undefined' && - typeof a.forward !== 'undefined'); - }; - - L.Proj.Projection = L.Class.extend({ - initialize: function(code, def, bounds) { - var isP4 = L.Proj._isProj4Obj(code); - this._proj = isP4 ? code : this._projFromCodeDef(code, def); - this.bounds = isP4 ? def : bounds; - }, - - project: function (latlng) { - var point = this._proj.forward([latlng.lng, latlng.lat]); - return new L.Point(point[0], point[1]); - }, - - unproject: function (point, unbounded) { - var point2 = this._proj.inverse([point.x, point.y]); - return new L.LatLng(point2[1], point2[0], unbounded); - }, - - _projFromCodeDef: function(code, def) { - if (def) { - proj4.defs(code, def); - } else if (proj4.defs[code] === undefined) { - var urn = code.split(':'); - if (urn.length > 3) { - code = urn[urn.length - 3] + ':' + urn[urn.length - 1]; - } - if (proj4.defs[code] === undefined) { - throw 'No projection definition for code ' + code; - } - } - - return proj4(code); - } - }); - - L.Proj.CRS = L.Class.extend({ - includes: L.CRS, - - options: { - transformation: new L.Transformation(1, 0, -1, 0) - }, - - initialize: function(a, b, c) { - var code, - proj, - def, - options; - - if (L.Proj._isProj4Obj(a)) { - proj = a; - code = proj.srsCode; - options = b || {}; - - this.projection = new L.Proj.Projection(proj, options.bounds); - } else { - code = a; - def = b; - options = c || {}; - this.projection = new L.Proj.Projection(code, def, options.bounds); - } - - L.Util.setOptions(this, options); - this.code = code; - this.transformation = this.options.transformation; - - if (this.options.origin) { - this.transformation = - new L.Transformation(1, -this.options.origin[0], - -1, this.options.origin[1]); - } - - if (this.options.scales) { - this._scales = this.options.scales; - } else if (this.options.resolutions) { - this._scales = []; - for (var i = this.options.resolutions.length - 1; i >= 0; i--) { - if (this.options.resolutions[i]) { - this._scales[i] = 1 / this.options.resolutions[i]; - } - } - } - - this.infinite = !this.options.bounds; - - }, - - scale: function(zoom) { - var iZoom = Math.floor(zoom), - baseScale, - nextScale, - scaleDiff, - zDiff; - if (zoom === iZoom) { - return this._scales[zoom]; - } else { - // Non-integer zoom, interpolate - baseScale = this._scales[iZoom]; - nextScale = this._scales[iZoom + 1]; - scaleDiff = nextScale - baseScale; - zDiff = (zoom - iZoom); - return baseScale + scaleDiff * zDiff; - } - }, - - zoom: function(scale) { - // Find closest number in this._scales, down - var downScale = this._closestElement(this._scales, scale), - downZoom = this._scales.indexOf(downScale), - nextScale, - nextZoom, - scaleDiff; - // Check if scale is downScale => return array index - if (scale === downScale) { - return downZoom; - } - if (downScale === undefined) { - return -Infinity; - } - // Interpolate - nextZoom = downZoom + 1; - nextScale = this._scales[nextZoom]; - if (nextScale === undefined) { - return Infinity; - } - scaleDiff = nextScale - downScale; - return (scale - downScale) / scaleDiff + downZoom; - }, - - distance: L.CRS.Earth.distance, - - R: L.CRS.Earth.R, - - /* Get the closest lowest element in an array */ - _closestElement: function(array, element) { - var low; - for (var i = array.length; i--;) { - if (array[i] <= element && (low === undefined || low < array[i])) { - low = array[i]; - } - } - return low; - } - }); - - L.Proj.GeoJSON = L.GeoJSON.extend({ - initialize: function(geojson, options) { - this._callLevel = 0; - L.GeoJSON.prototype.initialize.call(this, geojson, options); - }, - - addData: function(geojson) { - var crs; - - if (geojson) { - if (geojson.crs && geojson.crs.type === 'name') { - crs = new L.Proj.CRS(geojson.crs.properties.name); - } else if (geojson.crs && geojson.crs.type) { - crs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code); - } - - if (crs !== undefined) { - this.options.coordsToLatLng = function(coords) { - var point = L.point(coords[0], coords[1]); - return crs.projection.unproject(point); - }; - } - } - - // Base class' addData might call us recursively, but - // CRS shouldn't be cleared in that case, since CRS applies - // to the whole GeoJSON, inluding sub-features. - this._callLevel++; - try { - L.GeoJSON.prototype.addData.call(this, geojson); - } finally { - this._callLevel--; - if (this._callLevel === 0) { - delete this.options.coordsToLatLng; - } - } - } - }); - - L.Proj.geoJson = function(geojson, options) { - return new L.Proj.GeoJSON(geojson, options); - }; - - L.Proj.ImageOverlay = L.ImageOverlay.extend({ - initialize: function (url, bounds, options) { - L.ImageOverlay.prototype.initialize.call(this, url, null, options); - this._projectedBounds = bounds; - }, - - // Danger ahead: Overriding internal methods in Leaflet. - // Decided to do this rather than making a copy of L.ImageOverlay - // and doing very tiny modifications to it. - // Future will tell if this was wise or not. - _animateZoom: function (event) { - var scale = this._map.getZoomScale(event.zoom); - var northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y); - var offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center); - - L.DomUtil.setTransform(this._image, offset, scale); - }, - - _reset: function () { - var zoom = this._map.getZoom(); - var pixelOrigin = this._map.getPixelOrigin(); - var bounds = L.bounds( - this._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin), - this._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin) - ); - var size = bounds.getSize(); - - L.DomUtil.setPosition(this._image, bounds.min); - this._image.style.width = size.x + 'px'; - this._image.style.height = size.y + 'px'; - }, - - _projectedToNewLayerPoint: function (point, zoom, center) { - var viewHalf = this._map.getSize()._divideBy(2); - var newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round(); - var topLeft = newTopLeft.add(this._map._getMapPanePos()); - - return this._transform(point, zoom)._subtract(topLeft); - }, - - _transform: function (point, zoom) { - var crs = this._map.options.crs; - var transformation = crs.transformation; - var scale = crs.scale(zoom); - - return transformation.transform(point, scale); - } - }); - - L.Proj.imageOverlay = function (url, bounds, options) { - return new L.Proj.ImageOverlay(url, bounds, options); - }; - - return L.Proj; -})); diff --git a/docs/articles/Articles/Applications_files/basin-CSS-0.0.1/basin_home-button.css b/docs/articles/Articles/Applications_files/basin-CSS-0.0.1/basin_home-button.css deleted file mode 100644 index 8566711..0000000 --- a/docs/articles/Articles/Applications_files/basin-CSS-0.0.1/basin_home-button.css +++ /dev/null @@ -1,3 +0,0 @@ -.leaflet-bar button {background-color:#ffffff95;border:none;width:100%;height:20px;line-height:15px;font-size:85%;text-align:center;text-decoration:none;color:black;cursor:pointer;overflow-x:visible;overflow-y:hidden;opacity:0.25;background-position:50% 50%;background-repeat:no-repeat;display:inline-block} - - .leaflet-bar button:hover {background-color:#00ffff;text-decoration:underline;opacity:0.9} diff --git a/docs/articles/Articles/Applications_files/clipboard-0.0.1/setClipboardText.js b/docs/articles/Articles/Applications_files/clipboard-0.0.1/setClipboardText.js deleted file mode 100644 index 919477d..0000000 --- a/docs/articles/Articles/Applications_files/clipboard-0.0.1/setClipboardText.js +++ /dev/null @@ -1,51 +0,0 @@ -// taken from -// https://ourcodeworld.com/articles/read/143/how-to-copy-text-to-clipboard-with-javascript-easily -function setClipboardText(text) { - var id = 'mycustom-clipboard-textarea-hidden-id'; - var existsTextarea = document.getElementById(id); - - if (!existsTextarea) { - console.log('Creating textarea'); - var textarea = document.createElement('textarea'); - textarea.id = id; - // Place in top-left corner of screen regardless of scroll position. - textarea.style.position = 'fixed'; - textarea.style.top = 0; - textarea.style.left = 0; - - // Ensure it has a small width and height. Setting to 1px / 1em - // doesn't work as this gives a negative w/h on some browsers. - textarea.style.width = '1px'; - textarea.style.height = '1px'; - - // We don't need padding, reducing the size if it does flash render. - textarea.style.padding = 0; - - // Clean up any borders. - textarea.style.border = 'none'; - textarea.style.outline = 'none'; - textarea.style.boxShadow = 'none'; - - // Avoid flash of white box if rendered for any reason. - textarea.style.background = 'transparent'; - document.querySelector('body').appendChild(textarea); - console.log('The textarea now exists :)'); - existsTextarea = document.getElementById(id); - } else { - console.log('The textarea already exists :3'); - } - - existsTextarea.value = text; - existsTextarea.select(); - - try { - var status = document.execCommand('copy'); - if (!status) { - console.error('Cannot copy text'); - } else { - console.log('The text is now on the clipboard'); - } - } catch (err) { - console.log('Unable to copy.'); - } -} diff --git a/docs/articles/Articles/Applications_files/figure-html/nars_ggplot-1.png b/docs/articles/Articles/Applications_files/figure-html/nars_ggplot-1.png deleted file mode 100644 index 9cc8c3eb1ef0e420e4578115f1b71e51054bd80d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50652 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

WaLJpjY9ul=w_+^lq0NUubd)_wiKesFxrPuwAO z4T8uwr>0IMs<_RpL#|F2cql2vB;~Iy(a`!0HBr&T(h20a?BBI6R*hZM~hYoAl6JS@|2xO|S0 zXB(VK>ee-_*K(x`H1^Zp00gUVLLs@xqk)wVrGb8ZxB^TT{qc~i7xEv?R|l$4!)pX| z;|;=mZA==TRWb5rwNV4f2PSY7d76?wk9EpnilmMm(YV{BURXNfY733}Flvvc@Mh~s zwE|2z)Eml^wmU9wV#H)zcOmK)jB!iVj%B?=V6cBSU+Prtw+HmLSd4*d_aXuiD@~|! zQDZOXiPq zyTh3tlju)H+{@m-Y_$gTu~)FKYl3bC@#(DCiGaz4?qAORxO{WylcXh@dRtI#Jzh5& z3y&u%V)sPYSVj7MPUe+5ZdtXXW5= z+f+dsL-><&T4qOhAkhPDC}%8_il~*O`o7!I;qss=zpve!Ew5PY;;qeBHS{xueH8~P zwu(zkc9RgM<%+L*gFV>-1-0!rla~Hi{1Z(g1^%cI9Ti2NF1T6YxT+(b%PJ5l zvGbhs`h$DLhv$F1xqhz+&~aP4IzSCU2sJfG7P>i2;WU6h3>ZA4)a}lxayFHKeI64f zliEfe;6mL<&^cTCr6%o4(yn?-<=A=wTNb7|X&i&Tq`hnhOs4lfutsor>FDD5lo(Z2 zRlNz=#F)g$$HvuHo=~Lq7>V#GAa;{FGdx=>N$62#Ef|9yOui5DX_8_agkJYR9ac;T z4wZAm5aB3smUSLBgvH@S`~T_$q;XwLhWHyW{+m!j1h7A)Yp?JA~(-VvUU^cmVY_8?IsYK zZTZWd3@Hl4`hfYhxqIIWwc#Mp zdT*3?KduztM6$`WT8n7M6@QGW<4K>UF-lSn5iiq+k|HcBir+FW(*(Rx1Sz&`;xrD0 z+3{@HjDw&p-JI**ew$ZhZVzde38LEmV{)auHT2xMg)>6k*D!Pb&^OUE7o%IkbVvR& z1BtCz@5v}~#WOnlQ855pE@t<=sC=Mt_~Ez*t)IQF$eoz zta=Kj?KO6?=H!O0&;k>DK43qX_OjZ1K_jHty|nx}ETRn29jNE^P-j76?8lOXVPit# z;)3X(L&cz_jh(n9g`rTYhJ*FW$_rQJq+F18Hs`kgQoa(4Ln%^C5hXHOK$+}S^GJM; zWjC0mttfwyNvVA;oG zF7DVGT%q^pI-B2w$(=D8KCm}t(P_Ov4HiHMNh7|Qlv{R&h%ofgI6!TV|OGOo!zwFpKcMAWT_b*@4I^bM-7%Ak4gG1wHhWwU>?vv0Z zZHG#A*`%q7w)pdo+|CBbqhv}(A{sF~Ybsy0J;q^BBM)4gwlrP9h%xT$S`G`{o*n^J zYHG_5F>g|;XT89=9qbSZ4B#4l=v*rygYM{A+o|;sJNoob@}h{0jPSFEiYsEBi znC8cP|Ae<@6*p?^GIMrhph#+heZY3M9l(fIbTbU(L4*XB6R`m#C`M=^Vu@5toEB7o zZxAo5{p^^#@5hguMBLrT2`8lILU_YbV*(>P0pd%@0)Q+Us1ajiBn4Uwti9>c*G9=(bv|^ab_*hm$mV;$d z2pCNk(TBPP%o5g$O5uAS+xy^NhfUkThC}?mwZ}D?dp0&%%R5C7gf{=1m89NXmXEfc zY<$wn9Dp-kvFZoPkhYiMy}6Wp9p^G2H5%lU%&C=IR2}X~VmHz`o~dMj@*UjxY#1e2 zovCEL%MR|$eCF={57zGgbc6l%WjAe_#tdWrC%;9MOg5KcKB#2d7U)PLC&z)c*rYU2 z(!v?04r_;6#_T3ToVcF!asdq+tfyQEEA{kbB|JW}9gn${GN}Tj zJjM}eyDg~mZdZFJb`s6=L&8uje11B{Xl((Yc(X#>2DLY8V&xpN3jd2u`LDT+e@Dyz z+K2i7{#&T2n=a!z6-QJ66=obG%+=6>->CWfP4ZO1qXU)I@mXcl4P>4$HGW>U96I|0 zapA4RqM&e#NG`<}UA zTJeWpUUar?@-M{lWdpE9rMz@>qOE-%_%(BlQRHIi&?K|nOo2z(kYpPGCVaQn;ibX) z<t>$Ovbr z)R;#EqsPb={QAMr)R}k-yiW_T$2U0NinQg*QVrrL9W~)#TOKzWAZB`iLF0iqk+KF= zjt1te$PcXsB5LBXW_Md!STKSq==WbE#rxt4;3p|U*`7*DA_pwpVh2zNw4-|~AbJhM z!{KWDVK^;Fjo%nLmqOwINO_6G+Lf|$BaFeQutIRnM}O#tcJ}W+0lH^R51yi5--qpX zc z=#RQfJufCMPM8P~VxC6ws6CE*W+||!IavGSBLpoXIPK9o7(;(WFoO>?Pa>ES(hcpV zn@UhAIxCxmF=(V-qZzo3z$s4!L$(-vYKR{dH(9tGg96$mQGS>-tz z8r!BH@iX(+vtxq-2x&zbR1B!vpG0*ij3BAo%Q!$VJXmg|v~#;iUR!`AdD@xys%x-; ztR*ivMSE@$jT$9CYZ#_BXd4)=E0Om;e#bYq!{ZS-Wz;iP(nk*i6?|j(I8_b9m@{8m zV}r#&us#Xnz>Nu9u`)olAP|>vPdPPJ1K*K4Qg;9BOL9 z4*iM%G0=V!H)=pi`fM9aF3(`d9s`SWY37HR{p3P3UxWg(Gl{Kr1WYm9IFwsmyktos zVbq^_A|QpAr3gnF{mk*A+~14)3K6vgJOA|W)eAH z5!uW#$eAFvPO>{YllWt7+_ai*G_1i`nD$#V)U2i-k$Fp?+J`)cC(8)WzeP%B9KtG0dC9`_S830S9F=l+p zPSXPq799E=)Q2TWk&1<9aOGBMXdONO^gtx(cvDZSb)drt#yv^5S9l=``e|wEB;G)0 zJg5l9V0Tr;T)|!*z!N44acOrm@r9UF&`nX+HJCxnKy(^}QLa#u%eI7@P{g^CtKMyU z`~w32!}I#*M?3X)lYGlqI+!a%Fdb7Lyc*u4FU5Z_!WLUKD6$qd+#Z<<=JpVX7i*N zo#0}IkWO)MF89(w`)V+2WJPHLy?{`oBX$zs=VlubAnrZ zv68^%wRuT3nmJCA3dPZ_TVi!3lyEw!`cT)Z3j52pNMt;nCy?@RoIg6I{DagVU1rv| zXCHX1bkU;2*N^slfMr}hfGZwB!tA3PHwVgIH@H@K=Wi`Q5qR2VS-HISJ%SxN_T|$O z#Cd=zpo43yF&6awCzRXnzFL4aI3qU9HZtGN*_g5)f^|_4T<04<1ivt)N?w0gH02^} zvqBuCsGHLb%X{w8jJiT9+VsF~qshGDnimgP7rCi6yd9FLqnW^J11cTwdr1~B56;sG zJWUCLdDG_+1csaF`y}&bgHJt&uJ+N3KRyvzcr-o_tIHHEW-(G%P0XOuv!*?|(;F{4 z#>}X#r1(t3yEKkaJN*eN)$`hy=CzX}gB{gAxd#DdKu*nvJfE$8xAShAu zP&huZNr!0$l{mmq+sWEv-EP3W8khyK!?Gl?&FaIAi+XPzzm^ZUi6g%HkPY%W4fxjP z#1qa-kcC@S>AMN6A&TNA*wfU1L7BzCm)xec z&%g4z0UjT@;7}DnB&%%3Q(jGc5u%}2!AY{CA=~Mk1B9}!?tR`NEhKEN>oze23Vl=< z;1J-^m?wGapg;ETSTh+IQmcmsxkTb|l!Wu0a{GhT)Fpz(PXV_mLO}OLy359(VeDVh zNEpOKP0s$NiRpe5T5Nb#(uWH?jwj9=d`CR?Cp9~vL)ab&?&J@^d{ZPc*|4;ATjq!; zJ)mY47FFno7+VQt$(jf54b-#%FRhyF*&~2RBY3IpdP^|WN^+>(fY&12uP0#=k_Lgv zv~rUR_0~B+k4ud$Rccf&V4_nAvr}U5Sbrhf{e<{G!gI(3h~|=!K1iH`Xk?z^M!OB_ zO~yG3u@UWX666Zu;Lo~`=vpH1kf1*wHp3*GsrL9K3nd@a_Joi5|Ko5o!SeQC7-;y0 zbQE|l6kO8G57dTvdHVCJ;2zUB59LW(J;bb4YUm2lTr}qLZV;T^6_b2`3OLA^NP!ou zFN#YSkHVpe+*f}O!}I1(g7VJk-30Ah7;mN5bc4rBdwzYhkguY)d6;j&s{HH+pK!Xi zYlQF29Kl2Y-2O2MPv?<9mGVp*C4$*JRyT-i;IYj)$uP}8$H?Y88DH1YF%uujRfxm^ z%50Zhng@x;^R5eiG|Mnvf(|K6CGwZ(yM+BC&~#pxPuTRAq@dGd=#GNY*6O;D0As}_lhQ#SjD(0s}wFOJvp?8yh?>S>>Z9Do5P85HH(2m`)+ugU$ znXc1GzFyF2CA@YdTAE;kk*45wuGLR|p6RE8eO-c<;to#AG=?U$m{L4hQeo(9g`BH1 zCNY<j{O2SkZGsNM~14Sk17tEBu5xLum0ylY1(SVS5~I9p{tkt72e+z{FOdZF)i z?8i;#1H{_>4@;9P$*c_nLZEwU%-Vm2bG_||* z4tr_>$b2{uwR;supuD zM~1yx*uG-TJeI|YFGV8T@r_VYC)MO*u9dvQk#cVd9EUK*NhLGzU$sA|bd99X}WGA6dchpOK zT)j)_`r6_@JO?#UY{FqK9EisxO4mDZ%@o(_rO%#zL~9q;f&YIH#U#73qRmE6zjmKw-2%e{1!itQt z82f4SBtNvm-m)diqSj>M;vE?KEQp-@ z{d6`>2ttC(h)^&uS!>vUhK%ILv(n%L`Wm#SH{8ReNs+I5aC@bhtYJrGdGkg4UqiQV z2Vc+TKz|~+qFAP6n#^Usm7cSR2WGDv5BPb9JrvY>Snf20NV@5EoW35vHnUt0u!k$<90<6tC)^H1@*u|wEM{!aE0+bOM`q?E_@EygFt~1GajJkZHl-fv zV&yE?N662u(61ICoBQ}`=NanjrVi0~U~o?ATH6K0sj#jjyjn=v378c`+D1kKD> zj&CiQR(r*Bncps=7&(*UKlQ7VESF;h`k*r*z%%|jZV+6t@?Mio;cvSyw2(x(Z$VkB zois-JtdrtVceBW;V3|_vj+1{q?S(XJ%OU?6Zfn}Ln`q})WACv8a#h9vzVUwjFxxDX zq6qX2B_uk*;A9&}Uqu{X6JV8xXm0{2F)HtCndT#`Pc{b{9NUvV+>5m=uQ9vy3pzbs zb`qYvNJ?=3s?hsCp!P_?blXNYmUHf`DmPTYE`UABQirrs_myVMi@~i;sW?CgY+pmK zyA%-S`gOfOJOYfzVo!`z=SkK!k$2PVZmu@VqOZ@Se=60W{(|;2-bUeoeCyv=Gau>@ zV(!+UU4{kC`hmiB_(oEsWK21vTrQe>zQlZ%M?PI0V%%o3$_{Y&kpaX(MVg<9t}e?To|lBv-B&;hN;7$NhgZ- z1Vn>uB<~Af8ciF&-;JOo@hSAKIZbX-GcYq=3+v-(B{K?5oI_klI5) zc4Q4fwxli?VGT^(&h_}?A%6eD)?#5$$hp^OZiSF^8uXLR_BlXP;VmdKj+h0~ggK3K z-|wOjN}wg3dva==&?6dJgbK(kX)zs zp}RnXDs(&q>ZCBpg$BByUTbP6yCsehY9%`2q{eWRu9pU>yji3tO9HAUd}y!k=yEZW z{iKF#xl;C;X8q0$Ak0C!v6n_)NM;0)FU>Ob-(hiiIvUP|2%)rx5OP-p8#X68F3aMN z6H;sf0%5Z##}C4|yQ{YL6_HnDAG*=$sVt0-GBC4TLId1E#6SQG~z`K;%){6&uN(nD`CC5g}8MLekF1-~DN} z8*$X4bP&owMM!PC_MW@OBNdl>4Fdqt%5EDC_PcG)%cEHrT4xY+x^AR0l+RJn@~z_1@A9>$R1I|Dy?k zZHNmaO?e|t#4s7j6D5!dyRUp}xO=J7pjT&I6SP>$X^$X#tbOa0sV59Py?vmo7YWS{ zeC$dq``5o+e49QFp>tm8gn)oRA-au*V{Q{mNmv@+i|L+rk52y(q#=AJ3Rl5X#M+K@ zd%(p^LaVw;j)+1#P9N$E1Ei5wsEhpLG3?a`dAn{8{>vpcwTgcdXD$hNU~6%Ia{=k{ zb_giKn^{#Js5a-{d4`!j!BP_pW(;&e>jWt}YGF<9$))T9#GFl_+$y-;-f%sxzW6g1 zs%!W7`#JJV@qlkCL9{6mvACe@iLP&iozbk>th6)uv}D|*FjUGvUnpKZxZOz zGN%>@ao~u&g&mF$E1)KTpf7e(xuQTTu&pBc2`a`&WjBvXQm&F-lGstI_Vs{L(yTUi zJemnRd|U)RYR2pzUz0r?(y;`6R2-meqDPRF$pOqBn7OcDyX|3%$-KcHx$uI%>&@RU z?*8>`aDw>SJxAxs8Ey#IHXKggX_8g$x=BAWImy^uS1Z82QYTzeCVEdyQmUeoQE^0v z>%RWTW2q-LEHM4p{AalH+aKp{ombtv&@ry~L(q)bDUP4UYkRt#4XOto#gF!hsXq{h_M3 zZ(k|&gwbH8qLPwSfPAYvI;JgJv?%4+i+OpsFcX)a$IZ<><4z_{`OcG{6PRq@et@ll zqdf6DEH;j#Un%Pt!{S@Nem6p=I-7k74i_Dt{#}SUrk~@S zc+&{S(Vmq{&rEa^a9+LOqO?7Kv!EXuAe3zl3s2{pnpI>6ns|a)L*}RIcd8kCVf**Ht&(u zICRKR;Me~C{_&A#r+GJQ=&aN?!>k8Dm=oPPAJ zTem!=w`|#>lWr6IV8m$>!romy>C)}h%a30LQyKvjPPfQ#07v?J)RRn?2y+@#Hkm(5JH9IFD6RM<-z0nuFfG z(62pRJC|gzDK0Rt_+j{NJS0wh5)$evZgn%`&z_ymR&jOB0c*NebPy(h&?L)u0H?{I zi??c$1os(lVEZZ?heV4`V0a}4XI!$&ady(~V$0&;^T)21VMs0X^Jgn|Ihver&@s$< z)4xG4o|oMbT(S9PL;3RDO9Pm#&;sT-Piq+uPxRQBD_ccD;k+X(L0>`9%*(dRZlHm| zA#_}tl~q;zLPE+20-?dGM~>LEkD>SCup%lV!HCt3f*(oP0)8P9hOrOt-Fs?#5X$<) zJ9qv;wlo`>U{CO;{36o!n)T<*eSHX3=n-}~;Em6Zz`O3`h@(5akzdqi5&MqHE%6C3 z(0LnJ1{VRu0f9!DP1!3Wso82;)W$Nvay*>adOS!0ERtvKQ?eMSzSN_Qf!-eirV zb#lBW^+C?QZGT>W{_EEXm&T#9G=nhAPA0gsDK8IRUs2cvx{vVKCV2LdYB{v1e?!wQ z_^jV&b>Pgd!A3Y|u=vcl|MbH}z%GqD!}RK52ZvNvB)U80mtS(v02F$y@l%m>-Uau` zafJG6eI2AoRtExZC0L-{8!{f{cOf)OjaVJO>SpuoPba10-!+QKU;Vdg9K>mcf|2t8 zd-J;&vF#iqUG05IYmNFf4jv4aQRk%KAnfcA1Q$IOw?*&#pM5CBS+&qlk1Z;_xL|cT ze3rydyx)O40`TJu>-03P@7I5&`p{FdBwfT}vrW2gxxtc!aQ^n2;8&sSWDy2dfp1bIS4G?5KlA_>}arTlx9<9B@_^pq|bLwRd|9 zuxaEq`X$jW<8CnB+%wd*8tl!Zrg7j+iX2Is`iBCVaSst);f{lEn=seNHt+)2%);gO z0S!dnySMA`;ln$lBi65957k2$_Tj?^4}O=HmQGuw%fY&&A7bDwscicUF3+?-sD$LI z&A}d%lF3C>W|yN%HtcOc9l%*>tN&}|km4ioJrX#wQdhdp$3rwtt!ZSZMV9f|Z`Ijn zs%KW(9Lx#;@wGe3t&=1%lqL zIH{LrV8l5O06@I5jlmRE7ApL1do)*MpT#ZeWtwvDcqbKR1e&E4&Rw{9)}vNO}~C0V$) zo_IUy%_k)#)iQztt!Ad{v)oq;F75`?c!OnKlk~#Se=3E&*{vb`|bML+U6W@Z!ea&kB<>vIK6H0;>E~ryu2@p zx4ZN`XbQr#(er(x2!JUi7_gf64+%uF_4&_Vy$YnGvfbKY(o?tGCSCT^Dl|Kezc2sg zqtZNF?~djDxRSNMA!*zJ@D~T`(}y@96YUo#HWXU9=AU+Fx zN@d#oru)2GKmfnZcCz*L^Hb!&Bm~E9i^JXfFix|ecjfne}7zWpT1sHVLQXszyJre@Z2862A(d-ecIH5gO*`1ysud#4q={fq{Wq*WBk}e1^*0h9X+A4xu9A_r4eM;mY(!n_xfRp0U!yIo zod>$>s`au?MV8r{nP0`ZO#vw>DL1+hyoz9qv9jSAsQd0QP}noCqFM;}^vO)t6c6{e z<8E+$P`=ZOy5gJ$*1u=k#WhoT67z-+VV3f`)sBysR{^nbrMTG*5IOZW=|D49*>yu} z65iJb;h`|jk=Tza=JJ&*swO7kxDn^Xl!a~330;ZOP3B?S;dHoiTQeauTQVDj&|kgcPc4q{)%|}pk{QiGE8aNYB^Ue z1GfQR{MM3Rez}hW(~XUcHo-n}&cZc56&+)Hk7J#80nDyOI*>3fSPWJte=yr2Q;%On zM03xcJ@?Px(4(yJ?T~AFp1k<%=$Va5<*@NvD_RBHv2UPhI-n}lKy?&!AYvUNzK_oX zY)T6_1;T--qN%eEV=_;d36Yk&bi;7k@^?wbS5Tx3i1cpCIYIi|4}VNKPvWmXsIsPJ zc@RSPGa(c|{{D0^Q+m;le^CAT .html-fill-item { - /* Fill items can grow and shrink freely within - available vertical space in fillable container */ - flex: 1 1 auto; - min-height: 0; - min-width: 0; - } - .html-fill-container > :not(.html-fill-item) { - /* Prevent shrinking or growing of non-fill items */ - flex: 0 0 auto; - } -} diff --git a/docs/articles/Articles/Applications_files/htmltools-fill-0.5.9/fill.css b/docs/articles/Articles/Applications_files/htmltools-fill-0.5.9/fill.css deleted file mode 100644 index 841ea9d..0000000 --- a/docs/articles/Articles/Applications_files/htmltools-fill-0.5.9/fill.css +++ /dev/null @@ -1,21 +0,0 @@ -@layer htmltools { - .html-fill-container { - display: flex; - flex-direction: column; - /* Prevent the container from expanding vertically or horizontally beyond its - parent's constraints. */ - min-height: 0; - min-width: 0; - } - .html-fill-container > .html-fill-item { - /* Fill items can grow and shrink freely within - available vertical space in fillable container */ - flex: 1 1 auto; - min-height: 0; - min-width: 0; - } - .html-fill-container > :not(.html-fill-item) { - /* Prevent shrinking or growing of non-fill items */ - flex: 0 0 auto; - } -} diff --git a/docs/articles/Articles/Applications_files/htmlwidgets-1.6.4/htmlwidgets.js b/docs/articles/Articles/Applications_files/htmlwidgets-1.6.4/htmlwidgets.js deleted file mode 100644 index 1067d02..0000000 --- a/docs/articles/Articles/Applications_files/htmlwidgets-1.6.4/htmlwidgets.js +++ /dev/null @@ -1,901 +0,0 @@ -(function() { - // If window.HTMLWidgets is already defined, then use it; otherwise create a - // new object. This allows preceding code to set options that affect the - // initialization process (though none currently exist). - window.HTMLWidgets = window.HTMLWidgets || {}; - - // See if we're running in a viewer pane. If not, we're in a web browser. - var viewerMode = window.HTMLWidgets.viewerMode = - /\bviewer_pane=1\b/.test(window.location); - - // See if we're running in Shiny mode. If not, it's a static document. - // Note that static widgets can appear in both Shiny and static modes, but - // obviously, Shiny widgets can only appear in Shiny apps/documents. - var shinyMode = window.HTMLWidgets.shinyMode = - typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; - - // We can't count on jQuery being available, so we implement our own - // version if necessary. - function querySelectorAll(scope, selector) { - if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { - return scope.find(selector); - } - if (scope.querySelectorAll) { - return scope.querySelectorAll(selector); - } - } - - function asArray(value) { - if (value === null) - return []; - if ($.isArray(value)) - return value; - return [value]; - } - - // Implement jQuery's extend - function extend(target /*, ... */) { - if (arguments.length == 1) { - return target; - } - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - } - return target; - } - - // IE8 doesn't support Array.forEach. - function forEach(values, callback, thisArg) { - if (values.forEach) { - values.forEach(callback, thisArg); - } else { - for (var i = 0; i < values.length; i++) { - callback.call(thisArg, values[i], i, values); - } - } - } - - // Replaces the specified method with the return value of funcSource. - // - // Note that funcSource should not BE the new method, it should be a function - // that RETURNS the new method. funcSource receives a single argument that is - // the overridden method, it can be called from the new method. The overridden - // method can be called like a regular function, it has the target permanently - // bound to it so "this" will work correctly. - function overrideMethod(target, methodName, funcSource) { - var superFunc = target[methodName] || function() {}; - var superFuncBound = function() { - return superFunc.apply(target, arguments); - }; - target[methodName] = funcSource(superFuncBound); - } - - // Add a method to delegator that, when invoked, calls - // delegatee.methodName. If there is no such method on - // the delegatee, but there was one on delegator before - // delegateMethod was called, then the original version - // is invoked instead. - // For example: - // - // var a = { - // method1: function() { console.log('a1'); } - // method2: function() { console.log('a2'); } - // }; - // var b = { - // method1: function() { console.log('b1'); } - // }; - // delegateMethod(a, b, "method1"); - // delegateMethod(a, b, "method2"); - // a.method1(); - // a.method2(); - // - // The output would be "b1", "a2". - function delegateMethod(delegator, delegatee, methodName) { - var inherited = delegator[methodName]; - delegator[methodName] = function() { - var target = delegatee; - var method = delegatee[methodName]; - - // The method doesn't exist on the delegatee. Instead, - // call the method on the delegator, if it exists. - if (!method) { - target = delegator; - method = inherited; - } - - if (method) { - return method.apply(target, arguments); - } - }; - } - - // Implement a vague facsimilie of jQuery's data method - function elementData(el, name, value) { - if (arguments.length == 2) { - return el["htmlwidget_data_" + name]; - } else if (arguments.length == 3) { - el["htmlwidget_data_" + name] = value; - return el; - } else { - throw new Error("Wrong number of arguments for elementData: " + - arguments.length); - } - } - - // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex - function escapeRegExp(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - - function hasClass(el, className) { - var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); - return re.test(el.className); - } - - // elements - array (or array-like object) of HTML elements - // className - class name to test for - // include - if true, only return elements with given className; - // if false, only return elements *without* given className - function filterByClass(elements, className, include) { - var results = []; - for (var i = 0; i < elements.length; i++) { - if (hasClass(elements[i], className) == include) - results.push(elements[i]); - } - return results; - } - - function on(obj, eventName, func) { - if (obj.addEventListener) { - obj.addEventListener(eventName, func, false); - } else if (obj.attachEvent) { - obj.attachEvent(eventName, func); - } - } - - function off(obj, eventName, func) { - if (obj.removeEventListener) - obj.removeEventListener(eventName, func, false); - else if (obj.detachEvent) { - obj.detachEvent(eventName, func); - } - } - - // Translate array of values to top/right/bottom/left, as usual with - // the "padding" CSS property - // https://developer.mozilla.org/en-US/docs/Web/CSS/padding - function unpackPadding(value) { - if (typeof(value) === "number") - value = [value]; - if (value.length === 1) { - return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; - } - if (value.length === 2) { - return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; - } - if (value.length === 3) { - return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; - } - if (value.length === 4) { - return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; - } - } - - // Convert an unpacked padding object to a CSS value - function paddingToCss(paddingObj) { - return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; - } - - // Makes a number suitable for CSS - function px(x) { - if (typeof(x) === "number") - return x + "px"; - else - return x; - } - - // Retrieves runtime widget sizing information for an element. - // The return value is either null, or an object with fill, padding, - // defaultWidth, defaultHeight fields. - function sizingPolicy(el) { - var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); - if (!sizingEl) - return null; - var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); - if (viewerMode) { - return sp.viewer; - } else { - return sp.browser; - } - } - - // @param tasks Array of strings (or falsy value, in which case no-op). - // Each element must be a valid JavaScript expression that yields a - // function. Or, can be an array of objects with "code" and "data" - // properties; in this case, the "code" property should be a string - // of JS that's an expr that yields a function, and "data" should be - // an object that will be added as an additional argument when that - // function is called. - // @param target The object that will be "this" for each function - // execution. - // @param args Array of arguments to be passed to the functions. (The - // same arguments will be passed to all functions.) - function evalAndRun(tasks, target, args) { - if (tasks) { - forEach(tasks, function(task) { - var theseArgs = args; - if (typeof(task) === "object") { - theseArgs = theseArgs.concat([task.data]); - task = task.code; - } - var taskFunc = tryEval(task); - if (typeof(taskFunc) !== "function") { - throw new Error("Task must be a function! Source:\n" + task); - } - taskFunc.apply(target, theseArgs); - }); - } - } - - // Attempt eval() both with and without enclosing in parentheses. - // Note that enclosing coerces a function declaration into - // an expression that eval() can parse - // (otherwise, a SyntaxError is thrown) - function tryEval(code) { - var result = null; - try { - result = eval("(" + code + ")"); - } catch(error) { - if (!(error instanceof SyntaxError)) { - throw error; - } - try { - result = eval(code); - } catch(e) { - if (e instanceof SyntaxError) { - throw error; - } else { - throw e; - } - } - } - return result; - } - - function initSizing(el) { - var sizing = sizingPolicy(el); - if (!sizing) - return; - - var cel = document.getElementById("htmlwidget_container"); - if (!cel) - return; - - if (typeof(sizing.padding) !== "undefined") { - document.body.style.margin = "0"; - document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); - } - - if (sizing.fill) { - document.body.style.overflow = "hidden"; - document.body.style.width = "100%"; - document.body.style.height = "100%"; - document.documentElement.style.width = "100%"; - document.documentElement.style.height = "100%"; - cel.style.position = "absolute"; - var pad = unpackPadding(sizing.padding); - cel.style.top = pad.top + "px"; - cel.style.right = pad.right + "px"; - cel.style.bottom = pad.bottom + "px"; - cel.style.left = pad.left + "px"; - el.style.width = "100%"; - el.style.height = "100%"; - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - } - } - - // Default implementations for methods - var defaults = { - find: function(scope) { - return querySelectorAll(scope, "." + this.name); - }, - renderError: function(el, err) { - var $el = $(el); - - this.clearError(el); - - // Add all these error classes, as Shiny does - var errClass = "shiny-output-error"; - if (err.type !== null) { - // use the classes of the error condition as CSS class names - errClass = errClass + " " + $.map(asArray(err.type), function(type) { - return errClass + "-" + type; - }).join(" "); - } - errClass = errClass + " htmlwidgets-error"; - - // Is el inline or block? If inline or inline-block, just display:none it - // and add an inline error. - var display = $el.css("display"); - $el.data("restore-display-mode", display); - - if (display === "inline" || display === "inline-block") { - $el.hide(); - if (err.message !== "") { - var errorSpan = $("").addClass(errClass); - errorSpan.text(err.message); - $el.after(errorSpan); - } - } else if (display === "block") { - // If block, add an error just after the el, set visibility:none on the - // el, and position the error to be on top of the el. - // Mark it with a unique ID and CSS class so we can remove it later. - $el.css("visibility", "hidden"); - if (err.message !== "") { - var errorDiv = $("

").addClass(errClass).css("position", "absolute") - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - // setting width can push out the page size, forcing otherwise - // unnecessary scrollbars to appear and making it impossible for - // the element to shrink; so use max-width instead - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - errorDiv.text(err.message); - $el.after(errorDiv); - - // Really dumb way to keep the size/position of the error in sync with - // the parent element as the window is resized or whatever. - var intId = setInterval(function() { - if (!errorDiv[0].parentElement) { - clearInterval(intId); - return; - } - errorDiv - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - }, 500); - } - } - }, - clearError: function(el) { - var $el = $(el); - var display = $el.data("restore-display-mode"); - $el.data("restore-display-mode", null); - - if (display === "inline" || display === "inline-block") { - if (display) - $el.css("display", display); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } else if (display === "block"){ - $el.css("visibility", "inherit"); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } - }, - sizing: {} - }; - - // Called by widget bindings to register a new type of widget. The definition - // object can contain the following properties: - // - name (required) - A string indicating the binding name, which will be - // used by default as the CSS classname to look for. - // - initialize (optional) - A function(el) that will be called once per - // widget element; if a value is returned, it will be passed as the third - // value to renderValue. - // - renderValue (required) - A function(el, data, initValue) that will be - // called with data. Static contexts will cause this to be called once per - // element; Shiny apps will cause this to be called multiple times per - // element, as the data changes. - window.HTMLWidgets.widget = function(definition) { - if (!definition.name) { - throw new Error("Widget must have a name"); - } - if (!definition.type) { - throw new Error("Widget must have a type"); - } - // Currently we only support output widgets - if (definition.type !== "output") { - throw new Error("Unrecognized widget type '" + definition.type + "'"); - } - // TODO: Verify that .name is a valid CSS classname - - // Support new-style instance-bound definitions. Old-style class-bound - // definitions have one widget "object" per widget per type/class of - // widget; the renderValue and resize methods on such widget objects - // take el and instance arguments, because the widget object can't - // store them. New-style instance-bound definitions have one widget - // object per widget instance; the definition that's passed in doesn't - // provide renderValue or resize methods at all, just the single method - // factory(el, width, height) - // which returns an object that has renderValue(x) and resize(w, h). - // This enables a far more natural programming style for the widget - // author, who can store per-instance state using either OO-style - // instance fields or functional-style closure variables (I guess this - // is in contrast to what can only be called C-style pseudo-OO which is - // what we required before). - if (definition.factory) { - definition = createLegacyDefinitionAdapter(definition); - } - - if (!definition.renderValue) { - throw new Error("Widget must have a renderValue function"); - } - - // For static rendering (non-Shiny), use a simple widget registration - // scheme. We also use this scheme for Shiny apps/documents that also - // contain static widgets. - window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; - // Merge defaults into the definition; don't mutate the original definition. - var staticBinding = extend({}, defaults, definition); - overrideMethod(staticBinding, "find", function(superfunc) { - return function(scope) { - var results = superfunc(scope); - // Filter out Shiny outputs, we only want the static kind - return filterByClass(results, "html-widget-output", false); - }; - }); - window.HTMLWidgets.widgets.push(staticBinding); - - if (shinyMode) { - // Shiny is running. Register the definition with an output binding. - // The definition itself will not be the output binding, instead - // we will make an output binding object that delegates to the - // definition. This is because we foolishly used the same method - // name (renderValue) for htmlwidgets definition and Shiny bindings - // but they actually have quite different semantics (the Shiny - // bindings receive data that includes lots of metadata that it - // strips off before calling htmlwidgets renderValue). We can't - // just ignore the difference because in some widgets it's helpful - // to call this.renderValue() from inside of resize(), and if - // we're not delegating, then that call will go to the Shiny - // version instead of the htmlwidgets version. - - // Merge defaults with definition, without mutating either. - var bindingDef = extend({}, defaults, definition); - - // This object will be our actual Shiny binding. - var shinyBinding = new Shiny.OutputBinding(); - - // With a few exceptions, we'll want to simply use the bindingDef's - // version of methods if they are available, otherwise fall back to - // Shiny's defaults. NOTE: If Shiny's output bindings gain additional - // methods in the future, and we want them to be overrideable by - // HTMLWidget binding definitions, then we'll need to add them to this - // list. - delegateMethod(shinyBinding, bindingDef, "getId"); - delegateMethod(shinyBinding, bindingDef, "onValueChange"); - delegateMethod(shinyBinding, bindingDef, "onValueError"); - delegateMethod(shinyBinding, bindingDef, "renderError"); - delegateMethod(shinyBinding, bindingDef, "clearError"); - delegateMethod(shinyBinding, bindingDef, "showProgress"); - - // The find, renderValue, and resize are handled differently, because we - // want to actually decorate the behavior of the bindingDef methods. - - shinyBinding.find = function(scope) { - var results = bindingDef.find(scope); - - // Only return elements that are Shiny outputs, not static ones - var dynamicResults = results.filter(".html-widget-output"); - - // It's possible that whatever caused Shiny to think there might be - // new dynamic outputs, also caused there to be new static outputs. - // Since there might be lots of different htmlwidgets bindings, we - // schedule execution for later--no need to staticRender multiple - // times. - if (results.length !== dynamicResults.length) - scheduleStaticRender(); - - return dynamicResults; - }; - - // Wrap renderValue to handle initialization, which unfortunately isn't - // supported natively by Shiny at the time of this writing. - - shinyBinding.renderValue = function(el, data) { - Shiny.renderDependencies(data.deps); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var i = 0; data.evals && i < data.evals.length; i++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); - } - if (!bindingDef.renderOnNullValue) { - if (data.x === null) { - el.style.visibility = "hidden"; - return; - } else { - el.style.visibility = "inherit"; - } - } - if (!elementData(el, "initialized")) { - initSizing(el); - - elementData(el, "initialized", true); - if (bindingDef.initialize) { - var rect = el.getBoundingClientRect(); - var result = bindingDef.initialize(el, rect.width, rect.height); - elementData(el, "init_result", result); - } - } - bindingDef.renderValue(el, data.x, elementData(el, "init_result")); - evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); - }; - - // Only override resize if bindingDef implements it - if (bindingDef.resize) { - shinyBinding.resize = function(el, width, height) { - // Shiny can call resize before initialize/renderValue have been - // called, which doesn't make sense for widgets. - if (elementData(el, "initialized")) { - bindingDef.resize(el, width, height, elementData(el, "init_result")); - } - }; - } - - Shiny.outputBindings.register(shinyBinding, bindingDef.name); - } - }; - - var scheduleStaticRenderTimerId = null; - function scheduleStaticRender() { - if (!scheduleStaticRenderTimerId) { - scheduleStaticRenderTimerId = setTimeout(function() { - scheduleStaticRenderTimerId = null; - window.HTMLWidgets.staticRender(); - }, 1); - } - } - - // Render static widgets after the document finishes loading - // Statically render all elements that are of this widget's class - window.HTMLWidgets.staticRender = function() { - var bindings = window.HTMLWidgets.widgets || []; - forEach(bindings, function(binding) { - var matches = binding.find(document.documentElement); - forEach(matches, function(el) { - var sizeObj = initSizing(el, binding); - - var getSize = function(el) { - if (sizeObj) { - return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} - } else { - var rect = el.getBoundingClientRect(); - return {w: rect.width, h: rect.height} - } - }; - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - var size = getSize(el); - initResult = binding.initialize(el, size.w, size.h); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = getSize(el); - var resizeHandler = function(e) { - var size = getSize(el); - if (size.w === 0 && size.h === 0) - return; - if (size.w === lastSize.w && size.h === lastSize.h) - return; - lastSize = size; - binding.resize(el, size.w, size.h, initResult); - }; - - on(window, "resize", resizeHandler); - - // This is needed for cases where we're running in a Shiny - // app, but the widget itself is not a Shiny output, but - // rather a simple static widget. One example of this is - // an rmarkdown document that has runtime:shiny and widget - // that isn't in a render function. Shiny only knows to - // call resize handlers for Shiny outputs, not for static - // widgets, so we do it ourselves. - if (window.jQuery) { - window.jQuery(document).on( - "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", - resizeHandler - ); - window.jQuery(document).on( - "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", - resizeHandler - ); - } - - // This is needed for the specific case of ioslides, which - // flips slides between display:none and display:block. - // Ideally we would not have to have ioslide-specific code - // here, but rather have ioslides raise a generic event, - // but the rmarkdown package just went to CRAN so the - // window to getting that fixed may be long. - if (window.addEventListener) { - // It's OK to limit this to window.addEventListener - // browsers because ioslides itself only supports - // such browsers. - on(document, "slideenter", resizeHandler); - on(document, "slideleave", resizeHandler); - } - } - - var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); - if (scriptData) { - var data = JSON.parse(scriptData.textContent || scriptData.text); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var k = 0; data.evals && k < data.evals.length; k++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); - } - binding.renderValue(el, data.x, initResult); - evalAndRun(data.jsHooks.render, initResult, [el, data.x]); - } - }); - }); - - invokePostRenderHandlers(); - } - - - function has_jQuery3() { - if (!window.jQuery) { - return false; - } - var $version = window.jQuery.fn.jquery; - var $major_version = parseInt($version.split(".")[0]); - return $major_version >= 3; - } - - /* - / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's - / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now - / really means $(setTimeout(fn)). - / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous - / - / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny - / one tick later than it did before, which means staticRender() is - / called renderValue() earlier than (advanced) widget authors might be expecting. - / https://github.com/rstudio/shiny/issues/2630 - / - / For a concrete example, leaflet has some methods (e.g., updateBounds) - / which reference Shiny methods registered in initShiny (e.g., setInputValue). - / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to - / delay execution of those methods (until Shiny methods are ready) - / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 - / - / Ideally widget authors wouldn't need to use this setTimeout() hack that - / leaflet uses to call Shiny methods on a staticRender(). In the long run, - / the logic initShiny should be broken up so that method registration happens - / right away, but binding happens later. - */ - function maybeStaticRenderLater() { - if (shinyMode && has_jQuery3()) { - window.jQuery(window.HTMLWidgets.staticRender); - } else { - window.HTMLWidgets.staticRender(); - } - } - - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", function() { - document.removeEventListener("DOMContentLoaded", arguments.callee, false); - maybeStaticRenderLater(); - }, false); - } else if (document.attachEvent) { - document.attachEvent("onreadystatechange", function() { - if (document.readyState === "complete") { - document.detachEvent("onreadystatechange", arguments.callee); - maybeStaticRenderLater(); - } - }); - } - - - window.HTMLWidgets.getAttachmentUrl = function(depname, key) { - // If no key, default to the first item - if (typeof(key) === "undefined") - key = 1; - - var link = document.getElementById(depname + "-" + key + "-attachment"); - if (!link) { - throw new Error("Attachment " + depname + "/" + key + " not found in document"); - } - return link.getAttribute("href"); - }; - - window.HTMLWidgets.dataframeToD3 = function(df) { - var names = []; - var length; - for (var name in df) { - if (df.hasOwnProperty(name)) - names.push(name); - if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { - throw new Error("All fields must be arrays"); - } else if (typeof(length) !== "undefined" && length !== df[name].length) { - throw new Error("All fields must be arrays of the same length"); - } - length = df[name].length; - } - var results = []; - var item; - for (var row = 0; row < length; row++) { - item = {}; - for (var col = 0; col < names.length; col++) { - item[names[col]] = df[names[col]][row]; - } - results.push(item); - } - return results; - }; - - window.HTMLWidgets.transposeArray2D = function(array) { - if (array.length === 0) return array; - var newArray = array[0].map(function(col, i) { - return array.map(function(row) { - return row[i] - }) - }); - return newArray; - }; - // Split value at splitChar, but allow splitChar to be escaped - // using escapeChar. Any other characters escaped by escapeChar - // will be included as usual (including escapeChar itself). - function splitWithEscape(value, splitChar, escapeChar) { - var results = []; - var escapeMode = false; - var currentResult = ""; - for (var pos = 0; pos < value.length; pos++) { - if (!escapeMode) { - if (value[pos] === splitChar) { - results.push(currentResult); - currentResult = ""; - } else if (value[pos] === escapeChar) { - escapeMode = true; - } else { - currentResult += value[pos]; - } - } else { - currentResult += value[pos]; - escapeMode = false; - } - } - if (currentResult !== "") { - results.push(currentResult); - } - return results; - } - // Function authored by Yihui/JJ Allaire - window.HTMLWidgets.evaluateStringMember = function(o, member) { - var parts = splitWithEscape(member, '.', '\\'); - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i]; - // part may be a character or 'numeric' member name - if (o !== null && typeof o === "object" && part in o) { - if (i == (l - 1)) { // if we are at the end of the line then evalulate - if (typeof o[part] === "string") - o[part] = tryEval(o[part]); - } else { // otherwise continue to next embedded object - o = o[part]; - } - } - } - }; - - // Retrieve the HTMLWidget instance (i.e. the return value of an - // HTMLWidget binding's initialize() or factory() function) - // associated with an element, or null if none. - window.HTMLWidgets.getInstance = function(el) { - return elementData(el, "init_result"); - }; - - // Finds the first element in the scope that matches the selector, - // and returns the HTMLWidget instance (i.e. the return value of - // an HTMLWidget binding's initialize() or factory() function) - // associated with that element, if any. If no element matches the - // selector, or the first matching element has no HTMLWidget - // instance associated with it, then null is returned. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.find = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var el = scope.querySelector(selector); - if (el === null) { - return null; - } else { - return window.HTMLWidgets.getInstance(el); - } - }; - - // Finds all elements in the scope that match the selector, and - // returns the HTMLWidget instances (i.e. the return values of - // an HTMLWidget binding's initialize() or factory() function) - // associated with the elements, in an array. If elements that - // match the selector don't have an associated HTMLWidget - // instance, the returned array will contain nulls. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.findAll = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var nodes = scope.querySelectorAll(selector); - var results = []; - for (var i = 0; i < nodes.length; i++) { - results.push(window.HTMLWidgets.getInstance(nodes[i])); - } - return results; - }; - - var postRenderHandlers = []; - function invokePostRenderHandlers() { - while (postRenderHandlers.length) { - var handler = postRenderHandlers.shift(); - if (handler) { - handler(); - } - } - } - - // Register the given callback function to be invoked after the - // next time static widgets are rendered. - window.HTMLWidgets.addPostRenderHandler = function(callback) { - postRenderHandlers.push(callback); - }; - - // Takes a new-style instance-bound definition, and returns an - // old-style class-bound definition. This saves us from having - // to rewrite all the logic in this file to accomodate both - // types of definitions. - function createLegacyDefinitionAdapter(defn) { - var result = { - name: defn.name, - type: defn.type, - initialize: function(el, width, height) { - return defn.factory(el, width, height); - }, - renderValue: function(el, x, instance) { - return instance.renderValue(x); - }, - resize: function(el, width, height, instance) { - return instance.resize(width, height); - } - }; - - if (defn.find) - result.find = defn.find; - if (defn.renderError) - result.renderError = defn.renderError; - if (defn.clearError) - result.clearError = defn.clearError; - - return result; - } -})(); diff --git a/docs/articles/Articles/Applications_files/leaflet-1.3.1/images/layers-2x.png b/docs/articles/Articles/Applications_files/leaflet-1.3.1/images/layers-2x.png deleted file mode 100644 index 200c333dca9652ac4cba004d609e5af4eee168c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1259 zcmVFhCYNy;#0irRPomHqW|G1C*;4?@4#E?jH>?v@U%cy?3dQAc-DchXVErpOh~ z-jbon+tNbnl6hoEb;)TVk+%hTDDi_G%i3*RZ&15!$Fjr^f;Ke&A@|?=`2&+{zr+3a z{D*=t(`AXyS%X7N z%a#RZw6vD^t_rnM`L4E>m=U&R!A-&}nZIi$BOPvkhrCuUe@BN~-lRD)f44;J%TwgE zcze8u!PQ_NR7?o(NylLXVTfDO zxs5=@|GsYEsNo4M#nT%N!UE(?dnS)t2+{ELYAFp*3=iF=|EQnTp`#vlSXuGVraYo? z+RCzXo6h3qA8{KG?S4nE(lM+;Eb4nT3XV;7gcAxUi5m)`k5tv}cPy()8ZR3TLW3I- zAS^}cq-IJvL7a4RgR!yk@~RT%$lA7{L5ES*hyx)M4(yxI$Ub(4f)K|^v1>zvwQY!_ zIrWw8q9GS^!Dp~}+?mbnB6jDF8mVlbQ!jFKDY;w=7;XO{9bq7>LXGK24WA`;rL)_Z z)&j}pbV(;6gY;VMhbxgvn`X;6x}VUEE-7 z%)7j-%t8S=ZL3yc)HbXDAqJZvBTPoiW_A-+a8m3_Z?v{DN7Tnr#O_VUMT0UBt$;p` zDh6JbGHN8JJ*JN%y2%msb97@_S>9!%Egwk;?PEkU9ntz&3uR}%Fj5d$JHQbQb3}a{ zSzFT^#n=VInPpcAS}CNxj?_ zVscANk5Cfz(51EI1pz};AWWb|kgbYNb4wCEGUn3+eMUMV?1-{=I4TlmLJMot@rd07 zZuo2hk1ccu{YmGkcYdWAVdk{Z4Nm?^cTD&}jGm+Q1SYIXMwmG*oO*83&#>l%nbR`G zhh=lZ%xIb7kU3#;TBbfECrnC9P=-XpL|TG2BoZdj61*XiFbW8?1Z_wp%#;>${SUIy V$8qr;L*)Pf002ovPDHLkV1hYLS~36t diff --git a/docs/articles/Articles/Applications_files/leaflet-1.3.1/images/layers.png b/docs/articles/Articles/Applications_files/leaflet-1.3.1/images/layers.png deleted file mode 100644 index 1a72e5784b2b456eac5d7670738db80697af3377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 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 e-I|>x8~*?ZhF3snGbtJX0000cOl4 diff --git a/docs/articles/Articles/Applications_files/leaflet-1.3.1/images/marker-icon.png b/docs/articles/Articles/Applications_files/leaflet-1.3.1/images/marker-icon.png deleted file mode 100644 index 950edf24677ded147df13b26f91baa2b0fa70513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)P001cn1^@s6z>|W`000GnNklGNuHDcIX17Zdjl&3`L?0sTjIws<{((Dh&g-s0<@jYQyl?D*X^?%13;ml^gy> ziMrY_^1WI=(g@LMizu=zCoA>C`6|QEq1eV92k*7m>G65*&@&6)aC&e}G zI)pf-Za|N`DT&Cn1J|o`19mumxW~hiKiKyc-P`S@q)rdTo84@QI@;0yXrG%9uhI>A zG5QHb6s4=<6xy{1 z@NMxEkryp{LS44%z$3lP^cX!9+2-;CTt3wM4(k*#C{aiIiLuB>jJj;KPhPzIC00bL zU3a#;aJld94lCW=`4&aAy8M7PY=HQ>O%$YEP4c4UY#CRxfgbE~(|uiI=YS8q;O9y6 zmIkXzR`}p7ti|PrM3a}WMnR=3NVnWdAAR>b9X@)DKL6=YsvmH%?I24wdq?Gh54_;# z$?_LvgjEdspdQlft#4CQ z`2Zyvy?*)N1Ftw|{_hakhG9WjS?Az@I@+IZ8JbWewR!XUK4&6346+d#~gsE0SY(LX8&JfY>Aj)RxGy96nwhs2rv zzW6pTnMpFkDSkT*a*6Dx|u@ds6ISVn0@^RmIsKZ5Y;bazbc;tTSq(kg(=481ODrPyNB6n z-$+U}(w$m6U6H$w17Bw+wDaFIe~GvNMYvnw31MpY0eQKT9l>SU``8k7w4)z!GZKMI z#_cEKq7k~i%nlK@6c-K?+R;B#5$?T#YpKD`t_4bAs^#E+@5QW$@OX3*`;(#{U^d-vY)&xEE>n5lYl&T?Amke9$Lam@{1K@O ze*LXqlKQHiv=gx+V^Cbb2?z@ISBQ*3amF;9UJ3SBg(N|710TLamQmYZ&Qjn2LuO<* zCZlB4n%@pc&7NNnY1}x+NWpHlq`OJEo|`aYN9<`RBUB+79g;>dgb6YlfN#kGL?lO_ z!6~M^7sOnbsUkKk<@Ysie&`G>ruxH&Mgy&8;i=A zB9OO!xR{AyODw>DS-q5YM{0ExFEAzt zm>RdS+ssW(-8|?xr0(?$vBVB*%(xDLtq3Hf0I5yFm<_g=W2`QWAax{1rWVH=I!VrP zs(rTFX@W#t$hXNvbgX`gK&^w_YD;CQ!B@e0QbLIWaKAXQe2-kkloo;{iF#6}z!4=W zi$giRj1{ zt;2w`VSCF#WE&*ev7jpsC=6175@(~nTE2;7M-L((0bH@yG}-TB$R~WXd?tA$s3|%y zA`9$sA(>F%J3ioz<-LJl*^o1|w84l>HBR`>3l9c8$5Xr@xCiIQ7{x$fMCzOk_-M=% z+{a_Q#;42`#KfUte@$NT77uaTz?b-fBe)1s5XE$yA79fm?KqM^VgLXD07*qoM6N<$ Ef<_J(9smFU diff --git a/docs/articles/Articles/Applications_files/leaflet-1.3.1/leaflet.css b/docs/articles/Articles/Applications_files/leaflet-1.3.1/leaflet.css deleted file mode 100644 index d1b47a1..0000000 --- a/docs/articles/Articles/Applications_files/leaflet-1.3.1/leaflet.css +++ /dev/null @@ -1,636 +0,0 @@ -/* required styles */ - -.leaflet-pane, -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-tile-container, -.leaflet-pane > svg, -.leaflet-pane > canvas, -.leaflet-zoom-box, -.leaflet-image-layer, -.leaflet-layer { - position: absolute; - left: 0; - top: 0; - } -.leaflet-container { - overflow: hidden; - } -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-user-drag: none; - } -/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ -.leaflet-safari .leaflet-tile { - image-rendering: -webkit-optimize-contrast; - } -/* hack that prevents hw layers "stretching" when loading new tiles */ -.leaflet-safari .leaflet-tile-container { - width: 1600px; - height: 1600px; - -webkit-transform-origin: 0 0; - } -.leaflet-marker-icon, -.leaflet-marker-shadow { - display: block; - } -/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ -/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ -.leaflet-container .leaflet-overlay-pane svg, -.leaflet-container .leaflet-marker-pane img, -.leaflet-container .leaflet-shadow-pane img, -.leaflet-container .leaflet-tile-pane img, -.leaflet-container img.leaflet-image-layer { - max-width: none !important; - max-height: none !important; - } - -.leaflet-container.leaflet-touch-zoom { - -ms-touch-action: pan-x pan-y; - touch-action: pan-x pan-y; - } -.leaflet-container.leaflet-touch-drag { - -ms-touch-action: pinch-zoom; - /* Fallback for FF which doesn't support pinch-zoom */ - touch-action: none; - touch-action: pinch-zoom; -} -.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { - -ms-touch-action: none; - touch-action: none; -} -.leaflet-container { - -webkit-tap-highlight-color: transparent; -} -.leaflet-container a { - -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); -} -.leaflet-tile { - filter: inherit; - visibility: hidden; - } -.leaflet-tile-loaded { - visibility: inherit; - } -.leaflet-zoom-box { - width: 0; - height: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - z-index: 800; - } -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-pane { z-index: 400; } - -.leaflet-tile-pane { z-index: 200; } -.leaflet-overlay-pane { z-index: 400; } -.leaflet-shadow-pane { z-index: 500; } -.leaflet-marker-pane { z-index: 600; } -.leaflet-tooltip-pane { z-index: 650; } -.leaflet-popup-pane { z-index: 700; } - -.leaflet-map-pane canvas { z-index: 100; } -.leaflet-map-pane svg { z-index: 200; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 800; - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-tile { - will-change: opacity; - } -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } -.leaflet-zoom-animated { - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - will-change: transform; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-interactive { - cursor: pointer; - } -.leaflet-grab { - cursor: -webkit-grab; - cursor: -moz-grab; - } -.leaflet-crosshair, -.leaflet-crosshair .leaflet-interactive { - cursor: crosshair; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-grab, -.leaflet-dragging .leaflet-grab .leaflet-interactive, -.leaflet-dragging .leaflet-marker-draggable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - } - -/* marker & overlays interactivity */ -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-image-layer, -.leaflet-pane > svg path, -.leaflet-tile-container { - pointer-events: none; - } - -.leaflet-marker-icon.leaflet-interactive, -.leaflet-image-layer.leaflet-interactive, -.leaflet-pane > svg path.leaflet-interactive { - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline: 0; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-container a.leaflet-active { - outline: 2px solid orange; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a, -.leaflet-bar a:hover { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } -.leaflet-touch .leaflet-bar a:first-child { - border-top-left-radius: 2px; - border-top-right-radius: 2px; - } -.leaflet-touch .leaflet-bar a:last-child { - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; - } - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } - -.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { - font-size: 22px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(images/layers.png); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(images/layers-2x.png); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-scrollbar { - overflow-y: scroll; - overflow-x: hidden; - padding-right: 5px; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - -/* Default icon URLs */ -.leaflet-default-icon-path { - background-image: url(images/marker-icon.png); - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.7); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover { - text-decoration: underline; - } -.leaflet-container .leaflet-control-attribution, -.leaflet-container .leaflet-control-scale { - font-size: 11px; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - font-size: 11px; - white-space: nowrap; - overflow: hidden; - -moz-box-sizing: border-box; - box-sizing: border-box; - - background: #fff; - background: rgba(255, 255, 255, 0.5); - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - margin-bottom: 20px; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 19px; - line-height: 1.4; - } -.leaflet-popup-content p { - margin: 18px 0; - } -.leaflet-popup-tip-container { - width: 40px; - height: 20px; - position: absolute; - left: 50%; - margin-left: -20px; - overflow: hidden; - pointer-events: none; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - color: #333; - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - padding: 4px 4px 0 0; - border: none; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - color: #c3c3c3; - text-decoration: none; - font-weight: bold; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; - } -.leaflet-popup-scrolled { - overflow: auto; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } -.leaflet-oldie .leaflet-popup-tip-container { - margin-top: -1px; - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } - - -/* Tooltip */ -/* Base styles for the element that has a tooltip */ -.leaflet-tooltip { - position: absolute; - padding: 6px; - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - color: #222; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.4); - } -.leaflet-tooltip.leaflet-clickable { - cursor: pointer; - pointer-events: auto; - } -.leaflet-tooltip-top:before, -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - position: absolute; - pointer-events: none; - border: 6px solid transparent; - background: transparent; - content: ""; - } - -/* Directions */ - -.leaflet-tooltip-bottom { - margin-top: 6px; -} -.leaflet-tooltip-top { - margin-top: -6px; -} -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-top:before { - left: 50%; - margin-left: -6px; - } -.leaflet-tooltip-top:before { - bottom: 0; - margin-bottom: -12px; - border-top-color: #fff; - } -.leaflet-tooltip-bottom:before { - top: 0; - margin-top: -12px; - margin-left: -6px; - border-bottom-color: #fff; - } -.leaflet-tooltip-left { - margin-left: -6px; -} -.leaflet-tooltip-right { - margin-left: 6px; -} -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - top: 50%; - margin-top: -6px; - } -.leaflet-tooltip-left:before { - right: 0; - margin-right: -12px; - border-left-color: #fff; - } -.leaflet-tooltip-right:before { - left: 0; - margin-left: -12px; - border-right-color: #fff; - } diff --git a/docs/articles/Articles/Applications_files/leaflet-1.3.1/leaflet.js b/docs/articles/Articles/Applications_files/leaflet-1.3.1/leaflet.js deleted file mode 100644 index 4eca8af..0000000 --- a/docs/articles/Articles/Applications_files/leaflet-1.3.1/leaflet.js +++ /dev/null @@ -1,5 +0,0 @@ -/* @preserve - * Leaflet 1.3.1+Detached: ba6f97fff8647e724e4dfe66d2ed7da11f908989.ba6f97f, a JS library for interactive maps. https://leafletjs.com - * (c) 2010-2017 Vladimir Agafonkin, (c) 2010-2011 CloudMade - */ -!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";function i(t){var i,e,n,o;for(e=1,n=arguments.length;e=0}function I(t,i,e,n){return"touchstart"===i?O(t,e,n):"touchmove"===i?W(t,e,n):"touchend"===i&&H(t,e,n),this}function B(t,i,e){var n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(Qi,n,!1):"touchmove"===i?t.removeEventListener(te,n,!1):"touchend"===i&&(t.removeEventListener(ie,n,!1),t.removeEventListener(ee,n,!1)),this}function O(t,i,n){var o=e(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(ne.indexOf(t.target.tagName)<0))return;$(t)}j(t,i)});t["_leaflet_touchstart"+n]=o,t.addEventListener(Qi,o,!1),se||(document.documentElement.addEventListener(Qi,R,!0),document.documentElement.addEventListener(te,D,!0),document.documentElement.addEventListener(ie,N,!0),document.documentElement.addEventListener(ee,N,!0),se=!0)}function R(t){oe[t.pointerId]=t,re++}function D(t){oe[t.pointerId]&&(oe[t.pointerId]=t)}function N(t){delete oe[t.pointerId],re--}function j(t,i){t.touches=[];for(var e in oe)t.touches.push(oe[e]);t.changedTouches=[t],i(t)}function W(t,i,e){var n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&j(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(te,n,!1)}function H(t,i,e){var n=function(t){j(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(ie,n,!1),t.addEventListener(ee,n,!1)}function F(t,i,e){function n(t){var i;if(Ui){if(!Pi||"mouse"===t.pointerType)return;i=re}else i=t.touches.length;if(!(i>1)){var e=Date.now(),n=e-(s||e);r=t.touches?t.touches[0]:t,a=n>0&&n<=h,s=e}}function o(t){if(a&&!r.cancelBubble){if(Ui){if(!Pi||"mouse"===t.pointerType)return;var e,n,o={};for(n in r)e=r[n],o[n]=e&&e.bind?e.bind(r):e;r=o}r.type="dblclick",i(r),s=null}}var s,r,a=!1,h=250;return t[ue+ae+e]=n,t[ue+he+e]=o,t[ue+"dblclick"+e]=i,t.addEventListener(ae,n,!1),t.addEventListener(he,o,!1),t.addEventListener("dblclick",i,!1),this}function U(t,i){var e=t[ue+ae+i],n=t[ue+he+i],o=t[ue+"dblclick"+i];return t.removeEventListener(ae,e,!1),t.removeEventListener(he,n,!1),Pi||t.removeEventListener("dblclick",o,!1),this}function V(t,i,e,n){if("object"==typeof i)for(var o in i)G(t,o,i[o],e);else for(var s=0,r=(i=u(i)).length;s100&&n<500||t.target._simulatedClick&&!t._simulated?Q(t):(pi=e,i(t))}function rt(t){return"string"==typeof t?document.getElementById(t):t}function at(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function ht(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ut(t){var i=t.parentNode;i&&i.removeChild(t)}function lt(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ct(t){var i=t.parentNode;i.lastChild!==t&&i.appendChild(t)}function _t(t){var i=t.parentNode;i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function dt(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=gt(t);return e.length>0&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function pt(t,i){if(void 0!==t.classList)for(var e=u(i),n=0,o=e.length;nh&&(s=r,h=a);h>e&&(i[s]=1,Et(t,i,e,n,s),Et(t,i,e,s,o))}function kt(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;ni&&(e.push(t[n]),o=n);return oi.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function Ot(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Rt(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return u>0&&((o=((t.x-s)*a+(t.y-r)*h)/u)>1?(s=e.x,r=e.y):o>0&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new x(s,r)}function Dt(t){return!ei(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function Nt(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),Dt(t)}function jt(t,i,e){var n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o0?Math.floor(t):Math.ceil(t)};x.prototype={clone:function(){return new x(this.x,this.y)},add:function(t){return this.clone()._add(w(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(w(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new x(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new x(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=li(this.x),this.y=li(this.y),this},distanceTo:function(t){var i=(t=w(t)).x-this.x,e=t.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(t=w(t)).x===this.x&&t.y===this.y},contains:function(t){return t=w(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+a(this.x)+", "+a(this.y)+")"}},P.prototype={extend:function(t){return t=w(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new x((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new x(this.min.x,this.max.y)},getTopRight:function(){return new x(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t="number"==typeof t[0]||t instanceof x?w(t):b(t))instanceof P?(i=t.min,e=t.max):i=e=t,i.x>=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng1,Yi=!!document.createElement("canvas").getContext,Xi=!(!document.createElementNS||!E("svg").createSVGRect),Ji=!Xi&&function(){try{var t=document.createElement("div");t.innerHTML='';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}(),$i=(Object.freeze||Object)({ie:wi,ielt9:Li,edge:Pi,webkit:bi,android:Ti,android23:zi,androidStock:Ci,opera:Zi,chrome:Si,gecko:Ei,safari:ki,phantom:Ai,opera12:Ii,win:Bi,ie3d:Oi,webkit3d:Ri,gecko3d:Di,any3d:Ni,mobile:ji,mobileWebkit:Wi,mobileWebkit3d:Hi,msPointer:Fi,pointer:Ui,touch:Vi,mobileOpera:qi,mobileGecko:Gi,retina:Ki,canvas:Yi,svg:Xi,vml:Ji}),Qi=Fi?"MSPointerDown":"pointerdown",te=Fi?"MSPointerMove":"pointermove",ie=Fi?"MSPointerUp":"pointerup",ee=Fi?"MSPointerCancel":"pointercancel",ne=["INPUT","SELECT","OPTION"],oe={},se=!1,re=0,ae=Fi?"MSPointerDown":Ui?"pointerdown":"touchstart",he=Fi?"MSPointerUp":Ui?"pointerup":"touchend",ue="_leaflet_",le="_leaflet_events",ce=Bi&&Si?2*window.devicePixelRatio:Ei?window.devicePixelRatio:1,_e={},de=(Object.freeze||Object)({on:V,off:q,stopPropagation:Y,disableScrollPropagation:X,disableClickPropagation:J,preventDefault:$,stop:Q,getMousePosition:tt,getWheelDelta:it,fakeStop:et,skipped:nt,isExternalTarget:ot,addListener:V,removeListener:q}),pe=xt(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),me=xt(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),fe="webkitTransition"===me||"OTransition"===me?me+"End":"transitionend";if("onselectstart"in document)mi=function(){V(window,"selectstart",$)},fi=function(){q(window,"selectstart",$)};else{var ge=xt(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);mi=function(){if(ge){var t=document.documentElement.style;gi=t[ge],t[ge]="none"}},fi=function(){ge&&(document.documentElement.style[ge]=gi,gi=void 0)}}var ve,ye,xe=(Object.freeze||Object)({TRANSFORM:pe,TRANSITION:me,TRANSITION_END:fe,get:rt,getStyle:at,create:ht,remove:ut,empty:lt,toFront:ct,toBack:_t,hasClass:dt,addClass:pt,removeClass:mt,setClass:ft,getClass:gt,setOpacity:vt,testProp:xt,setTransform:wt,setPosition:Lt,getPosition:Pt,disableTextSelection:mi,enableTextSelection:fi,disableImageDrag:bt,enableImageDrag:Tt,preventOutline:zt,restoreOutline:Mt}),we=ui.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pt(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=f(this._animate,this),this._step()},_step:function(t){var i=+new Date-this._startTime,e=1e3*this._duration;ithis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,z(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},invalidateSize:function(t){if(!this._loaded)return this;t=i({animate:!1,pan:!0},!0===t?{animate:!0}:t);var n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var o=this.getSize(),s=n.divideBy(2).round(),r=o.divideBy(2).round(),a=s.subtract(r);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(e(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:n,newSize:o})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=i({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var n=e(this._handleGeolocationResponse,this),o=e(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,o,t):navigator.geolocation.getCurrentPosition(n,o,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new M(t.coords.latitude,t.coords.longitude),e=i.toBounds(t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)"number"==typeof t.coords[r]&&(s[r]=t.coords[r]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ut(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)ut(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=ht("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new T(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=z(t),e=w(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=b(this.project(a,n),this.project(r,n)).getSize(),l=Ni?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new x(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new P(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(C(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(w(t),i)},layerPointToLatLng:function(t){var i=w(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(C(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(C(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(z(t))},distance:function(t,i){return this.options.crs.distance(C(t),C(i))},containerPointToLayerPoint:function(t){return w(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return w(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(w(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(C(t)))},mouseEventToContainerPoint:function(t){return tt(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=rt(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");V(i,"scroll",this._onScroll,this),this._containerId=n(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&Ni,pt(t,"leaflet-container"+(Vi?" leaflet-touch":"")+(Ki?" leaflet-retina":"")+(Li?" leaflet-oldie":"")+(ki?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=at(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Lt(this._mapPane,new x(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(pt(t.markerPane,"leaflet-zoom-hide"),pt(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){Lt(this._mapPane,new x(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return g(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Lt(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[n(this._container)]=this;var i=t?q:V;i(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),Ni&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){g(this._resizeRequest),this._resizeRequest=f(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,o=[],s="mouseout"===i||"mouseover"===i,r=t.target||t.srcElement,a=!1;r;){if((e=this._targets[n(r)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){a=!0;break}if(e&&e.listens(i,!0)){if(s&&!ot(r,t))break;if(o.push(e),s)break}if(r===this._container)break;r=r.parentNode}return o.length||a||s||!ot(r,t)||(o=[this]),o},_handleDOMEvent:function(t){if(this._loaded&&!nt(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i||zt(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,n){if("click"===t.type){var o=i({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,e))).length){var s=n[0];"contextmenu"===e&&s.listens(e,!0)&&$(t);var r={originalEvent:t};if("keypress"!==t.type){var a=s.getLatLng&&(!s._radius||s._radius<=10);r.containerPoint=a?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPoint=this.containerPointToLayerPoint(r.containerPoint),r.latlng=a?s.getLatLng():this.layerPointToLatLng(r.layerPoint)}for(var h=0;h0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=Ni?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){mt(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var t=this._proxy=ht("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var i=pe,e=this._proxy.style[i];wt(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",function(){var t=this.getCenter(),i=this.getZoom();wt(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ut(this._proxy),delete this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(f(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,n,o){this._mapPane&&(n&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,pt(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:o}),setTimeout(e(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mt(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),f(function(){this._moveEnd(!0)},this))}}),Pe=v.extend({options:{position:"topright"},initialize:function(t){l(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return pt(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this},remove:function(){return this._map?(ut(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),be=function(t){return new Pe(t)};Le.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){function t(t,o){var s=e+t+" "+e+o;i[t+o]=ht("div",s,n)}var i=this._controlCorners={},e="leaflet-",n=this._controlContainer=ht("div",e+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ut(this._controlCorners[t]);ut(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Te=Pe.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(n(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),o=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=o):i=this._createRadioElement("leaflet-base-layers",o),this._layerControlInputs.push(i),i.layerId=n(t.layer),V(i,"click",this._onInputClick,this);var s=document.createElement("span");s.innerHTML=" "+t.name;var r=document.createElement("div");return e.appendChild(r),r.appendChild(i),r.appendChild(s),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ze=Pe.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=ht("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=ht("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),J(s),V(s,"click",Q),V(s,"click",o,this),V(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";mt(this._zoomInButton,i),mt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&pt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&pt(this._zoomInButton,i)}});Le.mergeOptions({zoomControl:!0}),Le.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new ze,this.addControl(this.zoomControl))});var Me=Pe.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i=ht("div","leaflet-control-scale"),e=this.options;return this._addScales(e,"leaflet-control-scale-line",i),t.on(e.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=ht("div",i,e)),t.imperial&&(this._iScale=ht("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1,i*e}}),Ce=Pe.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){l(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=ht("div","leaflet-control-attribution"),J(this._container);for(var i in t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Le.mergeOptions({attributionControl:!0}),Le.addInitHook(function(){this.options.attributionControl&&(new Ce).addTo(this)});Pe.Layers=Te,Pe.Zoom=ze,Pe.Scale=Me,Pe.Attribution=Ce,be.layers=function(t,i,e){return new Te(t,i,e)},be.zoom=function(t){return new ze(t)},be.scale=function(t){return new Me(t)},be.attribution=function(t){return new Ce(t)};var Ze=v.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Ze.addTo=function(t,i){return t.addHandler(i,this),this};var Se,Ee={Events:hi},ke=Vi?"touchstart mousedown":"mousedown",Ae={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},Ie={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},Be=ui.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){l(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(V(this._dragStartTarget,ke,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Be._dragging===this&&this.finishDrag(),q(this._dragStartTarget,ke,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!dt(this._element,"leaflet-zoom-anim")&&!(Be._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(Be._dragging=this,this._preventOutline&&zt(this._element),bt(),mi(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t;this._startPoint=new x(i.clientX,i.clientY),V(document,Ie[t.type],this._onMove,this),V(document,Ae[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new x(i.clientX,i.clientY).subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)1e-7;h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return new M(a*e,t.x*e/n)}},je=(Object.freeze||Object)({LonLat:De,Mercator:Ne,SphericalMercator:di}),We=i({},_i,{code:"EPSG:3395",projection:Ne,transformation:function(){var t=.5/(Math.PI*Ne.R);return S(t,.5,-t,.5)}()}),He=i({},_i,{code:"EPSG:4326",projection:De,transformation:S(1/180,1,-1/180,.5)}),Fe=i({},ci,{projection:De,transformation:S(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});ci.Earth=_i,ci.EPSG3395=We,ci.EPSG3857=vi,ci.EPSG900913=yi,ci.EPSG4326=He,ci.Simple=Fe;var Ue=ui.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[n(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[n(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});Le.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=n(t);return this._layers[i]?this:(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var i=n(t);return this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&n(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?ei(t)?t:[t]:[]).length;ithis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()i)return r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=C(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new T,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return Dt(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=Dt(t),n=0,o=t.length;n=2&&i[0]instanceof M&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){tn.prototype._setLatLngs.call(this,t),Dt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Dt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new x(i,i);if(t=new P(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;ot.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||tn.prototype._containsPoint.call(this,t,!0)}}),nn=qe.extend({initialize:function(t,i){l(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=ei(t)?t:t.features;if(o){for(i=0,e=o.length;i0?o:[i.src]}else{ei(this._url)||(this._url=[this._url]),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop;for(var a=0;ao?(i.height=o+"px",pt(t,"leaflet-popup-scrolled")):mt(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Lt(this._container,i.add(e))},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var t=this._map,i=parseInt(at(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new x(this._containerLeft,-e-this._containerBottom);o._add(Pt(this._container));var s=t.layerPointToContainerPoint(o),r=w(this.options.autoPanPadding),a=w(this.options.autoPanPaddingTopLeft||r),h=w(this.options.autoPanPaddingBottomRight||r),u=t.getSize(),l=0,c=0;s.x+n+h.x>u.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),Q(t)},_getAnchor:function(){return w(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Le.mergeOptions({closePopupOnClick:!0}),Le.include({openPopup:function(t,i,e){return t instanceof un||(t=new un(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Ue.include({bindPopup:function(t,i){return t instanceof un?(l(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new un(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){if(t instanceof Ue||(i=t,t=this),t instanceof qe)for(var e in this._layers){t=this._layers[e];break}return i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup._source=t,this._popup.update(),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Q(t),i instanceof Je?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var ln=hn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){hn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=hn.prototype.getEvents.call(this);return Vi&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ht("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=w(this.options.offset),u=this._getAnchor();"top"===s?t=t.add(w(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t=t.subtract(w(r/2-h.x,-h.y,!0)):"center"===s?t=t.subtract(w(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.xthis.options.maxZoom||en&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new x(o,s);r.z=e+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1this.options.maxZoom||void 0!==this.options.minZoom&&o1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new x(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort(function(t,i){return t.distanceTo(s)-i.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(_=0;_e.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return z(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new T(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new x(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(Ci||i.el.setAttribute("src",ni),ut(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pt(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=r,t.onmousemove=r,Li&&this.options.opacity<1&&vt(t,this.options.opacity),Ti&&!zi&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var n=this._getTilePos(t),o=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),e(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&f(e(this._tileReady,this,t,null,s)),Lt(s,n),this._tiles[o]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,n){if(this._map){i&&this.fire("tileerror",{error:i,tile:n,coords:t});var o=this._tileCoordsToKey(t);(n=this._tiles[o])&&(n.loaded=+new Date,this._map._fadeAnimated?(vt(n.el,0),g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this)):(n.active=!0,this._pruneTiles()),i||(pt(n.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),Li||!this._map._fadeAnimated?f(this._pruneTiles,this):setTimeout(e(this._pruneTiles,this),250)))}},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new x(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new P(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),dn=_n.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=l(this,i)).detectRetina&&Ki&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),Ti||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},createTile:function(t,i){var n=document.createElement("img");return V(n,"load",e(this._tileOnLoad,this,i,n)),V(n,"error",e(this._tileOnError,this,i,n)),this.options.crossOrigin&&(n.crossOrigin=""),n.alt="",n.setAttribute("role","presentation"),n.src=this.getTileUrl(t),n},getTileUrl:function(t){var e={r:Ki?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=n),e["-y"]=n}return _(this._url,i(e,this.options))},_tileOnLoad:function(t,i){Li?setTimeout(e(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom,e=this.options.zoomReverse,n=this.options.zoomOffset;return e&&(t=i-t),t+n},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=r,i.onerror=r,i.complete||(i.src=ni,ut(i),delete this._tiles[t]))}}),pn=dn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var n=i({},this.defaultWmsParams);for(var o in e)o in this.options||(n[o]=e[o]);var s=(e=l(this,e)).detectRetina&&Ki?2:1,r=this.getTileSize();n.width=r.x*s,n.height=r.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=b(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===He?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=L.TileLayer.prototype.getTileUrl.call(this,t);return a+c(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,e){return i(this.wmsParams,t),e||this.redraw(),this}});dn.WMS=pn,Yt.wms=function(t,i){return new pn(t,i)};var mn=Ue.extend({options:{padding:.1,tolerance:0},initialize:function(t){l(this,t),n(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&pt(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Pt(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),r=this._map.project(t,i).subtract(s),a=o.multiplyBy(-e).add(n).add(o).subtract(r);Ni?wt(this._container,a,e):Lt(this._container,a)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new P(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),fn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){mn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");V(t,"mousemove",o(this._onMouseMove,32,this),this),V(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),V(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){delete this._ctx,ut(this._container),q(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){this._redrawBounds=null;for(var t in this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers={},mn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=Ki?2:1;Lt(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",Ki&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){mn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[n(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[L.stamp(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(t.options.dashArray){var i,e=t.options.dashArray.split(","),n=[];for(i=0;i')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),vn={_initContainer:function(){this._container=ht("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(mn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=gn("shape");pt(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=gn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ut(i),t.removeInteractiveTarget(i),delete this._layers[n(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=gn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=ei(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=gn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){ct(t._container)},_bringToBack:function(t){_t(t._container)}},yn=Ji?gn:E,xn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=yn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=yn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ut(this._container),q(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){mn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),Lt(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=yn("path");t.options.className&&pt(i,t.options.className),t.options.interactive&&pt(i,"leaflet-interactive"),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ut(t._path),t.removeInteractiveTarget(t._path),delete this._layers[n(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,k(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){ct(t._path)},_bringToBack:function(t){_t(t._path)}});Ji&&xn.include(vn),Le.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this.options.preferCanvas&&Xt()||Jt()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=xn&&Jt({pane:t})||fn&&Xt({pane:t}),this._paneRenderers[t]=i),i}});var wn=en.extend({initialize:function(t,i){en.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=z(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});xn.create=yn,xn.pointsToPath=k,nn.geometryToLayer=Wt,nn.coordsToLatLng=Ht,nn.coordsToLatLngs=Ft,nn.latLngToCoords=Ut,nn.latLngsToCoords=Vt,nn.getFeature=qt,nn.asFeature=Gt,Le.mergeOptions({boxZoom:!0});var Ln=Ze.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){V(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){q(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ut(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),mi(),bt(),this._startPoint=this._map.mouseEventToContainerPoint(t),V(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ht("div","leaflet-zoom-box",this._container),pt(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new P(this._point,this._startPoint),e=i.getSize();Lt(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ut(this._box),mt(this._container,"leaflet-crosshair")),fi(),Tt(),q(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(e(this._resetState,this),0);var i=new T(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Le.addInitHook("addHandler","boxZoom",Ln),Le.mergeOptions({doubleClickZoom:!0});var Pn=Ze.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Le.addInitHook("addHandler","doubleClickZoom",Pn),Le.mergeOptions({dragging:!0,inertia:!zi,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var bn=Ze.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new Be(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pt(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){mt(this._map._container,"leaflet-grab"),mt(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=z(this._map.options.maxBounds);this._offsetLimit=b(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.xi.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)0?s:-s))-i;this._delta=0,this._startTime=null,r&&("center"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});Le.addInitHook("addHandler","scrollWheelZoom",zn),Le.mergeOptions({tap:!0,tapTolerance:15});var Mn=Ze.extend({addHooks:function(){V(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){q(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if($(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new x(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&pt(n,"leaflet-active"),this._holdTimeout=setTimeout(e(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),V(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),q(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&mt(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new x(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});Vi&&!Ui&&Le.addInitHook("addHandler","tap",Mn),Le.mergeOptions({touchZoom:Vi&&!zi,bounceAtZoomLimits:!0});var Cn=Ze.extend({addHooks:function(){pt(this._map._container,"leaflet-touch-zoom"),V(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){mt(this._map._container,"leaflet-touch-zoom"),q(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),V(document,"touchmove",this._onTouchMove,this),V(document,"touchend",this._onTouchEnd,this),$(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,n=i.mouseEventToContainerPoint(t.touches[0]),o=i.mouseEventToContainerPoint(t.touches[1]),s=n.distanceTo(o)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoomi.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var r=n._add(o)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),g(this._animRequest);var a=e(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=f(a,this,!0),$(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,g(this._animRequest),q(document,"touchmove",this._onTouchMove),q(document,"touchend",this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});Le.addInitHook("addHandler","touchZoom",Cn),Le.BoxZoom=Ln,Le.DoubleClickZoom=Pn,Le.Drag=bn,Le.Keyboard=Tn,Le.ScrollWheelZoom=zn,Le.Tap=Mn,Le.TouchZoom=Cn;var Zn=window.L;window.L=t,Object.freeze=$t,t.version="1.3.1+HEAD.ba6f97f",t.noConflict=function(){return window.L=Zn,this},t.Control=Pe,t.control=be,t.Browser=$i,t.Evented=ui,t.Mixin=Ee,t.Util=ai,t.Class=v,t.Handler=Ze,t.extend=i,t.bind=e,t.stamp=n,t.setOptions=l,t.DomEvent=de,t.DomUtil=xe,t.PosAnimation=we,t.Draggable=Be,t.LineUtil=Oe,t.PolyUtil=Re,t.Point=x,t.point=w,t.Bounds=P,t.bounds=b,t.Transformation=Z,t.transformation=S,t.Projection=je,t.LatLng=M,t.latLng=C,t.LatLngBounds=T,t.latLngBounds=z,t.CRS=ci,t.GeoJSON=nn,t.geoJSON=Kt,t.geoJson=sn,t.Layer=Ue,t.LayerGroup=Ve,t.layerGroup=function(t,i){return new Ve(t,i)},t.FeatureGroup=qe,t.featureGroup=function(t){return new qe(t)},t.ImageOverlay=rn,t.imageOverlay=function(t,i,e){return new rn(t,i,e)},t.VideoOverlay=an,t.videoOverlay=function(t,i,e){return new an(t,i,e)},t.DivOverlay=hn,t.Popup=un,t.popup=function(t,i){return new un(t,i)},t.Tooltip=ln,t.tooltip=function(t,i){return new ln(t,i)},t.Icon=Ge,t.icon=function(t){return new Ge(t)},t.DivIcon=cn,t.divIcon=function(t){return new cn(t)},t.Marker=Xe,t.marker=function(t,i){return new Xe(t,i)},t.TileLayer=dn,t.tileLayer=Yt,t.GridLayer=_n,t.gridLayer=function(t){return new _n(t)},t.SVG=xn,t.svg=Jt,t.Renderer=mn,t.Canvas=fn,t.canvas=Xt,t.Path=Je,t.CircleMarker=$e,t.circleMarker=function(t,i){return new $e(t,i)},t.Circle=Qe,t.circle=function(t,i,e){return new Qe(t,i,e)},t.Polyline=tn,t.polyline=function(t,i){return new tn(t,i)},t.Polygon=en,t.polygon=function(t,i){return new en(t,i)},t.Rectangle=wn,t.rectangle=function(t,i){return new wn(t,i)},t.Map=Le,t.map=function(t,i){return new Le(t,i)}}); \ No newline at end of file diff --git a/docs/articles/Articles/Applications_files/leaflet-binding-2.2.3/leaflet.js b/docs/articles/Articles/Applications_files/leaflet-binding-2.2.3/leaflet.js deleted file mode 100644 index 79dbe71..0000000 --- a/docs/articles/Articles/Applications_files/leaflet-binding-2.2.3/leaflet.js +++ /dev/null @@ -1,2787 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); - var colIndex = -1; - - if (typeof col === "undefined") { - var rowData = {}; - this.colnames.forEach(function (name, i) { - rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; - }); - return rowData; - } else if (typeof col === "string") { - colIndex = this._colIndex(col); - } else if (typeof col === "number") { - colIndex = col; - } - - if (colIndex < 0 || colIndex > this.columns.length) { - if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); - } - - return this.columns[colIndex][row % this.columns[colIndex].length]; - } - }, { - key: "nrow", - value: function nrow() { - return this.effectiveLength; - } - }]); - - return DataFrame; -}(); - -exports["default"] = DataFrame; - - -},{"./util":17}],5:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// In RMarkdown's self-contained mode, we don't have a way to carry around the -// images that Leaflet needs but doesn't load into the page. Instead, we'll use -// the unpkg CDN. -if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { - _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; -} - - -},{"./global/leaflet":10}],6:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -// add texxtsize, textOnly, and style -_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; -_leaflet2["default"].Tooltip.prototype.options.textOnly = false; -_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. - -var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; - -_leaflet2["default"].Tooltip.prototype._initLayout = function () { - initLayoutOriginal.call(this); - this._container.style.fontSize = this.options.textsize; - - if (this.options.textOnly) { - _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); - } - - if (this.options.style) { - for (var property in this.options.style) { - this._container.style[property] = this.options.style[property]; - } - } -}; - - -},{"./global/leaflet":10}],7:[function(require,module,exports){ -"use strict"; - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var protocolRegex = /^\/\//; - -var upgrade_protocol = function upgrade_protocol(urlTemplate) { - if (protocolRegex.test(urlTemplate)) { - if (window.location.protocol === "file:") { - // if in a local file, support http - // http should auto upgrade if necessary - urlTemplate = "http:" + urlTemplate; - } - } - - return urlTemplate; -}; - -var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; - -_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerInitialize.call(this, urlTemplate, options); -}; - -var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; - -_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { - urlTemplate = upgrade_protocol(urlTemplate); - originalLTileLayerWMSInitialize.call(this, urlTemplate, options); -}; - - -},{"./global/leaflet":10}],8:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.HTMLWidgets; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],9:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.jQuery; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],11:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.L.Proj; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = global.Shiny; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],13:[function(require,module,exports){ -"use strict"; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _controlStore = require("./control-store"); - -var _controlStore2 = _interopRequireDefault(_controlStore); - -var _layerManager = require("./layer-manager"); - -var _layerManager2 = _interopRequireDefault(_layerManager); - -var _methods = require("./methods"); - -var _methods2 = _interopRequireDefault(_methods); - -require("./fixup-default-icon"); - -require("./fixup-default-tooltip"); - -require("./fixup-url-protocol"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -window.LeafletWidget = {}; -window.LeafletWidget.utils = {}; - -var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); - -window.LeafletWidget.DataFrame = _dataframe2["default"]; -window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; -window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. - -function updateBounds(map) { - var id = map.getContainer().id; - var bounds = map.getBounds(); - - _shiny2["default"].onInputChange(id + "_bounds", { - north: bounds.getNorthEast().lat, - east: bounds.getNorthEast().lng, - south: bounds.getSouthWest().lat, - west: bounds.getSouthWest().lng - }); - - _shiny2["default"].onInputChange(id + "_center", { - lng: map.getCenter().lng, - lat: map.getCenter().lat - }); - - _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); -} - -function preventUnintendedZoomOnScroll(map) { - // Prevent unwanted scroll capturing. Similar in purpose to - // https://github.com/CliffCloud/Leaflet.Sleep but with a - // different set of heuristics. - // The basic idea is that when a mousewheel/DOMMouseScroll - // event is seen, we disable scroll wheel zooming until the - // user moves their mouse cursor or clicks on the map. This - // is slightly trickier than just listening for mousemove, - // because mousemove is fired when the page is scrolled, - // even if the user did not physically move the mouse. We - // handle this by examining the mousemove event's screenX - // and screenY properties; if they change, we know it's a - // "true" move. - // lastScreen can never be null, but its x and y can. - var lastScreen = { - x: null, - y: null - }; - (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { - // Disable zooming (until the mouse moves or click) - map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. - - lastScreen = { - x: e.originalEvent.screenX, - y: e.originalEvent.screenY - }; - }); - (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { - // Did the mouse really move? - if (map.options.scrollWheelZoom) { - if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { - // It really moved. Enable zooming. - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - } - }); - (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { - // Clicking always enables zooming. - if (map.options.scrollWheelZoom) { - map.scrollWheelZoom.enable(); - lastScreen = { - x: null, - y: null - }; - } - }); -} - -_htmlwidgets2["default"].widget({ - name: "leaflet", - type: "output", - factory: function factory(el, width, height) { - var map = null; - return { - // we need to store our map in our returned object. - getMap: function getMap() { - return map; - }, - renderValue: function renderValue(data) { - // Create an appropriate CRS Object if specified - if (data && data.options && data.options.crs) { - data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); - } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 - - - if (map) { - map.remove(); - - map = function () { - return; - }(); // undefine map - - } - - if (data.options.mapFactory && typeof data.options.mapFactory === "function") { - map = data.options.mapFactory(el, data.options); - } else { - map = _leaflet2["default"].map(el, data.options); - } - - preventUnintendedZoomOnScroll(map); // Store some state in the map object - - map.leafletr = { - // Has the map ever rendered successfully? - hasRendered: false, - // Data to be rendered when resize is called with area != 0 - pendingRenderData: null - }; // Check if the map is rendered statically (no output binding) - - if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { - map.id = el.id; // Store the map on the element so we can find it later by ID - - (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app - - map.on("click", function (e) { - _shiny2["default"].onInputChange(map.id + "_click", { - lat: e.latlng.lat, - lng: e.latlng.lng, - ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed - - }); - }); - var groupTimerId = null; - map.on("moveend", function (e) { - updateBounds(e.target); - }).on("layeradd layerremove", function (e) { - // If the layer that's coming or going is a group we created, tell - // the server. - if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { - // But to avoid chattiness, coalesce events - if (groupTimerId) { - clearTimeout(groupTimerId); - groupTimerId = null; - } - - groupTimerId = setTimeout(function () { - groupTimerId = null; - - _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); - }, 100); - } - }); - } - - this.doRenderValue(data, map); - }, - doRenderValue: function doRenderValue(data, map) { - // Leaflet does not behave well when you set up a bunch of layers when - // the map is not visible (width/height == 0). Popups get misaligned - // relative to their owning markers, and the fitBounds calculations - // are off. Therefore we wait until the map is actually showing to - // render the value (we rely on the resize() callback being invoked - // at the appropriate time). - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - map.leafletr.pendingRenderData = data; - return; - } - - map.leafletr.pendingRenderData = null; // Merge data options into defaults - - var options = _jquery2["default"].extend({ - zoomToLimits: "always" - }, data.options); - - if (!map.layerManager) { - map.controls = new _controlStore2["default"](map); - map.layerManager = new _layerManager2["default"](map); - } else { - map.controls.clear(); - map.layerManager.clear(); - } - - var explicitView = false; - - if (data.setView) { - explicitView = true; - map.setView.apply(map, data.setView); - } - - if (data.fitBounds) { - explicitView = true; - methods.fitBounds.apply(map, data.fitBounds); - } - - if (data.flyTo) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - map.flyTo.apply(map, data.flyTo); - } - - if (data.flyToBounds) { - if (!explicitView && !map.leafletr.hasRendered) { - // must be done to give a initial starting point - map.fitWorld(); - } - - explicitView = true; - methods.flyToBounds.apply(map, data.flyToBounds); - } - - if (data.options.center) { - explicitView = true; - } // Returns true if the zoomToLimits option says that the map should be - // zoomed to map elements. - - - function needsZoom() { - return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; - } - - if (!explicitView && needsZoom() && !map.getZoom()) { - if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { - // Use the natural limits of what's being drawn on the map - // If the size of the bounding box is 0, leaflet gets all weird - var pad = 0.006; - - if (data.limits.lat[0] === data.limits.lat[1]) { - data.limits.lat[0] = data.limits.lat[0] - pad; - data.limits.lat[1] = data.limits.lat[1] + pad; - } - - if (data.limits.lng[0] === data.limits.lng[1]) { - data.limits.lng[0] = data.limits.lng[0] - pad; - data.limits.lng[1] = data.limits.lng[1] + pad; - } - - map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); - } else { - map.fitWorld(); - } - } - - for (var i = 0; data.calls && i < data.calls.length; i++) { - var call = data.calls[i]; - if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); - } - - map.leafletr.hasRendered = true; - - if (_htmlwidgets2["default"].shinyMode) { - setTimeout(function () { - updateBounds(map); - }, 1); - } - }, - resize: function resize(width, height) { - if (map) { - map.invalidateSize(); - - if (map.leafletr.pendingRenderData) { - this.doRenderValue(map.leafletr.pendingRenderData, map); - } - } - } - }; - } -}); - -if (_htmlwidgets2["default"].shinyMode) { - _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { - var id = data.id; - var el = document.getElementById(id); - var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; - - if (!map) { - (0, _util.log)("Couldn't find map with id " + id); - return; - } // If the map has not rendered, stash the proposed `leafletProxy()` calls - // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. - // This is necessary if the map has not been rendered. - // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. - - - if (!map.leafletr.hasRendered) { - map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); - return; - } - - for (var i = 0; i < data.calls.length; i++) { - var call = data.calls[i]; - var args = call.args; - - for (var _i = 0; _i < call.evals.length; _i++) { - window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); - } - - if (call.dependencies) { - _shiny2["default"].renderDependencies(call.dependencies); - } - - if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); - } - }); -} - - -},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = undefined; - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _util = require("./util"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var LayerManager = /*#__PURE__*/function () { - function LayerManager(map) { - _classCallCheck(this, LayerManager); - - this._map = map; // BEGIN layer indices - // {: {: layer}} - - this._byGroup = {}; // {: {: layer}} - - this._byCategory = {}; // {: layer} - - this._byLayerId = {}; // {: { - // "group": , - // "layerId": , - // "category": , - // "container": - // } - // } - - this._byStamp = {}; // {: {: [, , ...], ...}} - - this._byCrosstalkGroup = {}; // END layer indices - // {: L.layerGroup} - - this._categoryContainers = {}; // {: L.layerGroup} - - this._groupContainers = {}; - } - - _createClass(LayerManager, [{ - key: "addLayer", - value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { - var _this = this; - - // Was a group provided? - var hasId = typeof layerId === "string"; - var grouped = typeof group === "string"; - var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. - // We may overwrite this let before using it (i.e. if a group is assigned). - // This one liner creates the _categoryContainers[category] entry if it - // doesn't already exist. - - var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); - - var oldLayer = null; - - if (hasId) { - // First, remove any layer with the same category and layerId - var prefixedLayerId = this._layerIdKey(category, layerId); - - oldLayer = this._byLayerId[prefixedLayerId]; - - if (oldLayer) { - this._removeLayer(oldLayer); - } // Update layerId index - - - this._byLayerId[prefixedLayerId] = layer; - } // Update group index - - - if (grouped) { - this._byGroup[group] = this._byGroup[group] || {}; - this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer - // group; instead, use the group's layer group. - // This one liner creates the _groupContainers[group] entry if it doesn't - // already exist. - - container = this.getLayerGroup(group, true); - } // Update category index - - - this._byCategory[category] = this._byCategory[category] || {}; - this._byCategory[category][stamp] = layer; // Update stamp index - - var layerInfo = this._byStamp[stamp] = { - layer: layer, - group: group, - ctGroup: ctGroup, - ctKey: ctKey, - layerId: layerId, - category: category, - container: container, - hidden: false - }; // Update crosstalk group index - - if (ctGroup) { - if (layer.setStyle) { - // Need to save this info so we know what to set opacity to later - layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; - layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; - } - - var ctg = this._byCrosstalkGroup[ctGroup]; - - if (!ctg) { - ctg = this._byCrosstalkGroup[ctGroup] = {}; - var crosstalk = global.crosstalk; - - var handleFilter = function handleFilter(e) { - if (!e.value) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo = _this._byStamp[ctg[key]]; - - _this._setVisibility(_layerInfo, true); - } - } else { - var selectedKeys = {}; - - for (var _i = 0; _i < e.value.length; _i++) { - selectedKeys[e.value[_i]] = true; - } - - var _groupKeys = Object.keys(ctg); - - for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { - var _key = _groupKeys[_i2]; - var _layerInfo2 = _this._byStamp[ctg[_key]]; - - _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); - } - } - }; - - var filterHandle = new crosstalk.FilterHandle(ctGroup); - filterHandle.on("change", handleFilter); - - var handleSelection = function handleSelection(e) { - if (!e.value || !e.value.length) { - var groupKeys = Object.keys(ctg); - - for (var i = 0; i < groupKeys.length; i++) { - var key = groupKeys[i]; - var _layerInfo3 = _this._byStamp[ctg[key]]; - - _this._setOpacity(_layerInfo3, 1.0); - } - } else { - var selectedKeys = {}; - - for (var _i3 = 0; _i3 < e.value.length; _i3++) { - selectedKeys[e.value[_i3]] = true; - } - - var _groupKeys2 = Object.keys(ctg); - - for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { - var _key2 = _groupKeys2[_i4]; - var _layerInfo4 = _this._byStamp[ctg[_key2]]; - - _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); - } - } - }; - - var selHandle = new crosstalk.SelectionHandle(ctGroup); - selHandle.on("change", handleSelection); - setTimeout(function () { - handleFilter({ - value: filterHandle.filteredKeys - }); - handleSelection({ - value: selHandle.value - }); - }, 100); - } - - if (!ctg[ctKey]) ctg[ctKey] = []; - ctg[ctKey].push(stamp); - } // Add to container - - - if (!layerInfo.hidden) container.addLayer(layer); - return oldLayer; - } - }, { - key: "brush", - value: function brush(bounds, extraInfo) { - var _this2 = this; - - /* eslint-disable no-console */ - // For each Crosstalk group... - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - var ctg = _this2._byCrosstalkGroup[ctGroupName]; - var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple - // layers)... - - Object.keys(ctg).forEach(function (ctKey) { - // ...and for each layer... - ctg[ctKey].forEach(function (stamp) { - var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... - - if (layerInfo.layer.getLatLng) { - // ... and it's inside the selection bounds... - // TODO: Use pixel containment, not lat/lng containment - if (bounds.contains(layerInfo.layer.getLatLng())) { - // ...add the key to the selection. - selection.push(ctKey); - } - } - }); - }); - new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); - }); - } - }, { - key: "unbrush", - value: function unbrush(extraInfo) { - Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { - new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); - }); - } - }, { - key: "_setVisibility", - value: function _setVisibility(layerInfo, visible) { - if (layerInfo.hidden ^ visible) { - return; - } else if (visible) { - layerInfo.container.addLayer(layerInfo.layer); - layerInfo.hidden = false; - } else { - layerInfo.container.removeLayer(layerInfo.layer); - layerInfo.hidden = true; - } - } - }, { - key: "_setOpacity", - value: function _setOpacity(layerInfo, opacity) { - if (layerInfo.layer.setOpacity) { - layerInfo.layer.setOpacity(opacity); - } else if (layerInfo.layer.setStyle) { - layerInfo.layer.setStyle({ - opacity: opacity * layerInfo.layer.options.origOpacity, - fillOpacity: opacity * layerInfo.layer.options.origFillOpacity - }); - } - } - }, { - key: "getLayer", - value: function getLayer(category, layerId) { - return this._byLayerId[this._layerIdKey(category, layerId)]; - } - }, { - key: "removeLayer", - value: function removeLayer(category, layerIds) { - var _this3 = this; - - // Find layer info - _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { - var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; - - if (layer) { - _this3._removeLayer(layer); - } - }); - } - }, { - key: "clearLayers", - value: function clearLayers(category) { - var _this4 = this; - - // Find all layers in _byCategory[category] - var catTable = this._byCategory[category]; - - if (!catTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(catTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this4._removeLayer(stamp); - }); - } - }, { - key: "getLayerGroup", - value: function getLayerGroup(group, ensureExists) { - var g = this._groupContainers[group]; - - if (ensureExists && !g) { - this._byGroup[group] = this._byGroup[group] || {}; - g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); - g.groupname = group; - g.addTo(this._map); - } - - return g; - } - }, { - key: "getGroupNameFromLayerGroup", - value: function getGroupNameFromLayerGroup(layerGroup) { - return layerGroup.groupname; - } - }, { - key: "getVisibleGroups", - value: function getVisibleGroups() { - var _this5 = this; - - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - if (_this5._map.hasLayer(v)) { - result.push(k); - } - }); - - return result; - } - }, { - key: "getAllGroupNames", - value: function getAllGroupNames() { - var result = []; - - _jquery2["default"].each(this._groupContainers, function (k, v) { - result.push(k); - }); - - return result; - } - }, { - key: "clearGroup", - value: function clearGroup(group) { - var _this6 = this; - - // Find all layers in _byGroup[group] - var groupTable = this._byGroup[group]; - - if (!groupTable) { - return false; - } // Remove all layers. Make copy of keys to avoid mutating the collection - // behind the iterator you're accessing. - - - var stamps = []; - - _jquery2["default"].each(groupTable, function (k, v) { - stamps.push(k); - }); - - _jquery2["default"].each(stamps, function (i, stamp) { - _this6._removeLayer(stamp); - }); - } - }, { - key: "clear", - value: function clear() { - function clearLayerGroup(key, layerGroup) { - layerGroup.clearLayers(); - } // Clear all indices and layerGroups - - - this._byGroup = {}; - this._byCategory = {}; - this._byLayerId = {}; - this._byStamp = {}; - this._byCrosstalkGroup = {}; - - _jquery2["default"].each(this._categoryContainers, clearLayerGroup); - - this._categoryContainers = {}; - - _jquery2["default"].each(this._groupContainers, clearLayerGroup); - - this._groupContainers = {}; - } - }, { - key: "_removeLayer", - value: function _removeLayer(layer) { - var stamp; - - if (typeof layer === "string") { - stamp = layer; - } else { - stamp = _leaflet2["default"].Util.stamp(layer); - } - - var layerInfo = this._byStamp[stamp]; - - if (!layerInfo) { - return false; - } - - layerInfo.container.removeLayer(stamp); - - if (typeof layerInfo.group === "string") { - delete this._byGroup[layerInfo.group][stamp]; - } - - if (typeof layerInfo.layerId === "string") { - delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; - } - - delete this._byCategory[layerInfo.category][stamp]; - delete this._byStamp[stamp]; - - if (layerInfo.ctGroup) { - var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; - var layersForKey = ctGroup[layerInfo.ctKey]; - var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; - - if (idx >= 0) { - if (layersForKey.length === 1) { - delete ctGroup[layerInfo.ctKey]; - } else { - layersForKey.splice(idx, 1); - } - } - } - } - }, { - key: "_layerIdKey", - value: function _layerIdKey(category, layerId) { - return category + "\n" + layerId; - } - }]); - - return LayerManager; -}(); - -exports["default"] = LayerManager; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ -(function (global){(function (){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _jquery = require("./global/jquery"); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _leaflet = require("./global/leaflet"); - -var _leaflet2 = _interopRequireDefault(_leaflet); - -var _shiny = require("./global/shiny"); - -var _shiny2 = _interopRequireDefault(_shiny); - -var _htmlwidgets = require("./global/htmlwidgets"); - -var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); - -var _util = require("./util"); - -var _crs_utils = require("./crs_utils"); - -var _dataframe = require("./dataframe"); - -var _dataframe2 = _interopRequireDefault(_dataframe); - -var _clusterLayerStore = require("./cluster-layer-store"); - -var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); - -var _mipmapper = require("./mipmapper"); - -var _mipmapper2 = _interopRequireDefault(_mipmapper); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var methods = {}; -exports["default"] = methods; - -function mouseHandler(mapId, layerId, group, eventName, extraInfo) { - return function (e) { - if (!_htmlwidgets2["default"].shinyMode) return; - var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; - - if (latLng) { - // retrieve only lat, lon values to remove prototype - // and extra parameters added by 3rd party modules - // these objects are for json serialization, not javascript - var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape - - - latLng = { - lat: latLngVal.lat, - lng: latLngVal.lng - }; - } - - var eventInfo = _jquery2["default"].extend({ - id: layerId, - ".nonce": Math.random() // force reactivity - - }, group !== null ? { - group: group - } : null, latLng, extraInfo); - - _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); - }; -} - -methods.mouseHandler = mouseHandler; - -methods.clearGroup = function (group) { - var _this = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { - _this.layerManager.clearGroup(v); - }); -}; - -methods.setView = function (center, zoom, options) { - this.setView(center, zoom, options); -}; - -methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { - this.fitBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.flyTo = function (center, zoom, options) { - this.flyTo(center, zoom, options); -}; - -methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { - this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); -}; - -methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { - this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); -}; - -methods.addPopups = function (lat, lng, popup, layerId, group, options) { - var _this2 = this; - - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); - - var _loop = function _loop(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); - - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(popup, "popup", thisId, thisGroup); - }).call(_this2); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop(i); - } -}; - -methods.removePopup = function (layerId) { - this.layerManager.removeLayer("popup", layerId); -}; - -methods.clearPopups = function () { - this.layerManager.clearLayers("popup"); -}; - -methods.addTiles = function (urlTemplate, layerId, group, options) { - this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); -}; - -methods.removeTiles = function (layerId) { - this.layerManager.removeLayer("tile", layerId); -}; - -methods.clearTiles = function () { - this.layerManager.clearLayers("tile"); -}; - -methods.addWMSTiles = function (baseUrl, layerId, group, options) { - if (options && options.crs) { - options.crs = (0, _crs_utils.getCRS)(options.crs); - } - - this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); -}; // Given: -// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} -// returns: -// ["a", "b", "a", "c"] - - -function unpackStrings(iconset) { - if (!iconset) { - return iconset; - } - - if (typeof iconset.index === "undefined") { - return iconset; - } - - iconset.data = (0, _util.asArray)(iconset.data); - iconset.index = (0, _util.asArray)(iconset.index); - return _jquery2["default"].map(iconset.index, function (e, i) { - return iconset.data[e]; - }); -} - -function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { - (function () { - var _this3 = this; - - var clusterGroup = this.layerManager.getLayer("cluster", clusterId), - cluster = clusterOptions !== null; - - if (cluster && !clusterGroup) { - clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); - - if (clusterOptions.freezeAtZoom) { - var freezeAtZoom = clusterOptions.freezeAtZoom; - delete clusterOptions.freezeAtZoom; - clusterGroup.freezeAtZoom(freezeAtZoom); - } - - clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); - } - - var extraInfo = cluster ? { - clusterId: clusterId - } : {}; - - var _loop2 = function _loop2(i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { - (function () { - var marker = markerFunc(df, i); - var thisId = df.get(i, "layerId"); - var thisGroup = cluster ? null : df.get(i, "group"); - - if (cluster) { - clusterGroup.clusterLayerStore.add(marker, thisId); - } else { - this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - } - - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - marker.bindPopup(popup, popupOptions); - } else { - marker.bindPopup(popup); - } - } - - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - if (labelOptions.permanent) { - marker.bindTooltip(label, labelOptions).openTooltip(); - } else { - marker.bindTooltip(label, labelOptions); - } - } else { - marker.bindTooltip(label); - } - } - - marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); - marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); - marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); - marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); - }).call(_this3); - } - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop2(i); - } - - if (cluster) { - this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); - } - }).call(map); -} - -methods.addGenericMarkers = addMarkers; - -methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // Unpack icons - icon.iconUrl = unpackStrings(icon.iconUrl); - icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); - icon.shadowUrl = unpackStrings(icon.shadowUrl); - icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts.iconUrl) { - return new _leaflet2["default"].Icon.Default(); - } // Composite options (like points or sizes) are passed from R with each - // individual component as its own option. We need to combine them now - // into their composite form. - - - if (opts.iconWidth) { - opts.iconSize = [opts.iconWidth, opts.iconHeight]; - } - - if (opts.shadowWidth) { - opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; - } - - if (opts.iconAnchorX) { - opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; - } - - if (opts.shadowAnchorX) { - opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; - } - - if (opts.popupAnchorX) { - opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; - } - - return new _leaflet2["default"].Icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { - var icondf; - var getIcon; - - if (icon) { - // This cbinds the icon URLs and any other icon options; they're all - // present on the icon object. - icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. - - getIcon = function getIcon(i) { - var opts = icondf.get(i); - - if (!opts) { - return new _leaflet2["default"].AwesomeMarkers.icon(); - } - - if (opts.squareMarker) { - opts.className = "awesome-marker awesome-marker-square"; - } - - return new _leaflet2["default"].AwesomeMarkers.icon(opts); - }; - } - - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); - if (icon) icondf.effectiveLength = df.nrow(); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - var options = df.get(i); - if (icon) options.icon = getIcon(i); - return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); - }); - } -}; - -function addLayers(map, category, df, layerFunc) { - var _loop3 = function _loop3(i) { - (function () { - var layer = layerFunc(df, i); - - if (!_jquery2["default"].isEmptyObject(layer)) { - var thisId = df.get(i, "layerId"); - var thisGroup = df.get(i, "group"); - this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); - - if (layer.bindPopup) { - var popup = df.get(i, "popup"); - var popupOptions = df.get(i, "popupOptions"); - - if (popup !== null) { - if (popupOptions !== null) { - layer.bindPopup(popup, popupOptions); - } else { - layer.bindPopup(popup); - } - } - } - - if (layer.bindTooltip) { - var label = df.get(i, "label"); - var labelOptions = df.get(i, "labelOptions"); - - if (label !== null) { - if (labelOptions !== null) { - layer.bindTooltip(label, labelOptions); - } else { - layer.bindTooltip(label); - } - } - } - - layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); - layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); - layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); - var highlightStyle = df.get(i, "highlightOptions"); - - if (!_jquery2["default"].isEmptyObject(highlightStyle)) { - var defaultStyle = {}; - - _jquery2["default"].each(highlightStyle, function (k, v) { - if (k != "bringToFront" && k != "sendToBack") { - if (df.get(i, k)) { - defaultStyle[k] = df.get(i, k); - } - } - }); - - layer.on("mouseover", function (e) { - this.setStyle(highlightStyle); - - if (highlightStyle.bringToFront) { - this.bringToFront(); - } - }); - layer.on("mouseout", function (e) { - this.setStyle(defaultStyle); - - if (highlightStyle.sendToBack) { - this.bringToBack(); - } - }); - } - } - }).call(map); - }; - - for (var i = 0; i < df.nrow(); i++) { - _loop3(i); - } -} - -methods.addGenericLayers = addLayers; - -methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { - return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); - } else { - return null; - } - }); - } -}; - -methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { - if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { - var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); - addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { - return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); - }); - } -}; -/* - * @param lat Array of arrays of latitude coordinates for polylines - * @param lng Array of arrays of longitude coordinates for polylines - */ - - -methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - var shapes = df.get(i, "shapes"); - shapes = shapes.map(function (shape) { - return _htmlwidgets2["default"].dataframeToD3(shape[0]); - }); - - if (shapes.length > 1) { - return _leaflet2["default"].polyline(shapes, df.get(i)); - } else { - return _leaflet2["default"].polyline(shapes[0], df.get(i)); - } - }); - } -}; - -methods.removeMarker = function (layerId) { - this.layerManager.removeLayer("marker", layerId); -}; - -methods.clearMarkers = function () { - this.layerManager.clearLayers("marker"); -}; - -methods.removeMarkerCluster = function (layerId) { - this.layerManager.removeLayer("cluster", layerId); -}; - -methods.removeMarkerFromCluster = function (layerId, clusterId) { - var cluster = this.layerManager.getLayer("cluster", clusterId); - if (!cluster) return; - cluster.clusterLayerStore.remove(layerId); -}; - -methods.clearMarkerClusters = function () { - this.layerManager.clearLayers("cluster"); -}; - -methods.removeShape = function (layerId) { - this.layerManager.removeLayer("shape", layerId); -}; - -methods.clearShapes = function () { - this.layerManager.clearLayers("shape"); -}; - -methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { - return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); - } else { - return null; - } - }); -}; -/* - * @param lat Array of arrays of latitude coordinates for polygons - * @param lng Array of arrays of longitude coordinates for polygons - */ - - -methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { - if (polygons.length > 0) { - var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); - addLayers(this, "shape", df, function (df, i) { - // This code used to use L.multiPolygon, but that caused - // double-click on a multipolygon to fail to zoom in on the - // map. Surprisingly, putting all the rings in a single - // polygon seems to still work; complicated multipolygons - // are still rendered correctly. - var shapes = df.get(i, "shapes").map(function (polygon) { - return polygon.map(_htmlwidgets2["default"].dataframeToD3); - }).reduce(function (acc, val) { - return acc.concat(val); - }, []); - return _leaflet2["default"].polygon(shapes, df.get(i)); - }); - } -}; - -methods.addGeoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(data, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties ? feature.properties.popup : null; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); - } - }); - - this.layerManager.addLayer(gjlayer, "geojson", layerId, group); -}; - -methods.removeGeoJSON = function (layerId) { - this.layerManager.removeLayer("geojson", layerId); -}; - -methods.clearGeoJSON = function () { - this.layerManager.clearLayers("geojson"); -}; - -methods.addTopoJSON = function (data, layerId, group, style) { - // This time, self is actually needed because the callbacks below need - // to access both the inner and outer senses of "this" - var self = this; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); - - var gjlayer = _leaflet2["default"].geoJson(null, { - style: function style(feature) { - if (feature.style || feature.properties.style) { - return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); - } else { - return globalStyle; - } - }, - onEachFeature: function onEachFeature(feature, layer) { - var extraInfo = { - featureId: feature.id, - properties: feature.properties - }; - var popup = feature.properties.popup; - if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); - layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); - layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); - layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); - } - }); - - global.omnivore.topojson.parse(data, null, gjlayer); - this.layerManager.addLayer(gjlayer, "topojson", layerId, group); -}; - -methods.removeTopoJSON = function (layerId) { - this.layerManager.removeLayer("topojson", layerId); -}; - -methods.clearTopoJSON = function () { - this.layerManager.clearLayers("topojson"); -}; - -methods.addControl = function (html, position, layerId, classes) { - function onAdd(map) { - var div = _leaflet2["default"].DomUtil.create("div", classes); - - if (typeof layerId !== "undefined" && layerId !== null) { - div.setAttribute("id", layerId); - } - - this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to - // not be, when a static leaflet widget is included as part of the shiny - // UI directly (not through leafletOutput or uiOutput). In this case we - // don't do the normal Shiny stuff as that will all happen when Shiny - // itself loads and binds the entire doc. - - if (window.Shiny && _shiny2["default"].initializeInputs) { - _shiny2["default"].renderHtml(html, this._div); - - _shiny2["default"].initializeInputs(this._div); - - _shiny2["default"].bindAll(this._div); - } else { - this._div.innerHTML = html; - } - - return this._div; - } - - function onRemove(map) { - if (window.Shiny && _shiny2["default"].unbindAll) { - _shiny2["default"].unbindAll(this._div); - } - } - - var Control = _leaflet2["default"].Control.extend({ - options: { - position: position - }, - onAdd: onAdd, - onRemove: onRemove - }); - - this.controls.add(new Control(), layerId, html); -}; - -methods.addCustomControl = function (control, layerId) { - this.controls.add(control, layerId); -}; - -methods.removeControl = function (layerId) { - this.controls.remove(layerId); -}; - -methods.getControl = function (layerId) { - this.controls.get(layerId); -}; - -methods.clearControls = function () { - this.controls.clear(); -}; - -methods.addLegend = function (options) { - var legend = _leaflet2["default"].control({ - position: options.position - }); - - var gradSpan; - - legend.onAdd = function (map) { - var div = _leaflet2["default"].DomUtil.create("div", options.className), - colors = options.colors, - labels = options.labels, - legendHTML = ""; - - if (options.type === "numeric") { - // # Formatting constants. - var singleBinHeight = 20; // The distance between tick marks, in px - - var vMargin = 8; // If 1st tick mark starts at top of gradient, how - // many extra px are needed for the top half of the - // 1st label? (ditto for last tick mark/label) - - var tickWidth = 4; // How wide should tick marks be, in px? - - var labelPadding = 6; // How much distance to reserve for tick mark? - // (Must be >= tickWidth) - // # Derived formatting parameters. - // What's the height of a single bin, in percentage (of gradient height)? - // It might not just be 1/(n-1), if the gradient extends past the tick - // marks (which can be the case for pretty cut points). - - var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? - - var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top - // of the gradient? - - var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; - gradSpan = (0, _jquery2["default"])("").css({ - "background": "linear-gradient(" + colors + ")", - "opacity": options.opacity, - "height": totalHeight + "px", - "width": "18px", - "display": "block", - "margin-top": vMargin + "px" - }); - var leftDiv = (0, _jquery2["default"])("
").css("float", "left"), - rightDiv = (0, _jquery2["default"])("
").css("float", "left"); - leftDiv.append(gradSpan); - (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
")); // Have to attach the div to the body at this early point, so that the - // svg text getComputedTextLength() actually works, below. - - document.body.appendChild(div); - var ns = "http://www.w3.org/2000/svg"; - var svg = document.createElementNS(ns, "svg"); - rightDiv.append(svg); - var g = document.createElementNS(ns, "g"); - (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); - svg.appendChild(g); // max label width needed to set width of svg, and right-justify text - - var maxLblWidth = 0; // Create tick marks and labels - - _jquery2["default"].each(labels, function (i, label) { - var y = tickOffset + i * singleBinHeight + 0.5; - var thisLabel = document.createElementNS(ns, "text"); - (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); - g.appendChild(thisLabel); - maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); - var thisTick = document.createElementNS(ns, "line"); - (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); - g.appendChild(thisTick); - }); // Now that we know the max label width, we can right-justify - - - (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for - - (0, _jquery2["default"])(svg).css({ - width: maxLblWidth + labelPadding + "px", - height: totalHeight + vMargin * 2 + "px" - }); - - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - (0, _jquery2["default"])(div).append("
" + options.na_label + "
"); - } - } else { - if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { - colors.push(options.na_color); - labels.push(options.na_label); - } - - for (var i = 0; i < colors.length; i++) { - legendHTML += " " + labels[i] + "
"; - } - - div.innerHTML = legendHTML; - } - - if (options.title) (0, _jquery2["default"])(div).prepend("
" + options.title + "
"); - return div; - }; - - if (options.group) { - // Auto generate a layerID if not provided - if (!options.layerId) { - options.layerId = _leaflet2["default"].Util.stamp(legend); - } - - var map = this; - map.on("overlayadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("overlayremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - map.on("groupadd", function (e) { - if (e.name === options.group) { - map.controls.add(legend, options.layerId); - } - }); - map.on("groupremove", function (e) { - if (e.name === options.group) { - map.controls.remove(options.layerId); - } - }); - } - - this.controls.add(legend, options.layerId); -}; - -methods.addLayersControl = function (baseGroups, overlayGroups, options) { - var _this4 = this; - - // Only allow one layers control at a time - methods.removeLayersControl.call(this); - var firstLayer = true; - var base = {}; - - _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one - - if (_this4.hasLayer(layer)) { - if (firstLayer) { - firstLayer = false; - } else { - _this4.removeLayer(layer); - } - } - } - }); - - var overlay = {}; - - _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { - var layer = _this4.layerManager.getLayerGroup(g, true); - - if (layer) { - overlay[g] = layer; - } - }); - - this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); - this.addControl(this.currentLayersControl); -}; - -methods.removeLayersControl = function () { - if (this.currentLayersControl) { - this.removeControl(this.currentLayersControl); - this.currentLayersControl = null; - } -}; - -methods.addScaleBar = function (options) { - // Only allow one scale bar at a time - methods.removeScaleBar.call(this); - - var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); - - this.currentScaleBar = scaleBar; -}; - -methods.removeScaleBar = function () { - if (this.currentScaleBar) { - this.currentScaleBar.remove(); - this.currentScaleBar = null; - } -}; - -methods.hideGroup = function (group) { - var _this5 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this5.layerManager.getLayerGroup(g, true); - - if (layer) { - _this5.removeLayer(layer); - } - }); -}; - -methods.showGroup = function (group) { - var _this6 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this6.layerManager.getLayerGroup(g, true); - - if (layer) { - _this6.addLayer(layer); - } - }); -}; - -function setupShowHideGroupsOnZoom(map) { - if (map.leafletr._hasInitializedShowHideGroups) { - return; - } - - map.leafletr._hasInitializedShowHideGroups = true; - - function setVisibility(layer, visible, group) { - if (visible !== map.hasLayer(layer)) { - if (visible) { - map.addLayer(layer); - map.fire("groupadd", { - "name": group, - "layer": layer - }); - } else { - map.removeLayer(layer); - map.fire("groupremove", { - "name": group, - "layer": layer - }); - } - } - } - - function showHideGroupsOnZoom() { - if (!map.layerManager) return; - var zoom = map.getZoom(); - map.layerManager.getAllGroupNames().forEach(function (group) { - var layer = map.layerManager.getLayerGroup(group, false); - - if (layer && typeof layer.zoomLevels !== "undefined") { - setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); - } - }); - } - - map.showHideGroupsOnZoom = showHideGroupsOnZoom; - map.on("zoomend", showHideGroupsOnZoom); -} - -methods.setGroupOptions = function (group, options) { - var _this7 = this; - - _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { - var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels - - - if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { - layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); - } - }); - - setupShowHideGroupsOnZoom(this); - this.showHideGroupsOnZoom(); -}; - -methods.addRasterImage = function (uri, bounds, layerId, group, options) { - // uri is a data URI containing an image. We want to paint this image as a - // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. - // We can't simply use ImageOverlay, as it uses bilinear scaling which looks - // awful as you zoom in (and sometimes shifts positions or disappears). - // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. - // First, some helper functions. - // degree2tile converts latitude, longitude, and zoom to x and y tile - // numbers. The tile numbers returned can be non-integral, as there's no - // reason to expect that the lat/lng inputs are exactly on the border of two - // tiles. - // - // We'll use this to convert the bounds we got from the server, into coords - // in tile-space at a given zoom level. Note that once we do the conversion, - // we don't to do any more trigonometry to convert between pixel coordinates - // and tile coordinates; the source image pixel coords, destination canvas - // pixel coords, and tile coords all can be scaled linearly. - function degree2tile(lat, lng, zoom) { - // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames - var latRad = lat * Math.PI / 180; - var n = Math.pow(2, zoom); - var x = (lng + 180) / 360 * n; - var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; - return { - x: x, - y: y - }; - } // Given a range [from,to) and either one or two numbers, returns true if - // there is any overlap between [x,x1) and the range--or if x1 is omitted, - // then returns true if x is within [from,to). - - - function overlap(from, to, x, - /* optional */ - x1) { - if (arguments.length == 3) x1 = x; - return x < to && x1 >= from; - } - - function getCanvasSmoothingProperty(ctx) { - var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; - - for (var i = 0; i < candidates.length; i++) { - if (typeof ctx[candidates[i]] !== "undefined") { - return candidates[i]; - } - } - - return null; - } // Our general strategy is to: - // 1. Load the data URI in an Image() object, so we can get its pixel - // dimensions and the underlying image data. (We could have done this - // by not encoding as PNG at all but just send an array of RGBA values - // from the server, but that would inflate the JSON too much.) - // 2. Create a hidden canvas that we use just to extract the image data - // from the Image (using Context2D.getImageData()). - // 3. Create a TileLayer.Canvas and add it to the map. - // We want to synchronously create and attach the TileLayer.Canvas (so an - // immediate call to clearRasters() will be respected, for example), but - // Image loads its data asynchronously. Fortunately we can resolve this - // by putting TileLayer.Canvas into async mode, which will let us create - // and attach the layer but have it wait until the image is loaded before - // it actually draws anything. - // These are the variables that we will populate once the image is loaded. - - - var imgData = null; // 1d row-major array, four [0-255] integers per pixel - - var imgDataMipMapper = null; - var w = null; // image width in pixels - - var h = null; // image height in pixels - // We'll use this array to store callbacks that need to be invoked once - // imgData, w, and h have been resolved. - - var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data - // is available. - - function getImageData(callback) { - if (imgData != null) { - // Must not invoke the callback immediately; it's too confusing and - // fragile to have a function invoke the callback *either* immediately - // or in the future. Better to be consistent here. - setTimeout(function () { - callback(imgData, w, h, imgDataMipMapper); - }, 0); - } else { - imgDataCallbacks.push(callback); - } - } - - var img = new Image(); - - img.onload = function () { - // Save size - w = img.width; - h = img.height; // Create a dummy canvas to extract the image data - - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = w; - imgDataCanvas.height = h; - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0); // Save the image data. - - imgData = imgDataCtx.getImageData(0, 0, w, h).data; - imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. - - document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. - - for (var i = 0; i < imgDataCallbacks.length; i++) { - imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); - } - - imgDataCallbacks = []; - }; - - img.src = uri; - - var canvasTiles = _leaflet2["default"].gridLayer(Object.assign({}, options, { - detectRetina: true, - async: true - })); // NOTE: The done() function MUST NOT be invoked until after the current - // tick; done() looks in Leaflet's tile cache for the current tile, and - // since it's still being constructed, it won't be found. - - - canvasTiles.createTile = function (tilePoint, done) { - var zoom = tilePoint.z; - - var canvas = _leaflet2["default"].DomUtil.create("canvas"); - - var error; // setup tile width and height according to the options - - var size = this.getTileSize(); - canvas.width = size.x; - canvas.height = size.y; - getImageData(function (imgData, w, h, mipmapper) { - try { - // The Context2D we'll being drawing onto. It's always 256x256. - var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into - // x/y tile coordinates. This is essentially doing a spherical mercator - // projection, then multiplying by 2^zoom. - - var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); - var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. - - var extent = { - x: bottomRight.x - topLeft.x, - y: bottomRight.y - topLeft.y - }; // Short circuit if tile is totally disjoint from image. - - if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; - if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. - // If the linear resolution (in either direction) of the image is less than 256px - // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in - // scaling. - - var imgRes = { - x: w / extent.x, - y: h / extent.y - }; // We can do the actual drawing in one of three ways: - // - Call drawImage(). This is easy and fast, and results in smooth - // interpolation (bilinear?). This is what we want when we are - // reducing the image from its native size. - // - Call drawImage() with imageSmoothingEnabled=false. This is easy - // and fast and gives us nearest-neighbor interpolation, which is what - // we want when enlarging the image. However, it's unsupported on many - // browsers (including QtWebkit). - // - Do a manual nearest-neighbor interpolation. This is what we'll fall - // back to when enlarging, and imageSmoothingEnabled isn't supported. - // In theory it's slower, but still pretty fast on my machine, and the - // results look the same AFAICT. - // Is imageSmoothingEnabled supported? If so, we can let canvas do - // nearest-neighbor interpolation for us. - - var smoothingProperty = getCanvasSmoothingProperty(ctx); - - if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { - // Use built-in scaling - // Turn off anti-aliasing if necessary - if (smoothingProperty) { - ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; - } // Don't necessarily draw with the full-size image; if we're - // downscaling, use the mipmapper to get a pre-downscaled image - // (see comments on Mipmapper class for why this matters). - - - mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { - // It's possible that the image will go off the edge of the canvas-- - // that's OK, the canvas should clip appropriately. - ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert - // to rel pixel coords - (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just - // convert from size in tile coords straight to pixels - extent.x * 256, extent.y * 256); - }); - } else { - // Use manual nearest-neighbor interpolation - // Calculate the source image pixel coordinates that correspond with - // the top-left and bottom-right of this tile. (If the source image - // only partially overlaps the tile, we use max/min to limit the - // sourceStart/End to only reflect the overlapping portion.) - var sourceStart = { - x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), - y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) - }; - var sourceEnd = { - x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), - y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) - }; // The size, in dest pixels, that each source pixel should occupy. - // This might be greater or less than 1 (e.g. if x and y resolution - // are very different). - - var pixelSize = { - x: 256 / imgRes.x, - y: 256 / imgRes.y - }; // For each pixel in the source image that overlaps the tile... - - for (var row = sourceStart.y; row < sourceEnd.y; row++) { - for (var col = sourceStart.x; col < sourceEnd.x; col++) { - // ...extract the pixel data... - var i = (row * w + col) * 4; - var r = imgData[i]; - var g = imgData[i + 1]; - var b = imgData[i + 2]; - var a = imgData[i + 3]; - ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image - // where it should be drawn... - - var pixelPos = { - x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, - y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 - }; // ...and draw a rectangle there. - - ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from - // causing overlap between this rect and its neighbors. The - // minuend is the location of the next pixel, while the - // subtrahend is the position of the current pixel (to turn an - // absolute coordinate to a width/height). Yes, I had to look - // up minuend and subtrahend. - Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); - } - } - } - } catch (e) { - error = e; - } finally { - done(error, canvas); - } - }); - return canvas; - }; - - this.layerManager.addLayer(canvasTiles, "image", layerId, group); -}; - -methods.removeImage = function (layerId) { - this.layerManager.removeLayer("image", layerId); -}; - -methods.clearImages = function () { - this.layerManager.clearLayers("image"); -}; - -methods.addMeasure = function (options) { - // if a measureControl already exists, then remove it and - // replace with a new one - methods.removeMeasure.call(this); - this.measureControl = _leaflet2["default"].control.measure(options); - this.addControl(this.measureControl); -}; - -methods.removeMeasure = function () { - if (this.measureControl) { - this.removeControl(this.measureControl); - this.measureControl = null; - } -}; - -methods.addSelect = function (ctGroup) { - var _this8 = this; - - methods.removeSelect.call(this); - this._selectButton = _leaflet2["default"].easyButton({ - states: [{ - stateName: "select-inactive", - icon: "ion-qr-scanner", - title: "Make a selection", - onClick: function onClick(btn, map) { - btn.state("select-active"); - _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); - - if (ctGroup) { - var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); - selectionHandle.on("change", function (e) { - if (e.sender !== selectionHandle) { - if (_this8._locationFilter) { - _this8._locationFilter.disable(); - - btn.state("select-inactive"); - } - } - }); - - var handler = function handler(e) { - _this8.layerManager.brush(_this8._locationFilter.getBounds(), { - sender: selectionHandle - }); - }; - - _this8._locationFilter.on("enabled", handler); - - _this8._locationFilter.on("change", handler); - - _this8._locationFilter.on("disabled", function () { - selectionHandle.close(); - _this8._locationFilter = null; - }); - } - - _this8._locationFilter.addTo(map); - } - }, { - stateName: "select-active", - icon: "ion-close-round", - title: "Dismiss selection", - onClick: function onClick(btn, map) { - btn.state("select-inactive"); - - _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections - - - _this8.layerManager.unbrush(); - } - }] - }); - - this._selectButton.addTo(this); -}; - -methods.removeSelect = function () { - if (this._locationFilter) { - this._locationFilter.disable(); - } - - if (this._selectButton) { - this.removeControl(this._selectButton); - this._selectButton = null; - } -}; - -methods.createMapPane = function (name, zIndex) { - this.createPane(name); - this.getPane(name).style.zIndex = zIndex; -}; - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// This class simulates a mipmap, which shrinks images by powers of two. This -// stepwise reduction results in "pixel-perfect downscaling" (where every -// pixel of the original image has some contribution to the downscaled image) -// as opposed to a single-step downscaling which will discard a lot of data -// (and with sparse images at small scales can give very surprising results). -var Mipmapper = /*#__PURE__*/function () { - function Mipmapper(img) { - _classCallCheck(this, Mipmapper); - - this._layers = [img]; - } // The various functions on this class take a callback function BUT MAY OR MAY - // NOT actually behave asynchronously. - - - _createClass(Mipmapper, [{ - key: "getBySize", - value: function getBySize(desiredWidth, desiredHeight, callback) { - var _this = this; - - var i = 0; - var lastImg = this._layers[0]; - - var testNext = function testNext() { - _this.getByIndex(i, function (img) { - // If current image is invalid (i.e. too small to be rendered) or - // it's smaller than what we wanted, return the last known good image. - if (!img || img.width < desiredWidth || img.height < desiredHeight) { - callback(lastImg); - return; - } else { - lastImg = img; - i++; - testNext(); - return; - } - }); - }; - - testNext(); - } - }, { - key: "getByIndex", - value: function getByIndex(i, callback) { - var _this2 = this; - - if (this._layers[i]) { - callback(this._layers[i]); - return; - } - - this.getByIndex(i - 1, function (prevImg) { - if (!prevImg) { - // prevImg could not be calculated (too small, possibly) - callback(null); - return; - } - - if (prevImg.width < 2 || prevImg.height < 2) { - // Can't reduce this image any further - callback(null); - return; - } // If reduce ever becomes truly asynchronous, we should stuff a promise or - // something into this._layers[i] before calling this.reduce(), to prevent - // redundant reduce operations from happening. - - - _this2.reduce(prevImg, function (reducedImg) { - _this2._layers[i] = reducedImg; - callback(reducedImg); - return; - }); - }); - } - }, { - key: "reduce", - value: function reduce(img, callback) { - var imgDataCanvas = document.createElement("canvas"); - imgDataCanvas.width = Math.ceil(img.width / 2); - imgDataCanvas.height = Math.ceil(img.height / 2); - imgDataCanvas.style.display = "none"; - document.body.appendChild(imgDataCanvas); - - try { - var imgDataCtx = imgDataCanvas.getContext("2d"); - imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); - callback(imgDataCanvas); - } finally { - document.body.removeChild(imgDataCanvas); - } - } - }]); - - return Mipmapper; -}(); - -exports["default"] = Mipmapper; - - -},{}],17:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.log = log; -exports.recycle = recycle; -exports.asArray = asArray; - -function log(message) { - /* eslint-disable no-console */ - if (console && console.log) console.log(message); - /* eslint-enable no-console */ -} - -function recycle(values, length, inPlace) { - if (length === 0 && !inPlace) return []; - - if (!(values instanceof Array)) { - if (inPlace) { - throw new Error("Can't do in-place recycling of a non-Array value"); - } - - values = [values]; - } - - if (typeof length === "undefined") length = values.length; - var dest = inPlace ? values : []; - var origLength = values.length; - - while (dest.length < length) { - dest.push(values[dest.length % origLength]); - } - - if (dest.length > length) { - dest.splice(length, dest.length - length); - } - - return dest; -} - -function asArray(value) { - if (value instanceof Array) return value;else return [value]; -} - - -},{}]},{},[13]); diff --git a/docs/articles/Articles/Applications_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js b/docs/articles/Articles/Applications_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js deleted file mode 100644 index bcde1ed..0000000 --- a/docs/articles/Articles/Applications_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js +++ /dev/null @@ -1,1178 +0,0 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['leaflet'], factory); - } else if (typeof modules === 'object' && module.exports) { - // define a Common JS module that relies on 'leaflet' - module.exports = factory(require('leaflet')); - } else { - // Assume Leaflet is loaded into global object L already - factory(L); - } -}(this, function (L) { - 'use strict'; - - L.TileLayer.Provider = L.TileLayer.extend({ - initialize: function (arg, options) { - var providers = L.TileLayer.Provider.providers; - - var parts = arg.split('.'); - - var providerName = parts[0]; - var variantName = parts[1]; - - if (!providers[providerName]) { - throw 'No such provider (' + providerName + ')'; - } - - var provider = { - url: providers[providerName].url, - options: providers[providerName].options - }; - - // overwrite values in provider from variant. - if (variantName && 'variants' in providers[providerName]) { - if (!(variantName in providers[providerName].variants)) { - throw 'No such variant of ' + providerName + ' (' + variantName + ')'; - } - var variant = providers[providerName].variants[variantName]; - var variantOptions; - if (typeof variant === 'string') { - variantOptions = { - variant: variant - }; - } else { - variantOptions = variant.options; - } - provider = { - url: variant.url || provider.url, - options: L.Util.extend({}, provider.options, variantOptions) - }; - } - - // replace attribution placeholders with their values from toplevel provider attribution, - // recursively - var attributionReplacer = function (attr) { - if (attr.indexOf('{attribution.') === -1) { - return attr; - } - return attr.replace(/\{attribution.(\w*)\}/g, - function (match, attributionName) { - return attributionReplacer(providers[attributionName].options.attribution); - } - ); - }; - provider.options.attribution = attributionReplacer(provider.options.attribution); - - // Compute final options combining provider options with any user overrides - var layerOpts = L.Util.extend({}, provider.options, options); - L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts); - } - }); - - /** - * Definition of providers. - * see http://leafletjs.com/reference.html#tilelayer for options in the options map. - */ - - L.TileLayer.Provider.providers = { - OpenStreetMap: { - url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: - '© OpenStreetMap contributors' - }, - variants: { - Mapnik: {}, - DE: { - url: 'https://tile.openstreetmap.de/{z}/{x}/{y}.png', - options: { - maxZoom: 18 - } - }, - CH: { - url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - bounds: [[45, 5], [48, 11]] - } - }, - France: { - url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: '© OpenStreetMap France | {attribution.OpenStreetMap}' - } - }, - HOT: { - url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap}, ' + - 'Tiles style by Humanitarian OpenStreetMap Team ' + - 'hosted by OpenStreetMap France' - } - }, - BZH: { - url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', - options: { - attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', - bounds: [[46.2, -5.5], [50, 0.7]] - } - } - } - }, - MapTilesAPI: { - url: 'https://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}', - options: { - attribution: - '© MapTiles API, {attribution.OpenStreetMap}', - variant: 'en/map/v1', - // Get your own MapTiles API access token here : https://www.maptilesapi.com/ - // NB : this is a demonstration key that comes with no guarantee and not to be used in production - apikey: '', - maxZoom: 19 - }, - variants: { - OSMEnglish: { - options: { - variant: 'en/map/v1' - } - }, - OSMFrancais: { - options: { - variant: 'fr/map/v1' - } - }, - OSMEspagnol: { - options: { - variant: 'es/map/v1' - } - } - } - }, - OpenSeaMap: { - url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', - options: { - attribution: 'Map data: © OpenSeaMap contributors' - } - }, - OPNVKarte: { - url: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map memomaps.de CC-BY-SA, map data {attribution.OpenStreetMap}' - } - }, - OpenTopoMap: { - url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: {attribution.OpenStreetMap}, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' - } - }, - OpenRailwayMap: { - url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenRailwayMap (CC-BY-SA)' - } - }, - OpenFireMap: { - url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenFireMap (CC-BY-SA)' - } - }, - SafeCast: { - url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', - options: { - maxZoom: 16, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © SafeCast (CC-BY-SA)' - } - }, - Stadia: { - url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}', - options: { - minZoom: 0, - maxZoom: 20, - attribution: - '© Stadia Maps ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'alidade_smooth', - ext: 'png' - }, - variants: { - AlidadeSmooth: 'alidade_smooth', - AlidadeSmoothDark: 'alidade_smooth_dark', - OSMBright: 'osm_bright', - Outdoors: 'outdoors', - StamenToner: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner' - } - }, - StamenTonerBackground: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_background' - } - }, - StamenTonerLines: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_lines' - } - }, - StamenTonerLabels: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_labels' - } - }, - StamenTonerLite: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_lite' - } - }, - StamenWatercolor: { - url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}.{ext}', - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_watercolor', - ext: 'jpg', - minZoom: 1, - maxZoom: 16 - } - }, - StamenTerrain: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainBackground: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_background', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainLabels: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_labels', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainLines: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_lines', - minZoom: 0, - maxZoom: 18 - } - } - } - }, - Thunderforest: { - url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}', - options: { - attribution: - '© Thunderforest, {attribution.OpenStreetMap}', - variant: 'cycle', - apikey: '', - maxZoom: 22 - }, - variants: { - OpenCycleMap: 'cycle', - Transport: { - options: { - variant: 'transport' - } - }, - TransportDark: { - options: { - variant: 'transport-dark' - } - }, - SpinalMap: { - options: { - variant: 'spinal-map' - } - }, - Landscape: 'landscape', - Outdoors: 'outdoors', - Pioneer: 'pioneer', - MobileAtlas: 'mobile-atlas', - Neighbourhood: 'neighbourhood' - } - }, - CyclOSM: { - url: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: 'CyclOSM | Map data: {attribution.OpenStreetMap}' - } - }, - Jawg: { - url: 'https://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}', - options: { - attribution: - '© JawgMaps ' + - '{attribution.OpenStreetMap}', - minZoom: 0, - maxZoom: 22, - subdomains: 'abcd', - variant: 'jawg-terrain', - // Get your own Jawg access token here : https://www.jawg.io/lab/ - // NB : this is a demonstration key that comes with no guarantee - accessToken: '', - }, - variants: { - Streets: 'jawg-streets', - Terrain: 'jawg-terrain', - Sunny: 'jawg-sunny', - Dark: 'jawg-dark', - Light: 'jawg-light', - Matrix: 'jawg-matrix' - } - }, - MapBox: { - url: 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}', - options: { - attribution: - '© Mapbox ' + - '{attribution.OpenStreetMap} ' + - 'Improve this map', - tileSize: 512, - maxZoom: 18, - zoomOffset: -1, - id: 'mapbox/streets-v11', - accessToken: '', - } - }, - MapTiler: { - url: 'https://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}', - options: { - attribution: - '© MapTiler © OpenStreetMap contributors', - variant: 'streets', - ext: 'png', - key: '', - tileSize: 512, - zoomOffset: -1, - minZoom: 0, - maxZoom: 21 - }, - variants: { - Streets: 'streets', - Basic: 'basic', - Bright: 'bright', - Pastel: 'pastel', - Positron: 'positron', - Hybrid: { - options: { - variant: 'hybrid', - ext: 'jpg' - } - }, - Toner: 'toner', - Topo: 'topo', - Voyager: 'voyager' - } - }, - TomTom: { - url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}', - options: { - variant: 'basic', - maxZoom: 22, - attribution: - '© 1992 - ' + new Date().getFullYear() + ' TomTom. ', - subdomains: 'abcd', - style: 'main', - ext: 'png', - apikey: '', - }, - variants: { - Basic: 'basic', - Hybrid: 'hybrid', - Labels: 'labels' - } - }, - Esri: { - url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}', - options: { - variant: 'World_Street_Map', - attribution: 'Tiles © Esri' - }, - variants: { - WorldStreetMap: { - options: { - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012' - } - }, - DeLorme: { - options: { - variant: 'Specialty/DeLorme_World_Base_Map', - minZoom: 1, - maxZoom: 11, - attribution: '{attribution.Esri} — Copyright: ©2012 DeLorme' - } - }, - WorldTopoMap: { - options: { - variant: 'World_Topo_Map', - attribution: - '{attribution.Esri} — ' + - 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' - } - }, - WorldImagery: { - options: { - variant: 'World_Imagery', - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' - } - }, - WorldTerrain: { - options: { - variant: 'World_Terrain_Base', - maxZoom: 13, - attribution: - '{attribution.Esri} — ' + - 'Source: USGS, Esri, TANA, DeLorme, and NPS' - } - }, - WorldShadedRelief: { - options: { - variant: 'World_Shaded_Relief', - maxZoom: 13, - attribution: '{attribution.Esri} — Source: Esri' - } - }, - WorldPhysical: { - options: { - variant: 'World_Physical_Map', - maxZoom: 8, - attribution: '{attribution.Esri} — Source: US National Park Service' - } - }, - OceanBasemap: { - options: { - variant: 'Ocean/World_Ocean_Base', - maxZoom: 13, - attribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri' - } - }, - NatGeoWorldMap: { - options: { - variant: 'NatGeo_World_Map', - maxZoom: 16, - attribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC' - } - }, - WorldGrayCanvas: { - options: { - variant: 'Canvas/World_Light_Gray_Base', - maxZoom: 16, - attribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ' - } - } - } - }, - OpenWeatherMap: { - url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}', - options: { - maxZoom: 19, - attribution: 'Map data © OpenWeatherMap', - apiKey: '', - opacity: 0.5 - }, - variants: { - Clouds: 'clouds', - CloudsClassic: 'clouds_cls', - Precipitation: 'precipitation', - PrecipitationClassic: 'precipitation_cls', - Rain: 'rain', - RainClassic: 'rain_cls', - Pressure: 'pressure', - PressureContour: 'pressure_cntr', - Wind: 'wind', - Temperature: 'temp', - Snow: 'snow' - } - }, - HERE: { - /* - * HERE maps, formerly Nokia maps. - * These basemaps are free, but you need an api id and app key. Please sign up at - * https://developer.here.com/plans - */ - url: - 'https://{s}.{base}.maps.api.here.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'app_id={app_id}&app_code={app_code}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - 'app_id': '', - 'app_code': '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalDayTraffic: { - options: { - variant: 'normal.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - hybridDayTraffic: { - options: { - variant: 'hybrid.traffic.day', - base: 'traffic', - type: 'traffictile' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - HEREv3: { - /* - * HERE maps API Version 3. - * These basemaps are free, but you need an API key. Please sign up at - * https://developer.here.com/plans - * Version 3 deprecates the app_id and app_code access in favor of apiKey - * - * Supported access methods as of 2019/12/21: - * @see https://developer.here.com/faqs#access-control-1--how-do-you-control-access-to-here-location-services - */ - url: - 'https://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/' + - '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + - 'apiKey={apiKey}&lg={language}', - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - apiKey: '', - base: 'base', - variant: 'normal.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - normalDay: 'normal.day', - normalDayCustom: 'normal.day.custom', - normalDayGrey: 'normal.day.grey', - normalDayMobile: 'normal.day.mobile', - normalDayGreyMobile: 'normal.day.grey.mobile', - normalDayTransit: 'normal.day.transit', - normalDayTransitMobile: 'normal.day.transit.mobile', - normalNight: 'normal.night', - normalNightMobile: 'normal.night.mobile', - normalNightGrey: 'normal.night.grey', - normalNightGreyMobile: 'normal.night.grey.mobile', - normalNightTransit: 'normal.night.transit', - normalNightTransitMobile: 'normal.night.transit.mobile', - reducedDay: 'reduced.day', - reducedNight: 'reduced.night', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - FreeMapSK: { - url: 'https://{s}.freemap.sk/T/{z}/{x}/{y}.jpeg', - options: { - minZoom: 8, - maxZoom: 16, - subdomains: 'abcd', - bounds: [[47.204642, 15.996093], [49.830896, 22.576904]], - attribution: - '{attribution.OpenStreetMap}, visualization CC-By-SA 2.0 Freemap.sk' - } - }, - MtbMap: { - url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap} & USGS' - } - }, - CartoDB: { - url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png', - options: { - attribution: '{attribution.OpenStreetMap} © CARTO', - subdomains: 'abcd', - maxZoom: 20, - variant: 'light_all' - }, - variants: { - Positron: 'light_all', - PositronNoLabels: 'light_nolabels', - PositronOnlyLabels: 'light_only_labels', - DarkMatter: 'dark_all', - DarkMatterNoLabels: 'dark_nolabels', - DarkMatterOnlyLabels: 'dark_only_labels', - Voyager: 'rastertiles/voyager', - VoyagerNoLabels: 'rastertiles/voyager_nolabels', - VoyagerOnlyLabels: 'rastertiles/voyager_only_labels', - VoyagerLabelsUnder: 'rastertiles/voyager_labels_under' - } - }, - HikeBike: { - url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: '{attribution.OpenStreetMap}', - variant: 'hikebike' - }, - variants: { - HikeBike: {}, - HillShading: { - options: { - maxZoom: 15, - variant: 'hillshading' - } - } - } - }, - BasemapAT: { - url: 'https://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}', - options: { - maxZoom: 19, - attribution: 'Datenquelle: basemap.at', - type: 'normal', - format: 'png', - bounds: [[46.358770, 8.782379], [49.037872, 17.189532]], - variant: 'geolandbasemap' - }, - variants: { - basemap: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'geolandbasemap' - } - }, - grau: 'bmapgrau', - overlay: 'bmapoverlay', - terrain: { - options: { - variant: 'bmapgelaende', - type: 'grau', - format: 'jpeg' - } - }, - surface: { - options: { - variant: 'bmapoberflaeche', - type: 'grau', - format: 'jpeg' - } - }, - highdpi: { - options: { - variant: 'bmaphidpi', - format: 'jpeg' - } - }, - orthofoto: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'bmaporthofoto30cm', - format: 'jpeg' - } - } - } - }, - nlmaps: { - url: 'https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.png', - options: { - minZoom: 6, - maxZoom: 19, - bounds: [[50.5, 3.25], [54, 7.6]], - attribution: 'Kaartgegevens © Kadaster' - }, - variants: { - 'standaard': 'standaard', - 'pastel': 'pastel', - 'grijs': 'grijs', - 'water': 'water', - 'luchtfoto': { - 'url': 'https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg', - } - } - }, - NASAGIBS: { - url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}', - options: { - attribution: - 'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' + - '(ESDIS) with funding provided by NASA/HQ.', - bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]], - minZoom: 1, - maxZoom: 9, - format: 'jpg', - time: '', - tilematrixset: 'GoogleMapsCompatible_Level' - }, - variants: { - ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor', - ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367', - ViirsEarthAtNight2012: { - options: { - variant: 'VIIRS_CityLights_2012', - maxZoom: 8 - } - }, - ModisTerraLSTDay: { - options: { - variant: 'MODIS_Terra_Land_Surface_Temp_Day', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - }, - ModisTerraSnowCover: { - options: { - variant: 'MODIS_Terra_NDSI_Snow_Cover', - format: 'png', - maxZoom: 8, - opacity: 0.75 - } - }, - ModisTerraAOD: { - options: { - variant: 'MODIS_Terra_Aerosol', - format: 'png', - maxZoom: 6, - opacity: 0.75 - } - }, - ModisTerraChlorophyll: { - options: { - variant: 'MODIS_Terra_Chlorophyll_A', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - } - } - }, - NLS: { - // NLS maps are copyright National library of Scotland. - // http://maps.nls.uk/projects/api/index.html - // Please contact NLS for anything other than non-commercial low volume usage - // - // Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s - // z0-9 - 1:1m - // z10-11 - quarter inch (1:253440) - // z12-18 - one inch (1:63360) - url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg', - options: { - attribution: 'National Library of Scotland Historic Maps', - bounds: [[49.6, -12], [61.7, 3]], - minZoom: 1, - maxZoom: 18, - subdomains: '0123', - } - }, - JusticeMap: { - // Justice Map (http://www.justicemap.org/) - // Visualize race and income data for your community, county and country. - // Includes tools for data journalists, bloggers and community activists. - url: 'https://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png', - options: { - attribution: 'Justice Map', - // one of 'county', 'tract', 'block' - size: 'county', - // Bounds for USA, including Alaska and Hawaii - bounds: [[14, -180], [72, -56]] - }, - variants: { - income: 'income', - americanIndian: 'indian', - asian: 'asian', - black: 'black', - hispanic: 'hispanic', - multi: 'multi', - nonWhite: 'nonwhite', - white: 'white', - plurality: 'plural' - } - }, - GeoportailFrance: { - url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', - options: { - attribution: 'Geoportail France', - bounds: [[-75, -180], [81, 180]], - minZoom: 2, - maxZoom: 18, - // Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/ - // NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee - apikey: 'choisirgeoportail', - format: 'image/png', - style: 'normal', - variant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2' - }, - variants: { - plan: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', - parcels: { - options: { - variant: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS', - style: 'PCI vecteur', - maxZoom: 20 - } - }, - orthos: { - options: { - maxZoom: 19, - format: 'image/jpeg', - variant: 'ORTHOIMAGERY.ORTHOPHOTOS' - } - } - } - }, - OneMapSG: { - url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png', - options: { - variant: 'Default', - minZoom: 11, - maxZoom: 18, - bounds: [[1.56073, 104.11475], [1.16, 103.502]], - attribution: ' New OneMap | Map data © contributors, Singapore Land Authority' - }, - variants: { - Default: 'Default', - Night: 'Night', - Original: 'Original', - Grey: 'Grey', - LandLot: 'LandLot' - } - }, - USGS: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', - options: { - maxZoom: 20, - attribution: 'Tiles courtesy of the U.S. Geological Survey' - }, - variants: { - USTopo: {}, - USImagery: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}' - }, - USImageryTopo: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}' - } - } - }, - WaymarkedTrails: { - url: 'https://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © waymarkedtrails.org (CC-BY-SA)' - }, - variants: { - hiking: 'hiking', - cycling: 'cycling', - mtb: 'mtb', - slopes: 'slopes', - riding: 'riding', - skating: 'skating' - } - }, - OpenAIP: { - url: 'https://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}', - options: { - attribution: 'openAIP Data (CC-BY-NC-SA)', - ext: 'png', - minZoom: 4, - maxZoom: 14, - tms: true, - detectRetina: true, - subdomains: '12' - } - }, - OpenSnowMap: { - url: 'https://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.png', - options: { - minZoom: 9, - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} & ODbL, © www.opensnowmap.org CC-BY-SA' - }, - variants: { - pistes: 'pistes', - } - }, - AzureMaps: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}'+ - '&subscription-key={subscriptionKey}', - options: { - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.', - apiVersion: '2.0', - variant: 'microsoft.imagery', - subscriptionKey: '', - language: 'en-US', - }, - variants: { - MicrosoftImagery: 'microsoft.imagery', - MicrosoftBaseDarkGrey: 'microsoft.base.darkgrey', - MicrosoftBaseRoad: 'microsoft.base.road', - MicrosoftBaseHybridRoad: 'microsoft.base.hybrid.road', - MicrosoftTerraMain: 'microsoft.terra.main', - MicrosoftWeatherInfraredMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', - variant: 'microsoft.weather.infrared.main', - }, - }, - MicrosoftWeatherRadarMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ - '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', - variant: 'microsoft.weather.radar.main', - }, - } - }, - }, - SwissFederalGeoportal: { - url: 'https://wmts.geo.admin.ch/1.0.0/{variant}/default/current/3857/{z}/{x}/{y}.jpeg', - options: { - attribution: '© swisstopo', - minZoom: 2, - maxZoom: 18, - bounds: [[45.398181, 5.140242], [48.230651, 11.47757]] - }, - variants: { - NationalMapColor: 'ch.swisstopo.pixelkarte-farbe', - NationalMapGrey: 'ch.swisstopo.pixelkarte-grau', - SWISSIMAGE: { - options: { - variant: 'ch.swisstopo.swissimage', - maxZoom: 19 - } - } - } - } - }; - - L.tileLayer.provider = function (provider, options) { - return new L.TileLayer.Provider(provider, options); - }; - - return L; -})); diff --git a/docs/articles/Articles/Applications_files/leaflet-providers-3.0.0/leaflet-providers.js b/docs/articles/Articles/Applications_files/leaflet-providers-3.0.0/leaflet-providers.js deleted file mode 100644 index a134d58..0000000 --- a/docs/articles/Articles/Applications_files/leaflet-providers-3.0.0/leaflet-providers.js +++ /dev/null @@ -1,1121 +0,0 @@ -(function(root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['leaflet'], factory); - } else if (typeof modules === 'object' && module.exports) { - // define a Common JS module that relies on 'leaflet' - module.exports = factory(require('leaflet')); - } else { - // Assume Leaflet is loaded into global object L already - factory(L); - } -}(this, function(L) { - 'use strict'; - - L.TileLayer.Provider = L.TileLayer.extend({ - initialize: function(arg, options) { - var providers = L.TileLayer.Provider.providers; - - var parts = arg.split('.'); - - var providerName = parts[0]; - var variantName = parts[1]; - - if (!providers[providerName]) { - throw 'No such provider (' + providerName + ')'; - } - - var provider = { - url: providers[providerName].url, - options: providers[providerName].options - }; - - // overwrite values in provider from variant. - if (variantName && 'variants' in providers[providerName]) { - if (!(variantName in providers[providerName].variants)) { - throw 'No such variant of ' + providerName + ' (' + variantName + ')'; - } - var variant = providers[providerName].variants[variantName]; - var variantOptions; - if (typeof variant === 'string') { - variantOptions = { - variant: variant - }; - } else { - variantOptions = variant.options; - } - provider = { - url: variant.url || provider.url, - options: L.Util.extend({}, provider.options, variantOptions) - }; - } - - // replace attribution placeholders with their values from toplevel provider attribution, - // recursively - var attributionReplacer = function(attr) { - if (attr.indexOf('{attribution.') === -1) { - return attr; - } - return attr.replace( - /\{attribution.(\w*)\}/g, - function(match, attributionName) { - return attributionReplacer(providers[attributionName].options.attribution); - } - ); - }; - provider.options.attribution = attributionReplacer(provider.options.attribution); - - // Compute final options combining provider options with any user overrides - var layerOpts = L.Util.extend({}, provider.options, options); - L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts); - } - }); - - /** - * Definition of providers. - * see http://leafletjs.com/reference.html#tilelayer for options in the options map. - */ - - L.TileLayer.Provider.providers = { - OpenStreetMap: { - url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: - '© OpenStreetMap contributors' - }, - variants: { - Mapnik: {}, - DE: { - url: 'https://tile.openstreetmap.de/{z}/{x}/{y}.png', - options: { - maxZoom: 18 - } - }, - CH: { - url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - bounds: [[45, 5], [48, 11]] - } - }, - France: { - url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: '© OpenStreetMap France | {attribution.OpenStreetMap}' - } - }, - HOT: { - url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap}, ' + - 'Tiles style by Humanitarian OpenStreetMap Team ' + - 'hosted by OpenStreetMap France' - } - }, - BZH: { - url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', - options: { - attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', - bounds: [[46.2, -5.5], [50, 0.7]] - } - }, - CAT: { - url: 'https://tile.openstreetmap.bzh/ca/{z}/{x}/{y}.png', - options: { - attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', - } - } - } - }, - MapTilesAPI: { - url: 'https://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}', - options: { - attribution: - '© MapTiles API, {attribution.OpenStreetMap}', - variant: 'en/map/v1', - // Get your own MapTiles API access token here : https://www.maptilesapi.com/ - // NB : this is a demonstration key that comes with no guarantee and not to be used in production - apikey: '', - maxZoom: 19 - }, - variants: { - OSMEnglish: { - options: { - variant: 'en/map/v1' - } - }, - OSMFrancais: { - options: { - variant: 'fr/map/v1' - } - }, - OSMEspagnol: { - options: { - variant: 'es/map/v1' - } - } - } - }, - OpenSeaMap: { - url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', - options: { - attribution: 'Map data: © OpenSeaMap contributors' - } - }, - OPNVKarte: { - url: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map memomaps.de CC-BY-SA, map data {attribution.OpenStreetMap}' - } - }, - OpenTopoMap: { - url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - options: { - maxZoom: 17, - attribution: 'Map data: {attribution.OpenStreetMap}, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' - } - }, - OpenRailwayMap: { - url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenRailwayMap (CC-BY-SA)' - } - }, - OpenFireMap: { - url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenFireMap (CC-BY-SA)' - } - }, - SafeCast: { - url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', - options: { - maxZoom: 16, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © SafeCast (CC-BY-SA)' - } - }, - Stadia: { - url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}', - options: { - minZoom: 0, - maxZoom: 20, - attribution: - '© Stadia Maps ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'alidade_smooth', - ext: 'png' - }, - variants: { - AlidadeSmooth: 'alidade_smooth', - AlidadeSmoothDark: 'alidade_smooth_dark', - AlidadeSatellite: { - options: { - attribution: - '© CNES, Distribution Airbus DS, © Airbus DS, © PlanetObserver (Contains Copernicus Data) | ' + - '© Stadia Maps ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'alidade_satellite', - ext: 'jpg', - } - }, - OSMBright: 'osm_bright', - Outdoors: 'outdoors', - StamenToner: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner' - } - }, - StamenTonerBackground: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_background' - } - }, - StamenTonerLines: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_lines' - } - }, - StamenTonerLabels: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_labels' - } - }, - StamenTonerLite: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_toner_lite' - } - }, - StamenWatercolor: { - url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}.{ext}', - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_watercolor', - ext: 'jpg', - minZoom: 1, - maxZoom: 16 - } - }, - StamenTerrain: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainBackground: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_background', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainLabels: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_labels', - minZoom: 0, - maxZoom: 18 - } - }, - StamenTerrainLines: { - options: { - attribution: - '© Stadia Maps ' + - '© Stamen Design ' + - '© OpenMapTiles ' + - '{attribution.OpenStreetMap}', - variant: 'stamen_terrain_lines', - minZoom: 0, - maxZoom: 18 - } - } - } - }, - Thunderforest: { - url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}{r}.png?apikey={apikey}', - options: { - attribution: - '© Thunderforest, {attribution.OpenStreetMap}', - variant: 'cycle', - apikey: '', - maxZoom: 22 - }, - variants: { - OpenCycleMap: 'cycle', - Transport: { - options: { - variant: 'transport' - } - }, - TransportDark: { - options: { - variant: 'transport-dark' - } - }, - SpinalMap: { - options: { - variant: 'spinal-map' - } - }, - Landscape: 'landscape', - Outdoors: 'outdoors', - Pioneer: 'pioneer', - MobileAtlas: 'mobile-atlas', - Neighbourhood: 'neighbourhood' - } - }, - BaseMapDE: { - url: 'https://sgx.geodatenzentrum.de/wmts_basemapde/tile/1.0.0/{variant}/default/GLOBAL_WEBMERCATOR/{z}/{y}/{x}.png', - options: { - attribution: 'Map data: © dl-de/by-2-0', - variant: 'de_basemapde_web_raster_farbe', - }, - variants: { - Color: 'de_basemapde_web_raster_farbe', - Grey: 'de_basemapde_web_raster_grau' - } - }, - CyclOSM: { - url: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', - options: { - maxZoom: 20, - attribution: 'CyclOSM | Map data: {attribution.OpenStreetMap}' - } - }, - Jawg: { - url: 'https://tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}', - options: { - attribution: - '© JawgMaps ' + - '{attribution.OpenStreetMap}', - minZoom: 0, - maxZoom: 22, - variant: 'jawg-streets', - // Get your own Jawg access token here : https://www.jawg.io/lab/ - // NB : this is a demonstration key that comes with no guarantee - accessToken: '', - }, - variants: { - Streets: 'jawg-streets', - Terrain: 'jawg-terrain', - Lagoon: 'jawg-lagoon', - Sunny: 'jawg-sunny', - Dark: 'jawg-dark', - Light: 'jawg-light', - Matrix: 'jawg-matrix' - } - }, - MapBox: { - url: 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}', - options: { - attribution: - '© Mapbox ' + - '{attribution.OpenStreetMap} ' + - 'Improve this map', - tileSize: 512, - maxZoom: 18, - zoomOffset: -1, - id: 'mapbox/streets-v11', - accessToken: '', - } - }, - MapTiler: { - url: 'https://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}', - options: { - attribution: - '© MapTiler © OpenStreetMap contributors', - variant: 'streets', - ext: 'png', - key: '', - tileSize: 512, - zoomOffset: -1, - minZoom: 0, - maxZoom: 21 - }, - variants: { - Streets: 'streets-v2', - Basic: 'basic-v2', - Bright: 'bright-v2', - Pastel: 'pastel', - Positron: 'positron', - Hybrid: { - options: { - variant: 'hybrid', - ext: 'jpg' - } - }, - Toner: 'toner-v2', - Topo: 'topo-v2', - Voyager: 'voyager-v2', - Ocean: 'ocean', - Backdrop: 'backdrop', - Dataviz: 'dataviz', - DatavizLight: 'dataviz-light', - DatavizDark: 'dataviz-dark', - Aquarelle: { - options: { - variant: 'aquarelle', - ext: 'webp' - } - }, - Landscape: 'landscape', - Openstreetmap: { - options: { - variant: 'openstreetmap', - ext: 'jpg' - } - }, - Outdoor: 'outdoor-v2', - Satellite: { - options: { - variant: 'satellite', - ext: 'jpg' - } - }, - Winter: 'winter-v2', - } - }, - TomTom: { - url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}', - options: { - variant: 'basic', - maxZoom: 22, - attribution: - '© 1992 - ' + new Date().getFullYear() + ' TomTom. ', - subdomains: 'abcd', - style: 'main', - ext: 'png', - apikey: '', - }, - variants: { - Basic: 'basic', - Hybrid: 'hybrid', - Labels: 'labels' - } - }, - Esri: { - url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}', - options: { - variant: 'World_Street_Map', - attribution: 'Tiles © Esri' - }, - variants: { - WorldStreetMap: { - options: { - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012' - } - }, - WorldTopoMap: { - options: { - variant: 'World_Topo_Map', - attribution: - '{attribution.Esri} — ' + - 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' - } - }, - WorldImagery: { - options: { - variant: 'World_Imagery', - attribution: - '{attribution.Esri} — ' + - 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' - } - }, - WorldTerrain: { - options: { - variant: 'World_Terrain_Base', - maxZoom: 13, - attribution: - '{attribution.Esri} — ' + - 'Source: USGS, Esri, TANA, DeLorme, and NPS' - } - }, - WorldShadedRelief: { - options: { - variant: 'World_Shaded_Relief', - maxZoom: 13, - attribution: '{attribution.Esri} — Source: Esri' - } - }, - WorldPhysical: { - options: { - variant: 'World_Physical_Map', - maxZoom: 8, - attribution: '{attribution.Esri} — Source: US National Park Service' - } - }, - OceanBasemap: { - options: { - variant: 'Ocean/World_Ocean_Base', - maxZoom: 13, - attribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri' - } - }, - NatGeoWorldMap: { - options: { - variant: 'NatGeo_World_Map', - maxZoom: 16, - attribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC' - } - }, - WorldGrayCanvas: { - options: { - variant: 'Canvas/World_Light_Gray_Base', - maxZoom: 16, - attribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ' - } - } - } - }, - OpenWeatherMap: { - url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}', - options: { - maxZoom: 19, - attribution: 'Map data © OpenWeatherMap', - apiKey: '', - opacity: 0.5 - }, - variants: { - Clouds: 'clouds', - CloudsClassic: 'clouds_cls', - Precipitation: 'precipitation', - PrecipitationClassic: 'precipitation_cls', - Rain: 'rain', - RainClassic: 'rain_cls', - Pressure: 'pressure', - PressureContour: 'pressure_cntr', - Wind: 'wind', - Temperature: 'temp', - Snow: 'snow' - } - }, - - HERE: { - - /* - * HERE maps API Version 3. - * documentation at: https://www.here.com/docs/bundle/raster-tile-api-developer-guide/page/README.html - * These basemaps are free, but you need an API key. Please sign up at - * https://platform.here.com/portal/ - * Subscription remains for free, pricing details can be found here: https://www.here.com/get-started/pricing - * Version 3 deprecates the app_id and app_code access in favor of apiKey - */ - url: - 'https://maps.hereapi.com/v3/base/mc/' + // new base url for HERE maptile v3 api - '{z}/{x}/{y}/{format}?style={variant}&size={size}' + // slightly modified parameters - '&apiKey={app_id}&lg={language}', // replacing app-id with apikey - options: { - attribution: - 'Map © 1987-' + new Date().getFullYear() + ' HERE', - subdomains: '1234', - mapID: 'newest', - apiKey: '', // switching from appid and appcode to apikey - base: 'base', - variant: 'explore.day', - maxZoom: 20, - type: 'maptile', - language: 'eng', - format: 'png8', - size: '256' - }, - variants: { - exploreDay: 'explore.day', - liteDay: 'lite.day', - logisticsDay: 'logistics.day', - topoDay: 'topo.day', - logisticsNight: 'logistics.night', - exploreNight: 'explore.night', - topoNight: 'topo.night', - liteNight: 'lite.night', - exploreSatelliteDay: 'explore.satellite.day', - liteSatelliteDay: 'lite.satellite.day', - logisticsSatelliteDay: 'logistics.satellite.day', - basicMap: { - options: { - type: 'basetile' - } - }, - mapLabels: { - options: { - type: 'labeltile', - format: 'png' - } - }, - trafficFlow: { - options: { - base: 'traffic', - type: 'flowtile' - } - }, - carnavDayGrey: 'carnav.day.grey', - hybridDay: { - options: { - base: 'aerial', - variant: 'hybrid.day' - } - }, - hybridDayMobile: { - options: { - base: 'aerial', - variant: 'hybrid.day.mobile' - } - }, - hybridDayTransit: { - options: { - base: 'aerial', - variant: 'hybrid.day.transit' - } - }, - hybridDayGrey: { - options: { - base: 'aerial', - variant: 'hybrid.grey.day' - } - }, - pedestrianDay: 'pedestrian.day', - pedestrianNight: 'pedestrian.night', - satelliteDay: { - options: { - base: 'aerial', - variant: 'satellite.day' - } - }, - terrainDay: { - options: { - base: 'aerial', - variant: 'terrain.day' - } - }, - terrainDayMobile: { - options: { - base: 'aerial', - variant: 'terrain.day.mobile' - } - } - } - }, - FreeMapSK: { - url: 'https://{s}.freemap.sk/T/{z}/{x}/{y}.jpeg', - options: { - minZoom: 8, - maxZoom: 16, - subdomains: 'abcd', - bounds: [[47.204642, 15.996093], [49.830896, 22.576904]], - attribution: - '{attribution.OpenStreetMap}, visualization CC-By-SA 2.0 Freemap.sk' - } - }, - MtbMap: { - url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', - options: { - attribution: - '{attribution.OpenStreetMap} & USGS' - } - }, - CartoDB: { - url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png', - options: { - attribution: '{attribution.OpenStreetMap} © CARTO', - subdomains: 'abcd', - maxZoom: 20, - variant: 'light_all' - }, - variants: { - Positron: 'light_all', - PositronNoLabels: 'light_nolabels', - PositronOnlyLabels: 'light_only_labels', - DarkMatter: 'dark_all', - DarkMatterNoLabels: 'dark_nolabels', - DarkMatterOnlyLabels: 'dark_only_labels', - Voyager: 'rastertiles/voyager', - VoyagerNoLabels: 'rastertiles/voyager_nolabels', - VoyagerOnlyLabels: 'rastertiles/voyager_only_labels', - VoyagerLabelsUnder: 'rastertiles/voyager_labels_under' - } - }, - HikeBike: { - url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 19, - attribution: '{attribution.OpenStreetMap}', - variant: 'hikebike' - }, - variants: { - HikeBike: {}, - HillShading: { - options: { - maxZoom: 15, - variant: 'hillshading' - } - } - } - }, - BasemapAT: { - url: 'https://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}', - options: { - maxZoom: 19, - attribution: 'Datenquelle: basemap.at', - type: 'normal', - format: 'png', - bounds: [[46.358770, 8.782379], [49.037872, 17.189532]], - variant: 'geolandbasemap' - }, - variants: { - basemap: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'geolandbasemap' - } - }, - grau: 'bmapgrau', - overlay: 'bmapoverlay', - terrain: { - options: { - variant: 'bmapgelaende', - type: 'grau', - format: 'jpeg' - } - }, - surface: { - options: { - variant: 'bmapoberflaeche', - type: 'grau', - format: 'jpeg' - } - }, - highdpi: { - options: { - variant: 'bmaphidpi', - format: 'jpeg' - } - }, - orthofoto: { - options: { - maxZoom: 20, // currently only in Vienna - variant: 'bmaporthofoto30cm', - format: 'jpeg' - } - } - } - }, - nlmaps: { - url: 'https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.png', - options: { - minZoom: 6, - maxZoom: 19, - bounds: [[50.5, 3.25], [54, 7.6]], - attribution: 'Kaartgegevens © Kadaster' - }, - variants: { - standaard: 'standaard', - pastel: 'pastel', - grijs: 'grijs', - water: 'water', - luchtfoto: { - url: 'https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg', - } - } - }, - NASAGIBS: { - url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}', - options: { - attribution: - 'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' + - '(ESDIS) with funding provided by NASA/HQ.', - bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]], - minZoom: 1, - maxZoom: 9, - format: 'jpg', - time: '', - tilematrixset: 'GoogleMapsCompatible_Level' - }, - variants: { - ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor', - ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367', - ViirsEarthAtNight2012: { - options: { - variant: 'VIIRS_CityLights_2012', - maxZoom: 8 - } - }, - ModisTerraLSTDay: { - options: { - variant: 'MODIS_Terra_Land_Surface_Temp_Day', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - }, - ModisTerraSnowCover: { - options: { - variant: 'MODIS_Terra_NDSI_Snow_Cover', - format: 'png', - maxZoom: 8, - opacity: 0.75 - } - }, - ModisTerraAOD: { - options: { - variant: 'MODIS_Terra_Aerosol', - format: 'png', - maxZoom: 6, - opacity: 0.75 - } - }, - ModisTerraChlorophyll: { - options: { - variant: 'MODIS_Terra_L2_Chlorophyll_A', - format: 'png', - maxZoom: 7, - opacity: 0.75 - } - } - } - }, - NLS: { - // NLS maps are copyright National library of Scotland. - // http://maps.nls.uk/projects/subscription-api - // Please contact NLS for anything other than non-commercial low volume usage - // - // Map sources: Ordnance Survey 1:1m to 1:63K, 1880s-1961 - // z0-9 - 1:1m - // z10-11 - quarter inch (1:253440) - // z12-18 - one inch (1:63360) - url: 'https://api.maptiler.com/tiles/{variant}/{z}/{x}/{y}.jpg?key={apikey}', - options: { - attribution: 'National Library of Scotland Historic Maps', - bounds: [[49.6, -12], [61.7, 3]], - minZoom: 1, - maxZoom: 18, - apikey: '' - }, - variants: { - osgb63k1885: 'uk-osgb63k1885', - osgb1888: 'uk-osgb1888', - osgb10k1888: 'uk-osgb10k1888', - osgb1919: 'uk-osgb1919', - osgb25k1937: 'uk-osgb25k1937', - osgb63k1955: 'uk-osgb63k1955', - oslondon1k1893: 'uk-oslondon1k1893' - } - }, - JusticeMap: { - // Justice Map (http://www.justicemap.org/) - // Visualize race and income data for your community, county and country. - // Includes tools for data journalists, bloggers and community activists. - url: 'https://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png', - options: { - attribution: 'Justice Map', - // one of 'county', 'tract', 'block' - size: 'county', - // Bounds for USA, including Alaska and Hawaii - bounds: [[14, -180], [72, -56]] - }, - variants: { - income: 'income', - americanIndian: 'indian', - asian: 'asian', - black: 'black', - hispanic: 'hispanic', - multi: 'multi', - nonWhite: 'nonwhite', - white: 'white', - plurality: 'plural' - } - }, - GeoportailFrance: { - url: 'https://data.geopf.fr/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', - options: { - attribution: 'Geoportail France', - bounds: [[-75, -180], [81, 180]], - minZoom: 2, - maxZoom: 18, - format: 'image/png', - style: 'normal', - variant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2' - }, - variants: { - plan: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', - parcels: { - options: { - variant: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS', - style: 'PCI vecteur', - maxZoom: 20 - } - }, - orthos: { - options: { - maxZoom: 19, - format: 'image/jpeg', - variant: 'ORTHOIMAGERY.ORTHOPHOTOS' - } - } - } - }, - OneMapSG: { - url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png', - options: { - variant: 'Default', - minZoom: 11, - maxZoom: 18, - bounds: [[1.56073, 104.11475], [1.16, 103.502]], - attribution: ' New OneMap | Map data © contributors, Singapore Land Authority' - }, - variants: { - Default: 'Default', - Night: 'Night', - Original: 'Original', - Grey: 'Grey', - LandLot: 'LandLot' - } - }, - USGS: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', - options: { - maxZoom: 20, - attribution: 'Tiles courtesy of the U.S. Geological Survey' - }, - variants: { - USTopo: {}, - USImagery: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}' - }, - USImageryTopo: { - url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}' - } - } - }, - WaymarkedTrails: { - url: 'https://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.png', - options: { - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © waymarkedtrails.org (CC-BY-SA)' - }, - variants: { - hiking: 'hiking', - cycling: 'cycling', - mtb: 'mtb', - slopes: 'slopes', - riding: 'riding', - skating: 'skating' - } - }, - OpenAIP: { - url: 'https://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}', - options: { - attribution: 'openAIP Data (CC-BY-NC-SA)', - ext: 'png', - minZoom: 4, - maxZoom: 14, - tms: true, - detectRetina: true, - subdomains: '12' - } - }, - OpenSnowMap: { - url: 'https://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.png', - options: { - minZoom: 9, - maxZoom: 18, - attribution: 'Map data: {attribution.OpenStreetMap} & ODbL, © www.opensnowmap.org CC-BY-SA' - }, - variants: { - pistes: 'pistes', - } - }, - AzureMaps: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}' + - '&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.', - apiVersion: '2.0', - variant: 'microsoft.imagery', - subscriptionKey: '', - language: 'en-US', - }, - variants: { - MicrosoftImagery: 'microsoft.imagery', - MicrosoftBaseDarkGrey: 'microsoft.base.darkgrey', - MicrosoftBaseRoad: 'microsoft.base.road', - MicrosoftBaseHybridRoad: 'microsoft.base.hybrid.road', - MicrosoftTerraMain: 'microsoft.terra.main', - MicrosoftWeatherInfraredMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}' + - '&tilesetId={variant}&x={x}&y={y}&zoom={z}' + - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', - variant: 'microsoft.weather.infrared.main', - }, - }, - MicrosoftWeatherRadarMain: { - url: - 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}' + - '&tilesetId={variant}&x={x}&y={y}&zoom={z}' + - '&timeStamp={timeStamp}&language={language}' + - '&subscription-key={subscriptionKey}', - options: { - timeStamp: '2021-05-08T09:03:00Z', - attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', - variant: 'microsoft.weather.radar.main', - }, - } - }, - }, - SwissFederalGeoportal: { - url: 'https://wmts.geo.admin.ch/1.0.0/{variant}/default/current/3857/{z}/{x}/{y}.jpeg', - options: { - attribution: '© swisstopo', - minZoom: 2, - maxZoom: 18, - bounds: [[45.398181, 5.140242], [48.230651, 11.47757]] - }, - variants: { - NationalMapColor: 'ch.swisstopo.pixelkarte-farbe', - NationalMapGrey: 'ch.swisstopo.pixelkarte-grau', - SWISSIMAGE: { - options: { - variant: 'ch.swisstopo.swissimage', - maxZoom: 19 - } - } - } - }, - TopPlusOpen: { - url: 'http://sgx.geodatenzentrum.de/wmts_topplus_open/tile/1.0.0/{variant}/default/WEBMERCATOR/{z}/{y}/{x}.png', - options: { - maxZoom: 18, - attribution: 'Map data: © dl-de/by-2-0', - variant: 'web', - }, - variants: { - Color: 'web', - Grey: 'web_grau' - } - } - }; - - L.tileLayer.provider = function(provider, options) { - return new L.TileLayer.Provider(provider, options); - }; - - return L; -})); diff --git a/docs/articles/Articles/Applications_files/leaflet-providers-plugin-2.2.3/leaflet-providers-plugin.js b/docs/articles/Articles/Applications_files/leaflet-providers-plugin-2.2.3/leaflet-providers-plugin.js deleted file mode 100644 index 82cd630..0000000 --- a/docs/articles/Articles/Applications_files/leaflet-providers-plugin-2.2.3/leaflet-providers-plugin.js +++ /dev/null @@ -1,3 +0,0 @@ -LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { - this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); -}; diff --git a/docs/articles/Articles/Applications_files/leafletfix-1.0.0/leafletfix.css b/docs/articles/Articles/Applications_files/leafletfix-1.0.0/leafletfix.css deleted file mode 100644 index 466d868..0000000 --- a/docs/articles/Articles/Applications_files/leafletfix-1.0.0/leafletfix.css +++ /dev/null @@ -1,36 +0,0 @@ -/* Work around CSS properties introduced on img by bootstrap */ -img.leaflet-tile { - padding: 0; - margin: 0; - border-radius: 0; - border: none; -} -.leaflet .info { - padding: 6px 8px; - font: 14px/16px Arial, Helvetica, sans-serif; - background: white; - background: rgba(255,255,255,0.8); - box-shadow: 0 0 15px rgba(0,0,0,0.2); - border-radius: 5px; -} -.leaflet .legend { - line-height: 18px; - color: #555; -} -.leaflet .legend svg text { - fill: #555; -} -.leaflet .legend svg line { - stroke: #555; -} -.leaflet .legend i { - width: 18px; - height: 18px; - margin-right: 4px; - opacity: 0.7; - display: inline-block; - vertical-align: top; - /*For IE 7*/ - zoom: 1; - *display: inline; -} diff --git a/docs/articles/Articles/Applications_files/mapviewCSS-0.0.1/mapview-popup.css b/docs/articles/Articles/Applications_files/mapviewCSS-0.0.1/mapview-popup.css deleted file mode 100644 index ead6a8e..0000000 --- a/docs/articles/Articles/Applications_files/mapviewCSS-0.0.1/mapview-popup.css +++ /dev/null @@ -1,102 +0,0 @@ -/* table class css */ -table.mapview-popup { - overflow: scroll; - width: auto; - height: auto; - border-collapse: collapse; -} - -/* -table.mapview-popup tr:first-child td { - background: #A8E6A8; -} -*/ - -table.mapview-popup tr:nth-child(even) { - background: #D1E0FF; -} - -table.mapview-popup tr:nth-child(odd) { - background: #ebf1ff; -} - -table.mapview-popup, th, td { - border-bottom: 1px solid #ffffff; -} - -/* -table.tab tr:hover { - background: #00ffff; -} -*/ - - -/* general leaflet popup css '*/ -.leaflet-popup-content { - margin: 1px 1px 1px 1px; - line-height: 1.5; - overflow-y: auto; - overflow-x: scoll; -} - -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: -20px; - padding: 3px 0 0 0; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - font-weight: bold; - color: #c3c3c3; - text-decoration: none; - background: transparent; -} - -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; -} - -.leaflet-popup-content-wrapper, .leaflet-popup-tip { - padding: 1px; - -webkit-border-radius: 0; - border-radius: 0; - background: #ffffff; /*#4c4c4c;*/ - box-shadow: 0 3px 14px rgba(0,0,0,0.4); -} - - -div::-webkit-scrollbar { - width: 5px; - height: 5px; -} -div::-webkit-scrollbar-button { - width: 0; - height: 0; -} -div::-webkit-scrollbar-thumb { - background: #666666; - border: 0 none #ffffff; - border-radius: 0; -} -div::-webkit-scrollbar-thumb:hover { - background: #333333; -} -div::-webkit-scrollbar-thumb:active { - background: #333333; -} -div::-webkit-scrollbar-track { - background: #e1e1e1; - border: 0 none #ffffff; - border-radius: 50px; -} -div::-webkit-scrollbar-track:hover { - background: #e1e1e1; -} -div::-webkit-scrollbar-track:active { - background: #e1e1e1; -} -div::-webkit-scrollbar-corner { - background: transparent; -} diff --git a/docs/articles/Articles/Applications_files/mapviewCSS-0.0.1/mapview.css b/docs/articles/Articles/Applications_files/mapviewCSS-0.0.1/mapview.css deleted file mode 100644 index ac08791..0000000 --- a/docs/articles/Articles/Applications_files/mapviewCSS-0.0.1/mapview.css +++ /dev/null @@ -1 +0,0 @@ -.leaflet-control br {clear: both;} diff --git a/docs/articles/Articles/Applications_files/proj4-2.6.2/proj4.min.js b/docs/articles/Articles/Applications_files/proj4-2.6.2/proj4.min.js deleted file mode 100644 index 99865a5..0000000 --- a/docs/articles/Articles/Applications_files/proj4-2.6.2/proj4.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):t.proj4=s()}(this,function(){"use strict";function k(t,s){if(t[s])return t[s];for(var i,a=Object.keys(t),h=s.toLowerCase().replace(H,""),e=-1;++eMath.PI&&(r-=2*Math.PI),h=Math.sin(o),n=Math.cos(o),e=h*h,{x:((a=i/Math.sqrt(1-s*e))+l)*n*Math.cos(r),y:(a+l)*n*Math.sin(r),z:(a*(1-s)+l)*h}}function c(t,s,i,a){var h,e,n,r,o,l,M,c,u,f,m,p,d,y=t.x,_=t.y,x=t.z?t.z:0,g=Math.sqrt(y*y+_*_),b=Math.sqrt(y*y+_*_+x*x);if(g/i<1e-12){if(p=0,b/i<1e-12)return d=-a,{x:t.x,y:t.y,z:t.z}}else p=Math.atan2(_,y);for(h=x/b,l=(e=g/b)*(1-s)*(n=1/Math.sqrt(1-s*(2-s)*e*e)),M=h*n,m=0;m++,r=s*(o=i/Math.sqrt(1-s*M*M))/(o+(d=g*l+x*M-o*(1-s*M*M))),f=(u=h*(n=1/Math.sqrt(1-r*(2-r)*e*e)))*l-(c=e*(1-r)*n)*M,l=c,M=u,1e-24=this.text.length)return;t=this.text[this.place++]}switch(this.state){case K:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},e.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if($.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},e.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=K)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=K,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},e.prototype.number=function(t){if(!tt.test(t)){if($.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},e.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},e.prototype.keyword=function(t){if(Y.test(t))this.word+=t;else{if("["===t){var s=[];return s.push(this.word),this.level++,null===this.root?this.root=s:this.currentObject.push(s),this.stack.push(this.currentObject),this.currentObject=s,void(this.state=K)}if(!$.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},e.prototype.neutral=function(t){if(Z.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(tt.test(t))return this.word=t,void(this.state=3);if(!$.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},e.prototype.output=function(){for(;this.placeD?Math.tan(i):0,c=Math.pow(M,2),u=Math.pow(c,2),f=1-this.es*Math.pow(h,2);n/=Math.sqrt(f);var m=Gt(i,h,e,this.en),p=this.a*(this.k0*n*(1+r/6*(1-c+o+r/20*(5-18*c+u+14*o-58*c*o+r/42*(61+179*u-u*c-479*c)))))+this.x0,d=this.a*(this.k0*(m-this.ml0+h*a*n/2*(1+r/12*(5-c+9*o+4*l+r/30*(61+u-58*c+270*o-330*c*o+r/56*(1385+543*u-u*c-3111*c))))))+this.y0}else{var y=e*Math.sin(a);if(Math.abs(Math.abs(y)-1)D?Math.tan(s):0,e=this.ep2*Math.pow(a,2),n=Math.pow(e,2),r=Math.pow(h,2),o=Math.pow(r,2),l=1-this.es*Math.pow(i,2),M=_*Math.sqrt(l)/this.k0,u=s-(l*=h)*(c=Math.pow(M,2))/(1-this.es)*.5*(1-c/12*(5+3*r-9*e*r+e-4*n-c/30*(61+90*r-252*e*r+45*o+46*e-c/56*(1385+3633*r+4095*o+1574*o*r)))),nt(this.long0+M*(1-c/6*(1+2*r+e-c/20*(5+28*r+24*o+8*e*r+6*e-c/42*(61+662*r+1320*o+720*o*r))))/a)):(u=z*et(x),0)):(p=.5*((m=Math.exp(_/this.k0))-1/m),d=this.lat0+x/this.k0,y=Math.cos(d),l=Math.sqrt((1-Math.pow(y,2))/(1+Math.pow(p,2))),u=Math.asin(l),x<0&&(u=-u),0==p&&0===y?0:nt(Math.atan2(p,y)+this.long0)),t.x=f,t.y=u,t},names:["Transverse_Mercator","Transverse Mercator","tmerc"]},is={init:function(){if(void 0===this.es||this.es<=0)throw new Error("incorrect elliptical usage");this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),s=t/(2-t),i=s;this.cgb[0]=s*(2+s*(-2/3+s*(s*(116/45+s*(26/45+-2854/675*s))-2))),this.cbg[0]=s*(s*(2/3+s*(4/3+s*(-82/45+s*(32/45+4642/4725*s))))-2),i*=s,this.cgb[1]=i*(7/3+s*(s*(-227/45+s*(2704/315+2323/945*s))-1.6)),this.cbg[1]=i*(5/3+s*(-16/15+s*(-13/9+s*(904/315+-1522/945*s)))),i*=s,this.cgb[2]=i*(56/15+s*(-136/35+s*(-1262/105+73814/2835*s))),this.cbg[2]=i*(-26/15+s*(34/21+s*(1.6+-12686/2835*s))),i*=s,this.cgb[3]=i*(4279/630+s*(-332/35+-399572/14175*s)),this.cbg[3]=i*(1237/630+s*(-24832/14175*s-2.4)),i*=s,this.cgb[4]=i*(4174/315+-144838/6237*s),this.cbg[4]=i*(-734/315+109598/31185*s),i*=s,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(s,2),this.Qn=this.k0/(1+s)*(1+i*(.25+i*(1/64+i/256))),this.utg[0]=s*(s*(2/3+s*(-37/96+s*(1/360+s*(81/512+-96199/604800*s))))-.5),this.gtu[0]=s*(.5+s*(-2/3+s*(5/16+s*(41/180+s*(-127/288+7891/37800*s))))),this.utg[1]=i*(-1/48+s*(-1/15+s*(437/1440+s*(-46/105+1118711/3870720*s)))),this.gtu[1]=i*(13/48+s*(s*(557/1440+s*(281/630+-1983433/1935360*s))-.6)),i*=s,this.utg[2]=i*(-17/480+s*(37/840+s*(209/4480+-5569/90720*s))),this.gtu[2]=i*(61/240+s*(-103/140+s*(15061/26880+167603/181440*s))),i*=s,this.utg[3]=i*(-4397/161280+s*(11/504+830251/7257600*s)),this.gtu[3]=i*(49561/161280+s*(-179/168+6601661/7257600*s)),i*=s,this.utg[4]=i*(-4583/161280+108847/3991680*s),this.gtu[4]=i*(34729/80640+-3418889/1995840*s),i*=s,this.utg[5]=-.03233083094085698*i,this.gtu[5]=.6650675310896665*i;var a=Tt(this.cbg,this.lat0);this.Zb=-this.Qn*(a+function(t,s){for(var i,a=2*Math.cos(s),h=t.length-1,e=t[h],n=0;0<=--h;)i=a*e-n+t[h],n=e,e=i;return Math.sin(s)*i}(this.gtu,2*a))},forward:function(t){var s=nt(t.x-this.long0),i=t.y,i=Tt(this.cbg,i),a=Math.sin(i),h=Math.cos(i),e=Math.sin(s),n=Math.cos(s);i=Math.atan2(a,n*h),s=Math.atan2(e*h,Rt(a,h*n)),s=Lt(Math.tan(s));var r,o,l=Dt(this.gtu,2*i,2*s);return i+=l[0],s+=l[1],o=Math.abs(s)<=2.623395162778?(r=this.a*(this.Qn*s)+this.x0,this.a*(this.Qn*i+this.Zb)+this.y0):r=1/0,t.x=r,t.y=o,t},inverse:function(t){var s,i,a,h,e,n,r,o=(t.x-this.x0)*(1/this.a),l=(t.y-this.y0)*(1/this.a);return l=(l-this.Zb)/this.Qn,o/=this.Qn,r=Math.abs(o)<=2.623395162778?(l+=(s=Dt(this.utg,2*l,2*o))[0],o+=s[1],o=Math.atan(zt(o)),i=Math.sin(l),a=Math.cos(l),h=Math.sin(o),e=Math.cos(o),l=Math.atan2(i*e,Rt(h,e*a)),o=Math.atan2(h,e*a),n=nt(o+this.long0),Tt(this.cgb,l)):n=1/0,t.x=n,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc"]},as={init:function(){var t=function(t,s){if(void 0===t){if((t=Math.floor(30*(nt(s)+Math.PI)/Math.PI)+1)<0)return 0;if(60D?this.ns=Math.log(a/r)/Math.log(h/o):this.ns=s,isNaN(this.ns)&&(this.ns=s),this.f0=a/(this.ns*Math.pow(h,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic"))},forward:function(t){var s=t.x,i=t.y;Math.abs(2*Math.abs(i)-Math.PI)<=D&&(i=et(i)*(z-2*D));var a,h,e=Math.abs(Math.abs(i)-z);if(DD?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var s=t.x,i=t.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var a=Vt(this.e3,this.sin_phi,this.cos_phi),h=this.a*Math.sqrt(this.c-this.ns0*a)/this.ns0,e=this.ns0*nt(s-this.long0),n=h*Math.sin(e)+this.x0,r=this.rh-h*Math.cos(e)+this.y0;return t.x=n,t.y=r,t},inverse:function(t){var s,i,a,h,e,n;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,a=0<=this.ns0?(s=Math.sqrt(t.x*t.x+t.y*t.y),1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),-1),(h=0)!==s&&(h=Math.atan2(a*t.x,a*t.y)),a=s*this.ns0/this.a,n=this.sphere?Math.asin((this.c-a*a)/(2*this.ns0)):(i=(this.c-a*a)/this.ns0,this.phi1z(this.e3,i)),e=nt(h/this.ns0+this.long0),t.x=e,t.y=n,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,s){var i,a,h,e,n=Zt(.5*s);if(tMath.PI&&(a=Math.PI),i=(2*s+Math.sin(2*s))/Math.PI,12*z*this.a)return;return i=s/this.a,a=Math.sin(i),h=Math.cos(i),e=this.long0,Math.abs(s)<=D?n=this.lat0:(n=Zt(h*this.sin_p12+t.y*a*this.cos_p12/s),r=Math.abs(this.lat0)-z,e=nt(Math.abs(r)<=D?0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y):this.long0+Math.atan2(t.x*a,s*this.cos_p12*h-t.y*this.sin_p12*a))),t.x=e,t.y=n,t}return o=Ft(this.es),l=Qt(this.es),M=Wt(this.es),c=Xt(this.es),Math.abs(this.sin_p12-1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((u-s)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,-1*t.y))):Math.abs(this.sin_p12+1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((s-u)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,t.y))):(s=Math.sqrt(t.x*t.x+t.y*t.y),p=Math.atan2(t.x,t.y),f=Ht(this.a,this.e,this.sin_p12),d=Math.cos(p),_=-(y=this.e*this.cos_p12*d)*y/(1-this.es),x=3*this.es*(1-_)*this.sin_p12*this.cos_p12*d/(1-this.es),v=1-_*(b=(g=s/f)-_*(1+_)*Math.pow(g,3)/6-x*(1+3*_)*Math.pow(g,4)/24)*b/2-g*b*b*b/6,m=Math.asin(this.sin_p12*Math.cos(b)+this.cos_p12*Math.sin(b)*d),e=nt(this.long0+Math.asin(Math.sin(p)*Math.sin(b)/Math.cos(m))),w=Math.sin(m),n=Math.atan2((w-this.es*v*this.sin_p12)*Math.tan(m),w*(1-this.es))),t.x=e,t.y=n,t},names:["Azimuthal_Equidistant","aeqd"]},Ps={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var s,i,a,h=t.x,e=t.y,n=nt(h-this.long0),r=Math.sin(e),o=Math.cos(e),l=Math.cos(n);return(0<(s=this.sin_p14*r+this.cos_p14*o*l)||Math.abs(s)<=D)&&(i=this.a*o*Math.sin(n),a=this.y0+this.a*(this.cos_p14*r-this.sin_p14*o*l)),t.x=i,t.y=a,t},inverse:function(t){var s,i,a,h,e,n,r;return t.x-=this.x0,t.y-=this.y0,s=Math.sqrt(t.x*t.x+t.y*t.y),i=Zt(s/this.a),a=Math.sin(i),h=Math.cos(i),n=this.long0,Math.abs(s)<=D?r=this.lat0:(r=Zt(h*this.sin_p14+t.y*a*this.cos_p14/s),e=Math.abs(this.lat0)-z,n=Math.abs(e)<=D?nt(0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y)):nt(this.long0+Math.atan2(t.x*a,s*this.cos_p14*h-t.y*this.sin_p14*a))),t.x=n,t.y=r,t},names:["ortho"]},Ss=1,Ns=2,ks=3,Es=4,qs=5,Is=6,Os=1,As=2,Gs=3,js=4,zs={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=z-U/2?this.face=qs:this.lat0<=-(z-U/2)?this.face=Is:Math.abs(this.long0)<=U?this.face=Ss:Math.abs(this.long0)<=z+U?this.face=0=Math.abs(t.y)?y.value=Os:0<=t.y&&t.y>=Math.abs(t.x)?(y.value=As,s-=z):t.x<0&&-t.x>=Math.abs(t.y)?(y.value=Gs,s=s<0?s+Q:s-Q):(y.value=js,s+=z),c=Q/12*Math.tan(s),e=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),n=Math.atan(e),(r=1-(a=Math.cos(s))*a*(h=Math.tan(i))*h*(1-Math.cos(Math.atan(1/Math.cos(n)))))<-1?r=-1:1a.y)--s;else{if(!(Ls[s+1][0]<=a.y))break;++s}var h=Ls[s],i=function(t,s,i,a){for(var h=s;a;--a){var e=t(h);if(h-=e,Math.abs(e)Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/docs/articles/Articles/Applications_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css b/docs/articles/Articles/Applications_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css deleted file mode 100644 index c10d2f1..0000000 --- a/docs/articles/Articles/Applications_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css +++ /dev/null @@ -1,41 +0,0 @@ -.leaflet-tooltip.leaflet-tooltip-text-only, -.leaflet-tooltip.leaflet-tooltip-text-only:before, -.leaflet-tooltip.leaflet-tooltip-text-only:after { - background: none; - border: none; - box-shadow: none; -} - -.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-left { - margin-left: 5px; -} - -.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-right { - margin-left: -5px; -} - -.leaflet-tooltip:after { - border-right: 6px solid transparent; - /* right: -16px; */ -} - -.leaflet-popup-pane .leaflet-popup-tip-container { - /* when the tooltip container is clicked, it is closed */ - pointer-events: all; - /* tooltips should display the "hand" icon, just like .leaflet-interactive*/ - cursor: pointer; -} - -/* have the widget be displayed in the right 'layer' */ -.leaflet-map-pane { - z-index: auto; -} - -/* Add missing rule from leaflet for img. -This complete existing leaflet.css. -Fix for https://github.com/rstudio/rmarkdown/issues/1949 */ -.leaflet-container .leaflet-right-pane img, -.leaflet-container .leaflet-left-pane img { - max-width: none !important; - max-height: none !important; -} diff --git a/docs/articles/Articles/Introduction.html b/docs/articles/Articles/Introduction.html deleted file mode 100644 index 62a3602..0000000 --- a/docs/articles/Articles/Introduction.html +++ /dev/null @@ -1,2869 +0,0 @@ - - - - - - - -Getting Started • StreamCatTools - - - - - - - - - - - - - Skip to contents - - -
- - - - -
-
- - - -
-

StreamCat API -

-

We can pull data into R from the StreamCat -API by simply passing a URL to extract from json. We have to -hard-wire parameters though and are limited in the number of records -returned through a GET request.

-
-res <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics?name=fert&areaOfInterest=cat&comid=179")
-res$items
-
-
-

List API parameters -

-

List StreamCat parameters: Get a list of available StreamCat values -for certain parameters using the sc_get_params function via -the API

-
-library(StreamCatTools)
-region_params <- sc_get_params(param='aoi')
-
-name_params <- sc_get_params(param='metric_names')
-
-print(paste0('region parameters are: ', paste(region_params,collapse = ', ')))
-#> [1] "region parameters are: cat, catrp100, other, ws, wsrp100"
-print(paste0('A selection of available StreamCat metrics include: ',paste(name_params[1:10],collapse = ', ')))
-#> [1] "A selection of available StreamCat metrics include: agkffact, al2o3, bankfulldepth, bankfullwidth, bfi, canaldens, cao, cbnf, chem, clay"
-

We can also see what metrics are available for what areas of interest -and what years using the sc_get_params function (which -returns a tibble of information about StreamCat metrics):

-
-var_info <- sc_get_params(param='variable_info')
-head(var_info)
-#> # A tibble: 6 × 13
-#>   category     metric aoi   year  short_description long_description units  dsid
-#>   <chr>        <chr>  <chr> <chr> <chr>             <chr>            <chr> <dbl>
-#> 1 Anthropogen… NABD_… Cat,… NA    NABD Dam Density  Density of geor… Coun…    33
-#> 2 Anthropogen… NABD_… Cat,… NA    NABD NID Reservo… Volume all rese… Cubi…    33
-#> 3 Anthropogen… NABD_… Cat,… NA    NABD Normal Rese… Volume all rese… Cubi…    33
-#> 4 Natural      Preci… Cat,… NA    Surplus Precipit… This dataset re… Kilo…    75
-#> 5 Soils        agkff… Cat,… NA    Ag Soil Erodibil… Mean of STATSGO… Unit…    28
-#> 6 Natural      al2o3… Cat,… NA    Mean Lithologica… Mean % of litho… Perc…    13
-#> # ℹ 5 more variables: dataset <chr>, source_name <chr>, source_URL <chr>,
-#> #   ACTIVE <dbl>, DSNAME <chr>
-

We can look up the display name or names for a metric using the -sc_fullname function via the API

-
-metric='pcthbwet2011'
-fullname <- sc_fullname(metric)
-fullname
-#> [1] "Herbaceous Wetland Percentage 2011"
-
-metric='pctdecid2019,fert'
-fullname <- sc_fullname(metric)
-fullname
-#> character(0)
-

We can additionally get a data frame of state FIPS codes, -abbreviations and names, and the same information for counties as well -using sc_get_params:

-
-states <- sc_get_params(param='state')
-head(states)
-#>    st_fips st_abbr     st_name
-#> 30      01      AL     Alabama
-#> 8       04      AZ     Arizona
-#> 25      05      AR    Arkansas
-#> 6       06      CA  California
-#> 15      08      CO    Colorado
-#> 50      09      CT Connecticut
-
-counties <- sc_get_params(param='county')
-head(counties)
-#>      fips state    county_name
-#> 752 01001    AL Autauga County
-#> 713 01003    AL Baldwin County
-#> 655 01005    AL Barbour County
-#> 755 01007    AL    Bibb County
-#> 748 01009    AL  Blount County
-#> 656 01011    AL Bullock County
-
-
-

Filter metric information by criteria -

-

We can also filter metric names and information by the metric -year(s), the indicator categories for metrics, the metric data set -names, or the Areas of Interest the metrics are available for.

-
-metrics <- sc_get_metric_names(category = c('Deposition','Climate'),aoi=c('Cat','Ws'))
-head(metrics)
-#> # A tibble: 6 × 9
-#>   Category Metric AOI   Year  Short_Name Metric_Description Units Source Dataset
-#>   <chr>    <chr>  <chr> <chr> <chr>      <chr>              <chr> <chr>  <chr>  
-#> 1 Climate  bfi[A… Cat,… NA    Base Flow… Base flow is the … Perc… USGS … Base F…
-#> 2 Deposit… inorg… Cat,… 2008  Mean Annu… Annual gradient m… Kilo… NADP   NADP   
-#> 3 Deposit… nh4[Y… Cat,… 2008  Mean annu… Annual gradient m… Kilo… NADP   NADP   
-#> 4 Deposit… no3[Y… Cat,… 2008  Mean Annu… Annual gradient m… Kilo… NADP   NADP   
-#> 5 Climate  preci… Cat,… NA    30-year M… PRISM climate dat… Mill… PRISM  PRISM  
-#> 6 Climate  preci… Cat,… 1991… 30-year M… PRISM climate dat… Mill… PRISM  PRISM
-
-
-

Get data for COMIDs -

-

In this example we access several variables, for several areas of -interest, and for several COMIDs using the sc_get_data -function. Loads data into a tibble we can view.

-
-df <- sc_get_data(metric='pcturbmd2006,damdens,tridens', aoi='rp100cat,cat,ws', comid='179,1337,1337420')
-knitr::kable(df)
- --------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidtridenswsdamdenscatpcturbmd2006cattridenscatpcturbmd2006wsdamdensws
179000.0000.000.0000
1337000.0700.070.0000
1337420000.0000.010.0329
-
-
-

Get data for county -

-

In this example we access a couple variables at the watershed scale -for the area of interest of a county (Benton County in this case) using -the sc_get_data function.

-
-df <- sc_get_data(metric='pctwdwet2006', aoi='ws', county='41003')
-knitr::kable(head(df))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctwdwet2006ws
237627611.72
237628350.64
237628590.22
237629151.14
237629470.50
237629591.14
-
-
-

Get all metrics for COMIDs or an Area of Interest -

-

We can also get all StreamCat metrics for a set of COMIDs or an area -of interest. Please do not request metric=‘all’ and aoi=‘conus’ -in order not to overload requests to the server. Requesting metric=‘all’ -for a state or multiple states or hydroregions will also take a long -time to process.

-
-df <- sc_get_data(comid='179', aoi='cat', metric='all')
-knitr::kable(head(df))
- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctburnarea1984catpctburnarea1985catpctburnarea1986catpctburnarea1987catpctmodsev1993catpcthighsev1993catpctincvegresp1993catpctnonprocmask1993catpctundsev1996catpctlowsev1996catpctburnarea1988catpctburnarea1989catpctburnarea1990catpctburnarea1991catpctburnarea1992catpctburnarea1993catpctburnarea1994catpctburnarea1995catpctburnarea1996catpctburnarea1997catpctburnarea1998catpctburnarea1999catpctburnarea2000catpctburnarea2001catpctburnarea2002catpctburnarea2003catpctburnarea2004catpctburnarea2005catpctburnarea2006catpctburnarea2007catpctburnarea2008catpctburnarea2009catpctburnarea2010catpctburnarea2011catpctburnarea2012catpctburnarea2013catpctburnarea2014catpctburnarea2015catpctburnarea2016catpctburnarea2017catpctburnarea2018catpctlowsev1993catpctmodsev1996catpcthighsev1996catpctincvegresp1996catpctnonprocmask1996catpctundsev1998catpctlowsev1998catpctmodsev1998catpcthighsev1998catpctincvegresp1998catpctnonprocmask1998catpctundsev2004catpctlowsev2004catpctmodsev2004catpcthighsev2004catpctincvegresp2004catpctnonprocmask2004catpctundsev2007catpctlowsev2007catpctmodsev2007catpcthighsev2007catpctincvegresp2007catpctnonprocmask2007catpctundsev2008catpctlowsev2008catpctmodsev2008catpcthighsev2008catpctincvegresp2008catpctnonprocmask2008catpctundsev2010catpctlowsev2010catpctmodsev2010catpcthighsev2010catpctincvegresp2010catpctnonprocmask2010catpctundsev2011catpctlowsev2011catpctmodsev2011catpcthighsev2011catpctincvegresp2011catpctnonprocmask2011catpctundsev2016catpctlowsev2016catpctundsev1984catpctlowsev1984catpctmodsev1984catpcthighsev1984catpctincvegresp1984catpctnonprocmask1984catsepticcatpctundsev1986catpctlowsev1986catpctmodsev1986catpcthighsev1986catpctincvegresp1986catpctnonprocmask1986catpctundsev1989catpctlowsev1989catpctmodsev1989catpcthighsev1989catpctincvegresp1989catpctnonprocmask1989catpctundsev1994catpctlowsev1994catpctmodsev1994catpcthighsev1994catpctincvegresp1994catpctnonprocmask1994catpctundsev1997catpctlowsev1997catpctmodsev1997catpcthighsev1997catpctincvegresp1997catpctnonprocmask1997catpctundsev2001catpctlowsev2001catpctmodsev2001catpcthighsev2001catpctincvegresp2001catpctnonprocmask2001catpctundsev2009catpctlowsev2009catpctmodsev2009catpcthighsev2009catpctincvegresp2009catpctnonprocmask2009catpctundsev2012catpctlowsev2012catpctmodsev2012catpcthighsev2012catpctincvegresp2012catpctnonprocmask2012catpctundsev2018catpctlowsev2018catpctmodsev2018catpcthighsev2018catpctincvegresp2018catpctnonprocmask2018catpctagslphigh2006catpctagslpmid2008catpctagslpmid2004catpctagslphigh2004catpctagslpmid2006catpctagslphigh2008catpctagslpmid2011catpctagslphigh2011catpctagdrainagecatnsurpcatnanicatpctbl2008catpctconif2008catpctcrop2008catpctdecid2008catpctgrs2008catpcthay2008catpcthbwet2008catpctice2008catpctmxfst2008catpctow2008catpctshrb2008catpcturbhi2008catpcturblo2008catpcturbmd2008catpcturbop2008catpctwdwet2008catpctundsev2006catpctlowsev2006catpctmodsev2006catpcthighsev2006catpctincvegresp2006catpctnonprocmask2006catrockncatpctundsev2015catpctlowsev2015catpctmodsev2015catpcthighsev2015catpctincvegresp2015catpctnonprocmask2015catwdrw_ldcatpctagslpmid2001catpctagslphigh2001catpctimp2001catpctimp2004catpctimp2006catpctimp2008catpctimp2011catpctimp2013catpctimp2016catpctimp2019catpctbl2004catpctconif2004catpctcrop2004catpctdecid2004catpctgrs2004catpcthay2004catpcthbwet2004catpctice2004catpctmxfst2004catpctow2004catpctshrb2004catpcturbhi2004catpcturblo2004catpcturbmd2004catpcturbop2004catpctwdwet2004catpctbl2019catpctconif2019catpctcrop2019catpctdecid2019catpctgrs2019catpcthay2019catpcthbwet2019catpctice2019catpctmxfst2019catpctow2019catpctshrb2019catpcturbhi2019catpcturblo2019catpcturbmd2019catpcturbop2019catpctwdwet2019catwetindexcatprecip_minus_evtcatpctundsev1987catpctlowsev1987catpctmodsev1987catpcthighsev1987catpctincvegresp1987catpctnonprocmask1987catpctundsev1990catpctlowsev1990catpctmodsev1990catpcthighsev1990catpctincvegresp1990catpctnonprocmask1990catpctundsev1991catpctlowsev1991catpctmodsev1991catpcthighsev1991catpctincvegresp1991catpctnonprocmask1991catpctundsev1995catpctlowsev1995catpctmodsev1995catpcthighsev1995catpctincvegresp1995catpctnonprocmask1995catpctundsev1999catpctlowsev1999catpctmodsev1999catpcthighsev1999catpctincvegresp1999catpctnonprocmask1999catpctundsev2002catpctlowsev2002catpctmodsev2002catpcthighsev2002catpctincvegresp2002catpctnonprocmask2002catpctundsev2013catpctlowsev2013catpctmodsev2013catpcthighsev2013catpctincvegresp2013catpctnonprocmask2013catpctundsev2014catpctlowsev2014catpctundsev2003catpctlowsev2003catpctmodsev2003catpcthighsev2003catpctincvegresp2003catpctnonprocmask2003catpctundsev2005catpctlowsev2005catpctmodsev2005catpcthighsev2005catpctincvegresp2005catpctnonprocmask2005catpctmodsev2014catpcthighsev2014catpctincvegresp2014catpctnonprocmask2014catpctmodsev2016catpcthighsev2016catpctincvegresp2016catpctnonprocmask2016catpctundsev2017catpctlowsev2017catpctmodsev2017catpcthighsev2017catpctincvegresp2017catpctnonprocmask2017catwaterinputcatwwtpmajordenscatwwtpminordenscatwwtpalldenscatpctimpslphigh2001catpctimpslphigh2004catpctimpslphigh2006catpctimpslphigh2008catpctimpslphigh2011catpctimpslphigh2013catpctimpslphigh2016catpctimpslphigh2019catpctimpslpmid2001catpctimpslpmid2004catpctimpslpmid2006catpctimpslpmid2008catpctimpslpmid2011catpctimpslpmid2013catpctimpslpmid2016catpctimpslpmid2019catpctundsev2000catpctlowsev2000catpctmodsev2000catpcthighsev2000catpctincvegresp2000catpctnonprocmask2000catsio2catcompstrgthcatpctfire2001catagkffactcatpctwdwet2011catcoalminedenscatelevcatpcturbop2006catpcturbhi2001cathydcatno32008catpctalluvcoastcatfe2o3catpcturblo2011catcbnfcatpctconif2006catpctgrs2001catpctfire2008catpctsallakecatpctcoastcrscatncatpctfire2003catpctglactilloamcatpctfire2010catomcatpctwatercatpctow2011catpctice2011catpctwdwet2001cattmean2008catpctfire2000catpctcrop2001catpctextruvolcatpcturbmd2011catpctfire2006catpctow2001catpcthbwet2001catna2ocatpctglactilcrscattmean2009catdamdenscatpctdecid2011catsedcatchemcatmanurecatpctow2006catpctbl2001catsn2008catpctnonagintrodmanagvegcatpcthydriccatpctfire2005catpctconif2011catpctcarbresidcattmean8110catcaocatpctbl2011catkffactcatpctglaclakecrscatpctmxfst2011catk2ocatpctice2006catpcteolfinecatpcturbhi2006catprecip8110catpcthay2006catpctsiliciccatpctwdwet2006catpctfire2007catrdcrscatnabd_denscatpctice2001catdamnidstorcatprecip2009catpcturbmd2006cattridenscatpctglactilclaycatwtdepcatpestic1997catpcteolcrscatpctmxfst2001catpermcattempcatpopden2010catpcturbhi2011catal2o3catpcturblo2001catbficatpctmxfst2006catconncatpcthay2011cattmax8110catinorgnwetdep2008catnabd_nrmstorcathuden2010catscatp2o5catpctshrb2006catdamnrmstorcatnh42008catmgocatpctgrs2011catpctalkintruvolcatpctglaclakefinecatpcturblo2006catpctshrb2011catcanaldenscatpcturbmd2001cathabtcatnabd_nidstorcatpctbl2006catfertcatnpdesdenscattmin8110catpcthay2001catminedenscatpctconif2001catsuperfunddenscatpcturbop2011catpctfire2002catpcthbwet2011catrdcrsslpwtdcatpctdecid2006catpctshrb2001catprecip2008catsandcatpctfire2009catclaycatpcturbop2001catpctdecid2001catpctcrop2006catpctnoncarbresidcatrunoffcatpctgrs2006catpctcolluvsedcatrckdepcathydrlcondcatpcthbwet2006catrddenscatpctcrop2011catpctconif2016catpctfire2004catpctcrop2016catpctdecid2016catpctgrs2016catpcthay2016catpcthbwet2016catpctice2016catpctmxfst2016catpctow2016catpctshrb2016catpcturbhi2016catpcturblo2016catpcturbmd2016catpcturbop2016catpctwdwet2016catsw_fluxcatpctundsev1985catpctlowsev1985catpctmodsev1985catpcthighsev1985catpctincvegresp1985catpctnonprocmask1985catpctundsev1992catpctlowsev1992catpctmodsev1992catpcthighsev1992catpctincvegresp1992catpctnonprocmask1992catpctundsev1988catpctlowsev1988catpctmodsev1988catpcthighsev1988catpctbl2013catpctconif2013catpctcrop2013catpctdecid2013catpctgrs2013catpcthay2013catpcthbwet2013catpctice2013catpctmxfst2013catpctow2013catpctshrb2013catpcturbhi2013catpcturblo2013catpcturbmd2013catpcturbop2013catpctwdwet2013catpctbl2016catpctincvegresp1988catpctnonprocmask1988catpctundsev1993catpctfrstloss2001catpctfrstloss2002catpctfrstloss2003catpctfrstloss2004catpctfrstloss2005catpctfrstloss2006catpctfrstloss2007catpctfrstloss2008catpctfrstloss2009catpctfrstloss2010catpctfrstloss2011catpctfrstloss2012catpctfrstloss2013catprecip9120cattmax9120cattmean9120cattmin9120catpctagslpmid2013catpctagslphigh2013catpctagslpmid2016catpctagslphigh2016catpctagslpmid2019catpctagslphigh2019catp_dep_2002catp_dep_2003catp_dep_2004catp_dep_2005catp_dep_2006catp_dep_2007catp_dep_2008catp_dep_2009catp_dep_2010catp_dep_2011catp_dep_2012catp_dep_2013catn_usgsww_1978catn_usgsww_1980catn_usgsww_1982catn_usgsww_1984catn_usgsww_1986catn_usgsww_1988catn_usgsww_1990catn_usgsww_1992catn_usgsww_1994catn_usgsww_1996catn_usgsww_1998catn_usgsww_2000catn_usgsww_2002catn_usgsww_2004catn_usgsww_2006catn_usgsww_2008catn_usgsww_2010catn_usgsww_2012catn_leg_1987catn_leg_1988catn_leg_1989catn_leg_1990catn_leg_1991catn_leg_1992catn_leg_1993catn_leg_1994catn_leg_1995catn_leg_1996catn_leg_1997catn_leg_1998catn_leg_1999catn_leg_2000catn_leg_2001catn_leg_2002catn_leg_2003catn_leg_2004catn_leg_2005catn_leg_2006catn_leg_2007catn_leg_2008catn_leg_2009catn_leg_2011catn_leg_2012catn_leg_2013catn_leg_2014catn_leg_2015catn_leg_2016catn_leg_2017catp_leg_1987catp_leg_1988catp_leg_1989catp_leg_1990catp_leg_1991catp_leg_1992catp_leg_1993catp_leg_1994catp_leg_1995catp_leg_1996catp_leg_1997catp_leg_1998catp_leg_1999catp_leg_2000catp_leg_2001catp_leg_2002catp_leg_2003catp_leg_2004catp_leg_2005catp_leg_2006catp_leg_2007catp_leg_2008catp_leg_2009catp_leg_2011catp_leg_2012catp_leg_2013catp_leg_2014catp_leg_2015catp_leg_2016catp_leg_2017catn_leg_2010catp_leg_2010catn_tin_1987catn_tin_1988catn_tin_1989catn_tin_1990catn_tin_1991catn_tin_1992catn_tin_1993catn_tin_1994catn_tin_1995catn_tin_1996catn_tin_1997catn_tin_1998catn_tin_1999catn_tin_2000catn_tin_2001catn_tin_2002catn_tin_2003catn_tin_2004catn_tin_2005catn_tin_2006catn_tin_2007catn_tin_2008catn_tin_2009catn_tin_2011catn_tin_2012catn_tin_2013catn_tin_2014catn_tin_2015catn_tin_2016catn_tin_2017catp_tin_1987catp_tin_1988catp_tin_1989catp_tin_1990catp_tin_1991catp_tin_1992catp_tin_1993catp_tin_1994catp_tin_1995catp_tin_1996catp_tin_1997catp_tin_1998catp_tin_1999catp_tin_2000catp_tin_2001catp_tin_2002catp_tin_2003catp_tin_2004catp_tin_2005catp_tin_2006catp_tin_2007catp_tin_2008catp_tin_2009catp_tin_2011catp_tin_2012catp_tin_2013catp_tin_2014catp_tin_2015catp_tin_2016catp_tin_2017catp_dep_1997catp_dep_1998catp_dep_1999catp_dep_2000catp_dep_2001cat
1790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.11700000000000000000000000000000000000000000000000003.173.1703.1703.17002102.5611675.83704.891.523.870.051.091.04049.060.050.91000037.5200000088.29950000000.44133.1700000000004.891.523.850.131.091.09049.040.130.89000037.3904.911.543.70.351.090.71049.5400.25000037.9878.249446.109900000000000000000000000000000000000000000000000000000000000000000000001.34e-05000NANANANANANANANA0000000000000064.3313169.636600.002637.570196.1233000.9986.379905.509100.05064.890.230008e-040100012.2870100.1036.895.03242801.5200001.951.077204.85296603.80.99584250.97200.080342.14520004.8904.8851177.945300.2442049.161.05570001059.0781.09037.29000001108.38600049.2178440.52718048.765.1308480.99831228.874548010.27605249.0111.0910.595722.465305.9104250.01610.15451.0101.32132.28830.130000.81000.997001.4380-0.82636141.2204.890000.9403.80.731254.53922.33772014.3537103.821.5206460.080134.99830.20441.240.52761.524.9101.543.870.051.090.71049.6700.25000037.9133875000000000000000004.891.523.770.051.090.76049.700.38000037.8500000.71000.350.030000000.2301152.67810.565345.015274-0.53622763.1703.1703.17020.3257418.5013617.5908818.227818.8175218.5695218.3822917.6982320.0862518.5611416.5069417.574730000000000000000008016.3748243.7978542.0238787.9559007.6979287.5829438.6079722.9059996.04610686.6911330.8812057.6512981.1513353.1613811.0514472.3615211.2916194.8717547.0719142.332061122116.8223411.3724590.5424772.6925101.0725575.926197.0726964.9627879.6911011.9111171.6211383.8511564.1311738.3411915.3612000.9512203.1312392.8912464.9412537.0512605.3812721.5212932.7513172.613492.1513836.8614248.7914793.0515395.8115956.2616542.5217068.5817624.0417758.0317917.1518101.4618310.9118545.6118805.5824530.7517538.92731.5523696.5523774.71372922.9332476.3092357.5262377.6842603.9392371.8442908.5442667.8323015.623115.1352434.2862419.8093328.3063014.9462782.5923300.6033461.6063283.3323181.22763.4341886.5772083.6271995.7342137.3912040.0862140.8362305.558226.4224238.475292.1372261.341256.9639262.13169.9578285.1908271.4696152.4241151.6671149.4479198.2835293.852322.9758403.1997420.7817480.4471605.2297656.1878606.3166638.3252584.3335155.8621210.9557228.3564245.8559263.2626280.8009298.346918.4654121.680918.7315319.3812517.18284
-
-
-

Get NLCD data -

-

In this example we access National Land Cover Dataset (NLCD) data for -2001, just at the catchment level for several COMIDs using the -sc_get_nlcd function. Loads data into a tibble we can -view.

-
-df <- sc_get_nlcd(year='2001', aoi='cat',
-              comid='179,1337,1337420')
-knitr::kable(df)
- ------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpcturbhi2001catpctgrs2001catpctwdwet2001catpctcrop2001catpctow2001catpcthbwet2001catpctbl2001catpctice2001catpctmxfst2001catpcturblo2001catpcturbmd2001catpcthay2001catpctconif2001catpctshrb2001catpcturbop2001catpctdecid2001cat
17900.2336.891.520.01.950.00048.760.0001.224.890.730.003.82
133701.6020.750.000.10.560.28051.550.2402.835.650.663.9811.79
133742000.870.950.000.01.640.0003.770.4000.114.063.381.7783.06
-

We can also pass a couple years for a different area of interest for -another region like a county.

-
-df <- sc_get_nlcd(year='2006, 2019', aoi='ws',
-              county='41003')
-knitr::kable(head(df))
- ----------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctbl2019wspctconif2019wspctcrop2019wspctdecid2019wspctgrs2019wspcthay2019wspcthbwet2019wspctice2019wspctmxfst2019wspctow2019wspctshrb2019wspcturbhi2019wspcturblo2019wspcturbmd2019wspcturbop2019wspctwdwet2019wspctice2006wspctmxfst2006wspctcrop2006wspcthay2006wspcturbop2006wspctbl2006wspctconif2006wspctwdwet2006wspctgrs2006wspcturbhi2006wspcturbmd2006wspctshrb2006wspcthbwet2006wspctdecid2006wspcturblo2006wspctow2006ws
237627610.0057.440.401.903.082.450.270.0020.770.016.650.000.310.074.891.760.0019.150.052.844.910.0038.131.727.950.000.0423.530.311.060.290.01
237628350.8064.533.360.283.0212.260.790.052.661.205.400.491.501.181.680.800.052.382.1813.641.720.9560.460.643.120.441.089.500.940.201.511.18
237628590.0016.6825.040.851.2731.691.110.008.280.260.860.375.511.905.550.640.008.322.9953.935.650.0014.400.222.360.271.701.971.570.845.550.22
237629150.0155.830.011.582.746.600.400.0018.610.057.450.010.600.144.651.330.0019.100.016.874.630.0149.771.144.710.010.1211.150.581.270.580.05
237629470.0074.130.000.461.343.460.140.0010.560.043.100.000.470.065.700.550.0010.310.003.675.690.0071.560.503.370.000.033.840.180.340.460.04
237629590.0136.294.661.021.5033.723.510.007.240.093.950.101.680.303.432.510.005.793.0236.013.410.0126.641.145.680.090.2310.664.880.661.660.12
-
-
-

Get COMIDs -

-

In this example we use the sc_get_comid function to find -COMIDs for USGS stream gages we load into R. We use a .csv file with -coordinate columns and a known coordinate reference system.

-
-gages = readr::read_csv(system.file("extdata","Gages_flowdata.csv", package = "StreamCatTools"),show_col_types = FALSE)
-# we'll just grab a few variables to keep things simple
-gages <- gages[,c('SOURCE_FEA','STATION_NM','LON_SITE','LAT_SITE')]
-gages_coms <- sc_get_comid(gages, xcoord='LON_SITE',                   ycoord='LAT_SITE', crsys=4269)
-
-# Add the COMID we found back to gages data frame
-gages$COMID <- strsplit(gages_coms, ",")[[1]]
-df <- sc_get_data(metric='huden2010', aoi='ws', comid=gages_coms)
-df$COMID <- as.character(df$comid)
-gages <- dplyr::left_join(gages, df, by='COMID')
-knitr::kable(head(gages))
-
-
-

Get data for a hydroregion -

-

In this example we access a couple watershed-only metrics for a -particular NHDPlus hydroregion using the sc_get_data -function.

-
-df <- sc_get_data(metric='pctwdwet2006', aoi='ws', region='Region17')
-knitr::kable(head(df))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctwdwet2006ws
229886110.99
241143110.29
241143090.27
241162390.42
229886390.00
229887110.02
-
-
-

Get data for CONUS -

-

In this example we access a metric for conus using the -sc_get_data function - this is shown for demonstration but -not run as it takes a bit of time

-
-df <- sc_get_data(metric='om', aoi='ws', conus='true')
-knitr::kable(head(df))
-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/Articles/LakeCat.html b/docs/articles/Articles/LakeCat.html deleted file mode 100644 index b9bd9ad..0000000 --- a/docs/articles/Articles/LakeCat.html +++ /dev/null @@ -1,503 +0,0 @@ - - - - - - - -Working with LakeCat data • StreamCatTools - - - - - - - - - - - - - Skip to contents - - -
- - - - - - - - - - - -
-
- - - -
-

Accessing and working with LakeCat -

-

The StreamCatTools package was designed to simplify the -use of StreamCat -data in R, leveraging the new API for -StreamCat. We now have functionality in the StreamCat API -for accessing and working with LakeCat data and have added functions in -StreamCatTools to access LakeCata data in R using the -API.

-

We can actually pull data into R from LakeCat by simply passing a URL -to extract from json. We have to hard-wire parameters and are limited in -the number of records returned through a GET request.

-
-res <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics?name=pcturbmd2006&areaOfInterest=cat&comid=22538788")
-res$items
-
-
-

List LakeCat API parameters -

-

List LakeCat parameters: Get a list of available LakeCat values for -certain parameters using the lc_get_params function (right -now just metric names and areas of interest for this function) via the -API

-
-library(StreamCatTools)
-region_params <- lc_get_params(param='aoi')
-
-name_params <- lc_get_params(param='metric_names')
-
-print(paste0('region parameters are: ', paste(region_params,collapse = ', ')))
-#> [1] "region parameters are: cat, ws"
-print(paste0('A selection of available LakrCat metrics include: ',paste(name_params[1:10],collapse = ', '))) 
-#> [1] "A selection of available LakrCat metrics include: agkffact, al2o3, bfi, canaldens, cao, cbnf, clay, coalminedens, compstrgth, damdens"
-

We can also see what metrics are available for what areas of interest -and what years using the sc_get_params function (which -returns a tibble of information about StreamCat metrics):

-
-var_info <- lc_get_params(param='variable_info')
-head(var_info)
-#> # A tibble: 6 × 13
-#>   category     metric aoi   year  short_description long_description units  dsid
-#>   <chr>        <chr>  <chr> <chr> <chr>             <chr>            <chr> <dbl>
-#> 1 Soils        agkff… Cat,… NA    Ag Soil Erodibil… Mean of STATSGO… Unit…    10
-#> 2 Natural      al2o3… Cat,… NA    Mean Lithologica… Mean % of litho… Perc…    11
-#> 3 Base         areas… Ws    NA    Watershed Area S… Watershed area … Squa…    NA
-#> 4 Climate      bfi[A… Cat,… NA    Base Flow Index   Base flow is th… Perc…    12
-#> 5 Anthropogen… canal… Cat,… NA    Canal Density     Density of NHDP… Kilo…    13
-#> 6 Natural      cao[A… Cat,… NA    Mean Lithologica… Mean % of litho… Perc…    11
-#> # ℹ 5 more variables: dataset <chr>, source_name <chr>, source_URL <chr>,
-#> #   ACTIVE <dbl>, DSNAME <chr>
-

Look up the display name or names for a metric using the -lc_fullname function via the API

-
-metric='pcthbwet2016'
-fullname <- lc_fullname(metric)
-fullname
-#> [1] "Herbaceous Wetland Percentage 2016"
-
-metric=c('pctdecid2019','fert')
-fullname <- lc_fullname(metric)
-fullname
-#> [1] "Deciduous Forest Percentage 2019"                   
-#> [2] "Synthetic Nitrogen Fertilizer Application Mean Rate"
-
-
-

Filter metric information by criteria -

-

We can also filter metric names and information by the metric -year(s), the indicator categories for metrics, the metric data set -names, or the Areas of Interest the metrics are available for.

-
-metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), aoi=c('Cat','Ws'))
-head(metrics)
-#> # A tibble: 6 × 9
-#>   Category Metric AOI   Year  Short_Name Metric_Description Units Source Dataset
-#>   <chr>    <chr>  <chr> <chr> <chr>      <chr>              <chr> <chr>  <chr>  
-#> 1 Natural  al2o3… Cat,… NA    Mean Lith… Mean % of litholo… Perc… USGS … USGS G…
-#> 2 Anthrop… canal… Cat,… NA    Canal Den… Density of NHDPlu… Kilo… Falco… Canal …
-#> 3 Natural  cao[A… Cat,… NA    Mean Lith… Mean % of litholo… Perc… USGS … USGS G…
-#> 4 Anthrop… cbnf[… Cat,… NA    Cultivate… Mean rate of biol… Kilo… Envir… Agricu…
-#> 5 Anthrop… coalm… Cat,… NA    Coal Mine… Density of coal m… Coun… USGS … Coal M…
-#> 6 Natural  comps… Cat,… NA    Mean Lith… Mean lithological… Perc… USGS … USGS G…
-
-
-

Get Waterbody COMIDs -

-

In this example we use the lc_get_comid function to find -COMIDs for a set of example lake locations we load into -R.lc_get_comid is just a simple wrapper for -get_waterbodies in the nhdplusTools R -package. We can then use the COMIDs we derive for our lake locations to -get LakeCat metrics for these lakes as we show in after this.

-
-dd <- data.frame(x = c(-89.198,-114.125,-122.044),
-                 y = c(45.502,47.877,43.730)) |> 
-  sf::st_as_sf(coords = c('x', 'y'), crs = 4326)
-    
-comids <- lc_get_comid(dd)
-
-
-

Get data for COMIDs -

-

In this example we access several variables, for several areas of -interest, and for several COMIDs using the lc_get_data -function. We’ll show using both the COMIDS we derived with -lc_get_comid function in previous chunk as well as with -known COMIDS for NHDPlus waterbodies. Loads data into a tibble we can -view.

-
-df <- lc_get_data(metric='pcturbmd2006,damdens', aoi='cat,ws', comid=comids)
-knitr::kable(df)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comiddamdenscatdamdenswspcturbmd2006catpcturbmd2006ws
237562980.00000000.00000000.02932280.0293228
1200540650.00000000.00072700.43481810.1451495
1671208630.02439860.02439860.20860780.2086078
-
-df <- lc_get_data(metric='pcturbmd2006,damdens', aoi='cat,ws', comid='23783629,23794487,23812618')
-knitr::kable(df)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comiddamdenscatdamdenswspcturbmd2006catpcturbmd2006ws
237836290.01920970.00088750.20919420.0213267
237944870.00000000.24332680.19582250.8832762
238126180.03208520.00714550.01155070.0032155
-
-
-

Get data for county -

-

In this example we access a couple variables at the watershed scale -for the area of interest of a county (Benton County in this case) using -the sc_get_data function.

-
-df <- lc_get_data(metric='pctwdwet2006', aoi='ws', county='41003')
-knitr::kable(head(df))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctwdwet2006ws
237689450.1662971
237689870.0000000
238881560.4161465
237688950.1344990
237689090.2274450
237689470.5524862
-
-
-

Get NLCD data -

-

In this example we access National Land Cover Dataset (NLCD) data for -2019, just at the catchment level for several COMIDs using the -lc_nlcd function. Loads data into a tibble we can view.

-
-df <- lc_get_nlcd(comid='23783629,23794487,23812618', year='2019', aoi='ws')
-knitr::kable(df)
- ------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comidpctbl2019wspctconif2019wspctcrop2019wspctdecid2019wspctgrs2019wspcthay2019wspcthbwet2019wspctice2019wspctmxfst2019wspctow2019wspctshrb2019wspcturbhi2019wspcturblo2019wspcturbmd2019wspcturbop2019wspctwdwet2019ws
237836291.560127482.84179310.000000.06270223.36794870.00079880.02284440.23187850.10647401.5000619.20037480.00279560.08386920.02324380.82175870.1733297
237944870.00000000.401489231.644651.81765090.116796842.309657611.91327830.00000003.08781661.7446530.20439450.26279293.67180091.01467261.63515590.1751953
238126180.000643184.93025590.000000.06238060.92413360.00000000.54984980.00000000.00321554.1119765.29849450.00000000.05337720.00321551.87141872.1910391
-
-
-

Get lake and lake watersheds as sf objects -

-

StreamCatTools includes a function -lc_get_watershed that will return the watershed of any lake -by COMID from an AWS S3 bucket of partitioned geoparquet files for all -LakeCat lake watersheds (both on-network and off-network lakes). The -watershed requested is returned as an sf object and uses -duckDB as well as optional parallelization for faster data -returns and specification of a specific HUC2 if known to reduce search -time. NOTE lc_get_watershed currently only -returns one watershed per request. This can be used in conjunction with -nhdplusTools function get_waterbodies to map -lake features for which LakeCat metrics are requested as -shown below.

-
-lake <- nhdplusTools::get_waterbodies(id = 19334077)
-
-tictoc::tic()
-ws <- lc_get_watershed(comid = 19334077)
-#>   |                                                                              |                                                                      |   0%[10:24:08] duckdb version: 1.5.2
-#>   |                                                                              |==========                                                            |  14%  |                                                                              |====================                                                  |  29%[10:24:08] Loading and configuring httpfs ...
-#>   |                                                                              |==============================                                        |  43%[10:24:09] Using glob: s3://dmap-data-commons-ow/data/streamcat/LakeCatWatersheds/**/*.parquet
-#>   |                                                                              |========================================                              |  57%[10:24:09] Describing schema ...
-#>   |                                                                              |==================================================                    |  71%  |                                                                              |============================================================          |  86%[10:24:10] Querying COMID = 19334077
-#> [10:25:53] Rows returned: 1
-#>   |                                                                              |======================================================================| 100%
-tictoc::toc()
-#> 105.9 sec elapsed
-
-

Adding a HUC2 query parameter and using multi-threading speeds the -process significantly -

-
-tictoc::tic()
-ws <- lc_get_watershed(comid = 19334077, huc2 = "01",huc2_filter = "01", 
-                      threads = 2,retries = 5)
-#>   |                                                                              |                                                                      |   0%[10:25:53] duckdb version: 1.5.2
-#>   |                                                                              |==========                                                            |  14%  |                                                                              |====================                                                  |  29%[10:25:53] Loading and configuring httpfs ...
-#>   |                                                                              |==============================                                        |  43%  |                                                                              |========================================                              |  57%[10:25:53] Describing schema ...
-#>   |                                                                              |==================================================                    |  71%  |                                                                              |============================================================          |  86%[10:25:55] Querying COMID = 19334077 within HUC2=01
-#> [10:26:31] Rows returned: 1
-#>   |                                                                              |======================================================================| 100%
-tictoc::toc()
-#> 38.41 sec elapsed
-
-
-

View lake with watershed -

-
-mapview::mapview(ws, 
-                 col.regions = "blue", 
-                 alpha.regions = 0.1,  
-                 color = "blue",
-                 alpha = 0.8,
-                 lwd = 2,
-                 layer.name = "Watershed") +
-mapview::mapview(lake, 
-                 col.regions = "blue", 
-                 alpha.regions = 0.5,
-                 color = "blue",
-                 alpha = 0.8,
-                 layer.name = "Lake")
-
- -
-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/Articles/NNI.html b/docs/articles/Articles/NNI.html deleted file mode 100644 index b89ded5..0000000 --- a/docs/articles/Articles/NNI.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - -National Nutrient Inventory (NNI) Data in StreamCat • StreamCatTools - - - - - - - - - - - - - Skip to contents - - -
- - - - -
-
- - - -
-

Use sc_plotnni and lc_plotnni -

-

In the following examples, we use sc_plotnni and -lc_plotnni functions to plot annual time series of nitrogen -and phosphorus budget data for a given watershed. These data are plotted -from 1990-2017. Hatching on the bars is reflective of data linearly -interpolated between agricultural census years.

-

Mississippi-Atchafalaya River Basin

-
-library(StreamCatTools)
-library(ggplot2)
-library(ggpattern)
-com <- '22812041'
-sc_plotnni(comid = com, include.nue = TRUE)
-

-

Neuse River, North Carolina

-
-com <- '10975909'
-sc_plotnni(comid = com)
-

-

Lake Kanasatka, New Hampshire

-
-com = '6738112'
-lc_plotnni(comid = com)
-

-## Use sc_get_nni and lc_get_nni to pull NNI budget data In these -examples, we access all available NNI metrics for user-defined years. -Most NNI metrics are available from 1987 to 2017, except for nitrogen -deposition, phosphorus deposition, and nitrogen and phosphorus point -source loads. These metrics are returned for available years.

-
-
-

Cuyahoga River -

-

Return dataframe of NNI metrics for Cuyahoga River

-
-com <- 15588532
-years <- '1987, 1992, 1997, 2002, 2007, 2012, 2017'
-cuyahoga <- sc_get_nni(year=years,
-           comid=com,
-           aoi='ws',
-           showAreaSqKm=FALSE)
-colnames(cuyahoga)
-#>   [1] "comid"           "n_ff_1992ws"     "n_ff_1997ws"     "n_ff_2002ws"    
-#>   [5] "n_ff_2007ws"     "n_ff_2012ws"     "n_ff_2017ws"     "p_ff_1987ws"    
-#>   [9] "p_ff_1992ws"     "p_ff_1997ws"     "p_ff_2002ws"     "p_ff_2007ws"    
-#>  [13] "p_ff_2012ws"     "p_ff_2017ws"     "n_ff_1987ws"     "n_uf_1987ws"    
-#>  [17] "n_uf_1992ws"     "n_uf_1997ws"     "n_uf_2002ws"     "n_uf_2007ws"    
-#>  [21] "n_uf_2012ws"     "n_uf_2017ws"     "p_uf_1987ws"     "p_uf_1992ws"    
-#>  [25] "p_uf_1997ws"     "p_uf_2002ws"     "p_uf_2007ws"     "p_uf_2012ws"    
-#>  [29] "p_uf_2017ws"     "n_ags_1987ws"    "n_ags_1992ws"    "n_ags_1997ws"   
-#>  [33] "n_ags_2002ws"    "n_lw_1987ws"     "n_lw_1992ws"     "n_lw_1997ws"    
-#>  [37] "n_lw_2002ws"     "n_lw_2007ws"     "n_lw_2012ws"     "n_lw_2017ws"    
-#>  [41] "p_lw_1987ws"     "p_lw_1992ws"     "p_lw_1997ws"     "p_lw_2002ws"    
-#>  [45] "n_cr_1992ws"     "n_cr_1997ws"     "n_cr_2002ws"     "n_cr_2007ws"    
-#>  [49] "n_cr_2012ws"     "n_cr_2017ws"     "p_cr_1987ws"     "p_cr_1992ws"    
-#>  [53] "p_cr_1997ws"     "p_cr_2002ws"     "p_cr_2007ws"     "p_cr_2012ws"    
-#>  [57] "p_cr_2017ws"     "n_cr_1987ws"     "n_ags_2012ws"    "n_ags_2017ws"   
-#>  [61] "p_ags_1987ws"    "p_ags_1992ws"    "p_ags_1997ws"    "p_ags_2002ws"   
-#>  [65] "p_ags_2007ws"    "p_ags_2012ws"    "p_ags_2017ws"    "n_cf_1987ws"    
-#>  [69] "n_cf_1992ws"     "n_cf_1997ws"     "n_cf_2002ws"     "n_ags_2007ws"   
-#>  [73] "n_cf_2007ws"     "n_cf_2012ws"     "n_cf_2017ws"     "p_lw_2007ws"    
-#>  [77] "p_lw_2012ws"     "p_lw_2017ws"     "n_hw_1987ws"     "n_hw_1992ws"    
-#>  [81] "n_hw_1997ws"     "n_hw_2002ws"     "n_hw_2007ws"     "n_hw_2012ws"    
-#>  [85] "n_hw_2017ws"     "p_hw_1987ws"     "p_hw_1992ws"     "p_hw_1997ws"    
-#>  [89] "p_hw_2002ws"     "p_hw_2007ws"     "p_hw_2012ws"     "p_hw_2017ws"    
-#>  [93] "p_dep_1997ws"    "p_dep_2002ws"    "p_dep_2007ws"    "p_dep_2012ws"   
-#>  [97] "n_usgsww_1992ws" "n_usgsww_2012ws" "p_usgsww_1992ws" "p_usgsww_2012ws"
-#> [101] "n_leg_1987ws"    "n_leg_1992ws"    "n_leg_1997ws"    "n_leg_2002ws"   
-#> [105] "n_leg_2007ws"    "n_leg_2012ws"    "n_leg_2017ws"    "p_leg_1987ws"   
-#> [109] "p_leg_1992ws"    "p_leg_1997ws"    "p_leg_2002ws"    "p_leg_2007ws"   
-#> [113] "p_leg_2012ws"    "p_leg_2017ws"    "n_dep_1992ws"    "n_dep_1997ws"   
-#> [117] "n_dep_2002ws"    "n_dep_2007ws"    "n_dep_2012ws"    "n_dep_2017ws"
-

Transform sc_get_nni dataframe into long dataframe

-
-nin <- cuyahoga[, grepl("^(n)", names(cuyahoga)) & 
-                  !grepl("(cr)", names(cuyahoga)) & 
-                  !grepl("(ags)", names(cuyahoga)) & 
-                  !grepl("(leg)", names(cuyahoga))]
-  
-names(nin) <- sapply(names(nin), function(col){
-  substr(col, 3, nchar(col) -2)
-})
-  
-nin <- nin |>
-  tidyr::pivot_longer(
-    cols = everything(),
-    names_to = c("metric", "year"),
-    names_sep = "_",
-    values_to = "value"
-  ) |>
-  dplyr::mutate(year = as.integer(year))
-
-pin <- cuyahoga[, grepl("^(p)", names(cuyahoga)) & 
-                  !grepl("(cr)", names(cuyahoga)) & 
-                  !grepl("(ags)", names(cuyahoga)) & 
-                  !grepl("(leg)", names(cuyahoga))]
-  
-names(pin) <- sapply(names(pin), function(col){
-  substr(col, 3, nchar(col) -2)
-})
-  
-pin <- pin |>
-  tidyr::pivot_longer(
-    cols = everything(),
-    names_to = c("metric", "year"),
-    names_sep = "_",
-    values_to = "value"
-  ) |>
-  dplyr::mutate(year = as.integer(year))
-

Pie Chart of Sources of N and P to the Cuyahoga River in 2012

-
-n2012 <- nin |> 
-  dplyr::filter(year == '2012')
-
-p2012 <- pin |>
-  dplyr::filter(year == '2012')
-
-colorsn <- c('ff' = '#A3CC51', 'lw'='#B26F2C','hw'='#E51932','uf'='black', 'dep'='#6db6ff', 'cf'='#FFD700', 'usgsww' = 'pink')
-colorsp <- c('ff' = '#A3CC51', 'lw'='#B26F2C','hw'='#E51932','uf'='black', 'usgsww' = 'pink')
-
-n <- ggplot(nin, aes(x = "", y = value, fill = metric)) +
-  geom_bar(stat = "identity", width = 1) +
-  coord_polar(theta = "y") +
-  scale_fill_manual(values = colorsn, labels = 
-                       c('ff' = 'Farm Fertilizer',
-                         'uf' = 'Urban Fertilizer',
-                         'hw' = 'Human Waste',
-                         'lw' = 'Livestock Waste',
-                         'dep' = 'Total Deposition',
-                         'usgsww' = 'Point Source Loads',
-                         'cf' = 'Crop N-Fixation')
-                     ) +
-  theme_void() +
-  labs(title = "Nitrogen",
-       fill = 'Source')
-
-p <- ggplot(pin, aes(x = "", y = value, fill = metric)) +
-  geom_bar(stat = "identity", width = 1) +
-  coord_polar(theta = "y") +
-  scale_fill_manual(values = colorsp) +
-  theme_void() +
-  labs(title = "Phosphorus") + 
-  guides(fill = 'none')
-
-n + p + patchwork::plot_layout(guides = "collect")
-

-

Percent change of N and P inputs from 1992 to 2017

-
-nperc <- nin |>
-  dplyr::filter(year %in% c('1992', '2017')) |>
-  tidyr::pivot_wider(values_from = 'value',
-              names_from = 'year')
-nperc$perchange <- (nperc$`2017` - nperc$`1992`) / nperc$`1992` * 100
-nperc <- nperc |>
-  dplyr::select(metric, perchange) |>
-  dplyr::filter(metric != 'usgsww') |>
-  dplyr::rename('Source' = 'metric', 'Nitrogen Percent Change' = 'perchange')
-
-pperc <- pin |>
-  dplyr::filter(year %in% c('1992', '2017')) |>
-  tidyr::pivot_wider(values_from = 'value',
-              names_from = 'year')
-pperc$perchange <- (pperc$`2017` - pperc$`1992`) / pperc$`1992` * 100
-pperc <- pperc |>
-  dplyr::select(metric, perchange) |>
-  dplyr::filter(metric != 'usgsww') |>
-  dplyr::rename('Source' = 'metric', 'Phosphorus Percent Change' = 'perchange')
-
-perc <- dplyr::left_join(nperc, pperc, by = 'Source')
-
-perc <- perc |> dplyr::mutate(
-  Source = dplyr::case_when(
-    Source == 'ff' ~ 'Farm Fertilizer',
-    Source == 'uf' ~ 'Urban Fertilizer',
-    Source == 'lw' ~ 'Livestock Waste',
-    Source == 'cf' ~ 'Crop N-Fixation',
-    Source == 'dep' ~ 'Atmos. Deposition',
-    Source == 'hw' ~ 'Human Waste'
-  )
-)
-tibble::tibble(perc)
-#> # A tibble: 6 × 3
-#>   Source            `Nitrogen Percent Change` `Phosphorus Percent Change`
-#>   <chr>                                 <dbl>                       <dbl>
-#> 1 Farm Fertilizer                        6.09                      -0.847
-#> 2 Urban Fertilizer                     182.                        66.6  
-#> 3 Livestock Waste                      -13.1                      -15.3  
-#> 4 Crop N-Fixation                       55.0                       NA    
-#> 5 Human Waste                           -4.59                     -43.0  
-#> 6 Atmos. Deposition                    -31.7                       NA
-

Local catchment and watershed N and P inputs to the Platte River -Basin

-
-com <- 17416474
-tibble::tibble(sc_get_nni(year='2017', comid=com, aoi='cat,ws'))
-#> # A tibble: 1 × 37
-#>      comid n_ff_2017cat n_ff_2017ws p_ff_2017cat p_ff_2017ws n_uf_2017cat
-#>      <int>        <dbl>       <dbl>        <dbl>       <dbl>        <dbl>
-#> 1 17416474       29206.  451370919.        4652.   68351881.        2715.
-#> # ℹ 31 more variables: n_uf_2017ws <dbl>, p_uf_2017cat <dbl>,
-#> #   p_uf_2017ws <dbl>, n_lw_2017cat <dbl>, n_lw_2017ws <dbl>,
-#> #   n_cr_2017cat <dbl>, n_cr_2017ws <dbl>, p_cr_2017cat <dbl>,
-#> #   p_cr_2017ws <dbl>, n_ags_2017cat <dbl>, n_ags_2017ws <dbl>,
-#> #   p_ags_2017cat <dbl>, p_ags_2017ws <dbl>, n_cf_2017cat <dbl>,
-#> #   n_cf_2017ws <dbl>, p_lw_2017cat <dbl>, p_lw_2017ws <dbl>,
-#> #   n_hw_2017cat <dbl>, n_hw_2017ws <dbl>, p_hw_2017cat <dbl>, …
-
-
-

Plot a single NNI metric for a given watershed -

-

In this example we access a single National Nutrient Inventory (NNI) -metric for the Calapooia River basin using the sc_get_data -function. We use the nhdplusTools library to pull in -flowlines and the watershed boundary for the Calapooia River basin, plot -the selected NNI metric for the Calapooia River and show the -watershed.

-
-start_comid = 23763517
-nldi_feature <- list(featureSource = "comid", featureID = start_comid)
-
-flowline_nldi <- nhdplusTools::navigate_nldi(nldi_feature, mode = "UT", data_source = "flowlines", distance=5000)
-
-# get StreamCat metrics
-comids <- paste(as.integer(flowline_nldi$UT_flowlines$nhdplus_comid), collapse=",",sep="")
-
-df <- sc_get_data(metric='n_ff_2016', aoi='cat', comid=comids, showAreaSqKm=TRUE)
-
-flowline_nldi <- flowline_nldi$UT_flowlines
-flowline_nldi$Farm_Nitrogon_2016 <- df$n_ff_2016cat[match(flowline_nldi$nhdplus_comid, df$comid)]
-
-basin <- nhdplusTools::get_nldi_basin(nldi_feature = nldi_feature)
-
-
-

Map the Results -

-
-library(ggplot2)
-library(ggspatial)
-flowline_nldi |> 
-  ggplot() + geom_sf(aes(colour = Farm_Nitrogon_2016)) + 
-  scale_y_continuous() +
-  scale_color_distiller(palette = "Spectral") +
-  labs(color = "Kg Nitrogen") + 
-  theme_minimal(12) + 
-  ggtitle('Farm Nitrogen at the Catchment Scale for \nthe Calapooia River Basin 2016')
-

-
-
-

Look at change through time Calapooia Farm Nitrogen -

-
-df1 <- sc_get_data(metric='n_ff_1987', aoi='cat', comid=comids)
-df2 <- sc_get_data(metric='n_ff_2017', aoi='cat', comid=comids)
-df2$n_ff_1987cat <- df1$n_ff_1987cat[match(df2$comid, df1$comid)]
-df2$Farm_Nitrogen_Difference <- df2$n_ff_2017cat-df2$n_ff_1987cat
-flowline_nldi$Farm_Nitrogen_Difference <- df2$Farm_Nitrogen_Difference[match(flowline_nldi$nhdplus_comid, df2$comid)]
-
-
-

Map the Results -

-
-flowline_nldi |> 
-  ggplot() + geom_sf(aes(colour = Farm_Nitrogen_Difference)) + 
-  scale_y_continuous() + 
-  labs(color = "Kg Nitrogen")+ 
-  scale_color_distiller(palette = "Spectral") +
-  theme_minimal(12) + 
-  ggtitle('Farm Nitrogen Change at the Catchment Scale for \nthe Calapooia River Basin from 1987 to 2017')
-

-
-
-

Crop Fixation for the Calapooia Watershed -

-
-options(scipen=3)
-# get StreamCat metrics
-df <- sc_get_data(metric='n_cf_2017', aoi='ws', comid=comids)
-
-flowline_nldi$CropNFixation <- df$n_cf_2017ws[match(flowline_nldi$nhdplus_comid, df$comid)]
-
-
-

Map the Results -

-
-flowline_nldi |> 
-  ggplot() + geom_sf(aes(colour = CropNFixation)) + 
-  scale_y_continuous() +
-  scale_color_distiller(palette = "Spectral") +
-  labs(colour = "Kg Nitrogen") + 
-  theme_minimal(12) + 
-  ggtitle('Watershed Crop Nitrogen Fixation \nfor the Calapooia River Basin 2017')
-

-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/Articles/NNI_files/figure-html/map1-1.png b/docs/articles/Articles/NNI_files/figure-html/map1-1.png deleted file mode 100644 index 75ca8c53e22fd73b9e13654014b94ee776ae4d6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161140 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 z 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 Ied+ao09pilbpQYW diff --git a/docs/articles/Articles/NNI_files/figure-html/map2-1.png b/docs/articles/Articles/NNI_files/figure-html/map2-1.png deleted file mode 100644 index 7cc595bc0334f3de29a65fbf40e37a549a2f10e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144837 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

Faa_dQk96P|yj_Xox!*RE0`JS+GaH#e= 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

A=Rb>9}$_P#t! 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

1(R5SBVh>X++@?erUAA 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

E7 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 C>&_I@ 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

384|0Q2ePMo7XQD3yY>$cALC^1y9S3b9i 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 blP|CZ3AuI%N!9-${3M=8i{*>F`SAY%f|c!l diff --git a/docs/articles/Articles/NNI_files/figure-html/unnamed-chunk-2-1.png b/docs/articles/Articles/NNI_files/figure-html/unnamed-chunk-2-1.png deleted file mode 100644 index e95f70dcc9472baaa8a70c01bad5a14e227e6063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206018 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

a_Jyb=oYE>x0=mJGe&1e`XMQ){o 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 diff --git a/docs/articles/Articles/NNI_files/figure-html/unnamed-chunk-3-1.png b/docs/articles/Articles/NNI_files/figure-html/unnamed-chunk-3-1.png deleted file mode 100644 index c1532a81c562944265b1ceade779a6fa8c6ed962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198333 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[Qh&t<6P~-mv;%6qDHC?O}aheKYVTaL=cUZ)i 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 z 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 QPjd1_L|V8=P{-$g0jn>Km;e9( diff --git a/docs/articles/Articles/NNI_files/figure-html/unnamed-chunk-7-1.png b/docs/articles/Articles/NNI_files/figure-html/unnamed-chunk-7-1.png deleted file mode 100644 index 2f3e9136e844ad8c3189fd4e7ca2885f94c1069c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147426 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

*Z^I-gaRo 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 E2P2W@qW}N^ diff --git a/docs/articles/StartHere.html b/docs/articles/StartHere.html deleted file mode 100644 index 6c60d10..0000000 --- a/docs/articles/StartHere.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Start Here • StreamCatTools - - - - - - - - - - - - - Skip to contents - - -

- - - - -
-
- - - -
-

Installing and loading StreamCatTools -

-

To install, you can install from CRAN:

-
-install.packages("StreamCatTools")
-

Or you can install from GitHub:

-
-library(devtools)
-install_github('USEPA/StreamCatTools')
-

After installing load the library

- -
-
-

Background -

-

The StreamCatTools package was designed to simplify the -use of StreamCat -data in R, leveraging the new API for -StreamCat.

-
-
-

Vignettes in StreamCatTools -

-

There are three additional vignettes in StreamCatTools -that are available on our website here under the -“Articles” tab:

-
    -
  1. Introduction
  2. -
-
    -
  • An overview of the basic fucntionality of the package
  • -
-
    -
  1. LakeCat
  2. -
-
    -
  • An overview of accessing data for lakes within the package and -functions to do so
  • -
-
    -
  1. Applications
  2. -
-
    -
  • A more in depth walk through with specific use-case examples and -demonstrations
  • -
-

These vignettes cover some of the core functions (and arguments -within those functions) in StreamCatTools. Help files for a -particular function are viewable by running ?function_name -after loading StreamCatTools. For example, to learn more -about the sc_get_data() function, run -?sc-get_data.

-
-
-

Citation information -

-

If you use StreamCatTools in your work, please cite it. -You can view the most recent citation by running

-
-citation("StreamCatTools")
-#> To cite package 'StreamCatTools' in publications use:
-#> 
-#>   Weber M (????). _StreamCatTools: 'StreamCatTools'_. R package version
-#>   0.10.0, <https://usepa.github.io/StreamCatTools/>.
-#> 
-#> A BibTeX entry for LaTeX users is
-#> 
-#>   @Manual{,
-#>     title = {StreamCatTools: 'StreamCatTools'},
-#>     author = {Marc Weber},
-#>     note = {R package version 0.10.0},
-#>     url = {https://usepa.github.io/StreamCatTools/},
-#>   }
-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/index.html b/docs/articles/index.html deleted file mode 100644 index 141e897..0000000 --- a/docs/articles/index.html +++ /dev/null @@ -1,74 +0,0 @@ - -Articles • StreamCatTools - Skip to contents - - -
- - - -
- - - -
- - - - - - - diff --git a/docs/authors.html b/docs/authors.html deleted file mode 100644 index 4ff54e3..0000000 --- a/docs/authors.html +++ /dev/null @@ -1,118 +0,0 @@ - -Authors and Citation • StreamCatTools - Skip to contents - - -
-
-
- -
-

Authors

- -
  • -

    Marc Weber. Author, maintainer. -

    -
  • -
  • -

    Ryan Hill. Contributor. -

    -
  • -
  • -

    Selia Markley. Contributor. -

    -
  • -
  • -

    Travis Hudson. Contributor. -

    -
  • -
  • -

    Allen Brookes. Contributor. -

    -
  • -
  • -

    David Rebhuhn. Contributor. -

    -
  • -
  • -

    Michael Dumelle. Contributor. -

    -
  • -
  • -

    Justin Bousquin. Contributor. -

    -
  • -
  • -

    Zachary Smith. Contributor. -

    -
  • -
- -
-

Citation

-

Source: DESCRIPTION

- -

Weber M (2026). -StreamCatTools: 'StreamCatTools'. -R package version 0.11.0, https://usepa.github.io/StreamCatTools/. -

-
@Manual{,
-  title = {StreamCatTools: 'StreamCatTools'},
-  author = {Marc Weber},
-  year = {2026},
-  note = {R package version 0.11.0},
-  url = {https://usepa.github.io/StreamCatTools/},
-}
-
- -
- - -
- - - -
- - - - - - - diff --git a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js b/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js deleted file mode 100644 index b65b161..0000000 --- a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v5.1.0 (https://getbootstrap.com/) - * Copyright 2011-2021 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=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=e=>{const i=t(e);return i&&document.querySelector(i)?i:null},i=e=>{const i=t(e);return i?document.querySelector(i):null},n=t=>{t.dispatchEvent(new Event("transitionend"))},s=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),o=t=>s(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,r=(t,e,i)=>{Object.keys(i).forEach(n=>{const o=i[n],r=e[n],a=r&&s(r)?"element":null==(l=r)?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(o).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${o}".`)})},a=t=>!(!s(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=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?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();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?(f.length||document.addEventListener("DOMContentLoaded",()=>{f.forEach(t=>t())}),f.push(e)):e()},g=t=>{"function"==typeof t&&t()},_=(t,e,i=!0)=>{if(!i)return void g(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 o=!1;const r=({target:i})=>{i===e&&(o=!0,e.removeEventListener("transitionend",r),g(t))};e.addEventListener("transitionend",r),setTimeout(()=>{o||n(e)},s)},b=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,E={};let A=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},O=/^(mouseenter|mouseleave)/i,C=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 k(t,e){return e&&`${e}::${A++}`||t.uidEvent||A++}function L(t){const e=k(t);return t.uidEvent=e,E[e]=E[e]||{},E[e]}function x(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=D(e,i,n),l=L(t),c=l[a]||(l[a]={}),h=x(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=k(r,e.replace(v,"")),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(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function N(t,e,i,n,s){const o=x(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t){return t=t.replace(y,""),T[t]||t}const P={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=D(e,i,n),a=r!==e,l=L(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void N(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach(i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach(o=>{if(o.includes(n)){const n=s[o];N(t,e,i,n.originalHandler,n.delegationSelector)}})}(t,l,i,e.slice(1))});const h=l[r]||{};Object.keys(h).forEach(i=>{const n=i.replace(w,"");if(!a||e.includes(n)){const e=h[i];N(t,l,r,e.originalHandler,e.delegationSelector)}})},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u(),s=I(e),o=e!==s,r=C.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach(t=>{Object.defineProperty(d,t,{get:()=>i[t]})}),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},j=new Map;var M={set(t,e,i){j.has(t)||j.set(t,new Map);const n=j.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>j.has(t)&&j.get(t).get(e)||null,remove(t,e){if(!j.has(t))return;const i=j.get(t);i.delete(e),0===i.size&&j.delete(t)}};class H{constructor(t){(t=o(t))&&(this._element=t,M.set(this._element,this.constructor.DATA_KEY,this))}dispose(){M.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach(t=>{this[t]=null})}_queueCallback(t,e,i=!0){_(t,e,i)}static getInstance(t){return M.get(o(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.1.0"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return"bs."+this.NAME}static get EVENT_KEY(){return"."+this.DATA_KEY}}const B=(t,e="hide")=>{const n="click.dismiss"+t.EVENT_KEY,s=t.NAME;P.on(document,n,`[data-bs-dismiss="${s}"]`,(function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),l(this))return;const o=i(this)||this.closest("."+s);t.getOrCreateInstance(o)[e]()}))};class R extends H{static get NAME(){return"alert"}close(){if(P.trigger(this._element,"close.bs.alert").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,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=R.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)}}))}}B(R,"close"),m(R);class W extends H{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=W.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function z(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function q(t){return t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase())}P.on(document,"click.bs.button.data-api",'[data-bs-toggle="button"]',t=>{t.preventDefault();const e=t.target.closest('[data-bs-toggle="button"]');W.getOrCreateInstance(e).toggle()}),m(W);const F={setDataAttribute(t,e,i){t.setAttribute("data-bs-"+q(e),i)},removeDataAttribute(t,e){t.removeAttribute("data-bs-"+q(e))},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter(t=>t.startsWith("bs")).forEach(i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=z(t.dataset[i])}),e},getDataAttribute:(t,e)=>z(t.getAttribute("data-bs-"+q(e))),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},U={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;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;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=>!l(t)&&a(t))}},$={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},V={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},K="next",X="prev",Y="left",Q="right",G={ArrowLeft:Q,ArrowRight:Y};class Z extends H{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=U.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return $}static get NAME(){return"carousel"}next(){this._slide(K)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(X)}pause(t){t||(this._isPaused=!0),U.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(n(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=U.findOne(".active.carousel-item",this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void P.one(this._element,"slid.bs.carousel",()=>this.to(t));if(e===t)return this.pause(),void this.cycle();const i=t>e?K:X;this._slide(i,this._items[t])}_getConfig(t){return t={...$,...F.getDataAttributes(this._element),..."object"==typeof t?t:{}},r("carousel",t,V),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?Q:Y)}_addEventListeners(){this._config.keyboard&&P.on(this._element,"keydown.bs.carousel",t=>this._keydown(t)),"hover"===this._config.pause&&(P.on(this._element,"mouseenter.bs.carousel",t=>this.pause(t)),P.on(this._element,"mouseleave.bs.carousel",t=>this.cycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType?this._pointerEvent||(this.touchStartX=t.touches[0].clientX):this.touchStartX=t.clientX},e=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},i=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType||(this.touchDeltaX=t.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(t=>this.cycle(t),500+this._config.interval))};U.find(".carousel-item img",this._element).forEach(t=>{P.on(t,"dragstart.bs.carousel",t=>t.preventDefault())}),this._pointerEvent?(P.on(this._element,"pointerdown.bs.carousel",e=>t(e)),P.on(this._element,"pointerup.bs.carousel",t=>i(t)),this._element.classList.add("pointer-event")):(P.on(this._element,"touchstart.bs.carousel",e=>t(e)),P.on(this._element,"touchmove.bs.carousel",t=>e(t)),P.on(this._element,"touchend.bs.carousel",t=>i(t)))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=G[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?U.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===K;return b(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(U.findOne(".active.carousel-item",this._element));return P.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=U.findOne(".active",this._indicatorsElement);e.classList.remove("active"),e.removeAttribute("aria-current");const i=U.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{P.trigger(this._element,"slid.bs.carousel",{relatedTarget:o,direction:u,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),d(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add("active"),n.classList.remove("active",h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove("active"),o.classList.add("active"),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[Q,Y].includes(t)?p()?t===Y?X:K:t===Y?K:X:t}_orderToDirection(t){return[K,X].includes(t)?p()?t===X?Y:Q:t===X?Q:Y:t}static carouselInterface(t,e){const i=Z.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){Z.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=i(this);if(!e||!e.classList.contains("carousel"))return;const n={...F.getDataAttributes(e),...F.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(n.interval=!1),Z.carouselInterface(e,n),s&&Z.getInstance(e).to(s),t.preventDefault()}}P.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",Z.dataApiClickHandler),P.on(window,"load.bs.carousel.data-api",()=>{const t=U.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element);null!==s&&o.length&&(this._selector=s,this._triggerArray.push(i))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=U.find(".collapse .collapse",this._config.parent);e=U.find(".show, .collapsing",this._config.parent).filter(e=>!t.includes(e))}const i=U.findOne(this._selector);if(e.length){const n=e.find(t=>i!==t);if(t=n?et.getInstance(n):null,t&&t._isTransitioning)return}if(P.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach(e=>{i!==e&&et.getOrCreateInstance(e,{toggle:!1}).hide(),t||M.set(e,"bs.collapse",null)});const n=this._getDimension();this._element.classList.remove("collapse"),this._element.classList.add("collapsing"),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s="scroll"+(n[0].toUpperCase()+n.slice(1));this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse","show"),this._element.style[n]="",P.trigger(this._element,"shown.bs.collapse")},this._element,!0),this._element.style[n]=this._element[s]+"px"}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=this._element.getBoundingClientRect()[t]+"px",d(this._element),this._element.classList.add("collapsing"),this._element.classList.remove("collapse","show");const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse"),P.trigger(this._element,"hidden.bs.collapse")},this._element,!0)}_isShown(t=this._element){return t.classList.contains("show")}_getConfig(t){return(t={...J,...F.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=o(t.parent),r("collapse",t,tt),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=U.find(".collapse .collapse",this._config.parent);U.find('[data-bs-toggle="collapse"]',this._config.parent).filter(e=>!t.includes(e)).forEach(t=>{const e=i(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))})}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach(t=>{e?t.classList.remove("collapsed"):t.classList.add("collapsed"),t.setAttribute("aria-expanded",e)})}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=et.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}P.on(document,"click.bs.collapse.data-api",'[data-bs-toggle="collapse"]',(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const i=e(this);U.find(i).forEach(t=>{et.getOrCreateInstance(t,{toggle:!1}).toggle()})})),m(et);var it="top",nt="bottom",st="right",ot="left",rt=[it,nt,st,ot],at=rt.reduce((function(t,e){return t.concat([e+"-start",e+"-end"])}),[]),lt=[].concat(rt,["auto"]).reduce((function(t,e){return t.concat([e,e+"-start",e+"-end"])}),[]),ct=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function ht(t){return t?(t.nodeName||"").toLowerCase():null}function dt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function ut(t){return t instanceof dt(t).Element||t instanceof Element}function ft(t){return t instanceof dt(t).HTMLElement||t instanceof HTMLElement}function pt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof dt(t).ShadowRoot||t instanceof ShadowRoot)}var mt={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];ft(s)&&ht(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}),{});ft(n)&&ht(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function gt(t){return t.split("-")[0]}var _t=Math.round;function bt(t,e){void 0===e&&(e=!1);var i=t.getBoundingClientRect(),n=1,s=1;return ft(t)&&e&&(n=i.width/t.offsetWidth||1,s=i.height/t.offsetHeight||1),{width:_t(i.width/n),height:_t(i.height/s),top:_t(i.top/s),right:_t(i.right/n),bottom:_t(i.bottom/s),left:_t(i.left/n),x:_t(i.left/n),y:_t(i.top/s)}}function vt(t){var e=bt(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 yt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&pt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function wt(t){return dt(t).getComputedStyle(t)}function Et(t){return["table","td","th"].indexOf(ht(t))>=0}function At(t){return((ut(t)?t.ownerDocument:t.document)||window.document).documentElement}function Tt(t){return"html"===ht(t)?t:t.assignedSlot||t.parentNode||(pt(t)?t.host:null)||At(t)}function Ot(t){return ft(t)&&"fixed"!==wt(t).position?t.offsetParent:null}function Ct(t){for(var e=dt(t),i=Ot(t);i&&Et(i)&&"static"===wt(i).position;)i=Ot(i);return i&&("html"===ht(i)||"body"===ht(i)&&"static"===wt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&ft(t)&&"fixed"===wt(t).position)return null;for(var i=Tt(t);ft(i)&&["html","body"].indexOf(ht(i))<0;){var n=wt(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 kt(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var Lt=Math.max,xt=Math.min,Dt=Math.round;function St(t,e,i){return Lt(t,xt(e,i))}function Nt(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function It(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}var Pt={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=gt(i.placement),l=kt(a),c=[ot,st].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Nt("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:It(t,rt))}(s.padding,i),d=vt(o),u="y"===l?it:ot,f="y"===l?nt:st,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=Ct(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,E=St(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-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)))&&yt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},jt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Mt(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.offsets,r=t.position,a=t.gpuAcceleration,l=t.adaptive,c=t.roundOffsets,h=!0===c?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Dt(Dt(e*n)/n)||0,y:Dt(Dt(i*n)/n)||0}}(o):"function"==typeof c?c(o):o,d=h.x,u=void 0===d?0:d,f=h.y,p=void 0===f?0:f,m=o.hasOwnProperty("x"),g=o.hasOwnProperty("y"),_=ot,b=it,v=window;if(l){var y=Ct(i),w="clientHeight",E="clientWidth";y===dt(i)&&"static"!==wt(y=At(i)).position&&(w="scrollHeight",E="scrollWidth"),y=y,s===it&&(b=nt,p-=y[w]-n.height,p*=a?1:-1),s===ot&&(_=st,u-=y[E]-n.width,u*=a?1:-1)}var A,T=Object.assign({position:r},l&&jt);return a?Object.assign({},T,((A={})[b]=g?"0":"",A[_]=m?"0":"",A.transform=(v.devicePixelRatio||1)<2?"translate("+u+"px, "+p+"px)":"translate3d("+u+"px, "+p+"px, 0)",A)):Object.assign({},T,((e={})[b]=g?p+"px":"",e[_]=m?u+"px":"",e.transform="",e))}var Ht={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:gt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,Mt(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,Mt(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:{}},Bt={passive:!0},Rt={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=dt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,Bt)})),a&&l.addEventListener("resize",i.update,Bt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,Bt)})),a&&l.removeEventListener("resize",i.update,Bt)}},data:{}},Wt={left:"right",right:"left",bottom:"top",top:"bottom"};function zt(t){return t.replace(/left|right|bottom|top/g,(function(t){return Wt[t]}))}var qt={start:"end",end:"start"};function Ft(t){return t.replace(/start|end/g,(function(t){return qt[t]}))}function Ut(t){var e=dt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function $t(t){return bt(At(t)).left+Ut(t).scrollLeft}function Vt(t){var e=wt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Kt(t,e){var i;void 0===e&&(e=[]);var n=function t(e){return["html","body","#document"].indexOf(ht(e))>=0?e.ownerDocument.body:ft(e)&&Vt(e)?e:t(Tt(e))}(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=dt(n),r=s?[o].concat(o.visualViewport||[],Vt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Kt(Tt(r)))}function Xt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Yt(t,e){return"viewport"===e?Xt(function(t){var e=dt(t),i=At(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+$t(t),y:a}}(t)):ft(e)?function(t){var e=bt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Xt(function(t){var e,i=At(t),n=Ut(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Lt(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Lt(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+$t(t),l=-n.scrollTop;return"rtl"===wt(s||i).direction&&(a+=Lt(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(At(t)))}function Qt(t){return t.split("-")[1]}function Gt(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?gt(s):null,r=s?Qt(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case it:e={x:a,y:i.y-n.height};break;case nt:e={x:a,y:i.y+i.height};break;case st:e={x:i.x+i.width,y:l};break;case ot:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?kt(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case"start":e[c]=e[c]-(i[h]/2-n[h]/2);break;case"end":e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function Zt(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?"clippingParents":o,a=i.rootBoundary,l=void 0===a?"viewport":a,c=i.elementContext,h=void 0===c?"popper":c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=Nt("number"!=typeof p?p:It(p,rt)),g="popper"===h?"reference":"popper",_=t.elements.reference,b=t.rects.popper,v=t.elements[u?g:h],y=function(t,e,i){var n="clippingParents"===e?function(t){var e=Kt(Tt(t)),i=["absolute","fixed"].indexOf(wt(t).position)>=0&&ft(t)?Ct(t):t;return ut(i)?e.filter((function(t){return ut(t)&&yt(t,i)&&"body"!==ht(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Yt(t,i);return e.top=Lt(n.top,e.top),e.right=xt(n.right,e.right),e.bottom=xt(n.bottom,e.bottom),e.left=Lt(n.left,e.left),e}),Yt(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}(ut(v)?v:v.contextElement||At(t.elements.popper),r,l),w=bt(_),E=Gt({reference:w,element:b,strategy:"absolute",placement:s}),A=Xt(Object.assign({},b,E)),T="popper"===h?A:w,O={top:y.top-T.top+m.top,bottom:T.bottom-y.bottom+m.bottom,left:y.left-T.left+m.left,right:T.right-y.right+m.right},C=t.modifiersData.offset;if("popper"===h&&C){var k=C[s];Object.keys(O).forEach((function(t){var e=[st,nt].indexOf(t)>=0?1:-1,i=[it,nt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function Jt(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?lt:l,h=Qt(n),d=h?a?at:at.filter((function(t){return Qt(t)===h})):rt,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]=Zt(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[gt(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}var te={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,_=gt(g),b=l||(_!==g&&p?function(t){if("auto"===gt(t))return[];var e=zt(t);return[Ft(t),e,Ft(e)]}(g):[zt(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat("auto"===gt(i)?Jt(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=Zt(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?st:ot:L?nt:it;y[D]>w[D]&&(N=zt(N));var I=zt(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ee(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 ie(t){return[it,st,nt,ot].some((function(e){return t[e]>=0}))}var ne={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=Zt(e,{elementContext:"reference"}),a=Zt(e,{altBoundary:!0}),l=ee(r,n),c=ee(a,s,o),h=ie(l),d=ie(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})}},se={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=lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=gt(t),s=[ot,it].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,[ot,st].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}},oe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},re={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=Zt(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=gt(e.placement),b=Qt(e.placement),v=!b,y=kt(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?it:ot,L="y"===y?nt:st,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P="start"===b?A[x]:T[x],j="start"===b?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?vt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],z=St(0,A[x],H[x]),q=v?A[x]/2-I-z-R-O:P-z-R-O,F=v?-A[x]/2+I+z+W+O:j+z+W+O,U=e.elements.arrow&&Ct(e.elements.arrow),$=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+q-V-$,X=E[y]+F-V;if(o){var Y=St(f?xt(S,K):S,D,f?Lt(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?it:ot,G="x"===y?nt:st,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=St(f?xt(J,K):J,Z,f?Lt(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function ae(t,e,i){void 0===i&&(i=!1);var n,s,o=ft(e),r=ft(e)&&function(t){var e=t.getBoundingClientRect(),i=e.width/t.offsetWidth||1,n=e.height/t.offsetHeight||1;return 1!==i||1!==n}(e),a=At(e),l=bt(t,r),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ht(e)||Vt(a))&&(c=(n=e)!==dt(n)&&ft(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Ut(n)),ft(e)?((h=bt(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=$t(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}var le={placement:"bottom",modifiers:[],strategy:"absolute"};function ce(){for(var t=arguments.length,e=new Array(t),i=0;iP.on(t,"mouseover",h)),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add("show"),this._element.classList.add("show"),P.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(l(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){P.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>P.off(t,"mouseover",h)),this._popper&&this._popper.destroy(),this._menu.classList.remove("show"),this._element.classList.remove("show"),this._element.setAttribute("aria-expanded","false"),F.removeDataAttribute(this._menu,"popper"),P.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...F.getDataAttributes(this._element),...t},r("dropdown",t,this.constructor.DefaultType),"object"==typeof t.reference&&!s(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError("dropdown".toUpperCase()+': Option "reference" provided type "object" without a required "getBoundingClientRect" method.');return t}_createPopper(t){if(void 0===pe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:s(this._config.reference)?e=o(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find(t=>"applyStyles"===t.name&&!1===t.enabled);this._popper=fe(e,this._menu,i),n&&F.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains("show")}_getMenuElement(){return U.next(this._element,".dropdown-menu")[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ye;if(t.classList.contains("dropstart"))return we;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?_e:ge:e?ve:be}_detectNavbar(){return null!==this._element.closest(".navbar")}_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}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=U.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(a);i.length&&b(i,e,"ArrowDown"===t,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Te.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(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=U.find('[data-bs-toggle="dropdown"]');for(let i=0,n=e.length;ie+t),this._setElementAttributes(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight",e=>e+t),this._setElementAttributes(".sticky-top","marginRight",e=>e-t)}_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)[e];t.style[e]=i(Number.parseFloat(s))+"px"})}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight"),this._resetElementAttributes(".sticky-top","marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const i=F.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(F.removeDataAttribute(t,e),t.style[e]=i)})}_applyManipulationCallback(t,e){s(t)?e(t):U.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const Ce={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},ke={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"};class Le{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&d(this._getElement()),this._getElement().classList.add("show"),this._emulateAnimation(()=>{g(t)})):g(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove("show"),this._emulateAnimation(()=>{this.dispose(),g(t)})):g(t)}_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}_getConfig(t){return(t={...Ce,..."object"==typeof t?t:{}}).rootElement=o(t.rootElement),r("backdrop",t,ke),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),P.on(this._getElement(),"mousedown.bs.backdrop",()=>{g(this._config.clickCallback)}),this._isAppended=!0)}dispose(){this._isAppended&&(P.off(this._element,"mousedown.bs.backdrop"),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const xe={trapElement:null,autofocus:!0},De={trapElement:"element",autofocus:"boolean"};class Se{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),P.off(document,".bs.focustrap"),P.on(document,"focusin.bs.focustrap",t=>this._handleFocusin(t)),P.on(document,"keydown.tab.bs.focustrap",t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,P.off(document,".bs.focustrap"))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=U.focusableChildren(i);0===n.length?i.focus():"backward"===this._lastTabNavDirection?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?"backward":"forward")}_getConfig(t){return t={...xe,..."object"==typeof t?t:{}},r("focustrap",t,De),t}}const Ne={backdrop:!0,keyboard:!0,focus:!0},Ie={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"};class Pe extends H{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=U.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new Oe}static get Default(){return Ne}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,"show.bs.modal",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add("modal-open"),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),P.on(this._dialog,"mousedown.dismiss.bs.modal",()=>{P.one(this._element,"mouseup.dismiss.bs.modal",t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showBackdrop(()=>this._showElement(t)))}hide(){if(!this._isShown||this._isTransitioning)return;if(P.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove("show"),P.off(this._element,"click.dismiss.bs.modal"),P.off(this._dialog,"mousedown.dismiss.bs.modal"),this._queueCallback(()=>this._hideModal(),this._element,t)}dispose(){[window,this._dialog].forEach(t=>P.off(t,".bs.modal")),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Le({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Se({trapElement:this._element})}_getConfig(t){return t={...Ne,...F.getDataAttributes(this._element),..."object"==typeof t?t:{}},r("modal",t,Ie),t}_showElement(t){const e=this._isAnimated(),i=U.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||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,i&&(i.scrollTop=0),e&&d(this._element),this._element.classList.add("show"),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,P.trigger(this._element,"shown.bs.modal",{relatedTarget:t})},this._dialog,e)}_setEscapeEvent(){this._isShown?P.on(this._element,"keydown.dismiss.bs.modal",t=>{this._config.keyboard&&"Escape"===t.key?(t.preventDefault(),this.hide()):this._config.keyboard||"Escape"!==t.key||this._triggerBackdropTransition()}):P.off(this._element,"keydown.dismiss.bs.modal")}_setResizeEvent(){this._isShown?P.on(window,"resize.bs.modal",()=>this._adjustDialog()):P.off(window,"resize.bs.modal")}_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("modal-open"),this._resetAdjustments(),this._scrollBar.reset(),P.trigger(this._element,"hidden.bs.modal")})}_showBackdrop(t){P.on(this._element,"click.dismiss.bs.modal",t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())}),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(P.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains("modal-static")||(n||(i.overflowY="hidden"),t.add("modal-static"),this._queueCallback(()=>{t.remove("modal-static"),n||this._queueCallback(()=>{i.overflowY=""},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!p()||i&&!t&&p())&&(this._element.style.paddingLeft=e+"px"),(i&&!t&&!p()||!i&&t&&p())&&(this._element.style.paddingRight=e+"px")}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Pe.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,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=i(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),P.one(e,"show.bs.modal",t=>{t.defaultPrevented||P.one(e,"hidden.bs.modal",()=>{a(this)&&this.focus()})}),Pe.getOrCreateInstance(e).toggle(this)})),B(Pe),m(Pe);const je={backdrop:!0,keyboard:!0,scroll:!1},Me={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"};class He extends H{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return"offcanvas"}static get Default(){return je}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||P.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new Oe).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add("show"),this._queueCallback(()=>{this._config.scroll||this._focustrap.activate(),P.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})},this._element,!0))}hide(){this._isShown&&(P.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove("show"),this._backdrop.hide(),this._queueCallback(()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new Oe).reset(),P.trigger(this._element,"hidden.bs.offcanvas")},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...je,...F.getDataAttributes(this._element),..."object"==typeof t?t:{}},r("offcanvas",t,Me),t}_initializeBackDrop(){return new Le({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Se({trapElement:this._element})}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.offcanvas",t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()})}static jQueryInterface(t){return this.each((function(){const e=He.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,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=i(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;P.one(e,"hidden.bs.offcanvas",()=>{a(this)&&this.focus()});const n=U.findOne(".offcanvas.show");n&&n!==e&&He.getInstance(n).hide(),He.getOrCreateInstance(e).toggle(this)})),P.on(window,"load.bs.offcanvas.data-api",()=>U.find(".offcanvas.show").forEach(t=>He.getOrCreateInstance(t).show())),B(He),m(He);const Be=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Re=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i,We=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,ze=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Be.has(i)||Boolean(Re.test(t.nodeValue)||We.test(t.nodeValue));const n=e.filter(t=>t instanceof RegExp);for(let t=0,e=n.length;t{ze(t,a)||i.removeAttribute(t.nodeName)})}return n.body.innerHTML}const Fe=new Set(["sanitize","allowList","sanitizeFn"]),Ue={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},$e={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Ve={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],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:[]},popperConfig:null},Ke={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"};class Xe extends H{constructor(t,e){if(void 0===pe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return Ve}static get NAME(){return"tooltip"}static get Event(){return Ke}static get DefaultType(){return Ue}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains("show"))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.tip&&this.tip.remove(),this._popper&&this._popper.destroy(),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.Event.SHOW),e=c(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add("fade");const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;M.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),P.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=fe(this._element,n,this._getPopperConfig(r)),n.classList.add("show");const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>{P.on(t,"mouseover",h)});const d=this.tip.classList.contains("fade");this._queueCallback(()=>{const t=this._hoverState;this._hoverState=null,P.trigger(this._element,this.constructor.Event.SHOWN),"out"===t&&this._leave(null,this)},this.tip,d)}hide(){if(!this._popper)return;const t=this.getTipElement();if(P.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove("show"),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>P.off(t,"mouseover",h)),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains("fade");this._queueCallback(()=>{this._isWithActiveTrigger()||("show"!==this._hoverState&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.Event.HIDDEN),this._popper&&(this._popper.destroy(),this._popper=null))},this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove("fade","show"),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".tooltip-inner")}_sanitizeAndSetContent(t,e,i){const n=U.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return s(e)?(e=o(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=qe(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_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"function"==typeof t?t.call(this._element):t}_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:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return $e[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach(t=>{if("click"===t)P.on(this._element,this.constructor.Event.CLICK,this._config.selector,t=>this.toggle(t));else if("manual"!==t){const e="hover"===t?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i="hover"===t?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;P.on(this._element,e,this._config.selector,t=>this._enter(t)),P.on(this._element,i,this._config.selector,t=>this._leave(t))}}),this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e.getTipElement().classList.contains("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e._config.delay&&e._config.delay.show?e._timeout=setTimeout(()=>{"show"===e._hoverState&&e.show()},e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e._config.delay&&e._config.delay.hide?e._timeout=setTimeout(()=>{"out"===e._hoverState&&e.hide()},e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=F.getDataAttributes(this._element);return Object.keys(e).forEach(t=>{Fe.has(t)&&delete e[t]}),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:o(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()),r("tooltip",t,this.constructor.DefaultType),t.sanitize&&(t.template=qe(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map(t=>t.trim()).forEach(e=>t.classList.remove(e))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}static jQueryInterface(t){return this.each((function(){const e=Xe.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(Xe);const Ye={...Xe.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},Qe={...Xe.DefaultType,content:"(string|element|function)"},Ge={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class Ze extends Xe{static get Default(){return Ye}static get NAME(){return"popover"}static get Event(){return Ge}static get DefaultType(){return Qe}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=Ze.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(Ze);const Je={offset:10,method:"auto",target:""},ti={offset:"number",method:"string",target:"(string|element)"},ei=".nav-link, .list-group-item, .dropdown-item";class ii extends H{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,P.on(this._scrollElement,"scroll.bs.scrollspy",()=>this._process()),this.refresh(),this._process()}static get Default(){return Je}static get NAME(){return"scrollspy"}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?t:this._config.method,n="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),U.find(ei,this._config.target).map(t=>{const s=e(t),o=s?U.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[F[i](o).top+n,s]}return null}).filter(t=>t).sort((t,e)=>t[0]-e[0]).forEach(t=>{this._offsets.push(t[0]),this._targets.push(t[1])})}dispose(){P.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...Je,...F.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=o(t.target)||document.documentElement,r("scrollspy",t,ti),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`),i=U.findOne(e.join(","),this._config.target);i.classList.add("active"),i.classList.contains("dropdown-item")?U.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add("active"):U.parents(i,".nav, .list-group").forEach(t=>{U.prev(t,".nav-link, .list-group-item").forEach(t=>t.classList.add("active")),U.prev(t,".nav-item").forEach(t=>{U.children(t,".nav-link").forEach(t=>t.classList.add("active"))})}),P.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){U.find(ei,this._config.target).filter(t=>t.classList.contains("active")).forEach(t=>t.classList.remove("active"))}static jQueryInterface(t){return this.each((function(){const e=ii.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(window,"load.bs.scrollspy.data-api",()=>{U.find('[data-bs-spy="scroll"]').forEach(t=>new ii(t))}),m(ii);class ni extends H{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains("active"))return;let t;const e=i(this._element),n=this._element.closest(".nav, .list-group");if(n){const e="UL"===n.nodeName||"OL"===n.nodeName?":scope > li > .active":".active";t=U.find(e,n),t=t[t.length-1]}const s=t?P.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(P.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,n);const o=()=>{P.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),P.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?U.children(e,".active"):U.find(":scope > li > .active",e))[0],s=i&&n&&n.classList.contains("fade"),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove("show"),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove("active");const t=U.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d(t),t.classList.contains("fade")&&t.classList.add("show");let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&U.find(".dropdown-toggle",e).forEach(t=>t.classList.add("active")),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=ni.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||ni.getOrCreateInstance(this).show()})),m(ni);const si={animation:"boolean",autohide:"boolean",delay:"number"},oi={animation:!0,autohide:!0,delay:5e3};class ri extends H{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return si}static get Default(){return oi}static get NAME(){return"toast"}show(){P.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove("hide"),d(this._element),this._element.classList.add("show"),this._element.classList.add("showing"),this._queueCallback(()=>{this._element.classList.remove("showing"),P.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this._element.classList.contains("show")&&(P.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add("showing"),this._queueCallback(()=>{this._element.classList.add("hide"),this._element.classList.remove("showing"),this._element.classList.remove("show"),P.trigger(this._element,"hidden.bs.toast")},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),super.dispose()}_getConfig(t){return t={...oi,...F.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},r("toast",t,this.constructor.DefaultType),t}_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,"mouseover.bs.toast",t=>this._onInteraction(t,!0)),P.on(this._element,"mouseout.bs.toast",t=>this._onInteraction(t,!1)),P.on(this._element,"focusin.bs.toast",t=>this._onInteraction(t,!0)),P.on(this._element,"focusout.bs.toast",t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ri.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return B(ri),m(ri),{Alert:R,Button:W,Carousel:Z,Collapse:et,Dropdown:Te,Modal:Pe,Offcanvas:He,Popover:Ze,ScrollSpy:ii,Tab:ni,Toast:ri,Tooltip:Xe}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js.map b/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js.map deleted file mode 100644 index a59a60b..0000000 --- a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/manipulator.js","../../js/src/dom/selector-engine.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/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/math.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/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/listScrollParents.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.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/getVariation.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/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.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"],"names":["getSelector","element","selector","getAttribute","hrefAttr","includes","startsWith","split","trim","getSelectorFromElement","document","querySelector","getElementFromSelector","triggerTransitionEnd","dispatchEvent","Event","isElement","obj","jquery","nodeType","getElement","length","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","toString","call","match","toLowerCase","RegExp","test","TypeError","toUpperCase","isVisible","getClientRects","getComputedStyle","getPropertyValue","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","noop","reflow","offsetHeight","getjQuery","jQuery","window","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","index","indexOf","listLength","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","customEventsRegex","nativeEvents","Set","getUidEvent","uid","getEvent","findHandler","events","delegationSelector","uidEventList","i","len","event","originalHandler","normalizeParams","originalTypeEvent","delegationFn","delegation","typeEvent","getTypeEvent","has","addHandler","oneOff","wrapFn","relatedTarget","delegateTarget","this","handlers","previousFn","replace","domElements","querySelectorAll","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","on","one","inNamespace","isNamespace","elementEvent","namespace","storeElementEvent","handlerKey","removeNamespacedHandlers","slice","keyHandlers","trigger","args","isNative","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","evt","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","createEvent","initEvent","CustomEvent","cancelable","key","defineProperty","get","preventDefault","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","BaseComponent","constructor","_element","DATA_KEY","dispose","EVENT_KEY","getOwnPropertyNames","propertyName","_queueCallback","isAnimated","[object Object]","getInstance","VERSION","Error","enableDismissTrigger","component","method","clickEvent","tagName","closest","getOrCreateInstance","Alert","close","_destroyElement","each","data","undefined","Button","toggle","setAttribute","normalizeData","val","normalizeDataKey","chr","button","Manipulator","setDataAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","dataset","filter","pureKey","charAt","getDataAttribute","offset","rect","getBoundingClientRect","top","pageYOffset","left","pageXOffset","position","offsetTop","offsetLeft","SelectorEngine","find","concat","Element","prototype","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","Carousel","super","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","_addEventListeners","_slide","nextWhenVisible","hidden","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","activeIndex","_getItemIndex","order","_handleSwipe","absDeltax","abs","direction","_keydown","_addTouchEventListeners","start","pointerType","touches","clientX","move","end","clearTimeout","itemImg","e","add","_getItemByOrder","isNext","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","_setActiveIndicatorElement","activeIndicator","indicators","parseInt","elementInterval","defaultInterval","directionOrOrder","_directionToOrder","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","_orderToDirection","triggerSlidEvent","completeCallBack","action","ride","carouselInterface","slideIndex","dataApiClickHandler","carousels","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElem","_selector","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activesData","actives","container","tempActiveData","elemActive","dimension","_getDimension","style","scrollSize","triggerArrayLength","selected","triggerArray","isOpen","bottom","right","basePlacements","variationPlacements","reduce","acc","placement","placements","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","styles","assign","effect","_ref2","initialStyles","popper","options","strategy","margin","arrow","reference","hasOwnProperty","attribute","requires","getBasePlacement","round","includeScale","scaleX","scaleY","width","offsetWidth","height","x","y","getLayoutRect","clientRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","userAgent","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","axisProp","centerOffset","_options$element","requiresIfExists","unsetSides","mapToStyles","_Object$assign2","popperRect","offsets","gpuAcceleration","adaptive","roundOffsets","_ref3","dpr","devicePixelRatio","roundOffsetsByDPR","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","computeStyles$1","_ref4","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","data-popper-placement","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","listScrollParents","_element$ownerDocumen","getScrollParent","isBody","visualViewport","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","html","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","getVariation","computeOffsets","variation","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","referenceElement","clippingClientRect","mainClippingParents","clippingParents","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","_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","data-popper-reference-hidden","data-popper-escaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_offset","_min","_max","_preventedOffset","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","DEFAULT_OPTIONS","modifiers","areValidElements","_len","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","cleanupModifierEffects","merged","visited","result","modifier","dep","depModifier","orderModifiers","current","existing","m","_ref3$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","REGEXP_KEYDOWN","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","display","popperConfig","autoClose","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","getParentFromElement","_createPopper","focus","_completeHide","Popper","_getPopperConfig","isDisplayStatic","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","items","toggles","context","composedPath","isMenuTarget","isActive","stopPropagation","getToggleButton","clearMenus","dataApiKeydownHandler","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_saveInitialAttribute","styleProp","scrollbarWidth","_applyManipulationCallback","_resetElementAttributes","actualValue","removeProperty","callBack","isOverflowing","className","rootElement","clickCallback","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","trapElement","autofocus","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_ignoreBackdropClick","_scrollBar","_isAnimated","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_triggerBackdropTransition","_resetAdjustments","currentTarget","isModalOverflowing","isBodyOverflowing","paddingLeft","paddingRight","showEvent","Offcanvas","visibility","blur","allReadyOpen","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","allowList","sanitizeFn","createdDocument","DOMParser","parseFromString","allowlistKeys","elName","attributeList","allowedAttributes","innerHTML","DISALLOWED_ATTRIBUTES","animation","template","title","delay","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","*","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","_initializeOnDelegatedTarget","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","prefix","floor","random","getElementById","getUID","attachment","_getAttachment","_addAttachmentClass","_resolvePossibleFunction","prevHoverState","_cleanTipClass","getTitle","setContent","_sanitizeAndSetContent","content","templateElement","setElementContent","textContent","updateAttachment","_getDelegateConfig","_handlePopperPlacementChange","_getBasicClassPrefix","eventIn","eventOut","_fixTitle","originalTitleType","dataAttributes","dataAttr","basicClassPrefixRegex","tabClass","token","tClass","Popover","_getContent","SELECTOR_LINK_ITEMS","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","item","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","link","listGroup","navItem","spy","Tab","listElement","itemSelector","hideEvent","complete","active","isTransitioning","_transitionComplete","dropdownChild","dropdownElement","dropdown","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","_onInteraction","isInteracting"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\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 getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = 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 (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = `#${hrefAttr.split('#')[1]}`\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\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 = obj => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n if (typeof obj.jquery !== 'undefined') {\n obj = obj[0]\n }\n\n return typeof obj.nodeType !== 'undefined'\n}\n\nconst getElement = obj => {\n if (isElement(obj)) { // it's a jQuery object or a node element\n return obj.jquery ? obj[0] : obj\n }\n\n if (typeof obj === 'string' && obj.length > 0) {\n return document.querySelector(obj)\n }\n\n return null\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n return getComputedStyle(element).getPropertyValue('visibility') === 'visible'\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.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight\n}\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return 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 DOMContentLoadedCallbacks.forEach(callback => callback())\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 = callback => {\n if (typeof callback === 'function') {\n callback()\n }\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 let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n if (index === -1) {\n return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]\n }\n\n const listLength = list.length\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 getElement,\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n getNextActiveElement,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin,\n execute,\n executeAfterTransition\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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}\nconst customEventsRegex = /^(mouseenter|mouseleave)/i\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 * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getEvent(element) {\n const uid = getUidEvent(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 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 (let i = domElements.length; i--;) {\n if (domElements[i] === target) {\n event.delegateTarget = target\n\n if (handler.oneOff) {\n // eslint-disable-next-line unicorn/consistent-destructuring\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n\n // To please ESLint\n return null\n }\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n const uidEventList = Object.keys(events)\n\n for (let i = 0, len = uidEventList.length; i < len; i++) {\n const event = events[uidEventList[i]]\n\n if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n return event\n }\n }\n\n return null\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n const delegation = typeof handler === 'string'\n const originalHandler = delegation ? delegationFn : handler\n\n let typeEvent = getTypeEvent(originalTypeEvent)\n const isNative = nativeEvents.has(typeEvent)\n\n if (!isNative) {\n typeEvent = originalTypeEvent\n }\n\n return [delegation, originalHandler, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n if (!handler) {\n handler = delegationFn\n delegationFn = null\n }\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 (customEventsRegex.test(originalTypeEvent)) {\n const wrapFn = 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 if (delegationFn) {\n delegationFn = wrapFn(delegationFn)\n } else {\n handler = wrapFn(handler)\n }\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const events = getEvent(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null)\n\n if (previousFn) {\n previousFn.oneOff = previousFn.oneOff && oneOff\n\n return\n }\n\n const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = delegation ?\n bootstrapDelegationHandler(element, handler, delegationFn) :\n bootstrapHandler(element, handler)\n\n fn.delegationSelector = delegation ? handler : null\n fn.originalHandler = originalHandler\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, delegation)\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 Object.keys(storeElementEvent).forEach(handlerKey => {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n\n removeHandler(element, events, typeEvent, event.originalHandler, 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, delegationFn) {\n addHandler(element, event, handler, delegationFn, false)\n },\n\n one(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFn) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getEvent(element)\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof originalHandler !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!events || !events[typeEvent]) {\n return\n }\n\n removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null)\n return\n }\n\n if (isNamespace) {\n Object.keys(events).forEach(elementEvent => {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n })\n }\n\n const storeElementEvent = events[typeEvent] || {}\n Object.keys(storeElementEvent).forEach(keyHandlers => {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n\n removeHandler(element, events, typeEvent, event.originalHandler, 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 const isNative = nativeEvents.has(typeEvent)\n\n let jQueryEvent\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n let evt = null\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 if (isNative) {\n evt = document.createEvent('HTMLEvents')\n evt.initEvent(typeEvent, bubbles, true)\n } else {\n evt = new CustomEvent(event, {\n bubbles,\n cancelable: true\n })\n }\n\n // merge custom information in our event\n if (typeof args !== 'undefined') {\n Object.keys(args).forEach(key => {\n Object.defineProperty(evt, key, {\n get() {\n return args[key]\n }\n })\n })\n }\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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 (v5.1.0): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport {\n executeAfterTransition,\n getElement\n} from './util/index'\nimport EventHandler from './dom/event-handler'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.1.0'\n\nclass BaseComponent {\n constructor(element) {\n element = getElement(element)\n\n if (!element) {\n return\n }\n\n this._element = element\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n Object.getOwnPropertyNames(this).forEach(propertyName => {\n this[propertyName] = null\n })\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n /** Static */\n\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 NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\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\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): 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'\nimport { getElementFromSelector, isDisabled } from './index'\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 = 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 (v5.1.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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 * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\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\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 * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nenableDismissTrigger(Alert, 'close')\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\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\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 * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\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 * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\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\n Object.keys(element.dataset)\n .filter(key => key.startsWith('bs'))\n .forEach(key => {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\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 offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + window.pageYOffset,\n left: rect.left + window.pageXOffset\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\nconst NODE_TEXT = 3\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)\n .filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n\n let ancestor = element.parentNode\n\n while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n if (ancestor.matches(selector)) {\n parents.push(ancestor)\n }\n\n ancestor = ancestor.parentNode\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\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\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isRTL,\n isVisible,\n getNextActiveElement,\n reflow,\n triggerTransitionEnd,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\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_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 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'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_INDICATOR = '[data-bs-target]'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\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(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config && this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._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 if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const order = index > activeIndex ?\n ORDER_NEXT :\n ORDER_PREV\n\n this._slide(order, this._items[index])\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n if (!direction) {\n return\n }\n\n this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT)\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, event => this.pause(event))\n EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch && this._touchSupported) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n const start = event => {\n if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n this.touchStartX = event.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n this.touchDeltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this.touchStartX\n }\n\n const end = event => {\n if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n this.touchDeltaX = event.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\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(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault())\n })\n\n if (this._pointerEvent) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event))\n }\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(direction)\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n SelectorEngine.find(SELECTOR_ITEM, element.parentNode) :\n []\n\n return this._items.indexOf(element)\n }\n\n _getItemByOrder(order, activeElement) {\n const isNext = order === ORDER_NEXT\n return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap)\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element))\n\n return EventHandler.trigger(this._element, EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\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 indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement)\n\n for (let i = 0; i < indicators.length; i++) {\n if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n indicators[i].classList.add(CLASS_NAME_ACTIVE)\n indicators[i].setAttribute('aria-current', 'true')\n break\n }\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(directionOrOrder, element) {\n const order = this._directionToOrder(directionOrOrder)\n const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || this._getItemByOrder(order, activeElement)\n\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n const isNext = order === ORDER_NEXT\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n const eventDirectionName = this._orderToDirection(order)\n\n if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n if (this._isSliding) {\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const triggerSlidEvent = () => {\n EventHandler.trigger(this._element, EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n }\n\n if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\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 setTimeout(triggerSlidEvent, 0)\n }\n\n this._queueCallback(completeCallBack, activeElement, true)\n } else {\n activeElement.classList.remove(CLASS_NAME_ACTIVE)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n triggerSlidEvent()\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _directionToOrder(direction) {\n if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n return direction\n }\n\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 (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n return order\n }\n\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\n static carouselInterface(element, config) {\n const data = Carousel.getOrCreateInstance(element, config)\n\n let { _config } = data\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n Carousel.carouselInterface(this, config)\n })\n }\n\n static dataApiClickHandler(event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...Manipulator.getDataAttributes(target),\n ...Manipulator.getDataAttributes(this)\n }\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel.carouselInterface(target, config)\n\n if (slideIndex) {\n Carousel.getInstance(target).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler)\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (let i = 0, len = carousels.length; i < len; i++) {\n Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]))\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n getElementFromSelector,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n toggle: true,\n parent: null\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(null|element)'\n}\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_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._isTransitioning = false\n this._config = this._getConfig(config)\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElem => foundElem === this._element)\n\n if (selector !== null && filterElement.length) {\n this._selector = selector\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\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\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 actives = []\n let activesData\n\n if (this._config.parent) {\n const children = SelectorEngine.find(`.${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`, this._config.parent)\n actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)) // remove children if greater depth\n }\n\n const container = SelectorEngine.findOne(this._selector)\n if (actives.length) {\n const tempActiveData = actives.find(elem => container !== elem)\n activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null\n\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n actives.forEach(elemActive => {\n if (container !== elemActive) {\n Collapse.getOrCreateInstance(elemActive, { toggle: false }).hide()\n }\n\n if (!activesData) {\n Data.set(elemActive, DATA_KEY, null)\n }\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 const triggerArrayLength = this._triggerArray.length\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const elem = getElementFromSelector(trigger)\n\n if (elem && !this._isShown(elem)) {\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 _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n typeCheckConfig(NAME, config, DefaultType)\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 = SelectorEngine.find(`.${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`, this._config.parent)\n SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))\n .forEach(element => {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n })\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n triggerArray.forEach(elem => {\n if (isOpen) {\n elem.classList.remove(CLASS_NAME_COLLAPSED)\n } else {\n elem.classList.add(CLASS_NAME_COLLAPSED)\n }\n\n elem.setAttribute('aria-expanded', isOpen)\n })\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\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 * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\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 const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n selectorElements.forEach(element => {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\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}","import { isHTMLElement } from \"./instanceOf.js\";\nvar round = Math.round;\nexport default function getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (isHTMLElement(element) && includeScale) {\n // Fallback to 1 in case both values are `0`\n scaleX = rect.width / element.offsetWidth || 1;\n scaleY = rect.height / element.offsetHeight || 1;\n }\n\n return {\n width: round(rect.width / scaleX),\n height: round(rect.height / scaleY),\n top: round(rect.top / scaleY),\n right: round(rect.right / scaleX),\n bottom: round(rect.bottom / scaleY),\n left: round(rect.left / scaleX),\n x: round(rect.left / scaleX),\n y: round(rect.top / scaleY)\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 } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.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 = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\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 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}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport default function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\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\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.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 (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\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};","import { top, left, right, bottom } 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 { 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) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(round(x * dpr) / dpr) || 0,\n y: round(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 offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets;\n\n var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n _ref3$x = _ref3.x,\n x = _ref3$x === void 0 ? 0 : _ref3$x,\n _ref3$y = _ref3.y,\n y = _ref3$y === void 0 ? 0 : _ref3$y;\n\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') {\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) {\n sideY = bottom; // $FlowFixMe[prop-missing]\n\n y -= offsetParent[heightProp] - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left) {\n sideX = right; // $FlowFixMe[prop-missing]\n\n x -= offsetParent[widthProp] - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\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) < 2 ? \"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(_ref4) {\n var state = _ref4.state,\n options = _ref4.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\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\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 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}","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}","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) {\n var rect = getBoundingClientRect(element);\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) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : 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) {\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);\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));\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\";\nexport default function getViewportRect(element) {\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; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\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}","export default function getVariation(placement) {\n return placement.split('-')[1];\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 getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.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$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 referenceElement = state.elements.reference;\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);\n var referenceClientRect = getBoundingClientRect(referenceElement);\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\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\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\";\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 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 { max as mathMax, min as mathMin } 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 data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis || checkAltAxis) {\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 = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - 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 - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\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 = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n if (checkMainAxis) {\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 _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(tether ? mathMin(_min, tetherMin) : _min, _offset, tether ? mathMax(_max, tetherMax) : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\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\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = rect.width / element.offsetWidth || 1;\n var scaleY = 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);\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 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 getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\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(options) {\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 }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\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 if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\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 var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\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 if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\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 (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.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 { 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 { 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 (v5.1.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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 SPACE_KEY = 'Space'\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 REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`)\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_NAVBAR = 'navbar'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]'\nconst SELECTOR_MENU = '.dropdown-menu'\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'\n\nconst Default = {\n offset: [0, 2],\n boundary: 'clippingParents',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null,\n autoClose: true\n}\n\nconst DefaultType = {\n offset: '(array|string|function)',\n boundary: '(string|element)',\n reference: '(string|element|object)',\n display: 'string',\n popperConfig: '(null|object|function)',\n autoClose: '(boolean|string)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n\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\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown(this._menu)) {\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 const parent = Dropdown.getParentFromElement(this._element)\n // Totally disable Popper for Dropdowns in Navbar\n if (this._inNavbar) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'none')\n } else {\n this._createPopper(parent)\n }\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 !parent.closest(SELECTOR_NAVBAR_NAV)) {\n [].concat(...document.body.children)\n .forEach(elem => EventHandler.on(elem, 'mouseover', noop))\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(this._menu)) {\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\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 [].concat(...document.body.children)\n .forEach(elem => EventHandler.off(elem, 'mouseover', noop))\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 = {\n ...this.constructor.Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\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(parent) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = 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 const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false)\n\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n\n if (isDisplayStatic) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static')\n }\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getMenuElement() {\n return SelectorEngine.next(this._element, SELECTOR_MENU)[0]\n }\n\n _getPlacement() {\n const parentDropdown = this._element.parentNode\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 // 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(`.${CLASS_NAME_NAVBAR}`) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(val => Number.parseInt(val, 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\n if (this._config.display === 'static') {\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible)\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\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 && (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY))) {\n return\n }\n\n const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const context = Dropdown.getInstance(toggles[i])\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n if (!context._isShown()) {\n continue\n }\n\n const relatedTarget = {\n relatedTarget: context._element\n }\n\n if (event) {\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 if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static getParentFromElement(element) {\n return getElementFromSelector(element) || element.parentNode\n }\n\n static dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.key === SPACE_KEY || (event.key !== ESCAPE_KEY &&\n ((event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY) ||\n event.target.closest(SELECTOR_MENU))) :\n !REGEXP_KEYDOWN.test(event.key)) {\n return\n }\n\n const isActive = this.classList.contains(CLASS_NAME_SHOW)\n\n if (!isActive && event.key === ESCAPE_KEY) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (isDisabled(this)) {\n return\n }\n\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0]\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (event.key === ESCAPE_KEY) {\n instance.hide()\n return\n }\n\n if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n if (!isActive) {\n instance.show()\n }\n\n instance._selectMenuItem(event)\n return\n }\n\n if (!isActive || event.key === SPACE_KEY) {\n Dropdown.clearMenus()\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\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 * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\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, 'paddingRight', 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, 'paddingRight', calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width)\n }\n\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProp, 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, styleProp)\n const calculatedValue = window.getComputedStyle(element)[styleProp]\n element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, 'paddingRight')\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight')\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight')\n }\n\n _saveInitialAttribute(element, styleProp) {\n const actualValue = element.style[styleProp]\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProp, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProp) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProp)\n if (typeof value === 'undefined') {\n element.style.removeProperty(styleProp)\n } else {\n Manipulator.removeDataAttribute(element, styleProp)\n element.style[styleProp] = value\n }\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n } else {\n SelectorEngine.find(selector, this._element).forEach(callBack)\n }\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow, typeCheckConfig } from './index'\n\nconst Default = {\n className: 'modal-backdrop',\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n isAnimated: false,\n rootElement: 'body', // give the choice to place backdrop under different elements\n clickCallback: null\n}\n\nconst DefaultType = {\n className: 'string',\n isVisible: 'boolean',\n isAnimated: 'boolean',\n rootElement: '(element|string)',\n clickCallback: '(function|null)'\n}\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nclass Backdrop {\n constructor(config) {\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n if (this._config.isAnimated) {\n reflow(this._getElement())\n }\n\n this._getElement().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 // Private\n\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 _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' ? config : {})\n }\n\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n this._config.rootElement.append(this._getElement())\n\n EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\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 _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport { typeCheckConfig } from './index'\n\nconst Default = {\n trapElement: null, // The element to trap focus inside of\n autofocus: true\n}\n\nconst DefaultType = {\n trapElement: 'element',\n autofocus: 'boolean'\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\nclass FocusTrap {\n constructor(config) {\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n activate() {\n const { trapElement, autofocus } = this._config\n\n if (this._isActive) {\n return\n }\n\n if (autofocus) {\n 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\n _handleFocusin(event) {\n const { target } = event\n const { trapElement } = this._config\n\n if (\n target === document ||\n target === trapElement ||\n trapElement.contains(target)\n ) {\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 _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isRTL,\n isVisible,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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 Default = {\n backdrop: true,\n keyboard: true,\n focus: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean'\n}\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_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.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 SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\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._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\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\n if (this._isAnimated()) {\n this._isTransitioning = true\n }\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n if (event.target === this._element) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => 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 const isAnimated = this._isAnimated()\n\n if (isAnimated) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n EventHandler.off(this._element, EVENT_CLICK_DISMISS)\n EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS)\n\n this._queueCallback(() => this._hideModal(), this._element, isAnimated)\n }\n\n dispose() {\n [window, this._dialog]\n .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\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 _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const isAnimated = this._isAnimated()\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\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 if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n if (isAnimated) {\n reflow(this._element)\n }\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, isAnimated)\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.key === ESCAPE_KEY) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {\n this._triggerBackdropTransition()\n }\n })\n } else {\n EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog())\n } else {\n EventHandler.off(window, EVENT_RESIZE)\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 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 _showBackdrop(callback) {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === true) {\n this.hide()\n } else if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n }\n })\n\n this._backdrop.show(callback)\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 { classList, scrollHeight, style } = this._element\n const isModalOverflowing = scrollHeight > document.documentElement.clientHeight\n\n // return if the following background transition hasn't yet completed\n if ((!isModalOverflowing && style.overflowY === 'hidden') || classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n style.overflowY = 'hidden'\n }\n\n classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n this._queueCallback(() => {\n style.overflowY = ''\n }, this._dialog)\n }\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 && !isRTL()) || (isBodyOverflowing && !isModalOverflowing && isRTL())) {\n this._element.style.paddingLeft = `${scrollbarWidth}px`\n }\n\n if ((isBodyOverflowing && !isModalOverflowing && !isRTL()) || (!isBodyOverflowing && isModalOverflowing && isRTL())) {\n this._element.style.paddingRight = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n\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 * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = 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 const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible,\n typeCheckConfig\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\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 Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: 'boolean',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\nconst CLASS_NAME_SHOW = 'show'\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_HIDDEN = `hidden${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\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\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._element.style.visibility = 'visible'\n\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const completeCallBack = () => {\n if (!this._config.scroll) {\n this._focustrap.activate()\n }\n\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.remove(CLASS_NAME_SHOW)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._element.style.visibility = 'hidden'\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\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _initializeBackDrop() {\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible: this._config.backdrop,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: () => this.hide()\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 (this._config.keyboard && event.key === ESCAPE_KEY) {\n this.hide()\n }\n })\n }\n\n // Static\n\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 * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = 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 allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (allReadyOpen && allReadyOpen !== target) {\n Offcanvas.getInstance(allReadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () =>\n SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())\n)\n\nenableDismissTrigger(Offcanvas)\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attrName)) {\n if (uriAttrs.has(attrName)) {\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true\n }\n }\n\n return false\n}\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 div: [],\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\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const allowlistKeys = Object.keys(allowList)\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (!allowlistKeys.includes(elName)) {\n el.remove()\n\n continue\n }\n\n const attributeList = [].concat(...el.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, allowedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n defineJQueryPlugin,\n findShadowRoot,\n getElement,\n getUID,\n isElement,\n isRTL,\n noop,\n typeCheckConfig\n} from './util/index'\nimport { DefaultAllowlist, sanitizeHtml } from './util/sanitizer'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(array|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacements: 'array',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n allowList: 'object',\n popperConfig: '(null|object|function)'\n}\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 animation: true,\n template: '
' +\n '
' +\n '
' +\n '
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: [0, 0],\n container: false,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n boundary: 'clippingParents',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n allowList: DefaultAllowlist,\n popperConfig: null\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\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\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\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)')\n }\n\n super(element)\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this._config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get Event() {\n return Event\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\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(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const context = this._initializeOnDelegatedTarget(event)\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\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.tip) {\n this.tip.remove()\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\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.Event.SHOW)\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = shadowRoot === null ?\n this._element.ownerDocument.documentElement.contains(this._element) :\n shadowRoot.contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this._element.setAttribute('aria-describedby', tipId)\n\n if (this._config.animation) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n\n const attachment = this._getAttachment(placement)\n this._addAttachmentClass(attachment)\n\n const { container } = this._config\n Data.set(tip, this.constructor.DATA_KEY, this)\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.Event.INSERTED)\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n const customClass = this._resolvePossibleFunction(this._config.customClass)\n if (customClass) {\n tip.classList.add(...customClass.split(' '))\n }\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 [].concat(...document.body.children).forEach(element => {\n EventHandler.on(element, 'mouseover', noop)\n })\n }\n\n const complete = () => {\n const prevHoverState = this._hoverState\n\n this._hoverState = null\n EventHandler.trigger(this._element, this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(complete, this.tip, isAnimated)\n }\n\n hide() {\n if (!this._popper) {\n return\n }\n\n const tip = this.getTipElement()\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (this._hoverState !== HOVER_STATE_SHOW) {\n tip.remove()\n }\n\n this._cleanTipClass()\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.Event.HIDDEN)\n\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE)\n if (hideEvent.defaultPrevented) {\n return\n }\n\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 [].concat(...document.body.children)\n .forEach(element => EventHandler.off(element, 'mouseover', noop))\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(complete, this.tip, isAnimated)\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.update()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n getTipElement() {\n if (this.tip) {\n return this.tip\n }\n\n const element = document.createElement('div')\n element.innerHTML = this._config.template\n\n const tip = element.children[0]\n this.setContent(tip)\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n\n this.tip = tip\n return this.tip\n }\n\n setContent(tip) {\n this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER)\n }\n\n _sanitizeAndSetContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!content && templateElement) {\n templateElement.remove()\n return\n }\n\n // we use append for html objects to maintain js events\n this.setElementContent(templateElement, content)\n }\n\n setElementContent(element, content) {\n if (element === null) {\n return\n }\n\n if (isElement(content)) {\n content = getElement(content)\n\n // content is a DOM node or a jQuery\n if (this._config.html) {\n if (content.parentNode !== element) {\n element.innerHTML = ''\n element.append(content)\n }\n } else {\n element.textContent = content.textContent\n }\n\n return\n }\n\n if (this._config.html) {\n if (this._config.sanitize) {\n content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn)\n }\n\n element.innerHTML = content\n } else {\n element.textContent = content\n }\n }\n\n getTitle() {\n const title = this._element.getAttribute('data-bs-original-title') || this._config.title\n\n return this._resolvePossibleFunction(title)\n }\n\n updateAttachment(attachment) {\n if (attachment === 'right') {\n return 'end'\n }\n\n if (attachment === 'left') {\n return 'start'\n }\n\n return attachment\n }\n\n // Private\n\n _initializeOnDelegatedTarget(event, context) {\n return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(val => Number.parseInt(val, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(content) {\n return typeof content === 'function' ? content.call(this._element) : content\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: 'onChange',\n enabled: true,\n phase: 'afterWrite',\n fn: data => this._handlePopperPlacementChange(data)\n }\n ],\n onFirstUpdate: data => {\n if (data.options.placement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n }\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _addAttachmentClass(attachment) {\n this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event))\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event))\n EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event))\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 if (this._config.selector) {\n this._config = {\n ...this._config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n const originalTitleType = typeof this._element.getAttribute('data-bs-original-title')\n\n if (title || originalTitleType !== 'string') {\n this._element.setAttribute('data-bs-original-title', title || '')\n if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n context = this._initializeOnDelegatedTarget(event, context)\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context._config.delay || !context._config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context._config.delay.show)\n }\n\n _leave(event, context) {\n context = this._initializeOnDelegatedTarget(event, context)\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = context._element.contains(event.relatedTarget)\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context._config.delay || !context._config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context._config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n Object.keys(dataAttributes).forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\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 typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\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 _cleanTipClass() {\n const tip = this.getTipElement()\n const basicClassPrefixRegex = new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`, 'g')\n const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex)\n if (tabClass !== null && tabClass.length > 0) {\n tabClass.map(token => token.trim())\n .forEach(tClass => tip.classList.remove(tClass))\n }\n }\n\n _getBasicClassPrefix() {\n return CLASS_PREFIX\n }\n\n _handlePopperPlacementChange(popperData) {\n const { state } = popperData\n\n if (!state) {\n return\n }\n\n this.tip = state.elements.popper\n this._cleanTipClass()\n this._addAttachmentClass(this._getAttachment(state.placement))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.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 * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-popover'\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n offset: [0, 8],\n trigger: 'click',\n content: '',\n template: '
' +\n '
' +\n '

' +\n '
' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get Event() {\n return Event\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n setContent(tip) {\n this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE)\n this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT)\n }\n\n // Private\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n _getBasicClassPrefix() {\n return CLASS_PREFIX\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.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 * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${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_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_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._scrollElement = this._element.tagName === 'BODY' ? window : this._element\n this._config = this._getConfig(config)\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET :\n METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod :\n this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() :\n 0\n\n this._offsets = []\n this._targets = []\n this._scrollHeight = this._getScrollHeight()\n\n const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n\n targets.map(element => {\n const targetSelector = getSelectorFromElement(element)\n const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n return [\n Manipulator[offsetMethod](target).top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n EventHandler.off(this._scrollElement, EVENT_KEY)\n super.dispose()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n config.target = getElement(config.target) || document.documentElement\n\n typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset :\n this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight :\n this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = SELECTOR_LINK_ITEMS.split(',')\n .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const link = SelectorEngine.findOne(queries.join(','), this._config.target)\n\n link.classList.add(CLASS_NAME_ACTIVE)\n if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n } else {\n SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n .forEach(listGroup => {\n // Set triggered links parents as active\n // With both

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